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.gl14;
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.gl13;
15 
16 enum : uint {
17     GL_BLEND_DST_RGB                  = 0x80C8,
18     GL_BLEND_SRC_RGB                  = 0x80C9,
19     GL_BLEND_DST_ALPHA                = 0x80CA,
20     GL_BLEND_SRC_ALPHA                = 0x80CB,
21     GL_POINT_FADE_THRESHOLD_SIZE      = 0x8128,
22     GL_DEPTH_COMPONENT16              = 0x81A5,
23     GL_DEPTH_COMPONENT24              = 0x81A6,
24     GL_DEPTH_COMPONENT32              = 0x81A7,
25     GL_MIRRORED_REPEAT                = 0x8370,
26     GL_MAX_TEXTURE_LOD_BIAS           = 0x84FD,
27     GL_TEXTURE_LOD_BIAS               = 0x8501,
28     GL_INCR_WRAP                      = 0x8507,
29     GL_DECR_WRAP                      = 0x8508,
30     GL_TEXTURE_DEPTH_SIZE             = 0x884A,
31     GL_TEXTURE_COMPARE_MODE           = 0x884C,
32     GL_TEXTURE_COMPARE_FUNC           = 0x884D,
33     GL_CONSTANT_COLOR                 = 0x8001,
34     GL_ONE_MINUS_CONSTANT_COLOR       = 0x8002,
35     GL_CONSTANT_ALPHA                 = 0x8003,
36     GL_ONE_MINUS_CONSTANT_ALPHA       = 0x8004,
37     GL_FUNC_ADD                       = 0x8006,
38     GL_MIN                            = 0x8007,
39     GL_MAX                            = 0x8008,
40     GL_FUNC_SUBTRACT                  = 0x800A,
41     GL_FUNC_REVERSE_SUBTRACT          = 0x800B,
42 }
43 
44 extern(System) @nogc nothrow {
45     alias pglBlendFuncSeparate = void function(GLenum,GLenum,GLenum,GLenum);
46     alias pglMultiDrawArrays = void function(GLenum,const(GLint)*,const(GLsizei)*,GLsizei);
47     alias pglMultiDrawElements = void function(GLenum,const(GLsizei)*,GLenum,const(GLvoid)*,GLsizei);
48     alias pglPointParameterf = void function(GLenum,GLfloat);
49     alias pglPointParameterfv = void function(GLenum,const(GLfloat)*);
50     alias pglPointParameteri = void function(GLenum,GLint);
51     alias pglPointParameteriv = void function(GLenum,const(GLint)*);
52     alias pglBlendColor = void function(GLclampf,GLclampf,GLclampf,GLclampf);
53     alias pglBlendEquation = void function(GLenum);
54 }
55 
56 __gshared {
57     pglBlendFuncSeparate glBlendFuncSeparate;
58     pglMultiDrawArrays glMultiDrawArrays;
59     pglMultiDrawElements glMultiDrawElements;
60     pglPointParameterf glPointParameterf;
61     pglPointParameterfv glPointParameterfv;
62     pglPointParameteri glPointParameteri;
63     pglPointParameteriv glPointParameteriv;
64     pglBlendColor glBlendColor;
65     pglBlendEquation glBlendEquation;
66 }
67 
68 package(bindbc.opengl) @nogc nothrow
69 GLSupport loadGL14(SharedLib lib, GLSupport contextVersion)
70 {
71     auto loadedVersion = loadGL13(lib, contextVersion);
72     if(loadedVersion == GLSupport.gl13 && contextVersion > GLSupport.gl13) {
73         lib.bindGLSymbol(cast(void**)&glBlendFuncSeparate, "glBlendFuncSeparate");
74         lib.bindGLSymbol(cast(void**)&glMultiDrawArrays, "glMultiDrawArrays");
75         lib.bindGLSymbol(cast(void**)&glMultiDrawElements, "glMultiDrawElements");
76         lib.bindGLSymbol(cast(void**)&glPointParameterf, "glPointParameterf");
77         lib.bindGLSymbol(cast(void**)&glPointParameterfv, "glPointParameterfv");
78         lib.bindGLSymbol(cast(void**)&glPointParameteri, "glPointParameteri");
79         lib.bindGLSymbol(cast(void**)&glPointParameteriv, "glPointParameteriv");
80         lib.bindGLSymbol(cast(void**)&glBlendColor, "glBlendColor");
81         lib.bindGLSymbol(cast(void**)&glBlendEquation, "glBlendEquation");
82         if(errorCountGL() == 0) loadedVersion = GLSupport.gl14;
83     }
84     return loadedVersion;
85 }