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.gl12;
8 
9 import bindbc.loader : SharedLib;
10 import bindbc.opengl.config,
11        bindbc.opengl.context;
12 import bindbc.opengl.bind.types;
13 
14 public import bindbc.opengl.bind.gl11;
15 
16 enum : uint {
17     GL_UNSIGNED_BYTE_3_3_2            = 0x8032,
18     GL_UNSIGNED_SHORT_4_4_4_4         = 0x8033,
19     GL_UNSIGNED_SHORT_5_5_5_1         = 0x8034,
20     GL_UNSIGNED_INT_8_8_8_8           = 0x8035,
21     GL_UNSIGNED_INT_10_10_10_2        = 0x8036,
22     GL_TEXTURE_BINDING_3D             = 0x806A,
23     GL_PACK_SKIP_IMAGES               = 0x806B,
24     GL_PACK_IMAGE_HEIGHT              = 0x806C,
25     GL_UNPACK_SKIP_IMAGES             = 0x806D,
26     GL_UNPACK_IMAGE_HEIGHT            = 0x806E,
27     GL_TEXTURE_3D                     = 0x806F,
28     GL_PROXY_TEXTURE_3D               = 0x8070,
29     GL_TEXTURE_DEPTH                  = 0x8071,
30     GL_TEXTURE_WRAP_R                 = 0x8072,
31     GL_MAX_3D_TEXTURE_SIZE            = 0x8073,
32     GL_UNSIGNED_BYTE_2_3_3_REV        = 0x8362,
33     GL_UNSIGNED_SHORT_5_6_5           = 0x8363,
34     GL_UNSIGNED_SHORT_5_6_5_REV       = 0x8364,
35     GL_UNSIGNED_SHORT_4_4_4_4_REV     = 0x8365,
36     GL_UNSIGNED_SHORT_1_5_5_5_REV     = 0x8366,
37     GL_UNSIGNED_INT_8_8_8_8_REV       = 0x8367,
38     GL_UNSIGNED_INT_2_10_10_10_REV    = 0x8368,
39     GL_BGR                            = 0x80E0,
40     GL_BGRA                           = 0x80E1,
41     GL_MAX_ELEMENTS_VERTICES          = 0x80E8,
42     GL_MAX_ELEMENTS_INDICES           = 0x80E9,
43     GL_CLAMP_TO_EDGE                  = 0x812F,
44     GL_TEXTURE_MIN_LOD                = 0x813A,
45     GL_TEXTURE_MAX_LOD                = 0x813B,
46     GL_TEXTURE_BASE_LEVEL             = 0x813C,
47     GL_TEXTURE_MAX_LEVEL              = 0x813D,
48     GL_SMOOTH_POINT_SIZE_RANGE        = 0x0B12,
49     GL_SMOOTH_POINT_SIZE_GRANULARITY  = 0x0B13,
50     GL_SMOOTH_LINE_WIDTH_RANGE        = 0x0B22,
51     GL_SMOOTH_LINE_WIDTH_GRANULARITY  = 0x0B23,
52     GL_ALIASED_LINE_WIDTH_RANGE       = 0x846E,
53 }
54 
55 extern(System) @nogc nothrow {
56     alias pglDrawRangeElements = void function(GLenum,GLuint,GLuint,GLsizei,GLenum,const(GLvoid)*);
57     alias pglTexImage3D = void function(GLenum,GLint,GLint,GLsizei,GLsizei,GLsizei,GLint,GLenum,GLenum,const(GLvoid)*);
58     alias pglTexSubImage3D = void function(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const(GLvoid)*);
59     alias pglCopyTexSubImage3D = void function(GLenum,GLint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
60 }
61 
62 __gshared {
63     pglDrawRangeElements glDrawRangeElements;
64     pglTexImage3D glTexImage3D;
65     pglTexSubImage3D glTexSubImage3D;
66     pglCopyTexSubImage3D glCopyTexSubImage3D;
67 }
68 
69 package(bindbc.opengl) @nogc nothrow
70 GLSupport loadGL12(SharedLib lib, GLSupport contextVersion)
71 {
72     if(contextVersion > GLSupport.gl11) {
73         lib.bindGLSymbol(cast(void**)&glDrawRangeElements, "glDrawRangeElements");
74         lib.bindGLSymbol(cast(void**)&glTexImage3D, "glTexImage3D");
75         lib.bindGLSymbol(cast(void**)&glTexSubImage3D, "glTexSubImage3D");
76         lib.bindGLSymbol(cast(void**)&glCopyTexSubImage3D, "glCopyTexSubImage3D");
77         if(errorCountGL() == 0) return GLSupport.gl12;
78     }
79     return GLSupport.gl11;
80 }