void cToneMappingShader::EndDraw() { if(m_pOriginalFrameBuffer) { m_pOriginalFrameBuffer->EndDraw(); DoDownSample(); DoBlur(this->m_pHoricontalBlur,m_pDownSampleBrightShader->GetFrameBuffer()); DoBlur(this->m_pVerticalBlur,m_pHoricontalBlur->GetFrameBuffer()); this->Use(); float l_fTextureCoordinate[] ={0,1,1,0}; DrawQuadWithTextureAndColorAndCoordinate(0.f,0.f,0.f,cGameApp::m_svGameResolution.x,cGameApp::m_svGameResolution.y,Vector4::One,l_fTextureCoordinate,Vector3::Zero,this->GetName()); //if( cGameApp::m_sucKeyData['D'] ) { DebugRender(); } } }
void RenderScreenGlowShader(void) { // check to see if we can render it. if (IEngineStudio.IsHardware() != 1){ return; } /* AJH - This is redundant as the function now returns if r_glow!=1 //check the cvar for the glow is on. if (CVAR_GET_FLOAT("r_glow") == 0) return; */ //if the mode isn't shader then return. if (CVAR_GET_FLOAT("r_glow") != 1) return; if (!bGlowShaderInitialised) InitScreenGlowShader(); if (!bGlowShaderInitialised){ //if the initialisation dosent work for some reason gEngfuncs.Cvar_SetValue( "r_glow", 0 ); return; } // STEP 1: Grab the screen and put it into a texture pglActiveTextureARB(GL_TEXTURE0_ARB); glEnable(GL_TEXTURE_RECTANGLE_NV); glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex); glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth, ScreenHeight, 0); // STEP 2: Set up an orthogonal projection glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0, 1, 1, 0, 0.1, 100); glColor3f(1,1,1); // STEP 3: Initialize Cg programs and parameters for darken cgGLEnableProfile(g_cgVertProfile); cgGLEnableProfile(g_cgFragProfile); cgGLBindProgram(g_cgVP_GlowDarken); cgGLBindProgram(g_cgFP_GlowDarken); cgGLSetStateMatrixParameter(g_cgpVP0_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY); // STEP 4: Render the current scene texture to a new, lower-res texture, darkening non-bright areas of the scene glViewport(0, 0, ScreenWidth/4, ScreenHeight/4); pglActiveTextureARB(GL_TEXTURE0_ARB); glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex); DrawQuad(ScreenWidth, ScreenHeight); glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiBlurTex); glCopyTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, 0, 0, ScreenWidth/4, ScreenHeight/4, 0); // STEP 5: Initialise Cg programs and parameters for blurring cgGLBindProgram(g_cgVP_GlowBlur); cgGLBindProgram(g_cgFP_GlowBlur); cgGLSetStateMatrixParameter(g_cgpVP1_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY); // STEP 6: Apply blur int iNumBlurSteps = CVAR_GET_FLOAT("r_glowblur"); //use new CVAR --FragBait0 for (int i = 0; i < iNumBlurSteps; i++) { DoBlur(g_uiBlurTex, g_uiBlurTex, ScreenWidth/4, ScreenHeight/4, ScreenWidth/4, ScreenHeight/4, 1, 0); DoBlur(g_uiBlurTex, g_uiBlurTex, ScreenWidth/4, ScreenHeight/4, ScreenWidth/4, ScreenHeight/4, 0, 1); } // STEP 7: Set up Cg for combining blurred glow with original scene cgGLBindProgram(g_cgVP_GlowCombine); cgGLBindProgram(g_cgFP_GlowCombine); cgGLSetStateMatrixParameter(g_cgpVP2_ModelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY); pglActiveTextureARB(GL_TEXTURE0_ARB); glEnable(GL_TEXTURE_RECTANGLE_NV); glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiSceneTex); pglActiveTextureARB(GL_TEXTURE1_ARB); glEnable(GL_TEXTURE_RECTANGLE_NV); glBindTexture(GL_TEXTURE_RECTANGLE_NV, g_uiBlurTex); // STEP 8: Do the combination, rendering to the screen without grabbing it to a texture glViewport(0, 0, ScreenWidth, ScreenHeight); DrawQuad(ScreenWidth/4, ScreenHeight/4); // STEP 9: Restore the original projection and modelview matrices and disable rectangular textures on all units glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); cgGLDisableProfile(g_cgVertProfile); cgGLDisableProfile(g_cgFragProfile); pglActiveTextureARB(GL_TEXTURE0_ARB); glDisable(GL_TEXTURE_RECTANGLE_NV); pglActiveTextureARB(GL_TEXTURE1_ARB); glDisable(GL_TEXTURE_RECTANGLE_NV); pglActiveTextureARB(GL_TEXTURE2_ARB); glDisable(GL_TEXTURE_RECTANGLE_NV); pglActiveTextureARB(GL_TEXTURE3_ARB); glDisable(GL_TEXTURE_RECTANGLE_NV); pglActiveTextureARB(GL_TEXTURE0_ARB); glClear(GL_DEPTH_BUFFER_BIT); }