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