-
Notifications
You must be signed in to change notification settings - Fork 0
/
OpenGL.cpp
115 lines (110 loc) · 5.41 KB
/
OpenGL.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "OpenGL.h"
GLenum g_OpenGLError = GL_NO_ERROR;
bool OpenGLInitExtensions()
{
// Texture
OPENGL_GET_PROC(PFNGLACTIVETEXTUREPROC, glActiveTexture);
// VAO
OPENGL_GET_PROC(PFNGLGENVERTEXARRAYSPROC, glGenVertexArrays);
OPENGL_GET_PROC(PFNGLDELETEVERTEXARRAYSPROC, glDeleteVertexArrays);
OPENGL_GET_PROC(PFNGLBINDVERTEXARRAYPROC, glBindVertexArray);
// VBO
OPENGL_GET_PROC(PFNGLGENBUFFERSPROC, glGenBuffers);
OPENGL_GET_PROC(PFNGLDELETEBUFFERSPROC, glDeleteBuffers);
OPENGL_GET_PROC(PFNGLBINDBUFFERPROC, glBindBuffer);
OPENGL_GET_PROC(PFNGLBUFFERDATAPROC, glBufferData);
OPENGL_GET_PROC(PFNGLBUFFERSUBDATAPROC, glBufferSubData);
OPENGL_GET_PROC(PFNGLMAPBUFFERPROC, glMapBuffer);
OPENGL_GET_PROC(PFNGLUNMAPBUFFERPROC, glUnmapBuffer);
// Shaders
OPENGL_GET_PROC(PFNGLCREATEPROGRAMPROC, glCreateProgram);
OPENGL_GET_PROC(PFNGLDELETEPROGRAMPROC, glDeleteProgram);
OPENGL_GET_PROC(PFNGLLINKPROGRAMPROC, glLinkProgram);
OPENGL_GET_PROC(PFNGLVALIDATEPROGRAMPROC, glValidateProgram);
OPENGL_GET_PROC(PFNGLUSEPROGRAMPROC, glUseProgram);
OPENGL_GET_PROC(PFNGLGETPROGRAMIVPROC, glGetProgramiv);
OPENGL_GET_PROC(PFNGLGETPROGRAMINFOLOGPROC, glGetProgramInfoLog);
OPENGL_GET_PROC(PFNGLCREATESHADERPROC, glCreateShader);
OPENGL_GET_PROC(PFNGLDELETESHADERPROC, glDeleteShader);
OPENGL_GET_PROC(PFNGLSHADERSOURCEPROC, glShaderSource);
OPENGL_GET_PROC(PFNGLCOMPILESHADERPROC, glCompileShader);
OPENGL_GET_PROC(PFNGLATTACHSHADERPROC, glAttachShader);
OPENGL_GET_PROC(PFNGLDETACHSHADERPROC, glDetachShader);
OPENGL_GET_PROC(PFNGLGETSHADERIVPROC, glGetShaderiv);
OPENGL_GET_PROC(PFNGLGETSHADERINFOLOGPROC, glGetShaderInfoLog);
// Attributes
OPENGL_GET_PROC(PFNGLGETATTRIBLOCATIONPROC, glGetAttribLocation);
OPENGL_GET_PROC(PFNGLVERTEXATTRIBPOINTERPROC, glVertexAttribPointer);
OPENGL_GET_PROC(PFNGLENABLEVERTEXATTRIBARRAYPROC, glEnableVertexAttribArray);
OPENGL_GET_PROC(PFNGLDISABLEVERTEXATTRIBARRAYPROC, glDisableVertexAttribArray);
// Uniforms
OPENGL_GET_PROC(PFNGLGETUNIFORMLOCATIONPROC, glGetUniformLocation);
OPENGL_GET_PROC(PFNGLUNIFORMMATRIX3FVPROC, glUniformMatrix3fv);
OPENGL_GET_PROC(PFNGLUNIFORMMATRIX4FVPROC, glUniformMatrix4fv);
OPENGL_GET_PROC(PFNGLUNIFORM1IPROC, glUniform1i);
OPENGL_GET_PROC(PFNGLUNIFORM1FPROC, glUniform1f);
OPENGL_GET_PROC(PFNGLUNIFORM3FPROC, glUniform3f);
OPENGL_GET_PROC(PFNGLUNIFORM1FVPROC, glUniform1fv);
OPENGL_GET_PROC(PFNGLUNIFORM3FVPROC, glUniform3fv);
OPENGL_GET_PROC(PFNGLUNIFORM4FVPROC, glUniform4fv);
// FBO
OPENGL_GET_PROC(PFNGLBINDFRAMEBUFFERPROC, glBindFramebuffer);
OPENGL_GET_PROC(PFNGLDELETEFRAMEBUFFERSPROC, glDeleteFramebuffers);
OPENGL_GET_PROC(PFNGLGENFRAMEBUFFERSPROC, glGenFramebuffers);
OPENGL_GET_PROC(PFNGLCHECKFRAMEBUFFERSTATUSPROC, glCheckFramebufferStatus);
//OPENGL_GET_PROC(PFNGLFRAMEBUFFERTEXTUREPROC, glFramebufferTexture); // No support in ogl 3.0
OPENGL_CHECK_FOR_ERRORS();
return true;
}
// Declare OpenGL extensions
// Texture
PFNGLACTIVETEXTUREPROC glActiveTexture = 0;
// VAO
PFNGLGENVERTEXARRAYSPROC glGenVertexArrays = 0;
PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays = 0;
PFNGLBINDVERTEXARRAYPROC glBindVertexArray = 0;
// VBO
PFNGLGENBUFFERSPROC glGenBuffers = 0;
PFNGLDELETEBUFFERSPROC glDeleteBuffers = 0;
PFNGLBINDBUFFERPROC glBindBuffer = 0;
PFNGLBUFFERDATAPROC glBufferData = 0;
PFNGLBUFFERSUBDATAPROC glBufferSubData = 0;
PFNGLMAPBUFFERPROC glMapBuffer = 0;
PFNGLUNMAPBUFFERPROC glUnmapBuffer = 0;
// Shaders
PFNGLCREATEPROGRAMPROC glCreateProgram = 0;
PFNGLDELETEPROGRAMPROC glDeleteProgram = 0;
PFNGLLINKPROGRAMPROC glLinkProgram = 0;
PFNGLVALIDATEPROGRAMPROC glValidateProgram = 0;
PFNGLUSEPROGRAMPROC glUseProgram = 0;
PFNGLGETPROGRAMIVPROC glGetProgramiv = 0;
PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog = 0;
PFNGLCREATESHADERPROC glCreateShader = 0;
PFNGLDELETESHADERPROC glDeleteShader = 0;
PFNGLSHADERSOURCEPROC glShaderSource = 0;
PFNGLCOMPILESHADERPROC glCompileShader = 0;
PFNGLATTACHSHADERPROC glAttachShader = 0;
PFNGLDETACHSHADERPROC glDetachShader = 0;
PFNGLGETSHADERIVPROC glGetShaderiv = 0;
PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog = 0;
// Attributes
PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation = 0;
PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer = 0;
PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray = 0;
PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray = 0;
// Uniforms
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation = 0;
PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv = 0;
PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv = 0;
PFNGLUNIFORM1IPROC glUniform1i = 0;
PFNGLUNIFORM1FPROC glUniform1f = 0;
PFNGLUNIFORM3FPROC glUniform3f = 0;
PFNGLUNIFORM1FVPROC glUniform1fv = 0;
PFNGLUNIFORM3FVPROC glUniform3fv = 0;
PFNGLUNIFORM4FVPROC glUniform4fv = 0;
// FBO
PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer = 0;
PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers = 0;
PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers = 0;
PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus = 0;
PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture = 0;