1 2 // Copyright Michael D. Parker 2018. 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.gl30; 8 9 import bindbc.opengl.config; 10 static if(glSupport >= GLSupport.gl30) { 11 import bindbc.loader : SharedLib; 12 import bindbc.opengl.context; 13 import bindbc.opengl.bind.types; 14 15 enum : uint { 16 GL_COMPARE_REF_TO_TEXTURE = 0x884E, 17 GL_CLIP_DISTANCE0 = 0x3000, 18 GL_CLIP_DISTANCE1 = 0x3001, 19 GL_CLIP_DISTANCE2 = 0x3002, 20 GL_CLIP_DISTANCE3 = 0x3003, 21 GL_CLIP_DISTANCE4 = 0x3004, 22 GL_CLIP_DISTANCE5 = 0x3005, 23 GL_CLIP_DISTANCE6 = 0x3006, 24 GL_CLIP_DISTANCE7 = 0x3007, 25 GL_MAX_CLIP_DISTANCES = 0x0D32, 26 GL_MAJOR_VERSION = 0x821B, 27 GL_MINOR_VERSION = 0x821C, 28 GL_NUM_EXTENSIONS = 0x821D, 29 GL_CONTEXT_FLAGS = 0x821E, 30 GL_COMPRESSED_RED = 0x8225, 31 GL_COMPRESSED_RG = 0x8226, 32 GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = 0x0001, 33 GL_RGBA32F = 0x8814, 34 GL_RGB32F = 0x8815, 35 GL_RGBA16F = 0x881A, 36 GL_RGB16F = 0x881B, 37 GL_VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD, 38 GL_MAX_ARRAY_TEXTURE_LAYERS = 0x88FF, 39 GL_MIN_PROGRAM_TEXEL_OFFSET = 0x8904, 40 GL_MAX_PROGRAM_TEXEL_OFFSET = 0x8905, 41 GL_CLAMP_READ_COLOR = 0x891C, 42 GL_FIXED_ONLY = 0x891D, 43 GL_MAX_VARYING_COMPONENTS = 0x8B4B, 44 GL_TEXTURE_1D_ARRAY = 0x8C18, 45 GL_PROXY_TEXTURE_1D_ARRAY = 0x8C19, 46 GL_TEXTURE_2D_ARRAY = 0x8C1A, 47 GL_PROXY_TEXTURE_2D_ARRAY = 0x8C1B, 48 GL_TEXTURE_BINDING_1D_ARRAY = 0x8C1C, 49 GL_TEXTURE_BINDING_2D_ARRAY = 0x8C1D, 50 GL_R11F_G11F_B10F = 0x8C3A, 51 GL_UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B, 52 GL_RGB9_E5 = 0x8C3D, 53 GL_UNSIGNED_INT_5_9_9_9_REV = 0x8C3E, 54 GL_TEXTURE_SHARED_SIZE = 0x8C3F, 55 GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 0x8C76, 56 GL_TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F, 57 GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80, 58 GL_TRANSFORM_FEEDBACK_VARYINGS = 0x8C83, 59 GL_TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84, 60 GL_TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85, 61 GL_PRIMITIVES_GENERATED = 0x8C87, 62 GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88, 63 GL_RASTERIZER_DISCARD = 0x8C89, 64 GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A, 65 GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B, 66 GL_INTERLEAVED_ATTRIBS = 0x8C8C, 67 GL_SEPARATE_ATTRIBS = 0x8C8D, 68 GL_TRANSFORM_FEEDBACK_BUFFER = 0x8C8E, 69 GL_TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F, 70 GL_RGBA32UI = 0x8D70, 71 GL_RGB32UI = 0x8D71, 72 GL_RGBA16UI = 0x8D76, 73 GL_RGB16UI = 0x8D77, 74 GL_RGBA8UI = 0x8D7C, 75 GL_RGB8UI = 0x8D7D, 76 GL_RGBA32I = 0x8D82, 77 GL_RGB32I = 0x8D83, 78 GL_RGBA16I = 0x8D88, 79 GL_RGB16I = 0x8D89, 80 GL_RGBA8I = 0x8D8E, 81 GL_RGB8I = 0x8D8F, 82 GL_RED_INTEGER = 0x8D94, 83 GL_GREEN_INTEGER = 0x8D95, 84 GL_BLUE_INTEGER = 0x8D96, 85 GL_RGB_INTEGER = 0x8D98, 86 GL_RGBA_INTEGER = 0x8D99, 87 GL_BGR_INTEGER = 0x8D9A, 88 GL_BGRA_INTEGER = 0x8D9B, 89 GL_SAMPLER_1D_ARRAY = 0x8DC0, 90 GL_SAMPLER_2D_ARRAY = 0x8DC1, 91 GL_SAMPLER_1D_ARRAY_SHADOW = 0x8DC3, 92 GL_SAMPLER_2D_ARRAY_SHADOW = 0x8DC4, 93 GL_SAMPLER_CUBE_SHADOW = 0x8DC5, 94 GL_UNSIGNED_INT_VEC2 = 0x8DC6, 95 GL_UNSIGNED_INT_VEC3 = 0x8DC7, 96 GL_UNSIGNED_INT_VEC4 = 0x8DC8, 97 GL_INT_SAMPLER_1D = 0x8DC9, 98 GL_INT_SAMPLER_2D = 0x8DCA, 99 GL_INT_SAMPLER_3D = 0x8DCB, 100 GL_INT_SAMPLER_CUBE = 0x8DCC, 101 GL_INT_SAMPLER_1D_ARRAY = 0x8DCE, 102 GL_INT_SAMPLER_2D_ARRAY = 0x8DCF, 103 GL_UNSIGNED_INT_SAMPLER_1D = 0x8DD1, 104 GL_UNSIGNED_INT_SAMPLER_2D = 0x8DD2, 105 GL_UNSIGNED_INT_SAMPLER_3D = 0x8DD3, 106 GL_UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4, 107 GL_UNSIGNED_INT_SAMPLER_1D_ARRAY = 0x8DD6, 108 GL_UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7, 109 GL_QUERY_WAIT = 0x8E13, 110 GL_QUERY_NO_WAIT = 0x8E14, 111 GL_QUERY_BY_REGION_WAIT = 0x8E15, 112 GL_QUERY_BY_REGION_NO_WAIT = 0x8E16, 113 GL_BUFFER_ACCESS_FLAGS = 0x911F, 114 GL_BUFFER_MAP_LENGTH = 0x9120, 115 GL_BUFFER_MAP_OFFSET = 0x9121, 116 } 117 118 extern(System) @nogc nothrow { 119 alias pglColorMaski = void function(GLuint,GLboolean,GLboolean,GLboolean,GLboolean); 120 alias pglGetBooleani_v = void function(GLenum,GLuint,GLboolean*); 121 alias pglGetIntegeri_v = void function(GLenum,GLuint,GLint*); 122 alias pglEnablei = void function(GLenum,GLuint); 123 alias pglDisablei = void function(GLenum,GLuint); 124 alias pglIsEnabledi = GLboolean function(GLenum,GLuint); 125 alias pglBeginTransformFeedback = void function(GLenum); 126 alias pglEndTransformFeedback = void function(); 127 alias pglBindBufferRange = void function(GLenum,GLuint,GLuint,GLintptr,GLsizeiptr); 128 alias pglBindBufferBase = void function(GLenum,GLuint,GLuint); 129 alias pglTransformFeedbackVaryings = void function(GLuint,GLsizei,const(GLchar*)*,GLenum); 130 alias pglGetTransformFeedbackVarying = void function(GLuint,GLuint,GLsizei,GLsizei*,GLsizei*,GLenum*,GLchar*); 131 alias pglClampColor = void function(GLenum,GLenum); 132 alias pglBeginConditionalRender = void function(GLuint,GLenum); 133 alias pglEndConditionalRender = void function(); 134 alias pglVertexAttribIPointer = void function(GLuint,GLint,GLenum,GLsizei,const(GLvoid)*); 135 alias pglGetVertexAttribIiv = void function(GLuint,GLenum,GLint*); 136 alias pglGetVertexAttribIuiv = void function(GLuint,GLenum,GLuint*); 137 alias pglVertexAttribI1i = void function(GLuint,GLint); 138 alias pglVertexAttribI2i = void function(GLuint,GLint,GLint); 139 alias pglVertexAttribI3i = void function(GLuint,GLint,GLint,GLint); 140 alias pglVertexAttribI4i = void function(GLuint,GLint,GLint,GLint,GLint); 141 alias pglVertexAttribI1ui = void function(GLuint,GLuint); 142 alias pglVertexAttribI2ui = void function(GLuint,GLuint,GLuint); 143 alias pglVertexAttribI3ui = void function(GLuint,GLuint,GLuint,GLuint); 144 alias pglVertexAttribI4ui = void function(GLuint,GLuint,GLuint,GLuint,GLuint); 145 alias pglVertexAttribI1iv = void function(GLuint,const(GLint)*); 146 alias pglVertexAttribI2iv = void function(GLuint,const(GLint)*); 147 alias pglVertexAttribI3iv = void function(GLuint,const(GLint)*); 148 alias pglVertexAttribI4iv = void function(GLuint,const(GLint)*); 149 alias pglVertexAttribI1uiv = void function(GLuint,const(GLuint)*); 150 alias pglVertexAttribI2uiv = void function(GLuint,const(GLuint)*); 151 alias pglVertexAttribI3uiv = void function(GLuint,const(GLuint)*); 152 alias pglVertexAttribI4uiv = void function(GLuint,const(GLuint)*); 153 alias pglVertexAttribI4bv = void function(GLuint,const(GLbyte)*); 154 alias pglVertexAttribI4sv = void function(GLuint,const(GLshort)*); 155 alias pglVertexAttribI4ubv = void function(GLuint,const(GLubyte)*); 156 alias pglVertexAttribI4usv = void function(GLuint,const(GLushort)*); 157 alias pglGetUniformuiv = void function(GLuint,GLint,GLuint*); 158 alias pglBindFragDataLocation = void function(GLuint,GLuint,const(GLchar)*); 159 alias pglGetFragDataLocation = GLint function(GLuint,const(GLchar)*); 160 alias pglUniform1ui = void function(GLint,GLuint); 161 alias pglUniform2ui = void function(GLint,GLuint,GLuint); 162 alias pglUniform3ui = void function(GLint,GLuint,GLuint,GLuint); 163 alias pglUniform4ui = void function(GLint,GLuint,GLuint,GLuint,GLuint); 164 alias pglUniform1uiv = void function(GLint,GLsizei,const(GLuint)*); 165 alias pglUniform2uiv = void function(GLint,GLsizei,const(GLuint)*); 166 alias pglUniform3uiv = void function(GLint,GLsizei,const(GLuint)*); 167 alias pglUniform4uiv = void function(GLint,GLsizei,const(GLuint)*); 168 alias pglTexParameterIiv = void function(GLenum,GLenum,const(GLint)*); 169 alias pglTexParameterIuiv = void function(GLenum,GLenum,const(GLuint)*); 170 alias pglGetTexParameterIiv = void function(GLenum,GLenum,GLint*); 171 alias pglGetTexParameterIuiv = void function(GLenum,GLenum,GLuint*); 172 alias pglClearBufferiv = void function(GLenum,GLint,const(GLint)*); 173 alias pglClearBufferuiv = void function(GLenum,GLint,const(GLuint)*); 174 alias pglClearBufferfv = void function(GLenum,GLint,const(GLfloat)*); 175 alias pglClearBufferfi = void function(GLenum,GLint,GLfloat,GLint); 176 alias pglGetStringi = const(char)* function(GLenum,GLuint); 177 } 178 179 __gshared { 180 pglColorMaski glColorMaski; 181 pglGetBooleani_v glGetBooleani_v; 182 pglGetIntegeri_v glGetIntegeri_v; 183 pglEnablei glEnablei; 184 pglDisablei glDisablei; 185 pglIsEnabledi glIsEnabledi; 186 pglBeginTransformFeedback glBeginTransformFeedback; 187 pglEndTransformFeedback glEndTransformFeedback; 188 pglBindBufferRange glBindBufferRange; 189 pglBindBufferBase glBindBufferBase; 190 pglTransformFeedbackVaryings glTransformFeedbackVaryings; 191 pglGetTransformFeedbackVarying glGetTransformFeedbackVarying; 192 pglClampColor glClampColor; 193 pglBeginConditionalRender glBeginConditionalRender; 194 pglEndConditionalRender glEndConditionalRender; 195 pglVertexAttribIPointer glVertexAttribIPointer; 196 pglGetVertexAttribIiv glGetVertexAttribIiv; 197 pglGetVertexAttribIuiv glGetVertexAttribIuiv; 198 pglVertexAttribI1i glVertexAttribI1i; 199 pglVertexAttribI2i glVertexAttribI2i; 200 pglVertexAttribI3i glVertexAttribI3i; 201 pglVertexAttribI4i glVertexAttribI4i; 202 pglVertexAttribI1ui glVertexAttribI1ui; 203 pglVertexAttribI2ui glVertexAttribI2ui; 204 pglVertexAttribI3ui glVertexAttribI3ui; 205 pglVertexAttribI4ui glVertexAttribI4ui; 206 pglVertexAttribI1iv glVertexAttribI1iv; 207 pglVertexAttribI2iv glVertexAttribI2iv; 208 pglVertexAttribI3iv glVertexAttribI3iv; 209 pglVertexAttribI4iv glVertexAttribI4iv; 210 pglVertexAttribI1uiv glVertexAttribI1uiv; 211 pglVertexAttribI2uiv glVertexAttribI2uiv; 212 pglVertexAttribI3uiv glVertexAttribI3uiv; 213 pglVertexAttribI4uiv glVertexAttribI4uiv; 214 pglVertexAttribI4bv glVertexAttribI4bv; 215 pglVertexAttribI4sv glVertexAttribI4sv; 216 pglVertexAttribI4ubv glVertexAttribI4ubv; 217 pglVertexAttribI4usv glVertexAttribI4usv; 218 pglGetUniformuiv glGetUniformuiv; 219 pglBindFragDataLocation glBindFragDataLocation; 220 pglGetFragDataLocation glGetFragDataLocation; 221 pglUniform1ui glUniform1ui; 222 pglUniform2ui glUniform2ui; 223 pglUniform3ui glUniform3ui; 224 pglUniform4ui glUniform4ui; 225 pglUniform1uiv glUniform1uiv; 226 pglUniform2uiv glUniform2uiv; 227 pglUniform3uiv glUniform3uiv; 228 pglUniform4uiv glUniform4uiv; 229 pglTexParameterIiv glTexParameterIiv; 230 pglTexParameterIuiv glTexParameterIuiv; 231 pglGetTexParameterIiv glGetTexParameterIiv; 232 pglGetTexParameterIuiv glGetTexParameterIuiv; 233 pglClearBufferiv glClearBufferiv; 234 pglClearBufferuiv glClearBufferuiv; 235 pglClearBufferfv glClearBufferfv; 236 pglClearBufferfi glClearBufferfi; 237 pglGetStringi glGetStringi; 238 } 239 240 package(bindbc.opengl) @nogc nothrow 241 GLSupport loadGL30(SharedLib lib, GLSupport contextVersion) 242 { 243 import bindbc.opengl.bind.arb : loadARB30; 244 245 if(contextVersion >= GLSupport.gl30) { 246 lib.bindGLSymbol(cast(void**)&glColorMaski, "glColorMaski"); 247 lib.bindGLSymbol(cast(void**)&glGetBooleani_v, "glGetBooleani_v"); 248 lib.bindGLSymbol(cast(void**)&glGetIntegeri_v, "glGetIntegeri_v"); 249 lib.bindGLSymbol(cast(void**)&glEnablei, "glEnablei"); 250 lib.bindGLSymbol(cast(void**)&glDisablei, "glDisablei"); 251 lib.bindGLSymbol(cast(void**)&glIsEnabledi, "glIsEnabledi"); 252 lib.bindGLSymbol(cast(void**)&glBeginTransformFeedback, "glBeginTransformFeedback"); 253 lib.bindGLSymbol(cast(void**)&glEndTransformFeedback, "glEndTransformFeedback"); 254 lib.bindGLSymbol(cast(void**)&glBindBufferRange, "glBindBufferRange"); 255 lib.bindGLSymbol(cast(void**)&glBindBufferBase, "glBindBufferBase"); 256 lib.bindGLSymbol(cast(void**)&glTransformFeedbackVaryings, "glTransformFeedbackVaryings"); 257 lib.bindGLSymbol(cast(void**)&glGetTransformFeedbackVarying, "glGetTransformFeedbackVarying"); 258 lib.bindGLSymbol(cast(void**)&glClampColor, "glClampColor"); 259 lib.bindGLSymbol(cast(void**)&glBeginConditionalRender, "glBeginConditionalRender"); 260 lib.bindGLSymbol(cast(void**)&glEndConditionalRender, "glEndConditionalRender"); 261 lib.bindGLSymbol(cast(void**)&glVertexAttribIPointer, "glVertexAttribIPointer"); 262 lib.bindGLSymbol(cast(void**)&glGetVertexAttribIiv, "glGetVertexAttribIiv"); 263 lib.bindGLSymbol(cast(void**)&glGetVertexAttribIuiv, "glGetVertexAttribIuiv"); 264 lib.bindGLSymbol(cast(void**)&glVertexAttribI1i, "glVertexAttribI1i"); 265 lib.bindGLSymbol(cast(void**)&glVertexAttribI2i, "glVertexAttribI2i"); 266 lib.bindGLSymbol(cast(void**)&glVertexAttribI3i, "glVertexAttribI3i"); 267 lib.bindGLSymbol(cast(void**)&glVertexAttribI4i, "glVertexAttribI4i"); 268 lib.bindGLSymbol(cast(void**)&glVertexAttribI1ui, "glVertexAttribI1ui"); 269 lib.bindGLSymbol(cast(void**)&glVertexAttribI2ui, "glVertexAttribI2ui"); 270 lib.bindGLSymbol(cast(void**)&glVertexAttribI3ui, "glVertexAttribI3ui"); 271 lib.bindGLSymbol(cast(void**)&glVertexAttribI4ui, "glVertexAttribI4ui"); 272 lib.bindGLSymbol(cast(void**)&glVertexAttribI1iv, "glVertexAttribI1iv"); 273 lib.bindGLSymbol(cast(void**)&glVertexAttribI2iv, "glVertexAttribI2iv"); 274 lib.bindGLSymbol(cast(void**)&glVertexAttribI3iv, "glVertexAttribI3iv"); 275 lib.bindGLSymbol(cast(void**)&glVertexAttribI4iv, "glVertexAttribI4iv"); 276 lib.bindGLSymbol(cast(void**)&glVertexAttribI1uiv, "glVertexAttribI1uiv"); 277 lib.bindGLSymbol(cast(void**)&glVertexAttribI2uiv, "glVertexAttribI2uiv"); 278 lib.bindGLSymbol(cast(void**)&glVertexAttribI3uiv, "glVertexAttribI3uiv"); 279 lib.bindGLSymbol(cast(void**)&glVertexAttribI4uiv, "glVertexAttribI4uiv"); 280 lib.bindGLSymbol(cast(void**)&glVertexAttribI4bv, "glVertexAttribI4bv"); 281 lib.bindGLSymbol(cast(void**)&glVertexAttribI4sv, "glVertexAttribI4sv"); 282 lib.bindGLSymbol(cast(void**)&glVertexAttribI4ubv, "glVertexAttribI4ubv"); 283 lib.bindGLSymbol(cast(void**)&glVertexAttribI4usv, "glVertexAttribI4usv"); 284 lib.bindGLSymbol(cast(void**)&glGetUniformuiv, "glGetUniformuiv"); 285 lib.bindGLSymbol(cast(void**)&glBindFragDataLocation, "glBindFragDataLocation"); 286 lib.bindGLSymbol(cast(void**)&glGetFragDataLocation, "glGetFragDataLocation"); 287 lib.bindGLSymbol(cast(void**)&glUniform1ui, "glUniform1ui"); 288 lib.bindGLSymbol(cast(void**)&glUniform2ui, "glUniform2ui"); 289 lib.bindGLSymbol(cast(void**)&glUniform3ui, "glUniform3ui"); 290 lib.bindGLSymbol(cast(void**)&glUniform4ui, "glUniform4ui"); 291 lib.bindGLSymbol(cast(void**)&glUniform1uiv, "glUniform1uiv"); 292 lib.bindGLSymbol(cast(void**)&glUniform2uiv, "glUniform2uiv"); 293 lib.bindGLSymbol(cast(void**)&glUniform3uiv, "glUniform3uiv"); 294 lib.bindGLSymbol(cast(void**)&glUniform4uiv, "glUniform4uiv"); 295 lib.bindGLSymbol(cast(void**)&glTexParameterIiv, "glTexParameterIiv"); 296 lib.bindGLSymbol(cast(void**)&glTexParameterIuiv, "glTexParameterIuiv"); 297 lib.bindGLSymbol(cast(void**)&glGetTexParameterIiv, "glGetTexParameterIiv"); 298 lib.bindGLSymbol(cast(void**)&glGetTexParameterIuiv, "glGetTexParameterIuiv"); 299 lib.bindGLSymbol(cast(void**)&glClearBufferiv, "glClearBufferiv"); 300 lib.bindGLSymbol(cast(void**)&glClearBufferuiv, "glClearBufferuiv"); 301 lib.bindGLSymbol(cast(void**)&glClearBufferfv, "glClearBufferfv"); 302 lib.bindGLSymbol(cast(void**)&glClearBufferfi, "glClearBufferfi"); 303 lib.bindGLSymbol(cast(void**)&glGetStringi, "glGetStringi"); 304 305 if(errorCountGL() == 0 && loadARB30(lib, contextVersion)) return GLSupport.gl30; 306 } 307 return GLSupport.gl21; 308 } 309 }