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
|
/* 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 "MapDrawPassTypes.h"
class CBaseGroundTextures;
class CCamera;
namespace GL {
struct GeometryBuffer;
struct LightHandler;
}
struct LuaMapShaderData {
// [0] := standard program from gl.CreateShader
// [1] := deferred program from gl.CreateShader
unsigned int shaderIDs[2];
};
class CBaseGroundDrawer
{
public:
CBaseGroundDrawer();
virtual ~CBaseGroundDrawer();
CBaseGroundDrawer(const CBaseGroundDrawer&) = delete; // no-copy
virtual void Draw(const DrawPass::e& drawPass) = 0;
virtual void DrawShadowPass() {}
virtual void Update() = 0;
virtual void UpdateRenderState() = 0;
virtual void IncreaseDetail() = 0;
virtual void DecreaseDetail() = 0;
virtual void SetDetail(int newGroundDetail) = 0;
virtual int GetGroundDetail(const DrawPass::e& drawPass = DrawPass::Normal) const = 0;
virtual void SetLuaShader(const LuaMapShaderData*) {}
virtual void SetDrawForwardPass(bool b) { drawForward = b; }
virtual void SetDrawDeferredPass(bool) {}
virtual bool ToggleMapBorder() { drawMapEdges = !drawMapEdges; return drawMapEdges; }
virtual const GL::LightHandler* GetLightHandler() const { return nullptr; }
virtual GL::LightHandler* GetLightHandler() { return nullptr; }
virtual const GL::GeometryBuffer* GetGeometryBuffer() const { return nullptr; }
virtual GL::GeometryBuffer* GetGeometryBuffer() { return nullptr; }
void DrawTrees(bool drawReflection = false) const;
bool DrawForward() const { return drawForward; }
bool DrawDeferred() const { return drawDeferred; }
bool UseAdvShading() const { return advShading; }
bool WireFrameMode() const { return wireframe; }
bool& UseAdvShadingRef() { return advShading; }
bool& WireFrameModeRef() { return wireframe; }
CBaseGroundTextures* GetGroundTextures() { return groundTextures; }
public:
float LODScaleReflection;
float LODScaleRefraction;
float LODScaleTerrainReflection;
int jamColor[3];
int losColor[3];
int radarColor[3];
int alwaysColor[3];
int radarColor2[3]; // Color of inner radar edge.
static const int losColorScale = 10000;
protected:
CBaseGroundTextures* groundTextures;
bool drawForward;
bool drawDeferred;
bool drawMapEdges;
bool wireframe;
bool advShading;
};
#endif // _BASE_GROUND_DRAWER_H
|