1 2 // Copyright 2018 - 2021 Michael D. Parker 3 // Distributed under the Boost Software License, Version 1.0. 4 // (See accompanying file LICENSE_1_0.txt or copy at 5 // http://www.boost.org/LICENSE_1_0.txt) 6 7 module bindbc.opengl.bind.arb.core_45; 8 9 import bindbc.loader; 10 import bindbc.opengl.config, 11 bindbc.opengl.context; 12 import bindbc.opengl.bind.types; 13 14 static if(glSupport >= GLSupport.gl45) { 15 enum has45 = true; 16 } 17 else enum has45 = false; 18 19 // ARB_clip_control 20 version(GL_ARB) enum useARBClipControl = true; 21 else version(GL_ARB_clip_control) enum useARBClipControl = true; 22 else enum useARBClipControl = has45; 23 24 static if(useARBClipControl) { 25 private bool _hasARBClipControl; 26 @nogc nothrow bool hasARBClipControl() { return _hasARBClipControl; } 27 28 enum : uint { 29 GL_NEGATIVE_ONE_TO_ONE = 0x935E, 30 GL_ZERO_TO_ONE = 0x935F, 31 GL_CLIP_ORIGIN = 0x935C, 32 GL_CLIP_DEPTH_MODE = 0x935D, 33 } 34 35 extern(System) @nogc nothrow alias pglClipControl = void function(GLenum,GLenum); 36 __gshared pglClipControl glClipControl; 37 38 private @nogc nothrow 39 bool loadARBClipControl(SharedLib lib, GLSupport contextVersion) 40 { 41 lib.bindGLSymbol(cast(void**)&glClipControl, "glClipControl"); 42 return resetErrorCountGL; 43 } 44 } 45 else enum hasARBClipControl = false; 46 47 // ARB_conditional_render_inverted 48 version(GL_ARB) enum useARBConditionalRenderInverted = true; 49 else version(GL_ARB_conditional_render_inverted) enum useARBConditionalRenderInverted = true; 50 else enum useARBConditionalRenderInverted = has45; 51 52 static if(useARBConditionalRenderInverted) { 53 private bool _hasARBConditionalRenderInverted; 54 @nogc nothrow bool hasARBConditionalRenderInverted() { return _hasARBConditionalRenderInverted; } 55 56 enum : uint { 57 GL_QUERY_WAIT_INVERTED = 0x8E17, 58 GL_QUERY_NO_WAIT_INVERTED = 0x8E18, 59 GL_QUERY_BY_REGION_WAIT_INVERTED = 0x8E19, 60 GL_QUERY_BY_REGION_NO_WAIT_INVERTED = 0x8E1A, 61 } 62 } 63 else enum hasARBConditionalRenderInverted = false; 64 65 // ARB_cull_distance 66 version(GL_ARB) enum useARBCullDistance = true; 67 else version(GL_ARB_cull_distance) enum useARBCullDistance = true; 68 else enum useARBCullDistance = has45; 69 70 static if(useARBCullDistance) { 71 private bool _hasARBCullDistance; 72 @nogc nothrow bool hasARBCullDistance() { return _hasARBCullDistance; } 73 74 enum : uint { 75 GL_MAX_CULL_DISTANCES = 0x82F9, 76 GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES = 0x82FA, 77 } 78 } 79 else enum hasARBCullDistance = false; 80 81 // ARB_direct_state_access 82 version(GL_ARB) enum useARBDirectStateAccess = true; 83 else version(GL_ARB_direct_state_access) enum useARBDirectStateAccess = true; 84 else enum useARBDirectStateAccess = has45; 85 86 static if(useARBDirectStateAccess) { 87 private bool _hasARBDirectStateAccess; 88 @nogc nothrow bool hasARBDirectStateAccess() { return _hasARBDirectStateAccess; } 89 90 enum : uint { 91 GL_TEXTURE_TARGET = 0x1006, 92 GL_QUERY_TARGET = 0x82EA, 93 } 94 95 extern(System) @nogc nothrow { 96 alias pglCreateTransformFeedbacks = void function(GLsizei,GLuint*); 97 alias pglTransformFeedbackBufferBase = void function(GLsizei,GLuint,GLuint); 98 alias pglTransformFeedbackBufferRange = void function(GLuint,GLuint,GLuint,GLintptr,GLsizei); 99 alias pglGetTransformFeedbackiv = void function(GLuint,GLenum,GLint*); 100 alias pglGetTransformFeedbacki_v = void function(GLuint,GLenum,GLuint,GLint*); 101 alias pglGetTransformFeedbacki64_v = void function(GLuint,GLenum,GLuint,GLint64*); 102 alias pglCreateBuffers = void function(GLsizei,GLuint*); 103 alias pglNamedBufferStorage = void function(GLuint,GLsizeiptr,const(void)*,GLbitfield); 104 alias pglNamedBufferData = void function(GLuint,GLsizeiptr,const(void)*,GLenum); 105 alias pglNamedBufferSubData = void function(GLuint,GLintptr,GLsizeiptr,const(void)*); 106 alias pglCopyNamedBufferSubData = void function(GLuint,GLuint,GLintptr,GLintptr,GLsizeiptr); 107 alias pglClearNamedBufferData = void function(GLuint,GLenum,GLenum,GLenum,const(void)*); 108 alias pglClearNamedBufferSubData = void function(GLuint,GLenum,GLintptr,GLsizeiptr,GLenum,GLenum,const(void)*); 109 alias pglMapNamedBuffer = void* function(GLuint,GLenum); 110 alias pglMapNamedBufferRange = void* function(GLuint,GLintptr,GLsizeiptr,GLbitfield); 111 alias pglUnmapNamedBuffer = GLboolean function(GLuint); 112 alias pglFlushMappedNamedBufferRange = void function(GLuint,GLintptr,GLsizeiptr); 113 alias pglGetNamedBufferParameteriv = void function(GLuint,GLenum,GLint*); 114 alias pglGetNamedBufferParameteri64v = void function(GLuint,GLenum,GLint64*); 115 alias pglGetNamedBufferPointerv = void function(GLuint,GLenum,void**); 116 alias pglGetNamedBufferSubData = void function(GLuint,GLintptr,GLsizeiptr,void*); 117 alias pglCreateFramebuffers = void function(GLsizei,GLuint*); 118 alias pglNamedFramebufferRenderbuffer = void function(GLuint,GLenum,GLenum,GLuint); 119 alias pglNamedFramebufferParameteri = void function(GLuint,GLenum,GLint); 120 alias pglNamedFramebufferTexture = void function(GLuint,GLenum,GLuint,GLint); 121 alias pglNamedFramebufferTextureLayer = void function(GLuint,GLenum,GLuint,GLint,GLint); 122 alias pglNamedFramebufferDrawBuffer = void function(GLuint,GLenum); 123 alias pglNamedFramebufferDrawBuffers = void function(GLuint,GLsizei,const(GLenum)*); 124 alias pglNamedFramebufferReadBuffer = void function(GLuint,GLenum); 125 alias pglInvalidateNamedFramebufferData = void function(GLuint,GLsizei,const(GLenum)*); 126 alias pglInvalidateNamedFramebufferSubData = void function(GLuint,GLsizei,const(GLenum)*,GLint,GLint,GLsizei,GLsizei); 127 alias pglClearNamedFramebufferiv = void function(GLuint,GLenum,GLint,const(GLint)*); 128 alias pglClearNamedFramebufferuiv = void function(GLuint,GLenum,GLint,const(GLuint)*); 129 alias pglClearNamedFramebufferfv = void function(GLuint,GLenum,GLint,const(GLfloat)*); 130 alias pglClearNamedFramebufferfi = void function(GLuint,GLenum,GLint,GLfloat,GLint); 131 alias pglBlitNamedFramebuffer = void function(GLuint,GLuint,GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLbitfield,GLenum); 132 alias pglCheckNamedFramebufferStatus = GLenum function(GLuint,GLenum); 133 alias pglGetNamedFramebufferParameteriv = void function(GLuint,GLenum,GLint*); 134 alias pglGetNamedFramebufferAttachmentParameteriv = void function(GLuint,GLenum,GLenum,GLint*); 135 alias pglCreateRenderbuffers = void function(GLsizei,GLuint*); 136 alias pglNamedRenderbufferStorage = void function(GLuint,GLenum,GLsizei,GLsizei); 137 alias pglNamedRenderbufferStorageMultisample = void function(GLuint,GLsizei,GLenum,GLsizei,GLsizei); 138 alias pglGetNamedRenderbufferParameteriv = void function(GLuint,GLenum,GLint*); 139 alias pglCreateTextures = void function(GLenum,GLsizei,GLuint*); 140 alias pglTextureBuffer = void function(GLuint,GLenum,GLuint); 141 alias pglTextureBufferRange = void function(GLuint,GLenum,GLuint,GLintptr,GLsizeiptr); 142 alias pglTextureStorage1D = void function(GLuint,GLsizei,GLenum,GLsizei); 143 alias pglTextureStorage2D = void function(GLuint,GLsizei,GLenum,GLsizei,GLsizei); 144 alias pglTextureStorage3D = void function(GLuint,GLsizei,GLenum,GLsizei,GLsizei,GLsizei); 145 alias pglTextureStorage2DMultisample = void function(GLuint,GLsizei,GLenum,GLsizei,GLsizei,GLboolean); 146 alias pglTextureStorage3DMultisample = void function(GLuint,GLsizei,GLenum,GLsizei,GLsizei,GLsizei,GLboolean); 147 alias pglTextureSubImage1D = void function(GLuint,GLint,GLint,GLsizei,GLenum,GLenum,const(void)*); 148 alias pglTextureSubImage2D = void function(GLuint,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const(void)*); 149 alias pglTextureSubImage3D = void function(GLuint,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const(void)*); 150 alias pglCompressedTextureSubImage1D = void function(GLuint,GLint,GLint,GLsizei,GLenum,GLsizei,const(void)*); 151 alias pglCompressedTextureSubImage2D = void function(GLuint,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLsizei,const(void)*); 152 alias pglCompressedTextureSubImage3D = void function(GLuint,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLsizei,const(void)*); 153 alias pglCopyTextureSubImage1D = void function(GLuint,GLint,GLint,GLint,GLint,GLsizei); 154 alias pglCopyTextureSubImage2D = void function(GLuint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei); 155 alias pglCopyTextureSubImage3D = void function(GLuint,GLint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei); 156 alias pglTextureParameterf = void function(GLuint,GLenum,GLfloat); 157 alias pglTextureParameterfv = void function(GLuint,GLenum,const(GLfloat)*); 158 alias pglTextureParameteri = void function(GLuint,GLenum,GLint); 159 alias pglTextureParameterIiv = void function(GLuint,GLenum,const(GLint)*); 160 alias pglTextureParameterIuiv = void function(GLuint,GLenum,const(GLuint)*); 161 alias pglTextureParameteriv = void function(GLuint,GLenum,const(GLint)*); 162 alias pglGenerateTextureMipmap = void function(GLuint); 163 alias pglBindTextureUnit = void function(GLuint,GLuint); 164 alias pglGetTextureImage = void function(GLuint,GLint,GLenum,GLenum,GLsizei,void*); 165 alias pglGetCompressedTextureImage = void function(GLuint,GLint,GLsizei,void*); 166 alias pglGetTextureLevelParameterfv = void function(GLuint,GLint,GLenum,GLfloat*); 167 alias pglGetTextureLevelParameteriv = void function(GLuint,GLint,GLenum,GLint*); 168 alias pglGetTextureParameterfv = void function(GLuint,GLenum,GLfloat*); 169 alias pglGetTextureParameterIiv = void function(GLuint,GLenum,GLint*); 170 alias pglGetTextureParameterIuiv = void function(GLuint,GLenum,GLuint*); 171 alias pglGetTextureParameteriv = void function(GLuint,GLenum,GLint*); 172 alias pglCreateVertexArrays = void function(GLsizei,GLuint*); 173 alias pglDisableVertexArrayAttrib = void function(GLuint,GLuint); 174 alias pglEnableVertexArrayAttrib = void function(GLuint,GLuint); 175 alias pglVertexArrayElementBuffer = void function(GLuint,GLuint); 176 alias pglVertexArrayVertexBuffer = void function(GLuint,GLuint,GLuint,GLintptr,GLsizei); 177 alias pglVertexArrayVertexBuffers = void function(GLuint,GLuint,GLsizei,const(GLuint)*,const(GLintptr)*,const(GLsizei)*); 178 alias pglVertexArrayAttribFormat = void function(GLuint,GLuint,GLint,GLenum,GLboolean,GLuint); 179 alias pglVertexArrayAttribIFormat = void function(GLuint,GLuint,GLint,GLenum,GLuint); 180 alias pglVertexArrayAttribLFormat = void function(GLuint,GLuint,GLint,GLenum,GLuint); 181 alias pglVertexArrayAttribBinding = void function(GLuint,GLuint,GLuint); 182 alias pglVertexArrayBindingDivisor = void function(GLuint,GLuint,GLuint); 183 alias pglGetVertexArrayiv = void function(GLuint,GLenum,GLint*); 184 alias pglGetVertexArrayIndexediv = void function(GLuint,GLuint,GLenum,GLint*); 185 alias pglGetVertexArrayIndexed64iv = void function(GLuint,GLuint,GLenum,GLint64*); 186 alias pglCreateSamplers = void function(GLsizei,GLuint*); 187 alias pglCreateProgramPipelines = void function(GLsizei,GLuint*); 188 alias pglCreateQueries = void function(GLenum,GLsizei,GLuint*); 189 alias pglGetQueryBufferObjectiv = void function(GLuint,GLuint,GLenum,GLintptr); 190 alias pglGetQueryBufferObjectuiv = void function(GLuint,GLuint,GLenum,GLintptr); 191 alias pglGetQueryBufferObjecti64v = void function(GLuint,GLuint,GLenum,GLintptr); 192 alias pglGetQueryBufferObjectui64v = void function(GLuint,GLuint,GLenum,GLintptr); 193 } 194 195 __gshared { 196 pglCreateTransformFeedbacks glCreateTransformFeedbacks; 197 pglTransformFeedbackBufferBase glTransformFeedbackBufferBase; 198 pglTransformFeedbackBufferRange glTransformFeedbackBufferRange; 199 pglGetTransformFeedbackiv glGetTransformFeedbackiv; 200 pglGetTransformFeedbacki_v glGetTransformFeedbacki_v; 201 pglGetTransformFeedbacki64_v glGetTransformFeedbacki64_v; 202 pglCreateBuffers glCreateBuffers; 203 pglNamedBufferStorage glNamedBufferStorage; 204 pglNamedBufferData glNamedBufferData; 205 pglNamedBufferSubData glNamedBufferSubData; 206 pglCopyNamedBufferSubData glCopyNamedBufferSubData; 207 pglClearNamedBufferData glClearNamedBufferData; 208 pglClearNamedBufferSubData glClearNamedBufferSubData; 209 pglMapNamedBuffer glMapNamedBuffer; 210 pglMapNamedBufferRange glMapNamedBufferRange; 211 pglUnmapNamedBuffer glUnmapNamedBuffer; 212 pglFlushMappedNamedBufferRange glFlushMappedNamedBufferRange; 213 pglGetNamedBufferParameteriv glGetNamedBufferParameteriv; 214 pglGetNamedBufferParameteri64v glGetNamedBufferParameteri64v; 215 pglGetNamedBufferPointerv glGetNamedBufferPointerv; 216 pglGetNamedBufferSubData glGetNamedBufferSubData; 217 pglCreateFramebuffers glCreateFramebuffers; 218 pglNamedFramebufferRenderbuffer glNamedFramebufferRenderbuffer; 219 pglNamedFramebufferParameteri glNamedFramebufferParameteri; 220 pglNamedFramebufferTexture glNamedFramebufferTexture; 221 pglNamedFramebufferTextureLayer glNamedFramebufferTextureLayer; 222 pglNamedFramebufferDrawBuffer glNamedFramebufferDrawBuffer; 223 pglNamedFramebufferDrawBuffers glNamedFramebufferDrawBuffers; 224 pglNamedFramebufferReadBuffer glNamedFramebufferReadBuffer; 225 pglInvalidateNamedFramebufferData glInvalidateNamedFramebufferData; 226 pglInvalidateNamedFramebufferSubData glInvalidateNamedFramebufferSubData; 227 pglClearNamedFramebufferiv glClearNamedFramebufferiv; 228 pglClearNamedFramebufferuiv glClearNamedFramebufferuiv; 229 pglClearNamedFramebufferfv glClearNamedFramebufferfv; 230 pglClearNamedFramebufferfi glClearNamedFramebufferfi; 231 pglBlitNamedFramebuffer glBlitNamedFramebuffer; 232 pglCheckNamedFramebufferStatus glCheckNamedFramebufferStatus; 233 pglGetNamedFramebufferParameteriv glGetNamedFramebufferParameteriv; 234 pglGetNamedFramebufferAttachmentParameteriv glGetNamedFramebufferAttachmentParameteriv; 235 pglCreateRenderbuffers glCreateRenderbuffers; 236 pglNamedRenderbufferStorage glNamedRenderbufferStorage; 237 pglNamedRenderbufferStorageMultisample glNamedRenderbufferStorageMultisample; 238 pglGetNamedRenderbufferParameteriv glGetNamedRenderbufferParameteriv; 239 pglCreateTextures glCreateTextures; 240 pglTextureBuffer glTextureBuffer; 241 pglTextureBufferRange glTextureBufferRange; 242 pglTextureStorage1D glTextureStorage1D; 243 pglTextureStorage2D glTextureStorage2D; 244 pglTextureStorage3D glTextureStorage3D; 245 pglTextureStorage2DMultisample glTextureStorage2DMultisample; 246 pglTextureStorage3DMultisample glTextureStorage3DMultisample; 247 pglTextureSubImage1D glTextureSubImage1D; 248 pglTextureSubImage2D glTextureSubImage2D; 249 pglTextureSubImage3D glTextureSubImage3D; 250 pglCompressedTextureSubImage1D glCompressedTextureSubImage1D; 251 pglCompressedTextureSubImage2D glCompressedTextureSubImage2D; 252 pglCompressedTextureSubImage3D glCompressedTextureSubImage3D; 253 pglCopyTextureSubImage1D glCopyTextureSubImage1D; 254 pglCopyTextureSubImage2D glCopyTextureSubImage2D; 255 pglCopyTextureSubImage3D glCopyTextureSubImage3D; 256 pglTextureParameterf glTextureParameterf; 257 pglTextureParameterfv glTextureParameterfv; 258 pglTextureParameteri glTextureParameteri; 259 pglTextureParameterIiv glTextureParameterIiv; 260 pglTextureParameterIuiv glTextureParameterIuiv; 261 pglTextureParameteriv glTextureParameteriv; 262 pglGenerateTextureMipmap glGenerateTextureMipmap; 263 pglBindTextureUnit glBindTextureUnit; 264 pglGetTextureImage glGetTextureImage; 265 pglGetCompressedTextureImage glGetCompressedTextureImage; 266 pglGetTextureLevelParameterfv glGetTextureLevelParameterfv; 267 pglGetTextureLevelParameteriv glGetTextureLevelParameteriv; 268 pglGetTextureParameterfv glGetTextureParameterfv; 269 pglGetTextureParameterIiv glGetTextureParameterIiv; 270 pglGetTextureParameterIuiv glGetTextureParameterIuiv; 271 pglGetTextureParameteriv glGetTextureParameteriv; 272 pglCreateVertexArrays glCreateVertexArrays; 273 pglDisableVertexArrayAttrib glDisableVertexArrayAttrib; 274 pglEnableVertexArrayAttrib glEnableVertexArrayAttrib; 275 pglVertexArrayElementBuffer glVertexArrayElementBuffer; 276 pglVertexArrayVertexBuffer glVertexArrayVertexBuffer; 277 pglVertexArrayVertexBuffers glVertexArrayVertexBuffers; 278 pglVertexArrayAttribBinding glVertexArrayAttribBinding; 279 pglVertexArrayAttribFormat glVertexArrayAttribFormat; 280 pglVertexArrayAttribIFormat glVertexArrayAttribIFormat; 281 pglVertexArrayAttribLFormat glVertexArrayAttribLFormat; 282 pglVertexArrayBindingDivisor glVertexArrayBindingDivisor; 283 pglGetVertexArrayiv glGetVertexArrayiv; 284 pglGetVertexArrayIndexediv glGetVertexArrayIndexediv; 285 pglGetVertexArrayIndexed64iv glGetVertexArrayIndexed64iv; 286 pglCreateSamplers glCreateSamplers; 287 pglCreateProgramPipelines glCreateProgramPipelines; 288 pglCreateQueries glCreateQueries; 289 pglGetQueryBufferObjecti64v glGetQueryBufferObjecti64v; 290 pglGetQueryBufferObjectiv glGetQueryBufferObjectiv; 291 pglGetQueryBufferObjectui64v glGetQueryBufferObjectui64v; 292 pglGetQueryBufferObjectuiv glGetQueryBufferObjectuiv; 293 } 294 295 private @nogc nothrow 296 bool loadARBDirectStateAccess(SharedLib lib, GLSupport contextVersion) 297 { 298 lib.bindGLSymbol(cast(void**)&glCreateTransformFeedbacks, "glCreateTransformFeedbacks"); 299 lib.bindGLSymbol(cast(void**)&glTransformFeedbackBufferBase, "glTransformFeedbackBufferBase"); 300 lib.bindGLSymbol(cast(void**)&glTransformFeedbackBufferRange, "glTransformFeedbackBufferRange"); 301 lib.bindGLSymbol(cast(void**)&glGetTransformFeedbackiv, "glGetTransformFeedbackiv"); 302 lib.bindGLSymbol(cast(void**)&glGetTransformFeedbacki_v, "glGetTransformFeedbacki_v"); 303 lib.bindGLSymbol(cast(void**)&glGetTransformFeedbacki64_v, "glGetTransformFeedbacki64_v"); 304 lib.bindGLSymbol(cast(void**)&glCreateBuffers, "glCreateBuffers"); 305 lib.bindGLSymbol(cast(void**)&glNamedBufferStorage, "glNamedBufferStorage"); 306 lib.bindGLSymbol(cast(void**)&glNamedBufferData, "glNamedBufferData"); 307 lib.bindGLSymbol(cast(void**)&glNamedBufferSubData, "glNamedBufferSubData"); 308 lib.bindGLSymbol(cast(void**)&glCopyNamedBufferSubData, "glCopyNamedBufferSubData"); 309 lib.bindGLSymbol(cast(void**)&glClearNamedBufferData, "glClearNamedBufferData"); 310 lib.bindGLSymbol(cast(void**)&glClearNamedBufferSubData, "glClearNamedBufferSubData"); 311 lib.bindGLSymbol(cast(void**)&glMapNamedBuffer, "glMapNamedBuffer"); 312 lib.bindGLSymbol(cast(void**)&glMapNamedBufferRange, "glMapNamedBufferRange"); 313 lib.bindGLSymbol(cast(void**)&glUnmapNamedBuffer, "glUnmapNamedBuffer"); 314 lib.bindGLSymbol(cast(void**)&glFlushMappedNamedBufferRange, "glFlushMappedNamedBufferRange"); 315 lib.bindGLSymbol(cast(void**)&glGetNamedBufferParameteriv, "glGetNamedBufferParameteriv"); 316 lib.bindGLSymbol(cast(void**)&glGetNamedBufferParameteri64v, "glGetNamedBufferParameteri64v"); 317 lib.bindGLSymbol(cast(void**)&glGetNamedBufferPointerv, "glGetNamedBufferPointerv"); 318 lib.bindGLSymbol(cast(void**)&glGetNamedBufferSubData, "glGetNamedBufferSubData"); 319 lib.bindGLSymbol(cast(void**)&glCreateFramebuffers, "glCreateFramebuffers"); 320 lib.bindGLSymbol(cast(void**)&glNamedFramebufferRenderbuffer, "glNamedFramebufferRenderbuffer"); 321 lib.bindGLSymbol(cast(void**)&glNamedFramebufferParameteri, "glNamedFramebufferParameteri"); 322 lib.bindGLSymbol(cast(void**)&glNamedFramebufferTexture, "glNamedFramebufferTexture"); 323 lib.bindGLSymbol(cast(void**)&glNamedFramebufferTextureLayer, "glNamedFramebufferTextureLayer"); 324 lib.bindGLSymbol(cast(void**)&glNamedFramebufferDrawBuffer, "glNamedFramebufferDrawBuffer"); 325 lib.bindGLSymbol(cast(void**)&glNamedFramebufferDrawBuffers, "glNamedFramebufferDrawBuffers"); 326 lib.bindGLSymbol(cast(void**)&glNamedFramebufferReadBuffer, "glNamedFramebufferReadBuffer"); 327 lib.bindGLSymbol(cast(void**)&glInvalidateNamedFramebufferData, "glInvalidateNamedFramebufferData"); 328 lib.bindGLSymbol(cast(void**)&glInvalidateNamedFramebufferSubData, "glInvalidateNamedFramebufferSubData"); 329 lib.bindGLSymbol(cast(void**)&glClearNamedFramebufferiv, "glClearNamedFramebufferiv"); 330 lib.bindGLSymbol(cast(void**)&glClearNamedFramebufferuiv, "glClearNamedFramebufferuiv"); 331 lib.bindGLSymbol(cast(void**)&glClearNamedFramebufferfv, "glClearNamedFramebufferfv"); 332 lib.bindGLSymbol(cast(void**)&glClearNamedFramebufferfi, "glClearNamedFramebufferfi"); 333 lib.bindGLSymbol(cast(void**)&glBlitNamedFramebuffer, "glBlitNamedFramebuffer"); 334 lib.bindGLSymbol(cast(void**)&glCheckNamedFramebufferStatus, "glCheckNamedFramebufferStatus"); 335 lib.bindGLSymbol(cast(void**)&glGetNamedFramebufferParameteriv, "glGetNamedFramebufferParameteriv"); 336 lib.bindGLSymbol(cast(void**)&glGetNamedFramebufferAttachmentParameteriv, "glGetNamedFramebufferAttachmentParameteriv"); 337 lib.bindGLSymbol(cast(void**)&glCreateRenderbuffers, "glCreateRenderbuffers"); 338 lib.bindGLSymbol(cast(void**)&glNamedRenderbufferStorage, "glNamedRenderbufferStorage"); 339 lib.bindGLSymbol(cast(void**)&glNamedRenderbufferStorageMultisample, "glNamedRenderbufferStorageMultisample"); 340 lib.bindGLSymbol(cast(void**)&glGetNamedRenderbufferParameteriv, "glGetNamedRenderbufferParameteriv"); 341 lib.bindGLSymbol(cast(void**)&glCreateTextures, "glCreateTextures"); 342 lib.bindGLSymbol(cast(void**)&glTextureBuffer, "glTextureBuffer"); 343 lib.bindGLSymbol(cast(void**)&glTextureBufferRange, "glTextureBufferRange"); 344 lib.bindGLSymbol(cast(void**)&glTextureStorage1D, "glTextureStorage1D"); 345 lib.bindGLSymbol(cast(void**)&glTextureStorage2D, "glTextureStorage2D"); 346 lib.bindGLSymbol(cast(void**)&glTextureStorage3D, "glTextureStorage3D"); 347 lib.bindGLSymbol(cast(void**)&glTextureStorage2DMultisample, "glTextureStorage2DMultisample"); 348 lib.bindGLSymbol(cast(void**)&glTextureStorage3DMultisample, "glTextureStorage3DMultisample"); 349 lib.bindGLSymbol(cast(void**)&glTextureSubImage1D, "glTextureSubImage1D"); 350 lib.bindGLSymbol(cast(void**)&glTextureSubImage2D, "glTextureSubImage2D"); 351 lib.bindGLSymbol(cast(void**)&glTextureSubImage3D, "glTextureSubImage3D"); 352 lib.bindGLSymbol(cast(void**)&glCompressedTextureSubImage1D, "glCompressedTextureSubImage1D"); 353 lib.bindGLSymbol(cast(void**)&glCompressedTextureSubImage2D, "glCompressedTextureSubImage2D"); 354 lib.bindGLSymbol(cast(void**)&glCompressedTextureSubImage3D, "glCompressedTextureSubImage3D"); 355 lib.bindGLSymbol(cast(void**)&glCopyTextureSubImage1D, "glCopyTextureSubImage1D"); 356 lib.bindGLSymbol(cast(void**)&glCopyTextureSubImage2D, "glCopyTextureSubImage2D"); 357 lib.bindGLSymbol(cast(void**)&glCopyTextureSubImage3D, "glCopyTextureSubImage3D"); 358 lib.bindGLSymbol(cast(void**)&glTextureParameterf, "glTextureParameterf"); 359 lib.bindGLSymbol(cast(void**)&glTextureParameterfv, "glTextureParameterfv"); 360 lib.bindGLSymbol(cast(void**)&glTextureParameteri, "glTextureParameteri"); 361 lib.bindGLSymbol(cast(void**)&glTextureParameterIiv, "glTextureParameterIiv"); 362 lib.bindGLSymbol(cast(void**)&glTextureParameterIuiv, "glTextureParameterIuiv"); 363 lib.bindGLSymbol(cast(void**)&glTextureParameteriv, "glTextureParameteriv"); 364 lib.bindGLSymbol(cast(void**)&glGenerateTextureMipmap, "glGenerateTextureMipmap"); 365 lib.bindGLSymbol(cast(void**)&glBindTextureUnit, "glBindTextureUnit"); 366 lib.bindGLSymbol(cast(void**)&glGetTextureImage, "glGetTextureImage"); 367 lib.bindGLSymbol(cast(void**)&glGetCompressedTextureImage, "glGetCompressedTextureImage"); 368 lib.bindGLSymbol(cast(void**)&glGetTextureLevelParameterfv, "glGetTextureLevelParameterfv"); 369 lib.bindGLSymbol(cast(void**)&glGetTextureLevelParameteriv, "glGetTextureLevelParameteriv"); 370 lib.bindGLSymbol(cast(void**)&glGetTextureParameterfv, "glGetTextureParameterfv"); 371 lib.bindGLSymbol(cast(void**)&glGetTextureParameterIiv, "glGetTextureParameterIiv"); 372 lib.bindGLSymbol(cast(void**)&glGetTextureParameterIuiv, "glGetTextureParameterIuiv"); 373 lib.bindGLSymbol(cast(void**)&glGetTextureParameteriv, "glGetTextureParameteriv"); 374 lib.bindGLSymbol(cast(void**)&glCreateVertexArrays, "glCreateVertexArrays"); 375 lib.bindGLSymbol(cast(void**)&glDisableVertexArrayAttrib, "glDisableVertexArrayAttrib"); 376 lib.bindGLSymbol(cast(void**)&glEnableVertexArrayAttrib, "glEnableVertexArrayAttrib"); 377 lib.bindGLSymbol(cast(void**)&glVertexArrayElementBuffer, "glVertexArrayElementBuffer"); 378 lib.bindGLSymbol(cast(void**)&glVertexArrayVertexBuffer, "glVertexArrayVertexBuffer"); 379 lib.bindGLSymbol(cast(void**)&glVertexArrayVertexBuffers, "glVertexArrayVertexBuffers"); 380 lib.bindGLSymbol(cast(void**)&glVertexArrayAttribBinding, "glVertexArrayAttribBinding"); 381 lib.bindGLSymbol(cast(void**)&glVertexArrayAttribFormat, "glVertexArrayAttribFormat"); 382 lib.bindGLSymbol(cast(void**)&glVertexArrayAttribIFormat, "glVertexArrayAttribIFormat"); 383 lib.bindGLSymbol(cast(void**)&glVertexArrayAttribLFormat, "glVertexArrayAttribLFormat"); 384 lib.bindGLSymbol(cast(void**)&glVertexArrayBindingDivisor, "glVertexArrayBindingDivisor"); 385 lib.bindGLSymbol(cast(void**)&glGetVertexArrayiv, "glGetVertexArrayiv"); 386 lib.bindGLSymbol(cast(void**)&glGetVertexArrayIndexediv, "glGetVertexArrayIndexediv"); 387 lib.bindGLSymbol(cast(void**)&glGetVertexArrayIndexed64iv, "glGetVertexArrayIndexed64iv"); 388 lib.bindGLSymbol(cast(void**)&glCreateSamplers, "glCreateSamplers"); 389 lib.bindGLSymbol(cast(void**)&glCreateProgramPipelines, "glCreateProgramPipelines"); 390 lib.bindGLSymbol(cast(void**)&glCreateQueries, "glCreateQueries"); 391 lib.bindGLSymbol(cast(void**)&glGetQueryBufferObjecti64v, "glGetQueryBufferObjecti64v"); 392 lib.bindGLSymbol(cast(void**)&glGetQueryBufferObjectiv, "glGetQueryBufferObjectiv"); 393 lib.bindGLSymbol(cast(void**)&glGetQueryBufferObjectui64v, "glGetQueryBufferObjectui64v"); 394 lib.bindGLSymbol(cast(void**)&glGetQueryBufferObjectuiv, "glGetQueryBufferObjectuiv"); 395 396 return resetErrorCountGL(); 397 } 398 } 399 else enum hasARBDirectStateAccess = false; 400 401 // ARB_ES3_1_compatibility 402 version(GL_ARB) enum useARBES31Compatibility = true; 403 else version(GL_ARB_ES3_1_compatibility) enum useARBES31Compatibility = true; 404 else enum useARBES31Compatibility = has45; 405 406 static if(useARBES31Compatibility) { 407 private bool _hasARBES31Compatibility; 408 @nogc nothrow bool hasARBES31Compatibility() { return _hasARBES31Compatibility; } 409 410 extern(System) @nogc nothrow alias pglMemoryBarrierByRegion = void function(GLbitfield); 411 __gshared pglMemoryBarrierByRegion glMemoryBarrierByRegion; 412 413 private @nogc nothrow 414 bool loadARBES31Compatibility(SharedLib lib, GLSupport contextVersion) 415 { 416 lib.bindGLSymbol(cast(void**)&glMemoryBarrierByRegion, "glMemoryBarrierByRegion"); 417 return resetErrorCountGL; 418 } 419 } 420 else enum hasARBES31Compatibility = false; 421 422 // ARB_get_texture_sub_image 423 version(GL_ARB) enum useARBGetTextureSubImage = true; 424 else version(GL_ARB_get_texture_sub_image) enum useARBGetTextureSubImage = true; 425 else enum useARBGetTextureSubImage = has45; 426 427 static if(useARBGetTextureSubImage) { 428 private bool _hasARBGetTextureSubImage; 429 @nogc nothrow bool hasARBGetTextureSubImage() { return _hasARBGetTextureSubImage; } 430 431 extern(System) @nogc nothrow { 432 alias pglGetTextureSubImage = void function(GLuint,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,GLsizei,void*); 433 alias pglGetCompressedTextureSubImage = void function(GLuint,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLsizei,void*); 434 } 435 __gshared { 436 pglGetTextureSubImage glGetTextureSubImage; 437 pglGetCompressedTextureSubImage glGetCompressedTextureSubImage; 438 } 439 440 private @nogc nothrow 441 bool loadARBGetTextureSubImage(SharedLib lib, GLSupport contextVersion) 442 { 443 lib.bindGLSymbol(cast(void**)&glGetTextureSubImage,"glGetTextureSubImage"); 444 lib.bindGLSymbol(cast(void**)&glGetCompressedTextureSubImage,"glGetCompressedTextureSubImage"); 445 return resetErrorCountGL; 446 } 447 } 448 else enum hasARBGetTextureSubImage = false; 449 450 // ARB_texture_barrier 451 version(GL_ARB) enum useARBTextureBarrier = true; 452 else version(GL_ARB_texture_barrier) enum useARBTextureBarrier = true; 453 else enum useARBTextureBarrier = has45; 454 455 static if(useARBTextureBarrier) { 456 private bool _hasARBTextureBarrier; 457 @nogc nothrow bool hasARBTextureBarrier() { return _hasARBTextureBarrier; } 458 459 extern(System) @nogc nothrow alias pglTextureBarrier = void function(); 460 __gshared pglTextureBarrier glTextureBarrier; 461 462 private @nogc nothrow 463 bool loadARBTextureBarrier(SharedLib lib, GLSupport contextVersion) 464 { 465 lib.bindGLSymbol(cast(void**)&glTextureBarrier, "glTextureBarrier"); 466 return resetErrorCountGL; 467 } 468 } 469 else enum hasARBTextureBarrier = false; 470 471 // KHR_context_flush_control 472 version(GL_ARB) enum useKHRContextFlushControl = true; 473 else version(GL_KHR_context_flush_control) enum useKHRContextFlushControl = true; 474 else enum useKHRContextFlushControl = has45; 475 476 static if(useKHRContextFlushControl) { 477 private bool _hasKHRContextFlushControl; 478 @nogc nothrow bool hasKHRContextFlushControl() { return _hasKHRContextFlushControl; } 479 480 enum : uint { 481 GL_CONTEXT_RELEASE_BEHAVIOR = 0x82FB, 482 GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x82FC, 483 } 484 } 485 else enum hasKHRContextFlushControl = false; 486 487 // KHR_robustness 488 version(GL_ARB) enum useKHRRobustness = true; 489 else version(GL_KHR_robustness) enum useKHRRobustness = true; 490 else enum useKHRRobustness = has45; 491 492 static if(useKHRRobustness) { 493 private bool _hasKHRRobustness; 494 @nogc nothrow bool hasKHRRobustness() { return _hasKHRRobustness; } 495 496 enum : uint { 497 GL_GUILTY_CONTEXT_RESET = 0x8253, 498 GL_INNOCENT_CONTEXT_RESET = 0x8254, 499 GL_UNKNOWN_CONTEXT_RESET = 0x8255, 500 GL_RESET_NOTIFICATION_STRATEGY = 0x8256, 501 GL_LOSE_CONTEXT_ON_RESET = 0x8252, 502 GL_NO_RESET_NOTIFICATION = 0x8261, 503 GL_CONTEXT_LOST = 0x0507, 504 GL_CONTEXT_ROBUST_ACCESS = 0x90F3, 505 } 506 507 extern(System) @nogc nothrow { 508 alias pglGetGraphicsResetStatus = GLenum function(); 509 alias pglReadnPixels = void function(GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,GLsizei,void*); 510 alias pglGetnUniformfv = void function(GLuint,GLint,GLsizei,GLfloat*); 511 alias pglGetnUniformiv = void function(GLuint,GLint,GLsizei,GLint*); 512 alias pglGetnUniformuiv = void function(GLuint,GLint,GLsizei,GLuint*); 513 } 514 __gshared { 515 pglGetGraphicsResetStatus glGetGraphicsResetStatus; 516 pglReadnPixels glReadnPixels; 517 pglGetnUniformfv glGetnUniformfv; 518 pglGetnUniformiv glGetnUniformiv; 519 pglGetnUniformuiv glGetnUniformuiv; 520 } 521 522 private @nogc nothrow 523 bool loadKHRRobustness(SharedLib lib, GLSupport contextVersion) 524 { 525 lib.bindGLSymbol(cast(void**)&glGetGraphicsResetStatus, "glGetGraphicsResetStatus"); 526 lib.bindGLSymbol(cast(void**)&glReadnPixels, "glReadnPixels"); 527 lib.bindGLSymbol(cast(void**)&glGetnUniformfv, "glGetnUniformfv"); 528 lib.bindGLSymbol(cast(void**)&glGetnUniformiv, "glGetnUniformiv"); 529 lib.bindGLSymbol(cast(void**)&glGetnUniformuiv, "glGetnUniformuiv"); 530 return resetErrorCountGL; 531 } 532 } 533 else enum hasKHRRobustness = false; 534 535 package(bindbc.opengl) @nogc nothrow 536 bool loadARB45(SharedLib lib, GLSupport contextVersion) 537 { 538 static if(has45) { 539 if(contextVersion >= GLSupport.gl45) { 540 _hasARBConditionalRenderInverted = true; 541 _hasARBCullDistance = true; 542 _hasKHRContextFlushControl = true; 543 544 bool ret = true; 545 ret = _hasARBClipControl = lib.loadARBClipControl(contextVersion); 546 ret = _hasARBDirectStateAccess = lib.loadARBDirectStateAccess(contextVersion); 547 ret = _hasARBES31Compatibility = lib.loadARBES31Compatibility(contextVersion); 548 ret = _hasARBGetTextureSubImage = lib.loadARBGetTextureSubImage(contextVersion); 549 ret = _hasARBTextureBarrier = lib.loadARBTextureBarrier(contextVersion); 550 ret = _hasKHRRobustness = lib.loadKHRRobustness(contextVersion); 551 return ret; 552 } 553 } 554 555 static if(useARBConditionalRenderInverted) _hasARBConditionalRenderInverted = 556 hasExtension(contextVersion, "GL_ARB_conditional_render_inverted"); 557 558 static if(useARBCullDistance) _hasARBCullDistance = 559 hasExtension(contextVersion, "GL_ARB_cull_distance"); 560 561 static if(useKHRContextFlushControl) _hasKHRContextFlushControl = 562 hasExtension(contextVersion, "GL_KHR_context_flush_control"); 563 564 static if(useARBClipControl) _hasARBClipControl = 565 hasExtension(contextVersion, "GL_ARB_clip_control") && 566 lib.loadARBClipControl(contextVersion); 567 568 static if(useARBDirectStateAccess) _hasARBDirectStateAccess = 569 hasExtension(contextVersion, "GL_ARB_direct_state_access") && 570 lib.loadARBDirectStateAccess(contextVersion); 571 572 static if(useARBES31Compatibility) _hasARBES31Compatibility = 573 hasExtension(contextVersion, "GL_ARB_ES3_1_compatibility") && 574 lib.loadARBES31Compatibility(contextVersion); 575 576 static if(useARBGetTextureSubImage) _hasARBGetTextureSubImage = 577 hasExtension(contextVersion, "GL_ARB_get_texture_sub_image") && 578 lib.loadARBGetTextureSubImage(contextVersion); 579 580 static if(useARBTextureBarrier) _hasARBTextureBarrier = 581 hasExtension(contextVersion, "GL_ARB_texture_barrier") && 582 lib.loadARBTextureBarrier(contextVersion); 583 584 static if(useKHRRobustness) _hasKHRRobustness = 585 hasExtension(contextVersion, "GL_KHR_robustness") && 586 lib.loadKHRRobustness(contextVersion); 587 588 return true; 589 }