void pdglFrustum( float mx, float nx, float my, float ny, float mz, float nz) { if(pglFrustum) { pglFrustum(mx, nx, my, ny, mz, nz); return; } pglFrustum=pdglGetProcAddress("glFrustum"); pglFrustum(mx, nx, my, ny, mz, nz); }
// set frustrum matrix static void ogl_SetFrustum( const FLOAT fLeft, const FLOAT fRight, const FLOAT fTop, const FLOAT fBottom, const FLOAT fNear, const FLOAT fFar) { // check API ASSERT( _pGfx->gl_eCurrentAPI==GAT_OGL); // cached? if( GFX_fLastL==-fLeft && GFX_fLastT==-fTop && GFX_fLastN==-fNear && GFX_fLastR==-fRight && GFX_fLastB==-fBottom && GFX_fLastF==-fFar && gap_bOptimizeStateChanges) return; GFX_fLastL = -fLeft; GFX_fLastT = -fTop; GFX_fLastN = -fNear; GFX_fLastR = -fRight; GFX_fLastB = -fBottom; GFX_fLastF = -fFar; _sfStats.StartTimer(CStatForm::STI_GFXAPI); // set matrix pglMatrixMode( GL_PROJECTION); pglLoadIdentity(); pglFrustum( fLeft, fRight, fBottom, fTop, fNear, fFar); OGL_CHECKERROR; _sfStats.StopTimer(CStatForm::STI_GFXAPI); }