123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- /*
- ===========================================================================
- Doom 3 BFG Edition GPL Source Code
- Copyright (C) 1993-2012 id Software LLC, a ZeniMax Media company.
- This file is part of the Doom 3 BFG Edition GPL Source Code ("Doom 3 BFG Edition Source Code").
- Doom 3 BFG Edition Source Code is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- Doom 3 BFG Edition Source Code is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with Doom 3 BFG Edition Source Code. If not, see <http://www.gnu.org/licenses/>.
- In addition, the Doom 3 BFG Edition Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 BFG Edition Source Code. If not, please request a copy in writing from id Software at the address below.
- If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
- ===========================================================================
- */
- #ifndef __GRAPHICSAPIWRAPPER_H__
- #define __GRAPHICSAPIWRAPPER_H__
- /*
- ================================================================================================
- Graphics API wrapper/helper functions
- This wraps platform specific graphics API functionality that is used at run-time. This
- functionality is wrapped to avoid excessive conditional compilation and/or code duplication
- throughout the run-time rendering code that is shared on all platforms.
- Most other graphics API functions are called for initialization purposes and are called
- directly from platform specific code implemented in files in the platform specific folders:
- renderer/OpenGL/
- renderer/DirectX/
- renderer/GCM/
- ================================================================================================
- */
- class idImage;
- //class idTriangles;
- class idRenderModelSurface;
- class idDeclRenderProg;
- class idRenderTexture;
- static const int MAX_OCCLUSION_QUERIES = 4096;
- // returned by GL_GetDeferredQueryResult() when the query is from too long ago and the result is no longer available
- static const int OCCLUSION_QUERY_TOO_OLD = -1;
- /*
- ================================================================================================
- Platform Specific Context
- ================================================================================================
- */
- #define USE_CORE_PROFILE
- struct wrapperContext_t {
- };
- /*
- ================================================
- wrapperConfig_t
- ================================================
- */
- struct wrapperConfig_t {
- // rendering options and settings
- bool disableStateCaching;
- bool lazyBindPrograms;
- bool lazyBindParms;
- bool lazyBindTextures;
- bool stripFragmentBranches;
- bool skipDetailTris;
- bool singleTriangle;
- // values for polygon offset
- float polyOfsFactor;
- float polyOfsUnits;
- // global texture filter settings
- int textureMinFilter;
- int textureMaxFilter;
- int textureMipFilter;
- float textureAnisotropy;
- float textureLODBias;
- };
- /*
- ================================================
- wrapperStats_t
- ================================================
- */
- struct wrapperStats_t {
- int c_queriesIssued;
- int c_queriesPassed;
- int c_queriesWaitTime;
- int c_queriesTooOld;
- int c_programsBound;
- int c_drawElements;
- int c_drawIndices;
- int c_drawVertices;
- };
- /*
- ================================================================================================
- API
- ================================================================================================
- */
- void GL_SetWrapperContext( const wrapperContext_t & context );
- void GL_SetWrapperConfig( const wrapperConfig_t & config );
- void GL_SetTimeDelta( uint64 delta ); // delta from GPU to CPU microseconds
- void GL_StartFrame( int frame ); // inserts a timing mark for the start of the GPU frame
- void GL_EndFrame(); // inserts a timing mark for the end of the GPU frame
- void GL_WaitForEndFrame(); // wait for the GPU to reach the last end frame marker
- void GL_GetLastFrameTime( uint64 & startGPUTimeMicroSec, uint64 & endGPUTimeMicroSec ); // GPU time between GL_StartFrame() and GL_EndFrame()
- void GL_StartDepthPass( const idScreenRect & rect );
- void GL_FinishDepthPass();
- void GL_GetDepthPassRect( idScreenRect & rect );
- void GL_SetDefaultState();
- void GL_State( uint64 stateVector, bool forceGlState = false );
- uint64 GL_GetCurrentState();
- uint64 GL_GetCurrentStateMinusStencil();
- void GL_Cull( int cullType );
- void GL_Scissor( int x /* left*/, int y /* bottom */, int w, int h );
- void GL_Viewport( int x /* left */, int y /* bottom */, int w, int h );
- ID_INLINE void GL_Scissor( const idScreenRect & rect ) { GL_Scissor( rect.x1, rect.y1, rect.x2 - rect.x1 + 1, rect.y2 - rect.y1 + 1 ); }
- ID_INLINE void GL_Viewport( const idScreenRect & rect ) { GL_Viewport( rect.x1, rect.y1, rect.x2 - rect.x1 + 1, rect.y2 - rect.y1 + 1 ); }
- ID_INLINE void GL_ViewportAndScissor( int x, int y, int w, int h ) { GL_Viewport( x, y, w, h ); GL_Scissor( x, y, w, h ); }
- ID_INLINE void GL_ViewportAndScissor( const idScreenRect& rect ) { GL_Viewport( rect ); GL_Scissor( rect ); }
- void GL_Clear( bool color, bool depth, bool stencil, byte stencilValue, float r, float g, float b, float a );
- void GL_PolygonOffset( float scale, float bias );
- void GL_DepthBoundsTest( const float zmin, const float zmax );
- void GL_Color( float * color );
- void GL_Color( float r, float g, float b );
- void GL_Color( float r, float g, float b, float a );
- void GL_SelectTexture( int unit );
- void GL_Flush(); // flush the GPU command buffer
- void GL_Finish(); // wait for the GPU to have executed all commands
- void GL_CheckErrors();
- wrapperStats_t GL_GetCurrentStats();
- void GL_ClearStats();
- #endif // !__GRAPHICSAPIWRAPPER_H__
|