23 #include "precompiled.h"
55 #include "tools/atlas/GameInterface/GameLoop.h"
206 if (visiblePatches.empty() && visibleDecals.empty())
214 glEnableClientState(GL_VERTEX_ARRAY);
217 for (
size_t i = 0; i < visiblePatches.size(); ++i)
218 visiblePatches[i]->RenderSides(dummyShader);
222 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
226 pglActiveTextureARB(GL_TEXTURE0);
227 pglClientActiveTextureARB(GL_TEXTURE0);
228 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
229 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
230 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
231 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
234 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
235 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_CONSTANT);
236 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
237 static const float one[4] = { 1.f, 1.f, 1.f, 1.f };
238 glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, one);
249 pglClientActiveTextureARB(GL_TEXTURE1);
250 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
253 pglActiveTextureARB(GL_TEXTURE1);
254 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
255 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
256 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
257 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
258 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
259 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
260 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_ONE_MINUS_SRC_ALPHA);
264 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
270 glDisableClientState(GL_COLOR_ARRAY);
278 pglClientActiveTextureARB(GL_TEXTURE1);
279 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
285 pglActiveTextureARB(GL_TEXTURE0);
286 pglClientActiveTextureARB(GL_TEXTURE0);
287 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
288 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
289 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
290 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
291 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
292 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
293 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
294 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
295 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
305 pglClientActiveTextureARB(GL_TEXTURE0);
306 glEnableClientState(GL_COLOR_ARRAY);
313 glBlendFunc(GL_DST_COLOR, GL_SRC_COLOR);
316 float terrainAmbientColor[4] = {
327 pglActiveTextureARB(GL_TEXTURE0);
335 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
336 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD);
337 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
338 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
339 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_CONSTANT);
340 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
341 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
342 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
343 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
345 glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, terrainAmbientColor);
348 pglClientActiveTextureARB(GL_TEXTURE1);
349 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
352 glMatrixMode(GL_TEXTURE);
354 glMatrixMode(GL_MODELVIEW);
356 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
357 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
358 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
359 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
360 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
361 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_ALPHA);
362 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
363 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
364 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
366 pglActiveTextureARB(GL_TEXTURE0);
367 pglClientActiveTextureARB(GL_TEXTURE0);
373 glMatrixMode(GL_TEXTURE);
375 glMatrixMode(GL_MODELVIEW);
380 pglClientActiveTextureARB(GL_TEXTURE1);
381 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
382 glMatrixMode(GL_TEXTURE);
384 glMatrixMode(GL_MODELVIEW);
386 pglClientActiveTextureARB(GL_TEXTURE0);
387 pglActiveTextureARB(GL_TEXTURE0);
390 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
392 glDisableClientState(GL_COLOR_ARRAY);
393 glDisableClientState(GL_VERTEX_ARRAY);
394 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
396 dummyShader->Unbind();
403 #warning TODO: implement TerrainRenderer::RenderTerrainOverlayTexture for GLES
410 glEnableClientState(GL_VERTEX_ARRAY);
411 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
413 glEnable(GL_TEXTURE_2D);
415 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
418 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
420 glMatrixMode(GL_TEXTURE);
421 glLoadMatrixf(&textureMatrix.
_11);
422 glMatrixMode(GL_MODELVIEW);
427 dummyShader->Unbind();
439 float h =
g_Renderer.GetWaterManager()->m_WaterHeight + 0.05f;
441 waterBounds[0].X, h, waterBounds[0].Z,
442 waterBounds[1].X, h, waterBounds[0].Z,
443 waterBounds[0].X, h, waterBounds[1].Z,
444 waterBounds[1].X, h, waterBounds[1].Z
446 glVertexPointer(3, GL_FLOAT, 3*
sizeof(
float), waterPos);
447 glTexCoordPointer(3, GL_FLOAT, 3*
sizeof(
float), waterPos);
448 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
451 glMatrixMode(GL_TEXTURE);
453 glMatrixMode(GL_MODELVIEW);
457 glDisableClientState(GL_COLOR_ARRAY);
458 glDisableClientState(GL_VERTEX_ARRAY);
459 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
471 shader->Uniform(str_transform,
g_Renderer.GetViewCamera().GetViewProjection());
472 shader->Uniform(str_cameraPos,
g_Renderer.GetViewCamera().GetOrientation().GetTranslation());
478 shader->BindTexture(str_shadowTex, shadow->
GetTexture());
482 shader->Uniform(str_shadowScale, width, height, 1.0f / width, 1.0f / height);
490 shader->Uniform(str_sunColor, lightEnv.
m_SunColor);
491 shader->Uniform(str_sunDir, lightEnv.
GetSunDir());
493 shader->Uniform(str_fogColor, lightEnv.
m_FogColor);
503 if (visiblePatches.empty() && visibleDecals.empty())
508 techSolid->BeginPass();
510 shaderSolid->Uniform(str_transform,
g_Renderer.GetViewCamera().GetViewProjection());
511 shaderSolid->Uniform(str_color, 0.0f, 0.0f, 0.0f, 1.0f);
514 for (
size_t i = 0; i < visiblePatches.size(); ++i)
515 visiblePatches[i]->RenderSides(shaderSolid);
518 techSolid->EndPass();
542 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
554 if (visiblePatches.empty())
558 #warning TODO: implement TerrainRenderer::RenderPatches for GLES
563 glEnableClientState(GL_VERTEX_ARRAY);
565 glDisableClientState(GL_VERTEX_ARRAY);
567 dummyShader->Unbind();
579 if (visiblePatches.empty())
583 #warning TODO: implement TerrainRenderer::RenderOutlines for GLES
585 glEnableClientState(GL_VERTEX_ARRAY);
586 for (
size_t i = 0; i < visiblePatches.size(); ++i)
587 visiblePatches[i]->RenderOutline();
588 glDisableClientState(GL_VERTEX_ARRAY);
610 #define ADDBOUND(v1, v2, v3, v4) \
612 screenBounds += CVector3D(v1.X, v1.Y, v1.Z) * (1.0f / v1.W); \
615 float t = v1.Z + v1.W; \
618 CVector4D c2 = v1 + (v2 - v1) * (t / (t - (v2.Z + v2.W))); \
619 screenBounds += CVector3D(c2.X, c2.Y, c2.Z) * (1.0f / c2.W); \
623 CVector4D c3 = v1 + (v3 - v1) * (t / (t - (v3.Z + v3.W))); \
624 screenBounds += CVector3D(c3.X, c3.Y, c3.Z) * (1.0f / c3.W); \
628 CVector4D c4 = v1 + (v4 - v1) * (t / (t - (v4.Z + v4.W))); \
629 screenBounds += CVector3D(c4.X, c4.Y, c4.Z) * (1.0f / c4.W); \
637 if (screenBounds[0].X >= 1.0f || screenBounds[1].X <= -1.0f || screenBounds[0].Y >= 1.0f || screenBounds[1].Y <= -1.0f)
639 scissor += screenBounds;
659 defines.
Add(str_USE_NORMALS, str_1);
661 defines.
Add(str_USE_REAL_DEPTH, str_1);
663 defines.
Add(str_USE_FOAM, str_1);
665 defines.
Add(str_USE_WAVES, str_1);
667 defines.
Add(str_USE_REFRACTION, str_1);
669 defines.
Add(str_USE_REFLECTION, str_1);
671 defines.
Add(str_USE_SHADOWS, str_1);
676 LOGERROR(L
"Failed to load waves shader. Deactivating waves.\n");
678 defines.
Add(str_USE_WAVES, str_0);
689 LOGERROR(L
"Failed to load water shader. Falling back to non-fancy water.\n");
704 glGenTextures(1, (GLuint*)&depthTex);
706 glBindTexture(GL_TEXTURE_2D, WaterMgr->
m_depthTT);
708 glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32,
g_Renderer.GetWidth(),
g_Renderer.GetHeight(),
709 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE,NULL);
711 glBindTexture(GL_TEXTURE_2D, WaterMgr->
m_depthTT);
712 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_NONE);
713 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
714 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
715 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
716 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
718 glCopyTexImage2D(GL_TEXTURE_2D,0,GL_DEPTH_COMPONENT, 0, 0,
g_Renderer.GetWidth(),
g_Renderer.GetHeight(), 0);
720 glBindTexture(GL_TEXTURE_2D, 0);
730 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
731 glEnable(GL_DEPTH_TEST);
732 glDepthFunc(GL_LEQUAL);
736 int curTex = (int)(time*60/period) % 60;
737 int nexTex = (curTex + 1) % 60;
739 GLuint FramebufferName = 0;
746 glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &fbo);
748 pglGenFramebuffersEXT(1, &FramebufferName);
749 pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FramebufferName);
751 GLuint renderedTexture;
754 glGenTextures(1, &renderedTexture);
755 WaterMgr->
m_waveTT = renderedTexture;
757 glBindTexture(GL_TEXTURE_2D, WaterMgr->
m_waveTT);
759 glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA, (
float)
g_Renderer.GetWidth(), (float)
g_Renderer.GetHeight(), 0,GL_RGBA, GL_UNSIGNED_BYTE, 0);
762 glBindTexture(GL_TEXTURE_2D, WaterMgr->
m_waveTT);
764 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
765 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
767 pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, WaterMgr->
m_waveTT, 0);
769 glClearColor(0.5f,0.5f,1.0f,0.0f);
770 glClear(GL_COLOR_BUFFER_BIT);
791 pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
792 glBindTexture(GL_TEXTURE_2D, 0);
800 float tx = -fmod(time, 81.0 / (WaterMgr->
m_Waviness/20.0 + 0.8) )/(81.0/ (WaterMgr->
m_Waviness/20.0 + 0.8) );
801 float ty = -fmod(time, 34.0 / (WaterMgr->
m_Waviness/20.0 + 0.8) )/(34.0/ (WaterMgr->
m_Waviness/20.0 + 0.8) );
858 m->
fancyWaterShader->Uniform(str_shadowScale, width, height, 1.0f / width, 1.0f / height);
869 pglActiveTextureARB(GL_TEXTURE0);
870 pglDeleteFramebuffersEXT(1, &FramebufferName);
886 glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
887 glEnable(GL_DEPTH_TEST);
888 glDepthFunc(GL_LEQUAL);
891 double period = 1.6f;
892 int curTex = (int)(time*60/period) % 60;
897 float tx = -fmod(time, 81.0)/81.0;
898 float ty = -fmod(time, 34.0)/34.0;
899 float repeatPeriod = 16.0f;
902 GLfloat texgenS0[4] = { 1/repeatPeriod, 0, 0, tx };
903 GLfloat texgenT0[4] = { 0, 0, 1/repeatPeriod, ty };
904 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
905 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
906 glTexGenfv(GL_S, GL_OBJECT_PLANE, texgenS0);
907 glTexGenfv(GL_T, GL_OBJECT_PLANE, texgenT0);
908 glEnable(GL_TEXTURE_GEN_S);
909 glEnable(GL_TEXTURE_GEN_T);
913 glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, waterColor);
914 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
915 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
916 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
917 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
918 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_CONSTANT);
919 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
920 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
921 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
922 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
927 GLfloat texgenS1[4] = { losMatrix[0], losMatrix[4], losMatrix[8], losMatrix[12] };
928 GLfloat texgenT1[4] = { losMatrix[1], losMatrix[5], losMatrix[9], losMatrix[13] };
929 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
930 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
931 glTexGenfv(GL_S, GL_OBJECT_PLANE, texgenS1);
932 glTexGenfv(GL_T, GL_OBJECT_PLANE, texgenT1);
933 glEnable(GL_TEXTURE_GEN_S);
934 glEnable(GL_TEXTURE_GEN_T);
936 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
937 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
938 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
939 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
940 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
941 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_ALPHA);
942 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
943 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
944 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
949 glEnableClientState(GL_VERTEX_ARRAY);
950 glEnableClientState(GL_COLOR_ARRAY);
958 glDisableClientState(GL_COLOR_ARRAY);
959 glDisableClientState(GL_VERTEX_ARRAY);
961 dummyShader->Unbind();
965 glDisable(GL_TEXTURE_GEN_S);
966 glDisable(GL_TEXTURE_GEN_T);
967 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
969 pglActiveTextureARB(GL_TEXTURE0_ARB);
972 glDisable(GL_TEXTURE_GEN_S);
973 glDisable(GL_TEXTURE_GEN_T);
974 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
977 glDisable(GL_TEXTURE_2D);
1003 textRenderer.
Font(L
"mono-stroke-10");
1004 textRenderer.Color(1.0f, 1.0f, 0.0f);
1009 textRenderer.Render();
CTexturePtr m_WaterTexture[60]
void Add(CStrIntern name, CStrIntern value)
Add a name and associated value to the map of defines.
static void RenderBases(const std::vector< CPatchRData * > &patches, const CShaderDefines &context, ShadowMap *shadow, bool isDummyShader=false, const CShaderProgramPtr &dummy=CShaderProgramPtr())
size_t m_Index
Start index of this chunk in owner.
const CVector3D & GetSunDir() const
void RenderWater(CShaderProgramPtr &shader)
void RenderOutlines(bool filtered=false)
RenderOutlines: Render the outline of patches as lines.
void RenderWater(const CShaderDefines &context, ShadowMap *shadow)
RenderWater: Render water for all patches that have been submitted this frame.
const CBoundingBoxAligned & GetWaterBounds() const
void PrepareForRendering()
PrepareForRendering: Prepare internal data structures like vertex buffers for rendering.
RGBColor m_TerrainAmbientColor
GLuint GetTextureSmooth()
CVertexBuffer::VBChunk * m_VBWaves
Struct TerrainRendererInternals: Internal variables used by the TerrainRenderer class.
void RenderTerrainShader(const CShaderDefines &context, ShadowMap *shadow, bool filtered=false)
Render textured terrain, as with RenderTerrain, but using shaders instead of multitexturing.
bool IsBoxVisible(const CVector3D &position, const CBoundingBoxAligned &bounds) const
GLuint GetTexture() const
GetTexture: Retrieve the OpenGL texture object name that contains the shadow map. ...
CVector3D Transform(const CVector3D &vector) const
CTexturePtr m_NormalMap[60]
GameLoopState * g_AtlasGameLoop
shared_ptr< CShaderTechnique > CShaderTechniquePtr
GLuint m_RefractionTexture
void RenderTerrain(bool filtered=false)
RenderTerrain: Render textured terrain (including blends between different terrain types)...
Class ShadowMap: Maintain the shadow map texture and perform necessary OpenGL setup, including matrix calculations.
#define PROFILE_END(name)
u8 * Bind()
Bind to this buffer; return pointer to address required as parameter to glVertexPointer ( + etc) call...
CMatrix3D m_ReflectionMatrix
Public API for simulation system.
void Update(CSimulation2 *simulation)
Status ogl_tex_bind(Handle ht, size_t unit)
Bind texture to the specified unit in preparation for using it in rendering.
CShaderProgramPtr wavesShader
void RenderPatches(bool filtered=false)
RenderPatches: Render all patches un-textured as polygons.
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
int GetWidth() const
GetWidth: Return the width of the depth texture.
#define UNUSED2(param)
mark a function local variable or parameter as unused and avoid the corresponding compiler warning...
std::vector< CPatchRData * > visiblePatches
Patches that were submitted for this frame.
CRenderData * GetRenderData()
Return object renderdata - can be null if renderer hasn't yet created the renderdata.
void UpdateQuality()
Updates the settings to the one from the renderer, and sets m_NeedsReloading.
void RenderPriorities()
Render priority text for all submitted patches, for debugging.
bool CullPatches(const CFrustum *frustum)
CullPatches: Culls patches and decals against a frustum, and stores the results in a special filtered...
void Update(CSimulation2 *simulation)
CMatrix3D m_RefractionMatrix
CShaderProgramPtr fancyWaterShader
Fancy water shader.
CSimulation2 * simulation
void SetRenderData(CRenderData *renderdata)
void EndFrame()
EndFrame: Remove all patches from the list of submitted patches.
#define PROFILE_START(name)
CGame * g_Game
Globally accessible pointer to the CGame object.
void RenderTerrainOverlayTexture(CMatrix3D &textureMatrix)
Render texture unit 0 over the terrain mesh, with UV coords calculated by the given texture matrix...
#define ADDBOUND(v1, v2, v3, v4)
size_t m_Count
Number of vertices used by chunk.
void Submit(CPatch *patch)
Submit: Add a patch for rendering in this frame.
static void RenderBlends(const std::vector< CPatchRData * > &patches, const CShaderDefines &context, ShadowMap *shadow, bool isDummyShader=false, const CShaderProgramPtr &dummy=CShaderProgramPtr())
Represents a mapping of name strings to value strings, for use with #if and #ifdef and similar condit...
const CMatrix3D & GetTextureMatrix() const
GetTextureMatrix: Retrieve the world-space to shadow map texture coordinates transformation matrix...
CGameView * GetView()
Get the pointer to the game view object.
void RenderSimpleWater()
RenderSimpleWater: internal rendering method for water.
bool WillRenderFancyWater()
Returns true if fancy water shaders will be used (i.e.
static void PrepareShader(const CShaderProgramPtr &shader, ShadowMap *shadow)
Set up all the uniforms for a shader pass.
Phase phase
Which phase (submitting or rendering patches) are we in right now?
float m_ReflectionTintStrength
GLuint m_ReflectionTexture
void Font(const CStrW &font)
Set the font for subsequent print calls.
virtual CLOSTexture & GetLOSTexture()
Return the LOS texture to be used for rendering this scene.
CVertexBuffer * m_Owner
Owning (parent) vertex buffer.
std::vector< CDecalRData * > visibleDecals
Decals that were submitted for this frame.
CVertexBuffer::VBChunk * m_VBWavesIndices
void BindTexture(int unit)
Recomputes the LOS texture if necessary, and binds it to the requested texture unit.
Maintains the LOS (fog-of-war / shroud-of-darkness) texture, used for rendering and for the minimap...
#define PROFILE3_GPU(name)
bool RenderFancyWater(const CShaderDefines &context, ShadowMap *shadow)
RenderFancyWater: internal rendering method for fancy water.
const CMatrix3D & GetTextureMatrix()
Returns a matrix to map (x,y,z) world coordinates onto (u,v) LOS texture coordinates, in the form expected by glLoadMatrixf.
static void Unbind()
Unbind any currently-bound buffer, so glVertexPointer etc calls will not attempt to use it...
std::vector< CPatchRData * > filteredPatches
CVector3D GetTranslation() const
Class CLightEnv: description of a lighting environment - contains all the necessary parameters for re...
static void RenderDecals(std::vector< CDecalRData * > &decals, const CShaderDefines &context, ShadowMap *shadow, bool isDummyShader=false, const CShaderProgramPtr &dummy=CShaderProgramPtr())
static void RenderStreams(const std::vector< CPatchRData * > &patches, const CShaderProgramPtr &shader, int streamflags)
Phase
TerrainRenderer keeps track of which phase it is in, to detect when Submit, PrepareForRendering etc...
CBoundingBoxAligned ScissorWater(const CMatrix3D &viewproj)
Calculate a scissor rectangle for the visible water patches.
shared_ptr< CShaderProgram > CShaderProgramPtr
int GetHeight() const
GetHeight: Return the height of the depth texture.
T clamp(T value, T min, T max)
void SetSimulation(CSimulation2 *simulation)
Set the simulation context for this frame.
std::vector< CDecalRData * > filteredDecals
Class WaterManager: Maintain water settings and textures.
TerrainRendererInternals * m