18 #include "precompiled.h"
41 template<
typename S,
typename T>
bool operator()(
const std::pair<S, T>& a,
const std::pair<S, T>& b)
const
43 return a.second < b.second;
52 template <
typename T>
bool operator()(
const std::pair<S, T>& a)
const
54 return a.first ==
val;
79 std::vector<std::pair<ITerrainOverlay*, int> >::iterator newEnd =
128 min_i_inclusive = min_j_inclusive = 0;
138 #warning TODO: implement TerrainOverlay::RenderOverlays for GLES
141 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
142 glDepthMask(GL_FALSE);
147 glPolygonOffset(-1.f, -1.f);
148 glEnable(GL_POLYGON_OFFSET_LINE);
149 glEnable(GL_POLYGON_OFFSET_FILL);
151 pglActiveTextureARB(GL_TEXTURE0);
152 glDisable(GL_TEXTURE_2D);
156 ssize_t min_i, min_j, max_i, max_j;
173 glEnable(GL_CULL_FACE);
174 glEnable(GL_DEPTH_TEST);
175 glDisable(GL_POLYGON_OFFSET_LINE);
176 glDisable(GL_POLYGON_OFFSET_FILL);
177 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
178 glDepthMask(GL_TRUE);
196 glDisable(GL_DEPTH_TEST);
197 glDisable(GL_CULL_FACE);
201 glEnable(GL_DEPTH_TEST);
202 glEnable(GL_CULL_FACE);
206 #warning TODO: implement TerrainOverlay::RenderTile for GLES
209 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
212 glBegin(GL_TRIANGLES);
248 glDisable(GL_DEPTH_TEST);
249 glDisable(GL_CULL_FACE);
253 glEnable(GL_DEPTH_TEST);
254 glEnable(GL_CULL_FACE);
258 #warning TODO: implement TerrainOverlay::RenderTileOutline for GLES
261 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
264 glLineWidth((
float)line_width);
284 ITerrainOverlay(priority), m_TexelsPerTile(texelsPerTile), m_Texture(0), m_TextureW(0), m_TextureH(0)
301 pglActiveTextureARB(GL_TEXTURE0);
310 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
m_TextureW,
m_TextureH, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
312 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
313 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
314 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
315 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
318 u8* data = (
u8*)calloc(w * h, 4);
322 glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, data);
332 g_Renderer.GetTerrainRenderer().RenderTerrainOverlayTexture(matrix);
const ssize_t TERRAIN_TILE_SIZE
metres [world space units] per tile in x and z
static void RenderOverlaysBeforeWater()
Draw all ITerrainOverlay objects that exist and that should be drawn before water.
static void RenderOverlaysAfterWater()
Draw all ITerrainOverlay objects that exist and that should be drawn after water. ...
const equal1st & operator=(const equal1st &rhs)
TerrainOverlay(const CSimContext &simContext, int priority=100)
Construct the object and register it with the global list of terrain overlays.
void CalcPosition(ssize_t i, ssize_t j, CVector3D &pos) const
bool GetTriangulationDir(ssize_t i, ssize_t j) const
virtual ~TerrainTextureOverlay()
Contains pointers to various 'global' objects that are needed by the simulation code, to allow easy access without using real (evil) global variables.
virtual ~ITerrainOverlay()
TerrainTextureOverlay(float texelsPerTile, int priority=100)
virtual void BuildTextureRGBA(u8 *data, size_t w, size_t h)=0
Called each frame to generate the texture to render on the terrain.
bool operator()(const std::pair< S, T > &a, const std::pair< S, T > &b) const
virtual void ProcessTile(ssize_t i, ssize_t j)=0
Override to perform processing of each tile.
CTerrain * GetTerrain()
Get the pointer to the terrain object.
void RenderTile(const CColor &colour, bool draw_hidden)
Draw a filled quad on top of the current tile.
T round_up_to_pow2(T x)
round up to next larger power of two.
Common interface for terrain-tile-based and texture-based debug overlays.
static std::vector< std::pair< ITerrainOverlay *, int > > g_TerrainOverlayList
ssize_t GetTilesPerSide() const
virtual void StartRender()
Override to perform processing at the start of the overlay rendering, before the ProcessTile calls...
void RenderTileOutline(const CColor &colour, int line_width, bool draw_hidden)
Draw an outlined quad on top of the current tile.
CGame * g_Game
Globally accessible pointer to the CGame object.
Functor for comparing the firsts of pairs to a specified value.
bool operator()(const std::pair< S, T > &a) const
virtual void RenderBeforeWater()
ITerrainOverlay(int priority)
const float * FloatArray() const
const float * GetFloatArray() const
CWorld * GetWorld()
Get the pointer to the game world object.
virtual void GetTileExtents(ssize_t &min_i_inclusive, ssize_t &min_j_inclusive, ssize_t &max_i_inclusive, ssize_t &max_j_inclusive)
Override to limit the range over which ProcessTile will be called.
#define PROFILE3_GPU(name)
virtual void EndRender()
Override to perform processing at the end of the overlay rendering, after the ProcessTile calls...
T clamp(T value, T min, T max)
Functor for sorting pairs, using the <-ordering of their second values.