diff --git a/rts/Map/BaseGroundDrawer.cpp b/rts/Map/BaseGroundDrawer.cpp index a96d9806849..e4d64f4582b 100644 --- a/rts/Map/BaseGroundDrawer.cpp +++ b/rts/Map/BaseGroundDrawer.cpp @@ -59,12 +59,19 @@ CBaseGroundDrawer::~CBaseGroundDrawer() void CBaseGroundDrawer::DrawTrees(bool drawReflection) const { + glPushAttrib(GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT); + glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0.005f); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if (treeDrawer->drawTrees) { + // NOTE: + // the info-texture now contains an alpha-component + // so binding it here means trees will be invisible + // when shadows are disabled if (infoTextureHandler->IsEnabled()) { glActiveTextureARB(GL_TEXTURE1_ARB); glEnable(GL_TEXTURE_2D); @@ -95,7 +102,6 @@ void CBaseGroundDrawer::DrawTrees(bool drawReflection) const } } - glDisable(GL_ALPHA_TEST); - glDisable(GL_BLEND); + glPopAttrib(); } diff --git a/rts/Rendering/Env/AdvTreeDrawer.cpp b/rts/Rendering/Env/AdvTreeDrawer.cpp index d67d0a9486e..f64d462f12b 100644 --- a/rts/Rendering/Env/AdvTreeDrawer.cpp +++ b/rts/Rendering/Env/AdvTreeDrawer.cpp @@ -464,8 +464,10 @@ void CAdvTreeDrawer::Draw(float treeDistance, bool drawReflection) const int activeFarTex = treeGen->farTex[cam->GetDir().z >= 0.0f]; const bool drawDetailed = ((treeDistance >= 4.0f) || drawReflection); + glPushAttrib(GL_ENABLE_BIT | GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glEnable(GL_ALPHA_TEST); glEnable(GL_TEXTURE_2D); + glDepthMask(GL_TRUE); sky->SetupFog(); @@ -728,9 +730,7 @@ void CAdvTreeDrawer::Draw(float treeDistance, bool drawReflection) glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE_ARB, GL_LUMINANCE); } - glDisable(GL_TEXTURE_2D); - glDisable(GL_FOG); - glDisable(GL_ALPHA_TEST); + glPopAttrib(); diff --git a/rts/Rendering/Env/AdvTreeGenerator.cpp b/rts/Rendering/Env/AdvTreeGenerator.cpp index 226a6657f18..3187469878e 100644 --- a/rts/Rendering/Env/AdvTreeGenerator.cpp +++ b/rts/Rendering/Env/AdvTreeGenerator.cpp @@ -451,14 +451,18 @@ void CAdvTreeGenerator::CreateGranTex(unsigned char* data, int xpos, int ypos, i glMatrixMode(GL_PROJECTION); glPushMatrix(); glOrtho(0,1,0,1,-4,4); + glViewport(0,0,256,256); + + glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT | GL_COLOR_BUFFER_BIT); glDisable(GL_TEXTURE_2D); glDisable(GL_FOG); glDisable(GL_BLEND); glColor4f(1,1,1,1); - glViewport(0,0,256,256); + glAlphaFunc(GL_GREATER,0.5f); glEnable(GL_ALPHA_TEST); glDisable(GL_DEPTH_TEST); + glClearColor(0.0f,0.0f,0.0f,0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -483,7 +487,8 @@ void CAdvTreeGenerator::CreateGranTex(unsigned char* data, int xpos, int ypos, i } } - glEnable(GL_DEPTH_TEST); + glPopAttrib(); + glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); diff --git a/rts/Rendering/Env/Particles/ProjectileDrawer.cpp b/rts/Rendering/Env/Particles/ProjectileDrawer.cpp index 33ca0c0e945..83afd446aba 100644 --- a/rts/Rendering/Env/Particles/ProjectileDrawer.cpp +++ b/rts/Rendering/Env/Particles/ProjectileDrawer.cpp @@ -564,6 +564,7 @@ void CProjectileDrawer::DrawFlyingPieces(int modelType) void CProjectileDrawer::Draw(bool drawReflection, bool drawRefraction) { + glPushAttrib(GL_ENABLE_BIT | GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT); glDisable(GL_BLEND); glEnable(GL_TEXTURE_2D); glDepthMask(GL_TRUE); @@ -619,10 +620,7 @@ void CProjectileDrawer::Draw(bool drawReflection, bool drawRefraction) { CProjectile::DrawArray(); } - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_ALPHA_TEST); - glColor4f(1.0f, 1.0f, 1.0f, 1.0f); - glDepthMask(GL_TRUE); + glPopAttrib(); } void CProjectileDrawer::DrawShadowPass() diff --git a/rts/Sim/Units/Scripts/CobThread.h b/rts/Sim/Units/Scripts/CobThread.h index f1196438245..6d70c57097c 100644 --- a/rts/Sim/Units/Scripts/CobThread.h +++ b/rts/Sim/Units/Scripts/CobThread.h @@ -60,8 +60,8 @@ class CCobThread void ShowError(const std::string& msg); void AnimFinished(CUnitScript::AnimType type, int piece, int axis); - int GetRetCode() { return retCode; } - bool IsWaiting() { return waitAxis != -1; } + int GetRetCode() const { return retCode; } + bool IsWaiting() const { return (waitAxis != -1); } CCobInstance* owner; protected: