LCOV - code coverage report
Current view: top level - Core - OOOpenGLExtensionManager.h (source / functions) Hit Total Coverage
Test: coverxygen.info Lines: 0 43 0.0 %
Date: 2025-05-28 07:50:54 Functions: 0 0 -

          Line data    Source code
       1           0 : /*
       2             : 
       3             : OOOpenGLExtensionManager.h
       4             : 
       5             : Handles checking for and using OpenGL extensions and related information.
       6             : 
       7             : This is thread safe, except for initialization; that is, +sharedManager should
       8             : be called from the main thread at an early point. The OpenGL context must be
       9             : set up by then.
      10             : 
      11             : 
      12             : Copyright (C) 2007-2013 Jens Ayton and contributors
      13             : 
      14             : Permission is hereby granted, free of charge, to any person obtaining a copy
      15             : of this software and associated documentation files (the "Software"), to deal
      16             : in the Software without restriction, including without limitation the rights
      17             : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      18             : copies of the Software, and to permit persons to whom the Software is
      19             : furnished to do so, subject to the following conditions:
      20             : 
      21             : The above copyright notice and this permission notice shall be included in all
      22             : copies or substantial portions of the Software.
      23             : 
      24             : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      25             : IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      26             : FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      27             : AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      28             : LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      29             : OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      30             : SOFTWARE.
      31             : 
      32             : */
      33             : 
      34             : #import "OOCocoa.h"
      35             : #import "OOOpenGL.h"
      36             : #import "OOFunctionAttributes.h"
      37             : #import "OOTypes.h"
      38             : 
      39             : 
      40             : #ifndef OO_SHADERS
      41             : #ifdef NO_SHADERS
      42             : #define OO_SHADERS              0
      43             : #else
      44           0 : #define OO_SHADERS              1
      45             : #endif
      46             : #endif
      47             : 
      48             : 
      49             : #if OO_SHADERS
      50             : 
      51             : // Certain extensions are required for shader support.
      52             : #ifndef GL_ARB_multitexture
      53             : #warning NO_SHADERS not defined and GL_ARB_multitexture not defined; if possible, use a newer version of glext.h.
      54             : #endif
      55             : 
      56             : #ifndef GL_ARB_shader_objects
      57             : #warning NO_SHADERS not defined and GL_ARB_shader_objects not defined; if possible, use a newer version of glext.h.
      58             : #endif
      59             : 
      60             : #ifndef GL_ARB_shading_language_100
      61             : #warning NO_SHADERS not defined and GL_ARB_shading_language_100 not defined; if possible, use a newer version of glext.h.
      62             : #endif
      63             : 
      64             : #ifndef GL_ARB_fragment_shader
      65             : #warning NO_SHADERS not defined and GL_ARB_fragment_shader not defined; if possible, use a newer version of glext.h.
      66             : #endif
      67             : 
      68             : #ifndef GL_ARB_vertex_shader
      69             : #warning NO_SHADERS not defined and GL_ARB_vertex_shader not defined; if possible, use a newer version of glext.h.
      70             : #endif
      71             : 
      72             : #endif //OO_SHADERS
      73             : 
      74             : 
      75             : #if GL_ARB_vertex_buffer_object
      76             : #define OO_USE_VBO                              0       // Disabled due to crashes on certain systems (and limited VBO use)
      77             : #else
      78           0 : #define OO_USE_VBO                              0
      79             : #warning Building without vertex buffer object support, are your OpenGL headers up to date?
      80             : #endif
      81             : 
      82             : 
      83             : #if GL_EXT_framebuffer_object
      84             : #define OO_USE_FBO                              1
      85             : #else
      86           0 : #define OO_USE_FBO                              0
      87             : #warning Building without frame buffer object support, are your OpenGL headers up to date?
      88             : #endif
      89             : 
      90             : 
      91             : /*      Multitexturing requires GL_ARB_multitexture, but we only have use for it
      92             :         if GL_ARB_texture_env_combine is available, and GL_ARB_texture_env_combine
      93             :         requires GL_ARB_multitexture. Both GL_ARB_multitexture and
      94             :         GL_ARB_texture_env_combine were promoted to core in OpenGL 1.3.
      95             : */
      96             : #if GL_ARB_texture_env_combine
      97             : #define OO_MULTITEXTURE                 1
      98             : #else
      99             : #warning Building without texture combiner support, are your OpenGL headers up to date?
     100           0 : #define OO_MULTITEXTURE                 0
     101             : #endif
     102             : 
     103             : #if defined(GL_ARB_texture_cube_map) || defined(GL_VERSION_1_3)
     104             : #define OO_TEXTURE_CUBE_MAP             1
     105             : #else
     106             : #warning Building without cube map support, are your OpenGL headers up to date?
     107           0 : #define OO_TEXTURE_CUBE_MAP             0
     108             : #endif
     109             : 
     110             : 
     111             : 
     112           0 : #define OOOPENGLEXTMGR_LOCK_SET_ACCESS          (!OOLITE_MAC_OS_X)
     113             : 
     114             : 
     115           0 : @interface OOOpenGLExtensionManager: NSObject
     116             : {
     117             : @private
     118             : #if OOOPENGLEXTMGR_LOCK_SET_ACCESS
     119             :         NSLock                                  *lock;
     120             : #endif
     121           0 :         NSSet                                   *extensions;
     122             :         
     123           0 :         NSString                                *vendor;
     124           0 :         NSString                                *renderer;
     125             :         
     126           0 :         unsigned                                major, minor, release;
     127             :         
     128           0 :         BOOL                                    usePointSmoothing;
     129           0 :         BOOL                                    useLineSmoothing;
     130           0 :         BOOL                                    useDustShader;
     131             :         
     132             : #if OO_SHADERS
     133           0 :         BOOL                                    shadersAvailable;
     134           0 :         BOOL                                    shadersForceDisabled;
     135           0 :         OOShaderSetting                 defaultShaderSetting;
     136           0 :         OOShaderSetting                 maximumShaderSetting;
     137           0 :         GLint                                   textureImageUnitCount;
     138             : #endif
     139             : #if OO_USE_VBO
     140             :         BOOL                                    vboSupported;
     141             : #endif
     142             : #if OO_USE_FBO
     143             :         BOOL                                    fboSupported;
     144             : #endif
     145             : #if OO_MULTITEXTURE
     146             :         BOOL                                    textureCombinersSupported;
     147             :         GLint                                   textureUnitCount;
     148             : #endif
     149             : }
     150             : 
     151           0 : + (OOOpenGLExtensionManager *) sharedManager;
     152             : 
     153           0 : - (void) reset;
     154             : 
     155           0 : - (BOOL)haveExtension:(NSString *)extension;
     156             : 
     157           0 : - (BOOL)shadersSupported;
     158           0 : - (BOOL)shadersForceDisabled;
     159           0 : - (OOGraphicsDetail)defaultDetailLevel;
     160           0 : - (OOGraphicsDetail)maximumDetailLevel;
     161           0 : - (GLint)textureImageUnitCount;                 // Fragment shader sampler count limit. Does not apply to fixed function multitexturing. (GL_MAX_TEXTURE_IMAGE_UNITS_ARB)
     162             : 
     163           0 : - (BOOL)vboSupported;                                   // Vertex buffer objects
     164           0 : - (BOOL)fboSupported;                                   // Frame buffer objects
     165           0 : - (BOOL)textureCombinersSupported;
     166           0 : - (GLint)textureUnitCount;                              // Fixed function multitexture limit, does not apply to shaders. (GL_MAX_TEXTURE_UNITS_ARB)
     167             : 
     168           0 : - (NSUInteger)majorVersionNumber;
     169           0 : - (NSUInteger)minorVersionNumber;
     170           0 : - (NSUInteger)releaseVersionNumber;
     171           0 : - (void)getVersionMajor:(unsigned *)outMajor minor:(unsigned *)outMinor release:(unsigned *)outRelease;
     172           0 : - (BOOL) versionIsAtLeastMajor:(unsigned)maj minor:(unsigned)min;
     173             : 
     174           0 : - (NSString *) vendorString;
     175           0 : - (NSString *) rendererString;
     176             : 
     177             : //      GL_POINT_SMOOTH is slow or non-functional on some GPUs.
     178           0 : - (BOOL) usePointSmoothing;
     179           0 : - (BOOL) useLineSmoothing;
     180             : 
     181             : // Using vertex shader for dust transformation is counterproductive on systems which run vertex shaders on the CPU.
     182           0 : - (BOOL) useDustShader;
     183             : 
     184             : @end
     185             : 
     186             : 
     187             : OOINLINE BOOL OOShadersSupported(void) INLINE_PURE_FUNC;
     188           0 : OOINLINE BOOL OOShadersSupported(void)
     189             : {
     190             :         return [[OOOpenGLExtensionManager sharedManager] shadersSupported];
     191             : }
     192             : 
     193             : 
     194             : #if OOLITE_WINDOWS
     195             : /*      Declare the function pointers for the OpenGL extensions used in the game
     196             :         (required for Windows only).
     197             : */
     198             : 
     199             : #if OO_SHADERS
     200             : // Shader functions
     201             : PFNGLUSEPROGRAMOBJECTARBPROC                    glUseProgramObjectARB;
     202             : PFNGLGETUNIFORMLOCATIONARBPROC                  glGetUniformLocationARB;
     203             : PFNGLUNIFORM1IARBPROC                                   glUniform1iARB;
     204             : PFNGLUNIFORM1FARBPROC                                   glUniform1fARB;
     205             : PFNGLUNIFORMMATRIX3FVARBPROC                    glUniformMatrix3fvARB;
     206             : PFNGLUNIFORMMATRIX4FVARBPROC                    glUniformMatrix4fvARB;
     207             : PFNGLUNIFORM4FVARBPROC                                  glUniform4fvARB;
     208             : PFNGLGETOBJECTPARAMETERIVARBPROC                glGetObjectParameterivARB;
     209             : PFNGLCREATESHADEROBJECTARBPROC                  glCreateShaderObjectARB;
     210             : PFNGLGETINFOLOGARBPROC                                  glGetInfoLogARB;
     211             : PFNGLCREATEPROGRAMOBJECTARBPROC                 glCreateProgramObjectARB;
     212             : PFNGLATTACHOBJECTARBPROC                                glAttachObjectARB;
     213             : PFNGLDELETEOBJECTARBPROC                                glDeleteObjectARB;
     214             : PFNGLLINKPROGRAMARBPROC                                 glLinkProgramARB;
     215             : PFNGLCOMPILESHADERARBPROC                               glCompileShaderARB;
     216             : PFNGLSHADERSOURCEARBPROC                                glShaderSourceARB;
     217             : PFNGLUNIFORM2FVARBPROC                                  glUniform2fvARB;
     218             : PFNGLBINDATTRIBLOCATIONARBPROC                  glBindAttribLocationARB;
     219             : PFNGLENABLEVERTEXATTRIBARRAYARBPROC             glEnableVertexAttribArrayARB;
     220             : PFNGLVERTEXATTRIBPOINTERARBPROC                 glVertexAttribPointerARB;
     221             : PFNGLDISABLEVERTEXATTRIBARRAYARBPROC    glDisableVertexAttribArrayARB;
     222             : PFNGLVALIDATEPROGRAMARBPROC                             glValidateProgramARB;
     223             : #endif  // OO_SHADERS
     224             : 
     225             : 
     226             : #if OO_SHADERS || OO_MULTITEXTURE
     227             : PFNGLACTIVETEXTUREARBPROC                               glActiveTextureARB;
     228             : #endif
     229             : 
     230             : #if OO_MULTITEXTURE
     231             : PFNGLCLIENTACTIVETEXTUREARBPROC                 glClientActiveTextureARB;
     232             : #endif
     233             : 
     234             : #if OO_USE_VBO
     235             : PFNGLGENBUFFERSARBPROC                                  glGenBuffersARB;
     236             : PFNGLDELETEBUFFERSARBPROC                               glDeleteBuffersARB;
     237             : PFNGLBINDBUFFERARBPROC                                  glBindBufferARB;
     238             : PFNGLBUFFERDATAARBPROC                                  glBufferDataARB;
     239             : #endif
     240             : 
     241             : #if OO_USE_FBO
     242             : PFNGLGENFRAMEBUFFERSEXTPROC                             glGenFramebuffersEXT;
     243             : PFNGLBINDFRAMEBUFFEREXTPROC                             glBindFramebufferEXT;
     244             : PFNGLGENRENDERBUFFERSEXTPROC                    glGenRenderbuffersEXT;
     245             : PFNGLBINDRENDERBUFFEREXTPROC                    glBindRenderbufferEXT;
     246             : PFNGLRENDERBUFFERSTORAGEEXTPROC                 glRenderbufferStorageEXT;
     247             : PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC             glFramebufferRenderbufferEXT;
     248             : PFNGLFRAMEBUFFERTEXTURE2DEXTPROC                glFramebufferTexture2DEXT;
     249             : PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC              glCheckFramebufferStatusEXT;
     250             : PFNGLDELETEFRAMEBUFFERSEXTPROC                  glDeleteFramebuffersEXT;
     251             : PFNGLDELETERENDERBUFFERSEXTPROC                 glDeleteRenderbuffersEXT;
     252             : PFNGLGENRENDERBUFFERSPROC                               glGenRenderbuffers;
     253             : PFNGLBINDRENDERBUFFERPROC                               glBindRenderbuffer;
     254             : PFNGLRENDERBUFFERSTORAGEPROC                    glRenderbufferStorage;
     255             : PFNGLGENFRAMEBUFFERSPROC                                glGenFramebuffers;
     256             : PFNGLBINDFRAMEBUFFERPROC                                glBindFramebuffer;
     257             : PFNGLFRAMEBUFFERRENDERBUFFERPROC                glFramebufferRenderbuffer;
     258             : PFNGLFRAMEBUFFERTEXTURE2DPROC                   glFramebufferTexture2D;
     259             : PFNGLGENVERTEXARRAYSPROC                                glGenVertexArrays;
     260             : PFNGLGENBUFFERSPROC                                             glGenBuffers;
     261             : PFNGLBINDVERTEXARRAYPROC                                glBindVertexArray;
     262             : PFNGLBINDBUFFERPROC                                             glBindBuffer;
     263             : PFNGLBUFFERDATAPROC                                             glBufferData;
     264             : PFNGLVERTEXATTRIBPOINTERPROC                    glVertexAttribPointer;
     265             : PFNGLENABLEVERTEXATTRIBARRAYPROC                glEnableVertexAttribArray;
     266             : PFNGLUSEPROGRAMPROC                                             glUseProgram;
     267             : PFNGLGETUNIFORMLOCATIONPROC                             glGetUniformLocation;
     268             : PFNGLUNIFORM1IPROC                                              glUniform1i;
     269             : PFNGLACTIVETEXTUREPROC                                  glActiveTexture;
     270             : PFNGLBLENDFUNCSEPARATEPROC                              glBlendFuncSeparate;
     271             : PFNGLUNIFORM1FPROC                                              glUniform1f;
     272             : PFNGLUNIFORM2FVPROC                                             glUniform2fv;
     273             : PFNGLDELETERENDERBUFFERSPROC                    glDeleteRenderbuffers;
     274             : PFNGLDELETEFRAMEBUFFERSPROC                             glDeleteFramebuffers;
     275             : PFNGLDELETEVERTEXARRAYSPROC                             glDeleteVertexArrays;
     276             : PFNGLDELETEBUFFERSPROC                                  glDeleteBuffers;
     277             : PFNGLDRAWBUFFERSPROC                                    glDrawBuffers;
     278             : PFNGLCHECKFRAMEBUFFERSTATUSPROC                 glCheckFramebufferStatus;
     279             : PFNGLTEXIMAGE2DMULTISAMPLEPROC                          glTexImage2DMultisample;
     280             : PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC         glRenderbufferStorageMultisample;
     281             : PFNGLBLITFRAMEBUFFERPROC                                        glBlitFramebuffer;
     282             : PFNGLCLAMPCOLORPROC                                             glClampColor;
     283             : #endif
     284             : 
     285             : #endif  // OOLITE_WINDOWS

Generated by: LCOV version 1.14