void CPixelVisibilityQuery::IssueQuery( IMatRenderContext *pRenderContext, float proxySize, float proxyAspect, IMaterial *pMaterial, bool sizeIsScreenSpace ) { if ( !m_failed ) { Assert( IsValid() ); if ( r_pixelvisibility_spew.GetBool() && CurrentViewID() == 0 ) { DevMsg( 1, "Draw Proxy: qh:%d org:<%d,%d,%d> (frame:%d)\n", (int)m_queryHandle, (int)m_origin[0], (int)m_origin[1], (int)m_origin[2], gpGlobals->framecount ); } m_clipFraction = PixelVisibility_DrawProxy( pRenderContext, m_queryHandle, m_origin, proxySize, proxyAspect, pMaterial, sizeIsScreenSpace ); if ( m_clipFraction < 0 ) { // NOTE: In this case, the proxy wasn't issued cause it was offscreen // can't set the m_frameissued field since that would cause it to get marked as failed m_clipFraction = 0; m_wasQueriedThisFrame = false; m_failed = false; return; } } #ifndef PORTAL // FIXME: In portal we query visibility multiple times per frame because of portal renders! Assert ( ( m_frameIssued != gpGlobals->framecount ) || UseVR() ); #endif m_frameIssued = gpGlobals->framecount; m_wasQueriedThisFrame = false; m_failed = false; }
void CPixelVisibilityQuery::IssueCountingQuery( IMatRenderContext *pRenderContext, float proxySize, float proxyAspect, IMaterial *pMaterial, bool sizeIsScreenSpace ) { if ( !m_failed ) { Assert( IsValid() ); #if 0 // this centers it on the screen. // This is nice because it makes the glows fade as they get partially clipped by the view frustum // But it introduces sub-pixel errors (off by one row/column of pixels) so the glows shimmer // UNDONE: Compute an offset center coord that matches sub-pixel coords with the real glow position // UNDONE: Or frustum clip the sphere/geometry and fade based on proxy size Vector origin = m_origin - CurrentViewOrigin(); float dot = DotProduct(CurrentViewForward(), origin); origin = CurrentViewOrigin() + dot * CurrentViewForward(); #endif PixelVisibility_DrawProxy( pRenderContext, m_queryHandleCount, m_origin, proxySize, proxyAspect, pMaterial, sizeIsScreenSpace ); } }
void CPixelVisibilityQuery::IssueQuery( float proxySize, float proxyAspect, IMaterial *pMaterial, bool sizeIsScreenSpace ) { if ( !m_failed ) { Assert( IsValid() ); if ( r_pixelvisibility_spew.GetBool() && CurrentViewID() == 0 ) { DevMsg( 1, "Draw Proxy: qh:%d org:<%d,%d,%d> (frame:%d)\n", m_queryHandle, (int)m_origin[0], (int)m_origin[1], (int)m_origin[2], gpGlobals->framecount ); } m_clipFraction = PixelVisibility_DrawProxy( m_queryHandle, m_origin, proxySize, proxyAspect, pMaterial, sizeIsScreenSpace ); } m_frameIssued = gpGlobals->framecount; m_wasQueriedThisFrame = false; m_failed = false; }