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-12-19 09:33:35 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             : extern PFNGLUSEPROGRAMOBJECTARBPROC                     glUseProgramObjectARB;
     202             : extern PFNGLGETUNIFORMLOCATIONARBPROC                   glGetUniformLocationARB;
     203             : extern PFNGLUNIFORM1IARBPROC                                    glUniform1iARB;
     204             : extern PFNGLUNIFORM1FARBPROC                                    glUniform1fARB;
     205             : extern PFNGLUNIFORMMATRIX3FVARBPROC                     glUniformMatrix3fvARB;
     206             : extern PFNGLUNIFORMMATRIX4FVARBPROC                     glUniformMatrix4fvARB;
     207             : extern PFNGLUNIFORM4FVARBPROC                                   glUniform4fvARB;
     208             : extern PFNGLGETOBJECTPARAMETERIVARBPROC         glGetObjectParameterivARB;
     209             : extern PFNGLCREATESHADEROBJECTARBPROC                   glCreateShaderObjectARB;
     210             : extern PFNGLGETINFOLOGARBPROC                                   glGetInfoLogARB;
     211             : extern PFNGLCREATEPROGRAMOBJECTARBPROC                  glCreateProgramObjectARB;
     212             : extern PFNGLATTACHOBJECTARBPROC                         glAttachObjectARB;
     213             : extern PFNGLDELETEOBJECTARBPROC                         glDeleteObjectARB;
     214             : extern PFNGLLINKPROGRAMARBPROC                                  glLinkProgramARB;
     215             : extern PFNGLCOMPILESHADERARBPROC                                glCompileShaderARB;
     216             : extern PFNGLSHADERSOURCEARBPROC                         glShaderSourceARB;
     217             : extern PFNGLUNIFORM2FVARBPROC                                   glUniform2fvARB;
     218             : extern PFNGLBINDATTRIBLOCATIONARBPROC                   glBindAttribLocationARB;
     219             : extern PFNGLENABLEVERTEXATTRIBARRAYARBPROC              glEnableVertexAttribArrayARB;
     220             : extern PFNGLVERTEXATTRIBPOINTERARBPROC                  glVertexAttribPointerARB;
     221             : extern PFNGLDISABLEVERTEXATTRIBARRAYARBPROC     glDisableVertexAttribArrayARB;
     222             : extern PFNGLVALIDATEPROGRAMARBPROC                              glValidateProgramARB;
     223             : #endif  // OO_SHADERS
     224             : 
     225             : 
     226             : #if OO_SHADERS || OO_MULTITEXTURE
     227             : extern PFNGLACTIVETEXTUREARBPROC                                glActiveTextureARB;
     228             : #endif
     229             : 
     230             : #if OO_MULTITEXTURE
     231             : extern PFNGLCLIENTACTIVETEXTUREARBPROC                  glClientActiveTextureARB;
     232             : #endif
     233             : 
     234             : #if OO_USE_VBO
     235             : extern PFNGLGENBUFFERSARBPROC                                   glGenBuffersARB;
     236             : extern PFNGLDELETEBUFFERSARBPROC                                glDeleteBuffersARB;
     237             : extern PFNGLBINDBUFFERARBPROC                                   glBindBufferARB;
     238             : extern PFNGLBUFFERDATAARBPROC                                   glBufferDataARB;
     239             : #endif
     240             : 
     241             : #if OO_USE_FBO
     242             : extern PFNGLGENFRAMEBUFFERSEXTPROC                              glGenFramebuffersEXT;
     243             : extern PFNGLBINDFRAMEBUFFEREXTPROC                              glBindFramebufferEXT;
     244             : extern PFNGLGENRENDERBUFFERSEXTPROC                     glGenRenderbuffersEXT;
     245             : extern PFNGLBINDRENDERBUFFEREXTPROC                     glBindRenderbufferEXT;
     246             : extern PFNGLRENDERBUFFERSTORAGEEXTPROC                  glRenderbufferStorageEXT;
     247             : extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC              glFramebufferRenderbufferEXT;
     248             : extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC         glFramebufferTexture2DEXT;
     249             : extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC               glCheckFramebufferStatusEXT;
     250             : extern PFNGLDELETEFRAMEBUFFERSEXTPROC                   glDeleteFramebuffersEXT;
     251             : extern PFNGLDELETERENDERBUFFERSEXTPROC                  glDeleteRenderbuffersEXT;
     252             : extern PFNGLGENRENDERBUFFERSPROC                                glGenRenderbuffers;
     253             : extern PFNGLBINDRENDERBUFFERPROC                                glBindRenderbuffer;
     254             : extern PFNGLRENDERBUFFERSTORAGEPROC                     glRenderbufferStorage;
     255             : extern PFNGLGENFRAMEBUFFERSPROC                         glGenFramebuffers;
     256             : extern PFNGLBINDFRAMEBUFFERPROC                         glBindFramebuffer;
     257             : extern PFNGLFRAMEBUFFERRENDERBUFFERPROC         glFramebufferRenderbuffer;
     258             : extern PFNGLFRAMEBUFFERTEXTURE2DPROC                    glFramebufferTexture2D;
     259             : extern PFNGLGENVERTEXARRAYSPROC                         glGenVertexArrays;
     260             : extern PFNGLGENBUFFERSPROC                                              glGenBuffers;
     261             : extern PFNGLBINDVERTEXARRAYPROC                         glBindVertexArray;
     262             : extern PFNGLBINDBUFFERPROC                                              glBindBuffer;
     263             : extern PFNGLBUFFERDATAPROC                                              glBufferData;
     264             : extern PFNGLVERTEXATTRIBPOINTERPROC                     glVertexAttribPointer;
     265             : extern PFNGLENABLEVERTEXATTRIBARRAYPROC         glEnableVertexAttribArray;
     266             : extern PFNGLUSEPROGRAMPROC                                              glUseProgram;
     267             : extern PFNGLGETUNIFORMLOCATIONPROC                              glGetUniformLocation;
     268             : extern PFNGLUNIFORM1IPROC                                               glUniform1i;
     269             : extern PFNGLACTIVETEXTUREPROC                                   glActiveTexture;
     270             : extern PFNGLBLENDFUNCSEPARATEPROC                               glBlendFuncSeparate;
     271             : extern PFNGLUNIFORM1FPROC                                               glUniform1f;
     272             : extern PFNGLUNIFORM2FVPROC                                              glUniform2fv;
     273             : extern PFNGLDELETERENDERBUFFERSPROC                     glDeleteRenderbuffers;
     274             : extern PFNGLDELETEFRAMEBUFFERSPROC                              glDeleteFramebuffers;
     275             : extern PFNGLDELETEVERTEXARRAYSPROC                              glDeleteVertexArrays;
     276             : extern PFNGLDELETEBUFFERSPROC                                   glDeleteBuffers;
     277             : extern PFNGLDRAWBUFFERSPROC                                     glDrawBuffers;
     278             : extern PFNGLCHECKFRAMEBUFFERSTATUSPROC                  glCheckFramebufferStatus;
     279             : extern PFNGLTEXIMAGE2DMULTISAMPLEPROC                           glTexImage2DMultisample;
     280             : extern PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC          glRenderbufferStorageMultisample;
     281             : extern PFNGLBLITFRAMEBUFFERPROC                                 glBlitFramebuffer;
     282             : extern PFNGLCLAMPCOLORPROC                                              glClampColor;
     283             : #endif
     284             : 
     285             : #endif  // OOLITE_WINDOWS

Generated by: LCOV version 1.14