File: BaseGroundDrawer.h

package info (click to toggle)
spring 98.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 41,928 kB
  • ctags: 60,665
  • sloc: cpp: 356,167; ansic: 39,434; python: 12,228; java: 12,203; awk: 5,856; sh: 1,719; xml: 997; perl: 405; php: 253; objc: 194; makefile: 72; sed: 2
file content (143 lines) | stat: -rw-r--r-- 3,724 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */

#ifndef _BASE_GROUND_DRAWER_H
#define _BASE_GROUND_DRAWER_H

#include <map>
#include "MapDrawPassTypes.h"
#include "Rendering/GL/myGL.h"
#include "Rendering/GL/PBO.h"
#include "System/float3.h"
#include "System/type2.h"

#define NUM_INFOTEXTURES (1 + 4 + 3)

class CMetalMap;
class CHeightLinePalette;
class CBaseGroundTextures;
class CCamera;

namespace GL {
	struct GeometryBuffer;
	struct LightHandler;
}

class CBaseGroundDrawer
{
public:
	enum {
		COLOR_R = 2,
		COLOR_G = 1,
		COLOR_B = 0,
		COLOR_A = 3,
	};
	enum BaseGroundDrawMode {
		drawNormal   = 0,
		drawLos      = 1, // L (';' does not toggle it)
		drawMetal    = 2, // F4
		drawHeight   = 3, // F1
		drawPathTrav = 4, // F2
		drawPathHeat = 5, // not hotkeyed, command-only
		drawPathFlow = 6, // not hotkeyed, command-only
		drawPathCost = 7, // not hotkeyed, command-only
	};

	CBaseGroundDrawer();
	virtual ~CBaseGroundDrawer();
	CBaseGroundDrawer(const CBaseGroundDrawer&) = delete; // no-copy

	virtual void Draw(const DrawPass::e& drawPass) = 0;
	virtual void DrawShadowPass() {}

	virtual void SetupBaseDrawPass() {}
	virtual void SetupReflDrawPass() {}
	virtual void SetupRefrDrawPass() {}

	virtual void Update() = 0;
	virtual void UpdateSunDir() = 0;

	virtual void IncreaseDetail() = 0;
	virtual void DecreaseDetail() = 0;
	virtual int GetGroundDetail(const DrawPass::e& drawPass = DrawPass::Normal) const = 0;

	virtual void SetDrawMode(BaseGroundDrawMode dm) { drawMode = dm; }
	virtual void SetDrawDeferredPass(bool) {}
	virtual bool ToggleMapBorder() { drawMapEdges = !drawMapEdges; return drawMapEdges; }

	virtual const GL::LightHandler* GetLightHandler() const { return NULL; }
	virtual       GL::LightHandler* GetLightHandler()       { return NULL; }
	virtual const GL::GeometryBuffer* GetGeometryBuffer() const { return NULL; }
	virtual       GL::GeometryBuffer* GetGeometryBuffer()       { return NULL; }

	void DrawTrees(bool drawReflection = false) const;

	// Everything that deals with drawing extra textures on top
	void DisableExtraTexture();
	void SetHeightTexture();
	void SetMetalTexture();
	void TogglePathTexture(BaseGroundDrawMode);
	void ToggleLosTexture();
	void ToggleRadarAndJammer();
	bool UpdateExtraTexture(unsigned int texDrawMode);

	bool DrawExtraTex() const { return drawMode != drawNormal; }
	bool DrawDeferred() const { return drawDeferred; }

	bool UseAdvShading() const { return advShading; }
	bool WireFrameMode() const { return wireframe; }

	bool& UseAdvShadingRef() { return advShading; }
	bool& WireFrameModeRef() { return wireframe; }


	BaseGroundDrawMode GetDrawMode() const { return drawMode; }
	CBaseGroundTextures* GetGroundTextures() { return groundTextures; }

	GLuint GetInfoTexture(unsigned int idx) const { return infoTextureIDs[idx]; }
	GLuint GetActiveInfoTexture() const { return infoTextureIDs[drawMode]; }

	int2 GetInfoTexSize() const;

	void UpdateCamRestraints(CCamera* camera);

public:
	bool drawRadarAndJammer;
	bool drawLineOfSight;

	bool highResLosTex;
	bool highResInfoTex;
	bool highResInfoTexWanted;

	float LODScaleReflection;
	float LODScaleRefraction;
	float LODScaleTerrainReflection;

	int jamColor[3];
	int losColor[3];
	int radarColor[3];
	int alwaysColor[3];

	static const int losColorScale = 10000;

	int updateTextureState;
	int extraTextureUpdateRate;

protected:
	BaseGroundDrawMode drawMode;

	// note: first texture ID is always 0!
	GLuint infoTextureIDs[NUM_INFOTEXTURES];

	PBO infoTexPBO;

	CHeightLinePalette* heightLinePal;
	CBaseGroundTextures* groundTextures;

	bool drawMapEdges;
	bool drawDeferred;

	bool wireframe;
	bool advShading;
};

#endif // _BASE_GROUND_DRAWER_H