1 // Copyright Michael D. Parker 2018. 2 // Distributed under the Boost Software License, Version 1.0. 3 // (See accompanying file LICENSE_1_0.txt or copy at 4 // http://www.boost.org/LICENSE_1_0.txt) 5 6 module bindbc.opengl.bind.arb.arb_01; 7 8 import bindbc.loader; 9 import bindbc.opengl.config, 10 bindbc.opengl.context; 11 import bindbc.opengl.bind.types; 12 13 // ARB_bindless_texture 14 version(GL_ARB) enum useARBBindlessTexture = true; 15 else version(GL_ARB_bindless_texture) enum useARBBindlessTexture = true; 16 else enum useARBBindlessTexture = false; 17 18 static if(useARBBindlessTexture) { 19 private bool _hasARBBindlessTexture; 20 @nogc nothrow bool hasARBBindlessTexture() { return _hasARBBindlessTexture; } 21 22 enum uint GL_UNSIGNED_INT64_ARB = 0x140F; 23 24 extern(System) @nogc nothrow { 25 alias pglGetTextureHandleARB = GLuint64 function(GLuint); 26 alias pglGetTextureSamplerHandleARB = GLuint64 function(GLuint,GLuint); 27 alias pglMakeTextureHandleResidentARB = void function(GLuint64); 28 alias pglMakeTextureHandleNonResidentARB = void function(GLuint64); 29 alias pglGetImageHandleARB = GLuint64 function(GLuint,GLint,GLboolean,GLint,GLenum); 30 alias pglMakeImageHandleResidentARB = void function(GLuint64,GLenum); 31 alias pglMakeImageHandleNonResidentARB = void function(GLuint64); 32 alias pglUniformHandleui64ARB = void function(GLint,GLuint64); 33 alias pglUniformHandleui64vARB = void function(GLint,GLsizei,const(GLuint64)*); 34 alias pglProgramUniformHandleui64ARB = void function(GLuint,GLint,GLuint64); 35 alias pglProgramUniformHandleui64vARB = void function(GLuint,GLint,GLsizei,const(GLuint64)*); 36 alias pglIsTextureHandleResidentARB = GLboolean function(GLuint64); 37 alias pglIsImageHandleResidentARB = GLboolean function(GLuint64); 38 alias pglVertexAttribL1ui64ARB = void function(GLuint,GLuint64); 39 alias pglVertexAttribL1ui64vARB = void function(GLuint,const(GLuint64)*); 40 alias pglGetVertexAttribLui64vARB = void function(GLuint,GLenum,GLuint64*); 41 } 42 43 __gshared { 44 pglGetTextureHandleARB glGetTextureHandleARB; 45 pglGetTextureSamplerHandleARB glGetTextureSamplerHandleARB; 46 pglMakeTextureHandleResidentARB glMakeTextureHandleResidentARB; 47 pglMakeTextureHandleNonResidentARB glMakeTextureHandleNonResidentARB; 48 pglGetImageHandleARB glGetImageHandleARB; 49 pglMakeImageHandleResidentARB glMakeImageHandleResidentARB; 50 pglMakeImageHandleNonResidentARB glMakeImageHandleNonResidentARB; 51 pglUniformHandleui64ARB glUniformHandleui64ARB; 52 pglUniformHandleui64vARB glUniformHandleui64vARB; 53 pglProgramUniformHandleui64ARB glProgramUniformHandleui64ARB; 54 pglProgramUniformHandleui64vARB glProgramUniformHandleui64vARB; 55 pglIsTextureHandleResidentARB glIsTextureHandleResidentARB; 56 pglIsImageHandleResidentARB glIsImageHandleResidentARB; 57 pglVertexAttribL1ui64ARB glVertexAttribL1ui64ARB; 58 pglVertexAttribL1ui64vARB glVertexAttribL1ui64vARB; 59 pglGetVertexAttribLui64vARB glGetVertexAttribLui64vARB; 60 } 61 62 private @nogc nothrow 63 bool loadARBBindlessTexture(SharedLib lib, GLSupport contextVersion) 64 { 65 lib.bindGLSymbol(cast(void**)&glGetTextureHandleARB, "glGetTextureHandleARB"); 66 lib.bindGLSymbol(cast(void**)&glGetTextureSamplerHandleARB, "glGetTextureSamplerHandleARB"); 67 lib.bindGLSymbol(cast(void**)&glMakeTextureHandleResidentARB, "glMakeTextureHandleResidentARB"); 68 lib.bindGLSymbol(cast(void**)&glMakeTextureHandleNonResidentARB, "glMakeTextureHandleNonResidentARB"); 69 lib.bindGLSymbol(cast(void**)&glGetImageHandleARB, "glGetImageHandleARB"); 70 lib.bindGLSymbol(cast(void**)&glMakeImageHandleResidentARB, "glMakeImageHandleResidentARB"); 71 lib.bindGLSymbol(cast(void**)&glMakeImageHandleNonResidentARB, "glMakeImageHandleNonResidentARB"); 72 lib.bindGLSymbol(cast(void**)&glUniformHandleui64ARB, "glUniformHandleui64ARB"); 73 lib.bindGLSymbol(cast(void**)&glUniformHandleui64vARB, "glUniformHandleui64vARB"); 74 lib.bindGLSymbol(cast(void**)&glProgramUniformHandleui64ARB, "glProgramUniformHandleui64ARB"); 75 lib.bindGLSymbol(cast(void**)&glProgramUniformHandleui64vARB, "glProgramUniformHandleui64vARB"); 76 lib.bindGLSymbol(cast(void**)&glIsTextureHandleResidentARB, "glIsTextureHandleResidentARB"); 77 lib.bindGLSymbol(cast(void**)&glIsImageHandleResidentARB, "glIsImageHandleResidentARB"); 78 lib.bindGLSymbol(cast(void**)&glVertexAttribL1ui64ARB, "glVertexAttribL1ui64ARB"); 79 lib.bindGLSymbol(cast(void**)&glVertexAttribL1ui64vARB, "glVertexAttribL1ui64vARB"); 80 lib.bindGLSymbol(cast(void**)&glGetVertexAttribLui64vARB, "glGetVertexAttribLui64vARB"); 81 return resetErrorCountGL(); 82 } 83 } 84 else enum hasARBBindlessTexture = false; 85 86 // ARB_cl_event 87 version(GL_ARB) enum useARBCLEvent = true; 88 else version(GL_ARB_cl_event) enum useARBCLEvent = true; 89 else enum useARBCLEvent = false; 90 91 static if(useARBCLEvent) { 92 import bindbc.opengl.bind.arb.core_32 : GLsync; 93 private bool _hasARBCLEvent; 94 @nogc nothrow bool hasARBCLEvent() { return _hasARBCLEvent; } 95 96 struct _cl_context; 97 struct _cl_event; 98 99 enum : uint { 100 GL_SYNC_CL_EVENT_ARB = 0x8240, 101 GL_SYNC_CL_EVENT_COMPLETE_ARB = 0x8241, 102 } 103 104 extern(System) @nogc nothrow alias pglCreateSyncFromCLeventARB = GLsync function(_cl_context*, _cl_event*, GLbitfield); 105 __gshared pglCreateSyncFromCLeventARB glCreateSyncFromCLeventARB; 106 107 private @nogc nothrow 108 bool loadARBCLEvent(SharedLib lib, GLSupport contextVersion) 109 { 110 lib.bindGLSymbol(cast(void**)&glCreateSyncFromCLeventARB, "glCreateSyncFromCLeventARB"); 111 return resetErrorCountGL(); 112 } 113 } 114 else enum hasARBCLEvent = false; 115 116 // ARB_compute_variable_group_size 117 version(GL_ARB) enum useARBComputeVariableGroupSize = true; 118 else version(GL_ARB_compute_variable_group_size) enum useARBComputeVariableGroupSize = true; 119 else enum useARBComputeVariableGroupSize = false; 120 121 static if(useARBComputeVariableGroupSize) { 122 private bool _hasARBComputeVariableGroupSize; 123 @nogc nothrow bool hasARBComputeVariableGroupSize() { return _hasARBComputeVariableGroupSize; } 124 125 enum : uint { 126 GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB = 0x9344, 127 GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB = 0x90EB, 128 GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB = 0x9345, 129 GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB = 0x91BF, 130 } 131 132 extern(System) @nogc nothrow alias pglDispatchComputeGroupSizeARB = GLsync function(GLuint,GLuint,GLuint,GLuint,GLuint,GLuint); 133 __gshared pglDispatchComputeGroupSizeARB glDispatchComputeGroupSizeARB; 134 135 private @nogc nothrow 136 bool loadARBComputeVariableGroupSize(SharedLib lib, GLSupport contextVersion) 137 { 138 lib.bindGLSymbol(cast(void**)&glDispatchComputeGroupSizeARB, "glDispatchComputeGroupSizeARB"); 139 return resetErrorCountGL(); 140 } 141 } 142 else enum hasARBComputeVariableGroupSize = false; 143 144 // ARB_debug_output 145 version(GL_ARB) enum useARBDebugOutput = true; 146 else version(GL_ARB_debug_output) enum useARBDebugOutput = true; 147 else enum useARBDebugOutput = false; 148 149 static if(useARBDebugOutput) { 150 private bool _hasARBDebugOutput; 151 @nogc nothrow bool hasARBDebugOutput() { return _hasARBDebugOutput; } 152 153 enum : uint { 154 GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB = 0x8242, 155 GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB = 0x8243, 156 GL_DEBUG_CALLBACK_FUNCTION_ARB = 0x8244, 157 GL_DEBUG_CALLBACK_USER_PARAM_ARB = 0x8245, 158 GL_DEBUG_SOURCE_API_ARB = 0x8246, 159 GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB = 0x8247, 160 GL_DEBUG_SOURCE_SHADER_COMPILER_ARB = 0x8248, 161 GL_DEBUG_SOURCE_THIRD_PARTY_ARB = 0x8249, 162 GL_DEBUG_SOURCE_APPLICATION_ARB = 0x824A, 163 GL_DEBUG_SOURCE_OTHER_ARB = 0x824B, 164 GL_DEBUG_TYPE_ERROR_ARB = 0x824C, 165 GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB = 0x824D, 166 GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB = 0x824E, 167 GL_DEBUG_TYPE_PORTABILITY_ARB = 0x824F, 168 GL_DEBUG_TYPE_PERFORMANCE_ARB = 0x8250, 169 GL_DEBUG_TYPE_OTHER_ARB = 0x8251, 170 GL_MAX_DEBUG_MESSAGE_LENGTH_ARB = 0x9143, 171 GL_MAX_DEBUG_LOGGED_MESSAGES_ARB = 0x9144, 172 GL_DEBUG_LOGGED_MESSAGES_ARB = 0x9145, 173 GL_DEBUG_SEVERITY_HIGH_ARB = 0x9146, 174 GL_DEBUG_SEVERITY_MEDIUM_ARB = 0x9147, 175 GL_DEBUG_SEVERITY_LOW_ARB = 0x9148, 176 } 177 178 extern(System) nothrow { 179 alias GLDEBUGPROCARB = void function(GLenum,GLenum,GLuint,GLenum,GLsizei,in GLchar*,GLvoid*); 180 alias GLDEBUGPROCAMD = void function(GLuint,GLenum,GLenum,GLsizei,in GLchar*,GLvoid*); 181 } 182 183 extern(System) @nogc nothrow { 184 alias pglDebugMessageControlARB = void function(GLenum,GLenum,GLenum,GLsizei,const(GLuint)*,GLboolean); 185 alias pglDebugMessageInsertARB = void function(GLenum,GLenum,GLuint,GLenum,GLsizei,const(GLchar)*); 186 alias pglGetDebugMessageLogARB = void function(GLuint,GLsizei,GLenum*,GLenum*,GLuint*,GLenum*,GLsizei*,GLchar*); 187 alias pglDebugMessageCallbackARB = void function(GLDEBUGPROCARB,const(GLvoid)*); 188 } 189 190 __gshared { 191 pglDebugMessageControlARB glDebugMessageControlARB; 192 pglDebugMessageInsertARB glDebugMessageInsertARB; 193 pglDebugMessageCallbackARB glDebugMessageCallbackARB; 194 pglGetDebugMessageLogARB glGetDebugMessageLogARB; 195 } 196 197 private @nogc nothrow 198 bool loadARBDebugOutput(SharedLib lib, GLSupport contextVersion) 199 { 200 lib.bindGLSymbol(cast(void**)&glDebugMessageControlARB, "glDebugMessageControlARB"); 201 lib.bindGLSymbol(cast(void**)&glDebugMessageInsertARB, "glDebugMessageInsertARB"); 202 lib.bindGLSymbol(cast(void**)&glDebugMessageCallbackARB, "glDebugMessageCallbackARB"); 203 lib.bindGLSymbol(cast(void**)&glGetDebugMessageLogARB, "glGetDebugMessageLogARB"); 204 return resetErrorCountGL(); 205 } 206 } 207 else enum hasARBDebugOutput = false; 208 209 // ARB_framebuffer_sRGB 210 version(GL_ARB) enum useARBFramebufferSRGB = true; 211 else version(GL_ARB_framebuffer_sRGB) enum useARBFramebufferSRGB = true; 212 else enum useARBFramebufferSRGB = false; 213 214 static if(useARBFramebufferSRGB) { 215 private bool _hasARBFramebufferSRGB; 216 @nogc nothrow bool hasARBFramebufferSRGB() { return _hasARBFramebufferSRGB; } 217 218 enum uint GL_FRAMEBUFFER_SRGB = 0x8DB9; 219 } 220 else enum hasARBFramebufferSRGB = false; 221 222 // ARB_geometry_shader4 223 version(GL_ARB) enum useARBGeometryShader4 = true; 224 else version(GL_ARB_geometry_shader4) enum useARBGeometryShader4 = true; 225 else enum useARBGeometryShader4 = false; 226 227 static if(useARBGeometryShader4) { 228 private bool _hasARBGeometryShader4; 229 @nogc nothrow bool hasARBGeometryShader4() { return _hasARBGeometryShader4; } 230 231 enum : uint { 232 GL_LINES_ADJACENCY_ARB = 0x000A, 233 GL_LINE_STRIP_ADJACENCY_ARB = 0x000B, 234 GL_TRIANGLES_ADJACENCY_ARB = 0x000C, 235 GL_TRIANGLE_STRIP_ADJACENCY_ARB = 0x000D, 236 GL_PROGRAM_POINT_SIZE_ARB = 0x8642, 237 GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB = 0x8C29, 238 GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB = 0x8DA7, 239 GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB = 0x8DA8, 240 GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB = 0x8DA9, 241 GL_GEOMETRY_SHADER_ARB = 0x8DD9, 242 GL_GEOMETRY_VERTICES_OUT_ARB = 0x8DDA, 243 GL_GEOMETRY_INPUT_TYPE_ARB = 0x8DDB, 244 GL_GEOMETRY_OUTPUT_TYPE_ARB = 0x8DDC, 245 GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB = 0x8DDD, 246 GL_MAX_VERTEX_VARYING_COMPONENTS_ARB = 0x8DDE, 247 GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB = 0x8DDF, 248 GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB = 0x8DE0, 249 GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB = 0x8DE1, 250 } 251 252 extern(System) @nogc nothrow { 253 alias pglProgramParameteriARB = void function(GLuint,GLenum,GLint); 254 alias pglFramebufferTextureARB = void function(GLuint,GLenum,GLuint,GLint); 255 alias pglFramebufferTextureLayerARB = void function(GLuint,GLenum,GLuint,GLint,GLint); 256 alias pglFramebufferTextureFaceARB = void function(GLuint,GLenum,GLuint,GLint,GLenum); 257 } 258 259 __gshared { 260 pglProgramParameteriARB glProgramParameteriARB; 261 pglFramebufferTextureARB glFramebufferTextureARB; 262 pglFramebufferTextureLayerARB glFramebufferTextureLayerARB; 263 pglFramebufferTextureFaceARB glFramebufferTextureFaceARB; 264 } 265 266 private @nogc nothrow 267 bool loadARBGeometryShader4(SharedLib lib, GLSupport contextVersion) 268 { 269 lib.bindGLSymbol(cast(void**)&glProgramParameteriARB,"glProgramParameteriARB"); 270 lib.bindGLSymbol(cast(void**)&glFramebufferTextureARB,"glFramebufferTextureARB"); 271 lib.bindGLSymbol(cast(void**)&glFramebufferTextureLayerARB,"glFramebufferTextureLayerARB"); 272 lib.bindGLSymbol(cast(void**)&glFramebufferTextureFaceARB,"glFramebufferTextureFaceARB"); 273 return resetErrorCountGL(); 274 } 275 } 276 else enum hasARBGeometryShader4 = false; 277 278 // ARB_gl_spirv 279 version(GL_ARB) enum useARBGLSPIRV = true; 280 else version(GL_ARB_gl_spirv) enum useARBGLSPIRV = true; 281 else enum useARBGLSPIRV = false; 282 283 static if(useARBGLSPIRV) { 284 private bool _hasARBGLSPIRV; 285 @nogc nothrow bool hasARBGLSPIRV() { return _hasARBGLSPIRV; } 286 287 enum : uint { 288 GL_SHADER_BINARY_FORMAT_SPIR_V_ARB = 0x9551, 289 GL_SPIR_V_BINARY_ARB = 0x9552, 290 } 291 292 extern(System) @nogc nothrow 293 alias pglSpecializeShaderARB = void function(GLuint,const(char)*,GLuint,const(GLuint)*,const(GLuint)*); 294 295 __gshared pglSpecializeShaderARB glSpecializeShaderARB; 296 297 private @nogc nothrow 298 bool loadARBGLSPIRV(SharedLib lib, GLSupport contextVersion) 299 { 300 lib.bindGLSymbol(cast(void**)&glSpecializeShaderARB,"glSpecializeShaderARB"); 301 return resetErrorCountGL(); 302 } 303 } 304 else enum hasARBGLSPIRV = false; 305 306 // ARB_gpu_shader_int64 307 version(GL_ARB) enum useARBGPUShaderInt64 = true; 308 else version(GL_ARB_gpu_shader_int64) enum useARBGPUShaderInt64 = true; 309 else enum useARBGPUShaderInt64 = false; 310 311 static if(useARBGPUShaderInt64) { 312 private bool _hasARBGPUShaderInt64; 313 @nogc nothrow bool hasARBGPUShaderInt64() { return _hasARBGPUShaderInt64; } 314 315 enum : uint { 316 GL_INT64_ARB = 0x140E, 317 GL_INT64_VEC2_ARB = 0x8FE9, 318 GL_INT64_VEC3_ARB = 0x8FEA, 319 GL_INT64_VEC4_ARB = 0x8FEB, 320 GL_UNSIGNED_INT64_VEC2_ARB = 0x8FF5, 321 GL_UNSIGNED_INT64_VEC3_ARB = 0x8FF6, 322 GL_UNSIGNED_INT64_VEC4_ARB = 0x8FF7, 323 } 324 325 extern(System) @nogc nothrow { 326 alias pglUniform1i64ARB = void function(GLint,GLint64); 327 alias pglUniform2i64ARB = void function(GLint,GLint64,GLint64); 328 alias pglUniform3i64ARB = void function(GLint,GLint64,GLint64,GLint64); 329 alias pglUniform4i64ARB = void function(GLint,GLint64,GLint64,GLint64,GLint64); 330 alias pglUniform1i64vARB = void function(GLint,GLsizei,const(GLint64)*); 331 alias pglUniform2i64vARB = void function(GLint,GLsizei,const(GLint64)*); 332 alias pglUniform3i64vARB = void function(GLint,GLsizei,const(GLint64)*); 333 alias pglUniform4i64vARB = void function(GLint,GLsizei,const(GLint64)*); 334 alias pglUniform1ui64ARB = void function(GLint,GLuint64); 335 alias pglUniform2ui64ARB = void function(GLint,GLuint64,GLuint64); 336 alias pglUniform3ui64ARB = void function(GLint,GLuint64,GLuint64,GLuint64); 337 alias pglUniform4ui64ARB = void function(GLint,GLuint64,GLuint64,GLuint64,GLuint64); 338 alias pglUniform1ui64vARB = void function(GLint,GLsizei,const(GLuint64)*); 339 alias pglUniform2ui64vARB = void function(GLint,GLsizei,const(GLuint64)*); 340 alias pglUniform3ui64vARB = void function(GLint,GLsizei,const(GLuint64)*); 341 alias pglUniform4ui64vARB = void function(GLint,GLsizei,const(GLuint64)*); 342 alias pglGetUniformi64vARB = void function(GLuint,GLint,GLint64*); 343 alias pglGetUniformui64vARB = void function(GLuint,GLint,GLuint64*); 344 alias pglGetnUniformi64vARB = void function(GLuint,GLint,GLsizei,GLint64*); 345 alias pglGetnUniformui64vARB = void function(GLuint,GLint,GLsizei,GLuint64*); 346 alias pglProgramUniform1i64ARB = void function(GLuint,GLint,GLint64); 347 alias pglProgramUniform2i64ARB = void function(GLuint,GLint,GLint64,GLint64); 348 alias pglProgramUniform3i64ARB = void function(GLuint,GLint,GLint64,GLint64,GLint64); 349 alias pglProgramUniform4i64ARB = void function(GLuint,GLint,GLint64,GLint64,GLint64,GLint64); 350 alias pglProgramUniform1i64vARB = void function(GLuint,GLint,GLsizei,const(GLint64)*); 351 alias pglProgramUniform2i64vARB = void function(GLuint,GLint,GLsizei,const(GLint64)*); 352 alias pglProgramUniform3i64vARB = void function(GLuint,GLint,GLsizei,const(GLint64)*); 353 alias pglProgramUniform4i64vARB = void function(GLuint,GLint,GLsizei,const(GLint64)*); 354 alias pglProgramUniform1ui64ARB = void function(GLuint,GLint,GLsizei,GLuint64); 355 alias pglProgramUniform2ui64ARB = void function(GLuint,GLint,GLsizei,GLuint64,GLuint64); 356 alias pglProgramUniform3ui64ARB = void function(GLuint,GLint,GLsizei,GLuint64,GLuint64,GLuint64); 357 alias pglProgramUniform4ui64ARB = void function(GLuint,GLint,GLsizei,GLuint64,GLuint64,GLuint64,GLuint64); 358 alias pglProgramUniform1ui64vARB = void function(GLuint,GLint,GLsizei,const(GLuint)*); 359 alias pglProgramUniform2ui64vARB = void function(GLuint,GLint,GLsizei,const(GLuint)*); 360 alias pglProgramUniform3ui64vARB = void function(GLuint,GLint,GLsizei,const(GLuint)*); 361 alias pglProgramUniform4ui64vARB = void function(GLuint,GLint,GLsizei,const(GLuint)*); 362 } 363 364 __gshared { 365 pglUniform1i64ARB glUniform1i64ARB; 366 pglUniform2i64ARB glUniform2i64ARB; 367 pglUniform3i64ARB glUniform3i64ARB; 368 pglUniform4i64ARB glUniform4i64ARB; 369 pglUniform1i64vARB glUniform1i64vARB; 370 pglUniform2i64vARB glUniform2i64vARB; 371 pglUniform3i64vARB glUniform3i64vARB; 372 pglUniform4i64vARB glUniform4i64vARB; 373 pglUniform1ui64ARB glUniform1ui64ARB; 374 pglUniform2ui64ARB glUniform2ui64ARB; 375 pglUniform3ui64ARB glUniform3ui64ARB; 376 pglUniform4ui64ARB glUniform4ui64ARB; 377 pglUniform1ui64vARB glUniform1ui64vARB; 378 pglUniform2ui64vARB glUniform2ui64vARB; 379 pglUniform3ui64vARB glUniform3ui64vARB; 380 pglUniform4ui64vARB glUniform4ui64vARB; 381 pglGetUniformi64vARB glGetUniformi64vARB; 382 pglGetUniformui64vARB glGetUniformui64vARB; 383 pglGetnUniformi64vARB glGetnUniformi64vARB; 384 pglGetnUniformui64vARB glGetnUniformui64vARB; 385 pglProgramUniform1i64ARB glProgramUniform1i64ARB; 386 pglProgramUniform2i64ARB glProgramUniform2i64ARB; 387 pglProgramUniform3i64ARB glProgramUniform3i64ARB; 388 pglProgramUniform4i64ARB glProgramUniform4i64ARB; 389 pglProgramUniform1i64vARB glProgramUniform1i64vARB; 390 pglProgramUniform2i64vARB glProgramUniform2i64vARB; 391 pglProgramUniform3i64vARB glProgramUniform3i64vARB; 392 pglProgramUniform4i64vARB glProgramUniform4i64vARB; 393 pglProgramUniform1ui64ARB glProgramUniform1ui64ARB; 394 pglProgramUniform2ui64ARB glProgramUniform2ui64ARB; 395 pglProgramUniform3ui64ARB glProgramUniform3ui64ARB; 396 pglProgramUniform4ui64ARB glProgramUniform4ui64ARB; 397 pglProgramUniform1ui64vARB glProgramUniform1ui64vARB; 398 pglProgramUniform2ui64vARB glProgramUniform2ui64vARB; 399 pglProgramUniform3ui64vARB glProgramUniform3ui64vARB; 400 pglProgramUniform4ui64vARB glProgramUniform4ui64vARB; 401 } 402 403 private @nogc nothrow 404 bool loadARBGPUShaderInt64(SharedLib lib, GLSupport contextVersion) 405 { 406 lib.bindGLSymbol(cast(void**)&glUniform1i64ARB,"glUniform1i64ARB"); 407 lib.bindGLSymbol(cast(void**)&glUniform2i64ARB,"glUniform2i64ARB"); 408 lib.bindGLSymbol(cast(void**)&glUniform3i64ARB,"glUniform3i64ARB"); 409 lib.bindGLSymbol(cast(void**)&glUniform4i64ARB,"glUniform4i64ARB"); 410 lib.bindGLSymbol(cast(void**)&glUniform1i64vARB,"glUniform1i64vARB"); 411 lib.bindGLSymbol(cast(void**)&glUniform2i64vARB,"glUniform2i64vARB"); 412 lib.bindGLSymbol(cast(void**)&glUniform3i64vARB,"glUniform3i64vARB"); 413 lib.bindGLSymbol(cast(void**)&glUniform4i64vARB,"glUniform4i64vARB"); 414 lib.bindGLSymbol(cast(void**)&glUniform1ui64ARB,"glUniform1ui64ARB"); 415 lib.bindGLSymbol(cast(void**)&glUniform2ui64ARB,"glUniform2ui64ARB"); 416 lib.bindGLSymbol(cast(void**)&glUniform3ui64ARB,"glUniform3ui64ARB"); 417 lib.bindGLSymbol(cast(void**)&glUniform4ui64ARB,"glUniform4ui64ARB"); 418 lib.bindGLSymbol(cast(void**)&glUniform1ui64vARB,"glUniform1ui64vARB"); 419 lib.bindGLSymbol(cast(void**)&glUniform2ui64vARB,"glUniform2ui64vARB"); 420 lib.bindGLSymbol(cast(void**)&glUniform3ui64vARB,"glUniform3ui64vARB"); 421 lib.bindGLSymbol(cast(void**)&glUniform4ui64vARB,"glUniform4ui64vARB"); 422 lib.bindGLSymbol(cast(void**)&glGetUniformi64vARB,"glGetUniformi64vARB"); 423 lib.bindGLSymbol(cast(void**)&glGetUniformui64vARB,"glGetUniformui64vARB"); 424 lib.bindGLSymbol(cast(void**)&glGetnUniformi64vARB,"glGetnUniformi64vARB"); 425 lib.bindGLSymbol(cast(void**)&glGetnUniformui64vARB,"glGetnUniformui64vARB"); 426 lib.bindGLSymbol(cast(void**)&glProgramUniform1i64ARB,"glProgramUniform1i64ARB"); 427 lib.bindGLSymbol(cast(void**)&glProgramUniform2i64ARB,"glProgramUniform2i64ARB"); 428 lib.bindGLSymbol(cast(void**)&glProgramUniform3i64ARB,"glProgramUniform3i64ARB"); 429 lib.bindGLSymbol(cast(void**)&glProgramUniform4i64ARB,"glProgramUniform4i64ARB"); 430 lib.bindGLSymbol(cast(void**)&glProgramUniform1i64vARB,"glProgramUniform1i64vARB"); 431 lib.bindGLSymbol(cast(void**)&glProgramUniform2i64vARB,"glProgramUniform2i64vARB"); 432 lib.bindGLSymbol(cast(void**)&glProgramUniform3i64vARB,"glProgramUniform3i64vARB"); 433 lib.bindGLSymbol(cast(void**)&glProgramUniform4i64vARB,"glProgramUniform4i64vARB"); 434 lib.bindGLSymbol(cast(void**)&glProgramUniform1ui64ARB,"glProgramUniform1ui64ARB"); 435 lib.bindGLSymbol(cast(void**)&glProgramUniform2ui64ARB,"glProgramUniform2ui64ARB"); 436 lib.bindGLSymbol(cast(void**)&glProgramUniform3ui64ARB,"glProgramUniform3ui64ARB"); 437 lib.bindGLSymbol(cast(void**)&glProgramUniform4ui64ARB,"glProgramUniform4ui64ARB"); 438 lib.bindGLSymbol(cast(void**)&glProgramUniform1ui64vARB,"glProgramUniform1ui64vARB"); 439 lib.bindGLSymbol(cast(void**)&glProgramUniform2ui64vARB,"glProgramUniform2ui64vARB"); 440 lib.bindGLSymbol(cast(void**)&glProgramUniform3ui64vARB,"glProgramUniform3ui64vARB"); 441 lib.bindGLSymbol(cast(void**)&glProgramUniform4ui64vARB,"glProgramUniform4ui64vARB"); 442 return resetErrorCountGL(); 443 } 444 } 445 else enum hasARBGPUShaderInt64 = false; 446 447 // ARB_indirect_parameters 448 version(GL_ARB) enum useARBIndirectParameters = true; 449 else version(GL_ARB_indirect_parameters) enum useARBIndirectParameters = true; 450 else enum useARBIndirectParameters = false; 451 452 static if(useARBIndirectParameters) { 453 private bool _hasARBIndirectParameters; 454 @nogc nothrow bool hasARBIndirectParameters() { return _hasARBIndirectParameters; } 455 456 enum : uint { 457 GL_PARAMETER_BUFFER_ARB = 0x80EE, 458 GL_PARAMETER_BUFFER_BINDING_ARB = 0x80EF, 459 } 460 461 extern(System) @nogc nothrow { 462 alias pglMultiDrawArraysIndirectCountARB = void function(GLenum,const(void)*,GLintptr,GLsizei,GLsizei); 463 alias pglMultiDrawElementsIndirectCountARB = void function(GLenum,GLenum,const(void)*,GLintptr,GLsizei,GLsizei); 464 } 465 466 __gshared { 467 pglMultiDrawArraysIndirectCountARB glMultiDrawArraysIndirectCountARB; 468 pglMultiDrawElementsIndirectCountARB glMultiDrawElementsIndirectCountARB; 469 } 470 471 private @nogc nothrow 472 bool loadARBIndirectParameters(SharedLib lib, GLSupport contextVersion) 473 { 474 lib.bindGLSymbol(cast(void**)&glMultiDrawArraysIndirectCountARB,"glMultiDrawArraysIndirectCountARB"); 475 lib.bindGLSymbol(cast(void**)&glMultiDrawElementsIndirectCountARB,"glMultiDrawElementsIndirectCountARB"); 476 return resetErrorCountGL(); 477 } 478 } 479 else enum hasARBIndirectParameters = false; 480 481 // ARB_pipeline_statistics_query 482 version(GL_ARB) enum useARBPipelineStatisticsQuery = true; 483 else version(GL_ARB_pipeline_statistics_query) enum useARBPipelineStatisticsQuery = true; 484 else enum useARBPipelineStatisticsQuery = false; 485 486 static if(useARBPipelineStatisticsQuery) { 487 private bool _hasARBPipelineStatisticsQuery; 488 @nogc nothrow bool hasARBPipelineStatisticsQuery() { return _hasARBPipelineStatisticsQuery; } 489 490 enum : uint { 491 GL_VERTICES_SUBMITTED_ARB = 0x82EE, 492 GL_PRIMITIVES_SUBMITTED_ARB = 0x82EF, 493 GL_VERTEX_SHADER_INVOCATIONS_ARB = 0x82F0, 494 GL_TESS_CONTROL_SHADER_PATCHES_ARB = 0x82F1, 495 GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB = 0x82F2, 496 GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB = 0x82F3, 497 GL_FRAGMENT_SHADER_INVOCATIONS_ARB = 0x82F4, 498 GL_COMPUTE_SHADER_INVOCATIONS_ARB = 0x82F5, 499 GL_CLIPPING_INPUT_PRIMITIVES_ARB = 0x82F6, 500 GL_CLIPPING_OUTPUT_PRIMITIVES_ARB = 0x82F7, 501 } 502 } 503 else enum hasARBPipelineStatisticsQuery = false; 504 505 // ARB_robustness_isolation 506 version(GL_ARB) enum useARBRobustnessIsolation = true; 507 else version(GL_ARB_robustness_isolation) enum useARBRobustnessIsolation = true; 508 else enum useARBRobustnessIsolation = false; 509 510 static if(useARBRobustnessIsolation) { 511 private bool _hasARBRobustnessIsolation; 512 @nogc nothrow bool hasARBRobustnessIsolation() { return _hasARBRobustnessIsolation; } 513 } 514 else enum hasARBRobustnessIsolation = false; 515 516 // ARB_sample_shading 517 version(GL_ARB) enum useARBSampleShading = true; 518 else version(GL_ARB_sample_shading) enum useARBSampleShading = true; 519 else enum useARBSampleShading = false; 520 521 static if(useARBSampleShading) { 522 private bool _hasARBSampleShading; 523 @nogc nothrow bool hasARBSampleShading() { return _hasARBSampleShading; } 524 525 enum : uint { 526 GL_SAMPLE_SHADING_ARB = 0x8C36, 527 GL_MIN_SAMPLE_SHADING_VALUE_ARB = 0x8C37, 528 } 529 530 extern(System) @nogc nothrow alias pglMinSampleShadingARB = void function(GLclampf); 531 __gshared pglMinSampleShadingARB glMinSampleShadingARB; 532 533 private @nogc nothrow 534 bool loadARBSampleShading(SharedLib lib, GLSupport contextVersion) 535 { 536 lib.bindGLSymbol(cast(void**)&glMinSampleShadingARB,"glMinSampleShadingARB"); 537 return resetErrorCountGL(); 538 } 539 } 540 else enum hasARBSampleShading = false; 541 542 // ARB_texture_compression_bptc 543 version(GL_ARB) enum useARBTextureCompressionBPTC = true; 544 else version(GL_ARB_texture_compression_bptc) enum useARBTextureCompressionBPTC = true; 545 else enum useARBTextureCompressionBPTC = false; 546 547 static if(useARBTextureCompressionBPTC) { 548 private bool _hasARBTextureCompressionBPTC; 549 @nogc nothrow bool hasARBTextureCompressionBPTC() { return _hasARBTextureCompressionBPTC; } 550 551 enum : uint { 552 GL_COMPRESSED_RGBA_BPTC_UNORM_ARB = 0x8E8C, 553 GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB = 0x8E8D, 554 GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB = 0x8E8E, 555 GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB = 0x8E8F, 556 } 557 } 558 else enum hasARBTextureCompressionBPTC = false; 559 560 // ARB_texture_cube_map_array 561 version(GL_ARB) enum useARBTextureCubeMapArray = true; 562 else version(GL_ARB_texture_cube_map_array) enum useARBTextureCubeMapArray = true; 563 else enum useARBTextureCubeMapArray = false; 564 565 static if(useARBTextureCubeMapArray) { 566 private bool _hasARBTextureCubeMapArray; 567 @nogc nothrow bool hasARBTextureCubeMapArray() { return _hasARBTextureCubeMapArray; } 568 569 enum : uint { 570 GL_TEXTURE_CUBE_MAP_ARRAY_ARB = 0x9009, 571 GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB = 0x900A, 572 GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB = 0x900B, 573 GL_SAMPLER_CUBE_MAP_ARRAY_ARB = 0x900C, 574 GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB = 0x900D, 575 GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB = 0x900E, 576 GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB = 0x900F, 577 } 578 } 579 else enum hasARBTextureCubeMapArray = false; 580 581 // ARB_texture_gather 582 version(GL_ARB) enum useARBTextureGather = true; 583 else version(GL_ARB_texture_gather) enum useARBTextureGather = true; 584 else enum useARBTextureGather = false; 585 586 static if(useARBTextureGather) { 587 private bool _hasARBTextureGather; 588 @nogc nothrow bool hasARBTextureGather() { return _hasARBTextureGather; } 589 590 enum : uint { 591 GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB = 0x8E5E, 592 GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB = 0x8E5F, 593 } 594 } 595 else enum hasARBTextureGather = false; 596 597 // ARB_transform_feedback_overflow_query 598 version(GL_ARB) enum useARBTransformFeedbackOverflowQuery = true; 599 else version(GL_ARB_transform_feedback_overflow_query) enum useARBTransformFeedbackOverflowQuery = true; 600 else enum useARBTransformFeedbackOverflowQuery = false; 601 602 static if(useARBTransformFeedbackOverflowQuery) { 603 private bool _hasARBTransformFeedbackOverflowQuery; 604 @nogc nothrow bool hasARBTransformFeedbackOverflowQuery() { return _hasARBTransformFeedbackOverflowQuery; } 605 606 enum : uint { 607 GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB = 0x82EC, 608 GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB = 0x82ED, 609 } 610 } 611 else enum hasARBTransformFeedbackOverflowQuery = false; 612 613 // ARB_sparse_texture 614 version(GL_ARB) enum useARBSparseTexture = true; 615 else version(GL_ARB_sparse_texture) enum useARBSparseTexture = true; 616 else enum useARBSparseTexture = false; 617 618 static if(useARBSparseTexture) { 619 import bindbc.opengl.bind.arb.core_45 : useARBDirectStateAccess, hasARBDirectStateAccess; 620 621 private bool _hasARBSparseTexture; 622 @nogc nothrow bool hasARBSparseTexture() { return _hasARBSparseTexture; } 623 624 enum : uint { 625 GL_TEXTURE_SPARSE_ARB = 0x91A6, 626 GL_VIRTUAL_PAGE_SIZE_INDEX_ARB = 0x91A7, 627 628 GL_NUM_SPARSE_LEVELS_ARB = 0x91AA, 629 630 GL_NUM_VIRTUAL_PAGE_SIZES_ARB = 0x91A8, 631 GL_VIRTUAL_PAGE_SIZE_X_ARB = 0x9195, 632 GL_VIRTUAL_PAGE_SIZE_Y_ARB = 0x9196, 633 GL_VIRTUAL_PAGE_SIZE_Z_ARB = 0x9197, 634 635 GL_MAX_SPARSE_TEXTURE_SIZE_ARB = 0x9198, 636 GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB = 0x9199, 637 GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB = 0x919A, 638 GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB = 0x91A9 639 } 640 641 extern(System) @nogc nothrow { 642 alias pglTexPageCommitmentARB = 643 void function(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLboolean); 644 static if(useARBDirectStateAccess) { 645 alias pglTexturePageCommitmentEXT = 646 void function(GLuint,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLboolean); 647 } 648 } 649 650 __gshared { 651 pglTexPageCommitmentARB glTexPageCommitmentARB; 652 static if(useARBDirectStateAccess) 653 pglTexturePageCommitmentEXT glTexturePageCommitmentEXT; 654 } 655 656 private @nogc nothrow 657 bool loadARBSparseTexture(SharedLib lib, GLSupport contextVersion) 658 { 659 lib.bindGLSymbol(cast(void**)&glTexPageCommitmentARB, "glTexPageCommitmentARB"); 660 661 static if(useARBDirectStateAccess) { 662 if(hasARBDirectStateAccess) 663 lib.bindGLSymbol(cast(void**)&glTexturePageCommitmentEXT, "glTexturePageCommitmentEXT"); 664 } 665 666 return resetErrorCountGL(); 667 } 668 } 669 670 // ARB_sparse_texture2 671 version(GL_ARB) enum useARBSparseTexture2 = true; 672 else version(GL_ARB_sparse_texture2) enum useARBSparseTexture2 = true; 673 else enum useARBSparseTexture2 = false; 674 675 static if(useARBSparseTexture2) { 676 private bool _hasARBSparseTexture2; 677 @nogc nothrow bool hasARBSparseTexture2() { return _hasARBSparseTexture2; } 678 } 679 680 // ARB_sparse_texture_clamp 681 version(GL_ARB) enum useARBSparseTextureClamp = true; 682 else version(GL_ARB_sparse_texture_clamp) enum useARBSparseTextureClamp = true; 683 else enum useARBSparseTextureClamp = false; 684 685 static if(useARBSparseTextureClamp) { 686 private bool _hasARBSparseTextureClamp; 687 @nogc nothrow bool hasARBSparseTextureClamp() { return _hasARBSparseTextureClamp; } 688 } 689 690 package @nogc nothrow 691 void loadARB_01(SharedLib lib, GLSupport contextVersion) 692 { 693 static if(useARBBindlessTexture) _hasARBBindlessTexture = 694 hasExtension(contextVersion, "GL_ARB_bindless_texture") && 695 lib.loadARBBindlessTexture(contextVersion); 696 697 static if(useARBCLEvent) _hasARBCLEvent = 698 hasExtension(contextVersion, "GL_ARB_cl_event") && 699 lib.loadARBCLEvent(contextVersion); 700 701 static if(useARBComputeVariableGroupSize) _hasARBComputeVariableGroupSize = 702 hasExtension(contextVersion, "GL_ARB_compute_variable_group_size") && 703 lib.loadARBComputeVariableGroupSize(contextVersion); 704 705 static if(useARBDebugOutput) _hasARBDebugOutput = 706 hasExtension(contextVersion, "GL_ARB_debug_output") && 707 lib.loadARBDebugOutput(contextVersion); 708 709 static if(useARBFramebufferSRGB) _hasARBFramebufferSRGB = 710 hasExtension(contextVersion, "GL_ARB_framebuffer_sRGB"); 711 712 static if(useARBGeometryShader4) _hasARBGeometryShader4 = 713 hasExtension(contextVersion, "GL_ARB_geometry_shader4") && 714 lib.loadARBGeometryShader4(contextVersion); 715 716 static if(useARBGLSPIRV) _hasARBGLSPIRV = 717 hasExtension(contextVersion, "GL_ARB_gl_spirv") && 718 lib.loadARBGLSPIRV(contextVersion); 719 720 static if(useARBGPUShaderInt64) _hasARBGPUShaderInt64 = 721 hasExtension(contextVersion, "GL_ARB_gpu_shader_int64") && 722 lib.loadARBGPUShaderInt64(contextVersion); 723 724 static if(useARBIndirectParameters) _hasARBIndirectParameters = 725 hasExtension(contextVersion, "GL_ARB_indirect_parameters") && 726 lib.loadARBIndirectParameters(contextVersion); 727 728 static if(useARBPipelineStatisticsQuery) _hasARBPipelineStatisticsQuery = 729 hasExtension(contextVersion, "GL_ARB_pipeline_statistics_query"); 730 731 static if(useARBRobustnessIsolation) _hasARBRobustnessIsolation = 732 hasExtension(contextVersion, "GL_ARB_robustness_isolation"); 733 734 static if(useARBSampleShading ) _hasARBSampleShading = 735 hasExtension(contextVersion, "GL_ARB_sample_shading") && 736 lib.loadARBSampleShading (contextVersion); 737 738 static if(useARBTextureCompressionBPTC) _hasARBTextureCompressionBPTC = 739 hasExtension(contextVersion, "GL_ARB_texture_compression_bptc"); 740 741 static if(useARBTextureCubeMapArray) _hasARBTextureCubeMapArray = 742 hasExtension(contextVersion, "GL_ARB_texture_cube_map_array"); 743 744 static if(useARBTextureGather) _hasARBTextureGather = 745 hasExtension(contextVersion, "GL_ARB_texture_gather"); 746 747 static if(useARBTransformFeedbackOverflowQuery) _hasARBTransformFeedbackOverflowQuery = 748 hasExtension(contextVersion, "GL_ARB_transform_feedback_overflow_query"); 749 750 static if(useARBSparseTexture) _hasARBSparseTexture = 751 hasExtension(contextVersion, "GL_ARB_sparse_texture") && 752 lib.loadARBSparseTexture(contextVersion); 753 754 static if(useARBSparseTexture2) _hasARBSparseTexture2 = 755 hasExtension(contextVersion, "GL_ARB_sparse_texture2"); 756 757 static if(useARBSparseTextureClamp) _hasARBSparseTextureClamp = 758 hasExtension(contextVersion, "GL_ARB_sparse_texture_clamp"); 759 }