1 /************************************************************************************
2 
3 	AstroMenace
4 	Hardcore 3D space scroll-shooter with spaceship upgrade possibilities.
5 	Copyright (c) 2006-2019 Mikhail Kurinnoi, Viewizard
6 
7 
8 	AstroMenace is free software: you can redistribute it and/or modify
9 	it under the terms of the GNU General Public License as published by
10 	the Free Software Foundation, either version 3 of the License, or
11 	(at your option) any later version.
12 
13 	AstroMenace is distributed in the hope that it will be useful,
14 	but WITHOUT ANY WARRANTY; without even the implied warranty of
15 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 	GNU General Public License for more details.
17 
18 	You should have received a copy of the GNU General Public License
19 	along with AstroMenace. If not, see <https://www.gnu.org/licenses/>.
20 
21 
22 	Website: https://viewizard.com/
23 	Project: https://github.com/viewizard/astromenace
24 	E-mail: viewizard@viewizard.com
25 
26 *************************************************************************************/
27 
28 /*
29 Should be for graphic's internal use only.
30 
31 Rules for functions and variables naming:
32 "__" prefix for functions;
33 "_" prefix for variables.
34 */
35 
36 #ifndef CORE_GRAPHICS_EXTENSION_H
37 #define CORE_GRAPHICS_EXTENSION_H
38 
39 #include "opengl.h"
40 
41 namespace viewizard {
42 
43 // OpenGL 1.3 (only what we need or would need in future)
44 extern PFNGLACTIVETEXTUREPROC pfn_glActiveTexture;
45 extern PFNGLCLIENTACTIVETEXTUREPROC pfn_glClientActiveTexture;
46 
47 // OpenGL 1.5 (only what we need or would need in future)
48 extern PFNGLBINDBUFFERPROC pfn_glBindBuffer;
49 extern PFNGLDELETEBUFFERSPROC pfn_glDeleteBuffers;
50 extern PFNGLGENBUFFERSPROC pfn_glGenBuffers;
51 extern PFNGLISBUFFERPROC pfn_glIsBuffer;
52 extern PFNGLBUFFERDATAPROC pfn_glBufferData;
53 
54 // OpenGL 2.0 (only what we need or would need in future)
55 extern PFNGLATTACHSHADERPROC pfn_glAttachShader;
56 extern PFNGLBINDATTRIBLOCATIONPROC pfn_glBindAttribLocation;
57 extern PFNGLCOMPILESHADERPROC pfn_glCompileShader;
58 extern PFNGLCREATEPROGRAMPROC pfn_glCreateProgram;
59 extern PFNGLCREATESHADERPROC pfn_glCreateShader;
60 extern PFNGLDELETEPROGRAMPROC pfn_glDeleteProgram;
61 extern PFNGLDELETESHADERPROC pfn_glDeleteShader;
62 extern PFNGLDETACHSHADERPROC pfn_glDetachShader;
63 extern PFNGLGETACTIVEATTRIBPROC pfn_glGetActiveAttrib;
64 extern PFNGLGETACTIVEUNIFORMPROC pfn_glGetActiveUniform;
65 extern PFNGLGETATTACHEDSHADERSPROC pfn_glGetAttachedShaders;
66 extern PFNGLGETATTRIBLOCATIONPROC pfn_glGetAttribLocation;
67 extern PFNGLGETPROGRAMIVPROC pfn_glGetProgramiv;
68 extern PFNGLGETPROGRAMINFOLOGPROC pfn_glGetProgramInfoLog;
69 extern PFNGLGETSHADERIVPROC pfn_glGetShaderiv;
70 extern PFNGLGETSHADERINFOLOGPROC pfn_glGetShaderInfoLog;
71 extern PFNGLGETSHADERSOURCEPROC pfn_glGetShaderSource;
72 extern PFNGLGETUNIFORMLOCATIONPROC pfn_glGetUniformLocation;
73 extern PFNGLGETUNIFORMFVPROC pfn_glGetUniformfv;
74 extern PFNGLGETUNIFORMIVPROC pfn_glGetUniformiv;
75 extern PFNGLISPROGRAMPROC pfn_glIsProgram;
76 extern PFNGLISSHADERPROC pfn_glIsShader;
77 extern PFNGLLINKPROGRAMPROC pfn_glLinkProgram;
78 extern PFNGLSHADERSOURCEPROC pfn_glShaderSource;
79 extern PFNGLUSEPROGRAMPROC pfn_glUseProgram;
80 extern PFNGLUNIFORM1FPROC pfn_glUniform1f;
81 extern PFNGLUNIFORM2FPROC pfn_glUniform2f;
82 extern PFNGLUNIFORM3FPROC pfn_glUniform3f;
83 extern PFNGLUNIFORM4FPROC pfn_glUniform4f;
84 extern PFNGLUNIFORM1IPROC pfn_glUniform1i;
85 extern PFNGLUNIFORM2IPROC pfn_glUniform2i;
86 extern PFNGLUNIFORM3IPROC pfn_glUniform3i;
87 extern PFNGLUNIFORM4IPROC pfn_glUniform4i;
88 extern PFNGLUNIFORM1FVPROC pfn_glUniform1fv;
89 extern PFNGLUNIFORM2FVPROC pfn_glUniform2fv;
90 extern PFNGLUNIFORM3FVPROC pfn_glUniform3fv;
91 extern PFNGLUNIFORM4FVPROC pfn_glUniform4fv;
92 extern PFNGLUNIFORM1IVPROC pfn_glUniform1iv;
93 extern PFNGLUNIFORM2IVPROC pfn_glUniform2iv;
94 extern PFNGLUNIFORM3IVPROC pfn_glUniform3iv;
95 extern PFNGLUNIFORM4IVPROC pfn_glUniform4iv;
96 extern PFNGLVALIDATEPROGRAMPROC pfn_glValidateProgram;
97 
98 // OpenGL 2.1 (only what we need or would need in future)
99 extern PFNGLUNIFORMMATRIX2X3FVPROC pfn_glUniformMatrix2x3fv;
100 extern PFNGLUNIFORMMATRIX3X2FVPROC pfn_glUniformMatrix3x2fv;
101 extern PFNGLUNIFORMMATRIX2X4FVPROC pfn_glUniformMatrix2x4fv;
102 extern PFNGLUNIFORMMATRIX4X2FVPROC pfn_glUniformMatrix4x2fv;
103 extern PFNGLUNIFORMMATRIX3X4FVPROC pfn_glUniformMatrix3x4fv;
104 extern PFNGLUNIFORMMATRIX4X3FVPROC pfn_glUniformMatrix4x3fv;
105 
106 // OpenGL 3.0 (only what we need or would need in future)
107 extern PFNGLBINDRENDERBUFFERPROC pfn_glBindRenderbuffer;
108 extern PFNGLDELETERENDERBUFFERSPROC pfn_glDeleteRenderbuffers;
109 extern PFNGLGENRENDERBUFFERSPROC pfn_glGenRenderbuffers;
110 extern PFNGLISFRAMEBUFFERPROC pfn_glIsFramebuffer;
111 extern PFNGLBINDFRAMEBUFFERPROC pfn_glBindFramebuffer;
112 extern PFNGLDELETEFRAMEBUFFERSPROC pfn_glDeleteFramebuffers;
113 extern PFNGLGENFRAMEBUFFERSPROC pfn_glGenFramebuffers;
114 extern PFNGLCHECKFRAMEBUFFERSTATUSPROC pfn_glCheckFramebufferStatus;
115 extern PFNGLFRAMEBUFFERTEXTURE2DPROC pfn_glFramebufferTexture2D;
116 extern PFNGLFRAMEBUFFERRENDERBUFFERPROC pfn_glFramebufferRenderbuffer;
117 extern PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC pfn_glGetFramebufferAttachmentParameteriv;
118 extern PFNGLGENERATEMIPMAPPROC pfn_glGenerateMipmap;
119 extern PFNGLBLITFRAMEBUFFERPROC pfn_glBlitFramebuffer;
120 extern PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC pfn_glRenderbufferStorageMultisample;
121 extern PFNGLBINDVERTEXARRAYPROC pfn_glBindVertexArray;
122 extern PFNGLDELETEVERTEXARRAYSPROC pfn_glDeleteVertexArrays;
123 extern PFNGLGENVERTEXARRAYSPROC pfn_glGenVertexArrays;
124 extern PFNGLISVERTEXARRAYPROC pfn_glIsVertexArray;
125 
126 // OpenGL 4.2 (only what we need or would need in future)
127 extern PFNGLTEXSTORAGE2DPROC pfn_glTexStorage2D;
128 
129 // GL_NV_framebuffer_multisample_coverage
130 extern PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC pfn_glRenderbufferStorageMultisampleCoverageNV;
131 
132 
133 bool Initialize_OpenGL_1_3();
134 bool Initialize_OpenGL_1_5();
135 bool Initialize_OpenGL_2_0();
136 bool Initialize_OpenGL_2_1();
137 bool Initialize_OpenGL_3_0();
138 bool Initialize_OpenGL_4_2();
139 bool Initialize_GL_NV_framebuffer_multisample_coverage();
140 
141 } // viewizard namespace
142 
143 #endif // CORE_GRAPHICS_EXTENSION_H
144