//-------------------------------------------------------------------------------------- // Name: DrawScreenSpaceQuad() // Desc: Draw a viewport-aligned quad using screen-space coordinates //-------------------------------------------------------------------------------------- VOID PostProcess::DrawScreenSpaceQuad( FLOAT w, FLOAT h, FLOAT fMaxU, FLOAT fMaxV ) { // Make sure that the required shaders and objects exist assert( m_pQuadVtxDecl ); assert( m_pScreenSpaceVS ); // Define vertices for the screen-space rect XMFLOAT4 v[3]; v[0] = XMFLOAT4( 0, 0, 0.0f, 0.0f ); v[1] = XMFLOAT4( w, 0, fMaxU, 0.0f ); v[2] = XMFLOAT4( 0, h, 0.0f, fMaxV ); // Set states for drawing the quad PushRenderState( D3DRS_VIEWPORTENABLE, FALSE ); PushRenderState( D3DRS_ZENABLE, FALSE ); PushRenderState( D3DRS_CULLMODE, D3DCULL_CCW ); PushRenderState( D3DRS_HALFPIXELOFFSET, TRUE ); // Draw the quad g_pd3dDevice->SetVertexDeclaration( m_pQuadVtxDecl ); g_pd3dDevice->SetVertexShader( m_pScreenSpaceVS ); g_pd3dDevice->DrawPrimitiveUP( D3DPT_RECTLIST, 1, v, sizeof( v[0] ) ); PopRenderStates(); }
void GPC_Canvas::DrawAllBanners(void) { if(!m_bannersEnabled || (m_banners.size() < 1)) return; // Save the old rendering parameters. CanvasRenderState render_state; PushRenderState(render_state); // Set up everything for banner display. // Set up OpenGL matrices SetOrthoProjection(); // Activate OpenGL settings needed for display of the texture ::glDisable(GL_LIGHTING); ::glDisable(GL_DEPTH_TEST); ::glDisable(GL_FOG); ::glEnable(GL_TEXTURE_2D); ::glEnable(GL_BLEND); ::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); TBannerMap::iterator it = m_banners.begin(); while (it != m_banners.end()) { if (it->second.enabled) { DrawBanner(it->second); } it++; } PopRenderState(render_state); }
//-------------------------------------------------------------------------------------- // Name: DrawFullScreenQuad() // Desc: Draw a viewport-aligned quad covering the entire render target //-------------------------------------------------------------------------------------- VOID PostProcess::DrawFullScreenQuad() { // Make sure that the required shaders and objects exist assert( m_pQuadVtxDecl ); assert( m_pQuadVB ); assert( m_pScreenSpaceVS ); // Set states for drawing the rect PushRenderState( D3DRS_VIEWPORTENABLE, TRUE ); PushRenderState( D3DRS_ZENABLE, FALSE ); PushRenderState( D3DRS_CULLMODE, D3DCULL_CCW ); PushRenderState( D3DRS_HALFPIXELOFFSET, TRUE ); // Draw the rect g_pd3dDevice->SetVertexDeclaration( m_pQuadVtxDecl ); g_pd3dDevice->SetVertexShader( m_pScreenSpaceVS ); g_pd3dDevice->SetStreamSource( 0, m_pQuadVB, 0, sizeof( XMFLOAT4 ) ); g_pd3dDevice->DrawPrimitive( D3DPT_RECTLIST, 0, g_dwNumQuadsInGrid ); PopRenderStates(); }