void CRefractWater::Draw() { if(readmap->minheight>10) return; glActiveTextureARB(GL_TEXTURE2_ARB); glBindTexture(target, subSurfaceTex); glEnable(target); glCopyTexSubImage2D(target, 0, 0, 0, 0, 0, gu->screenx, gu->screeny); SetupWaterDepthTex(); glActiveTextureARB(GL_TEXTURE0_ARB); // GL_TEXTURE_RECTANGLE uses texcoord range 0 to width, whereas GL_TEXTURE_2D uses 0 to 1 if (target == GL_TEXTURE_RECTANGLE_ARB) { float v[] = { 0.04f * gu->screenx, 0.04f * gu->screeny, 0.0f, 0.0f }; glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 2, v); } else { float v[] = { 0.04f, 0.04f, 0.0f, 0.0f }; glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 2, v); v[0] = 1.0f / next_power_of_2(gu->screenx); v[1] = 1.0f / next_power_of_2(gu->screeny); glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 3, v); } CAdvWater::Draw(false); glActiveTextureARB(GL_TEXTURE3_ARB); glDisable(GL_TEXTURE_2D); glActiveTextureARB(GL_TEXTURE2_ARB); glDisable(target); glActiveTextureARB(GL_TEXTURE0_ARB); }
void CRefractWater::Draw() { if (!mapInfo->water.forceRendering && (readmap->currMinHeight > 1.0f)) { return; } glActiveTextureARB(GL_TEXTURE2_ARB); glBindTexture(target, subSurfaceTex); glEnable(target); glCopyTexSubImage2D(target, 0, 0, 0, 0, 0, globalRendering->viewSizeX, globalRendering->viewSizeY); SetupWaterDepthTex(); glActiveTextureARB(GL_TEXTURE0_ARB); // GL_TEXTURE_RECTANGLE uses texcoord range 0 to width, whereas GL_TEXTURE_2D uses 0 to 1 if (target == GL_TEXTURE_RECTANGLE_ARB) { float v[] = { 10.0f * globalRendering->viewSizeX, 10.0f * globalRendering->viewSizeY, 0.0f, 0.0f }; glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 2, v); } else { float v[] = { 10.0f, 10.0f, 0.0f, 0.0f }; glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 2, v); v[0] = 1.0f / next_power_of_2(globalRendering->viewSizeX); v[1] = 1.0f / next_power_of_2(globalRendering->viewSizeY); glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 3, v); } CAdvWater::Draw(false); glActiveTextureARB(GL_TEXTURE3_ARB); glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); glActiveTextureARB(GL_TEXTURE2_ARB); glDisable(target); glActiveTextureARB(GL_TEXTURE0_ARB); }