gfx_opengl.hh

Go to the documentation of this file.
00001 /*
00009  * LEGAL:   COPYRIGHT (C) 2004 JIM E. BROOKS
00010  *          THIS SOURCE CODE IS RELEASED UNDER THE TERMS
00011  *          OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2).
00012  *****************************************************************************/
00013 
00014 #if GFXSYS_OPENGL
00015 #ifndef GFX_OPENGL_HH
00016 #define GFX_OPENGL_HH 1
00017 
00018 namespace gfx {
00019 
00141 class GFX : public NonThreadable
00142 {
00143 ;
00144     GFX( void );
00145     ~GFX();
00146 public:
00147     CLASS_CONST uint MATRIX_ELEMS               = 16;   // OpenGL matrix is 4x4
00148     #define DEFAULT_PERSPECTIVE_FOV             (8.0)
00149     #define DEFAULT_PERSPECTIVE_FRUSTUM_NEAR    (125.0)
00150     #define DEFAULT_PERSPECTIVE_FRUSTUM_FAR     (100000.0)
00151 
00153     enum ePrim
00154     {
00155         ePrim_POINTS            = GL_POINTS,
00156         ePrim_LINES             = GL_LINES,
00157         ePrim_LINE_LOOP         = GL_LINE_LOOP,
00158         ePrim_TRIANGLES         = GL_TRIANGLES,
00159         ePrim_TRIANGLE_STRIP    = GL_TRIANGLE_STRIP,
00160         ePrim_QUADS             = GL_QUADS,
00161         ePrim_QUAD_STRIP        = GL_QUAD_STRIP,
00162         ePrim_POLYGON           = GL_POLYGON,
00163     };
00164 
00165     enum ePolygonMode
00166     {
00167         ePolygonMode_POINT      = GL_POINT,
00168         ePolygonMode_LINE       = GL_LINE,
00169         ePolygonMode_FILL       = GL_FILL,
00170         ePolygonMode_DEFAULT    = GL_FILL
00171     };
00172 
00174     enum eBlend
00175     {
00176         // source:
00177         eBlend_SRC_ALPHA            = GL_SRC_ALPHA,
00178         eBlend_SRC_COLOR            = GL_SRC_COLOR,
00179         eBlend_ONE_MINUS_SRC_ALPHA  = GL_ONE_MINUS_SRC_ALPHA,
00180         // destination:
00181         eBlend_DST_ALPHA            = GL_DST_ALPHA,
00182         eBlend_DST_COLOR            = GL_DST_COLOR,
00183         eBlend_ONE_MINUS_DST_ALPHA  = GL_ONE_MINUS_DST_ALPHA,
00184         eBlend_DST_ONE              = GL_ONE
00185     };
00186 
00188     enum eColorFormat
00189     {
00190         eColorFormat_RGBA   = GL_RGBA,
00191         eColorFormat_RGBA8  = GL_RGBA8,
00192         eColorFormat_BGRA   = GL_BGRA,
00193     };
00194 
00196     enum eDepthTest
00197     {
00198         eDepthTest_DISABLE,
00199         eDepthTest_ENABLE,
00200     };
00201 
00203     enum eShadeModel
00204     {
00205         eShadeModel_FLAT   = GL_FLAT,
00206         eShadeModel_NORMAL = GL_FLAT,
00207         eShadeModel_SMOOTH = GL_SMOOTH,
00208     };
00209 
00210     enum eAntialias
00211     {
00212         // Correlate to literal numbers in settings.conf:Antialias.
00213         eAntialias_OFF      = 0,    
00214         eAntialias_1        = 1,    
00215         eAntialias_2        = 2,
00216         eAntialias_3        = 3,    
00217         eAntialias_DEFAULT  = eAntialias_OFF,
00218     };
00219 
00221     enum eKey
00222     {
00223         eKey_ENTER      = 0xd,
00224         eKey_ESC        = 27,
00225         eKey_TAB        = 0x9,
00226         eKey_BACKSPACE  = 0x8,
00227         eKey_DELETE     = 0x7f,
00228         eKey_CTRL_C     = 0x3,
00229         eKey_CTRL_P     = 0x10,
00230         eKey_CTRL_S     = 0x13,
00231         eKey_CTRL_X     = 0x18,
00232         eKey_CTRL_Z     = 0x1a,
00233         eKey_1          = 0x31,
00234         eKey_PLUS       = 0x2b,
00235         eKey_MINUS      = 0x2d,
00236 
00237         // For GLUT special key handler:
00238         eKey_LEFT       = 0x64,
00239         eKey_RIGHT      = 0x66,
00240         eKey_UP         = 0x65,
00241         eKey_DOWN       = 0x67,
00242         eKey_HOME       = 0x6a,
00243         eKey_END        = 0x6b,
00244         eKey_F1         = 0x1,
00245         eKey_F2         = 0x2,
00246         eKey_F3         = 0x3,
00247         eKey_F4         = 0x4,
00248         eKey_F5         = 0x5,
00249         eKey_F6         = 0x6,
00250         eKey_F7         = 0x7,
00251         eKey_F8         = 0x8,
00252         eKey_F9         = 0x9,
00253         eKey_F10        = 0xa,
00254         eKey_F11        = 0xb,
00255         eKey_F12        = 0xc,
00256     };
00257 
00258 //------------------------------------------------------------------------------
00259 // GFX structs:
00260 
00261 public:
00265     class Modes
00266     {
00267     ;
00268     friend class GFX;
00269     public:
00270         Modes( void );
00271         ~Modes();
00272 
00273     public:
00274         CLASS_CONST ePolygonMode DEFAULT_POLYGON_MODE = ePolygonMode_DEFAULT;
00275         CLASS_CONST bool         DEFAULT_DEPTH_MASK   = true;  // true enables writing to depth buffer
00276         CLASS_CONST bool         DEFAULT_DEPTH_TEST   = true;
00277         CLASS_CONST bool         DEFAULT_BLEND        = false;
00278         CLASS_CONST eBlend       DEFAULT_BLEND_SRC    = eBlend_SRC_ALPHA;
00279         CLASS_CONST eBlend       DEFAULT_BLEND_DST    = eBlend_ONE_MINUS_SRC_ALPHA;
00280         CLASS_CONST bool         DEFAULT_TEXTURE2     = false;
00281         CLASS_CONST bool         DEFAULT_LIGHTING     = false;
00282         // By default, don't explicitly override antialiasing.
00283         // The user may have increased antialiasing using a control panel (nvidia-settings).
00284         CLASS_CONST eAntialias   DEFAULT_ANTIALIAS    = eAntialias_DEFAULT;
00285         CLASS_CONST bool         DEFAULT_LINE_SMOOTH  = false;
00286         CLASS_CONST bool         DEFAULT_FOG          = false;
00287     private:
00288         // -- reminder: update SetModes() --
00289         ePolygonMode mPolygonMode;
00290         bool         mDepthMask;
00291         bool         mDepthTest;
00292         bool         mBlend;
00293         eBlend       mBlendSrc;
00294         eBlend       mBlendDst;
00295         bool         mTexture2;
00296         bool         mLighting;
00297         eAntialias   mAntialias;  // FSAA actually
00298         bool         mLineSmooth;
00299         bool         mFog;
00300         // -- reminder: update SetModes() --
00301     };
00302 
00303 //------------------------------------------------------------------------------
00304 // GFX drawing methods:
00305 
00306 public:
00311     CLASS_METHOD
00312     void
00313     Begin( ePrim prim )
00314     {
00315     ASSERT2( IfReady() );
00316     ASSERT( msBlockNest == 0 );
00317     
00318 
00319         glBegin( prim );
00320     }
00321 
00322     CLASS_METHOD
00323     void
00324     End( void )
00325     {
00326     ASSERT2( IfReady() );
00327     ASSERT( msBlockNest == 1 );
00328     
00329 
00330         glEnd();
00331     }
00332 
00341     CLASS_METHOD
00342     void
00343     Begin2D( const Rect<int>& rect );
00344 
00345     CLASS_METHOD
00346     void
00347     End2D( void );
00348 
00352     CLASS_METHOD
00353     void
00354     BeginAux( void );
00355 
00356     CLASS_METHOD
00357     void
00358     EndAux( void );
00359 
00367     CLASS_METHOD
00368     void
00369     Vertex( const EyeVertex* v )
00370     {
00371     ASSERT2( IfReady() );
00372 
00373     #if PORTABLE_VERTEX
00374         glVertex3f( v->x, v->y, v->z );
00375     #else
00376         glVertex3fv( reinterpret_cast<const GLfloat*>( v ) );
00377     #endif
00378     }
00379 
00380     CLASS_METHOD
00381     void
00382     Vertex( const EyeVertex& v )
00383     {
00384     ASSERT2( IfReady() );
00385 
00386     #if PORTABLE_VERTEX
00387         glVertex3f( v.x, v.y, v.z );
00388     #else
00389         glVertex3fv( reinterpret_cast<const GLfloat*>( &v ) );
00390     #endif
00391     }
00392 
00396     CLASS_METHOD
00397     void
00398     Vertex2D( fp x, fp y )
00399     {
00400     ASSERT2( IfReady() );
00401 
00402         // glVertex3f() with Z=1.0 is actually used for a 2D vertex
00403         // in order to draw 2D vertexs over a 3D scene.
00404         // A particular problem is drawing 2D fonts when a 3D land polygon
00405         // at low altitude becomes so close that it would obscure the 2D fonts.
00406         glVertex3f( x, y, 1.0 );
00407     }
00408 
00412     CLASS_METHOD
00413     void
00414     Normal( const NormalVertex& n )
00415     {
00416     ASSERT2( IfReady() );
00417 
00418         glNormal3f( n.x, n.y, n.z );
00419     }
00420 
00424     CLASS_METHOD
00425     void
00426     Color( const RGBA rgba )
00427     {
00428     ASSERT2( IfReady() );
00429 
00430         glColor4ubv( const_cast<uint8*>( rgba.Get() ) );
00431     }
00432 
00436     CLASS_METHOD
00437     void
00438     DrawRect2D( const Rect<int>& rect, const RGBA rgba );
00439 
00440 //------------------------------------------------------------------------------
00441 // GFX modes:
00442 
00443 private:
00444     // Enable or disable an OpenGL mode if necessary, else leave unchanged.
00445     // Returns previous mode and updates variable to remember next mode.
00446     CLASS_METHOD bool
00447     Enable( const bool enable, bool& var, const GLenum mode )
00448     {
00449     ASSERT2( IfReady() );
00450 
00451         const bool prev = var;
00452 
00453         if ( enable and (not var) )
00454         {
00455             glEnable( mode );
00456             var = enable;
00457         }
00458         else if ( (not enable) and var )
00459         {
00460             glDisable( mode );
00461             var = enable;
00462         }
00463 
00464         return prev;
00465 
00466     
00467     }
00468 
00469 public:
00470     CLASS_METHOD Modes
00471     GetModes( void )
00472     {
00473         return msModes;
00474     }
00475 
00476     CLASS_METHOD void
00477     SetModes( const Modes& modes );
00478 
00479     CLASS_METHOD
00480     void
00481     SetPolygonMode( const ePolygonMode polygonMode );
00482 
00483     CLASS_METHOD bool
00484     EnableDepthMask( const bool enable );
00485 
00486     CLASS_METHOD bool
00487     EnableDepthTest( const bool enable );
00488 
00489     CLASS_METHOD bool
00490     EnableTexture2( const bool enable )
00491     {
00492         return Enable( enable, msModes.mTexture2, GL_TEXTURE_2D );
00493     }
00494 
00499     CLASS_METHOD
00500     ePrim
00501     Polygon2Prim( const uint vertexCnt )
00502     {
00503     ASSERT2( IfReady() );
00504     ASSERT( vertexCnt < sizeof(msPrimTable) );
00505 
00506         return msPrimTable[vertexCnt];
00507     }
00508 
00509     CLASS_METHOD
00510     void
00511     SetShadeModel( const eShadeModel shade );
00512 
00513     CLASS_METHOD
00514     void
00515     SetLineWidth( const fp lineWidth, const bool lineSmooth = false );
00516 
00517     CLASS_METHOD
00518     void
00519     SetPointSize( const fp pointSize );
00520 
00521 //------------------------------------------------------------------------------
00522 // GFX lighting:
00523 
00524 public:
00530     class Light
00531     {
00532     friend class GFX;
00533     
00534     public:
00537         enum eLightId
00538         {
00539             eLightId_0 = GL_LIGHT0,
00540             eLightId_1 = GL_LIGHT1,
00541             eLightId_2 = GL_LIGHT2,
00542             eLightId_3 = GL_LIGHT3,
00543             eLightId_4 = GL_LIGHT4,
00544             eLightId_6 = GL_LIGHT6,
00545             eLightId_7 = GL_LIGHT7
00546         };
00547 
00548     public:
00549                 Light( const eLightId lightId = eLightId_0 );
00550         void    SetAmbient( const RGBA color );
00551         void    SetDiffuse( const RGBA color );
00552         void    SetSpecular( const RGBA color );
00553         void    SetPosition( const WorldVertex& position, const fp w );
00554         pair<WorldVertex,fp> GetPosition( void ) const;
00555 
00556     private:
00557         eLightId mId;
00558         bool mSetAmbient;  TinyArray<4,GLfloat> mAmbient;  // mSet* become true if Set*() were called (valid flags)
00559         bool mSetDiffuse;  TinyArray<4,GLfloat> mDiffuse;
00560         bool mSetSpecular; TinyArray<4,GLfloat> mSpecular;
00561         bool mSetPosition; TinyArray<4,GLfloat> mPosition;  // (x,y,z,w)
00562     };
00563 
00567     CLASS_METHOD
00568     void
00569     EnableLighting( const bool enable = true )
00570     {
00571         if ( enable )
00572             glEnable( GL_LIGHTING );
00573         else
00574             glDisable( GL_LIGHTING );
00575 
00576         msModes.mLighting = enable;
00577     }
00578 
00579     CLASS_METHOD
00580     bool IfLighting( void )
00581     {
00582         return msModes.mLighting;
00583     }
00584 
00588     CLASS_METHOD
00589     void
00590     SetLight( Light& light, const bool enable = true );
00591 
00592 //------------------------------------------------------------------------------
00593 // GFX materials:
00594 
00600     class Material
00601     {
00602     friend class GFX;
00603     
00604     public:
00605                     Material( void );
00606         void        SetAmbient( const RGBA rgba );
00607         void        SetDiffuse( const RGBA rgba );
00608         void        SetSpecular( const RGBA rgba );
00609         void        SetShininess( const fp shininess );
00610         friend inline bool operator<( const Material& a, const Material& b )
00611         {
00612             RETURN_LT_TRUE_GT_FALSE( int(a.mSetAmbient),   int(b.mSetAmbient) )
00613             RETURN_LT_TRUE_GT_FALSE( int(a.mSetDiffuse),   int(b.mSetDiffuse) )
00614             RETURN_LT_TRUE_GT_FALSE( int(a.mSetSpecular),  int(b.mSetSpecular) )
00615             RETURN_LT_TRUE_GT_FALSE( int(a.mSetShininess), int(b.mSetShininess) )
00616             RETURN_LT_TRUE_GT_FALSE( a.mAmbient,   b.mAmbient )
00617             RETURN_LT_TRUE_GT_FALSE( a.mDiffuse,   b.mDiffuse )
00618             RETURN_LT_TRUE_GT_FALSE( a.mSpecular,  b.mSpecular )
00619             RETURN_LT_TRUE_GT_FALSE( a.mShininess, b.mShininess )
00620             return false;
00621         }
00622 
00623     private:
00624         bool mSetAmbient;   TinyArray<4,GLfloat> mAmbient;
00625         bool mSetDiffuse;   TinyArray<4,GLfloat> mDiffuse;
00626         bool mSetSpecular;  TinyArray<4,GLfloat> mSpecular;
00627         bool mSetShininess; TinyArray<1,GLfloat> mShininess;
00628     };
00629 
00633     CLASS_METHOD
00634     void
00635     SetMaterial( Material& material );
00636 
00637 //------------------------------------------------------------------------------
00638 // GFX texture matrix:
00639 
00640     CLASS_METHOD
00641     void
00642     IdentityTextureMatrix( void );
00643 
00644 
00645     CLASS_METHOD
00646     void
00647     SetTextureMatrix( const Matrix& m );
00648 
00649     CLASS_METHOD
00650     void
00651     SetTextureMatrix( const fp[16] );
00652 
00653     CLASS_METHOD
00654     void
00655     GetTextureMatrix( fp[16] /*OUT*/ );
00656 
00657     CLASS_METHOD
00658     void
00659     TranslateTextureMatrix( fp x, fp y, fp z );
00660 
00661     CLASS_METHOD
00662     void
00663     RotateTextureMatrix( const Degree deg, fp x, fp y, fp z );
00664 
00665 //------------------------------------------------------------------------------
00666 // GFX translucent:
00667 
00671     CLASS_METHOD
00672     void
00673     EnableTranslucent( void );
00674 
00675     CLASS_METHOD
00676     void
00677     DisableTranslucent( void );
00678 
00679 //------------------------------------------------------------------------------
00680 // GFX fragment blending:
00681 
00686     CLASS_METHOD
00687     void
00688     EnableBlend( const eBlend src = eBlend_SRC_ALPHA,
00689                  const eBlend dst = eBlend_ONE_MINUS_SRC_ALPHA,
00690                  const eDepthTest depthTest = eDepthTest_ENABLE );
00691 
00692     CLASS_METHOD
00693     void
00694     DisableBlend( void );
00695 
00696     CLASS_METHOD
00697     void
00698     SetBlendFunc( const eBlend src, const eBlend dst )
00699     {
00700         if ( (src != msModes.mBlendSrc)
00701           || (dst != msModes.mBlendDst) )
00702         {
00703             msModes.mBlendSrc = src;
00704             msModes.mBlendDst = dst;
00705             glBlendFunc( src, dst );
00706         }
00707     }
00708 
00709 //------------------------------------------------------------------------------
00710 // GFX image blending:
00711 
00722     CLASS_METHOD
00723     void
00724     BeginBlendImage( const uint width, const eColorFormat colorFormat = eColorFormat_RGBA );
00725 
00726     CLASS_METHOD
00727     void
00728     BlendImage( const void* img, const uint imgLen );
00729 
00730     CLASS_METHOD
00731     void
00732     GetBlendImage( void* img/*OUT*/, const uint imgLen );
00733 
00734     CLASS_METHOD
00735     void
00736     EndBlendImage( void );
00737 
00738 //------------------------------------------------------------------------------
00739 // GFX antialiasing:
00740 
00744     CLASS_METHOD void
00745     EnableAntialias( const eAntialias antialias );
00746 
00747 //------------------------------------------------------------------------------
00748 // GFX fog:
00749 
00753     CLASS_METHOD bool
00754     EnableFog( const bool enable );
00755 
00756     CLASS_METHOD bool
00757     EnableFog( const bool enable, const float fogDensity, const RGBA fogRgba );
00758 
00759     CLASS_METHOD
00760     void
00761     SetFogColor( const RGBA rgba );
00762 
00763     CLASS_METHOD
00764     RGBA
00765     GetFogColor( void );
00766 
00767     CLASS_METHOD
00768     void
00769     SetFogDensity( const fp fogDensity );
00770 
00771     CLASS_METHOD
00772     void
00773     SetBaseFogDensity( const fp baseFogDensity );
00774 
00775     CLASS_METHOD
00776     fp
00777     GetFogDensity( void );
00778 
00779 //------------------------------------------------------------------------------
00780 // GFX viewport/perspective/frustum:
00781 
00783     struct Perspective
00784     {
00785         Perspective( void );
00786         Perspective( Degree fov, fp frustumNear, fp frustumFar );
00787 
00788         Degree  mFov;
00789         fp      mFrustumNear;
00790         fp      mFrustumFar;
00791     };
00792 
00793     CLASS_METHOD void
00794     SetViewport( const Rect<int>& rect, bool force = false );
00795 
00796     CLASS_METHOD void
00797     ClearViewport( void );
00798 
00799     CLASS_METHOD Rect<int>
00800     GetViewport( void );
00801 
00802     CLASS_METHOD WidthHeight<int>
00803     GetWindow( void );
00804 
00805     CLASS_METHOD Rect<int>
00806     GetWindowRect( void );
00807 
00808     CLASS_METHOD void
00809     SetPerspective( const Perspective& perspective );
00810 
00811     CLASS_METHOD void
00812     SetPerspective( const Perspective& perspective, const WidthHeight<int>& widthHeight );
00813 
00814     CLASS_METHOD Perspective
00815     GetPerspective( void )
00816     {
00817         return msPerspective;
00818     }
00819 
00820     CLASS_METHOD fp
00821     GetPerspectiveFov( void )
00822     {
00823         return msPerspective.mFov;
00824     }
00825 
00829     CLASS_METHOD Vector2 Project( const EyeVertex& ev );
00830 
00831     CLASS_METHOD bool
00832     IfVisible( const Vector3& v );
00833 
00834     CLASS_METHOD bool
00835     IfVisibleSphere( const Vector3& v, const fp radius );
00836 
00837 private:
00838     CLASS_METHOD void
00839     ComputeFrustum( void );
00840 
00841 //------------------------------------------------------------------------------
00842 // GFX events and error-checking:
00843 
00844 public:
00848     CLASS_METHOD
00849     void
00850     PostRedisplay( void )
00851     {
00852     ASSERT2( IfReady() );
00853 
00854         glutPostRedisplay();
00855     }
00856 
00860     CLASS_METHOD
00861     void
00862     ClearError( void );
00863 
00864     CLASS_METHOD
00865     void
00866     CheckError( const string funcName = string(), bool dumpcore = false );
00867 
00868 //------------------------------------------------------------------------------
00869 // GFX timer:
00870 
00874     CLASS_METHOD Milliseconds GetTick( void );
00875     CLASS_METHOD Milliseconds GetTickDelta( void );
00876     CLASS_METHOD Milliseconds GetTickFreq( void );
00877     CLASS_METHOD void SetTickFreq( const Milliseconds freq );
00878 
00879 //------------------------------------------------------------------------------
00880 // GFX misc methods:
00881 
00882     CLASS_METHOD
00883     void
00884     SetBackgroundColor( const RGBA rgba );
00885 
00886 //------------------------------------------------------------------------------
00887 // GFX initialization:
00888 
00892     CLASS_METHOD void Init( int argc, char** argv );
00893 
00894     CLASS_METHOD void Start( void );
00895 
00897     CLASS_METHOD bool IfReady( void ) { return msReady; }
00898 
00899 //------------------------------------------------------------------------------
00900 // private methods
00901 private:
00902 
00903     CLASS_METHOD void Cmdargs( int argc, char** argv );
00904 
00905     CLASS_METHOD void CheckCapabilities( void );
00906 
00907     CLASS_METHOD void ConfigureSettingsBeforeReady( void );
00908 
00909     CLASS_METHOD void ConfigureSettingsAfterReady( void );
00910 
00911     CLASS_METHOD void Idle( void );
00912 
00913     CLASS_METHOD void Reshape( int w, int h );
00914 
00915     CLASS_METHOD void Display( void );
00916 
00917     CLASS_METHOD void Timer( int unused );
00918 
00919     CLASS_METHOD void MouseButtonHandler( int button, int state, int x, int y );
00920 
00921     CLASS_METHOD void MouseMotionPassiveHandler( int x, int y );
00922 
00923     CLASS_METHOD void MouseMotionHandler( int x, int y );
00924 
00925     CLASS_METHOD void ResetModelViewMatrix( void );
00926 
00927     CLASS_METHOD void UpdatePerspective( void );
00928 
00929     CLASS_METHOD fp PerspectiveAngle( const fp size, const fp dist );
00930 
00931 //------------------------------------------------------------------------------
00932 // GFX system state:
00933 private:
00934     CLASS_VAR bool              msReady;
00935     CLASS_VAR WidthHeight<int>  msWindow;  
00936     CLASS_VAR Rect<int>         msViewport;
00937     CLASS_VAR Perspective       msPerspective;
00938     CLASS_VAR fp                msFrustum[6][4];  
00939     CLASS_VAR GLfloat           msProjectionMatrix[GFX::MATRIX_ELEMS];
00940     CLASS_VAR Milliseconds      msTick;         
00941     CLASS_VAR Milliseconds      msTickFreq;     
00942     CLASS_CONST uint            DEFAULT_TICK_FREQ_MILLISEC = 20;
00943 
00944 //------------------------------------------------------------------------------
00945 // GFX drawing state:
00946 private:
00947     CLASS_VAR Modes         msModes;
00948     CLASS_VAR Modes         msModesSaved2D;
00949     CLASS_VAR GLint         msIfAuxBuffer;  // if OpenGL auxillary buffer available
00950     CLASS_CONST ePrim       msPrimTable[5];  // limited to triangles and quads (3,4)
00951     CLASS_VAR RGBA          msFogColor;
00952     CLASS_VAR GLint         msFogMode;
00953     CLASS_VAR fp            msFogDensity;
00954     CLASS_VAR fp            msBaseFogDensity;
00955     CLASS_VAR int           msBlockNest;  // prevent nesting glBegin()/glEnd()
00956 #if DEBUG
00957     CLASS_VAR int           msAuxBlockNest;
00958     CLASS_VAR bool          msComputedFrustum;
00959 #endif
00960 };
00961 
00962 //------------------------------------------------------------------------------
00963 // Minimum OpenGL requirements.  OpenGL 1.4 provides required glWindowPos().
00964 #if OLD_OPENGL
00965     const fp MIN_OPENGL_VERSION_FLOAT = 1.2;  // stumble forth
00966 #else
00967     #ifndef GL_VERSION_1_4  // equal or at least
00968     #error "Below minimum requirement: OpenGL 1.4"
00969     #endif
00970     const fp MIN_OPENGL_VERSION_FLOAT = 1.4;
00971 #endif
00972 //------------------------------------------------------------------------------
00973 
00974 } // namespace gfx
00975 
00976 #endif // GFX_OPENGL_HH
00977 #endif // GFXSYS_OPENGL
Palomino 3D Engine documents generated by doxygen 1.5.3 on Fri Nov 23 11:26:11 2007