ゲームグラフィックス特論
gg.cpp
[詳解]
1 #include "gg.h"
2 
3 /*
4 ** ゲームグラフィックス特論用補助プログラム GLFW3 版
5 **
6 
7 Copyright (c) 2011-2021 Kohe Tokoi. All Rights Reserved.
8 
9 Permission is hereby granted, free of charge, to any person obtaining a copy
10 of this software and associated documentation files (the "Software"), to deal
11 in the Software without restriction, including without limitation the rights
12 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 copies or substantial portions of the Software.
14 
15 The above copyright notice and this permission notice shall be included in
16 all copies or substantial portions of the Software.
17 
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 KOHE TOKOI BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
22 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 
25 **
26 */
27 
36 // 標準ライブラリ
37 #include <cmath>
38 #include <cfloat>
39 #include <cstdlib>
40 #include <cstddef>
41 #include <stdexcept>
42 #include <iostream>
43 #include <fstream>
44 #include <sstream>
45 #include <string>
46 #include <memory>
47 #include <map>
48 
50 #define READ_TEXTURE_COORDINATE_FROM_OBJ 0
51 
52 // Windows のとき
53 #if defined(_MSC_VER)
54 // プラットフォームを調べる
55 # if defined(_WIN64)
56 # define GLFW3_PLATFORM "x64"
57 # else
58 # define GLFW3_PLATFORM "Win32"
59 # endif
60 // コンフィギュレーションを調べる
61 # if defined(_DEBUG)
62 # define GLFW3_CONFIGURATION "Debug"
63 # else
64 # define GLFW3_CONFIGURATION "Release"
65 // Visual Studio のリリースビルドではコンソールを出さない
66 # pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
67 # endif
68 // リンクするライブラリ
69 # pragma comment(lib, "lib\\" GLFW3_PLATFORM "\\" GLFW3_CONFIGURATION "\\glfw3.lib")
70 #endif
71 
72 // OpenGL 3.2 の API のエントリポイント
73 #if !defined(GL3_PROTOTYPES)
74 PFNGLACTIVEPROGRAMEXTPROC glActiveProgramEXT;
75 PFNGLACTIVESHADERPROGRAMPROC glActiveShaderProgram;
76 PFNGLACTIVETEXTUREPROC glActiveTexture;
77 PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC glApplyFramebufferAttachmentCMAAINTEL;
78 PFNGLATTACHSHADERPROC glAttachShader;
79 PFNGLBEGINCONDITIONALRENDERNVPROC glBeginConditionalRenderNV;
80 PFNGLBEGINCONDITIONALRENDERPROC glBeginConditionalRender;
81 PFNGLBEGINPERFMONITORAMDPROC glBeginPerfMonitorAMD;
82 PFNGLBEGINPERFQUERYINTELPROC glBeginPerfQueryINTEL;
83 PFNGLBEGINQUERYINDEXEDPROC glBeginQueryIndexed;
84 PFNGLBEGINQUERYPROC glBeginQuery;
85 PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback;
86 PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation;
87 PFNGLBINDBUFFERBASEPROC glBindBufferBase;
88 PFNGLBINDBUFFERPROC glBindBuffer;
89 PFNGLBINDBUFFERRANGEPROC glBindBufferRange;
90 PFNGLBINDBUFFERSBASEPROC glBindBuffersBase;
91 PFNGLBINDBUFFERSRANGEPROC glBindBuffersRange;
92 PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glBindFragDataLocationIndexed;
93 PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation;
94 PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
95 PFNGLBINDIMAGETEXTUREPROC glBindImageTexture;
96 PFNGLBINDIMAGETEXTURESPROC glBindImageTextures;
97 PFNGLBINDMULTITEXTUREEXTPROC glBindMultiTextureEXT;
98 PFNGLBINDPROGRAMPIPELINEPROC glBindProgramPipeline;
99 PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
100 PFNGLBINDSAMPLERPROC glBindSampler;
101 PFNGLBINDSAMPLERSPROC glBindSamplers;
102 PFNGLBINDTEXTUREPROC glBindTexture;
103 PFNGLBINDTEXTURESPROC glBindTextures;
104 PFNGLBINDTEXTUREUNITPROC glBindTextureUnit;
105 PFNGLBINDTRANSFORMFEEDBACKPROC glBindTransformFeedback;
106 PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
107 PFNGLBINDVERTEXBUFFERPROC glBindVertexBuffer;
108 PFNGLBINDVERTEXBUFFERSPROC glBindVertexBuffers;
109 PFNGLBLENDBARRIERKHRPROC glBlendBarrierKHR;
110 PFNGLBLENDBARRIERNVPROC glBlendBarrierNV;
111 PFNGLBLENDCOLORPROC glBlendColor;
112 PFNGLBLENDEQUATIONIARBPROC glBlendEquationiARB;
113 PFNGLBLENDEQUATIONIPROC glBlendEquationi;
114 PFNGLBLENDEQUATIONPROC glBlendEquation;
115 PFNGLBLENDEQUATIONSEPARATEIARBPROC glBlendEquationSeparateiARB;
116 PFNGLBLENDEQUATIONSEPARATEIPROC glBlendEquationSeparatei;
117 PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate;
118 PFNGLBLENDFUNCIARBPROC glBlendFunciARB;
119 PFNGLBLENDFUNCIPROC glBlendFunci;
120 PFNGLBLENDFUNCPROC glBlendFunc;
121 PFNGLBLENDFUNCSEPARATEIARBPROC glBlendFuncSeparateiARB;
122 PFNGLBLENDFUNCSEPARATEIPROC glBlendFuncSeparatei;
123 PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate;
124 PFNGLBLENDPARAMETERINVPROC glBlendParameteriNV;
125 PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
126 PFNGLBLITNAMEDFRAMEBUFFERPROC glBlitNamedFramebuffer;
127 PFNGLBUFFERADDRESSRANGENVPROC glBufferAddressRangeNV;
128 PFNGLBUFFERDATAPROC glBufferData;
129 PFNGLBUFFERPAGECOMMITMENTARBPROC glBufferPageCommitmentARB;
130 PFNGLBUFFERSTORAGEPROC glBufferStorage;
131 PFNGLBUFFERSUBDATAPROC glBufferSubData;
132 PFNGLCALLCOMMANDLISTNVPROC glCallCommandListNV;
133 PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
134 PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC glCheckNamedFramebufferStatusEXT;
135 PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glCheckNamedFramebufferStatus;
136 PFNGLCLAMPCOLORPROC glClampColor;
137 PFNGLCLEARBUFFERDATAPROC glClearBufferData;
138 PFNGLCLEARBUFFERFIPROC glClearBufferfi;
139 PFNGLCLEARBUFFERFVPROC glClearBufferfv;
140 PFNGLCLEARBUFFERIVPROC glClearBufferiv;
141 PFNGLCLEARBUFFERSUBDATAPROC glClearBufferSubData;
142 PFNGLCLEARBUFFERUIVPROC glClearBufferuiv;
143 PFNGLCLEARCOLORPROC glClearColor;
144 PFNGLCLEARDEPTHFPROC glClearDepthf;
145 PFNGLCLEARDEPTHPROC glClearDepth;
146 PFNGLCLEARNAMEDBUFFERDATAEXTPROC glClearNamedBufferDataEXT;
147 PFNGLCLEARNAMEDBUFFERDATAPROC glClearNamedBufferData;
148 PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC glClearNamedBufferSubDataEXT;
149 PFNGLCLEARNAMEDBUFFERSUBDATAPROC glClearNamedBufferSubData;
150 PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glClearNamedFramebufferfi;
151 PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glClearNamedFramebufferfv;
152 PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glClearNamedFramebufferiv;
153 PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glClearNamedFramebufferuiv;
154 PFNGLCLEARPROC glClear;
155 PFNGLCLEARSTENCILPROC glClearStencil;
156 PFNGLCLEARTEXIMAGEPROC glClearTexImage;
157 PFNGLCLEARTEXSUBIMAGEPROC glClearTexSubImage;
158 PFNGLCLIENTATTRIBDEFAULTEXTPROC glClientAttribDefaultEXT;
159 PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
160 PFNGLCLIPCONTROLPROC glClipControl;
161 PFNGLCOLORFORMATNVPROC glColorFormatNV;
162 PFNGLCOLORMASKIPROC glColorMaski;
163 PFNGLCOLORMASKPROC glColorMask;
164 PFNGLCOMMANDLISTSEGMENTSNVPROC glCommandListSegmentsNV;
165 PFNGLCOMPILECOMMANDLISTNVPROC glCompileCommandListNV;
166 PFNGLCOMPILESHADERINCLUDEARBPROC glCompileShaderIncludeARB;
167 PFNGLCOMPILESHADERPROC glCompileShader;
168 PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC glCompressedMultiTexImage1DEXT;
169 PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC glCompressedMultiTexImage2DEXT;
170 PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC glCompressedMultiTexImage3DEXT;
171 PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC glCompressedMultiTexSubImage1DEXT;
172 PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC glCompressedMultiTexSubImage2DEXT;
173 PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC glCompressedMultiTexSubImage3DEXT;
174 PFNGLCOMPRESSEDTEXIMAGE1DPROC glCompressedTexImage1D;
175 PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D;
176 PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D;
177 PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glCompressedTexSubImage1D;
178 PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D;
179 PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D;
180 PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC glCompressedTextureImage1DEXT;
181 PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC glCompressedTextureImage2DEXT;
182 PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC glCompressedTextureImage3DEXT;
183 PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC glCompressedTextureSubImage1DEXT;
184 PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glCompressedTextureSubImage1D;
185 PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC glCompressedTextureSubImage2DEXT;
186 PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glCompressedTextureSubImage2D;
187 PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC glCompressedTextureSubImage3DEXT;
188 PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glCompressedTextureSubImage3D;
189 PFNGLCONSERVATIVERASTERPARAMETERFNVPROC glConservativeRasterParameterfNV;
190 PFNGLCONSERVATIVERASTERPARAMETERINVPROC glConservativeRasterParameteriNV;
191 PFNGLCOPYBUFFERSUBDATAPROC glCopyBufferSubData;
192 PFNGLCOPYIMAGESUBDATAPROC glCopyImageSubData;
193 PFNGLCOPYMULTITEXIMAGE1DEXTPROC glCopyMultiTexImage1DEXT;
194 PFNGLCOPYMULTITEXIMAGE2DEXTPROC glCopyMultiTexImage2DEXT;
195 PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC glCopyMultiTexSubImage1DEXT;
196 PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC glCopyMultiTexSubImage2DEXT;
197 PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC glCopyMultiTexSubImage3DEXT;
198 PFNGLCOPYNAMEDBUFFERSUBDATAPROC glCopyNamedBufferSubData;
199 PFNGLCOPYPATHNVPROC glCopyPathNV;
200 PFNGLCOPYTEXIMAGE1DPROC glCopyTexImage1D;
201 PFNGLCOPYTEXIMAGE2DPROC glCopyTexImage2D;
202 PFNGLCOPYTEXSUBIMAGE1DPROC glCopyTexSubImage1D;
203 PFNGLCOPYTEXSUBIMAGE2DPROC glCopyTexSubImage2D;
204 PFNGLCOPYTEXSUBIMAGE3DPROC glCopyTexSubImage3D;
205 PFNGLCOPYTEXTUREIMAGE1DEXTPROC glCopyTextureImage1DEXT;
206 PFNGLCOPYTEXTUREIMAGE2DEXTPROC glCopyTextureImage2DEXT;
207 PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC glCopyTextureSubImage1DEXT;
208 PFNGLCOPYTEXTURESUBIMAGE1DPROC glCopyTextureSubImage1D;
209 PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC glCopyTextureSubImage2DEXT;
210 PFNGLCOPYTEXTURESUBIMAGE2DPROC glCopyTextureSubImage2D;
211 PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC glCopyTextureSubImage3DEXT;
212 PFNGLCOPYTEXTURESUBIMAGE3DPROC glCopyTextureSubImage3D;
213 PFNGLCOVERAGEMODULATIONNVPROC glCoverageModulationNV;
214 PFNGLCOVERAGEMODULATIONTABLENVPROC glCoverageModulationTableNV;
215 PFNGLCOVERFILLPATHINSTANCEDNVPROC glCoverFillPathInstancedNV;
216 PFNGLCOVERFILLPATHNVPROC glCoverFillPathNV;
217 PFNGLCOVERSTROKEPATHINSTANCEDNVPROC glCoverStrokePathInstancedNV;
218 PFNGLCOVERSTROKEPATHNVPROC glCoverStrokePathNV;
219 PFNGLCREATEBUFFERSPROC glCreateBuffers;
220 PFNGLCREATECOMMANDLISTSNVPROC glCreateCommandListsNV;
221 PFNGLCREATEFRAMEBUFFERSPROC glCreateFramebuffers;
222 PFNGLCREATEPERFQUERYINTELPROC glCreatePerfQueryINTEL;
223 PFNGLCREATEPROGRAMPIPELINESPROC glCreateProgramPipelines;
224 PFNGLCREATEPROGRAMPROC glCreateProgram;
225 PFNGLCREATEQUERIESPROC glCreateQueries;
226 PFNGLCREATERENDERBUFFERSPROC glCreateRenderbuffers;
227 PFNGLCREATESAMPLERSPROC glCreateSamplers;
228 PFNGLCREATESHADERPROC glCreateShader;
229 PFNGLCREATESHADERPROGRAMEXTPROC glCreateShaderProgramEXT;
230 PFNGLCREATESHADERPROGRAMVPROC glCreateShaderProgramv;
231 PFNGLCREATESTATESNVPROC glCreateStatesNV;
232 PFNGLCREATESYNCFROMCLEVENTARBPROC glCreateSyncFromCLeventARB;
233 PFNGLCREATETEXTURESPROC glCreateTextures;
234 PFNGLCREATETRANSFORMFEEDBACKSPROC glCreateTransformFeedbacks;
235 PFNGLCREATEVERTEXARRAYSPROC glCreateVertexArrays;
236 PFNGLCULLFACEPROC glCullFace;
237 PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARB;
238 PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback;
239 PFNGLDEBUGMESSAGECONTROLARBPROC glDebugMessageControlARB;
240 PFNGLDEBUGMESSAGECONTROLPROC glDebugMessageControl;
241 PFNGLDEBUGMESSAGEINSERTARBPROC glDebugMessageInsertARB;
242 PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert;
243 PFNGLDELETEBUFFERSPROC glDeleteBuffers;
244 PFNGLDELETECOMMANDLISTSNVPROC glDeleteCommandListsNV;
245 PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
246 PFNGLDELETENAMEDSTRINGARBPROC glDeleteNamedStringARB;
247 PFNGLDELETEPATHSNVPROC glDeletePathsNV;
248 PFNGLDELETEPERFMONITORSAMDPROC glDeletePerfMonitorsAMD;
249 PFNGLDELETEPERFQUERYINTELPROC glDeletePerfQueryINTEL;
250 PFNGLDELETEPROGRAMPIPELINESPROC glDeleteProgramPipelines;
251 PFNGLDELETEPROGRAMPROC glDeleteProgram;
252 PFNGLDELETEQUERIESPROC glDeleteQueries;
253 PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
254 PFNGLDELETESAMPLERSPROC glDeleteSamplers;
255 PFNGLDELETESHADERPROC glDeleteShader;
256 PFNGLDELETESTATESNVPROC glDeleteStatesNV;
257 PFNGLDELETESYNCPROC glDeleteSync;
258 PFNGLDELETETEXTURESPROC glDeleteTextures;
259 PFNGLDELETETRANSFORMFEEDBACKSPROC glDeleteTransformFeedbacks;
260 PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
261 PFNGLDEPTHFUNCPROC glDepthFunc;
262 PFNGLDEPTHMASKPROC glDepthMask;
263 PFNGLDEPTHRANGEARRAYVPROC glDepthRangeArrayv;
264 PFNGLDEPTHRANGEFPROC glDepthRangef;
265 PFNGLDEPTHRANGEINDEXEDPROC glDepthRangeIndexed;
266 PFNGLDEPTHRANGEPROC glDepthRange;
267 PFNGLDETACHSHADERPROC glDetachShader;
268 PFNGLDISABLECLIENTSTATEIEXTPROC glDisableClientStateiEXT;
269 PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC glDisableClientStateIndexedEXT;
270 PFNGLDISABLEINDEXEDEXTPROC glDisableIndexedEXT;
271 PFNGLDISABLEIPROC glDisablei;
272 PFNGLDISABLEPROC glDisable;
273 PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC glDisableVertexArrayAttribEXT;
274 PFNGLDISABLEVERTEXARRAYATTRIBPROC glDisableVertexArrayAttrib;
275 PFNGLDISABLEVERTEXARRAYEXTPROC glDisableVertexArrayEXT;
276 PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
277 PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC glDispatchComputeGroupSizeARB;
278 PFNGLDISPATCHCOMPUTEINDIRECTPROC glDispatchComputeIndirect;
279 PFNGLDISPATCHCOMPUTEPROC glDispatchCompute;
280 PFNGLDRAWARRAYSINDIRECTPROC glDrawArraysIndirect;
281 PFNGLDRAWARRAYSINSTANCEDARBPROC glDrawArraysInstancedARB;
282 PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstance;
283 PFNGLDRAWARRAYSINSTANCEDEXTPROC glDrawArraysInstancedEXT;
284 PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
285 PFNGLDRAWARRAYSPROC glDrawArrays;
286 PFNGLDRAWBUFFERPROC glDrawBuffer;
287 PFNGLDRAWBUFFERSPROC glDrawBuffers;
288 PFNGLDRAWCOMMANDSADDRESSNVPROC glDrawCommandsAddressNV;
289 PFNGLDRAWCOMMANDSNVPROC glDrawCommandsNV;
290 PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC glDrawCommandsStatesAddressNV;
291 PFNGLDRAWCOMMANDSSTATESNVPROC glDrawCommandsStatesNV;
292 PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex;
293 PFNGLDRAWELEMENTSINDIRECTPROC glDrawElementsIndirect;
294 PFNGLDRAWELEMENTSINSTANCEDARBPROC glDrawElementsInstancedARB;
295 PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glDrawElementsInstancedBaseInstance;
296 PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glDrawElementsInstancedBaseVertexBaseInstance;
297 PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex;
298 PFNGLDRAWELEMENTSINSTANCEDEXTPROC glDrawElementsInstancedEXT;
299 PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
300 PFNGLDRAWELEMENTSPROC glDrawElements;
301 PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glDrawRangeElementsBaseVertex;
302 PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
303 PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glDrawTransformFeedbackInstanced;
304 PFNGLDRAWTRANSFORMFEEDBACKPROC glDrawTransformFeedback;
305 PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glDrawTransformFeedbackStreamInstanced;
306 PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glDrawTransformFeedbackStream;
307 PFNGLDRAWVKIMAGENVPROC glDrawVkImageNV;
308 PFNGLEDGEFLAGFORMATNVPROC glEdgeFlagFormatNV;
309 PFNGLENABLECLIENTSTATEIEXTPROC glEnableClientStateiEXT;
310 PFNGLENABLECLIENTSTATEINDEXEDEXTPROC glEnableClientStateIndexedEXT;
311 PFNGLENABLEINDEXEDEXTPROC glEnableIndexedEXT;
312 PFNGLENABLEIPROC glEnablei;
313 PFNGLENABLEPROC glEnable;
314 PFNGLENABLEVERTEXARRAYATTRIBEXTPROC glEnableVertexArrayAttribEXT;
315 PFNGLENABLEVERTEXARRAYATTRIBPROC glEnableVertexArrayAttrib;
316 PFNGLENABLEVERTEXARRAYEXTPROC glEnableVertexArrayEXT;
317 PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
318 PFNGLENDCONDITIONALRENDERNVPROC glEndConditionalRenderNV;
319 PFNGLENDCONDITIONALRENDERPROC glEndConditionalRender;
320 PFNGLENDPERFMONITORAMDPROC glEndPerfMonitorAMD;
321 PFNGLENDPERFQUERYINTELPROC glEndPerfQueryINTEL;
322 PFNGLENDQUERYINDEXEDPROC glEndQueryIndexed;
323 PFNGLENDQUERYPROC glEndQuery;
324 PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback;
325 PFNGLEVALUATEDEPTHVALUESARBPROC glEvaluateDepthValuesARB;
326 PFNGLFENCESYNCPROC glFenceSync;
327 PFNGLFINISHPROC glFinish;
328 PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
329 PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC glFlushMappedNamedBufferRangeEXT;
330 PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glFlushMappedNamedBufferRange;
331 PFNGLFLUSHPROC glFlush;
332 PFNGLFOGCOORDFORMATNVPROC glFogCoordFormatNV;
333 PFNGLFRAGMENTCOVERAGECOLORNVPROC glFragmentCoverageColorNV;
334 PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC glFramebufferDrawBufferEXT;
335 PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC glFramebufferDrawBuffersEXT;
336 PFNGLFRAMEBUFFERPARAMETERIPROC glFramebufferParameteri;
337 PFNGLFRAMEBUFFERREADBUFFEREXTPROC glFramebufferReadBufferEXT;
338 PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer;
339 PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glFramebufferSampleLocationsfvARB;
340 PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glFramebufferSampleLocationsfvNV;
341 PFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D;
342 PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
343 PFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D;
344 PFNGLFRAMEBUFFERTEXTUREARBPROC glFramebufferTextureARB;
345 PFNGLFRAMEBUFFERTEXTUREFACEARBPROC glFramebufferTextureFaceARB;
346 PFNGLFRAMEBUFFERTEXTURELAYERARBPROC glFramebufferTextureLayerARB;
347 PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer;
348 PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC glFramebufferTextureMultiviewOVR;
349 PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture;
350 PFNGLFRONTFACEPROC glFrontFace;
351 PFNGLGENBUFFERSPROC glGenBuffers;
352 PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
353 PFNGLGENERATEMULTITEXMIPMAPEXTPROC glGenerateMultiTexMipmapEXT;
354 PFNGLGENERATETEXTUREMIPMAPEXTPROC glGenerateTextureMipmapEXT;
355 PFNGLGENERATETEXTUREMIPMAPPROC glGenerateTextureMipmap;
356 PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
357 PFNGLGENPATHSNVPROC glGenPathsNV;
358 PFNGLGENPERFMONITORSAMDPROC glGenPerfMonitorsAMD;
359 PFNGLGENPROGRAMPIPELINESPROC glGenProgramPipelines;
360 PFNGLGENQUERIESPROC glGenQueries;
361 PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
362 PFNGLGENSAMPLERSPROC glGenSamplers;
363 PFNGLGENTEXTURESPROC glGenTextures;
364 PFNGLGENTRANSFORMFEEDBACKSPROC glGenTransformFeedbacks;
365 PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
366 PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glGetActiveAtomicCounterBufferiv;
367 PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib;
368 PFNGLGETACTIVESUBROUTINENAMEPROC glGetActiveSubroutineName;
369 PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glGetActiveSubroutineUniformiv;
370 PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glGetActiveSubroutineUniformName;
371 PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv;
372 PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glGetActiveUniformBlockName;
373 PFNGLGETACTIVEUNIFORMNAMEPROC glGetActiveUniformName;
374 PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform;
375 PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv;
376 PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders;
377 PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation;
378 PFNGLGETBOOLEANINDEXEDVEXTPROC glGetBooleanIndexedvEXT;
379 PFNGLGETBOOLEANI_VPROC glGetBooleani_v;
380 PFNGLGETBOOLEANVPROC glGetBooleanv;
381 PFNGLGETBUFFERPARAMETERI64VPROC glGetBufferParameteri64v;
382 PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv;
383 PFNGLGETBUFFERPARAMETERUI64VNVPROC glGetBufferParameterui64vNV;
384 PFNGLGETBUFFERPOINTERVPROC glGetBufferPointerv;
385 PFNGLGETBUFFERSUBDATAPROC glGetBufferSubData;
386 PFNGLGETCOMMANDHEADERNVPROC glGetCommandHeaderNV;
387 PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC glGetCompressedMultiTexImageEXT;
388 PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage;
389 PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC glGetCompressedTextureImageEXT;
390 PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glGetCompressedTextureImage;
391 PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glGetCompressedTextureSubImage;
392 PFNGLGETCOVERAGEMODULATIONTABLENVPROC glGetCoverageModulationTableNV;
393 PFNGLGETDEBUGMESSAGELOGARBPROC glGetDebugMessageLogARB;
394 PFNGLGETDEBUGMESSAGELOGPROC glGetDebugMessageLog;
395 PFNGLGETDOUBLEINDEXEDVEXTPROC glGetDoubleIndexedvEXT;
396 PFNGLGETDOUBLEI_VEXTPROC glGetDoublei_vEXT;
397 PFNGLGETDOUBLEI_VPROC glGetDoublei_v;
398 PFNGLGETDOUBLEVPROC glGetDoublev;
399 PFNGLGETERRORPROC glGetError;
400 PFNGLGETFIRSTPERFQUERYIDINTELPROC glGetFirstPerfQueryIdINTEL;
401 PFNGLGETFLOATINDEXEDVEXTPROC glGetFloatIndexedvEXT;
402 PFNGLGETFLOATI_VEXTPROC glGetFloati_vEXT;
403 PFNGLGETFLOATI_VPROC glGetFloati_v;
404 PFNGLGETFLOATVPROC glGetFloatv;
405 PFNGLGETFRAGDATAINDEXPROC glGetFragDataIndex;
406 PFNGLGETFRAGDATALOCATIONPROC glGetFragDataLocation;
407 PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv;
408 PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC glGetFramebufferParameterivEXT;
409 PFNGLGETFRAMEBUFFERPARAMETERIVPROC glGetFramebufferParameteriv;
410 PFNGLGETGRAPHICSRESETSTATUSARBPROC glGetGraphicsResetStatusARB;
411 PFNGLGETGRAPHICSRESETSTATUSPROC glGetGraphicsResetStatus;
412 PFNGLGETIMAGEHANDLEARBPROC glGetImageHandleARB;
413 PFNGLGETIMAGEHANDLENVPROC glGetImageHandleNV;
414 PFNGLGETINTEGER64I_VPROC glGetInteger64i_v;
415 PFNGLGETINTEGER64VPROC glGetInteger64v;
416 PFNGLGETINTEGERINDEXEDVEXTPROC glGetIntegerIndexedvEXT;
417 PFNGLGETINTEGERI_VPROC glGetIntegeri_v;
418 PFNGLGETINTEGERUI64I_VNVPROC glGetIntegerui64i_vNV;
419 PFNGLGETINTEGERUI64VNVPROC glGetIntegerui64vNV;
420 PFNGLGETINTEGERVPROC glGetIntegerv;
421 PFNGLGETINTERNALFORMATI64VPROC glGetInternalformati64v;
422 PFNGLGETINTERNALFORMATIVPROC glGetInternalformativ;
423 PFNGLGETINTERNALFORMATSAMPLEIVNVPROC glGetInternalformatSampleivNV;
424 PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv;
425 PFNGLGETMULTITEXENVFVEXTPROC glGetMultiTexEnvfvEXT;
426 PFNGLGETMULTITEXENVIVEXTPROC glGetMultiTexEnvivEXT;
427 PFNGLGETMULTITEXGENDVEXTPROC glGetMultiTexGendvEXT;
428 PFNGLGETMULTITEXGENFVEXTPROC glGetMultiTexGenfvEXT;
429 PFNGLGETMULTITEXGENIVEXTPROC glGetMultiTexGenivEXT;
430 PFNGLGETMULTITEXIMAGEEXTPROC glGetMultiTexImageEXT;
431 PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC glGetMultiTexLevelParameterfvEXT;
432 PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC glGetMultiTexLevelParameterivEXT;
433 PFNGLGETMULTITEXPARAMETERFVEXTPROC glGetMultiTexParameterfvEXT;
434 PFNGLGETMULTITEXPARAMETERIIVEXTPROC glGetMultiTexParameterIivEXT;
435 PFNGLGETMULTITEXPARAMETERIUIVEXTPROC glGetMultiTexParameterIuivEXT;
436 PFNGLGETMULTITEXPARAMETERIVEXTPROC glGetMultiTexParameterivEXT;
437 PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glGetNamedBufferParameteri64v;
438 PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC glGetNamedBufferParameterivEXT;
439 PFNGLGETNAMEDBUFFERPARAMETERIVPROC glGetNamedBufferParameteriv;
440 PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC glGetNamedBufferParameterui64vNV;
441 PFNGLGETNAMEDBUFFERPOINTERVEXTPROC glGetNamedBufferPointervEXT;
442 PFNGLGETNAMEDBUFFERPOINTERVPROC glGetNamedBufferPointerv;
443 PFNGLGETNAMEDBUFFERSUBDATAEXTPROC glGetNamedBufferSubDataEXT;
444 PFNGLGETNAMEDBUFFERSUBDATAPROC glGetNamedBufferSubData;
445 PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetNamedFramebufferAttachmentParameterivEXT;
446 PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetNamedFramebufferAttachmentParameteriv;
447 PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC glGetNamedFramebufferParameterivEXT;
448 PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glGetNamedFramebufferParameteriv;
449 PFNGLGETNAMEDPROGRAMIVEXTPROC glGetNamedProgramivEXT;
450 PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC glGetNamedProgramLocalParameterdvEXT;
451 PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC glGetNamedProgramLocalParameterfvEXT;
452 PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC glGetNamedProgramLocalParameterIivEXT;
453 PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC glGetNamedProgramLocalParameterIuivEXT;
454 PFNGLGETNAMEDPROGRAMSTRINGEXTPROC glGetNamedProgramStringEXT;
455 PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC glGetNamedRenderbufferParameterivEXT;
456 PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glGetNamedRenderbufferParameteriv;
457 PFNGLGETNAMEDSTRINGARBPROC glGetNamedStringARB;
458 PFNGLGETNAMEDSTRINGIVARBPROC glGetNamedStringivARB;
459 PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC glGetnCompressedTexImageARB;
460 PFNGLGETNCOMPRESSEDTEXIMAGEPROC glGetnCompressedTexImage;
461 PFNGLGETNEXTPERFQUERYIDINTELPROC glGetNextPerfQueryIdINTEL;
462 PFNGLGETNTEXIMAGEARBPROC glGetnTexImageARB;
463 PFNGLGETNTEXIMAGEPROC glGetnTexImage;
464 PFNGLGETNUNIFORMDVARBPROC glGetnUniformdvARB;
465 PFNGLGETNUNIFORMDVPROC glGetnUniformdv;
466 PFNGLGETNUNIFORMFVARBPROC glGetnUniformfvARB;
467 PFNGLGETNUNIFORMFVPROC glGetnUniformfv;
468 PFNGLGETNUNIFORMI64VARBPROC glGetnUniformi64vARB;
469 PFNGLGETNUNIFORMIVARBPROC glGetnUniformivARB;
470 PFNGLGETNUNIFORMIVPROC glGetnUniformiv;
471 PFNGLGETNUNIFORMUI64VARBPROC glGetnUniformui64vARB;
472 PFNGLGETNUNIFORMUIVARBPROC glGetnUniformuivARB;
473 PFNGLGETNUNIFORMUIVPROC glGetnUniformuiv;
474 PFNGLGETOBJECTLABELEXTPROC glGetObjectLabelEXT;
475 PFNGLGETOBJECTLABELPROC glGetObjectLabel;
476 PFNGLGETOBJECTPTRLABELPROC glGetObjectPtrLabel;
477 PFNGLGETPATHCOMMANDSNVPROC glGetPathCommandsNV;
478 PFNGLGETPATHCOORDSNVPROC glGetPathCoordsNV;
479 PFNGLGETPATHDASHARRAYNVPROC glGetPathDashArrayNV;
480 PFNGLGETPATHLENGTHNVPROC glGetPathLengthNV;
481 PFNGLGETPATHMETRICRANGENVPROC glGetPathMetricRangeNV;
482 PFNGLGETPATHMETRICSNVPROC glGetPathMetricsNV;
483 PFNGLGETPATHPARAMETERFVNVPROC glGetPathParameterfvNV;
484 PFNGLGETPATHPARAMETERIVNVPROC glGetPathParameterivNV;
485 PFNGLGETPATHSPACINGNVPROC glGetPathSpacingNV;
486 PFNGLGETPERFCOUNTERINFOINTELPROC glGetPerfCounterInfoINTEL;
487 PFNGLGETPERFMONITORCOUNTERDATAAMDPROC glGetPerfMonitorCounterDataAMD;
488 PFNGLGETPERFMONITORCOUNTERINFOAMDPROC glGetPerfMonitorCounterInfoAMD;
489 PFNGLGETPERFMONITORCOUNTERSAMDPROC glGetPerfMonitorCountersAMD;
490 PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC glGetPerfMonitorCounterStringAMD;
491 PFNGLGETPERFMONITORGROUPSAMDPROC glGetPerfMonitorGroupsAMD;
492 PFNGLGETPERFMONITORGROUPSTRINGAMDPROC glGetPerfMonitorGroupStringAMD;
493 PFNGLGETPERFQUERYDATAINTELPROC glGetPerfQueryDataINTEL;
494 PFNGLGETPERFQUERYIDBYNAMEINTELPROC glGetPerfQueryIdByNameINTEL;
495 PFNGLGETPERFQUERYINFOINTELPROC glGetPerfQueryInfoINTEL;
496 PFNGLGETPOINTERINDEXEDVEXTPROC glGetPointerIndexedvEXT;
497 PFNGLGETPOINTERI_VEXTPROC glGetPointeri_vEXT;
498 PFNGLGETPOINTERVPROC glGetPointerv;
499 PFNGLGETPROGRAMBINARYPROC glGetProgramBinary;
500 PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
501 PFNGLGETPROGRAMINTERFACEIVPROC glGetProgramInterfaceiv;
502 PFNGLGETPROGRAMIVPROC glGetProgramiv;
503 PFNGLGETPROGRAMPIPELINEINFOLOGPROC glGetProgramPipelineInfoLog;
504 PFNGLGETPROGRAMPIPELINEIVPROC glGetProgramPipelineiv;
505 PFNGLGETPROGRAMRESOURCEFVNVPROC glGetProgramResourcefvNV;
506 PFNGLGETPROGRAMRESOURCEINDEXPROC glGetProgramResourceIndex;
507 PFNGLGETPROGRAMRESOURCEIVPROC glGetProgramResourceiv;
508 PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glGetProgramResourceLocationIndex;
509 PFNGLGETPROGRAMRESOURCELOCATIONPROC glGetProgramResourceLocation;
510 PFNGLGETPROGRAMRESOURCENAMEPROC glGetProgramResourceName;
511 PFNGLGETPROGRAMSTAGEIVPROC glGetProgramStageiv;
512 PFNGLGETQUERYBUFFEROBJECTI64VPROC glGetQueryBufferObjecti64v;
513 PFNGLGETQUERYBUFFEROBJECTIVPROC glGetQueryBufferObjectiv;
514 PFNGLGETQUERYBUFFEROBJECTUI64VPROC glGetQueryBufferObjectui64v;
515 PFNGLGETQUERYBUFFEROBJECTUIVPROC glGetQueryBufferObjectuiv;
516 PFNGLGETQUERYINDEXEDIVPROC glGetQueryIndexediv;
517 PFNGLGETQUERYIVPROC glGetQueryiv;
518 PFNGLGETQUERYOBJECTI64VPROC glGetQueryObjecti64v;
519 PFNGLGETQUERYOBJECTIVPROC glGetQueryObjectiv;
520 PFNGLGETQUERYOBJECTUI64VPROC glGetQueryObjectui64v;
521 PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv;
522 PFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv;
523 PFNGLGETSAMPLERPARAMETERFVPROC glGetSamplerParameterfv;
524 PFNGLGETSAMPLERPARAMETERIIVPROC glGetSamplerParameterIiv;
525 PFNGLGETSAMPLERPARAMETERIUIVPROC glGetSamplerParameterIuiv;
526 PFNGLGETSAMPLERPARAMETERIVPROC glGetSamplerParameteriv;
527 PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
528 PFNGLGETSHADERIVPROC glGetShaderiv;
529 PFNGLGETSHADERPRECISIONFORMATPROC glGetShaderPrecisionFormat;
530 PFNGLGETSHADERSOURCEPROC glGetShaderSource;
531 PFNGLGETSTAGEINDEXNVPROC glGetStageIndexNV;
532 PFNGLGETSTRINGIPROC glGetStringi;
533 PFNGLGETSTRINGPROC glGetString;
534 PFNGLGETSUBROUTINEINDEXPROC glGetSubroutineIndex;
535 PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glGetSubroutineUniformLocation;
536 PFNGLGETSYNCIVPROC glGetSynciv;
537 PFNGLGETTEXIMAGEPROC glGetTexImage;
538 PFNGLGETTEXLEVELPARAMETERFVPROC glGetTexLevelParameterfv;
539 PFNGLGETTEXLEVELPARAMETERIVPROC glGetTexLevelParameteriv;
540 PFNGLGETTEXPARAMETERFVPROC glGetTexParameterfv;
541 PFNGLGETTEXPARAMETERIIVPROC glGetTexParameterIiv;
542 PFNGLGETTEXPARAMETERIUIVPROC glGetTexParameterIuiv;
543 PFNGLGETTEXPARAMETERIVPROC glGetTexParameteriv;
544 PFNGLGETTEXTUREHANDLEARBPROC glGetTextureHandleARB;
545 PFNGLGETTEXTUREHANDLENVPROC glGetTextureHandleNV;
546 PFNGLGETTEXTUREIMAGEEXTPROC glGetTextureImageEXT;
547 PFNGLGETTEXTUREIMAGEPROC glGetTextureImage;
548 PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC glGetTextureLevelParameterfvEXT;
549 PFNGLGETTEXTURELEVELPARAMETERFVPROC glGetTextureLevelParameterfv;
550 PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC glGetTextureLevelParameterivEXT;
551 PFNGLGETTEXTURELEVELPARAMETERIVPROC glGetTextureLevelParameteriv;
552 PFNGLGETTEXTUREPARAMETERFVEXTPROC glGetTextureParameterfvEXT;
553 PFNGLGETTEXTUREPARAMETERFVPROC glGetTextureParameterfv;
554 PFNGLGETTEXTUREPARAMETERIIVEXTPROC glGetTextureParameterIivEXT;
555 PFNGLGETTEXTUREPARAMETERIIVPROC glGetTextureParameterIiv;
556 PFNGLGETTEXTUREPARAMETERIUIVEXTPROC glGetTextureParameterIuivEXT;
557 PFNGLGETTEXTUREPARAMETERIUIVPROC glGetTextureParameterIuiv;
558 PFNGLGETTEXTUREPARAMETERIVEXTPROC glGetTextureParameterivEXT;
559 PFNGLGETTEXTUREPARAMETERIVPROC glGetTextureParameteriv;
560 PFNGLGETTEXTURESAMPLERHANDLEARBPROC glGetTextureSamplerHandleARB;
561 PFNGLGETTEXTURESAMPLERHANDLENVPROC glGetTextureSamplerHandleNV;
562 PFNGLGETTEXTURESUBIMAGEPROC glGetTextureSubImage;
563 PFNGLGETTRANSFORMFEEDBACKI64_VPROC glGetTransformFeedbacki64_v;
564 PFNGLGETTRANSFORMFEEDBACKIVPROC glGetTransformFeedbackiv;
565 PFNGLGETTRANSFORMFEEDBACKI_VPROC glGetTransformFeedbacki_v;
566 PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying;
567 PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex;
568 PFNGLGETUNIFORMDVPROC glGetUniformdv;
569 PFNGLGETUNIFORMFVPROC glGetUniformfv;
570 PFNGLGETUNIFORMI64VARBPROC glGetUniformi64vARB;
571 PFNGLGETUNIFORMI64VNVPROC glGetUniformi64vNV;
572 PFNGLGETUNIFORMINDICESPROC glGetUniformIndices;
573 PFNGLGETUNIFORMIVPROC glGetUniformiv;
574 PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
575 PFNGLGETUNIFORMSUBROUTINEUIVPROC glGetUniformSubroutineuiv;
576 PFNGLGETUNIFORMUI64VARBPROC glGetUniformui64vARB;
577 PFNGLGETUNIFORMUI64VNVPROC glGetUniformui64vNV;
578 PFNGLGETUNIFORMUIVPROC glGetUniformuiv;
579 PFNGLGETVERTEXARRAYINDEXED64IVPROC glGetVertexArrayIndexed64iv;
580 PFNGLGETVERTEXARRAYINDEXEDIVPROC glGetVertexArrayIndexediv;
581 PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC glGetVertexArrayIntegeri_vEXT;
582 PFNGLGETVERTEXARRAYINTEGERVEXTPROC glGetVertexArrayIntegervEXT;
583 PFNGLGETVERTEXARRAYIVPROC glGetVertexArrayiv;
584 PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC glGetVertexArrayPointeri_vEXT;
585 PFNGLGETVERTEXARRAYPOINTERVEXTPROC glGetVertexArrayPointervEXT;
586 PFNGLGETVERTEXATTRIBDVPROC glGetVertexAttribdv;
587 PFNGLGETVERTEXATTRIBFVPROC glGetVertexAttribfv;
588 PFNGLGETVERTEXATTRIBIIVPROC glGetVertexAttribIiv;
589 PFNGLGETVERTEXATTRIBIUIVPROC glGetVertexAttribIuiv;
590 PFNGLGETVERTEXATTRIBIVPROC glGetVertexAttribiv;
591 PFNGLGETVERTEXATTRIBLDVPROC glGetVertexAttribLdv;
592 PFNGLGETVERTEXATTRIBLI64VNVPROC glGetVertexAttribLi64vNV;
593 PFNGLGETVERTEXATTRIBLUI64VARBPROC glGetVertexAttribLui64vARB;
594 PFNGLGETVERTEXATTRIBLUI64VNVPROC glGetVertexAttribLui64vNV;
595 PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv;
596 PFNGLGETVKPROCADDRNVPROC glGetVkProcAddrNV;
597 PFNGLHINTPROC glHint;
598 PFNGLINDEXFORMATNVPROC glIndexFormatNV;
599 PFNGLINSERTEVENTMARKEREXTPROC glInsertEventMarkerEXT;
600 PFNGLINTERPOLATEPATHSNVPROC glInterpolatePathsNV;
601 PFNGLINVALIDATEBUFFERDATAPROC glInvalidateBufferData;
602 PFNGLINVALIDATEBUFFERSUBDATAPROC glInvalidateBufferSubData;
603 PFNGLINVALIDATEFRAMEBUFFERPROC glInvalidateFramebuffer;
604 PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glInvalidateNamedFramebufferData;
605 PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glInvalidateNamedFramebufferSubData;
606 PFNGLINVALIDATESUBFRAMEBUFFERPROC glInvalidateSubFramebuffer;
607 PFNGLINVALIDATETEXIMAGEPROC glInvalidateTexImage;
608 PFNGLINVALIDATETEXSUBIMAGEPROC glInvalidateTexSubImage;
609 PFNGLISBUFFERPROC glIsBuffer;
610 PFNGLISBUFFERRESIDENTNVPROC glIsBufferResidentNV;
611 PFNGLISCOMMANDLISTNVPROC glIsCommandListNV;
612 PFNGLISENABLEDINDEXEDEXTPROC glIsEnabledIndexedEXT;
613 PFNGLISENABLEDIPROC glIsEnabledi;
614 PFNGLISENABLEDPROC glIsEnabled;
615 PFNGLISFRAMEBUFFERPROC glIsFramebuffer;
616 PFNGLISIMAGEHANDLERESIDENTARBPROC glIsImageHandleResidentARB;
617 PFNGLISIMAGEHANDLERESIDENTNVPROC glIsImageHandleResidentNV;
618 PFNGLISNAMEDBUFFERRESIDENTNVPROC glIsNamedBufferResidentNV;
619 PFNGLISNAMEDSTRINGARBPROC glIsNamedStringARB;
620 PFNGLISPATHNVPROC glIsPathNV;
621 PFNGLISPOINTINFILLPATHNVPROC glIsPointInFillPathNV;
622 PFNGLISPOINTINSTROKEPATHNVPROC glIsPointInStrokePathNV;
623 PFNGLISPROGRAMPIPELINEPROC glIsProgramPipeline;
624 PFNGLISPROGRAMPROC glIsProgram;
625 PFNGLISQUERYPROC glIsQuery;
626 PFNGLISRENDERBUFFERPROC glIsRenderbuffer;
627 PFNGLISSAMPLERPROC glIsSampler;
628 PFNGLISSHADERPROC glIsShader;
629 PFNGLISSTATENVPROC glIsStateNV;
630 PFNGLISSYNCPROC glIsSync;
631 PFNGLISTEXTUREHANDLERESIDENTARBPROC glIsTextureHandleResidentARB;
632 PFNGLISTEXTUREHANDLERESIDENTNVPROC glIsTextureHandleResidentNV;
633 PFNGLISTEXTUREPROC glIsTexture;
634 PFNGLISTRANSFORMFEEDBACKPROC glIsTransformFeedback;
635 PFNGLISVERTEXARRAYPROC glIsVertexArray;
636 PFNGLLABELOBJECTEXTPROC glLabelObjectEXT;
637 PFNGLLINEWIDTHPROC glLineWidth;
638 PFNGLLINKPROGRAMPROC glLinkProgram;
639 PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC glListDrawCommandsStatesClientNV;
640 PFNGLLOGICOPPROC glLogicOp;
641 PFNGLMAKEBUFFERNONRESIDENTNVPROC glMakeBufferNonResidentNV;
642 PFNGLMAKEBUFFERRESIDENTNVPROC glMakeBufferResidentNV;
643 PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC glMakeImageHandleNonResidentARB;
644 PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC glMakeImageHandleNonResidentNV;
645 PFNGLMAKEIMAGEHANDLERESIDENTARBPROC glMakeImageHandleResidentARB;
646 PFNGLMAKEIMAGEHANDLERESIDENTNVPROC glMakeImageHandleResidentNV;
647 PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC glMakeNamedBufferNonResidentNV;
648 PFNGLMAKENAMEDBUFFERRESIDENTNVPROC glMakeNamedBufferResidentNV;
649 PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC glMakeTextureHandleNonResidentARB;
650 PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC glMakeTextureHandleNonResidentNV;
651 PFNGLMAKETEXTUREHANDLERESIDENTARBPROC glMakeTextureHandleResidentARB;
652 PFNGLMAKETEXTUREHANDLERESIDENTNVPROC glMakeTextureHandleResidentNV;
653 PFNGLMAPBUFFERPROC glMapBuffer;
654 PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
655 PFNGLMAPNAMEDBUFFEREXTPROC glMapNamedBufferEXT;
656 PFNGLMAPNAMEDBUFFERPROC glMapNamedBuffer;
657 PFNGLMAPNAMEDBUFFERRANGEEXTPROC glMapNamedBufferRangeEXT;
658 PFNGLMAPNAMEDBUFFERRANGEPROC glMapNamedBufferRange;
659 PFNGLMATRIXFRUSTUMEXTPROC glMatrixFrustumEXT;
660 PFNGLMATRIXLOAD3X2FNVPROC glMatrixLoad3x2fNV;
661 PFNGLMATRIXLOAD3X3FNVPROC glMatrixLoad3x3fNV;
662 PFNGLMATRIXLOADDEXTPROC glMatrixLoaddEXT;
663 PFNGLMATRIXLOADFEXTPROC glMatrixLoadfEXT;
664 PFNGLMATRIXLOADIDENTITYEXTPROC glMatrixLoadIdentityEXT;
665 PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC glMatrixLoadTranspose3x3fNV;
666 PFNGLMATRIXLOADTRANSPOSEDEXTPROC glMatrixLoadTransposedEXT;
667 PFNGLMATRIXLOADTRANSPOSEFEXTPROC glMatrixLoadTransposefEXT;
668 PFNGLMATRIXMULT3X2FNVPROC glMatrixMult3x2fNV;
669 PFNGLMATRIXMULT3X3FNVPROC glMatrixMult3x3fNV;
670 PFNGLMATRIXMULTDEXTPROC glMatrixMultdEXT;
671 PFNGLMATRIXMULTFEXTPROC glMatrixMultfEXT;
672 PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC glMatrixMultTranspose3x3fNV;
673 PFNGLMATRIXMULTTRANSPOSEDEXTPROC glMatrixMultTransposedEXT;
674 PFNGLMATRIXMULTTRANSPOSEFEXTPROC glMatrixMultTransposefEXT;
675 PFNGLMATRIXORTHOEXTPROC glMatrixOrthoEXT;
676 PFNGLMATRIXPOPEXTPROC glMatrixPopEXT;
677 PFNGLMATRIXPUSHEXTPROC glMatrixPushEXT;
678 PFNGLMATRIXROTATEDEXTPROC glMatrixRotatedEXT;
679 PFNGLMATRIXROTATEFEXTPROC glMatrixRotatefEXT;
680 PFNGLMATRIXSCALEDEXTPROC glMatrixScaledEXT;
681 PFNGLMATRIXSCALEFEXTPROC glMatrixScalefEXT;
682 PFNGLMATRIXTRANSLATEDEXTPROC glMatrixTranslatedEXT;
683 PFNGLMATRIXTRANSLATEFEXTPROC glMatrixTranslatefEXT;
684 PFNGLMAXSHADERCOMPILERTHREADSARBPROC glMaxShaderCompilerThreadsARB;
685 PFNGLMEMORYBARRIERBYREGIONPROC glMemoryBarrierByRegion;
686 PFNGLMEMORYBARRIERPROC glMemoryBarrier;
687 PFNGLMINSAMPLESHADINGARBPROC glMinSampleShadingARB;
688 PFNGLMINSAMPLESHADINGPROC glMinSampleShading;
689 PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC glMultiDrawArraysIndirectBindlessCountNV;
690 PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC glMultiDrawArraysIndirectBindlessNV;
691 PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC glMultiDrawArraysIndirectCountARB;
692 PFNGLMULTIDRAWARRAYSINDIRECTPROC glMultiDrawArraysIndirect;
693 PFNGLMULTIDRAWARRAYSPROC glMultiDrawArrays;
694 PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glMultiDrawElementsBaseVertex;
695 PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC glMultiDrawElementsIndirectBindlessCountNV;
696 PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC glMultiDrawElementsIndirectBindlessNV;
697 PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC glMultiDrawElementsIndirectCountARB;
698 PFNGLMULTIDRAWELEMENTSINDIRECTPROC glMultiDrawElementsIndirect;
699 PFNGLMULTIDRAWELEMENTSPROC glMultiDrawElements;
700 PFNGLMULTITEXBUFFEREXTPROC glMultiTexBufferEXT;
701 PFNGLMULTITEXCOORDPOINTEREXTPROC glMultiTexCoordPointerEXT;
702 PFNGLMULTITEXENVFEXTPROC glMultiTexEnvfEXT;
703 PFNGLMULTITEXENVFVEXTPROC glMultiTexEnvfvEXT;
704 PFNGLMULTITEXENVIEXTPROC glMultiTexEnviEXT;
705 PFNGLMULTITEXENVIVEXTPROC glMultiTexEnvivEXT;
706 PFNGLMULTITEXGENDEXTPROC glMultiTexGendEXT;
707 PFNGLMULTITEXGENDVEXTPROC glMultiTexGendvEXT;
708 PFNGLMULTITEXGENFEXTPROC glMultiTexGenfEXT;
709 PFNGLMULTITEXGENFVEXTPROC glMultiTexGenfvEXT;
710 PFNGLMULTITEXGENIEXTPROC glMultiTexGeniEXT;
711 PFNGLMULTITEXGENIVEXTPROC glMultiTexGenivEXT;
712 PFNGLMULTITEXIMAGE1DEXTPROC glMultiTexImage1DEXT;
713 PFNGLMULTITEXIMAGE2DEXTPROC glMultiTexImage2DEXT;
714 PFNGLMULTITEXIMAGE3DEXTPROC glMultiTexImage3DEXT;
715 PFNGLMULTITEXPARAMETERFEXTPROC glMultiTexParameterfEXT;
716 PFNGLMULTITEXPARAMETERFVEXTPROC glMultiTexParameterfvEXT;
717 PFNGLMULTITEXPARAMETERIEXTPROC glMultiTexParameteriEXT;
718 PFNGLMULTITEXPARAMETERIIVEXTPROC glMultiTexParameterIivEXT;
719 PFNGLMULTITEXPARAMETERIUIVEXTPROC glMultiTexParameterIuivEXT;
720 PFNGLMULTITEXPARAMETERIVEXTPROC glMultiTexParameterivEXT;
721 PFNGLMULTITEXRENDERBUFFEREXTPROC glMultiTexRenderbufferEXT;
722 PFNGLMULTITEXSUBIMAGE1DEXTPROC glMultiTexSubImage1DEXT;
723 PFNGLMULTITEXSUBIMAGE2DEXTPROC glMultiTexSubImage2DEXT;
724 PFNGLMULTITEXSUBIMAGE3DEXTPROC glMultiTexSubImage3DEXT;
725 PFNGLNAMEDBUFFERDATAEXTPROC glNamedBufferDataEXT;
726 PFNGLNAMEDBUFFERDATAPROC glNamedBufferData;
727 PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC glNamedBufferPageCommitmentARB;
728 PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC glNamedBufferPageCommitmentEXT;
729 PFNGLNAMEDBUFFERSTORAGEEXTPROC glNamedBufferStorageEXT;
730 PFNGLNAMEDBUFFERSTORAGEPROC glNamedBufferStorage;
731 PFNGLNAMEDBUFFERSUBDATAEXTPROC glNamedBufferSubDataEXT;
732 PFNGLNAMEDBUFFERSUBDATAPROC glNamedBufferSubData;
733 PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC glNamedCopyBufferSubDataEXT;
734 PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glNamedFramebufferDrawBuffer;
735 PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glNamedFramebufferDrawBuffers;
736 PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC glNamedFramebufferParameteriEXT;
737 PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glNamedFramebufferParameteri;
738 PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glNamedFramebufferReadBuffer;
739 PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC glNamedFramebufferRenderbufferEXT;
740 PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glNamedFramebufferRenderbuffer;
741 PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glNamedFramebufferSampleLocationsfvARB;
742 PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glNamedFramebufferSampleLocationsfvNV;
743 PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC glNamedFramebufferTexture1DEXT;
744 PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC glNamedFramebufferTexture2DEXT;
745 PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC glNamedFramebufferTexture3DEXT;
746 PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC glNamedFramebufferTextureEXT;
747 PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC glNamedFramebufferTextureFaceEXT;
748 PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC glNamedFramebufferTextureLayerEXT;
749 PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glNamedFramebufferTextureLayer;
750 PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glNamedFramebufferTexture;
751 PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC glNamedProgramLocalParameter4dEXT;
752 PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC glNamedProgramLocalParameter4dvEXT;
753 PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC glNamedProgramLocalParameter4fEXT;
754 PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC glNamedProgramLocalParameter4fvEXT;
755 PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC glNamedProgramLocalParameterI4iEXT;
756 PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC glNamedProgramLocalParameterI4ivEXT;
757 PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC glNamedProgramLocalParameterI4uiEXT;
758 PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC glNamedProgramLocalParameterI4uivEXT;
759 PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC glNamedProgramLocalParameters4fvEXT;
760 PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC glNamedProgramLocalParametersI4ivEXT;
761 PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC glNamedProgramLocalParametersI4uivEXT;
762 PFNGLNAMEDPROGRAMSTRINGEXTPROC glNamedProgramStringEXT;
763 PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC glNamedRenderbufferStorageEXT;
764 PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC glNamedRenderbufferStorageMultisampleCoverageEXT;
765 PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glNamedRenderbufferStorageMultisampleEXT;
766 PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glNamedRenderbufferStorageMultisample;
767 PFNGLNAMEDRENDERBUFFERSTORAGEPROC glNamedRenderbufferStorage;
768 PFNGLNAMEDSTRINGARBPROC glNamedStringARB;
769 PFNGLNORMALFORMATNVPROC glNormalFormatNV;
770 PFNGLOBJECTLABELPROC glObjectLabel;
771 PFNGLOBJECTPTRLABELPROC glObjectPtrLabel;
772 PFNGLPATCHPARAMETERFVPROC glPatchParameterfv;
773 PFNGLPATCHPARAMETERIPROC glPatchParameteri;
774 PFNGLPATHCOMMANDSNVPROC glPathCommandsNV;
775 PFNGLPATHCOORDSNVPROC glPathCoordsNV;
776 PFNGLPATHCOVERDEPTHFUNCNVPROC glPathCoverDepthFuncNV;
777 PFNGLPATHDASHARRAYNVPROC glPathDashArrayNV;
778 PFNGLPATHGLYPHINDEXARRAYNVPROC glPathGlyphIndexArrayNV;
779 PFNGLPATHGLYPHINDEXRANGENVPROC glPathGlyphIndexRangeNV;
780 PFNGLPATHGLYPHRANGENVPROC glPathGlyphRangeNV;
781 PFNGLPATHGLYPHSNVPROC glPathGlyphsNV;
782 PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC glPathMemoryGlyphIndexArrayNV;
783 PFNGLPATHPARAMETERFNVPROC glPathParameterfNV;
784 PFNGLPATHPARAMETERFVNVPROC glPathParameterfvNV;
785 PFNGLPATHPARAMETERINVPROC glPathParameteriNV;
786 PFNGLPATHPARAMETERIVNVPROC glPathParameterivNV;
787 PFNGLPATHSTENCILDEPTHOFFSETNVPROC glPathStencilDepthOffsetNV;
788 PFNGLPATHSTENCILFUNCNVPROC glPathStencilFuncNV;
789 PFNGLPATHSTRINGNVPROC glPathStringNV;
790 PFNGLPATHSUBCOMMANDSNVPROC glPathSubCommandsNV;
791 PFNGLPATHSUBCOORDSNVPROC glPathSubCoordsNV;
792 PFNGLPAUSETRANSFORMFEEDBACKPROC glPauseTransformFeedback;
793 PFNGLPIXELSTOREFPROC glPixelStoref;
794 PFNGLPIXELSTOREIPROC glPixelStorei;
795 PFNGLPOINTALONGPATHNVPROC glPointAlongPathNV;
796 PFNGLPOINTPARAMETERFPROC glPointParameterf;
797 PFNGLPOINTPARAMETERFVPROC glPointParameterfv;
798 PFNGLPOINTPARAMETERIPROC glPointParameteri;
799 PFNGLPOINTPARAMETERIVPROC glPointParameteriv;
800 PFNGLPOINTSIZEPROC glPointSize;
801 PFNGLPOLYGONMODEPROC glPolygonMode;
802 PFNGLPOLYGONOFFSETCLAMPEXTPROC glPolygonOffsetClampEXT;
803 PFNGLPOLYGONOFFSETPROC glPolygonOffset;
804 PFNGLPOPDEBUGGROUPPROC glPopDebugGroup;
805 PFNGLPOPGROUPMARKEREXTPROC glPopGroupMarkerEXT;
806 PFNGLPRIMITIVEBOUNDINGBOXARBPROC glPrimitiveBoundingBoxARB;
807 PFNGLPRIMITIVERESTARTINDEXPROC glPrimitiveRestartIndex;
808 PFNGLPROGRAMBINARYPROC glProgramBinary;
809 PFNGLPROGRAMPARAMETERIARBPROC glProgramParameteriARB;
810 PFNGLPROGRAMPARAMETERIPROC glProgramParameteri;
811 PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC glProgramPathFragmentInputGenNV;
812 PFNGLPROGRAMUNIFORM1DEXTPROC glProgramUniform1dEXT;
813 PFNGLPROGRAMUNIFORM1DPROC glProgramUniform1d;
814 PFNGLPROGRAMUNIFORM1DVEXTPROC glProgramUniform1dvEXT;
815 PFNGLPROGRAMUNIFORM1DVPROC glProgramUniform1dv;
816 PFNGLPROGRAMUNIFORM1FEXTPROC glProgramUniform1fEXT;
817 PFNGLPROGRAMUNIFORM1FPROC glProgramUniform1f;
818 PFNGLPROGRAMUNIFORM1FVEXTPROC glProgramUniform1fvEXT;
819 PFNGLPROGRAMUNIFORM1FVPROC glProgramUniform1fv;
820 PFNGLPROGRAMUNIFORM1I64ARBPROC glProgramUniform1i64ARB;
821 PFNGLPROGRAMUNIFORM1I64NVPROC glProgramUniform1i64NV;
822 PFNGLPROGRAMUNIFORM1I64VARBPROC glProgramUniform1i64vARB;
823 PFNGLPROGRAMUNIFORM1I64VNVPROC glProgramUniform1i64vNV;
824 PFNGLPROGRAMUNIFORM1IEXTPROC glProgramUniform1iEXT;
825 PFNGLPROGRAMUNIFORM1IPROC glProgramUniform1i;
826 PFNGLPROGRAMUNIFORM1IVEXTPROC glProgramUniform1ivEXT;
827 PFNGLPROGRAMUNIFORM1IVPROC glProgramUniform1iv;
828 PFNGLPROGRAMUNIFORM1UI64ARBPROC glProgramUniform1ui64ARB;
829 PFNGLPROGRAMUNIFORM1UI64NVPROC glProgramUniform1ui64NV;
830 PFNGLPROGRAMUNIFORM1UI64VARBPROC glProgramUniform1ui64vARB;
831 PFNGLPROGRAMUNIFORM1UI64VNVPROC glProgramUniform1ui64vNV;
832 PFNGLPROGRAMUNIFORM1UIEXTPROC glProgramUniform1uiEXT;
833 PFNGLPROGRAMUNIFORM1UIPROC glProgramUniform1ui;
834 PFNGLPROGRAMUNIFORM1UIVEXTPROC glProgramUniform1uivEXT;
835 PFNGLPROGRAMUNIFORM1UIVPROC glProgramUniform1uiv;
836 PFNGLPROGRAMUNIFORM2DEXTPROC glProgramUniform2dEXT;
837 PFNGLPROGRAMUNIFORM2DPROC glProgramUniform2d;
838 PFNGLPROGRAMUNIFORM2DVEXTPROC glProgramUniform2dvEXT;
839 PFNGLPROGRAMUNIFORM2DVPROC glProgramUniform2dv;
840 PFNGLPROGRAMUNIFORM2FEXTPROC glProgramUniform2fEXT;
841 PFNGLPROGRAMUNIFORM2FPROC glProgramUniform2f;
842 PFNGLPROGRAMUNIFORM2FVEXTPROC glProgramUniform2fvEXT;
843 PFNGLPROGRAMUNIFORM2FVPROC glProgramUniform2fv;
844 PFNGLPROGRAMUNIFORM2I64ARBPROC glProgramUniform2i64ARB;
845 PFNGLPROGRAMUNIFORM2I64NVPROC glProgramUniform2i64NV;
846 PFNGLPROGRAMUNIFORM2I64VARBPROC glProgramUniform2i64vARB;
847 PFNGLPROGRAMUNIFORM2I64VNVPROC glProgramUniform2i64vNV;
848 PFNGLPROGRAMUNIFORM2IEXTPROC glProgramUniform2iEXT;
849 PFNGLPROGRAMUNIFORM2IPROC glProgramUniform2i;
850 PFNGLPROGRAMUNIFORM2IVEXTPROC glProgramUniform2ivEXT;
851 PFNGLPROGRAMUNIFORM2IVPROC glProgramUniform2iv;
852 PFNGLPROGRAMUNIFORM2UI64ARBPROC glProgramUniform2ui64ARB;
853 PFNGLPROGRAMUNIFORM2UI64NVPROC glProgramUniform2ui64NV;
854 PFNGLPROGRAMUNIFORM2UI64VARBPROC glProgramUniform2ui64vARB;
855 PFNGLPROGRAMUNIFORM2UI64VNVPROC glProgramUniform2ui64vNV;
856 PFNGLPROGRAMUNIFORM2UIEXTPROC glProgramUniform2uiEXT;
857 PFNGLPROGRAMUNIFORM2UIPROC glProgramUniform2ui;
858 PFNGLPROGRAMUNIFORM2UIVEXTPROC glProgramUniform2uivEXT;
859 PFNGLPROGRAMUNIFORM2UIVPROC glProgramUniform2uiv;
860 PFNGLPROGRAMUNIFORM3DEXTPROC glProgramUniform3dEXT;
861 PFNGLPROGRAMUNIFORM3DPROC glProgramUniform3d;
862 PFNGLPROGRAMUNIFORM3DVEXTPROC glProgramUniform3dvEXT;
863 PFNGLPROGRAMUNIFORM3DVPROC glProgramUniform3dv;
864 PFNGLPROGRAMUNIFORM3FEXTPROC glProgramUniform3fEXT;
865 PFNGLPROGRAMUNIFORM3FPROC glProgramUniform3f;
866 PFNGLPROGRAMUNIFORM3FVEXTPROC glProgramUniform3fvEXT;
867 PFNGLPROGRAMUNIFORM3FVPROC glProgramUniform3fv;
868 PFNGLPROGRAMUNIFORM3I64ARBPROC glProgramUniform3i64ARB;
869 PFNGLPROGRAMUNIFORM3I64NVPROC glProgramUniform3i64NV;
870 PFNGLPROGRAMUNIFORM3I64VARBPROC glProgramUniform3i64vARB;
871 PFNGLPROGRAMUNIFORM3I64VNVPROC glProgramUniform3i64vNV;
872 PFNGLPROGRAMUNIFORM3IEXTPROC glProgramUniform3iEXT;
873 PFNGLPROGRAMUNIFORM3IPROC glProgramUniform3i;
874 PFNGLPROGRAMUNIFORM3IVEXTPROC glProgramUniform3ivEXT;
875 PFNGLPROGRAMUNIFORM3IVPROC glProgramUniform3iv;
876 PFNGLPROGRAMUNIFORM3UI64ARBPROC glProgramUniform3ui64ARB;
877 PFNGLPROGRAMUNIFORM3UI64NVPROC glProgramUniform3ui64NV;
878 PFNGLPROGRAMUNIFORM3UI64VARBPROC glProgramUniform3ui64vARB;
879 PFNGLPROGRAMUNIFORM3UI64VNVPROC glProgramUniform3ui64vNV;
880 PFNGLPROGRAMUNIFORM3UIEXTPROC glProgramUniform3uiEXT;
881 PFNGLPROGRAMUNIFORM3UIPROC glProgramUniform3ui;
882 PFNGLPROGRAMUNIFORM3UIVEXTPROC glProgramUniform3uivEXT;
883 PFNGLPROGRAMUNIFORM3UIVPROC glProgramUniform3uiv;
884 PFNGLPROGRAMUNIFORM4DEXTPROC glProgramUniform4dEXT;
885 PFNGLPROGRAMUNIFORM4DPROC glProgramUniform4d;
886 PFNGLPROGRAMUNIFORM4DVEXTPROC glProgramUniform4dvEXT;
887 PFNGLPROGRAMUNIFORM4DVPROC glProgramUniform4dv;
888 PFNGLPROGRAMUNIFORM4FEXTPROC glProgramUniform4fEXT;
889 PFNGLPROGRAMUNIFORM4FPROC glProgramUniform4f;
890 PFNGLPROGRAMUNIFORM4FVEXTPROC glProgramUniform4fvEXT;
891 PFNGLPROGRAMUNIFORM4FVPROC glProgramUniform4fv;
892 PFNGLPROGRAMUNIFORM4I64ARBPROC glProgramUniform4i64ARB;
893 PFNGLPROGRAMUNIFORM4I64NVPROC glProgramUniform4i64NV;
894 PFNGLPROGRAMUNIFORM4I64VARBPROC glProgramUniform4i64vARB;
895 PFNGLPROGRAMUNIFORM4I64VNVPROC glProgramUniform4i64vNV;
896 PFNGLPROGRAMUNIFORM4IEXTPROC glProgramUniform4iEXT;
897 PFNGLPROGRAMUNIFORM4IPROC glProgramUniform4i;
898 PFNGLPROGRAMUNIFORM4IVEXTPROC glProgramUniform4ivEXT;
899 PFNGLPROGRAMUNIFORM4IVPROC glProgramUniform4iv;
900 PFNGLPROGRAMUNIFORM4UI64ARBPROC glProgramUniform4ui64ARB;
901 PFNGLPROGRAMUNIFORM4UI64NVPROC glProgramUniform4ui64NV;
902 PFNGLPROGRAMUNIFORM4UI64VARBPROC glProgramUniform4ui64vARB;
903 PFNGLPROGRAMUNIFORM4UI64VNVPROC glProgramUniform4ui64vNV;
904 PFNGLPROGRAMUNIFORM4UIEXTPROC glProgramUniform4uiEXT;
905 PFNGLPROGRAMUNIFORM4UIPROC glProgramUniform4ui;
906 PFNGLPROGRAMUNIFORM4UIVEXTPROC glProgramUniform4uivEXT;
907 PFNGLPROGRAMUNIFORM4UIVPROC glProgramUniform4uiv;
908 PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC glProgramUniformHandleui64ARB;
909 PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC glProgramUniformHandleui64NV;
910 PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC glProgramUniformHandleui64vARB;
911 PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC glProgramUniformHandleui64vNV;
912 PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC glProgramUniformMatrix2dvEXT;
913 PFNGLPROGRAMUNIFORMMATRIX2DVPROC glProgramUniformMatrix2dv;
914 PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC glProgramUniformMatrix2fvEXT;
915 PFNGLPROGRAMUNIFORMMATRIX2FVPROC glProgramUniformMatrix2fv;
916 PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC glProgramUniformMatrix2x3dvEXT;
917 PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glProgramUniformMatrix2x3dv;
918 PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC glProgramUniformMatrix2x3fvEXT;
919 PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glProgramUniformMatrix2x3fv;
920 PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC glProgramUniformMatrix2x4dvEXT;
921 PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glProgramUniformMatrix2x4dv;
922 PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC glProgramUniformMatrix2x4fvEXT;
923 PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glProgramUniformMatrix2x4fv;
924 PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC glProgramUniformMatrix3dvEXT;
925 PFNGLPROGRAMUNIFORMMATRIX3DVPROC glProgramUniformMatrix3dv;
926 PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC glProgramUniformMatrix3fvEXT;
927 PFNGLPROGRAMUNIFORMMATRIX3FVPROC glProgramUniformMatrix3fv;
928 PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC glProgramUniformMatrix3x2dvEXT;
929 PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glProgramUniformMatrix3x2dv;
930 PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC glProgramUniformMatrix3x2fvEXT;
931 PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glProgramUniformMatrix3x2fv;
932 PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC glProgramUniformMatrix3x4dvEXT;
933 PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glProgramUniformMatrix3x4dv;
934 PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC glProgramUniformMatrix3x4fvEXT;
935 PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glProgramUniformMatrix3x4fv;
936 PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC glProgramUniformMatrix4dvEXT;
937 PFNGLPROGRAMUNIFORMMATRIX4DVPROC glProgramUniformMatrix4dv;
938 PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC glProgramUniformMatrix4fvEXT;
939 PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv;
940 PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC glProgramUniformMatrix4x2dvEXT;
941 PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glProgramUniformMatrix4x2dv;
942 PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC glProgramUniformMatrix4x2fvEXT;
943 PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glProgramUniformMatrix4x2fv;
944 PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC glProgramUniformMatrix4x3dvEXT;
945 PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glProgramUniformMatrix4x3dv;
946 PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC glProgramUniformMatrix4x3fvEXT;
947 PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glProgramUniformMatrix4x3fv;
948 PFNGLPROGRAMUNIFORMUI64NVPROC glProgramUniformui64NV;
949 PFNGLPROGRAMUNIFORMUI64VNVPROC glProgramUniformui64vNV;
950 PFNGLPROVOKINGVERTEXPROC glProvokingVertex;
951 PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC glPushClientAttribDefaultEXT;
952 PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup;
953 PFNGLPUSHGROUPMARKEREXTPROC glPushGroupMarkerEXT;
954 PFNGLQUERYCOUNTERPROC glQueryCounter;
955 PFNGLRASTERSAMPLESEXTPROC glRasterSamplesEXT;
956 PFNGLREADBUFFERPROC glReadBuffer;
957 PFNGLREADNPIXELSARBPROC glReadnPixelsARB;
958 PFNGLREADNPIXELSPROC glReadnPixels;
959 PFNGLREADPIXELSPROC glReadPixels;
960 PFNGLRELEASESHADERCOMPILERPROC glReleaseShaderCompiler;
961 PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC glRenderbufferStorageMultisampleCoverageNV;
962 PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample;
963 PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
964 PFNGLRESOLVEDEPTHVALUESNVPROC glResolveDepthValuesNV;
965 PFNGLRESUMETRANSFORMFEEDBACKPROC glResumeTransformFeedback;
966 PFNGLSAMPLECOVERAGEPROC glSampleCoverage;
967 PFNGLSAMPLEMASKIPROC glSampleMaski;
968 PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf;
969 PFNGLSAMPLERPARAMETERFVPROC glSamplerParameterfv;
970 PFNGLSAMPLERPARAMETERIIVPROC glSamplerParameterIiv;
971 PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri;
972 PFNGLSAMPLERPARAMETERIUIVPROC glSamplerParameterIuiv;
973 PFNGLSAMPLERPARAMETERIVPROC glSamplerParameteriv;
974 PFNGLSCISSORARRAYVPROC glScissorArrayv;
975 PFNGLSCISSORINDEXEDPROC glScissorIndexed;
976 PFNGLSCISSORINDEXEDVPROC glScissorIndexedv;
977 PFNGLSCISSORPROC glScissor;
978 PFNGLSECONDARYCOLORFORMATNVPROC glSecondaryColorFormatNV;
979 PFNGLSELECTPERFMONITORCOUNTERSAMDPROC glSelectPerfMonitorCountersAMD;
980 PFNGLSHADERBINARYPROC glShaderBinary;
981 PFNGLSHADERSOURCEPROC glShaderSource;
982 PFNGLSHADERSTORAGEBLOCKBINDINGPROC glShaderStorageBlockBinding;
983 PFNGLSIGNALVKFENCENVPROC glSignalVkFenceNV;
984 PFNGLSIGNALVKSEMAPHORENVPROC glSignalVkSemaphoreNV;
985 PFNGLSPECIALIZESHADERARBPROC glSpecializeShaderARB;
986 PFNGLSTATECAPTURENVPROC glStateCaptureNV;
987 PFNGLSTENCILFILLPATHINSTANCEDNVPROC glStencilFillPathInstancedNV;
988 PFNGLSTENCILFILLPATHNVPROC glStencilFillPathNV;
989 PFNGLSTENCILFUNCPROC glStencilFunc;
990 PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate;
991 PFNGLSTENCILMASKPROC glStencilMask;
992 PFNGLSTENCILMASKSEPARATEPROC glStencilMaskSeparate;
993 PFNGLSTENCILOPPROC glStencilOp;
994 PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate;
995 PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC glStencilStrokePathInstancedNV;
996 PFNGLSTENCILSTROKEPATHNVPROC glStencilStrokePathNV;
997 PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC glStencilThenCoverFillPathInstancedNV;
998 PFNGLSTENCILTHENCOVERFILLPATHNVPROC glStencilThenCoverFillPathNV;
999 PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC glStencilThenCoverStrokePathInstancedNV;
1000 PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC glStencilThenCoverStrokePathNV;
1001 PFNGLSUBPIXELPRECISIONBIASNVPROC glSubpixelPrecisionBiasNV;
1002 PFNGLTEXBUFFERARBPROC glTexBufferARB;
1003 PFNGLTEXBUFFERPROC glTexBuffer;
1004 PFNGLTEXBUFFERRANGEPROC glTexBufferRange;
1005 PFNGLTEXCOORDFORMATNVPROC glTexCoordFormatNV;
1006 PFNGLTEXIMAGE1DPROC glTexImage1D;
1007 PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample;
1008 PFNGLTEXIMAGE2DPROC glTexImage2D;
1009 PFNGLTEXIMAGE3DMULTISAMPLEPROC glTexImage3DMultisample;
1010 PFNGLTEXIMAGE3DPROC glTexImage3D;
1011 PFNGLTEXPAGECOMMITMENTARBPROC glTexPageCommitmentARB;
1012 PFNGLTEXPARAMETERFPROC glTexParameterf;
1013 PFNGLTEXPARAMETERFVPROC glTexParameterfv;
1014 PFNGLTEXPARAMETERIIVPROC glTexParameterIiv;
1015 PFNGLTEXPARAMETERIPROC glTexParameteri;
1016 PFNGLTEXPARAMETERIUIVPROC glTexParameterIuiv;
1017 PFNGLTEXPARAMETERIVPROC glTexParameteriv;
1018 PFNGLTEXSTORAGE1DPROC glTexStorage1D;
1019 PFNGLTEXSTORAGE2DMULTISAMPLEPROC glTexStorage2DMultisample;
1020 PFNGLTEXSTORAGE2DPROC glTexStorage2D;
1021 PFNGLTEXSTORAGE3DMULTISAMPLEPROC glTexStorage3DMultisample;
1022 PFNGLTEXSTORAGE3DPROC glTexStorage3D;
1023 PFNGLTEXSUBIMAGE1DPROC glTexSubImage1D;
1024 PFNGLTEXSUBIMAGE2DPROC glTexSubImage2D;
1025 PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D;
1026 PFNGLTEXTUREBARRIERNVPROC glTextureBarrierNV;
1027 PFNGLTEXTUREBARRIERPROC glTextureBarrier;
1028 PFNGLTEXTUREBUFFEREXTPROC glTextureBufferEXT;
1029 PFNGLTEXTUREBUFFERPROC glTextureBuffer;
1030 PFNGLTEXTUREBUFFERRANGEEXTPROC glTextureBufferRangeEXT;
1031 PFNGLTEXTUREBUFFERRANGEPROC glTextureBufferRange;
1032 PFNGLTEXTUREIMAGE1DEXTPROC glTextureImage1DEXT;
1033 PFNGLTEXTUREIMAGE2DEXTPROC glTextureImage2DEXT;
1034 PFNGLTEXTUREIMAGE3DEXTPROC glTextureImage3DEXT;
1035 PFNGLTEXTUREPAGECOMMITMENTEXTPROC glTexturePageCommitmentEXT;
1036 PFNGLTEXTUREPARAMETERFEXTPROC glTextureParameterfEXT;
1037 PFNGLTEXTUREPARAMETERFPROC glTextureParameterf;
1038 PFNGLTEXTUREPARAMETERFVEXTPROC glTextureParameterfvEXT;
1039 PFNGLTEXTUREPARAMETERFVPROC glTextureParameterfv;
1040 PFNGLTEXTUREPARAMETERIEXTPROC glTextureParameteriEXT;
1041 PFNGLTEXTUREPARAMETERIIVEXTPROC glTextureParameterIivEXT;
1042 PFNGLTEXTUREPARAMETERIIVPROC glTextureParameterIiv;
1043 PFNGLTEXTUREPARAMETERIPROC glTextureParameteri;
1044 PFNGLTEXTUREPARAMETERIUIVEXTPROC glTextureParameterIuivEXT;
1045 PFNGLTEXTUREPARAMETERIUIVPROC glTextureParameterIuiv;
1046 PFNGLTEXTUREPARAMETERIVEXTPROC glTextureParameterivEXT;
1047 PFNGLTEXTUREPARAMETERIVPROC glTextureParameteriv;
1048 PFNGLTEXTURERENDERBUFFEREXTPROC glTextureRenderbufferEXT;
1049 PFNGLTEXTURESTORAGE1DEXTPROC glTextureStorage1DEXT;
1050 PFNGLTEXTURESTORAGE1DPROC glTextureStorage1D;
1051 PFNGLTEXTURESTORAGE2DEXTPROC glTextureStorage2DEXT;
1052 PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC glTextureStorage2DMultisampleEXT;
1053 PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glTextureStorage2DMultisample;
1054 PFNGLTEXTURESTORAGE2DPROC glTextureStorage2D;
1055 PFNGLTEXTURESTORAGE3DEXTPROC glTextureStorage3DEXT;
1056 PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC glTextureStorage3DMultisampleEXT;
1057 PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glTextureStorage3DMultisample;
1058 PFNGLTEXTURESTORAGE3DPROC glTextureStorage3D;
1059 PFNGLTEXTURESUBIMAGE1DEXTPROC glTextureSubImage1DEXT;
1060 PFNGLTEXTURESUBIMAGE1DPROC glTextureSubImage1D;
1061 PFNGLTEXTURESUBIMAGE2DEXTPROC glTextureSubImage2DEXT;
1062 PFNGLTEXTURESUBIMAGE2DPROC glTextureSubImage2D;
1063 PFNGLTEXTURESUBIMAGE3DEXTPROC glTextureSubImage3DEXT;
1064 PFNGLTEXTURESUBIMAGE3DPROC glTextureSubImage3D;
1065 PFNGLTEXTUREVIEWPROC glTextureView;
1066 PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glTransformFeedbackBufferBase;
1067 PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glTransformFeedbackBufferRange;
1068 PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings;
1069 PFNGLTRANSFORMPATHNVPROC glTransformPathNV;
1070 PFNGLUNIFORM1DPROC glUniform1d;
1071 PFNGLUNIFORM1DVPROC glUniform1dv;
1072 PFNGLUNIFORM1FPROC glUniform1f;
1073 PFNGLUNIFORM1FVPROC glUniform1fv;
1074 PFNGLUNIFORM1I64ARBPROC glUniform1i64ARB;
1075 PFNGLUNIFORM1I64NVPROC glUniform1i64NV;
1076 PFNGLUNIFORM1I64VARBPROC glUniform1i64vARB;
1077 PFNGLUNIFORM1I64VNVPROC glUniform1i64vNV;
1078 PFNGLUNIFORM1IPROC glUniform1i;
1079 PFNGLUNIFORM1IVPROC glUniform1iv;
1080 PFNGLUNIFORM1UI64ARBPROC glUniform1ui64ARB;
1081 PFNGLUNIFORM1UI64NVPROC glUniform1ui64NV;
1082 PFNGLUNIFORM1UI64VARBPROC glUniform1ui64vARB;
1083 PFNGLUNIFORM1UI64VNVPROC glUniform1ui64vNV;
1084 PFNGLUNIFORM1UIPROC glUniform1ui;
1085 PFNGLUNIFORM1UIVPROC glUniform1uiv;
1086 PFNGLUNIFORM2DPROC glUniform2d;
1087 PFNGLUNIFORM2DVPROC glUniform2dv;
1088 PFNGLUNIFORM2FPROC glUniform2f;
1089 PFNGLUNIFORM2FVPROC glUniform2fv;
1090 PFNGLUNIFORM2I64ARBPROC glUniform2i64ARB;
1091 PFNGLUNIFORM2I64NVPROC glUniform2i64NV;
1092 PFNGLUNIFORM2I64VARBPROC glUniform2i64vARB;
1093 PFNGLUNIFORM2I64VNVPROC glUniform2i64vNV;
1094 PFNGLUNIFORM2IPROC glUniform2i;
1095 PFNGLUNIFORM2IVPROC glUniform2iv;
1096 PFNGLUNIFORM2UI64ARBPROC glUniform2ui64ARB;
1097 PFNGLUNIFORM2UI64NVPROC glUniform2ui64NV;
1098 PFNGLUNIFORM2UI64VARBPROC glUniform2ui64vARB;
1099 PFNGLUNIFORM2UI64VNVPROC glUniform2ui64vNV;
1100 PFNGLUNIFORM2UIPROC glUniform2ui;
1101 PFNGLUNIFORM2UIVPROC glUniform2uiv;
1102 PFNGLUNIFORM3DPROC glUniform3d;
1103 PFNGLUNIFORM3DVPROC glUniform3dv;
1104 PFNGLUNIFORM3FPROC glUniform3f;
1105 PFNGLUNIFORM3FVPROC glUniform3fv;
1106 PFNGLUNIFORM3I64ARBPROC glUniform3i64ARB;
1107 PFNGLUNIFORM3I64NVPROC glUniform3i64NV;
1108 PFNGLUNIFORM3I64VARBPROC glUniform3i64vARB;
1109 PFNGLUNIFORM3I64VNVPROC glUniform3i64vNV;
1110 PFNGLUNIFORM3IPROC glUniform3i;
1111 PFNGLUNIFORM3IVPROC glUniform3iv;
1112 PFNGLUNIFORM3UI64ARBPROC glUniform3ui64ARB;
1113 PFNGLUNIFORM3UI64NVPROC glUniform3ui64NV;
1114 PFNGLUNIFORM3UI64VARBPROC glUniform3ui64vARB;
1115 PFNGLUNIFORM3UI64VNVPROC glUniform3ui64vNV;
1116 PFNGLUNIFORM3UIPROC glUniform3ui;
1117 PFNGLUNIFORM3UIVPROC glUniform3uiv;
1118 PFNGLUNIFORM4DPROC glUniform4d;
1119 PFNGLUNIFORM4DVPROC glUniform4dv;
1120 PFNGLUNIFORM4FPROC glUniform4f;
1121 PFNGLUNIFORM4FVPROC glUniform4fv;
1122 PFNGLUNIFORM4I64ARBPROC glUniform4i64ARB;
1123 PFNGLUNIFORM4I64NVPROC glUniform4i64NV;
1124 PFNGLUNIFORM4I64VARBPROC glUniform4i64vARB;
1125 PFNGLUNIFORM4I64VNVPROC glUniform4i64vNV;
1126 PFNGLUNIFORM4IPROC glUniform4i;
1127 PFNGLUNIFORM4IVPROC glUniform4iv;
1128 PFNGLUNIFORM4UI64ARBPROC glUniform4ui64ARB;
1129 PFNGLUNIFORM4UI64NVPROC glUniform4ui64NV;
1130 PFNGLUNIFORM4UI64VARBPROC glUniform4ui64vARB;
1131 PFNGLUNIFORM4UI64VNVPROC glUniform4ui64vNV;
1132 PFNGLUNIFORM4UIPROC glUniform4ui;
1133 PFNGLUNIFORM4UIVPROC glUniform4uiv;
1134 PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
1135 PFNGLUNIFORMHANDLEUI64ARBPROC glUniformHandleui64ARB;
1136 PFNGLUNIFORMHANDLEUI64NVPROC glUniformHandleui64NV;
1137 PFNGLUNIFORMHANDLEUI64VARBPROC glUniformHandleui64vARB;
1138 PFNGLUNIFORMHANDLEUI64VNVPROC glUniformHandleui64vNV;
1139 PFNGLUNIFORMMATRIX2DVPROC glUniformMatrix2dv;
1140 PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv;
1141 PFNGLUNIFORMMATRIX2X3DVPROC glUniformMatrix2x3dv;
1142 PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv;
1143 PFNGLUNIFORMMATRIX2X4DVPROC glUniformMatrix2x4dv;
1144 PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv;
1145 PFNGLUNIFORMMATRIX3DVPROC glUniformMatrix3dv;
1146 PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv;
1147 PFNGLUNIFORMMATRIX3X2DVPROC glUniformMatrix3x2dv;
1148 PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv;
1149 PFNGLUNIFORMMATRIX3X4DVPROC glUniformMatrix3x4dv;
1150 PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv;
1151 PFNGLUNIFORMMATRIX4DVPROC glUniformMatrix4dv;
1152 PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
1153 PFNGLUNIFORMMATRIX4X2DVPROC glUniformMatrix4x2dv;
1154 PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv;
1155 PFNGLUNIFORMMATRIX4X3DVPROC glUniformMatrix4x3dv;
1156 PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv;
1157 PFNGLUNIFORMSUBROUTINESUIVPROC glUniformSubroutinesuiv;
1158 PFNGLUNIFORMUI64NVPROC glUniformui64NV;
1159 PFNGLUNIFORMUI64VNVPROC glUniformui64vNV;
1160 PFNGLUNMAPBUFFERPROC glUnmapBuffer;
1161 PFNGLUNMAPNAMEDBUFFEREXTPROC glUnmapNamedBufferEXT;
1162 PFNGLUNMAPNAMEDBUFFERPROC glUnmapNamedBuffer;
1163 PFNGLUSEPROGRAMPROC glUseProgram;
1164 PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages;
1165 PFNGLUSESHADERPROGRAMEXTPROC glUseShaderProgramEXT;
1166 PFNGLVALIDATEPROGRAMPIPELINEPROC glValidateProgramPipeline;
1167 PFNGLVALIDATEPROGRAMPROC glValidateProgram;
1168 PFNGLVERTEXARRAYATTRIBBINDINGPROC glVertexArrayAttribBinding;
1169 PFNGLVERTEXARRAYATTRIBFORMATPROC glVertexArrayAttribFormat;
1170 PFNGLVERTEXARRAYATTRIBIFORMATPROC glVertexArrayAttribIFormat;
1171 PFNGLVERTEXARRAYATTRIBLFORMATPROC glVertexArrayAttribLFormat;
1172 PFNGLVERTEXARRAYBINDINGDIVISORPROC glVertexArrayBindingDivisor;
1173 PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC glVertexArrayBindVertexBufferEXT;
1174 PFNGLVERTEXARRAYCOLOROFFSETEXTPROC glVertexArrayColorOffsetEXT;
1175 PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC glVertexArrayEdgeFlagOffsetEXT;
1176 PFNGLVERTEXARRAYELEMENTBUFFERPROC glVertexArrayElementBuffer;
1177 PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC glVertexArrayFogCoordOffsetEXT;
1178 PFNGLVERTEXARRAYINDEXOFFSETEXTPROC glVertexArrayIndexOffsetEXT;
1179 PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC glVertexArrayMultiTexCoordOffsetEXT;
1180 PFNGLVERTEXARRAYNORMALOFFSETEXTPROC glVertexArrayNormalOffsetEXT;
1181 PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC glVertexArraySecondaryColorOffsetEXT;
1182 PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC glVertexArrayTexCoordOffsetEXT;
1183 PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC glVertexArrayVertexAttribBindingEXT;
1184 PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC glVertexArrayVertexAttribDivisorEXT;
1185 PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC glVertexArrayVertexAttribFormatEXT;
1186 PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC glVertexArrayVertexAttribIFormatEXT;
1187 PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC glVertexArrayVertexAttribIOffsetEXT;
1188 PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC glVertexArrayVertexAttribLFormatEXT;
1189 PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC glVertexArrayVertexAttribLOffsetEXT;
1190 PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC glVertexArrayVertexAttribOffsetEXT;
1191 PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC glVertexArrayVertexBindingDivisorEXT;
1192 PFNGLVERTEXARRAYVERTEXBUFFERPROC glVertexArrayVertexBuffer;
1193 PFNGLVERTEXARRAYVERTEXBUFFERSPROC glVertexArrayVertexBuffers;
1194 PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC glVertexArrayVertexOffsetEXT;
1195 PFNGLVERTEXATTRIB1DPROC glVertexAttrib1d;
1196 PFNGLVERTEXATTRIB1DVPROC glVertexAttrib1dv;
1197 PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f;
1198 PFNGLVERTEXATTRIB1FVPROC glVertexAttrib1fv;
1199 PFNGLVERTEXATTRIB1SPROC glVertexAttrib1s;
1200 PFNGLVERTEXATTRIB1SVPROC glVertexAttrib1sv;
1201 PFNGLVERTEXATTRIB2DPROC glVertexAttrib2d;
1202 PFNGLVERTEXATTRIB2DVPROC glVertexAttrib2dv;
1203 PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f;
1204 PFNGLVERTEXATTRIB2FVPROC glVertexAttrib2fv;
1205 PFNGLVERTEXATTRIB2SPROC glVertexAttrib2s;
1206 PFNGLVERTEXATTRIB2SVPROC glVertexAttrib2sv;
1207 PFNGLVERTEXATTRIB3DPROC glVertexAttrib3d;
1208 PFNGLVERTEXATTRIB3DVPROC glVertexAttrib3dv;
1209 PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f;
1210 PFNGLVERTEXATTRIB3FVPROC glVertexAttrib3fv;
1211 PFNGLVERTEXATTRIB3SPROC glVertexAttrib3s;
1212 PFNGLVERTEXATTRIB3SVPROC glVertexAttrib3sv;
1213 PFNGLVERTEXATTRIB4BVPROC glVertexAttrib4bv;
1214 PFNGLVERTEXATTRIB4DPROC glVertexAttrib4d;
1215 PFNGLVERTEXATTRIB4DVPROC glVertexAttrib4dv;
1216 PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f;
1217 PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv;
1218 PFNGLVERTEXATTRIB4IVPROC glVertexAttrib4iv;
1219 PFNGLVERTEXATTRIB4NBVPROC glVertexAttrib4Nbv;
1220 PFNGLVERTEXATTRIB4NIVPROC glVertexAttrib4Niv;
1221 PFNGLVERTEXATTRIB4NSVPROC glVertexAttrib4Nsv;
1222 PFNGLVERTEXATTRIB4NUBPROC glVertexAttrib4Nub;
1223 PFNGLVERTEXATTRIB4NUBVPROC glVertexAttrib4Nubv;
1224 PFNGLVERTEXATTRIB4NUIVPROC glVertexAttrib4Nuiv;
1225 PFNGLVERTEXATTRIB4NUSVPROC glVertexAttrib4Nusv;
1226 PFNGLVERTEXATTRIB4SPROC glVertexAttrib4s;
1227 PFNGLVERTEXATTRIB4SVPROC glVertexAttrib4sv;
1228 PFNGLVERTEXATTRIB4UBVPROC glVertexAttrib4ubv;
1229 PFNGLVERTEXATTRIB4UIVPROC glVertexAttrib4uiv;
1230 PFNGLVERTEXATTRIB4USVPROC glVertexAttrib4usv;
1231 PFNGLVERTEXATTRIBBINDINGPROC glVertexAttribBinding;
1232 PFNGLVERTEXATTRIBDIVISORARBPROC glVertexAttribDivisorARB;
1233 PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor;
1234 PFNGLVERTEXATTRIBFORMATNVPROC glVertexAttribFormatNV;
1235 PFNGLVERTEXATTRIBFORMATPROC glVertexAttribFormat;
1236 PFNGLVERTEXATTRIBI1IPROC glVertexAttribI1i;
1237 PFNGLVERTEXATTRIBI1IVPROC glVertexAttribI1iv;
1238 PFNGLVERTEXATTRIBI1UIPROC glVertexAttribI1ui;
1239 PFNGLVERTEXATTRIBI1UIVPROC glVertexAttribI1uiv;
1240 PFNGLVERTEXATTRIBI2IPROC glVertexAttribI2i;
1241 PFNGLVERTEXATTRIBI2IVPROC glVertexAttribI2iv;
1242 PFNGLVERTEXATTRIBI2UIPROC glVertexAttribI2ui;
1243 PFNGLVERTEXATTRIBI2UIVPROC glVertexAttribI2uiv;
1244 PFNGLVERTEXATTRIBI3IPROC glVertexAttribI3i;
1245 PFNGLVERTEXATTRIBI3IVPROC glVertexAttribI3iv;
1246 PFNGLVERTEXATTRIBI3UIPROC glVertexAttribI3ui;
1247 PFNGLVERTEXATTRIBI3UIVPROC glVertexAttribI3uiv;
1248 PFNGLVERTEXATTRIBI4BVPROC glVertexAttribI4bv;
1249 PFNGLVERTEXATTRIBI4IPROC glVertexAttribI4i;
1250 PFNGLVERTEXATTRIBI4IVPROC glVertexAttribI4iv;
1251 PFNGLVERTEXATTRIBI4SVPROC glVertexAttribI4sv;
1252 PFNGLVERTEXATTRIBI4UBVPROC glVertexAttribI4ubv;
1253 PFNGLVERTEXATTRIBI4UIPROC glVertexAttribI4ui;
1254 PFNGLVERTEXATTRIBI4UIVPROC glVertexAttribI4uiv;
1255 PFNGLVERTEXATTRIBI4USVPROC glVertexAttribI4usv;
1256 PFNGLVERTEXATTRIBIFORMATNVPROC glVertexAttribIFormatNV;
1257 PFNGLVERTEXATTRIBIFORMATPROC glVertexAttribIFormat;
1258 PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer;
1259 PFNGLVERTEXATTRIBL1DPROC glVertexAttribL1d;
1260 PFNGLVERTEXATTRIBL1DVPROC glVertexAttribL1dv;
1261 PFNGLVERTEXATTRIBL1I64NVPROC glVertexAttribL1i64NV;
1262 PFNGLVERTEXATTRIBL1I64VNVPROC glVertexAttribL1i64vNV;
1263 PFNGLVERTEXATTRIBL1UI64ARBPROC glVertexAttribL1ui64ARB;
1264 PFNGLVERTEXATTRIBL1UI64NVPROC glVertexAttribL1ui64NV;
1265 PFNGLVERTEXATTRIBL1UI64VARBPROC glVertexAttribL1ui64vARB;
1266 PFNGLVERTEXATTRIBL1UI64VNVPROC glVertexAttribL1ui64vNV;
1267 PFNGLVERTEXATTRIBL2DPROC glVertexAttribL2d;
1268 PFNGLVERTEXATTRIBL2DVPROC glVertexAttribL2dv;
1269 PFNGLVERTEXATTRIBL2I64NVPROC glVertexAttribL2i64NV;
1270 PFNGLVERTEXATTRIBL2I64VNVPROC glVertexAttribL2i64vNV;
1271 PFNGLVERTEXATTRIBL2UI64NVPROC glVertexAttribL2ui64NV;
1272 PFNGLVERTEXATTRIBL2UI64VNVPROC glVertexAttribL2ui64vNV;
1273 PFNGLVERTEXATTRIBL3DPROC glVertexAttribL3d;
1274 PFNGLVERTEXATTRIBL3DVPROC glVertexAttribL3dv;
1275 PFNGLVERTEXATTRIBL3I64NVPROC glVertexAttribL3i64NV;
1276 PFNGLVERTEXATTRIBL3I64VNVPROC glVertexAttribL3i64vNV;
1277 PFNGLVERTEXATTRIBL3UI64NVPROC glVertexAttribL3ui64NV;
1278 PFNGLVERTEXATTRIBL3UI64VNVPROC glVertexAttribL3ui64vNV;
1279 PFNGLVERTEXATTRIBL4DPROC glVertexAttribL4d;
1280 PFNGLVERTEXATTRIBL4DVPROC glVertexAttribL4dv;
1281 PFNGLVERTEXATTRIBL4I64NVPROC glVertexAttribL4i64NV;
1282 PFNGLVERTEXATTRIBL4I64VNVPROC glVertexAttribL4i64vNV;
1283 PFNGLVERTEXATTRIBL4UI64NVPROC glVertexAttribL4ui64NV;
1284 PFNGLVERTEXATTRIBL4UI64VNVPROC glVertexAttribL4ui64vNV;
1285 PFNGLVERTEXATTRIBLFORMATNVPROC glVertexAttribLFormatNV;
1286 PFNGLVERTEXATTRIBLFORMATPROC glVertexAttribLFormat;
1287 PFNGLVERTEXATTRIBLPOINTERPROC glVertexAttribLPointer;
1288 PFNGLVERTEXATTRIBP1UIPROC glVertexAttribP1ui;
1289 PFNGLVERTEXATTRIBP1UIVPROC glVertexAttribP1uiv;
1290 PFNGLVERTEXATTRIBP2UIPROC glVertexAttribP2ui;
1291 PFNGLVERTEXATTRIBP2UIVPROC glVertexAttribP2uiv;
1292 PFNGLVERTEXATTRIBP3UIPROC glVertexAttribP3ui;
1293 PFNGLVERTEXATTRIBP3UIVPROC glVertexAttribP3uiv;
1294 PFNGLVERTEXATTRIBP4UIPROC glVertexAttribP4ui;
1295 PFNGLVERTEXATTRIBP4UIVPROC glVertexAttribP4uiv;
1296 PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
1297 PFNGLVERTEXBINDINGDIVISORPROC glVertexBindingDivisor;
1298 PFNGLVERTEXFORMATNVPROC glVertexFormatNV;
1299 PFNGLVIEWPORTARRAYVPROC glViewportArrayv;
1300 PFNGLVIEWPORTINDEXEDFPROC glViewportIndexedf;
1301 PFNGLVIEWPORTINDEXEDFVPROC glViewportIndexedfv;
1302 PFNGLVIEWPORTPOSITIONWSCALENVPROC glViewportPositionWScaleNV;
1303 PFNGLVIEWPORTPROC glViewport;
1304 PFNGLVIEWPORTSWIZZLENVPROC glViewportSwizzleNV;
1305 PFNGLWAITSYNCPROC glWaitSync;
1306 PFNGLWAITVKSEMAPHORENVPROC glWaitVkSemaphoreNV;
1307 PFNGLWEIGHTPATHSNVPROC glWeightPathsNV;
1308 PFNGLWINDOWRECTANGLESEXTPROC glWindowRectanglesEXT;
1309 #endif
1310 
1312 
1314 GLint gg::ggBufferAlignment(0);
1315 
1316 /*
1317 ** ゲームグラフィックス特論の都合にもとづく初期化
1318 */
1320 {
1321  // すでにこの関数が実行されていたら以降の処理を行わない
1322  if (ggBufferAlignment) return;
1323 
1324  // macOS 以外で OpenGL 3.2 以降の API を取得する
1325 #if !defined(GL3_PROTOTYPES)
1326  glActiveProgramEXT = PFNGLACTIVEPROGRAMEXTPROC(glfwGetProcAddress("glActiveProgramEXT"));
1327  glActiveShaderProgram = PFNGLACTIVESHADERPROGRAMPROC(glfwGetProcAddress("glActiveShaderProgram"));
1328  glActiveTexture = PFNGLACTIVETEXTUREPROC(glfwGetProcAddress("glActiveTexture"));
1329  glApplyFramebufferAttachmentCMAAINTEL = PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC(glfwGetProcAddress("glApplyFramebufferAttachmentCMAAINTEL"));
1330  glAttachShader = PFNGLATTACHSHADERPROC(glfwGetProcAddress("glAttachShader"));
1331  glBeginConditionalRender = PFNGLBEGINCONDITIONALRENDERPROC(glfwGetProcAddress("glBeginConditionalRender"));
1332  glBeginConditionalRenderNV = PFNGLBEGINCONDITIONALRENDERNVPROC(glfwGetProcAddress("glBeginConditionalRenderNV"));
1333  glBeginPerfMonitorAMD = PFNGLBEGINPERFMONITORAMDPROC(glfwGetProcAddress("glBeginPerfMonitorAMD"));
1334  glBeginPerfQueryINTEL = PFNGLBEGINPERFQUERYINTELPROC(glfwGetProcAddress("glBeginPerfQueryINTEL"));
1335  glBeginQuery = PFNGLBEGINQUERYPROC(glfwGetProcAddress("glBeginQuery"));
1336  glBeginQueryIndexed = PFNGLBEGINQUERYINDEXEDPROC(glfwGetProcAddress("glBeginQueryIndexed"));
1337  glBeginTransformFeedback = PFNGLBEGINTRANSFORMFEEDBACKPROC(glfwGetProcAddress("glBeginTransformFeedback"));
1338  glBindAttribLocation = PFNGLBINDATTRIBLOCATIONPROC(glfwGetProcAddress("glBindAttribLocation"));
1339  glBindBuffer = PFNGLBINDBUFFERPROC(glfwGetProcAddress("glBindBuffer"));
1340  glBindBufferBase = PFNGLBINDBUFFERBASEPROC(glfwGetProcAddress("glBindBufferBase"));
1341  glBindBufferRange = PFNGLBINDBUFFERRANGEPROC(glfwGetProcAddress("glBindBufferRange"));
1342  glBindBuffersBase = PFNGLBINDBUFFERSBASEPROC(glfwGetProcAddress("glBindBuffersBase"));
1343  glBindBuffersRange = PFNGLBINDBUFFERSRANGEPROC(glfwGetProcAddress("glBindBuffersRange"));
1344  glBindFragDataLocation = PFNGLBINDFRAGDATALOCATIONPROC(glfwGetProcAddress("glBindFragDataLocation"));
1345  glBindFragDataLocationIndexed = PFNGLBINDFRAGDATALOCATIONINDEXEDPROC(glfwGetProcAddress("glBindFragDataLocationIndexed"));
1346  glBindFramebuffer = PFNGLBINDFRAMEBUFFERPROC(glfwGetProcAddress("glBindFramebuffer"));
1347  glBindImageTexture = PFNGLBINDIMAGETEXTUREPROC(glfwGetProcAddress("glBindImageTexture"));
1348  glBindImageTextures = PFNGLBINDIMAGETEXTURESPROC(glfwGetProcAddress("glBindImageTextures"));
1349  glBindMultiTextureEXT = PFNGLBINDMULTITEXTUREEXTPROC(glfwGetProcAddress("glBindMultiTextureEXT"));
1350  glBindProgramPipeline = PFNGLBINDPROGRAMPIPELINEPROC(glfwGetProcAddress("glBindProgramPipeline"));
1351  glBindRenderbuffer = PFNGLBINDRENDERBUFFERPROC(glfwGetProcAddress("glBindRenderbuffer"));
1352  glBindSampler = PFNGLBINDSAMPLERPROC(glfwGetProcAddress("glBindSampler"));
1353  glBindSamplers = PFNGLBINDSAMPLERSPROC(glfwGetProcAddress("glBindSamplers"));
1354  glBindTexture = PFNGLBINDTEXTUREPROC(glfwGetProcAddress("glBindTexture"));
1355  glBindTextureUnit = PFNGLBINDTEXTUREUNITPROC(glfwGetProcAddress("glBindTextureUnit"));
1356  glBindTextures = PFNGLBINDTEXTURESPROC(glfwGetProcAddress("glBindTextures"));
1357  glBindTransformFeedback = PFNGLBINDTRANSFORMFEEDBACKPROC(glfwGetProcAddress("glBindTransformFeedback"));
1358  glBindVertexArray = PFNGLBINDVERTEXARRAYPROC(glfwGetProcAddress("glBindVertexArray"));
1359  glBindVertexBuffer = PFNGLBINDVERTEXBUFFERPROC(glfwGetProcAddress("glBindVertexBuffer"));
1360  glBindVertexBuffers = PFNGLBINDVERTEXBUFFERSPROC(glfwGetProcAddress("glBindVertexBuffers"));
1361  glBlendBarrierKHR = PFNGLBLENDBARRIERKHRPROC(glfwGetProcAddress("glBlendBarrierKHR"));
1362  glBlendBarrierNV = PFNGLBLENDBARRIERNVPROC(glfwGetProcAddress("glBlendBarrierNV"));
1363  glBlendColor = PFNGLBLENDCOLORPROC(glfwGetProcAddress("glBlendColor"));
1364  glBlendEquation = PFNGLBLENDEQUATIONPROC(glfwGetProcAddress("glBlendEquation"));
1365  glBlendEquationSeparate = PFNGLBLENDEQUATIONSEPARATEPROC(glfwGetProcAddress("glBlendEquationSeparate"));
1366  glBlendEquationSeparatei = PFNGLBLENDEQUATIONSEPARATEIPROC(glfwGetProcAddress("glBlendEquationSeparatei"));
1367  glBlendEquationSeparateiARB = PFNGLBLENDEQUATIONSEPARATEIARBPROC(glfwGetProcAddress("glBlendEquationSeparateiARB"));
1368  glBlendEquationi = PFNGLBLENDEQUATIONIPROC(glfwGetProcAddress("glBlendEquationi"));
1369  glBlendEquationiARB = PFNGLBLENDEQUATIONIARBPROC(glfwGetProcAddress("glBlendEquationiARB"));
1370  glBlendFunc = PFNGLBLENDFUNCPROC(glfwGetProcAddress("glBlendFunc"));
1371  glBlendFuncSeparate = PFNGLBLENDFUNCSEPARATEPROC(glfwGetProcAddress("glBlendFuncSeparate"));
1372  glBlendFuncSeparatei = PFNGLBLENDFUNCSEPARATEIPROC(glfwGetProcAddress("glBlendFuncSeparatei"));
1373  glBlendFuncSeparateiARB = PFNGLBLENDFUNCSEPARATEIARBPROC(glfwGetProcAddress("glBlendFuncSeparateiARB"));
1374  glBlendFunci = PFNGLBLENDFUNCIPROC(glfwGetProcAddress("glBlendFunci"));
1375  glBlendFunciARB = PFNGLBLENDFUNCIARBPROC(glfwGetProcAddress("glBlendFunciARB"));
1376  glBlendParameteriNV = PFNGLBLENDPARAMETERINVPROC(glfwGetProcAddress("glBlendParameteriNV"));
1377  glBlitFramebuffer = PFNGLBLITFRAMEBUFFERPROC(glfwGetProcAddress("glBlitFramebuffer"));
1378  glBlitNamedFramebuffer = PFNGLBLITNAMEDFRAMEBUFFERPROC(glfwGetProcAddress("glBlitNamedFramebuffer"));
1379  glBufferAddressRangeNV = PFNGLBUFFERADDRESSRANGENVPROC(glfwGetProcAddress("glBufferAddressRangeNV"));
1380  glBufferData = PFNGLBUFFERDATAPROC(glfwGetProcAddress("glBufferData"));
1381  glBufferPageCommitmentARB = PFNGLBUFFERPAGECOMMITMENTARBPROC(glfwGetProcAddress("glBufferPageCommitmentARB"));
1382  glBufferStorage = PFNGLBUFFERSTORAGEPROC(glfwGetProcAddress("glBufferStorage"));
1383  glBufferSubData = PFNGLBUFFERSUBDATAPROC(glfwGetProcAddress("glBufferSubData"));
1384  glCallCommandListNV = PFNGLCALLCOMMANDLISTNVPROC(glfwGetProcAddress("glCallCommandListNV"));
1385  glCheckFramebufferStatus = PFNGLCHECKFRAMEBUFFERSTATUSPROC(glfwGetProcAddress("glCheckFramebufferStatus"));
1386  glCheckNamedFramebufferStatus = PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC(glfwGetProcAddress("glCheckNamedFramebufferStatus"));
1387  glCheckNamedFramebufferStatusEXT = PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC(glfwGetProcAddress("glCheckNamedFramebufferStatusEXT"));
1388  glClampColor = PFNGLCLAMPCOLORPROC(glfwGetProcAddress("glClampColor"));
1389  glClear = PFNGLCLEARPROC(glfwGetProcAddress("glClear"));
1390  glClearBufferData = PFNGLCLEARBUFFERDATAPROC(glfwGetProcAddress("glClearBufferData"));
1391  glClearBufferSubData = PFNGLCLEARBUFFERSUBDATAPROC(glfwGetProcAddress("glClearBufferSubData"));
1392  glClearBufferfi = PFNGLCLEARBUFFERFIPROC(glfwGetProcAddress("glClearBufferfi"));
1393  glClearBufferfv = PFNGLCLEARBUFFERFVPROC(glfwGetProcAddress("glClearBufferfv"));
1394  glClearBufferiv = PFNGLCLEARBUFFERIVPROC(glfwGetProcAddress("glClearBufferiv"));
1395  glClearBufferuiv = PFNGLCLEARBUFFERUIVPROC(glfwGetProcAddress("glClearBufferuiv"));
1396  glClearColor = PFNGLCLEARCOLORPROC(glfwGetProcAddress("glClearColor"));
1397  glClearDepth = PFNGLCLEARDEPTHPROC(glfwGetProcAddress("glClearDepth"));
1398  glClearDepthf = PFNGLCLEARDEPTHFPROC(glfwGetProcAddress("glClearDepthf"));
1399  glClearNamedBufferData = PFNGLCLEARNAMEDBUFFERDATAPROC(glfwGetProcAddress("glClearNamedBufferData"));
1400  glClearNamedBufferDataEXT = PFNGLCLEARNAMEDBUFFERDATAEXTPROC(glfwGetProcAddress("glClearNamedBufferDataEXT"));
1401  glClearNamedBufferSubData = PFNGLCLEARNAMEDBUFFERSUBDATAPROC(glfwGetProcAddress("glClearNamedBufferSubData"));
1402  glClearNamedBufferSubDataEXT = PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC(glfwGetProcAddress("glClearNamedBufferSubDataEXT"));
1403  glClearNamedFramebufferfi = PFNGLCLEARNAMEDFRAMEBUFFERFIPROC(glfwGetProcAddress("glClearNamedFramebufferfi"));
1404  glClearNamedFramebufferfv = PFNGLCLEARNAMEDFRAMEBUFFERFVPROC(glfwGetProcAddress("glClearNamedFramebufferfv"));
1405  glClearNamedFramebufferiv = PFNGLCLEARNAMEDFRAMEBUFFERIVPROC(glfwGetProcAddress("glClearNamedFramebufferiv"));
1406  glClearNamedFramebufferuiv = PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC(glfwGetProcAddress("glClearNamedFramebufferuiv"));
1407  glClearStencil = PFNGLCLEARSTENCILPROC(glfwGetProcAddress("glClearStencil"));
1408  glClearTexImage = PFNGLCLEARTEXIMAGEPROC(glfwGetProcAddress("glClearTexImage"));
1409  glClearTexSubImage = PFNGLCLEARTEXSUBIMAGEPROC(glfwGetProcAddress("glClearTexSubImage"));
1410  glClientAttribDefaultEXT = PFNGLCLIENTATTRIBDEFAULTEXTPROC(glfwGetProcAddress("glClientAttribDefaultEXT"));
1411  glClientWaitSync = PFNGLCLIENTWAITSYNCPROC(glfwGetProcAddress("glClientWaitSync"));
1412  glClipControl = PFNGLCLIPCONTROLPROC(glfwGetProcAddress("glClipControl"));
1413  glColorFormatNV = PFNGLCOLORFORMATNVPROC(glfwGetProcAddress("glColorFormatNV"));
1414  glColorMask = PFNGLCOLORMASKPROC(glfwGetProcAddress("glColorMask"));
1415  glColorMaski = PFNGLCOLORMASKIPROC(glfwGetProcAddress("glColorMaski"));
1416  glCommandListSegmentsNV = PFNGLCOMMANDLISTSEGMENTSNVPROC(glfwGetProcAddress("glCommandListSegmentsNV"));
1417  glCompileCommandListNV = PFNGLCOMPILECOMMANDLISTNVPROC(glfwGetProcAddress("glCompileCommandListNV"));
1418  glCompileShader = PFNGLCOMPILESHADERPROC(glfwGetProcAddress("glCompileShader"));
1419  glCompileShaderIncludeARB = PFNGLCOMPILESHADERINCLUDEARBPROC(glfwGetProcAddress("glCompileShaderIncludeARB"));
1420  glCompressedMultiTexImage1DEXT = PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC(glfwGetProcAddress("glCompressedMultiTexImage1DEXT"));
1421  glCompressedMultiTexImage2DEXT = PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC(glfwGetProcAddress("glCompressedMultiTexImage2DEXT"));
1422  glCompressedMultiTexImage3DEXT = PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC(glfwGetProcAddress("glCompressedMultiTexImage3DEXT"));
1423  glCompressedMultiTexSubImage1DEXT = PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC(glfwGetProcAddress("glCompressedMultiTexSubImage1DEXT"));
1424  glCompressedMultiTexSubImage2DEXT = PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC(glfwGetProcAddress("glCompressedMultiTexSubImage2DEXT"));
1425  glCompressedMultiTexSubImage3DEXT = PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC(glfwGetProcAddress("glCompressedMultiTexSubImage3DEXT"));
1426  glCompressedTexImage1D = PFNGLCOMPRESSEDTEXIMAGE1DPROC(glfwGetProcAddress("glCompressedTexImage1D"));
1427  glCompressedTexImage2D = PFNGLCOMPRESSEDTEXIMAGE2DPROC(glfwGetProcAddress("glCompressedTexImage2D"));
1428  glCompressedTexImage3D = PFNGLCOMPRESSEDTEXIMAGE3DPROC(glfwGetProcAddress("glCompressedTexImage3D"));
1429  glCompressedTexSubImage1D = PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC(glfwGetProcAddress("glCompressedTexSubImage1D"));
1430  glCompressedTexSubImage2D = PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC(glfwGetProcAddress("glCompressedTexSubImage2D"));
1431  glCompressedTexSubImage3D = PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC(glfwGetProcAddress("glCompressedTexSubImage3D"));
1432  glCompressedTextureImage1DEXT = PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC(glfwGetProcAddress("glCompressedTextureImage1DEXT"));
1433  glCompressedTextureImage2DEXT = PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC(glfwGetProcAddress("glCompressedTextureImage2DEXT"));
1434  glCompressedTextureImage3DEXT = PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC(glfwGetProcAddress("glCompressedTextureImage3DEXT"));
1435  glCompressedTextureSubImage1D = PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC(glfwGetProcAddress("glCompressedTextureSubImage1D"));
1436  glCompressedTextureSubImage1DEXT = PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC(glfwGetProcAddress("glCompressedTextureSubImage1DEXT"));
1437  glCompressedTextureSubImage2D = PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC(glfwGetProcAddress("glCompressedTextureSubImage2D"));
1438  glCompressedTextureSubImage2DEXT = PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC(glfwGetProcAddress("glCompressedTextureSubImage2DEXT"));
1439  glCompressedTextureSubImage3D = PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC(glfwGetProcAddress("glCompressedTextureSubImage3D"));
1440  glCompressedTextureSubImage3DEXT = PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC(glfwGetProcAddress("glCompressedTextureSubImage3DEXT"));
1441  glConservativeRasterParameterfNV = PFNGLCONSERVATIVERASTERPARAMETERFNVPROC(glfwGetProcAddress("glConservativeRasterParameterfNV"));
1442  glConservativeRasterParameteriNV = PFNGLCONSERVATIVERASTERPARAMETERINVPROC(glfwGetProcAddress("glConservativeRasterParameteriNV"));
1443  glCopyBufferSubData = PFNGLCOPYBUFFERSUBDATAPROC(glfwGetProcAddress("glCopyBufferSubData"));
1444  glCopyImageSubData = PFNGLCOPYIMAGESUBDATAPROC(glfwGetProcAddress("glCopyImageSubData"));
1445  glCopyMultiTexImage1DEXT = PFNGLCOPYMULTITEXIMAGE1DEXTPROC(glfwGetProcAddress("glCopyMultiTexImage1DEXT"));
1446  glCopyMultiTexImage2DEXT = PFNGLCOPYMULTITEXIMAGE2DEXTPROC(glfwGetProcAddress("glCopyMultiTexImage2DEXT"));
1447  glCopyMultiTexSubImage1DEXT = PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC(glfwGetProcAddress("glCopyMultiTexSubImage1DEXT"));
1448  glCopyMultiTexSubImage2DEXT = PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC(glfwGetProcAddress("glCopyMultiTexSubImage2DEXT"));
1449  glCopyMultiTexSubImage3DEXT = PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC(glfwGetProcAddress("glCopyMultiTexSubImage3DEXT"));
1450  glCopyNamedBufferSubData = PFNGLCOPYNAMEDBUFFERSUBDATAPROC(glfwGetProcAddress("glCopyNamedBufferSubData"));
1451  glCopyPathNV = PFNGLCOPYPATHNVPROC(glfwGetProcAddress("glCopyPathNV"));
1452  glCopyTexImage1D = PFNGLCOPYTEXIMAGE1DPROC(glfwGetProcAddress("glCopyTexImage1D"));
1453  glCopyTexImage2D = PFNGLCOPYTEXIMAGE2DPROC(glfwGetProcAddress("glCopyTexImage2D"));
1454  glCopyTexSubImage1D = PFNGLCOPYTEXSUBIMAGE1DPROC(glfwGetProcAddress("glCopyTexSubImage1D"));
1455  glCopyTexSubImage2D = PFNGLCOPYTEXSUBIMAGE2DPROC(glfwGetProcAddress("glCopyTexSubImage2D"));
1456  glCopyTexSubImage3D = PFNGLCOPYTEXSUBIMAGE3DPROC(glfwGetProcAddress("glCopyTexSubImage3D"));
1457  glCopyTextureImage1DEXT = PFNGLCOPYTEXTUREIMAGE1DEXTPROC(glfwGetProcAddress("glCopyTextureImage1DEXT"));
1458  glCopyTextureImage2DEXT = PFNGLCOPYTEXTUREIMAGE2DEXTPROC(glfwGetProcAddress("glCopyTextureImage2DEXT"));
1459  glCopyTextureSubImage1D = PFNGLCOPYTEXTURESUBIMAGE1DPROC(glfwGetProcAddress("glCopyTextureSubImage1D"));
1460  glCopyTextureSubImage1DEXT = PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC(glfwGetProcAddress("glCopyTextureSubImage1DEXT"));
1461  glCopyTextureSubImage2D = PFNGLCOPYTEXTURESUBIMAGE2DPROC(glfwGetProcAddress("glCopyTextureSubImage2D"));
1462  glCopyTextureSubImage2DEXT = PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC(glfwGetProcAddress("glCopyTextureSubImage2DEXT"));
1463  glCopyTextureSubImage3D = PFNGLCOPYTEXTURESUBIMAGE3DPROC(glfwGetProcAddress("glCopyTextureSubImage3D"));
1464  glCopyTextureSubImage3DEXT = PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC(glfwGetProcAddress("glCopyTextureSubImage3DEXT"));
1465  glCoverFillPathInstancedNV = PFNGLCOVERFILLPATHINSTANCEDNVPROC(glfwGetProcAddress("glCoverFillPathInstancedNV"));
1466  glCoverFillPathNV = PFNGLCOVERFILLPATHNVPROC(glfwGetProcAddress("glCoverFillPathNV"));
1467  glCoverStrokePathInstancedNV = PFNGLCOVERSTROKEPATHINSTANCEDNVPROC(glfwGetProcAddress("glCoverStrokePathInstancedNV"));
1468  glCoverStrokePathNV = PFNGLCOVERSTROKEPATHNVPROC(glfwGetProcAddress("glCoverStrokePathNV"));
1469  glCoverageModulationNV = PFNGLCOVERAGEMODULATIONNVPROC(glfwGetProcAddress("glCoverageModulationNV"));
1470  glCoverageModulationTableNV = PFNGLCOVERAGEMODULATIONTABLENVPROC(glfwGetProcAddress("glCoverageModulationTableNV"));
1471  glCreateBuffers = PFNGLCREATEBUFFERSPROC(glfwGetProcAddress("glCreateBuffers"));
1472  glCreateCommandListsNV = PFNGLCREATECOMMANDLISTSNVPROC(glfwGetProcAddress("glCreateCommandListsNV"));
1473  glCreateFramebuffers = PFNGLCREATEFRAMEBUFFERSPROC(glfwGetProcAddress("glCreateFramebuffers"));
1474  glCreatePerfQueryINTEL = PFNGLCREATEPERFQUERYINTELPROC(glfwGetProcAddress("glCreatePerfQueryINTEL"));
1475  glCreateProgram = PFNGLCREATEPROGRAMPROC(glfwGetProcAddress("glCreateProgram"));
1476  glCreateProgramPipelines = PFNGLCREATEPROGRAMPIPELINESPROC(glfwGetProcAddress("glCreateProgramPipelines"));
1477  glCreateQueries = PFNGLCREATEQUERIESPROC(glfwGetProcAddress("glCreateQueries"));
1478  glCreateRenderbuffers = PFNGLCREATERENDERBUFFERSPROC(glfwGetProcAddress("glCreateRenderbuffers"));
1479  glCreateSamplers = PFNGLCREATESAMPLERSPROC(glfwGetProcAddress("glCreateSamplers"));
1480  glCreateShader = PFNGLCREATESHADERPROC(glfwGetProcAddress("glCreateShader"));
1481  glCreateShaderProgramEXT = PFNGLCREATESHADERPROGRAMEXTPROC(glfwGetProcAddress("glCreateShaderProgramEXT"));
1482  glCreateShaderProgramv = PFNGLCREATESHADERPROGRAMVPROC(glfwGetProcAddress("glCreateShaderProgramv"));
1483  glCreateStatesNV = PFNGLCREATESTATESNVPROC(glfwGetProcAddress("glCreateStatesNV"));
1484  glCreateSyncFromCLeventARB = PFNGLCREATESYNCFROMCLEVENTARBPROC(glfwGetProcAddress("glCreateSyncFromCLeventARB"));
1485  glCreateTextures = PFNGLCREATETEXTURESPROC(glfwGetProcAddress("glCreateTextures"));
1486  glCreateTransformFeedbacks = PFNGLCREATETRANSFORMFEEDBACKSPROC(glfwGetProcAddress("glCreateTransformFeedbacks"));
1487  glCreateVertexArrays = PFNGLCREATEVERTEXARRAYSPROC(glfwGetProcAddress("glCreateVertexArrays"));
1488  glCullFace = PFNGLCULLFACEPROC(glfwGetProcAddress("glCullFace"));
1489  glDebugMessageCallback = PFNGLDEBUGMESSAGECALLBACKPROC(glfwGetProcAddress("glDebugMessageCallback"));
1490  glDebugMessageCallbackARB = PFNGLDEBUGMESSAGECALLBACKARBPROC(glfwGetProcAddress("glDebugMessageCallbackARB"));
1491  glDebugMessageControl = PFNGLDEBUGMESSAGECONTROLPROC(glfwGetProcAddress("glDebugMessageControl"));
1492  glDebugMessageControlARB = PFNGLDEBUGMESSAGECONTROLARBPROC(glfwGetProcAddress("glDebugMessageControlARB"));
1493  glDebugMessageInsert = PFNGLDEBUGMESSAGEINSERTPROC(glfwGetProcAddress("glDebugMessageInsert"));
1494  glDebugMessageInsertARB = PFNGLDEBUGMESSAGEINSERTARBPROC(glfwGetProcAddress("glDebugMessageInsertARB"));
1495  glDeleteBuffers = PFNGLDELETEBUFFERSPROC(glfwGetProcAddress("glDeleteBuffers"));
1496  glDeleteCommandListsNV = PFNGLDELETECOMMANDLISTSNVPROC(glfwGetProcAddress("glDeleteCommandListsNV"));
1497  glDeleteFramebuffers = PFNGLDELETEFRAMEBUFFERSPROC(glfwGetProcAddress("glDeleteFramebuffers"));
1498  glDeleteNamedStringARB = PFNGLDELETENAMEDSTRINGARBPROC(glfwGetProcAddress("glDeleteNamedStringARB"));
1499  glDeletePathsNV = PFNGLDELETEPATHSNVPROC(glfwGetProcAddress("glDeletePathsNV"));
1500  glDeletePerfMonitorsAMD = PFNGLDELETEPERFMONITORSAMDPROC(glfwGetProcAddress("glDeletePerfMonitorsAMD"));
1501  glDeletePerfQueryINTEL = PFNGLDELETEPERFQUERYINTELPROC(glfwGetProcAddress("glDeletePerfQueryINTEL"));
1502  glDeleteProgram = PFNGLDELETEPROGRAMPROC(glfwGetProcAddress("glDeleteProgram"));
1503  glDeleteProgramPipelines = PFNGLDELETEPROGRAMPIPELINESPROC(glfwGetProcAddress("glDeleteProgramPipelines"));
1504  glDeleteQueries = PFNGLDELETEQUERIESPROC(glfwGetProcAddress("glDeleteQueries"));
1505  glDeleteRenderbuffers = PFNGLDELETERENDERBUFFERSPROC(glfwGetProcAddress("glDeleteRenderbuffers"));
1506  glDeleteSamplers = PFNGLDELETESAMPLERSPROC(glfwGetProcAddress("glDeleteSamplers"));
1507  glDeleteShader = PFNGLDELETESHADERPROC(glfwGetProcAddress("glDeleteShader"));
1508  glDeleteStatesNV = PFNGLDELETESTATESNVPROC(glfwGetProcAddress("glDeleteStatesNV"));
1509  glDeleteSync = PFNGLDELETESYNCPROC(glfwGetProcAddress("glDeleteSync"));
1510  glDeleteTextures = PFNGLDELETETEXTURESPROC(glfwGetProcAddress("glDeleteTextures"));
1511  glDeleteTransformFeedbacks = PFNGLDELETETRANSFORMFEEDBACKSPROC(glfwGetProcAddress("glDeleteTransformFeedbacks"));
1512  glDeleteVertexArrays = PFNGLDELETEVERTEXARRAYSPROC(glfwGetProcAddress("glDeleteVertexArrays"));
1513  glDepthFunc = PFNGLDEPTHFUNCPROC(glfwGetProcAddress("glDepthFunc"));
1514  glDepthMask = PFNGLDEPTHMASKPROC(glfwGetProcAddress("glDepthMask"));
1515  glDepthRange = PFNGLDEPTHRANGEPROC(glfwGetProcAddress("glDepthRange"));
1516  glDepthRangeArrayv = PFNGLDEPTHRANGEARRAYVPROC(glfwGetProcAddress("glDepthRangeArrayv"));
1517  glDepthRangeIndexed = PFNGLDEPTHRANGEINDEXEDPROC(glfwGetProcAddress("glDepthRangeIndexed"));
1518  glDepthRangef = PFNGLDEPTHRANGEFPROC(glfwGetProcAddress("glDepthRangef"));
1519  glDetachShader = PFNGLDETACHSHADERPROC(glfwGetProcAddress("glDetachShader"));
1520  glDisable = PFNGLDISABLEPROC(glfwGetProcAddress("glDisable"));
1521  glDisableClientStateIndexedEXT = PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC(glfwGetProcAddress("glDisableClientStateIndexedEXT"));
1522  glDisableClientStateiEXT = PFNGLDISABLECLIENTSTATEIEXTPROC(glfwGetProcAddress("glDisableClientStateiEXT"));
1523  glDisableIndexedEXT = PFNGLDISABLEINDEXEDEXTPROC(glfwGetProcAddress("glDisableIndexedEXT"));
1524  glDisableVertexArrayAttrib = PFNGLDISABLEVERTEXARRAYATTRIBPROC(glfwGetProcAddress("glDisableVertexArrayAttrib"));
1525  glDisableVertexArrayAttribEXT = PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC(glfwGetProcAddress("glDisableVertexArrayAttribEXT"));
1526  glDisableVertexArrayEXT = PFNGLDISABLEVERTEXARRAYEXTPROC(glfwGetProcAddress("glDisableVertexArrayEXT"));
1527  glDisableVertexAttribArray = PFNGLDISABLEVERTEXATTRIBARRAYPROC(glfwGetProcAddress("glDisableVertexAttribArray"));
1528  glDisablei = PFNGLDISABLEIPROC(glfwGetProcAddress("glDisablei"));
1529  glDispatchCompute = PFNGLDISPATCHCOMPUTEPROC(glfwGetProcAddress("glDispatchCompute"));
1530  glDispatchComputeGroupSizeARB = PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC(glfwGetProcAddress("glDispatchComputeGroupSizeARB"));
1531  glDispatchComputeIndirect = PFNGLDISPATCHCOMPUTEINDIRECTPROC(glfwGetProcAddress("glDispatchComputeIndirect"));
1532  glDrawArrays = PFNGLDRAWARRAYSPROC(glfwGetProcAddress("glDrawArrays"));
1533  glDrawArraysIndirect = PFNGLDRAWARRAYSINDIRECTPROC(glfwGetProcAddress("glDrawArraysIndirect"));
1534  glDrawArraysInstanced = PFNGLDRAWARRAYSINSTANCEDPROC(glfwGetProcAddress("glDrawArraysInstanced"));
1535  glDrawArraysInstancedARB = PFNGLDRAWARRAYSINSTANCEDARBPROC(glfwGetProcAddress("glDrawArraysInstancedARB"));
1536  glDrawArraysInstancedBaseInstance = PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC(glfwGetProcAddress("glDrawArraysInstancedBaseInstance"));
1537  glDrawArraysInstancedEXT = PFNGLDRAWARRAYSINSTANCEDEXTPROC(glfwGetProcAddress("glDrawArraysInstancedEXT"));
1538  glDrawBuffer = PFNGLDRAWBUFFERPROC(glfwGetProcAddress("glDrawBuffer"));
1539  glDrawBuffers = PFNGLDRAWBUFFERSPROC(glfwGetProcAddress("glDrawBuffers"));
1540  glDrawCommandsAddressNV = PFNGLDRAWCOMMANDSADDRESSNVPROC(glfwGetProcAddress("glDrawCommandsAddressNV"));
1541  glDrawCommandsNV = PFNGLDRAWCOMMANDSNVPROC(glfwGetProcAddress("glDrawCommandsNV"));
1542  glDrawCommandsStatesAddressNV = PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC(glfwGetProcAddress("glDrawCommandsStatesAddressNV"));
1543  glDrawCommandsStatesNV = PFNGLDRAWCOMMANDSSTATESNVPROC(glfwGetProcAddress("glDrawCommandsStatesNV"));
1544  glDrawElements = PFNGLDRAWELEMENTSPROC(glfwGetProcAddress("glDrawElements"));
1545  glDrawElementsBaseVertex = PFNGLDRAWELEMENTSBASEVERTEXPROC(glfwGetProcAddress("glDrawElementsBaseVertex"));
1546  glDrawElementsIndirect = PFNGLDRAWELEMENTSINDIRECTPROC(glfwGetProcAddress("glDrawElementsIndirect"));
1547  glDrawElementsInstanced = PFNGLDRAWELEMENTSINSTANCEDPROC(glfwGetProcAddress("glDrawElementsInstanced"));
1548  glDrawElementsInstancedARB = PFNGLDRAWELEMENTSINSTANCEDARBPROC(glfwGetProcAddress("glDrawElementsInstancedARB"));
1549  glDrawElementsInstancedBaseInstance = PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC(glfwGetProcAddress("glDrawElementsInstancedBaseInstance"));
1550  glDrawElementsInstancedBaseVertex = PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC(glfwGetProcAddress("glDrawElementsInstancedBaseVertex"));
1551  glDrawElementsInstancedBaseVertexBaseInstance = PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC(glfwGetProcAddress("glDrawElementsInstancedBaseVertexBaseInstance"));
1552  glDrawElementsInstancedEXT = PFNGLDRAWELEMENTSINSTANCEDEXTPROC(glfwGetProcAddress("glDrawElementsInstancedEXT"));
1553  glDrawRangeElements = PFNGLDRAWRANGEELEMENTSPROC(glfwGetProcAddress("glDrawRangeElements"));
1554  glDrawRangeElementsBaseVertex = PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC(glfwGetProcAddress("glDrawRangeElementsBaseVertex"));
1555  glDrawTransformFeedback = PFNGLDRAWTRANSFORMFEEDBACKPROC(glfwGetProcAddress("glDrawTransformFeedback"));
1556  glDrawTransformFeedbackInstanced = PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC(glfwGetProcAddress("glDrawTransformFeedbackInstanced"));
1557  glDrawTransformFeedbackStream = PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC(glfwGetProcAddress("glDrawTransformFeedbackStream"));
1558  glDrawTransformFeedbackStreamInstanced = PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC(glfwGetProcAddress("glDrawTransformFeedbackStreamInstanced"));
1559  glDrawVkImageNV = PFNGLDRAWVKIMAGENVPROC(glfwGetProcAddress("glDrawVkImageNV"));
1560  glEdgeFlagFormatNV = PFNGLEDGEFLAGFORMATNVPROC(glfwGetProcAddress("glEdgeFlagFormatNV"));
1561  glEnable = PFNGLENABLEPROC(glfwGetProcAddress("glEnable"));
1562  glEnableClientStateIndexedEXT = PFNGLENABLECLIENTSTATEINDEXEDEXTPROC(glfwGetProcAddress("glEnableClientStateIndexedEXT"));
1563  glEnableClientStateiEXT = PFNGLENABLECLIENTSTATEIEXTPROC(glfwGetProcAddress("glEnableClientStateiEXT"));
1564  glEnableIndexedEXT = PFNGLENABLEINDEXEDEXTPROC(glfwGetProcAddress("glEnableIndexedEXT"));
1565  glEnableVertexArrayAttrib = PFNGLENABLEVERTEXARRAYATTRIBPROC(glfwGetProcAddress("glEnableVertexArrayAttrib"));
1566  glEnableVertexArrayAttribEXT = PFNGLENABLEVERTEXARRAYATTRIBEXTPROC(glfwGetProcAddress("glEnableVertexArrayAttribEXT"));
1567  glEnableVertexArrayEXT = PFNGLENABLEVERTEXARRAYEXTPROC(glfwGetProcAddress("glEnableVertexArrayEXT"));
1568  glEnableVertexAttribArray = PFNGLENABLEVERTEXATTRIBARRAYPROC(glfwGetProcAddress("glEnableVertexAttribArray"));
1569  glEnablei = PFNGLENABLEIPROC(glfwGetProcAddress("glEnablei"));
1570  glEndConditionalRender = PFNGLENDCONDITIONALRENDERPROC(glfwGetProcAddress("glEndConditionalRender"));
1571  glEndConditionalRenderNV = PFNGLENDCONDITIONALRENDERNVPROC(glfwGetProcAddress("glEndConditionalRenderNV"));
1572  glEndPerfMonitorAMD = PFNGLENDPERFMONITORAMDPROC(glfwGetProcAddress("glEndPerfMonitorAMD"));
1573  glEndPerfQueryINTEL = PFNGLENDPERFQUERYINTELPROC(glfwGetProcAddress("glEndPerfQueryINTEL"));
1574  glEndQuery = PFNGLENDQUERYPROC(glfwGetProcAddress("glEndQuery"));
1575  glEndQueryIndexed = PFNGLENDQUERYINDEXEDPROC(glfwGetProcAddress("glEndQueryIndexed"));
1576  glEndTransformFeedback = PFNGLENDTRANSFORMFEEDBACKPROC(glfwGetProcAddress("glEndTransformFeedback"));
1577  glEvaluateDepthValuesARB = PFNGLEVALUATEDEPTHVALUESARBPROC(glfwGetProcAddress("glEvaluateDepthValuesARB"));
1578  glFenceSync = PFNGLFENCESYNCPROC(glfwGetProcAddress("glFenceSync"));
1579  glFinish = PFNGLFINISHPROC(glfwGetProcAddress("glFinish"));
1580  glFlush = PFNGLFLUSHPROC(glfwGetProcAddress("glFlush"));
1581  glFlushMappedBufferRange = PFNGLFLUSHMAPPEDBUFFERRANGEPROC(glfwGetProcAddress("glFlushMappedBufferRange"));
1582  glFlushMappedNamedBufferRange = PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC(glfwGetProcAddress("glFlushMappedNamedBufferRange"));
1583  glFlushMappedNamedBufferRangeEXT = PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC(glfwGetProcAddress("glFlushMappedNamedBufferRangeEXT"));
1584  glFogCoordFormatNV = PFNGLFOGCOORDFORMATNVPROC(glfwGetProcAddress("glFogCoordFormatNV"));
1585  glFragmentCoverageColorNV = PFNGLFRAGMENTCOVERAGECOLORNVPROC(glfwGetProcAddress("glFragmentCoverageColorNV"));
1586  glFramebufferDrawBufferEXT = PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC(glfwGetProcAddress("glFramebufferDrawBufferEXT"));
1587  glFramebufferDrawBuffersEXT = PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC(glfwGetProcAddress("glFramebufferDrawBuffersEXT"));
1588  glFramebufferParameteri = PFNGLFRAMEBUFFERPARAMETERIPROC(glfwGetProcAddress("glFramebufferParameteri"));
1589  glFramebufferReadBufferEXT = PFNGLFRAMEBUFFERREADBUFFEREXTPROC(glfwGetProcAddress("glFramebufferReadBufferEXT"));
1590  glFramebufferRenderbuffer = PFNGLFRAMEBUFFERRENDERBUFFERPROC(glfwGetProcAddress("glFramebufferRenderbuffer"));
1591  glFramebufferSampleLocationsfvARB = PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC(glfwGetProcAddress("glFramebufferSampleLocationsfvARB"));
1592  glFramebufferSampleLocationsfvNV = PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC(glfwGetProcAddress("glFramebufferSampleLocationsfvNV"));
1593  glFramebufferTexture = PFNGLFRAMEBUFFERTEXTUREPROC(glfwGetProcAddress("glFramebufferTexture"));
1594  glFramebufferTexture1D = PFNGLFRAMEBUFFERTEXTURE1DPROC(glfwGetProcAddress("glFramebufferTexture1D"));
1595  glFramebufferTexture2D = PFNGLFRAMEBUFFERTEXTURE2DPROC(glfwGetProcAddress("glFramebufferTexture2D"));
1596  glFramebufferTexture3D = PFNGLFRAMEBUFFERTEXTURE3DPROC(glfwGetProcAddress("glFramebufferTexture3D"));
1597  glFramebufferTextureARB = PFNGLFRAMEBUFFERTEXTUREARBPROC(glfwGetProcAddress("glFramebufferTextureARB"));
1598  glFramebufferTextureFaceARB = PFNGLFRAMEBUFFERTEXTUREFACEARBPROC(glfwGetProcAddress("glFramebufferTextureFaceARB"));
1599  glFramebufferTextureLayer = PFNGLFRAMEBUFFERTEXTURELAYERPROC(glfwGetProcAddress("glFramebufferTextureLayer"));
1600  glFramebufferTextureLayerARB = PFNGLFRAMEBUFFERTEXTURELAYERARBPROC(glfwGetProcAddress("glFramebufferTextureLayerARB"));
1601  glFramebufferTextureMultiviewOVR = PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC(glfwGetProcAddress("glFramebufferTextureMultiviewOVR"));
1602  glFrontFace = PFNGLFRONTFACEPROC(glfwGetProcAddress("glFrontFace"));
1603  glGenBuffers = PFNGLGENBUFFERSPROC(glfwGetProcAddress("glGenBuffers"));
1604  glGenFramebuffers = PFNGLGENFRAMEBUFFERSPROC(glfwGetProcAddress("glGenFramebuffers"));
1605  glGenPathsNV = PFNGLGENPATHSNVPROC(glfwGetProcAddress("glGenPathsNV"));
1606  glGenPerfMonitorsAMD = PFNGLGENPERFMONITORSAMDPROC(glfwGetProcAddress("glGenPerfMonitorsAMD"));
1607  glGenProgramPipelines = PFNGLGENPROGRAMPIPELINESPROC(glfwGetProcAddress("glGenProgramPipelines"));
1608  glGenQueries = PFNGLGENQUERIESPROC(glfwGetProcAddress("glGenQueries"));
1609  glGenRenderbuffers = PFNGLGENRENDERBUFFERSPROC(glfwGetProcAddress("glGenRenderbuffers"));
1610  glGenSamplers = PFNGLGENSAMPLERSPROC(glfwGetProcAddress("glGenSamplers"));
1611  glGenTextures = PFNGLGENTEXTURESPROC(glfwGetProcAddress("glGenTextures"));
1612  glGenTransformFeedbacks = PFNGLGENTRANSFORMFEEDBACKSPROC(glfwGetProcAddress("glGenTransformFeedbacks"));
1613  glGenVertexArrays = PFNGLGENVERTEXARRAYSPROC(glfwGetProcAddress("glGenVertexArrays"));
1614  glGenerateMipmap = PFNGLGENERATEMIPMAPPROC(glfwGetProcAddress("glGenerateMipmap"));
1615  glGenerateMultiTexMipmapEXT = PFNGLGENERATEMULTITEXMIPMAPEXTPROC(glfwGetProcAddress("glGenerateMultiTexMipmapEXT"));
1616  glGenerateTextureMipmap = PFNGLGENERATETEXTUREMIPMAPPROC(glfwGetProcAddress("glGenerateTextureMipmap"));
1617  glGenerateTextureMipmapEXT = PFNGLGENERATETEXTUREMIPMAPEXTPROC(glfwGetProcAddress("glGenerateTextureMipmapEXT"));
1618  glGetActiveAtomicCounterBufferiv = PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC(glfwGetProcAddress("glGetActiveAtomicCounterBufferiv"));
1619  glGetActiveAttrib = PFNGLGETACTIVEATTRIBPROC(glfwGetProcAddress("glGetActiveAttrib"));
1620  glGetActiveSubroutineName = PFNGLGETACTIVESUBROUTINENAMEPROC(glfwGetProcAddress("glGetActiveSubroutineName"));
1621  glGetActiveSubroutineUniformName = PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC(glfwGetProcAddress("glGetActiveSubroutineUniformName"));
1622  glGetActiveSubroutineUniformiv = PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC(glfwGetProcAddress("glGetActiveSubroutineUniformiv"));
1623  glGetActiveUniform = PFNGLGETACTIVEUNIFORMPROC(glfwGetProcAddress("glGetActiveUniform"));
1624  glGetActiveUniformBlockName = PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC(glfwGetProcAddress("glGetActiveUniformBlockName"));
1625  glGetActiveUniformBlockiv = PFNGLGETACTIVEUNIFORMBLOCKIVPROC(glfwGetProcAddress("glGetActiveUniformBlockiv"));
1626  glGetActiveUniformName = PFNGLGETACTIVEUNIFORMNAMEPROC(glfwGetProcAddress("glGetActiveUniformName"));
1627  glGetActiveUniformsiv = PFNGLGETACTIVEUNIFORMSIVPROC(glfwGetProcAddress("glGetActiveUniformsiv"));
1628  glGetAttachedShaders = PFNGLGETATTACHEDSHADERSPROC(glfwGetProcAddress("glGetAttachedShaders"));
1629  glGetAttribLocation = PFNGLGETATTRIBLOCATIONPROC(glfwGetProcAddress("glGetAttribLocation"));
1630  glGetBooleanIndexedvEXT = PFNGLGETBOOLEANINDEXEDVEXTPROC(glfwGetProcAddress("glGetBooleanIndexedvEXT"));
1631  glGetBooleani_v = PFNGLGETBOOLEANI_VPROC(glfwGetProcAddress("glGetBooleani_v"));
1632  glGetBooleanv = PFNGLGETBOOLEANVPROC(glfwGetProcAddress("glGetBooleanv"));
1633  glGetBufferParameteri64v = PFNGLGETBUFFERPARAMETERI64VPROC(glfwGetProcAddress("glGetBufferParameteri64v"));
1634  glGetBufferParameteriv = PFNGLGETBUFFERPARAMETERIVPROC(glfwGetProcAddress("glGetBufferParameteriv"));
1635  glGetBufferParameterui64vNV = PFNGLGETBUFFERPARAMETERUI64VNVPROC(glfwGetProcAddress("glGetBufferParameterui64vNV"));
1636  glGetBufferPointerv = PFNGLGETBUFFERPOINTERVPROC(glfwGetProcAddress("glGetBufferPointerv"));
1637  glGetBufferSubData = PFNGLGETBUFFERSUBDATAPROC(glfwGetProcAddress("glGetBufferSubData"));
1638  glGetCommandHeaderNV = PFNGLGETCOMMANDHEADERNVPROC(glfwGetProcAddress("glGetCommandHeaderNV"));
1639  glGetCompressedMultiTexImageEXT = PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC(glfwGetProcAddress("glGetCompressedMultiTexImageEXT"));
1640  glGetCompressedTexImage = PFNGLGETCOMPRESSEDTEXIMAGEPROC(glfwGetProcAddress("glGetCompressedTexImage"));
1641  glGetCompressedTextureImage = PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC(glfwGetProcAddress("glGetCompressedTextureImage"));
1642  glGetCompressedTextureImageEXT = PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC(glfwGetProcAddress("glGetCompressedTextureImageEXT"));
1643  glGetCompressedTextureSubImage = PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC(glfwGetProcAddress("glGetCompressedTextureSubImage"));
1644  glGetCoverageModulationTableNV = PFNGLGETCOVERAGEMODULATIONTABLENVPROC(glfwGetProcAddress("glGetCoverageModulationTableNV"));
1645  glGetDebugMessageLog = PFNGLGETDEBUGMESSAGELOGPROC(glfwGetProcAddress("glGetDebugMessageLog"));
1646  glGetDebugMessageLogARB = PFNGLGETDEBUGMESSAGELOGARBPROC(glfwGetProcAddress("glGetDebugMessageLogARB"));
1647  glGetDoubleIndexedvEXT = PFNGLGETDOUBLEINDEXEDVEXTPROC(glfwGetProcAddress("glGetDoubleIndexedvEXT"));
1648  glGetDoublei_v = PFNGLGETDOUBLEI_VPROC(glfwGetProcAddress("glGetDoublei_v"));
1649  glGetDoublei_vEXT = PFNGLGETDOUBLEI_VEXTPROC(glfwGetProcAddress("glGetDoublei_vEXT"));
1650  glGetDoublev = PFNGLGETDOUBLEVPROC(glfwGetProcAddress("glGetDoublev"));
1651  glGetError = PFNGLGETERRORPROC(glfwGetProcAddress("glGetError"));
1652  glGetFirstPerfQueryIdINTEL = PFNGLGETFIRSTPERFQUERYIDINTELPROC(glfwGetProcAddress("glGetFirstPerfQueryIdINTEL"));
1653  glGetFloatIndexedvEXT = PFNGLGETFLOATINDEXEDVEXTPROC(glfwGetProcAddress("glGetFloatIndexedvEXT"));
1654  glGetFloati_v = PFNGLGETFLOATI_VPROC(glfwGetProcAddress("glGetFloati_v"));
1655  glGetFloati_vEXT = PFNGLGETFLOATI_VEXTPROC(glfwGetProcAddress("glGetFloati_vEXT"));
1656  glGetFloatv = PFNGLGETFLOATVPROC(glfwGetProcAddress("glGetFloatv"));
1657  glGetFragDataIndex = PFNGLGETFRAGDATAINDEXPROC(glfwGetProcAddress("glGetFragDataIndex"));
1658  glGetFragDataLocation = PFNGLGETFRAGDATALOCATIONPROC(glfwGetProcAddress("glGetFragDataLocation"));
1659  glGetFramebufferAttachmentParameteriv = PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC(glfwGetProcAddress("glGetFramebufferAttachmentParameteriv"));
1660  glGetFramebufferParameteriv = PFNGLGETFRAMEBUFFERPARAMETERIVPROC(glfwGetProcAddress("glGetFramebufferParameteriv"));
1661  glGetFramebufferParameterivEXT = PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC(glfwGetProcAddress("glGetFramebufferParameterivEXT"));
1662  glGetGraphicsResetStatus = PFNGLGETGRAPHICSRESETSTATUSPROC(glfwGetProcAddress("glGetGraphicsResetStatus"));
1663  glGetGraphicsResetStatusARB = PFNGLGETGRAPHICSRESETSTATUSARBPROC(glfwGetProcAddress("glGetGraphicsResetStatusARB"));
1664  glGetImageHandleARB = PFNGLGETIMAGEHANDLEARBPROC(glfwGetProcAddress("glGetImageHandleARB"));
1665  glGetImageHandleNV = PFNGLGETIMAGEHANDLENVPROC(glfwGetProcAddress("glGetImageHandleNV"));
1666  glGetInteger64i_v = PFNGLGETINTEGER64I_VPROC(glfwGetProcAddress("glGetInteger64i_v"));
1667  glGetInteger64v = PFNGLGETINTEGER64VPROC(glfwGetProcAddress("glGetInteger64v"));
1668  glGetIntegerIndexedvEXT = PFNGLGETINTEGERINDEXEDVEXTPROC(glfwGetProcAddress("glGetIntegerIndexedvEXT"));
1669  glGetIntegeri_v = PFNGLGETINTEGERI_VPROC(glfwGetProcAddress("glGetIntegeri_v"));
1670  glGetIntegerui64i_vNV = PFNGLGETINTEGERUI64I_VNVPROC(glfwGetProcAddress("glGetIntegerui64i_vNV"));
1671  glGetIntegerui64vNV = PFNGLGETINTEGERUI64VNVPROC(glfwGetProcAddress("glGetIntegerui64vNV"));
1672  glGetIntegerv = PFNGLGETINTEGERVPROC(glfwGetProcAddress("glGetIntegerv"));
1673  glGetInternalformatSampleivNV = PFNGLGETINTERNALFORMATSAMPLEIVNVPROC(glfwGetProcAddress("glGetInternalformatSampleivNV"));
1674  glGetInternalformati64v = PFNGLGETINTERNALFORMATI64VPROC(glfwGetProcAddress("glGetInternalformati64v"));
1675  glGetInternalformativ = PFNGLGETINTERNALFORMATIVPROC(glfwGetProcAddress("glGetInternalformativ"));
1676  glGetMultiTexEnvfvEXT = PFNGLGETMULTITEXENVFVEXTPROC(glfwGetProcAddress("glGetMultiTexEnvfvEXT"));
1677  glGetMultiTexEnvivEXT = PFNGLGETMULTITEXENVIVEXTPROC(glfwGetProcAddress("glGetMultiTexEnvivEXT"));
1678  glGetMultiTexGendvEXT = PFNGLGETMULTITEXGENDVEXTPROC(glfwGetProcAddress("glGetMultiTexGendvEXT"));
1679  glGetMultiTexGenfvEXT = PFNGLGETMULTITEXGENFVEXTPROC(glfwGetProcAddress("glGetMultiTexGenfvEXT"));
1680  glGetMultiTexGenivEXT = PFNGLGETMULTITEXGENIVEXTPROC(glfwGetProcAddress("glGetMultiTexGenivEXT"));
1681  glGetMultiTexImageEXT = PFNGLGETMULTITEXIMAGEEXTPROC(glfwGetProcAddress("glGetMultiTexImageEXT"));
1682  glGetMultiTexLevelParameterfvEXT = PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC(glfwGetProcAddress("glGetMultiTexLevelParameterfvEXT"));
1683  glGetMultiTexLevelParameterivEXT = PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC(glfwGetProcAddress("glGetMultiTexLevelParameterivEXT"));
1684  glGetMultiTexParameterIivEXT = PFNGLGETMULTITEXPARAMETERIIVEXTPROC(glfwGetProcAddress("glGetMultiTexParameterIivEXT"));
1685  glGetMultiTexParameterIuivEXT = PFNGLGETMULTITEXPARAMETERIUIVEXTPROC(glfwGetProcAddress("glGetMultiTexParameterIuivEXT"));
1686  glGetMultiTexParameterfvEXT = PFNGLGETMULTITEXPARAMETERFVEXTPROC(glfwGetProcAddress("glGetMultiTexParameterfvEXT"));
1687  glGetMultiTexParameterivEXT = PFNGLGETMULTITEXPARAMETERIVEXTPROC(glfwGetProcAddress("glGetMultiTexParameterivEXT"));
1688  glGetMultisamplefv = PFNGLGETMULTISAMPLEFVPROC(glfwGetProcAddress("glGetMultisamplefv"));
1689  glGetNamedBufferParameteri64v = PFNGLGETNAMEDBUFFERPARAMETERI64VPROC(glfwGetProcAddress("glGetNamedBufferParameteri64v"));
1690  glGetNamedBufferParameteriv = PFNGLGETNAMEDBUFFERPARAMETERIVPROC(glfwGetProcAddress("glGetNamedBufferParameteriv"));
1691  glGetNamedBufferParameterivEXT = PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC(glfwGetProcAddress("glGetNamedBufferParameterivEXT"));
1692  glGetNamedBufferParameterui64vNV = PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC(glfwGetProcAddress("glGetNamedBufferParameterui64vNV"));
1693  glGetNamedBufferPointerv = PFNGLGETNAMEDBUFFERPOINTERVPROC(glfwGetProcAddress("glGetNamedBufferPointerv"));
1694  glGetNamedBufferPointervEXT = PFNGLGETNAMEDBUFFERPOINTERVEXTPROC(glfwGetProcAddress("glGetNamedBufferPointervEXT"));
1695  glGetNamedBufferSubData = PFNGLGETNAMEDBUFFERSUBDATAPROC(glfwGetProcAddress("glGetNamedBufferSubData"));
1696  glGetNamedBufferSubDataEXT = PFNGLGETNAMEDBUFFERSUBDATAEXTPROC(glfwGetProcAddress("glGetNamedBufferSubDataEXT"));
1697  glGetNamedFramebufferAttachmentParameteriv = PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC(glfwGetProcAddress("glGetNamedFramebufferAttachmentParameteriv"));
1698  glGetNamedFramebufferAttachmentParameterivEXT = PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC(glfwGetProcAddress("glGetNamedFramebufferAttachmentParameterivEXT"));
1699  glGetNamedFramebufferParameteriv = PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC(glfwGetProcAddress("glGetNamedFramebufferParameteriv"));
1700  glGetNamedFramebufferParameterivEXT = PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC(glfwGetProcAddress("glGetNamedFramebufferParameterivEXT"));
1701  glGetNamedProgramLocalParameterIivEXT = PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC(glfwGetProcAddress("glGetNamedProgramLocalParameterIivEXT"));
1702  glGetNamedProgramLocalParameterIuivEXT = PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC(glfwGetProcAddress("glGetNamedProgramLocalParameterIuivEXT"));
1703  glGetNamedProgramLocalParameterdvEXT = PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC(glfwGetProcAddress("glGetNamedProgramLocalParameterdvEXT"));
1704  glGetNamedProgramLocalParameterfvEXT = PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC(glfwGetProcAddress("glGetNamedProgramLocalParameterfvEXT"));
1705  glGetNamedProgramStringEXT = PFNGLGETNAMEDPROGRAMSTRINGEXTPROC(glfwGetProcAddress("glGetNamedProgramStringEXT"));
1706  glGetNamedProgramivEXT = PFNGLGETNAMEDPROGRAMIVEXTPROC(glfwGetProcAddress("glGetNamedProgramivEXT"));
1707  glGetNamedRenderbufferParameteriv = PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC(glfwGetProcAddress("glGetNamedRenderbufferParameteriv"));
1708  glGetNamedRenderbufferParameterivEXT = PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC(glfwGetProcAddress("glGetNamedRenderbufferParameterivEXT"));
1709  glGetNamedStringARB = PFNGLGETNAMEDSTRINGARBPROC(glfwGetProcAddress("glGetNamedStringARB"));
1710  glGetNamedStringivARB = PFNGLGETNAMEDSTRINGIVARBPROC(glfwGetProcAddress("glGetNamedStringivARB"));
1711  glGetNextPerfQueryIdINTEL = PFNGLGETNEXTPERFQUERYIDINTELPROC(glfwGetProcAddress("glGetNextPerfQueryIdINTEL"));
1712  glGetObjectLabel = PFNGLGETOBJECTLABELPROC(glfwGetProcAddress("glGetObjectLabel"));
1713  glGetObjectLabelEXT = PFNGLGETOBJECTLABELEXTPROC(glfwGetProcAddress("glGetObjectLabelEXT"));
1714  glGetObjectPtrLabel = PFNGLGETOBJECTPTRLABELPROC(glfwGetProcAddress("glGetObjectPtrLabel"));
1715  glGetPathCommandsNV = PFNGLGETPATHCOMMANDSNVPROC(glfwGetProcAddress("glGetPathCommandsNV"));
1716  glGetPathCoordsNV = PFNGLGETPATHCOORDSNVPROC(glfwGetProcAddress("glGetPathCoordsNV"));
1717  glGetPathDashArrayNV = PFNGLGETPATHDASHARRAYNVPROC(glfwGetProcAddress("glGetPathDashArrayNV"));
1718  glGetPathLengthNV = PFNGLGETPATHLENGTHNVPROC(glfwGetProcAddress("glGetPathLengthNV"));
1719  glGetPathMetricRangeNV = PFNGLGETPATHMETRICRANGENVPROC(glfwGetProcAddress("glGetPathMetricRangeNV"));
1720  glGetPathMetricsNV = PFNGLGETPATHMETRICSNVPROC(glfwGetProcAddress("glGetPathMetricsNV"));
1721  glGetPathParameterfvNV = PFNGLGETPATHPARAMETERFVNVPROC(glfwGetProcAddress("glGetPathParameterfvNV"));
1722  glGetPathParameterivNV = PFNGLGETPATHPARAMETERIVNVPROC(glfwGetProcAddress("glGetPathParameterivNV"));
1723  glGetPathSpacingNV = PFNGLGETPATHSPACINGNVPROC(glfwGetProcAddress("glGetPathSpacingNV"));
1724  glGetPerfCounterInfoINTEL = PFNGLGETPERFCOUNTERINFOINTELPROC(glfwGetProcAddress("glGetPerfCounterInfoINTEL"));
1725  glGetPerfMonitorCounterDataAMD = PFNGLGETPERFMONITORCOUNTERDATAAMDPROC(glfwGetProcAddress("glGetPerfMonitorCounterDataAMD"));
1726  glGetPerfMonitorCounterInfoAMD = PFNGLGETPERFMONITORCOUNTERINFOAMDPROC(glfwGetProcAddress("glGetPerfMonitorCounterInfoAMD"));
1727  glGetPerfMonitorCounterStringAMD = PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC(glfwGetProcAddress("glGetPerfMonitorCounterStringAMD"));
1728  glGetPerfMonitorCountersAMD = PFNGLGETPERFMONITORCOUNTERSAMDPROC(glfwGetProcAddress("glGetPerfMonitorCountersAMD"));
1729  glGetPerfMonitorGroupStringAMD = PFNGLGETPERFMONITORGROUPSTRINGAMDPROC(glfwGetProcAddress("glGetPerfMonitorGroupStringAMD"));
1730  glGetPerfMonitorGroupsAMD = PFNGLGETPERFMONITORGROUPSAMDPROC(glfwGetProcAddress("glGetPerfMonitorGroupsAMD"));
1731  glGetPerfQueryDataINTEL = PFNGLGETPERFQUERYDATAINTELPROC(glfwGetProcAddress("glGetPerfQueryDataINTEL"));
1732  glGetPerfQueryIdByNameINTEL = PFNGLGETPERFQUERYIDBYNAMEINTELPROC(glfwGetProcAddress("glGetPerfQueryIdByNameINTEL"));
1733  glGetPerfQueryInfoINTEL = PFNGLGETPERFQUERYINFOINTELPROC(glfwGetProcAddress("glGetPerfQueryInfoINTEL"));
1734  glGetPointerIndexedvEXT = PFNGLGETPOINTERINDEXEDVEXTPROC(glfwGetProcAddress("glGetPointerIndexedvEXT"));
1735  glGetPointeri_vEXT = PFNGLGETPOINTERI_VEXTPROC(glfwGetProcAddress("glGetPointeri_vEXT"));
1736  glGetPointerv = PFNGLGETPOINTERVPROC(glfwGetProcAddress("glGetPointerv"));
1737  glGetProgramBinary = PFNGLGETPROGRAMBINARYPROC(glfwGetProcAddress("glGetProgramBinary"));
1738  glGetProgramInfoLog = PFNGLGETPROGRAMINFOLOGPROC(glfwGetProcAddress("glGetProgramInfoLog"));
1739  glGetProgramInterfaceiv = PFNGLGETPROGRAMINTERFACEIVPROC(glfwGetProcAddress("glGetProgramInterfaceiv"));
1740  glGetProgramPipelineInfoLog = PFNGLGETPROGRAMPIPELINEINFOLOGPROC(glfwGetProcAddress("glGetProgramPipelineInfoLog"));
1741  glGetProgramPipelineiv = PFNGLGETPROGRAMPIPELINEIVPROC(glfwGetProcAddress("glGetProgramPipelineiv"));
1742  glGetProgramResourceIndex = PFNGLGETPROGRAMRESOURCEINDEXPROC(glfwGetProcAddress("glGetProgramResourceIndex"));
1743  glGetProgramResourceLocation = PFNGLGETPROGRAMRESOURCELOCATIONPROC(glfwGetProcAddress("glGetProgramResourceLocation"));
1744  glGetProgramResourceLocationIndex = PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC(glfwGetProcAddress("glGetProgramResourceLocationIndex"));
1745  glGetProgramResourceName = PFNGLGETPROGRAMRESOURCENAMEPROC(glfwGetProcAddress("glGetProgramResourceName"));
1746  glGetProgramResourcefvNV = PFNGLGETPROGRAMRESOURCEFVNVPROC(glfwGetProcAddress("glGetProgramResourcefvNV"));
1747  glGetProgramResourceiv = PFNGLGETPROGRAMRESOURCEIVPROC(glfwGetProcAddress("glGetProgramResourceiv"));
1748  glGetProgramStageiv = PFNGLGETPROGRAMSTAGEIVPROC(glfwGetProcAddress("glGetProgramStageiv"));
1749  glGetProgramiv = PFNGLGETPROGRAMIVPROC(glfwGetProcAddress("glGetProgramiv"));
1750  glGetQueryBufferObjecti64v = PFNGLGETQUERYBUFFEROBJECTI64VPROC(glfwGetProcAddress("glGetQueryBufferObjecti64v"));
1751  glGetQueryBufferObjectiv = PFNGLGETQUERYBUFFEROBJECTIVPROC(glfwGetProcAddress("glGetQueryBufferObjectiv"));
1752  glGetQueryBufferObjectui64v = PFNGLGETQUERYBUFFEROBJECTUI64VPROC(glfwGetProcAddress("glGetQueryBufferObjectui64v"));
1753  glGetQueryBufferObjectuiv = PFNGLGETQUERYBUFFEROBJECTUIVPROC(glfwGetProcAddress("glGetQueryBufferObjectuiv"));
1754  glGetQueryIndexediv = PFNGLGETQUERYINDEXEDIVPROC(glfwGetProcAddress("glGetQueryIndexediv"));
1755  glGetQueryObjecti64v = PFNGLGETQUERYOBJECTI64VPROC(glfwGetProcAddress("glGetQueryObjecti64v"));
1756  glGetQueryObjectiv = PFNGLGETQUERYOBJECTIVPROC(glfwGetProcAddress("glGetQueryObjectiv"));
1757  glGetQueryObjectui64v = PFNGLGETQUERYOBJECTUI64VPROC(glfwGetProcAddress("glGetQueryObjectui64v"));
1758  glGetQueryObjectuiv = PFNGLGETQUERYOBJECTUIVPROC(glfwGetProcAddress("glGetQueryObjectuiv"));
1759  glGetQueryiv = PFNGLGETQUERYIVPROC(glfwGetProcAddress("glGetQueryiv"));
1760  glGetRenderbufferParameteriv = PFNGLGETRENDERBUFFERPARAMETERIVPROC(glfwGetProcAddress("glGetRenderbufferParameteriv"));
1761  glGetSamplerParameterIiv = PFNGLGETSAMPLERPARAMETERIIVPROC(glfwGetProcAddress("glGetSamplerParameterIiv"));
1762  glGetSamplerParameterIuiv = PFNGLGETSAMPLERPARAMETERIUIVPROC(glfwGetProcAddress("glGetSamplerParameterIuiv"));
1763  glGetSamplerParameterfv = PFNGLGETSAMPLERPARAMETERFVPROC(glfwGetProcAddress("glGetSamplerParameterfv"));
1764  glGetSamplerParameteriv = PFNGLGETSAMPLERPARAMETERIVPROC(glfwGetProcAddress("glGetSamplerParameteriv"));
1765  glGetShaderInfoLog = PFNGLGETSHADERINFOLOGPROC(glfwGetProcAddress("glGetShaderInfoLog"));
1766  glGetShaderPrecisionFormat = PFNGLGETSHADERPRECISIONFORMATPROC(glfwGetProcAddress("glGetShaderPrecisionFormat"));
1767  glGetShaderSource = PFNGLGETSHADERSOURCEPROC(glfwGetProcAddress("glGetShaderSource"));
1768  glGetShaderiv = PFNGLGETSHADERIVPROC(glfwGetProcAddress("glGetShaderiv"));
1769  glGetStageIndexNV = PFNGLGETSTAGEINDEXNVPROC(glfwGetProcAddress("glGetStageIndexNV"));
1770  glGetString = PFNGLGETSTRINGPROC(glfwGetProcAddress("glGetString"));
1771  glGetStringi = PFNGLGETSTRINGIPROC(glfwGetProcAddress("glGetStringi"));
1772  glGetSubroutineIndex = PFNGLGETSUBROUTINEINDEXPROC(glfwGetProcAddress("glGetSubroutineIndex"));
1773  glGetSubroutineUniformLocation = PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC(glfwGetProcAddress("glGetSubroutineUniformLocation"));
1774  glGetSynciv = PFNGLGETSYNCIVPROC(glfwGetProcAddress("glGetSynciv"));
1775  glGetTexImage = PFNGLGETTEXIMAGEPROC(glfwGetProcAddress("glGetTexImage"));
1776  glGetTexLevelParameterfv = PFNGLGETTEXLEVELPARAMETERFVPROC(glfwGetProcAddress("glGetTexLevelParameterfv"));
1777  glGetTexLevelParameteriv = PFNGLGETTEXLEVELPARAMETERIVPROC(glfwGetProcAddress("glGetTexLevelParameteriv"));
1778  glGetTexParameterIiv = PFNGLGETTEXPARAMETERIIVPROC(glfwGetProcAddress("glGetTexParameterIiv"));
1779  glGetTexParameterIuiv = PFNGLGETTEXPARAMETERIUIVPROC(glfwGetProcAddress("glGetTexParameterIuiv"));
1780  glGetTexParameterfv = PFNGLGETTEXPARAMETERFVPROC(glfwGetProcAddress("glGetTexParameterfv"));
1781  glGetTexParameteriv = PFNGLGETTEXPARAMETERIVPROC(glfwGetProcAddress("glGetTexParameteriv"));
1782  glGetTextureHandleARB = PFNGLGETTEXTUREHANDLEARBPROC(glfwGetProcAddress("glGetTextureHandleARB"));
1783  glGetTextureHandleNV = PFNGLGETTEXTUREHANDLENVPROC(glfwGetProcAddress("glGetTextureHandleNV"));
1784  glGetTextureImage = PFNGLGETTEXTUREIMAGEPROC(glfwGetProcAddress("glGetTextureImage"));
1785  glGetTextureImageEXT = PFNGLGETTEXTUREIMAGEEXTPROC(glfwGetProcAddress("glGetTextureImageEXT"));
1786  glGetTextureLevelParameterfv = PFNGLGETTEXTURELEVELPARAMETERFVPROC(glfwGetProcAddress("glGetTextureLevelParameterfv"));
1787  glGetTextureLevelParameterfvEXT = PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC(glfwGetProcAddress("glGetTextureLevelParameterfvEXT"));
1788  glGetTextureLevelParameteriv = PFNGLGETTEXTURELEVELPARAMETERIVPROC(glfwGetProcAddress("glGetTextureLevelParameteriv"));
1789  glGetTextureLevelParameterivEXT = PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC(glfwGetProcAddress("glGetTextureLevelParameterivEXT"));
1790  glGetTextureParameterIiv = PFNGLGETTEXTUREPARAMETERIIVPROC(glfwGetProcAddress("glGetTextureParameterIiv"));
1791  glGetTextureParameterIivEXT = PFNGLGETTEXTUREPARAMETERIIVEXTPROC(glfwGetProcAddress("glGetTextureParameterIivEXT"));
1792  glGetTextureParameterIuiv = PFNGLGETTEXTUREPARAMETERIUIVPROC(glfwGetProcAddress("glGetTextureParameterIuiv"));
1793  glGetTextureParameterIuivEXT = PFNGLGETTEXTUREPARAMETERIUIVEXTPROC(glfwGetProcAddress("glGetTextureParameterIuivEXT"));
1794  glGetTextureParameterfv = PFNGLGETTEXTUREPARAMETERFVPROC(glfwGetProcAddress("glGetTextureParameterfv"));
1795  glGetTextureParameterfvEXT = PFNGLGETTEXTUREPARAMETERFVEXTPROC(glfwGetProcAddress("glGetTextureParameterfvEXT"));
1796  glGetTextureParameteriv = PFNGLGETTEXTUREPARAMETERIVPROC(glfwGetProcAddress("glGetTextureParameteriv"));
1797  glGetTextureParameterivEXT = PFNGLGETTEXTUREPARAMETERIVEXTPROC(glfwGetProcAddress("glGetTextureParameterivEXT"));
1798  glGetTextureSamplerHandleARB = PFNGLGETTEXTURESAMPLERHANDLEARBPROC(glfwGetProcAddress("glGetTextureSamplerHandleARB"));
1799  glGetTextureSamplerHandleNV = PFNGLGETTEXTURESAMPLERHANDLENVPROC(glfwGetProcAddress("glGetTextureSamplerHandleNV"));
1800  glGetTextureSubImage = PFNGLGETTEXTURESUBIMAGEPROC(glfwGetProcAddress("glGetTextureSubImage"));
1801  glGetTransformFeedbackVarying = PFNGLGETTRANSFORMFEEDBACKVARYINGPROC(glfwGetProcAddress("glGetTransformFeedbackVarying"));
1802  glGetTransformFeedbacki64_v = PFNGLGETTRANSFORMFEEDBACKI64_VPROC(glfwGetProcAddress("glGetTransformFeedbacki64_v"));
1803  glGetTransformFeedbacki_v = PFNGLGETTRANSFORMFEEDBACKI_VPROC(glfwGetProcAddress("glGetTransformFeedbacki_v"));
1804  glGetTransformFeedbackiv = PFNGLGETTRANSFORMFEEDBACKIVPROC(glfwGetProcAddress("glGetTransformFeedbackiv"));
1805  glGetUniformBlockIndex = PFNGLGETUNIFORMBLOCKINDEXPROC(glfwGetProcAddress("glGetUniformBlockIndex"));
1806  glGetUniformIndices = PFNGLGETUNIFORMINDICESPROC(glfwGetProcAddress("glGetUniformIndices"));
1807  glGetUniformLocation = PFNGLGETUNIFORMLOCATIONPROC(glfwGetProcAddress("glGetUniformLocation"));
1808  glGetUniformSubroutineuiv = PFNGLGETUNIFORMSUBROUTINEUIVPROC(glfwGetProcAddress("glGetUniformSubroutineuiv"));
1809  glGetUniformdv = PFNGLGETUNIFORMDVPROC(glfwGetProcAddress("glGetUniformdv"));
1810  glGetUniformfv = PFNGLGETUNIFORMFVPROC(glfwGetProcAddress("glGetUniformfv"));
1811  glGetUniformi64vARB = PFNGLGETUNIFORMI64VARBPROC(glfwGetProcAddress("glGetUniformi64vARB"));
1812  glGetUniformi64vNV = PFNGLGETUNIFORMI64VNVPROC(glfwGetProcAddress("glGetUniformi64vNV"));
1813  glGetUniformiv = PFNGLGETUNIFORMIVPROC(glfwGetProcAddress("glGetUniformiv"));
1814  glGetUniformui64vARB = PFNGLGETUNIFORMUI64VARBPROC(glfwGetProcAddress("glGetUniformui64vARB"));
1815  glGetUniformui64vNV = PFNGLGETUNIFORMUI64VNVPROC(glfwGetProcAddress("glGetUniformui64vNV"));
1816  glGetUniformuiv = PFNGLGETUNIFORMUIVPROC(glfwGetProcAddress("glGetUniformuiv"));
1817  glGetVertexArrayIndexed64iv = PFNGLGETVERTEXARRAYINDEXED64IVPROC(glfwGetProcAddress("glGetVertexArrayIndexed64iv"));
1818  glGetVertexArrayIndexediv = PFNGLGETVERTEXARRAYINDEXEDIVPROC(glfwGetProcAddress("glGetVertexArrayIndexediv"));
1819  glGetVertexArrayIntegeri_vEXT = PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC(glfwGetProcAddress("glGetVertexArrayIntegeri_vEXT"));
1820  glGetVertexArrayIntegervEXT = PFNGLGETVERTEXARRAYINTEGERVEXTPROC(glfwGetProcAddress("glGetVertexArrayIntegervEXT"));
1821  glGetVertexArrayPointeri_vEXT = PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC(glfwGetProcAddress("glGetVertexArrayPointeri_vEXT"));
1822  glGetVertexArrayPointervEXT = PFNGLGETVERTEXARRAYPOINTERVEXTPROC(glfwGetProcAddress("glGetVertexArrayPointervEXT"));
1823  glGetVertexArrayiv = PFNGLGETVERTEXARRAYIVPROC(glfwGetProcAddress("glGetVertexArrayiv"));
1824  glGetVertexAttribIiv = PFNGLGETVERTEXATTRIBIIVPROC(glfwGetProcAddress("glGetVertexAttribIiv"));
1825  glGetVertexAttribIuiv = PFNGLGETVERTEXATTRIBIUIVPROC(glfwGetProcAddress("glGetVertexAttribIuiv"));
1826  glGetVertexAttribLdv = PFNGLGETVERTEXATTRIBLDVPROC(glfwGetProcAddress("glGetVertexAttribLdv"));
1827  glGetVertexAttribLi64vNV = PFNGLGETVERTEXATTRIBLI64VNVPROC(glfwGetProcAddress("glGetVertexAttribLi64vNV"));
1828  glGetVertexAttribLui64vARB = PFNGLGETVERTEXATTRIBLUI64VARBPROC(glfwGetProcAddress("glGetVertexAttribLui64vARB"));
1829  glGetVertexAttribLui64vNV = PFNGLGETVERTEXATTRIBLUI64VNVPROC(glfwGetProcAddress("glGetVertexAttribLui64vNV"));
1830  glGetVertexAttribPointerv = PFNGLGETVERTEXATTRIBPOINTERVPROC(glfwGetProcAddress("glGetVertexAttribPointerv"));
1831  glGetVertexAttribdv = PFNGLGETVERTEXATTRIBDVPROC(glfwGetProcAddress("glGetVertexAttribdv"));
1832  glGetVertexAttribfv = PFNGLGETVERTEXATTRIBFVPROC(glfwGetProcAddress("glGetVertexAttribfv"));
1833  glGetVertexAttribiv = PFNGLGETVERTEXATTRIBIVPROC(glfwGetProcAddress("glGetVertexAttribiv"));
1834  glGetVkProcAddrNV = PFNGLGETVKPROCADDRNVPROC(glfwGetProcAddress("glGetVkProcAddrNV"));
1835  glGetnCompressedTexImage = PFNGLGETNCOMPRESSEDTEXIMAGEPROC(glfwGetProcAddress("glGetnCompressedTexImage"));
1836  glGetnCompressedTexImageARB = PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC(glfwGetProcAddress("glGetnCompressedTexImageARB"));
1837  glGetnTexImage = PFNGLGETNTEXIMAGEPROC(glfwGetProcAddress("glGetnTexImage"));
1838  glGetnTexImageARB = PFNGLGETNTEXIMAGEARBPROC(glfwGetProcAddress("glGetnTexImageARB"));
1839  glGetnUniformdv = PFNGLGETNUNIFORMDVPROC(glfwGetProcAddress("glGetnUniformdv"));
1840  glGetnUniformdvARB = PFNGLGETNUNIFORMDVARBPROC(glfwGetProcAddress("glGetnUniformdvARB"));
1841  glGetnUniformfv = PFNGLGETNUNIFORMFVPROC(glfwGetProcAddress("glGetnUniformfv"));
1842  glGetnUniformfvARB = PFNGLGETNUNIFORMFVARBPROC(glfwGetProcAddress("glGetnUniformfvARB"));
1843  glGetnUniformi64vARB = PFNGLGETNUNIFORMI64VARBPROC(glfwGetProcAddress("glGetnUniformi64vARB"));
1844  glGetnUniformiv = PFNGLGETNUNIFORMIVPROC(glfwGetProcAddress("glGetnUniformiv"));
1845  glGetnUniformivARB = PFNGLGETNUNIFORMIVARBPROC(glfwGetProcAddress("glGetnUniformivARB"));
1846  glGetnUniformui64vARB = PFNGLGETNUNIFORMUI64VARBPROC(glfwGetProcAddress("glGetnUniformui64vARB"));
1847  glGetnUniformuiv = PFNGLGETNUNIFORMUIVPROC(glfwGetProcAddress("glGetnUniformuiv"));
1848  glGetnUniformuivARB = PFNGLGETNUNIFORMUIVARBPROC(glfwGetProcAddress("glGetnUniformuivARB"));
1849  glHint = PFNGLHINTPROC(glfwGetProcAddress("glHint"));
1850  glIndexFormatNV = PFNGLINDEXFORMATNVPROC(glfwGetProcAddress("glIndexFormatNV"));
1851  glInsertEventMarkerEXT = PFNGLINSERTEVENTMARKEREXTPROC(glfwGetProcAddress("glInsertEventMarkerEXT"));
1852  glInterpolatePathsNV = PFNGLINTERPOLATEPATHSNVPROC(glfwGetProcAddress("glInterpolatePathsNV"));
1853  glInvalidateBufferData = PFNGLINVALIDATEBUFFERDATAPROC(glfwGetProcAddress("glInvalidateBufferData"));
1854  glInvalidateBufferSubData = PFNGLINVALIDATEBUFFERSUBDATAPROC(glfwGetProcAddress("glInvalidateBufferSubData"));
1855  glInvalidateFramebuffer = PFNGLINVALIDATEFRAMEBUFFERPROC(glfwGetProcAddress("glInvalidateFramebuffer"));
1856  glInvalidateNamedFramebufferData = PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC(glfwGetProcAddress("glInvalidateNamedFramebufferData"));
1857  glInvalidateNamedFramebufferSubData = PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC(glfwGetProcAddress("glInvalidateNamedFramebufferSubData"));
1858  glInvalidateSubFramebuffer = PFNGLINVALIDATESUBFRAMEBUFFERPROC(glfwGetProcAddress("glInvalidateSubFramebuffer"));
1859  glInvalidateTexImage = PFNGLINVALIDATETEXIMAGEPROC(glfwGetProcAddress("glInvalidateTexImage"));
1860  glInvalidateTexSubImage = PFNGLINVALIDATETEXSUBIMAGEPROC(glfwGetProcAddress("glInvalidateTexSubImage"));
1861  glIsBuffer = PFNGLISBUFFERPROC(glfwGetProcAddress("glIsBuffer"));
1862  glIsBufferResidentNV = PFNGLISBUFFERRESIDENTNVPROC(glfwGetProcAddress("glIsBufferResidentNV"));
1863  glIsCommandListNV = PFNGLISCOMMANDLISTNVPROC(glfwGetProcAddress("glIsCommandListNV"));
1864  glIsEnabled = PFNGLISENABLEDPROC(glfwGetProcAddress("glIsEnabled"));
1865  glIsEnabledIndexedEXT = PFNGLISENABLEDINDEXEDEXTPROC(glfwGetProcAddress("glIsEnabledIndexedEXT"));
1866  glIsEnabledi = PFNGLISENABLEDIPROC(glfwGetProcAddress("glIsEnabledi"));
1867  glIsFramebuffer = PFNGLISFRAMEBUFFERPROC(glfwGetProcAddress("glIsFramebuffer"));
1868  glIsImageHandleResidentARB = PFNGLISIMAGEHANDLERESIDENTARBPROC(glfwGetProcAddress("glIsImageHandleResidentARB"));
1869  glIsImageHandleResidentNV = PFNGLISIMAGEHANDLERESIDENTNVPROC(glfwGetProcAddress("glIsImageHandleResidentNV"));
1870  glIsNamedBufferResidentNV = PFNGLISNAMEDBUFFERRESIDENTNVPROC(glfwGetProcAddress("glIsNamedBufferResidentNV"));
1871  glIsNamedStringARB = PFNGLISNAMEDSTRINGARBPROC(glfwGetProcAddress("glIsNamedStringARB"));
1872  glIsPathNV = PFNGLISPATHNVPROC(glfwGetProcAddress("glIsPathNV"));
1873  glIsPointInFillPathNV = PFNGLISPOINTINFILLPATHNVPROC(glfwGetProcAddress("glIsPointInFillPathNV"));
1874  glIsPointInStrokePathNV = PFNGLISPOINTINSTROKEPATHNVPROC(glfwGetProcAddress("glIsPointInStrokePathNV"));
1875  glIsProgram = PFNGLISPROGRAMPROC(glfwGetProcAddress("glIsProgram"));
1876  glIsProgramPipeline = PFNGLISPROGRAMPIPELINEPROC(glfwGetProcAddress("glIsProgramPipeline"));
1877  glIsQuery = PFNGLISQUERYPROC(glfwGetProcAddress("glIsQuery"));
1878  glIsRenderbuffer = PFNGLISRENDERBUFFERPROC(glfwGetProcAddress("glIsRenderbuffer"));
1879  glIsSampler = PFNGLISSAMPLERPROC(glfwGetProcAddress("glIsSampler"));
1880  glIsShader = PFNGLISSHADERPROC(glfwGetProcAddress("glIsShader"));
1881  glIsStateNV = PFNGLISSTATENVPROC(glfwGetProcAddress("glIsStateNV"));
1882  glIsSync = PFNGLISSYNCPROC(glfwGetProcAddress("glIsSync"));
1883  glIsTexture = PFNGLISTEXTUREPROC(glfwGetProcAddress("glIsTexture"));
1884  glIsTextureHandleResidentARB = PFNGLISTEXTUREHANDLERESIDENTARBPROC(glfwGetProcAddress("glIsTextureHandleResidentARB"));
1885  glIsTextureHandleResidentNV = PFNGLISTEXTUREHANDLERESIDENTNVPROC(glfwGetProcAddress("glIsTextureHandleResidentNV"));
1886  glIsTransformFeedback = PFNGLISTRANSFORMFEEDBACKPROC(glfwGetProcAddress("glIsTransformFeedback"));
1887  glIsVertexArray = PFNGLISVERTEXARRAYPROC(glfwGetProcAddress("glIsVertexArray"));
1888  glLabelObjectEXT = PFNGLLABELOBJECTEXTPROC(glfwGetProcAddress("glLabelObjectEXT"));
1889  glLineWidth = PFNGLLINEWIDTHPROC(glfwGetProcAddress("glLineWidth"));
1890  glLinkProgram = PFNGLLINKPROGRAMPROC(glfwGetProcAddress("glLinkProgram"));
1891  glListDrawCommandsStatesClientNV = PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC(glfwGetProcAddress("glListDrawCommandsStatesClientNV"));
1892  glLogicOp = PFNGLLOGICOPPROC(glfwGetProcAddress("glLogicOp"));
1893  glMakeBufferNonResidentNV = PFNGLMAKEBUFFERNONRESIDENTNVPROC(glfwGetProcAddress("glMakeBufferNonResidentNV"));
1894  glMakeBufferResidentNV = PFNGLMAKEBUFFERRESIDENTNVPROC(glfwGetProcAddress("glMakeBufferResidentNV"));
1895  glMakeImageHandleNonResidentARB = PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC(glfwGetProcAddress("glMakeImageHandleNonResidentARB"));
1896  glMakeImageHandleNonResidentNV = PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC(glfwGetProcAddress("glMakeImageHandleNonResidentNV"));
1897  glMakeImageHandleResidentARB = PFNGLMAKEIMAGEHANDLERESIDENTARBPROC(glfwGetProcAddress("glMakeImageHandleResidentARB"));
1898  glMakeImageHandleResidentNV = PFNGLMAKEIMAGEHANDLERESIDENTNVPROC(glfwGetProcAddress("glMakeImageHandleResidentNV"));
1899  glMakeNamedBufferNonResidentNV = PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC(glfwGetProcAddress("glMakeNamedBufferNonResidentNV"));
1900  glMakeNamedBufferResidentNV = PFNGLMAKENAMEDBUFFERRESIDENTNVPROC(glfwGetProcAddress("glMakeNamedBufferResidentNV"));
1901  glMakeTextureHandleNonResidentARB = PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC(glfwGetProcAddress("glMakeTextureHandleNonResidentARB"));
1902  glMakeTextureHandleNonResidentNV = PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC(glfwGetProcAddress("glMakeTextureHandleNonResidentNV"));
1903  glMakeTextureHandleResidentARB = PFNGLMAKETEXTUREHANDLERESIDENTARBPROC(glfwGetProcAddress("glMakeTextureHandleResidentARB"));
1904  glMakeTextureHandleResidentNV = PFNGLMAKETEXTUREHANDLERESIDENTNVPROC(glfwGetProcAddress("glMakeTextureHandleResidentNV"));
1905  glMapBuffer = PFNGLMAPBUFFERPROC(glfwGetProcAddress("glMapBuffer"));
1906  glMapBufferRange = PFNGLMAPBUFFERRANGEPROC(glfwGetProcAddress("glMapBufferRange"));
1907  glMapNamedBuffer = PFNGLMAPNAMEDBUFFERPROC(glfwGetProcAddress("glMapNamedBuffer"));
1908  glMapNamedBufferEXT = PFNGLMAPNAMEDBUFFEREXTPROC(glfwGetProcAddress("glMapNamedBufferEXT"));
1909  glMapNamedBufferRange = PFNGLMAPNAMEDBUFFERRANGEPROC(glfwGetProcAddress("glMapNamedBufferRange"));
1910  glMapNamedBufferRangeEXT = PFNGLMAPNAMEDBUFFERRANGEEXTPROC(glfwGetProcAddress("glMapNamedBufferRangeEXT"));
1911  glMatrixFrustumEXT = PFNGLMATRIXFRUSTUMEXTPROC(glfwGetProcAddress("glMatrixFrustumEXT"));
1912  glMatrixLoad3x2fNV = PFNGLMATRIXLOAD3X2FNVPROC(glfwGetProcAddress("glMatrixLoad3x2fNV"));
1913  glMatrixLoad3x3fNV = PFNGLMATRIXLOAD3X3FNVPROC(glfwGetProcAddress("glMatrixLoad3x3fNV"));
1914  glMatrixLoadIdentityEXT = PFNGLMATRIXLOADIDENTITYEXTPROC(glfwGetProcAddress("glMatrixLoadIdentityEXT"));
1915  glMatrixLoadTranspose3x3fNV = PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC(glfwGetProcAddress("glMatrixLoadTranspose3x3fNV"));
1916  glMatrixLoadTransposedEXT = PFNGLMATRIXLOADTRANSPOSEDEXTPROC(glfwGetProcAddress("glMatrixLoadTransposedEXT"));
1917  glMatrixLoadTransposefEXT = PFNGLMATRIXLOADTRANSPOSEFEXTPROC(glfwGetProcAddress("glMatrixLoadTransposefEXT"));
1918  glMatrixLoaddEXT = PFNGLMATRIXLOADDEXTPROC(glfwGetProcAddress("glMatrixLoaddEXT"));
1919  glMatrixLoadfEXT = PFNGLMATRIXLOADFEXTPROC(glfwGetProcAddress("glMatrixLoadfEXT"));
1920  glMatrixMult3x2fNV = PFNGLMATRIXMULT3X2FNVPROC(glfwGetProcAddress("glMatrixMult3x2fNV"));
1921  glMatrixMult3x3fNV = PFNGLMATRIXMULT3X3FNVPROC(glfwGetProcAddress("glMatrixMult3x3fNV"));
1922  glMatrixMultTranspose3x3fNV = PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC(glfwGetProcAddress("glMatrixMultTranspose3x3fNV"));
1923  glMatrixMultTransposedEXT = PFNGLMATRIXMULTTRANSPOSEDEXTPROC(glfwGetProcAddress("glMatrixMultTransposedEXT"));
1924  glMatrixMultTransposefEXT = PFNGLMATRIXMULTTRANSPOSEFEXTPROC(glfwGetProcAddress("glMatrixMultTransposefEXT"));
1925  glMatrixMultdEXT = PFNGLMATRIXMULTDEXTPROC(glfwGetProcAddress("glMatrixMultdEXT"));
1926  glMatrixMultfEXT = PFNGLMATRIXMULTFEXTPROC(glfwGetProcAddress("glMatrixMultfEXT"));
1927  glMatrixOrthoEXT = PFNGLMATRIXORTHOEXTPROC(glfwGetProcAddress("glMatrixOrthoEXT"));
1928  glMatrixPopEXT = PFNGLMATRIXPOPEXTPROC(glfwGetProcAddress("glMatrixPopEXT"));
1929  glMatrixPushEXT = PFNGLMATRIXPUSHEXTPROC(glfwGetProcAddress("glMatrixPushEXT"));
1930  glMatrixRotatedEXT = PFNGLMATRIXROTATEDEXTPROC(glfwGetProcAddress("glMatrixRotatedEXT"));
1931  glMatrixRotatefEXT = PFNGLMATRIXROTATEFEXTPROC(glfwGetProcAddress("glMatrixRotatefEXT"));
1932  glMatrixScaledEXT = PFNGLMATRIXSCALEDEXTPROC(glfwGetProcAddress("glMatrixScaledEXT"));
1933  glMatrixScalefEXT = PFNGLMATRIXSCALEFEXTPROC(glfwGetProcAddress("glMatrixScalefEXT"));
1934  glMatrixTranslatedEXT = PFNGLMATRIXTRANSLATEDEXTPROC(glfwGetProcAddress("glMatrixTranslatedEXT"));
1935  glMatrixTranslatefEXT = PFNGLMATRIXTRANSLATEFEXTPROC(glfwGetProcAddress("glMatrixTranslatefEXT"));
1936  glMaxShaderCompilerThreadsARB = PFNGLMAXSHADERCOMPILERTHREADSARBPROC(glfwGetProcAddress("glMaxShaderCompilerThreadsARB"));
1937  glMemoryBarrier = PFNGLMEMORYBARRIERPROC(glfwGetProcAddress("glMemoryBarrier"));
1938  glMemoryBarrierByRegion = PFNGLMEMORYBARRIERBYREGIONPROC(glfwGetProcAddress("glMemoryBarrierByRegion"));
1939  glMinSampleShading = PFNGLMINSAMPLESHADINGPROC(glfwGetProcAddress("glMinSampleShading"));
1940  glMinSampleShadingARB = PFNGLMINSAMPLESHADINGARBPROC(glfwGetProcAddress("glMinSampleShadingARB"));
1941  glMultiDrawArrays = PFNGLMULTIDRAWARRAYSPROC(glfwGetProcAddress("glMultiDrawArrays"));
1942  glMultiDrawArraysIndirect = PFNGLMULTIDRAWARRAYSINDIRECTPROC(glfwGetProcAddress("glMultiDrawArraysIndirect"));
1943  glMultiDrawArraysIndirectBindlessCountNV = PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC(glfwGetProcAddress("glMultiDrawArraysIndirectBindlessCountNV"));
1944  glMultiDrawArraysIndirectBindlessNV = PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC(glfwGetProcAddress("glMultiDrawArraysIndirectBindlessNV"));
1945  glMultiDrawArraysIndirectCountARB = PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC(glfwGetProcAddress("glMultiDrawArraysIndirectCountARB"));
1946  glMultiDrawElements = PFNGLMULTIDRAWELEMENTSPROC(glfwGetProcAddress("glMultiDrawElements"));
1947  glMultiDrawElementsBaseVertex = PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC(glfwGetProcAddress("glMultiDrawElementsBaseVertex"));
1948  glMultiDrawElementsIndirect = PFNGLMULTIDRAWELEMENTSINDIRECTPROC(glfwGetProcAddress("glMultiDrawElementsIndirect"));
1949  glMultiDrawElementsIndirectBindlessCountNV = PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC(glfwGetProcAddress("glMultiDrawElementsIndirectBindlessCountNV"));
1950  glMultiDrawElementsIndirectBindlessNV = PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC(glfwGetProcAddress("glMultiDrawElementsIndirectBindlessNV"));
1951  glMultiDrawElementsIndirectCountARB = PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC(glfwGetProcAddress("glMultiDrawElementsIndirectCountARB"));
1952  glMultiTexBufferEXT = PFNGLMULTITEXBUFFEREXTPROC(glfwGetProcAddress("glMultiTexBufferEXT"));
1953  glMultiTexCoordPointerEXT = PFNGLMULTITEXCOORDPOINTEREXTPROC(glfwGetProcAddress("glMultiTexCoordPointerEXT"));
1954  glMultiTexEnvfEXT = PFNGLMULTITEXENVFEXTPROC(glfwGetProcAddress("glMultiTexEnvfEXT"));
1955  glMultiTexEnvfvEXT = PFNGLMULTITEXENVFVEXTPROC(glfwGetProcAddress("glMultiTexEnvfvEXT"));
1956  glMultiTexEnviEXT = PFNGLMULTITEXENVIEXTPROC(glfwGetProcAddress("glMultiTexEnviEXT"));
1957  glMultiTexEnvivEXT = PFNGLMULTITEXENVIVEXTPROC(glfwGetProcAddress("glMultiTexEnvivEXT"));
1958  glMultiTexGendEXT = PFNGLMULTITEXGENDEXTPROC(glfwGetProcAddress("glMultiTexGendEXT"));
1959  glMultiTexGendvEXT = PFNGLMULTITEXGENDVEXTPROC(glfwGetProcAddress("glMultiTexGendvEXT"));
1960  glMultiTexGenfEXT = PFNGLMULTITEXGENFEXTPROC(glfwGetProcAddress("glMultiTexGenfEXT"));
1961  glMultiTexGenfvEXT = PFNGLMULTITEXGENFVEXTPROC(glfwGetProcAddress("glMultiTexGenfvEXT"));
1962  glMultiTexGeniEXT = PFNGLMULTITEXGENIEXTPROC(glfwGetProcAddress("glMultiTexGeniEXT"));
1963  glMultiTexGenivEXT = PFNGLMULTITEXGENIVEXTPROC(glfwGetProcAddress("glMultiTexGenivEXT"));
1964  glMultiTexImage1DEXT = PFNGLMULTITEXIMAGE1DEXTPROC(glfwGetProcAddress("glMultiTexImage1DEXT"));
1965  glMultiTexImage2DEXT = PFNGLMULTITEXIMAGE2DEXTPROC(glfwGetProcAddress("glMultiTexImage2DEXT"));
1966  glMultiTexImage3DEXT = PFNGLMULTITEXIMAGE3DEXTPROC(glfwGetProcAddress("glMultiTexImage3DEXT"));
1967  glMultiTexParameterIivEXT = PFNGLMULTITEXPARAMETERIIVEXTPROC(glfwGetProcAddress("glMultiTexParameterIivEXT"));
1968  glMultiTexParameterIuivEXT = PFNGLMULTITEXPARAMETERIUIVEXTPROC(glfwGetProcAddress("glMultiTexParameterIuivEXT"));
1969  glMultiTexParameterfEXT = PFNGLMULTITEXPARAMETERFEXTPROC(glfwGetProcAddress("glMultiTexParameterfEXT"));
1970  glMultiTexParameterfvEXT = PFNGLMULTITEXPARAMETERFVEXTPROC(glfwGetProcAddress("glMultiTexParameterfvEXT"));
1971  glMultiTexParameteriEXT = PFNGLMULTITEXPARAMETERIEXTPROC(glfwGetProcAddress("glMultiTexParameteriEXT"));
1972  glMultiTexParameterivEXT = PFNGLMULTITEXPARAMETERIVEXTPROC(glfwGetProcAddress("glMultiTexParameterivEXT"));
1973  glMultiTexRenderbufferEXT = PFNGLMULTITEXRENDERBUFFEREXTPROC(glfwGetProcAddress("glMultiTexRenderbufferEXT"));
1974  glMultiTexSubImage1DEXT = PFNGLMULTITEXSUBIMAGE1DEXTPROC(glfwGetProcAddress("glMultiTexSubImage1DEXT"));
1975  glMultiTexSubImage2DEXT = PFNGLMULTITEXSUBIMAGE2DEXTPROC(glfwGetProcAddress("glMultiTexSubImage2DEXT"));
1976  glMultiTexSubImage3DEXT = PFNGLMULTITEXSUBIMAGE3DEXTPROC(glfwGetProcAddress("glMultiTexSubImage3DEXT"));
1977  glNamedBufferData = PFNGLNAMEDBUFFERDATAPROC(glfwGetProcAddress("glNamedBufferData"));
1978  glNamedBufferDataEXT = PFNGLNAMEDBUFFERDATAEXTPROC(glfwGetProcAddress("glNamedBufferDataEXT"));
1979  glNamedBufferPageCommitmentARB = PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC(glfwGetProcAddress("glNamedBufferPageCommitmentARB"));
1980  glNamedBufferPageCommitmentEXT = PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC(glfwGetProcAddress("glNamedBufferPageCommitmentEXT"));
1981  glNamedBufferStorage = PFNGLNAMEDBUFFERSTORAGEPROC(glfwGetProcAddress("glNamedBufferStorage"));
1982  glNamedBufferStorageEXT = PFNGLNAMEDBUFFERSTORAGEEXTPROC(glfwGetProcAddress("glNamedBufferStorageEXT"));
1983  glNamedBufferSubData = PFNGLNAMEDBUFFERSUBDATAPROC(glfwGetProcAddress("glNamedBufferSubData"));
1984  glNamedBufferSubDataEXT = PFNGLNAMEDBUFFERSUBDATAEXTPROC(glfwGetProcAddress("glNamedBufferSubDataEXT"));
1985  glNamedCopyBufferSubDataEXT = PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC(glfwGetProcAddress("glNamedCopyBufferSubDataEXT"));
1986  glNamedFramebufferDrawBuffer = PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC(glfwGetProcAddress("glNamedFramebufferDrawBuffer"));
1987  glNamedFramebufferDrawBuffers = PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC(glfwGetProcAddress("glNamedFramebufferDrawBuffers"));
1988  glNamedFramebufferParameteri = PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC(glfwGetProcAddress("glNamedFramebufferParameteri"));
1989  glNamedFramebufferParameteriEXT = PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC(glfwGetProcAddress("glNamedFramebufferParameteriEXT"));
1990  glNamedFramebufferReadBuffer = PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC(glfwGetProcAddress("glNamedFramebufferReadBuffer"));
1991  glNamedFramebufferRenderbuffer = PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC(glfwGetProcAddress("glNamedFramebufferRenderbuffer"));
1992  glNamedFramebufferRenderbufferEXT = PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC(glfwGetProcAddress("glNamedFramebufferRenderbufferEXT"));
1993  glNamedFramebufferSampleLocationsfvARB = PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC(glfwGetProcAddress("glNamedFramebufferSampleLocationsfvARB"));
1994  glNamedFramebufferSampleLocationsfvNV = PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC(glfwGetProcAddress("glNamedFramebufferSampleLocationsfvNV"));
1995  glNamedFramebufferTexture = PFNGLNAMEDFRAMEBUFFERTEXTUREPROC(glfwGetProcAddress("glNamedFramebufferTexture"));
1996  glNamedFramebufferTexture1DEXT = PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC(glfwGetProcAddress("glNamedFramebufferTexture1DEXT"));
1997  glNamedFramebufferTexture2DEXT = PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC(glfwGetProcAddress("glNamedFramebufferTexture2DEXT"));
1998  glNamedFramebufferTexture3DEXT = PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC(glfwGetProcAddress("glNamedFramebufferTexture3DEXT"));
1999  glNamedFramebufferTextureEXT = PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC(glfwGetProcAddress("glNamedFramebufferTextureEXT"));
2000  glNamedFramebufferTextureFaceEXT = PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC(glfwGetProcAddress("glNamedFramebufferTextureFaceEXT"));
2001  glNamedFramebufferTextureLayer = PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC(glfwGetProcAddress("glNamedFramebufferTextureLayer"));
2002  glNamedFramebufferTextureLayerEXT = PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC(glfwGetProcAddress("glNamedFramebufferTextureLayerEXT"));
2003  glNamedProgramLocalParameter4dEXT = PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC(glfwGetProcAddress("glNamedProgramLocalParameter4dEXT"));
2004  glNamedProgramLocalParameter4dvEXT = PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC(glfwGetProcAddress("glNamedProgramLocalParameter4dvEXT"));
2005  glNamedProgramLocalParameter4fEXT = PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC(glfwGetProcAddress("glNamedProgramLocalParameter4fEXT"));
2006  glNamedProgramLocalParameter4fvEXT = PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC(glfwGetProcAddress("glNamedProgramLocalParameter4fvEXT"));
2007  glNamedProgramLocalParameterI4iEXT = PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC(glfwGetProcAddress("glNamedProgramLocalParameterI4iEXT"));
2008  glNamedProgramLocalParameterI4ivEXT = PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC(glfwGetProcAddress("glNamedProgramLocalParameterI4ivEXT"));
2009  glNamedProgramLocalParameterI4uiEXT = PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC(glfwGetProcAddress("glNamedProgramLocalParameterI4uiEXT"));
2010  glNamedProgramLocalParameterI4uivEXT = PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC(glfwGetProcAddress("glNamedProgramLocalParameterI4uivEXT"));
2011  glNamedProgramLocalParameters4fvEXT = PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC(glfwGetProcAddress("glNamedProgramLocalParameters4fvEXT"));
2012  glNamedProgramLocalParametersI4ivEXT = PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC(glfwGetProcAddress("glNamedProgramLocalParametersI4ivEXT"));
2013  glNamedProgramLocalParametersI4uivEXT = PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC(glfwGetProcAddress("glNamedProgramLocalParametersI4uivEXT"));
2014  glNamedProgramStringEXT = PFNGLNAMEDPROGRAMSTRINGEXTPROC(glfwGetProcAddress("glNamedProgramStringEXT"));
2015  glNamedRenderbufferStorage = PFNGLNAMEDRENDERBUFFERSTORAGEPROC(glfwGetProcAddress("glNamedRenderbufferStorage"));
2016  glNamedRenderbufferStorageEXT = PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC(glfwGetProcAddress("glNamedRenderbufferStorageEXT"));
2017  glNamedRenderbufferStorageMultisample = PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC(glfwGetProcAddress("glNamedRenderbufferStorageMultisample"));
2018  glNamedRenderbufferStorageMultisampleCoverageEXT = PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC(glfwGetProcAddress("glNamedRenderbufferStorageMultisampleCoverageEXT"));
2019  glNamedRenderbufferStorageMultisampleEXT = PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC(glfwGetProcAddress("glNamedRenderbufferStorageMultisampleEXT"));
2020  glNamedStringARB = PFNGLNAMEDSTRINGARBPROC(glfwGetProcAddress("glNamedStringARB"));
2021  glNormalFormatNV = PFNGLNORMALFORMATNVPROC(glfwGetProcAddress("glNormalFormatNV"));
2022  glObjectLabel = PFNGLOBJECTLABELPROC(glfwGetProcAddress("glObjectLabel"));
2023  glObjectPtrLabel = PFNGLOBJECTPTRLABELPROC(glfwGetProcAddress("glObjectPtrLabel"));
2024  glPatchParameterfv = PFNGLPATCHPARAMETERFVPROC(glfwGetProcAddress("glPatchParameterfv"));
2025  glPatchParameteri = PFNGLPATCHPARAMETERIPROC(glfwGetProcAddress("glPatchParameteri"));
2026  glPathCommandsNV = PFNGLPATHCOMMANDSNVPROC(glfwGetProcAddress("glPathCommandsNV"));
2027  glPathCoordsNV = PFNGLPATHCOORDSNVPROC(glfwGetProcAddress("glPathCoordsNV"));
2028  glPathCoverDepthFuncNV = PFNGLPATHCOVERDEPTHFUNCNVPROC(glfwGetProcAddress("glPathCoverDepthFuncNV"));
2029  glPathDashArrayNV = PFNGLPATHDASHARRAYNVPROC(glfwGetProcAddress("glPathDashArrayNV"));
2030  glPathGlyphIndexArrayNV = PFNGLPATHGLYPHINDEXARRAYNVPROC(glfwGetProcAddress("glPathGlyphIndexArrayNV"));
2031  glPathGlyphIndexRangeNV = PFNGLPATHGLYPHINDEXRANGENVPROC(glfwGetProcAddress("glPathGlyphIndexRangeNV"));
2032  glPathGlyphRangeNV = PFNGLPATHGLYPHRANGENVPROC(glfwGetProcAddress("glPathGlyphRangeNV"));
2033  glPathGlyphsNV = PFNGLPATHGLYPHSNVPROC(glfwGetProcAddress("glPathGlyphsNV"));
2034  glPathMemoryGlyphIndexArrayNV = PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC(glfwGetProcAddress("glPathMemoryGlyphIndexArrayNV"));
2035  glPathParameterfNV = PFNGLPATHPARAMETERFNVPROC(glfwGetProcAddress("glPathParameterfNV"));
2036  glPathParameterfvNV = PFNGLPATHPARAMETERFVNVPROC(glfwGetProcAddress("glPathParameterfvNV"));
2037  glPathParameteriNV = PFNGLPATHPARAMETERINVPROC(glfwGetProcAddress("glPathParameteriNV"));
2038  glPathParameterivNV = PFNGLPATHPARAMETERIVNVPROC(glfwGetProcAddress("glPathParameterivNV"));
2039  glPathStencilDepthOffsetNV = PFNGLPATHSTENCILDEPTHOFFSETNVPROC(glfwGetProcAddress("glPathStencilDepthOffsetNV"));
2040  glPathStencilFuncNV = PFNGLPATHSTENCILFUNCNVPROC(glfwGetProcAddress("glPathStencilFuncNV"));
2041  glPathStringNV = PFNGLPATHSTRINGNVPROC(glfwGetProcAddress("glPathStringNV"));
2042  glPathSubCommandsNV = PFNGLPATHSUBCOMMANDSNVPROC(glfwGetProcAddress("glPathSubCommandsNV"));
2043  glPathSubCoordsNV = PFNGLPATHSUBCOORDSNVPROC(glfwGetProcAddress("glPathSubCoordsNV"));
2044  glPauseTransformFeedback = PFNGLPAUSETRANSFORMFEEDBACKPROC(glfwGetProcAddress("glPauseTransformFeedback"));
2045  glPixelStoref = PFNGLPIXELSTOREFPROC(glfwGetProcAddress("glPixelStoref"));
2046  glPixelStorei = PFNGLPIXELSTOREIPROC(glfwGetProcAddress("glPixelStorei"));
2047  glPointAlongPathNV = PFNGLPOINTALONGPATHNVPROC(glfwGetProcAddress("glPointAlongPathNV"));
2048  glPointParameterf = PFNGLPOINTPARAMETERFPROC(glfwGetProcAddress("glPointParameterf"));
2049  glPointParameterfv = PFNGLPOINTPARAMETERFVPROC(glfwGetProcAddress("glPointParameterfv"));
2050  glPointParameteri = PFNGLPOINTPARAMETERIPROC(glfwGetProcAddress("glPointParameteri"));
2051  glPointParameteriv = PFNGLPOINTPARAMETERIVPROC(glfwGetProcAddress("glPointParameteriv"));
2052  glPointSize = PFNGLPOINTSIZEPROC(glfwGetProcAddress("glPointSize"));
2053  glPolygonMode = PFNGLPOLYGONMODEPROC(glfwGetProcAddress("glPolygonMode"));
2054  glPolygonOffset = PFNGLPOLYGONOFFSETPROC(glfwGetProcAddress("glPolygonOffset"));
2055  glPolygonOffsetClampEXT = PFNGLPOLYGONOFFSETCLAMPEXTPROC(glfwGetProcAddress("glPolygonOffsetClampEXT"));
2056  glPopDebugGroup = PFNGLPOPDEBUGGROUPPROC(glfwGetProcAddress("glPopDebugGroup"));
2057  glPopGroupMarkerEXT = PFNGLPOPGROUPMARKEREXTPROC(glfwGetProcAddress("glPopGroupMarkerEXT"));
2058  glPrimitiveBoundingBoxARB = PFNGLPRIMITIVEBOUNDINGBOXARBPROC(glfwGetProcAddress("glPrimitiveBoundingBoxARB"));
2059  glPrimitiveRestartIndex = PFNGLPRIMITIVERESTARTINDEXPROC(glfwGetProcAddress("glPrimitiveRestartIndex"));
2060  glProgramBinary = PFNGLPROGRAMBINARYPROC(glfwGetProcAddress("glProgramBinary"));
2061  glProgramParameteri = PFNGLPROGRAMPARAMETERIPROC(glfwGetProcAddress("glProgramParameteri"));
2062  glProgramParameteriARB = PFNGLPROGRAMPARAMETERIARBPROC(glfwGetProcAddress("glProgramParameteriARB"));
2063  glProgramPathFragmentInputGenNV = PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC(glfwGetProcAddress("glProgramPathFragmentInputGenNV"));
2064  glProgramUniform1d = PFNGLPROGRAMUNIFORM1DPROC(glfwGetProcAddress("glProgramUniform1d"));
2065  glProgramUniform1dEXT = PFNGLPROGRAMUNIFORM1DEXTPROC(glfwGetProcAddress("glProgramUniform1dEXT"));
2066  glProgramUniform1dv = PFNGLPROGRAMUNIFORM1DVPROC(glfwGetProcAddress("glProgramUniform1dv"));
2067  glProgramUniform1dvEXT = PFNGLPROGRAMUNIFORM1DVEXTPROC(glfwGetProcAddress("glProgramUniform1dvEXT"));
2068  glProgramUniform1f = PFNGLPROGRAMUNIFORM1FPROC(glfwGetProcAddress("glProgramUniform1f"));
2069  glProgramUniform1fEXT = PFNGLPROGRAMUNIFORM1FEXTPROC(glfwGetProcAddress("glProgramUniform1fEXT"));
2070  glProgramUniform1fv = PFNGLPROGRAMUNIFORM1FVPROC(glfwGetProcAddress("glProgramUniform1fv"));
2071  glProgramUniform1fvEXT = PFNGLPROGRAMUNIFORM1FVEXTPROC(glfwGetProcAddress("glProgramUniform1fvEXT"));
2072  glProgramUniform1i = PFNGLPROGRAMUNIFORM1IPROC(glfwGetProcAddress("glProgramUniform1i"));
2073  glProgramUniform1i64ARB = PFNGLPROGRAMUNIFORM1I64ARBPROC(glfwGetProcAddress("glProgramUniform1i64ARB"));
2074  glProgramUniform1i64NV = PFNGLPROGRAMUNIFORM1I64NVPROC(glfwGetProcAddress("glProgramUniform1i64NV"));
2075  glProgramUniform1i64vARB = PFNGLPROGRAMUNIFORM1I64VARBPROC(glfwGetProcAddress("glProgramUniform1i64vARB"));
2076  glProgramUniform1i64vNV = PFNGLPROGRAMUNIFORM1I64VNVPROC(glfwGetProcAddress("glProgramUniform1i64vNV"));
2077  glProgramUniform1iEXT = PFNGLPROGRAMUNIFORM1IEXTPROC(glfwGetProcAddress("glProgramUniform1iEXT"));
2078  glProgramUniform1iv = PFNGLPROGRAMUNIFORM1IVPROC(glfwGetProcAddress("glProgramUniform1iv"));
2079  glProgramUniform1ivEXT = PFNGLPROGRAMUNIFORM1IVEXTPROC(glfwGetProcAddress("glProgramUniform1ivEXT"));
2080  glProgramUniform1ui = PFNGLPROGRAMUNIFORM1UIPROC(glfwGetProcAddress("glProgramUniform1ui"));
2081  glProgramUniform1ui64ARB = PFNGLPROGRAMUNIFORM1UI64ARBPROC(glfwGetProcAddress("glProgramUniform1ui64ARB"));
2082  glProgramUniform1ui64NV = PFNGLPROGRAMUNIFORM1UI64NVPROC(glfwGetProcAddress("glProgramUniform1ui64NV"));
2083  glProgramUniform1ui64vARB = PFNGLPROGRAMUNIFORM1UI64VARBPROC(glfwGetProcAddress("glProgramUniform1ui64vARB"));
2084  glProgramUniform1ui64vNV = PFNGLPROGRAMUNIFORM1UI64VNVPROC(glfwGetProcAddress("glProgramUniform1ui64vNV"));
2085  glProgramUniform1uiEXT = PFNGLPROGRAMUNIFORM1UIEXTPROC(glfwGetProcAddress("glProgramUniform1uiEXT"));
2086  glProgramUniform1uiv = PFNGLPROGRAMUNIFORM1UIVPROC(glfwGetProcAddress("glProgramUniform1uiv"));
2087  glProgramUniform1uivEXT = PFNGLPROGRAMUNIFORM1UIVEXTPROC(glfwGetProcAddress("glProgramUniform1uivEXT"));
2088  glProgramUniform2d = PFNGLPROGRAMUNIFORM2DPROC(glfwGetProcAddress("glProgramUniform2d"));
2089  glProgramUniform2dEXT = PFNGLPROGRAMUNIFORM2DEXTPROC(glfwGetProcAddress("glProgramUniform2dEXT"));
2090  glProgramUniform2dv = PFNGLPROGRAMUNIFORM2DVPROC(glfwGetProcAddress("glProgramUniform2dv"));
2091  glProgramUniform2dvEXT = PFNGLPROGRAMUNIFORM2DVEXTPROC(glfwGetProcAddress("glProgramUniform2dvEXT"));
2092  glProgramUniform2f = PFNGLPROGRAMUNIFORM2FPROC(glfwGetProcAddress("glProgramUniform2f"));
2093  glProgramUniform2fEXT = PFNGLPROGRAMUNIFORM2FEXTPROC(glfwGetProcAddress("glProgramUniform2fEXT"));
2094  glProgramUniform2fv = PFNGLPROGRAMUNIFORM2FVPROC(glfwGetProcAddress("glProgramUniform2fv"));
2095  glProgramUniform2fvEXT = PFNGLPROGRAMUNIFORM2FVEXTPROC(glfwGetProcAddress("glProgramUniform2fvEXT"));
2096  glProgramUniform2i = PFNGLPROGRAMUNIFORM2IPROC(glfwGetProcAddress("glProgramUniform2i"));
2097  glProgramUniform2i64ARB = PFNGLPROGRAMUNIFORM2I64ARBPROC(glfwGetProcAddress("glProgramUniform2i64ARB"));
2098  glProgramUniform2i64NV = PFNGLPROGRAMUNIFORM2I64NVPROC(glfwGetProcAddress("glProgramUniform2i64NV"));
2099  glProgramUniform2i64vARB = PFNGLPROGRAMUNIFORM2I64VARBPROC(glfwGetProcAddress("glProgramUniform2i64vARB"));
2100  glProgramUniform2i64vNV = PFNGLPROGRAMUNIFORM2I64VNVPROC(glfwGetProcAddress("glProgramUniform2i64vNV"));
2101  glProgramUniform2iEXT = PFNGLPROGRAMUNIFORM2IEXTPROC(glfwGetProcAddress("glProgramUniform2iEXT"));
2102  glProgramUniform2iv = PFNGLPROGRAMUNIFORM2IVPROC(glfwGetProcAddress("glProgramUniform2iv"));
2103  glProgramUniform2ivEXT = PFNGLPROGRAMUNIFORM2IVEXTPROC(glfwGetProcAddress("glProgramUniform2ivEXT"));
2104  glProgramUniform2ui = PFNGLPROGRAMUNIFORM2UIPROC(glfwGetProcAddress("glProgramUniform2ui"));
2105  glProgramUniform2ui64ARB = PFNGLPROGRAMUNIFORM2UI64ARBPROC(glfwGetProcAddress("glProgramUniform2ui64ARB"));
2106  glProgramUniform2ui64NV = PFNGLPROGRAMUNIFORM2UI64NVPROC(glfwGetProcAddress("glProgramUniform2ui64NV"));
2107  glProgramUniform2ui64vARB = PFNGLPROGRAMUNIFORM2UI64VARBPROC(glfwGetProcAddress("glProgramUniform2ui64vARB"));
2108  glProgramUniform2ui64vNV = PFNGLPROGRAMUNIFORM2UI64VNVPROC(glfwGetProcAddress("glProgramUniform2ui64vNV"));
2109  glProgramUniform2uiEXT = PFNGLPROGRAMUNIFORM2UIEXTPROC(glfwGetProcAddress("glProgramUniform2uiEXT"));
2110  glProgramUniform2uiv = PFNGLPROGRAMUNIFORM2UIVPROC(glfwGetProcAddress("glProgramUniform2uiv"));
2111  glProgramUniform2uivEXT = PFNGLPROGRAMUNIFORM2UIVEXTPROC(glfwGetProcAddress("glProgramUniform2uivEXT"));
2112  glProgramUniform3d = PFNGLPROGRAMUNIFORM3DPROC(glfwGetProcAddress("glProgramUniform3d"));
2113  glProgramUniform3dEXT = PFNGLPROGRAMUNIFORM3DEXTPROC(glfwGetProcAddress("glProgramUniform3dEXT"));
2114  glProgramUniform3dv = PFNGLPROGRAMUNIFORM3DVPROC(glfwGetProcAddress("glProgramUniform3dv"));
2115  glProgramUniform3dvEXT = PFNGLPROGRAMUNIFORM3DVEXTPROC(glfwGetProcAddress("glProgramUniform3dvEXT"));
2116  glProgramUniform3f = PFNGLPROGRAMUNIFORM3FPROC(glfwGetProcAddress("glProgramUniform3f"));
2117  glProgramUniform3fEXT = PFNGLPROGRAMUNIFORM3FEXTPROC(glfwGetProcAddress("glProgramUniform3fEXT"));
2118  glProgramUniform3fv = PFNGLPROGRAMUNIFORM3FVPROC(glfwGetProcAddress("glProgramUniform3fv"));
2119  glProgramUniform3fvEXT = PFNGLPROGRAMUNIFORM3FVEXTPROC(glfwGetProcAddress("glProgramUniform3fvEXT"));
2120  glProgramUniform3i = PFNGLPROGRAMUNIFORM3IPROC(glfwGetProcAddress("glProgramUniform3i"));
2121  glProgramUniform3i64ARB = PFNGLPROGRAMUNIFORM3I64ARBPROC(glfwGetProcAddress("glProgramUniform3i64ARB"));
2122  glProgramUniform3i64NV = PFNGLPROGRAMUNIFORM3I64NVPROC(glfwGetProcAddress("glProgramUniform3i64NV"));
2123  glProgramUniform3i64vARB = PFNGLPROGRAMUNIFORM3I64VARBPROC(glfwGetProcAddress("glProgramUniform3i64vARB"));
2124  glProgramUniform3i64vNV = PFNGLPROGRAMUNIFORM3I64VNVPROC(glfwGetProcAddress("glProgramUniform3i64vNV"));
2125  glProgramUniform3iEXT = PFNGLPROGRAMUNIFORM3IEXTPROC(glfwGetProcAddress("glProgramUniform3iEXT"));
2126  glProgramUniform3iv = PFNGLPROGRAMUNIFORM3IVPROC(glfwGetProcAddress("glProgramUniform3iv"));
2127  glProgramUniform3ivEXT = PFNGLPROGRAMUNIFORM3IVEXTPROC(glfwGetProcAddress("glProgramUniform3ivEXT"));
2128  glProgramUniform3ui = PFNGLPROGRAMUNIFORM3UIPROC(glfwGetProcAddress("glProgramUniform3ui"));
2129  glProgramUniform3ui64ARB = PFNGLPROGRAMUNIFORM3UI64ARBPROC(glfwGetProcAddress("glProgramUniform3ui64ARB"));
2130  glProgramUniform3ui64NV = PFNGLPROGRAMUNIFORM3UI64NVPROC(glfwGetProcAddress("glProgramUniform3ui64NV"));
2131  glProgramUniform3ui64vARB = PFNGLPROGRAMUNIFORM3UI64VARBPROC(glfwGetProcAddress("glProgramUniform3ui64vARB"));
2132  glProgramUniform3ui64vNV = PFNGLPROGRAMUNIFORM3UI64VNVPROC(glfwGetProcAddress("glProgramUniform3ui64vNV"));
2133  glProgramUniform3uiEXT = PFNGLPROGRAMUNIFORM3UIEXTPROC(glfwGetProcAddress("glProgramUniform3uiEXT"));
2134  glProgramUniform3uiv = PFNGLPROGRAMUNIFORM3UIVPROC(glfwGetProcAddress("glProgramUniform3uiv"));
2135  glProgramUniform3uivEXT = PFNGLPROGRAMUNIFORM3UIVEXTPROC(glfwGetProcAddress("glProgramUniform3uivEXT"));
2136  glProgramUniform4d = PFNGLPROGRAMUNIFORM4DPROC(glfwGetProcAddress("glProgramUniform4d"));
2137  glProgramUniform4dEXT = PFNGLPROGRAMUNIFORM4DEXTPROC(glfwGetProcAddress("glProgramUniform4dEXT"));
2138  glProgramUniform4dv = PFNGLPROGRAMUNIFORM4DVPROC(glfwGetProcAddress("glProgramUniform4dv"));
2139  glProgramUniform4dvEXT = PFNGLPROGRAMUNIFORM4DVEXTPROC(glfwGetProcAddress("glProgramUniform4dvEXT"));
2140  glProgramUniform4f = PFNGLPROGRAMUNIFORM4FPROC(glfwGetProcAddress("glProgramUniform4f"));
2141  glProgramUniform4fEXT = PFNGLPROGRAMUNIFORM4FEXTPROC(glfwGetProcAddress("glProgramUniform4fEXT"));
2142  glProgramUniform4fv = PFNGLPROGRAMUNIFORM4FVPROC(glfwGetProcAddress("glProgramUniform4fv"));
2143  glProgramUniform4fvEXT = PFNGLPROGRAMUNIFORM4FVEXTPROC(glfwGetProcAddress("glProgramUniform4fvEXT"));
2144  glProgramUniform4i = PFNGLPROGRAMUNIFORM4IPROC(glfwGetProcAddress("glProgramUniform4i"));
2145  glProgramUniform4i64ARB = PFNGLPROGRAMUNIFORM4I64ARBPROC(glfwGetProcAddress("glProgramUniform4i64ARB"));
2146  glProgramUniform4i64NV = PFNGLPROGRAMUNIFORM4I64NVPROC(glfwGetProcAddress("glProgramUniform4i64NV"));
2147  glProgramUniform4i64vARB = PFNGLPROGRAMUNIFORM4I64VARBPROC(glfwGetProcAddress("glProgramUniform4i64vARB"));
2148  glProgramUniform4i64vNV = PFNGLPROGRAMUNIFORM4I64VNVPROC(glfwGetProcAddress("glProgramUniform4i64vNV"));
2149  glProgramUniform4iEXT = PFNGLPROGRAMUNIFORM4IEXTPROC(glfwGetProcAddress("glProgramUniform4iEXT"));
2150  glProgramUniform4iv = PFNGLPROGRAMUNIFORM4IVPROC(glfwGetProcAddress("glProgramUniform4iv"));
2151  glProgramUniform4ivEXT = PFNGLPROGRAMUNIFORM4IVEXTPROC(glfwGetProcAddress("glProgramUniform4ivEXT"));
2152  glProgramUniform4ui = PFNGLPROGRAMUNIFORM4UIPROC(glfwGetProcAddress("glProgramUniform4ui"));
2153  glProgramUniform4ui64ARB = PFNGLPROGRAMUNIFORM4UI64ARBPROC(glfwGetProcAddress("glProgramUniform4ui64ARB"));
2154  glProgramUniform4ui64NV = PFNGLPROGRAMUNIFORM4UI64NVPROC(glfwGetProcAddress("glProgramUniform4ui64NV"));
2155  glProgramUniform4ui64vARB = PFNGLPROGRAMUNIFORM4UI64VARBPROC(glfwGetProcAddress("glProgramUniform4ui64vARB"));
2156  glProgramUniform4ui64vNV = PFNGLPROGRAMUNIFORM4UI64VNVPROC(glfwGetProcAddress("glProgramUniform4ui64vNV"));
2157  glProgramUniform4uiEXT = PFNGLPROGRAMUNIFORM4UIEXTPROC(glfwGetProcAddress("glProgramUniform4uiEXT"));
2158  glProgramUniform4uiv = PFNGLPROGRAMUNIFORM4UIVPROC(glfwGetProcAddress("glProgramUniform4uiv"));
2159  glProgramUniform4uivEXT = PFNGLPROGRAMUNIFORM4UIVEXTPROC(glfwGetProcAddress("glProgramUniform4uivEXT"));
2160  glProgramUniformHandleui64ARB = PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC(glfwGetProcAddress("glProgramUniformHandleui64ARB"));
2161  glProgramUniformHandleui64NV = PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC(glfwGetProcAddress("glProgramUniformHandleui64NV"));
2162  glProgramUniformHandleui64vARB = PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC(glfwGetProcAddress("glProgramUniformHandleui64vARB"));
2163  glProgramUniformHandleui64vNV = PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC(glfwGetProcAddress("glProgramUniformHandleui64vNV"));
2164  glProgramUniformMatrix2dv = PFNGLPROGRAMUNIFORMMATRIX2DVPROC(glfwGetProcAddress("glProgramUniformMatrix2dv"));
2165  glProgramUniformMatrix2dvEXT = PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix2dvEXT"));
2166  glProgramUniformMatrix2fv = PFNGLPROGRAMUNIFORMMATRIX2FVPROC(glfwGetProcAddress("glProgramUniformMatrix2fv"));
2167  glProgramUniformMatrix2fvEXT = PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix2fvEXT"));
2168  glProgramUniformMatrix2x3dv = PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC(glfwGetProcAddress("glProgramUniformMatrix2x3dv"));
2169  glProgramUniformMatrix2x3dvEXT = PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix2x3dvEXT"));
2170  glProgramUniformMatrix2x3fv = PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC(glfwGetProcAddress("glProgramUniformMatrix2x3fv"));
2171  glProgramUniformMatrix2x3fvEXT = PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix2x3fvEXT"));
2172  glProgramUniformMatrix2x4dv = PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC(glfwGetProcAddress("glProgramUniformMatrix2x4dv"));
2173  glProgramUniformMatrix2x4dvEXT = PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix2x4dvEXT"));
2174  glProgramUniformMatrix2x4fv = PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC(glfwGetProcAddress("glProgramUniformMatrix2x4fv"));
2175  glProgramUniformMatrix2x4fvEXT = PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix2x4fvEXT"));
2176  glProgramUniformMatrix3dv = PFNGLPROGRAMUNIFORMMATRIX3DVPROC(glfwGetProcAddress("glProgramUniformMatrix3dv"));
2177  glProgramUniformMatrix3dvEXT = PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix3dvEXT"));
2178  glProgramUniformMatrix3fv = PFNGLPROGRAMUNIFORMMATRIX3FVPROC(glfwGetProcAddress("glProgramUniformMatrix3fv"));
2179  glProgramUniformMatrix3fvEXT = PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix3fvEXT"));
2180  glProgramUniformMatrix3x2dv = PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC(glfwGetProcAddress("glProgramUniformMatrix3x2dv"));
2181  glProgramUniformMatrix3x2dvEXT = PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix3x2dvEXT"));
2182  glProgramUniformMatrix3x2fv = PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC(glfwGetProcAddress("glProgramUniformMatrix3x2fv"));
2183  glProgramUniformMatrix3x2fvEXT = PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix3x2fvEXT"));
2184  glProgramUniformMatrix3x4dv = PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC(glfwGetProcAddress("glProgramUniformMatrix3x4dv"));
2185  glProgramUniformMatrix3x4dvEXT = PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix3x4dvEXT"));
2186  glProgramUniformMatrix3x4fv = PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC(glfwGetProcAddress("glProgramUniformMatrix3x4fv"));
2187  glProgramUniformMatrix3x4fvEXT = PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix3x4fvEXT"));
2188  glProgramUniformMatrix4dv = PFNGLPROGRAMUNIFORMMATRIX4DVPROC(glfwGetProcAddress("glProgramUniformMatrix4dv"));
2189  glProgramUniformMatrix4dvEXT = PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix4dvEXT"));
2190  glProgramUniformMatrix4fv = PFNGLPROGRAMUNIFORMMATRIX4FVPROC(glfwGetProcAddress("glProgramUniformMatrix4fv"));
2191  glProgramUniformMatrix4fvEXT = PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix4fvEXT"));
2192  glProgramUniformMatrix4x2dv = PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC(glfwGetProcAddress("glProgramUniformMatrix4x2dv"));
2193  glProgramUniformMatrix4x2dvEXT = PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix4x2dvEXT"));
2194  glProgramUniformMatrix4x2fv = PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC(glfwGetProcAddress("glProgramUniformMatrix4x2fv"));
2195  glProgramUniformMatrix4x2fvEXT = PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix4x2fvEXT"));
2196  glProgramUniformMatrix4x3dv = PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC(glfwGetProcAddress("glProgramUniformMatrix4x3dv"));
2197  glProgramUniformMatrix4x3dvEXT = PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix4x3dvEXT"));
2198  glProgramUniformMatrix4x3fv = PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC(glfwGetProcAddress("glProgramUniformMatrix4x3fv"));
2199  glProgramUniformMatrix4x3fvEXT = PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC(glfwGetProcAddress("glProgramUniformMatrix4x3fvEXT"));
2200  glProgramUniformui64NV = PFNGLPROGRAMUNIFORMUI64NVPROC(glfwGetProcAddress("glProgramUniformui64NV"));
2201  glProgramUniformui64vNV = PFNGLPROGRAMUNIFORMUI64VNVPROC(glfwGetProcAddress("glProgramUniformui64vNV"));
2202  glProvokingVertex = PFNGLPROVOKINGVERTEXPROC(glfwGetProcAddress("glProvokingVertex"));
2203  glPushClientAttribDefaultEXT = PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC(glfwGetProcAddress("glPushClientAttribDefaultEXT"));
2204  glPushDebugGroup = PFNGLPUSHDEBUGGROUPPROC(glfwGetProcAddress("glPushDebugGroup"));
2205  glPushGroupMarkerEXT = PFNGLPUSHGROUPMARKEREXTPROC(glfwGetProcAddress("glPushGroupMarkerEXT"));
2206  glQueryCounter = PFNGLQUERYCOUNTERPROC(glfwGetProcAddress("glQueryCounter"));
2207  glRasterSamplesEXT = PFNGLRASTERSAMPLESEXTPROC(glfwGetProcAddress("glRasterSamplesEXT"));
2208  glReadBuffer = PFNGLREADBUFFERPROC(glfwGetProcAddress("glReadBuffer"));
2209  glReadPixels = PFNGLREADPIXELSPROC(glfwGetProcAddress("glReadPixels"));
2210  glReadnPixels = PFNGLREADNPIXELSPROC(glfwGetProcAddress("glReadnPixels"));
2211  glReadnPixelsARB = PFNGLREADNPIXELSARBPROC(glfwGetProcAddress("glReadnPixelsARB"));
2212  glReleaseShaderCompiler = PFNGLRELEASESHADERCOMPILERPROC(glfwGetProcAddress("glReleaseShaderCompiler"));
2213  glRenderbufferStorage = PFNGLRENDERBUFFERSTORAGEPROC(glfwGetProcAddress("glRenderbufferStorage"));
2214  glRenderbufferStorageMultisample = PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC(glfwGetProcAddress("glRenderbufferStorageMultisample"));
2215  glRenderbufferStorageMultisampleCoverageNV = PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC(glfwGetProcAddress("glRenderbufferStorageMultisampleCoverageNV"));
2216  glResolveDepthValuesNV = PFNGLRESOLVEDEPTHVALUESNVPROC(glfwGetProcAddress("glResolveDepthValuesNV"));
2217  glResumeTransformFeedback = PFNGLRESUMETRANSFORMFEEDBACKPROC(glfwGetProcAddress("glResumeTransformFeedback"));
2218  glSampleCoverage = PFNGLSAMPLECOVERAGEPROC(glfwGetProcAddress("glSampleCoverage"));
2219  glSampleMaski = PFNGLSAMPLEMASKIPROC(glfwGetProcAddress("glSampleMaski"));
2220  glSamplerParameterIiv = PFNGLSAMPLERPARAMETERIIVPROC(glfwGetProcAddress("glSamplerParameterIiv"));
2221  glSamplerParameterIuiv = PFNGLSAMPLERPARAMETERIUIVPROC(glfwGetProcAddress("glSamplerParameterIuiv"));
2222  glSamplerParameterf = PFNGLSAMPLERPARAMETERFPROC(glfwGetProcAddress("glSamplerParameterf"));
2223  glSamplerParameterfv = PFNGLSAMPLERPARAMETERFVPROC(glfwGetProcAddress("glSamplerParameterfv"));
2224  glSamplerParameteri = PFNGLSAMPLERPARAMETERIPROC(glfwGetProcAddress("glSamplerParameteri"));
2225  glSamplerParameteriv = PFNGLSAMPLERPARAMETERIVPROC(glfwGetProcAddress("glSamplerParameteriv"));
2226  glScissor = PFNGLSCISSORPROC(glfwGetProcAddress("glScissor"));
2227  glScissorArrayv = PFNGLSCISSORARRAYVPROC(glfwGetProcAddress("glScissorArrayv"));
2228  glScissorIndexed = PFNGLSCISSORINDEXEDPROC(glfwGetProcAddress("glScissorIndexed"));
2229  glScissorIndexedv = PFNGLSCISSORINDEXEDVPROC(glfwGetProcAddress("glScissorIndexedv"));
2230  glSecondaryColorFormatNV = PFNGLSECONDARYCOLORFORMATNVPROC(glfwGetProcAddress("glSecondaryColorFormatNV"));
2231  glSelectPerfMonitorCountersAMD = PFNGLSELECTPERFMONITORCOUNTERSAMDPROC(glfwGetProcAddress("glSelectPerfMonitorCountersAMD"));
2232  glShaderBinary = PFNGLSHADERBINARYPROC(glfwGetProcAddress("glShaderBinary"));
2233  glShaderSource = PFNGLSHADERSOURCEPROC(glfwGetProcAddress("glShaderSource"));
2234  glShaderStorageBlockBinding = PFNGLSHADERSTORAGEBLOCKBINDINGPROC(glfwGetProcAddress("glShaderStorageBlockBinding"));
2235  glSignalVkFenceNV = PFNGLSIGNALVKFENCENVPROC(glfwGetProcAddress("glSignalVkFenceNV"));
2236  glSignalVkSemaphoreNV = PFNGLSIGNALVKSEMAPHORENVPROC(glfwGetProcAddress("glSignalVkSemaphoreNV"));
2237  glSpecializeShaderARB = PFNGLSPECIALIZESHADERARBPROC(glfwGetProcAddress("glSpecializeShaderARB"));
2238  glStateCaptureNV = PFNGLSTATECAPTURENVPROC(glfwGetProcAddress("glStateCaptureNV"));
2239  glStencilFillPathInstancedNV = PFNGLSTENCILFILLPATHINSTANCEDNVPROC(glfwGetProcAddress("glStencilFillPathInstancedNV"));
2240  glStencilFillPathNV = PFNGLSTENCILFILLPATHNVPROC(glfwGetProcAddress("glStencilFillPathNV"));
2241  glStencilFunc = PFNGLSTENCILFUNCPROC(glfwGetProcAddress("glStencilFunc"));
2242  glStencilFuncSeparate = PFNGLSTENCILFUNCSEPARATEPROC(glfwGetProcAddress("glStencilFuncSeparate"));
2243  glStencilMask = PFNGLSTENCILMASKPROC(glfwGetProcAddress("glStencilMask"));
2244  glStencilMaskSeparate = PFNGLSTENCILMASKSEPARATEPROC(glfwGetProcAddress("glStencilMaskSeparate"));
2245  glStencilOp = PFNGLSTENCILOPPROC(glfwGetProcAddress("glStencilOp"));
2246  glStencilOpSeparate = PFNGLSTENCILOPSEPARATEPROC(glfwGetProcAddress("glStencilOpSeparate"));
2247  glStencilStrokePathInstancedNV = PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC(glfwGetProcAddress("glStencilStrokePathInstancedNV"));
2248  glStencilStrokePathNV = PFNGLSTENCILSTROKEPATHNVPROC(glfwGetProcAddress("glStencilStrokePathNV"));
2249  glStencilThenCoverFillPathInstancedNV = PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC(glfwGetProcAddress("glStencilThenCoverFillPathInstancedNV"));
2250  glStencilThenCoverFillPathNV = PFNGLSTENCILTHENCOVERFILLPATHNVPROC(glfwGetProcAddress("glStencilThenCoverFillPathNV"));
2251  glStencilThenCoverStrokePathInstancedNV = PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC(glfwGetProcAddress("glStencilThenCoverStrokePathInstancedNV"));
2252  glStencilThenCoverStrokePathNV = PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC(glfwGetProcAddress("glStencilThenCoverStrokePathNV"));
2253  glSubpixelPrecisionBiasNV = PFNGLSUBPIXELPRECISIONBIASNVPROC(glfwGetProcAddress("glSubpixelPrecisionBiasNV"));
2254  glTexBuffer = PFNGLTEXBUFFERPROC(glfwGetProcAddress("glTexBuffer"));
2255  glTexBufferARB = PFNGLTEXBUFFERARBPROC(glfwGetProcAddress("glTexBufferARB"));
2256  glTexBufferRange = PFNGLTEXBUFFERRANGEPROC(glfwGetProcAddress("glTexBufferRange"));
2257  glTexCoordFormatNV = PFNGLTEXCOORDFORMATNVPROC(glfwGetProcAddress("glTexCoordFormatNV"));
2258  glTexImage1D = PFNGLTEXIMAGE1DPROC(glfwGetProcAddress("glTexImage1D"));
2259  glTexImage2D = PFNGLTEXIMAGE2DPROC(glfwGetProcAddress("glTexImage2D"));
2260  glTexImage2DMultisample = PFNGLTEXIMAGE2DMULTISAMPLEPROC(glfwGetProcAddress("glTexImage2DMultisample"));
2261  glTexImage3D = PFNGLTEXIMAGE3DPROC(glfwGetProcAddress("glTexImage3D"));
2262  glTexImage3DMultisample = PFNGLTEXIMAGE3DMULTISAMPLEPROC(glfwGetProcAddress("glTexImage3DMultisample"));
2263  glTexPageCommitmentARB = PFNGLTEXPAGECOMMITMENTARBPROC(glfwGetProcAddress("glTexPageCommitmentARB"));
2264  glTexParameterIiv = PFNGLTEXPARAMETERIIVPROC(glfwGetProcAddress("glTexParameterIiv"));
2265  glTexParameterIuiv = PFNGLTEXPARAMETERIUIVPROC(glfwGetProcAddress("glTexParameterIuiv"));
2266  glTexParameterf = PFNGLTEXPARAMETERFPROC(glfwGetProcAddress("glTexParameterf"));
2267  glTexParameterfv = PFNGLTEXPARAMETERFVPROC(glfwGetProcAddress("glTexParameterfv"));
2268  glTexParameteri = PFNGLTEXPARAMETERIPROC(glfwGetProcAddress("glTexParameteri"));
2269  glTexParameteriv = PFNGLTEXPARAMETERIVPROC(glfwGetProcAddress("glTexParameteriv"));
2270  glTexStorage1D = PFNGLTEXSTORAGE1DPROC(glfwGetProcAddress("glTexStorage1D"));
2271  glTexStorage2D = PFNGLTEXSTORAGE2DPROC(glfwGetProcAddress("glTexStorage2D"));
2272  glTexStorage2DMultisample = PFNGLTEXSTORAGE2DMULTISAMPLEPROC(glfwGetProcAddress("glTexStorage2DMultisample"));
2273  glTexStorage3D = PFNGLTEXSTORAGE3DPROC(glfwGetProcAddress("glTexStorage3D"));
2274  glTexStorage3DMultisample = PFNGLTEXSTORAGE3DMULTISAMPLEPROC(glfwGetProcAddress("glTexStorage3DMultisample"));
2275  glTexSubImage1D = PFNGLTEXSUBIMAGE1DPROC(glfwGetProcAddress("glTexSubImage1D"));
2276  glTexSubImage2D = PFNGLTEXSUBIMAGE2DPROC(glfwGetProcAddress("glTexSubImage2D"));
2277  glTexSubImage3D = PFNGLTEXSUBIMAGE3DPROC(glfwGetProcAddress("glTexSubImage3D"));
2278  glTextureBarrier = PFNGLTEXTUREBARRIERPROC(glfwGetProcAddress("glTextureBarrier"));
2279  glTextureBarrierNV = PFNGLTEXTUREBARRIERNVPROC(glfwGetProcAddress("glTextureBarrierNV"));
2280  glTextureBuffer = PFNGLTEXTUREBUFFERPROC(glfwGetProcAddress("glTextureBuffer"));
2281  glTextureBufferEXT = PFNGLTEXTUREBUFFEREXTPROC(glfwGetProcAddress("glTextureBufferEXT"));
2282  glTextureBufferRange = PFNGLTEXTUREBUFFERRANGEPROC(glfwGetProcAddress("glTextureBufferRange"));
2283  glTextureBufferRangeEXT = PFNGLTEXTUREBUFFERRANGEEXTPROC(glfwGetProcAddress("glTextureBufferRangeEXT"));
2284  glTextureImage1DEXT = PFNGLTEXTUREIMAGE1DEXTPROC(glfwGetProcAddress("glTextureImage1DEXT"));
2285  glTextureImage2DEXT = PFNGLTEXTUREIMAGE2DEXTPROC(glfwGetProcAddress("glTextureImage2DEXT"));
2286  glTextureImage3DEXT = PFNGLTEXTUREIMAGE3DEXTPROC(glfwGetProcAddress("glTextureImage3DEXT"));
2287  glTexturePageCommitmentEXT = PFNGLTEXTUREPAGECOMMITMENTEXTPROC(glfwGetProcAddress("glTexturePageCommitmentEXT"));
2288  glTextureParameterIiv = PFNGLTEXTUREPARAMETERIIVPROC(glfwGetProcAddress("glTextureParameterIiv"));
2289  glTextureParameterIivEXT = PFNGLTEXTUREPARAMETERIIVEXTPROC(glfwGetProcAddress("glTextureParameterIivEXT"));
2290  glTextureParameterIuiv = PFNGLTEXTUREPARAMETERIUIVPROC(glfwGetProcAddress("glTextureParameterIuiv"));
2291  glTextureParameterIuivEXT = PFNGLTEXTUREPARAMETERIUIVEXTPROC(glfwGetProcAddress("glTextureParameterIuivEXT"));
2292  glTextureParameterf = PFNGLTEXTUREPARAMETERFPROC(glfwGetProcAddress("glTextureParameterf"));
2293  glTextureParameterfEXT = PFNGLTEXTUREPARAMETERFEXTPROC(glfwGetProcAddress("glTextureParameterfEXT"));
2294  glTextureParameterfv = PFNGLTEXTUREPARAMETERFVPROC(glfwGetProcAddress("glTextureParameterfv"));
2295  glTextureParameterfvEXT = PFNGLTEXTUREPARAMETERFVEXTPROC(glfwGetProcAddress("glTextureParameterfvEXT"));
2296  glTextureParameteri = PFNGLTEXTUREPARAMETERIPROC(glfwGetProcAddress("glTextureParameteri"));
2297  glTextureParameteriEXT = PFNGLTEXTUREPARAMETERIEXTPROC(glfwGetProcAddress("glTextureParameteriEXT"));
2298  glTextureParameteriv = PFNGLTEXTUREPARAMETERIVPROC(glfwGetProcAddress("glTextureParameteriv"));
2299  glTextureParameterivEXT = PFNGLTEXTUREPARAMETERIVEXTPROC(glfwGetProcAddress("glTextureParameterivEXT"));
2300  glTextureRenderbufferEXT = PFNGLTEXTURERENDERBUFFEREXTPROC(glfwGetProcAddress("glTextureRenderbufferEXT"));
2301  glTextureStorage1D = PFNGLTEXTURESTORAGE1DPROC(glfwGetProcAddress("glTextureStorage1D"));
2302  glTextureStorage1DEXT = PFNGLTEXTURESTORAGE1DEXTPROC(glfwGetProcAddress("glTextureStorage1DEXT"));
2303  glTextureStorage2D = PFNGLTEXTURESTORAGE2DPROC(glfwGetProcAddress("glTextureStorage2D"));
2304  glTextureStorage2DEXT = PFNGLTEXTURESTORAGE2DEXTPROC(glfwGetProcAddress("glTextureStorage2DEXT"));
2305  glTextureStorage2DMultisample = PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC(glfwGetProcAddress("glTextureStorage2DMultisample"));
2306  glTextureStorage2DMultisampleEXT = PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC(glfwGetProcAddress("glTextureStorage2DMultisampleEXT"));
2307  glTextureStorage3D = PFNGLTEXTURESTORAGE3DPROC(glfwGetProcAddress("glTextureStorage3D"));
2308  glTextureStorage3DEXT = PFNGLTEXTURESTORAGE3DEXTPROC(glfwGetProcAddress("glTextureStorage3DEXT"));
2309  glTextureStorage3DMultisample = PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC(glfwGetProcAddress("glTextureStorage3DMultisample"));
2310  glTextureStorage3DMultisampleEXT = PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC(glfwGetProcAddress("glTextureStorage3DMultisampleEXT"));
2311  glTextureSubImage1D = PFNGLTEXTURESUBIMAGE1DPROC(glfwGetProcAddress("glTextureSubImage1D"));
2312  glTextureSubImage1DEXT = PFNGLTEXTURESUBIMAGE1DEXTPROC(glfwGetProcAddress("glTextureSubImage1DEXT"));
2313  glTextureSubImage2D = PFNGLTEXTURESUBIMAGE2DPROC(glfwGetProcAddress("glTextureSubImage2D"));
2314  glTextureSubImage2DEXT = PFNGLTEXTURESUBIMAGE2DEXTPROC(glfwGetProcAddress("glTextureSubImage2DEXT"));
2315  glTextureSubImage3D = PFNGLTEXTURESUBIMAGE3DPROC(glfwGetProcAddress("glTextureSubImage3D"));
2316  glTextureSubImage3DEXT = PFNGLTEXTURESUBIMAGE3DEXTPROC(glfwGetProcAddress("glTextureSubImage3DEXT"));
2317  glTextureView = PFNGLTEXTUREVIEWPROC(glfwGetProcAddress("glTextureView"));
2318  glTransformFeedbackBufferBase = PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC(glfwGetProcAddress("glTransformFeedbackBufferBase"));
2319  glTransformFeedbackBufferRange = PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC(glfwGetProcAddress("glTransformFeedbackBufferRange"));
2320  glTransformFeedbackVaryings = PFNGLTRANSFORMFEEDBACKVARYINGSPROC(glfwGetProcAddress("glTransformFeedbackVaryings"));
2321  glTransformPathNV = PFNGLTRANSFORMPATHNVPROC(glfwGetProcAddress("glTransformPathNV"));
2322  glUniform1d = PFNGLUNIFORM1DPROC(glfwGetProcAddress("glUniform1d"));
2323  glUniform1dv = PFNGLUNIFORM1DVPROC(glfwGetProcAddress("glUniform1dv"));
2324  glUniform1f = PFNGLUNIFORM1FPROC(glfwGetProcAddress("glUniform1f"));
2325  glUniform1fv = PFNGLUNIFORM1FVPROC(glfwGetProcAddress("glUniform1fv"));
2326  glUniform1i = PFNGLUNIFORM1IPROC(glfwGetProcAddress("glUniform1i"));
2327  glUniform1i64ARB = PFNGLUNIFORM1I64ARBPROC(glfwGetProcAddress("glUniform1i64ARB"));
2328  glUniform1i64NV = PFNGLUNIFORM1I64NVPROC(glfwGetProcAddress("glUniform1i64NV"));
2329  glUniform1i64vARB = PFNGLUNIFORM1I64VARBPROC(glfwGetProcAddress("glUniform1i64vARB"));
2330  glUniform1i64vNV = PFNGLUNIFORM1I64VNVPROC(glfwGetProcAddress("glUniform1i64vNV"));
2331  glUniform1iv = PFNGLUNIFORM1IVPROC(glfwGetProcAddress("glUniform1iv"));
2332  glUniform1ui = PFNGLUNIFORM1UIPROC(glfwGetProcAddress("glUniform1ui"));
2333  glUniform1ui64ARB = PFNGLUNIFORM1UI64ARBPROC(glfwGetProcAddress("glUniform1ui64ARB"));
2334  glUniform1ui64NV = PFNGLUNIFORM1UI64NVPROC(glfwGetProcAddress("glUniform1ui64NV"));
2335  glUniform1ui64vARB = PFNGLUNIFORM1UI64VARBPROC(glfwGetProcAddress("glUniform1ui64vARB"));
2336  glUniform1ui64vNV = PFNGLUNIFORM1UI64VNVPROC(glfwGetProcAddress("glUniform1ui64vNV"));
2337  glUniform1uiv = PFNGLUNIFORM1UIVPROC(glfwGetProcAddress("glUniform1uiv"));
2338  glUniform2d = PFNGLUNIFORM2DPROC(glfwGetProcAddress("glUniform2d"));
2339  glUniform2dv = PFNGLUNIFORM2DVPROC(glfwGetProcAddress("glUniform2dv"));
2340  glUniform2f = PFNGLUNIFORM2FPROC(glfwGetProcAddress("glUniform2f"));
2341  glUniform2fv = PFNGLUNIFORM2FVPROC(glfwGetProcAddress("glUniform2fv"));
2342  glUniform2i = PFNGLUNIFORM2IPROC(glfwGetProcAddress("glUniform2i"));
2343  glUniform2i64ARB = PFNGLUNIFORM2I64ARBPROC(glfwGetProcAddress("glUniform2i64ARB"));
2344  glUniform2i64NV = PFNGLUNIFORM2I64NVPROC(glfwGetProcAddress("glUniform2i64NV"));
2345  glUniform2i64vARB = PFNGLUNIFORM2I64VARBPROC(glfwGetProcAddress("glUniform2i64vARB"));
2346  glUniform2i64vNV = PFNGLUNIFORM2I64VNVPROC(glfwGetProcAddress("glUniform2i64vNV"));
2347  glUniform2iv = PFNGLUNIFORM2IVPROC(glfwGetProcAddress("glUniform2iv"));
2348  glUniform2ui = PFNGLUNIFORM2UIPROC(glfwGetProcAddress("glUniform2ui"));
2349  glUniform2ui64ARB = PFNGLUNIFORM2UI64ARBPROC(glfwGetProcAddress("glUniform2ui64ARB"));
2350  glUniform2ui64NV = PFNGLUNIFORM2UI64NVPROC(glfwGetProcAddress("glUniform2ui64NV"));
2351  glUniform2ui64vARB = PFNGLUNIFORM2UI64VARBPROC(glfwGetProcAddress("glUniform2ui64vARB"));
2352  glUniform2ui64vNV = PFNGLUNIFORM2UI64VNVPROC(glfwGetProcAddress("glUniform2ui64vNV"));
2353  glUniform2uiv = PFNGLUNIFORM2UIVPROC(glfwGetProcAddress("glUniform2uiv"));
2354  glUniform3d = PFNGLUNIFORM3DPROC(glfwGetProcAddress("glUniform3d"));
2355  glUniform3dv = PFNGLUNIFORM3DVPROC(glfwGetProcAddress("glUniform3dv"));
2356  glUniform3f = PFNGLUNIFORM3FPROC(glfwGetProcAddress("glUniform3f"));
2357  glUniform3fv = PFNGLUNIFORM3FVPROC(glfwGetProcAddress("glUniform3fv"));
2358  glUniform3i = PFNGLUNIFORM3IPROC(glfwGetProcAddress("glUniform3i"));
2359  glUniform3i64ARB = PFNGLUNIFORM3I64ARBPROC(glfwGetProcAddress("glUniform3i64ARB"));
2360  glUniform3i64NV = PFNGLUNIFORM3I64NVPROC(glfwGetProcAddress("glUniform3i64NV"));
2361  glUniform3i64vARB = PFNGLUNIFORM3I64VARBPROC(glfwGetProcAddress("glUniform3i64vARB"));
2362  glUniform3i64vNV = PFNGLUNIFORM3I64VNVPROC(glfwGetProcAddress("glUniform3i64vNV"));
2363  glUniform3iv = PFNGLUNIFORM3IVPROC(glfwGetProcAddress("glUniform3iv"));
2364  glUniform3ui = PFNGLUNIFORM3UIPROC(glfwGetProcAddress("glUniform3ui"));
2365  glUniform3ui64ARB = PFNGLUNIFORM3UI64ARBPROC(glfwGetProcAddress("glUniform3ui64ARB"));
2366  glUniform3ui64NV = PFNGLUNIFORM3UI64NVPROC(glfwGetProcAddress("glUniform3ui64NV"));
2367  glUniform3ui64vARB = PFNGLUNIFORM3UI64VARBPROC(glfwGetProcAddress("glUniform3ui64vARB"));
2368  glUniform3ui64vNV = PFNGLUNIFORM3UI64VNVPROC(glfwGetProcAddress("glUniform3ui64vNV"));
2369  glUniform3uiv = PFNGLUNIFORM3UIVPROC(glfwGetProcAddress("glUniform3uiv"));
2370  glUniform4d = PFNGLUNIFORM4DPROC(glfwGetProcAddress("glUniform4d"));
2371  glUniform4dv = PFNGLUNIFORM4DVPROC(glfwGetProcAddress("glUniform4dv"));
2372  glUniform4f = PFNGLUNIFORM4FPROC(glfwGetProcAddress("glUniform4f"));
2373  glUniform4fv = PFNGLUNIFORM4FVPROC(glfwGetProcAddress("glUniform4fv"));
2374  glUniform4i = PFNGLUNIFORM4IPROC(glfwGetProcAddress("glUniform4i"));
2375  glUniform4i64ARB = PFNGLUNIFORM4I64ARBPROC(glfwGetProcAddress("glUniform4i64ARB"));
2376  glUniform4i64NV = PFNGLUNIFORM4I64NVPROC(glfwGetProcAddress("glUniform4i64NV"));
2377  glUniform4i64vARB = PFNGLUNIFORM4I64VARBPROC(glfwGetProcAddress("glUniform4i64vARB"));
2378  glUniform4i64vNV = PFNGLUNIFORM4I64VNVPROC(glfwGetProcAddress("glUniform4i64vNV"));
2379  glUniform4iv = PFNGLUNIFORM4IVPROC(glfwGetProcAddress("glUniform4iv"));
2380  glUniform4ui = PFNGLUNIFORM4UIPROC(glfwGetProcAddress("glUniform4ui"));
2381  glUniform4ui64ARB = PFNGLUNIFORM4UI64ARBPROC(glfwGetProcAddress("glUniform4ui64ARB"));
2382  glUniform4ui64NV = PFNGLUNIFORM4UI64NVPROC(glfwGetProcAddress("glUniform4ui64NV"));
2383  glUniform4ui64vARB = PFNGLUNIFORM4UI64VARBPROC(glfwGetProcAddress("glUniform4ui64vARB"));
2384  glUniform4ui64vNV = PFNGLUNIFORM4UI64VNVPROC(glfwGetProcAddress("glUniform4ui64vNV"));
2385  glUniform4uiv = PFNGLUNIFORM4UIVPROC(glfwGetProcAddress("glUniform4uiv"));
2386  glUniformBlockBinding = PFNGLUNIFORMBLOCKBINDINGPROC(glfwGetProcAddress("glUniformBlockBinding"));
2387  glUniformHandleui64ARB = PFNGLUNIFORMHANDLEUI64ARBPROC(glfwGetProcAddress("glUniformHandleui64ARB"));
2388  glUniformHandleui64NV = PFNGLUNIFORMHANDLEUI64NVPROC(glfwGetProcAddress("glUniformHandleui64NV"));
2389  glUniformHandleui64vARB = PFNGLUNIFORMHANDLEUI64VARBPROC(glfwGetProcAddress("glUniformHandleui64vARB"));
2390  glUniformHandleui64vNV = PFNGLUNIFORMHANDLEUI64VNVPROC(glfwGetProcAddress("glUniformHandleui64vNV"));
2391  glUniformMatrix2dv = PFNGLUNIFORMMATRIX2DVPROC(glfwGetProcAddress("glUniformMatrix2dv"));
2392  glUniformMatrix2fv = PFNGLUNIFORMMATRIX2FVPROC(glfwGetProcAddress("glUniformMatrix2fv"));
2393  glUniformMatrix2x3dv = PFNGLUNIFORMMATRIX2X3DVPROC(glfwGetProcAddress("glUniformMatrix2x3dv"));
2394  glUniformMatrix2x3fv = PFNGLUNIFORMMATRIX2X3FVPROC(glfwGetProcAddress("glUniformMatrix2x3fv"));
2395  glUniformMatrix2x4dv = PFNGLUNIFORMMATRIX2X4DVPROC(glfwGetProcAddress("glUniformMatrix2x4dv"));
2396  glUniformMatrix2x4fv = PFNGLUNIFORMMATRIX2X4FVPROC(glfwGetProcAddress("glUniformMatrix2x4fv"));
2397  glUniformMatrix3dv = PFNGLUNIFORMMATRIX3DVPROC(glfwGetProcAddress("glUniformMatrix3dv"));
2398  glUniformMatrix3fv = PFNGLUNIFORMMATRIX3FVPROC(glfwGetProcAddress("glUniformMatrix3fv"));
2399  glUniformMatrix3x2dv = PFNGLUNIFORMMATRIX3X2DVPROC(glfwGetProcAddress("glUniformMatrix3x2dv"));
2400  glUniformMatrix3x2fv = PFNGLUNIFORMMATRIX3X2FVPROC(glfwGetProcAddress("glUniformMatrix3x2fv"));
2401  glUniformMatrix3x4dv = PFNGLUNIFORMMATRIX3X4DVPROC(glfwGetProcAddress("glUniformMatrix3x4dv"));
2402  glUniformMatrix3x4fv = PFNGLUNIFORMMATRIX3X4FVPROC(glfwGetProcAddress("glUniformMatrix3x4fv"));
2403  glUniformMatrix4dv = PFNGLUNIFORMMATRIX4DVPROC(glfwGetProcAddress("glUniformMatrix4dv"));
2404  glUniformMatrix4fv = PFNGLUNIFORMMATRIX4FVPROC(glfwGetProcAddress("glUniformMatrix4fv"));
2405  glUniformMatrix4x2dv = PFNGLUNIFORMMATRIX4X2DVPROC(glfwGetProcAddress("glUniformMatrix4x2dv"));
2406  glUniformMatrix4x2fv = PFNGLUNIFORMMATRIX4X2FVPROC(glfwGetProcAddress("glUniformMatrix4x2fv"));
2407  glUniformMatrix4x3dv = PFNGLUNIFORMMATRIX4X3DVPROC(glfwGetProcAddress("glUniformMatrix4x3dv"));
2408  glUniformMatrix4x3fv = PFNGLUNIFORMMATRIX4X3FVPROC(glfwGetProcAddress("glUniformMatrix4x3fv"));
2409  glUniformSubroutinesuiv = PFNGLUNIFORMSUBROUTINESUIVPROC(glfwGetProcAddress("glUniformSubroutinesuiv"));
2410  glUniformui64NV = PFNGLUNIFORMUI64NVPROC(glfwGetProcAddress("glUniformui64NV"));
2411  glUniformui64vNV = PFNGLUNIFORMUI64VNVPROC(glfwGetProcAddress("glUniformui64vNV"));
2412  glUnmapBuffer = PFNGLUNMAPBUFFERPROC(glfwGetProcAddress("glUnmapBuffer"));
2413  glUnmapNamedBuffer = PFNGLUNMAPNAMEDBUFFERPROC(glfwGetProcAddress("glUnmapNamedBuffer"));
2414  glUnmapNamedBufferEXT = PFNGLUNMAPNAMEDBUFFEREXTPROC(glfwGetProcAddress("glUnmapNamedBufferEXT"));
2415  glUseProgram = PFNGLUSEPROGRAMPROC(glfwGetProcAddress("glUseProgram"));
2416  glUseProgramStages = PFNGLUSEPROGRAMSTAGESPROC(glfwGetProcAddress("glUseProgramStages"));
2417  glUseShaderProgramEXT = PFNGLUSESHADERPROGRAMEXTPROC(glfwGetProcAddress("glUseShaderProgramEXT"));
2418  glValidateProgram = PFNGLVALIDATEPROGRAMPROC(glfwGetProcAddress("glValidateProgram"));
2419  glValidateProgramPipeline = PFNGLVALIDATEPROGRAMPIPELINEPROC(glfwGetProcAddress("glValidateProgramPipeline"));
2420  glVertexArrayAttribBinding = PFNGLVERTEXARRAYATTRIBBINDINGPROC(glfwGetProcAddress("glVertexArrayAttribBinding"));
2421  glVertexArrayAttribFormat = PFNGLVERTEXARRAYATTRIBFORMATPROC(glfwGetProcAddress("glVertexArrayAttribFormat"));
2422  glVertexArrayAttribIFormat = PFNGLVERTEXARRAYATTRIBIFORMATPROC(glfwGetProcAddress("glVertexArrayAttribIFormat"));
2423  glVertexArrayAttribLFormat = PFNGLVERTEXARRAYATTRIBLFORMATPROC(glfwGetProcAddress("glVertexArrayAttribLFormat"));
2424  glVertexArrayBindVertexBufferEXT = PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC(glfwGetProcAddress("glVertexArrayBindVertexBufferEXT"));
2425  glVertexArrayBindingDivisor = PFNGLVERTEXARRAYBINDINGDIVISORPROC(glfwGetProcAddress("glVertexArrayBindingDivisor"));
2426  glVertexArrayColorOffsetEXT = PFNGLVERTEXARRAYCOLOROFFSETEXTPROC(glfwGetProcAddress("glVertexArrayColorOffsetEXT"));
2427  glVertexArrayEdgeFlagOffsetEXT = PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC(glfwGetProcAddress("glVertexArrayEdgeFlagOffsetEXT"));
2428  glVertexArrayElementBuffer = PFNGLVERTEXARRAYELEMENTBUFFERPROC(glfwGetProcAddress("glVertexArrayElementBuffer"));
2429  glVertexArrayFogCoordOffsetEXT = PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC(glfwGetProcAddress("glVertexArrayFogCoordOffsetEXT"));
2430  glVertexArrayIndexOffsetEXT = PFNGLVERTEXARRAYINDEXOFFSETEXTPROC(glfwGetProcAddress("glVertexArrayIndexOffsetEXT"));
2431  glVertexArrayMultiTexCoordOffsetEXT = PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC(glfwGetProcAddress("glVertexArrayMultiTexCoordOffsetEXT"));
2432  glVertexArrayNormalOffsetEXT = PFNGLVERTEXARRAYNORMALOFFSETEXTPROC(glfwGetProcAddress("glVertexArrayNormalOffsetEXT"));
2433  glVertexArraySecondaryColorOffsetEXT = PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC(glfwGetProcAddress("glVertexArraySecondaryColorOffsetEXT"));
2434  glVertexArrayTexCoordOffsetEXT = PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC(glfwGetProcAddress("glVertexArrayTexCoordOffsetEXT"));
2435  glVertexArrayVertexAttribBindingEXT = PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC(glfwGetProcAddress("glVertexArrayVertexAttribBindingEXT"));
2436  glVertexArrayVertexAttribDivisorEXT = PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC(glfwGetProcAddress("glVertexArrayVertexAttribDivisorEXT"));
2437  glVertexArrayVertexAttribFormatEXT = PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC(glfwGetProcAddress("glVertexArrayVertexAttribFormatEXT"));
2438  glVertexArrayVertexAttribIFormatEXT = PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC(glfwGetProcAddress("glVertexArrayVertexAttribIFormatEXT"));
2439  glVertexArrayVertexAttribIOffsetEXT = PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC(glfwGetProcAddress("glVertexArrayVertexAttribIOffsetEXT"));
2440  glVertexArrayVertexAttribLFormatEXT = PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC(glfwGetProcAddress("glVertexArrayVertexAttribLFormatEXT"));
2441  glVertexArrayVertexAttribLOffsetEXT = PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC(glfwGetProcAddress("glVertexArrayVertexAttribLOffsetEXT"));
2442  glVertexArrayVertexAttribOffsetEXT = PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC(glfwGetProcAddress("glVertexArrayVertexAttribOffsetEXT"));
2443  glVertexArrayVertexBindingDivisorEXT = PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC(glfwGetProcAddress("glVertexArrayVertexBindingDivisorEXT"));
2444  glVertexArrayVertexBuffer = PFNGLVERTEXARRAYVERTEXBUFFERPROC(glfwGetProcAddress("glVertexArrayVertexBuffer"));
2445  glVertexArrayVertexBuffers = PFNGLVERTEXARRAYVERTEXBUFFERSPROC(glfwGetProcAddress("glVertexArrayVertexBuffers"));
2446  glVertexArrayVertexOffsetEXT = PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC(glfwGetProcAddress("glVertexArrayVertexOffsetEXT"));
2447  glVertexAttrib1d = PFNGLVERTEXATTRIB1DPROC(glfwGetProcAddress("glVertexAttrib1d"));
2448  glVertexAttrib1dv = PFNGLVERTEXATTRIB1DVPROC(glfwGetProcAddress("glVertexAttrib1dv"));
2449  glVertexAttrib1f = PFNGLVERTEXATTRIB1FPROC(glfwGetProcAddress("glVertexAttrib1f"));
2450  glVertexAttrib1fv = PFNGLVERTEXATTRIB1FVPROC(glfwGetProcAddress("glVertexAttrib1fv"));
2451  glVertexAttrib1s = PFNGLVERTEXATTRIB1SPROC(glfwGetProcAddress("glVertexAttrib1s"));
2452  glVertexAttrib1sv = PFNGLVERTEXATTRIB1SVPROC(glfwGetProcAddress("glVertexAttrib1sv"));
2453  glVertexAttrib2d = PFNGLVERTEXATTRIB2DPROC(glfwGetProcAddress("glVertexAttrib2d"));
2454  glVertexAttrib2dv = PFNGLVERTEXATTRIB2DVPROC(glfwGetProcAddress("glVertexAttrib2dv"));
2455  glVertexAttrib2f = PFNGLVERTEXATTRIB2FPROC(glfwGetProcAddress("glVertexAttrib2f"));
2456  glVertexAttrib2fv = PFNGLVERTEXATTRIB2FVPROC(glfwGetProcAddress("glVertexAttrib2fv"));
2457  glVertexAttrib2s = PFNGLVERTEXATTRIB2SPROC(glfwGetProcAddress("glVertexAttrib2s"));
2458  glVertexAttrib2sv = PFNGLVERTEXATTRIB2SVPROC(glfwGetProcAddress("glVertexAttrib2sv"));
2459  glVertexAttrib3d = PFNGLVERTEXATTRIB3DPROC(glfwGetProcAddress("glVertexAttrib3d"));
2460  glVertexAttrib3dv = PFNGLVERTEXATTRIB3DVPROC(glfwGetProcAddress("glVertexAttrib3dv"));
2461  glVertexAttrib3f = PFNGLVERTEXATTRIB3FPROC(glfwGetProcAddress("glVertexAttrib3f"));
2462  glVertexAttrib3fv = PFNGLVERTEXATTRIB3FVPROC(glfwGetProcAddress("glVertexAttrib3fv"));
2463  glVertexAttrib3s = PFNGLVERTEXATTRIB3SPROC(glfwGetProcAddress("glVertexAttrib3s"));
2464  glVertexAttrib3sv = PFNGLVERTEXATTRIB3SVPROC(glfwGetProcAddress("glVertexAttrib3sv"));
2465  glVertexAttrib4Nbv = PFNGLVERTEXATTRIB4NBVPROC(glfwGetProcAddress("glVertexAttrib4Nbv"));
2466  glVertexAttrib4Niv = PFNGLVERTEXATTRIB4NIVPROC(glfwGetProcAddress("glVertexAttrib4Niv"));
2467  glVertexAttrib4Nsv = PFNGLVERTEXATTRIB4NSVPROC(glfwGetProcAddress("glVertexAttrib4Nsv"));
2468  glVertexAttrib4Nub = PFNGLVERTEXATTRIB4NUBPROC(glfwGetProcAddress("glVertexAttrib4Nub"));
2469  glVertexAttrib4Nubv = PFNGLVERTEXATTRIB4NUBVPROC(glfwGetProcAddress("glVertexAttrib4Nubv"));
2470  glVertexAttrib4Nuiv = PFNGLVERTEXATTRIB4NUIVPROC(glfwGetProcAddress("glVertexAttrib4Nuiv"));
2471  glVertexAttrib4Nusv = PFNGLVERTEXATTRIB4NUSVPROC(glfwGetProcAddress("glVertexAttrib4Nusv"));
2472  glVertexAttrib4bv = PFNGLVERTEXATTRIB4BVPROC(glfwGetProcAddress("glVertexAttrib4bv"));
2473  glVertexAttrib4d = PFNGLVERTEXATTRIB4DPROC(glfwGetProcAddress("glVertexAttrib4d"));
2474  glVertexAttrib4dv = PFNGLVERTEXATTRIB4DVPROC(glfwGetProcAddress("glVertexAttrib4dv"));
2475  glVertexAttrib4f = PFNGLVERTEXATTRIB4FPROC(glfwGetProcAddress("glVertexAttrib4f"));
2476  glVertexAttrib4fv = PFNGLVERTEXATTRIB4FVPROC(glfwGetProcAddress("glVertexAttrib4fv"));
2477  glVertexAttrib4iv = PFNGLVERTEXATTRIB4IVPROC(glfwGetProcAddress("glVertexAttrib4iv"));
2478  glVertexAttrib4s = PFNGLVERTEXATTRIB4SPROC(glfwGetProcAddress("glVertexAttrib4s"));
2479  glVertexAttrib4sv = PFNGLVERTEXATTRIB4SVPROC(glfwGetProcAddress("glVertexAttrib4sv"));
2480  glVertexAttrib4ubv = PFNGLVERTEXATTRIB4UBVPROC(glfwGetProcAddress("glVertexAttrib4ubv"));
2481  glVertexAttrib4uiv = PFNGLVERTEXATTRIB4UIVPROC(glfwGetProcAddress("glVertexAttrib4uiv"));
2482  glVertexAttrib4usv = PFNGLVERTEXATTRIB4USVPROC(glfwGetProcAddress("glVertexAttrib4usv"));
2483  glVertexAttribBinding = PFNGLVERTEXATTRIBBINDINGPROC(glfwGetProcAddress("glVertexAttribBinding"));
2484  glVertexAttribDivisor = PFNGLVERTEXATTRIBDIVISORPROC(glfwGetProcAddress("glVertexAttribDivisor"));
2485  glVertexAttribDivisorARB = PFNGLVERTEXATTRIBDIVISORARBPROC(glfwGetProcAddress("glVertexAttribDivisorARB"));
2486  glVertexAttribFormat = PFNGLVERTEXATTRIBFORMATPROC(glfwGetProcAddress("glVertexAttribFormat"));
2487  glVertexAttribFormatNV = PFNGLVERTEXATTRIBFORMATNVPROC(glfwGetProcAddress("glVertexAttribFormatNV"));
2488  glVertexAttribI1i = PFNGLVERTEXATTRIBI1IPROC(glfwGetProcAddress("glVertexAttribI1i"));
2489  glVertexAttribI1iv = PFNGLVERTEXATTRIBI1IVPROC(glfwGetProcAddress("glVertexAttribI1iv"));
2490  glVertexAttribI1ui = PFNGLVERTEXATTRIBI1UIPROC(glfwGetProcAddress("glVertexAttribI1ui"));
2491  glVertexAttribI1uiv = PFNGLVERTEXATTRIBI1UIVPROC(glfwGetProcAddress("glVertexAttribI1uiv"));
2492  glVertexAttribI2i = PFNGLVERTEXATTRIBI2IPROC(glfwGetProcAddress("glVertexAttribI2i"));
2493  glVertexAttribI2iv = PFNGLVERTEXATTRIBI2IVPROC(glfwGetProcAddress("glVertexAttribI2iv"));
2494  glVertexAttribI2ui = PFNGLVERTEXATTRIBI2UIPROC(glfwGetProcAddress("glVertexAttribI2ui"));
2495  glVertexAttribI2uiv = PFNGLVERTEXATTRIBI2UIVPROC(glfwGetProcAddress("glVertexAttribI2uiv"));
2496  glVertexAttribI3i = PFNGLVERTEXATTRIBI3IPROC(glfwGetProcAddress("glVertexAttribI3i"));
2497  glVertexAttribI3iv = PFNGLVERTEXATTRIBI3IVPROC(glfwGetProcAddress("glVertexAttribI3iv"));
2498  glVertexAttribI3ui = PFNGLVERTEXATTRIBI3UIPROC(glfwGetProcAddress("glVertexAttribI3ui"));
2499  glVertexAttribI3uiv = PFNGLVERTEXATTRIBI3UIVPROC(glfwGetProcAddress("glVertexAttribI3uiv"));
2500  glVertexAttribI4bv = PFNGLVERTEXATTRIBI4BVPROC(glfwGetProcAddress("glVertexAttribI4bv"));
2501  glVertexAttribI4i = PFNGLVERTEXATTRIBI4IPROC(glfwGetProcAddress("glVertexAttribI4i"));
2502  glVertexAttribI4iv = PFNGLVERTEXATTRIBI4IVPROC(glfwGetProcAddress("glVertexAttribI4iv"));
2503  glVertexAttribI4sv = PFNGLVERTEXATTRIBI4SVPROC(glfwGetProcAddress("glVertexAttribI4sv"));
2504  glVertexAttribI4ubv = PFNGLVERTEXATTRIBI4UBVPROC(glfwGetProcAddress("glVertexAttribI4ubv"));
2505  glVertexAttribI4ui = PFNGLVERTEXATTRIBI4UIPROC(glfwGetProcAddress("glVertexAttribI4ui"));
2506  glVertexAttribI4uiv = PFNGLVERTEXATTRIBI4UIVPROC(glfwGetProcAddress("glVertexAttribI4uiv"));
2507  glVertexAttribI4usv = PFNGLVERTEXATTRIBI4USVPROC(glfwGetProcAddress("glVertexAttribI4usv"));
2508  glVertexAttribIFormat = PFNGLVERTEXATTRIBIFORMATPROC(glfwGetProcAddress("glVertexAttribIFormat"));
2509  glVertexAttribIFormatNV = PFNGLVERTEXATTRIBIFORMATNVPROC(glfwGetProcAddress("glVertexAttribIFormatNV"));
2510  glVertexAttribIPointer = PFNGLVERTEXATTRIBIPOINTERPROC(glfwGetProcAddress("glVertexAttribIPointer"));
2511  glVertexAttribL1d = PFNGLVERTEXATTRIBL1DPROC(glfwGetProcAddress("glVertexAttribL1d"));
2512  glVertexAttribL1dv = PFNGLVERTEXATTRIBL1DVPROC(glfwGetProcAddress("glVertexAttribL1dv"));
2513  glVertexAttribL1i64NV = PFNGLVERTEXATTRIBL1I64NVPROC(glfwGetProcAddress("glVertexAttribL1i64NV"));
2514  glVertexAttribL1i64vNV = PFNGLVERTEXATTRIBL1I64VNVPROC(glfwGetProcAddress("glVertexAttribL1i64vNV"));
2515  glVertexAttribL1ui64ARB = PFNGLVERTEXATTRIBL1UI64ARBPROC(glfwGetProcAddress("glVertexAttribL1ui64ARB"));
2516  glVertexAttribL1ui64NV = PFNGLVERTEXATTRIBL1UI64NVPROC(glfwGetProcAddress("glVertexAttribL1ui64NV"));
2517  glVertexAttribL1ui64vARB = PFNGLVERTEXATTRIBL1UI64VARBPROC(glfwGetProcAddress("glVertexAttribL1ui64vARB"));
2518  glVertexAttribL1ui64vNV = PFNGLVERTEXATTRIBL1UI64VNVPROC(glfwGetProcAddress("glVertexAttribL1ui64vNV"));
2519  glVertexAttribL2d = PFNGLVERTEXATTRIBL2DPROC(glfwGetProcAddress("glVertexAttribL2d"));
2520  glVertexAttribL2dv = PFNGLVERTEXATTRIBL2DVPROC(glfwGetProcAddress("glVertexAttribL2dv"));
2521  glVertexAttribL2i64NV = PFNGLVERTEXATTRIBL2I64NVPROC(glfwGetProcAddress("glVertexAttribL2i64NV"));
2522  glVertexAttribL2i64vNV = PFNGLVERTEXATTRIBL2I64VNVPROC(glfwGetProcAddress("glVertexAttribL2i64vNV"));
2523  glVertexAttribL2ui64NV = PFNGLVERTEXATTRIBL2UI64NVPROC(glfwGetProcAddress("glVertexAttribL2ui64NV"));
2524  glVertexAttribL2ui64vNV = PFNGLVERTEXATTRIBL2UI64VNVPROC(glfwGetProcAddress("glVertexAttribL2ui64vNV"));
2525  glVertexAttribL3d = PFNGLVERTEXATTRIBL3DPROC(glfwGetProcAddress("glVertexAttribL3d"));
2526  glVertexAttribL3dv = PFNGLVERTEXATTRIBL3DVPROC(glfwGetProcAddress("glVertexAttribL3dv"));
2527  glVertexAttribL3i64NV = PFNGLVERTEXATTRIBL3I64NVPROC(glfwGetProcAddress("glVertexAttribL3i64NV"));
2528  glVertexAttribL3i64vNV = PFNGLVERTEXATTRIBL3I64VNVPROC(glfwGetProcAddress("glVertexAttribL3i64vNV"));
2529  glVertexAttribL3ui64NV = PFNGLVERTEXATTRIBL3UI64NVPROC(glfwGetProcAddress("glVertexAttribL3ui64NV"));
2530  glVertexAttribL3ui64vNV = PFNGLVERTEXATTRIBL3UI64VNVPROC(glfwGetProcAddress("glVertexAttribL3ui64vNV"));
2531  glVertexAttribL4d = PFNGLVERTEXATTRIBL4DPROC(glfwGetProcAddress("glVertexAttribL4d"));
2532  glVertexAttribL4dv = PFNGLVERTEXATTRIBL4DVPROC(glfwGetProcAddress("glVertexAttribL4dv"));
2533  glVertexAttribL4i64NV = PFNGLVERTEXATTRIBL4I64NVPROC(glfwGetProcAddress("glVertexAttribL4i64NV"));
2534  glVertexAttribL4i64vNV = PFNGLVERTEXATTRIBL4I64VNVPROC(glfwGetProcAddress("glVertexAttribL4i64vNV"));
2535  glVertexAttribL4ui64NV = PFNGLVERTEXATTRIBL4UI64NVPROC(glfwGetProcAddress("glVertexAttribL4ui64NV"));
2536  glVertexAttribL4ui64vNV = PFNGLVERTEXATTRIBL4UI64VNVPROC(glfwGetProcAddress("glVertexAttribL4ui64vNV"));
2537  glVertexAttribLFormat = PFNGLVERTEXATTRIBLFORMATPROC(glfwGetProcAddress("glVertexAttribLFormat"));
2538  glVertexAttribLFormatNV = PFNGLVERTEXATTRIBLFORMATNVPROC(glfwGetProcAddress("glVertexAttribLFormatNV"));
2539  glVertexAttribLPointer = PFNGLVERTEXATTRIBLPOINTERPROC(glfwGetProcAddress("glVertexAttribLPointer"));
2540  glVertexAttribP1ui = PFNGLVERTEXATTRIBP1UIPROC(glfwGetProcAddress("glVertexAttribP1ui"));
2541  glVertexAttribP1uiv = PFNGLVERTEXATTRIBP1UIVPROC(glfwGetProcAddress("glVertexAttribP1uiv"));
2542  glVertexAttribP2ui = PFNGLVERTEXATTRIBP2UIPROC(glfwGetProcAddress("glVertexAttribP2ui"));
2543  glVertexAttribP2uiv = PFNGLVERTEXATTRIBP2UIVPROC(glfwGetProcAddress("glVertexAttribP2uiv"));
2544  glVertexAttribP3ui = PFNGLVERTEXATTRIBP3UIPROC(glfwGetProcAddress("glVertexAttribP3ui"));
2545  glVertexAttribP3uiv = PFNGLVERTEXATTRIBP3UIVPROC(glfwGetProcAddress("glVertexAttribP3uiv"));
2546  glVertexAttribP4ui = PFNGLVERTEXATTRIBP4UIPROC(glfwGetProcAddress("glVertexAttribP4ui"));
2547  glVertexAttribP4uiv = PFNGLVERTEXATTRIBP4UIVPROC(glfwGetProcAddress("glVertexAttribP4uiv"));
2548  glVertexAttribPointer = PFNGLVERTEXATTRIBPOINTERPROC(glfwGetProcAddress("glVertexAttribPointer"));
2549  glVertexBindingDivisor = PFNGLVERTEXBINDINGDIVISORPROC(glfwGetProcAddress("glVertexBindingDivisor"));
2550  glVertexFormatNV = PFNGLVERTEXFORMATNVPROC(glfwGetProcAddress("glVertexFormatNV"));
2551  glViewport = PFNGLVIEWPORTPROC(glfwGetProcAddress("glViewport"));
2552  glViewportArrayv = PFNGLVIEWPORTARRAYVPROC(glfwGetProcAddress("glViewportArrayv"));
2553  glViewportIndexedf = PFNGLVIEWPORTINDEXEDFPROC(glfwGetProcAddress("glViewportIndexedf"));
2554  glViewportIndexedfv = PFNGLVIEWPORTINDEXEDFVPROC(glfwGetProcAddress("glViewportIndexedfv"));
2555  glViewportPositionWScaleNV = PFNGLVIEWPORTPOSITIONWSCALENVPROC(glfwGetProcAddress("glViewportPositionWScaleNV"));
2556  glViewportSwizzleNV = PFNGLVIEWPORTSWIZZLENVPROC(glfwGetProcAddress("glViewportSwizzleNV"));
2557  glWaitSync = PFNGLWAITSYNCPROC(glfwGetProcAddress("glWaitSync"));
2558  glWaitVkSemaphoreNV = PFNGLWAITVKSEMAPHORENVPROC(glfwGetProcAddress("glWaitVkSemaphoreNV"));
2559  glWeightPathsNV = PFNGLWEIGHTPATHSNVPROC(glfwGetProcAddress("glWeightPathsNV"));
2560  glWindowRectanglesEXT = PFNGLWINDOWRECTANGLESEXTPROC(glfwGetProcAddress("glWindowRectanglesEXT"));
2561 #endif
2562 
2563  // 使用している GPU のバッファアライメントを調べる
2564  glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &ggBufferAlignment);
2565 }
2566 
2567 /*
2568 ** OpenGL のエラーをチェックする
2569 **
2570 ** OpenGL の API を呼び出し直後に実行すればエラーのあるときにメッセージを表示する
2571 **
2572 ** msg エラー発生時に標準エラー出力に出力する文字列. nullptr なら何も出力しない
2573 */
2574 void gg::_ggError(const char *name, unsigned int line)
2575 {
2576  const GLenum error(glGetError());
2577 
2578  if (error != GL_NO_ERROR)
2579  {
2580  if (name)
2581  {
2582  std::cerr << name;
2583  if (line > 0) std::cerr << " (" << line << ")";
2584  std::cerr << ": ";
2585  }
2586 
2587  switch (error)
2588  {
2589  case GL_INVALID_ENUM:
2590  std::cerr << "An unacceptable value is specified for an enumerated argument" << std::endl;
2591  break;
2592  case GL_INVALID_VALUE:
2593  std::cerr << "A numeric argument is out of range" << std::endl;
2594  break;
2595  case GL_INVALID_OPERATION:
2596  std::cerr << "The specified operation is not allowed in the current state" << std::endl;
2597  break;
2598  case GL_OUT_OF_MEMORY:
2599  std::cerr << "There is not enough memory left to execute the command" << std::endl;
2600  break;
2601  case GL_INVALID_FRAMEBUFFER_OPERATION:
2602  std::cerr << "The specified operation is not allowed current frame buffer" << std::endl;
2603  break;
2604  default:
2605  std::cerr << "An OpenGL error has occured: " << std::hex << std::showbase << error << std::endl;
2606  break;
2607  }
2608  }
2609 }
2610 
2611 /*
2612 ** FBO のエラーをチェックする
2613 **
2614 ** FBO の API を呼び出し直後に実行すればエラーのあるときにメッセージを表示する
2615 **
2616 ** msg エラー発生時に標準エラー出力に出力する文字列. nullptr なら何も出力しない
2617 */
2618 void gg::_ggFBOError(const char *name, unsigned int line)
2619 {
2620  const GLenum status(glCheckFramebufferStatus(GL_FRAMEBUFFER));
2621 
2622  if (status != GL_FRAMEBUFFER_COMPLETE)
2623  {
2624  if (name)
2625  {
2626  std::cerr << name;
2627  if (line > 0) std::cerr << " (" << line << ")";
2628  std::cerr << ": ";
2629  }
2630 
2631  switch (status)
2632  {
2633  case GL_FRAMEBUFFER_UNSUPPORTED:
2634  std::cerr << "Unsupported framebuffer internal" << std::endl;
2635  break;
2636  case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
2637  std::cerr << "Framebuffer incomplete, missing attachment" << std::endl;
2638  break;
2639  case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
2640  std::cerr << "Framebuffer incomplete, duplicate attachment" << std::endl;
2641  break;
2642  case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER:
2643  std::cerr << "Framebuffer incomplete, missing draw buffer" << std::endl;
2644  break;
2645  case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER:
2646  std::cerr << "Framebuffer incomplete, missing read buffer" << std::endl;
2647  break;
2648  default:
2649  std::cerr << "Programming error; will fail on all hardware: " << std::hex << std::showbase << status << std::endl;
2650  break;
2651  }
2652  }
2653 }
2654 
2655 /*
2656 ** 配列に格納された画像の内容を TGA ファイルに保存する
2657 **
2658 ** name ファイル名
2659 ** buffer 画像データ
2660 ** width 画像の横の画素数
2661 ** height 画像の縦の画素数
2662 ** depth 画像の 1 画素のバイト数
2663 ** 戻り値 保存に成功すれば true, 失敗すれば false
2664 */
2665 bool gg::ggSaveTga(const char *name, const void *buffer,
2666  unsigned int width, unsigned int height, unsigned int depth)
2667 {
2668  // ファイルを開く
2669  std::ofstream file(name, std::ios::binary);
2670 
2671  // ファイルが開けなかったら戻る
2672  if (!file) return false;
2673 
2674  // 画像のヘッダ
2675  const unsigned char type(depth == 0 ? 0 : depth < 3 ? 3 : 2);
2676  const unsigned char alpha(depth == 2 || depth == 4 ? 8 : 0);
2677  const unsigned char header[18] =
2678  {
2679  0, // ID length
2680  0, // Color map type (none)
2681  type, // Image Type (2:RGB, 3:Grayscale)
2682  0, 0, // Offset into the color map table
2683  0, 0, // Number of color map entries
2684  0, // Number of a color map entry bits per pixel
2685  0, 0, // Horizontal image position
2686  0, 0, // Vertical image position
2687  static_cast<unsigned char>(width & 0xff),
2688  static_cast<unsigned char>(width >> 8),
2689  static_cast<unsigned char>(height & 0xff),
2690  static_cast<unsigned char>(height >> 8),
2691  static_cast<unsigned char>(depth * 8),
2692  alpha // Image descriptor
2693  };
2694 
2695  // ヘッダを書き込む
2696  file.write(reinterpret_cast<const char *>(header), sizeof header);
2697 
2698  // ヘッダの書き込みに失敗したら戻る
2699  if (file.bad())
2700  {
2701  file.close();
2702  return false;
2703  }
2704 
2705  // データを書き込む
2706  unsigned int size(width * height * depth);
2707  if (type == 2)
2708  {
2709  // フルカラー
2710  std::vector<char> temp(size);
2711  for (GLuint i = 0; i < size; i += depth)
2712  {
2713  temp[i + 2] = static_cast<const char *>(buffer)[i + 0];
2714  temp[i + 1] = static_cast<const char *>(buffer)[i + 1];
2715  temp[i + 0] = static_cast<const char *>(buffer)[i + 2];
2716  if (depth == 4) temp[i + 3] = static_cast<const char *>(buffer)[i + 3];
2717  }
2718  file.write(&temp[0], size);
2719  }
2720  else if (type == 3)
2721  {
2722  // グレースケール
2723  file.write(static_cast<const char *>(buffer), size);
2724  }
2725 
2726  // フッタを書き込む
2727  constexpr char footer[] = "\0\0\0\0\0\0\0\0TRUEVISION-XFILE.";
2728  file.write(footer, sizeof footer);
2729 
2730  // データの書き込みに失敗したら戻る
2731  if (file.bad())
2732  {
2733  file.close();
2734  return false;
2735  }
2736 
2737  // ファイルを閉じる
2738  file.close();
2739  return true;
2740 }
2741 
2742 /*
2743 ** カラーバッファの内容を TGA ファイルに保存する
2744 **
2745 ** name 保存するファイル名
2746 ** 戻り値 保存に成功すれば true, 失敗すれば false
2747 */
2748 bool gg::ggSaveColor(const char *name)
2749 {
2750  // 現在のビューポートのサイズを得る
2751  GLint viewport[4];
2752  glGetIntegerv(GL_VIEWPORT, viewport);
2753 
2754  // ビューポートのサイズ分のメモリを確保する
2755  std::vector<GLubyte> buffer(viewport[2] * viewport[3] * 3);
2756 
2757  // 画面表示の完了を待つ
2758  glFinish();
2759 
2760  // カラーバッファを読み込む
2761  glReadPixels(viewport[0], viewport[1], viewport[2], viewport[3],
2762  GL_BGR, GL_UNSIGNED_BYTE, buffer.data());
2763 
2764  // 読み込んだデータをファイルに書き込む
2765  return ggSaveTga(name, buffer.data(), viewport[2], viewport[3], 3);
2766 }
2767 
2768 /*
2769 ** デプスバッファの内容を TGA ファイルに保存する
2770 **
2771 ** name 保存するファイル名
2772 ** 戻り値 保存に成功すれば true, 失敗すれば false
2773 */
2774 bool gg::ggSaveDepth(const char *name)
2775 {
2776  // 現在のビューポートのサイズを得る
2777  GLint viewport[4];
2778  glGetIntegerv(GL_VIEWPORT, viewport);
2779 
2780  // ビューポートのサイズ分のメモリを確保する
2781  std::vector<GLubyte> buffer(viewport[2] * viewport[3]);
2782 
2783  // 画面表示の完了を待つ
2784  glFinish();
2785 
2786  // デプスバッファを読み込む
2787  glReadPixels(viewport[0], viewport[1], viewport[2], viewport[3],
2788  GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, buffer.data());
2789 
2790  // 読み込んだデータをファイルに書き込む
2791  return ggSaveTga(name, buffer.data(), viewport[2], viewport[3], 1);
2792 }
2793 
2794 /*
2795 ** TGA ファイル (8/16/24/32bit) を読み込む
2796 **
2797 ** name 読み込むファイル名
2798 ** pWidth 読み込んだファイルの横の画素数の格納先のポインタ (nullptr なら格納しない)
2799 ** pHeight 読み込んだファイルの縦の画素数の格納先のポインタ (nullptr なら格納しない)
2800 ** pFormat 読み込んだファイルのフォーマットの格納先のポインタ (nullptr なら格納しない)
2801 ** image 読み込んだ画像を格納する vector
2802 ** 戻り値 読み込みに成功すれば true, 失敗すれば false
2803 */
2804 bool gg::ggReadImage(const char *name, std::vector<GLubyte> &image, GLsizei *pWidth, GLsizei *pHeight, GLenum *pFormat)
2805 {
2806  // ファイルを開く
2807  std::ifstream file(name, std::ios::binary);
2808 
2809  // ファイルが開けなかったら戻る
2810  if (!file) return false;
2811 
2812  // ヘッダを読み込む
2813  unsigned char header[18];
2814  file.read(reinterpret_cast<char *>(header), sizeof header);
2815 
2816  // ヘッダの読み込みに失敗したら戻る
2817  if (file.bad())
2818  {
2819  file.close();
2820  return false;
2821  }
2822 
2823  // 深度
2824  const int depth(header[16] / 8);
2825  switch (depth)
2826  {
2827  case 1:
2828  *pFormat = GL_RED;
2829  break;
2830  case 2:
2831  *pFormat = GL_RG;
2832  break;
2833  case 3:
2834  *pFormat = GL_BGR;
2835  break;
2836  case 4:
2837  *pFormat = GL_BGRA;
2838  break;
2839  default:
2840  // 取り扱えないフォーマットだったら戻る
2841  file.close();
2842  return false;
2843  }
2844 
2845  // 画像の縦横の画素数
2846  *pWidth = header[13] << 8 | header[12];
2847  *pHeight = header[15] << 8 | header[14];
2848 
2849  // データサイズ
2850  const int size(*pWidth * *pHeight * depth);
2851  if (size < 2) return false;
2852 
2853  // 読み込みに使うメモリを確保する
2854  image.resize(size);
2855 
2856  // データを読み込む
2857  if (header[2] & 8)
2858  {
2859  // RLE
2860  int p(0);
2861  char c;
2862  while (file.get(c))
2863  {
2864  if (c & 0x80)
2865  {
2866  // run-length packet
2867  const int count((c & 0x7f) + 1);
2868  if (p + depth * count > size) break;
2869  char temp[4];
2870  file.read(temp, depth);
2871  for (int i = 0; i < count; ++i)
2872  {
2873  for (int j = 0; j < depth;) image[p++] = temp[j++];
2874  }
2875  }
2876  else
2877  {
2878  // raw packet
2879  const int count((c + 1) * depth);
2880  if (p + count > size) break;
2881  file.read(reinterpret_cast<char *>(&image[p]), count);
2882  p += count;
2883  }
2884  }
2885  }
2886  else
2887  {
2888  // 非圧縮
2889  file.read(reinterpret_cast<char *>(image.data()), size);
2890  }
2891 
2892  // 読み込みに失敗したら戻る
2893  if (file.bad())
2894  {
2895  file.close();
2896  return false;
2897  }
2898 
2899  // ファイルを閉じる
2900  file.close();
2901  return true;
2902 }
2903 
2904 /*
2905 ** テクスチャメモリを確保して画像を読み込む
2906 **
2907 ** image 画像データ, nullptr ならメモリの確保だけを行う
2908 ** width 画像の横の画素数
2909 ** height 画像の縦の画素数
2910 ** format 画像データのフォーマット
2911 ** type 画像のデータ型
2912 ** internal テクスチャの内部フォーマット
2913 ** wrap テクスチャのラッピングモード, デフォルトは GL_CLAMP_TO_EDGE
2914 ** 戻り値 テクスチャ名
2915 */
2916 GLuint gg::ggLoadTexture(const GLvoid *image, GLsizei width, GLsizei height,
2917  GLenum format, GLenum type, GLenum internal, GLenum wrap)
2918 {
2919  // テクスチャオブジェクト
2920  const GLuint tex([] { GLuint tex; glGenTextures(1, &tex); return tex; } ());
2921  glBindTexture(GL_TEXTURE_2D, tex);
2922 
2923  // アルファチャンネルがついていれば 4 バイト境界に設定する
2924  glPixelStorei(GL_UNPACK_ALIGNMENT, (format == GL_BGRA || format == GL_RGBA) ? 4 : 1);
2925 
2926  // テクスチャを割り当てる
2927  glTexImage2D(GL_TEXTURE_2D, 0, internal, width, height, 0, format, type, image);
2928 
2929  // バイリニア(ミップマップなし),エッジでクランプ
2930  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
2931  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
2932  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap);
2933  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap);
2934 
2935  // テクスチャ名を返す
2936  return tex;
2937 }
2938 
2939 /*
2940 ** TGA ファイルをテクスチャメモリに読み込む
2941 **
2942 ** name TGA ファイル名
2943 ** pWidth 読みだした画像ファイルの横の画素数の格納先のポインタ (nullptr なら格納しない)
2944 ++ pHeight 読みだした画像ファイルの縦の画素数の格納先のポインタ (nullptr なら格納しない)
2945 ** internal テクスチャの内部フォーマット, 0 なら外部フォーマットに合わせる.
2946 ** wrap テクスチャのラッピングモード, デフォルトは GL_CLAMP_TO_EDGE
2947 ** 戻り値 テクスチャ名
2948 */
2949 GLuint gg::ggLoadImage(const char *name, GLsizei *pWidth, GLsizei *pHeight, GLenum internal, GLenum wrap)
2950 {
2951  // 画像データ
2952  std::vector<GLubyte> image;
2953 
2954  // 画像サイズ
2955  GLsizei width, height;
2956 
2957  // 画像フォーマット
2958  GLenum format;
2959 
2960  // 画像を読み込む
2961  ggReadImage(name, image, &width, &height, &format);
2962 
2963  // 画像が読み込めなかったら戻る
2964  if (image.empty()) return 0;
2965 
2966  // internal == 0 なら内部フォーマットを読み込んだファイルに合わせる
2967  if (internal == 0)
2968  {
2969  switch (format)
2970  {
2971  case GL_BGR:
2972  internal = GL_RGB;
2973  break;
2974  case GL_BGRA:
2975  internal = GL_RGBA;
2976  break;
2977  default:
2978  internal = format;
2979  break;
2980  }
2981  }
2982 
2983  // テクスチャメモリに読み込む
2984  const GLuint tex(ggLoadTexture(image.data(), width, height, format, GL_UNSIGNED_BYTE, internal, wrap));
2985 
2986  // 画像サイズを返す
2987  if (pWidth) *pWidth = width;
2988  if (pHeight) *pHeight = height;
2989 
2990  // テクスチャ名を返す
2991  return tex;
2992 }
2993 
2994 /*
2995 ** グレースケール画像 (8bit) から法線マップのデータを作成する
2996 **
2997 ** width 高さマップのグレースケール画像 hmap の横の画素数
2998 ** height 高さマップのグレースケール画像のデータ hmap の縦の画素数
2999 ** stride データの間隔
3000 ** hmap グレースケール画像のデータ
3001 ** nz 法線の z 成分の割合
3002 ** internal テクスチャの内部フォーマット
3003 ** nmap 法線マップを格納する vector
3004 */
3005 void gg::ggCreateNormalMap(const GLubyte *hmap, GLsizei width, GLsizei height, GLenum format, GLfloat nz,
3006  GLenum internal, std::vector<GgVector> &nmap)
3007 {
3008  // メモリサイズ
3009  const GLsizei size(width * height);
3010 
3011  // 法線マップのメモリを確保する
3012  nmap.resize(size);
3013 
3014  // 画素のバイト数
3015  GLint stride;
3016  switch (format)
3017  {
3018  case GL_RED:
3019  stride = 1;
3020  break;
3021  case GL_RG:
3022  stride = 2;
3023  break;
3024  case GL_RGB:
3025  case GL_BGR:
3026  stride = 3;
3027  break;
3028  case GL_RGBA:
3029  case GL_BGRA:
3030  stride = 4;
3031  break;
3032  default:
3033  stride = 1;
3034  break;
3035  }
3036 
3037  // 法線マップの作成
3038  for (GLsizei i = 0; i < size; ++i)
3039  {
3040  const int x(i % width);
3041  const int y(i - x);
3042  const int u0((y + (x - 1 + width) % width) * stride);
3043  const int u1((y + (x + 1) % width) * stride);
3044  const int v0(((y - width + size) % size + x) * stride);
3045  const int v1(((y + width) % size + x) * stride);
3046 
3047  // 隣接する画素との値の差を法線の成分に用いる
3048  nmap[i][0] = static_cast<GLfloat>(hmap[u1] - hmap[u0]);
3049  nmap[i][1] = static_cast<GLfloat>(hmap[v1] - hmap[v0]);
3050  nmap[i][2] = nz;
3051  nmap[i][3] = hmap[i * stride];
3052 
3053  // 法線ベクトルを正規化する
3054  ggNormalize3(nmap[i].data());
3055  }
3056 
3057  // 内部フォーマットが浮動小数点テクスチャでなければ [0,1] に正規化する
3058  if (
3059  internal != GL_RGB16F &&
3060  internal != GL_RGBA16F &&
3061  internal != GL_RGB32F &&
3062  internal != GL_RGBA32F
3063  )
3064  {
3065  for (GLsizei i = 0; i < size; ++i)
3066  {
3067  nmap[i][0] = nmap[i][0] * 0.5f + 0.5f;
3068  nmap[i][1] = nmap[i][1] * 0.5f + 0.5f;
3069  nmap[i][2] = nmap[i][2] * 0.5f + 0.5f;
3070  nmap[i][3] *= 0.0039215686f; // == 1/255
3071  }
3072  }
3073 }
3074 
3075 /*
3076 ** TGA 画像ファイルの高さマップ読み込んでテクスチャメモリに法線マップを作成する
3077 **
3078 ** name TGA ファイル名
3079 ** nz 作成した法線の z 成分の割合
3080 ** pWidth 読み込んだ画像の横の画素数の格納先のポインタ (nullptr なら格納しない)
3081 ** pHeight 読み込んだ画像の縦の画素数の格納先のポインタ (nullptr なら格納しない)
3082 ** internal テクスチャの内部フォーマット
3083 ** 戻り値 テクスチャ名
3084 */
3085 GLuint gg::ggLoadHeight(const char *name, float nz, GLsizei *pWidth, GLsizei *pHeight, GLenum internal)
3086 {
3087  // 画像データ
3088  std::vector<GLubyte> hmap;
3089 
3090  // 画像サイズ
3091  GLsizei width, height;
3092 
3093  // 画像フォーマット
3094  GLenum format;
3095 
3096  // 高さマップの画像を読み込む
3097  ggReadImage(name, hmap, &width, &height, &format);
3098 
3099  // 画像が読み込めなかったら戻る
3100  if (hmap.empty()) return 0;
3101 
3102  // 法線マップ
3103  std::vector<GgVector> nmap;
3104 
3105  // 法線マップを作成する
3106  ggCreateNormalMap(hmap.data(), width, height, format, nz, internal, nmap);
3107 
3108  // 画像サイズを返す
3109  if (pWidth) *pWidth = width;
3110  if (pHeight) *pHeight = height;
3111 
3112  // テクスチャを作成して返す
3113  return ggLoadTexture(nmap.data(), width, height, GL_RGBA, GL_FLOAT, internal, GL_REPEAT);
3114 }
3115 
3116 /*
3117 ** テクスチャを作成してファイルからデータを読み込む
3118 **
3119 ** name 読み込むファイル名
3120 ** internal glTexImage2D() に指定するテクスチャの内部フォーマット. 0 なら外部フォーマットに合わせる
3121 ** 戻り値 テクスチャの作成に成功すれば true, 失敗すれば false
3122 */
3123 void gg::GgColorTexture::load(const char *name, GLenum internal, GLenum wrap)
3124 {
3125  // 画像データ
3126  std::vector<GLubyte> image;
3127 
3128  // 画像サイズ
3129  GLsizei width, height;
3130 
3131  // 画像フォーマット
3132  GLenum format;
3133 
3134  // 画像を読み込む
3135  ggReadImage(name, image, &width, &height, &format);
3136 
3137  // internal == 0 なら内部フォーマットを読み込んだファイルに合わせる
3138  if (internal == 0)
3139  {
3140  switch (format)
3141  {
3142  case GL_BGR:
3143  internal = GL_RGB;
3144  break;
3145  case GL_BGRA:
3146  internal = GL_RGBA;
3147  break;
3148  default:
3149  internal = format;
3150  break;
3151  }
3152  }
3153 
3154  // テクスチャを作成する
3155  texture.reset(new GgTexture(image.data(), width, height, format, GL_UNSIGNED_BYTE, internal, wrap));
3156 }
3157 
3158 /*
3159 ** ファイルからデータを読み込んで法線マップのテクスチャを作成する
3160 **
3161 ** name 画像ファイル名
3162 ** width テクスチャとして用いる画像データの横幅
3163 ** height テクスチャとして用いる画像データの高さ
3164 ** format テクスチャとして用いる画像データのフォーマット (GL_RED, GL_RG, GL_RGB, GL_RGBA)
3165 ** nz 法線マップの z 成分の値
3166 ** internal テクスチャの内部フォーマット
3167 */
3168 void gg::GgNormalTexture::load(const char *name, float nz, GLenum internal)
3169 {
3170  // 高さマップ
3171  std::vector<GLubyte> hmap;
3172 
3173  // 画像サイズ
3174  GLsizei width, height;
3175 
3176  // 画像フォーマット
3177  GLenum format;
3178 
3179  // 高さマップの画像を読み込む
3180  ggReadImage(name, hmap, &width, &height, &format);
3181 
3182  // 法線マップ
3183  std::vector<GgVector> nmap;
3184 
3185  // 法線マップを作成する
3186  ggCreateNormalMap(hmap.data(), width, height, format, nz, internal, nmap);
3187 }
3188 
3190 /*
3191 ** OBJ ファイルの読み込みに使うデータ型と関数
3192 */
3193 namespace gg
3194 {
3195  // GLfloat 型の 2 要素のベクトル
3196  using vec2 = std::array<GLfloat, 2>;
3197 
3198  // GLfloat 型の 3 要素のベクトル
3199  using vec3 = std::array<GLfloat, 3>;
3200 
3201  // 三角形データ
3202  struct fidx
3203  {
3204  GLuint p[3]; // 頂点座標番号
3205  GLuint n[3]; // 頂点法線番号
3206  GLuint t[3]; // テクスチャ座標番号
3207  bool smooth; // スムーズシェーディングの有無
3208  };
3209 
3210  // ポリゴングループ
3211  struct fgrp
3212  {
3213  GLuint nextgroup; // 次のポリゴングループの最初の三角形番号
3214  GLuint mtlno; // このポリゴングループの材質番号
3215 
3216  // コンストラクタ
3217  fgrp(GLuint nextgroup, GLuint mtlno)
3218  : nextgroup(nextgroup), mtlno(mtlno) {}
3219  };
3220 
3221  // デフォルトの材質
3222  constexpr GgSimpleShader::Material defaultMaterial =
3223  {
3224  { 0.1f, 0.1f, 0.1f, 1.0f },
3225  { 0.6f, 0.6f, 0.6f, 0.0f },
3226  { 0.3f, 0.3f, 0.3f, 0.0f },
3227  60.0f
3228  };
3229 
3230  // デフォルトの材質名
3231  constexpr char defaultMaterialName[] = "_default_";
3232 
3233  /*
3234  ** Alias OBJ 形式の MTL ファイルを読み込む
3235  **
3236  ** mtlpath MTL ファイルのパス名
3237  ** mtl 読み込んだ材質名をキー,材質番号を値にした map
3238  ** material 材質データ
3239  */
3240  static bool ggLoadMtl(const std::string &mtlpath,
3241  std::map<std::string, GLuint> &mtl,
3242  std::vector<GgSimpleShader::Material> &material)
3243  {
3244  // MTL ファイルが無ければ戻る
3245  std::ifstream mtlfile(mtlpath.c_str(), std::ios::binary);
3246  if (!mtlfile)
3247  {
3248 #if defined(DEBUG)
3249  std::cerr << "Warning: Can't open MTL file: " << mtlpath << std::endl;
3250 #endif
3251  return false;
3252  }
3253 
3254  // 一行読み込み用のバッファ
3255  std::string mtlline;
3256 
3257  // 材質名(ループの外に置く)
3258  std::string mtlname(defaultMaterialName);
3259 
3260  // 現在の材質番号を登録する
3261  mtl[mtlname] = static_cast<GLuint>(material.size());
3262 
3263  // 現在の材質にデフォルトの材質を設定する
3264  material.emplace_back(defaultMaterial);
3265 
3266  // 材質データを読み込む
3267  while (std::getline(mtlfile, mtlline))
3268  {
3269  // 空行は読み飛ばす
3270  if (mtlline == "") continue;
3271 
3272  // 最後の文字が '\r' なら
3273  if (*(mtlline.end() - 1) == '\r')
3274  {
3275  // 最後の文字を削除する
3276  mtlline.erase(mtlline.end() - 1, mtlline.end());
3277 
3278  // 空行になったら読み飛ばす
3279  if (mtlline == "") continue;
3280  }
3281 
3282  // 読み込んだ行を文字列ストリームにする
3283  std::istringstream mtlstr(mtlline);
3284 
3285  // オペレータ
3286  std::string mtlop;
3287 
3288  // 文字列ストリームから材質パラメータの種類を取り出す
3289  mtlstr >> mtlop;
3290 
3291  // '#' で始まる場合はコメントとして行末まで読み飛ばす
3292  if (mtlop[0] == '#') continue;
3293 
3294  if (mtlop == "newmtl")
3295  {
3296  // 新規作成する材質名を取り出す
3297  mtlstr >> mtlname;
3298 
3299  // 材質名が既に存在するかどうか調べる
3300  const auto m(mtl.find(mtlname));
3301  if (m == mtl.end())
3302  {
3303  // 存在しないので新規作成する材質の番号をその材質名に割り当てる
3304  mtl[mtlname] = static_cast<GLuint>(material.size());
3305 
3306  // 新規作成する材質にデフォルトの材質を設定しておく
3307  material.emplace_back(defaultMaterial);
3308  }
3309 
3310 #if defined(DEBUG)
3311  std::cerr << "newmtl: " << mtlname << std::endl;
3312 #endif
3313  }
3314  else if (mtlop == "Ka")
3315  {
3316  // 環境光の反射係数を登録する
3317  mtlstr
3318  >> material.back().ambient[0]
3319  >> material.back().ambient[1]
3320  >> material.back().ambient[2];
3321  }
3322  else if (mtlop == "Kd")
3323  {
3324  // 拡散反射係数を登録する
3325  mtlstr
3326  >> material.back().diffuse[0]
3327  >> material.back().diffuse[1]
3328  >> material.back().diffuse[2];
3329  }
3330  else if (mtlop == "Ks")
3331  {
3332  // 鏡面反射係数を登録する
3333  mtlstr
3334  >> material.back().specular[0]
3335  >> material.back().specular[1]
3336  >> material.back().specular[2];
3337  }
3338  else if (mtlop == "Ns")
3339  {
3340  // 輝き係数を登録する
3341  float shininess;
3342  mtlstr >> shininess;
3343  material.back().shininess = shininess * 0.1f;
3344  }
3345  else if (mtlop == "d")
3346  {
3347  // 不透明度を登録する
3348  mtlstr >> material.back().ambient[3];
3349  }
3350  }
3351 
3352  // MTL ファイルの読み込みに失敗したら戻る
3353  if (mtlfile.bad())
3354  {
3355 #if defined(DEBUG)
3356  std::cerr << "Warning: Can't read MTL file: " << mtlpath << std::endl;
3357 #endif
3358  mtlfile.close();
3359  return false;
3360  }
3361 
3362  // MTL ファイルを閉じて戻る
3363  mtlfile.close();
3364  return true;
3365  }
3366 
3367  /*
3368  ** Alias OBJ 形式のファイルを解析する
3369  **
3370  ** name Alias OBJ 形式のファイルのファイル名
3371  ** group 同じ材質を割り当てるポリゴングループ
3372  ** mtl 読み込んだ材質名をキーにした map
3373  ** pos 頂点の位置
3374  ** norm 頂点の法線
3375  ** tex 頂点のテクスチャ座標
3376  ** face 三角形のデータ
3377  */
3378  static bool ggParseObj(const char *name, std::vector<fgrp> &group,
3379  std::vector<GgSimpleShader::Material> &material,
3380  std::vector<vec3> &pos, std::vector<vec3> &norm, std::vector<vec2> &tex,
3381  std::vector<fidx> &face,
3382  bool normalize)
3383  {
3384  // ファイルパスからディレクトリ名を取り出す
3385  const std::string path(name);
3386  const size_t base(path.find_last_of("/\\"));
3387  const std::string dirname((base == std::string::npos) ? "" : path.substr(base + 1));
3388 
3389  // OBJ ファイルを読み込む
3390  std::ifstream file(path.c_str());
3391 
3392  // 読み込みに失敗したら戻る
3393  if (!file)
3394  {
3395 #if defined(DEBUG)
3396  std::cerr << "Error: Can't open OBJ file: " << path << std::endl;
3397 #endif
3398  return false;
3399  }
3400 
3401  // ポリゴングループの最初の三角形番号
3402  GLsizei startgroup(static_cast<GLsizei>(group.size()));
3403 
3404  // スムーズシェーディングのスイッチ
3405  bool smooth(false);
3406 
3407  // 材質のテーブル
3408  std::map<std::string, GLuint> mtl;
3409 
3410  // 現在の材質名(ループの外で宣言する)
3411  std::string mtlname;
3412 
3413  // 座標値の最小値・最大値
3414  vec3 bmin{ FLT_MAX }, bmax{ -FLT_MAX };
3415 
3416  // 一行読み込み用のバッファ
3417  std::string line;
3418 
3419  // データの読み込み
3420  while (std::getline(file, line))
3421  {
3422  // 空行は読み飛ばす
3423  if (line == "") continue;
3424 
3425  // 最後の文字が '\r' なら
3426  if (*(line.end() - 1) == '\r')
3427  {
3428  // 最後の文字を削除する
3429  line.erase(line.end() - 1, line.end());
3430 
3431  // 空行になったら読み飛ばす
3432  if (line == "") continue;
3433  }
3434 
3435  // 一行を文字列ストリームに入れる
3436  std::istringstream str(line);
3437 
3438  // 最初のトークンを命令 (op) とみなす
3439  std::string op;
3440  str >> op;
3441 
3442  if (op[0] == '#') continue;
3443 
3444  if (op == "v")
3445  {
3446  // 頂点位置
3447  vec3 v;
3448 
3449  // 頂点位置はスペースで区切られている
3450  str >> v[0] >> v[1] >> v[2];
3451 
3452  // 頂点位置を記録する
3453  pos.emplace_back(v);
3454 
3455  // 頂点位置の最小値と最大値を求める (AABB)
3456  for (int i = 0; i < 3; ++i)
3457  {
3458  bmin[i] = std::min(bmin[i], v[i]);
3459  bmax[i] = std::max(bmax[i], v[i]);
3460  }
3461  }
3462  else if (op == "vt")
3463  {
3464  // テクスチャ座標
3465  vec2 t;
3466 
3467  // 頂点位置はスペースで区切られている
3468  str >> t[0] >> t[1];
3469 
3470  // テクスチャ座標を記録する
3471  tex.emplace_back(t);
3472  }
3473  else if (op == "vn")
3474  {
3475  // 頂点法線
3476  vec3 n;
3477 
3478  // 頂点法線はスペースで区切られている
3479  str >> n[0] >> n[1] >> n[2];
3480 
3481  // 頂点法線を記録する
3482  norm.emplace_back(n);
3483  }
3484  else if (op == "f")
3485  {
3486  // 三角形データ
3487  fidx f;
3488 
3489  // スムースシェーディング
3490  f.smooth = smooth;
3491 
3492  // 三頂点のそれぞれについて
3493  for (int i = 0; i < 3; ++i)
3494  {
3495  // 1項目取り出す
3496  std::string s;
3497  str >> s;
3498 
3499  // 項目の最初の要素は頂点座標番号
3500  f.p[i] = atoi(s.c_str());
3501 
3502  // テクスチャ座標と法線の番号は未定義を表す 0 にしておく
3503  f.t[i] = f.n[i] = 0;
3504 
3505  // 残りの項目を取り出す
3506  size_t l(s.find('/', 0));
3507  if (l != std::string::npos)
3508  {
3509  // 二つ目の項目の先頭の位置
3510  ++l;
3511 
3512  // 二つ目の項目はテクスチャ座標
3513  f.t[i] = atoi(s.c_str() + l);
3514 
3515  // 三つ目の項目
3516  l = s.find('/', l);
3517  if (l != std::string::npos)
3518  {
3519  // 三つ目の項目の先頭の位置
3520  ++l;
3521 
3522  // 三つ目の項目は法線番号
3523  f.n[i] = atoi(s.c_str() + l);
3524  }
3525  }
3526  }
3527 
3528  // 三角形データを登録する
3529  face.emplace_back(f);
3530  }
3531  else if (op == "s")
3532  {
3533  // '1' だったらスムースシェーディング有効
3534  std::string s;
3535  str >> s;
3536  smooth = s == "1";
3537  }
3538  else if (op == "usemtl")
3539  {
3540  // 次のポリゴングループの最初の三角形番号
3541  const GLsizei nextgroup(static_cast<GLsizei>(face.size()));
3542 
3543  // ポリゴングループに三角形が存在すれば
3544  if (nextgroup > startgroup)
3545  {
3546  // ポリゴングループの三角形数と材質番号を記録する
3547  group.emplace_back(nextgroup, mtl[mtlname]);
3548 
3549  // 次のポリゴングループの開始番号を保存しておく
3550  startgroup = nextgroup;
3551  }
3552 
3553  // 次に usemtl が来るまで材質名を保持する
3554  str >> mtlname;
3555 
3556  // 材質の存在チェック
3557  if (mtl.find(mtlname) == mtl.end())
3558  {
3559 #if defined(DEBUG)
3560  std::cerr << "Warning: Undefined material: " << mtlname << std::endl;
3561 #endif
3562 
3563  // デフォルトの材質を割り当てておく
3564  mtlname = defaultMaterialName;
3565  }
3566 #if defined(DEBUG)
3567  else std::cerr << "usemtl: " << mtlname << std::endl;
3568 #endif
3569  }
3570  else if (op == "mtllib")
3571  {
3572  // MTL ファイルのパス名を作る
3573  str >> std::ws;
3574  std::string mtlpath;
3575  std::getline(str, mtlpath);
3576 
3577  // MTL ファイルを読み込む
3578  ggLoadMtl(dirname + mtlpath, mtl, material);
3579  }
3580  }
3581 
3582  // OBJ ファイルの読み込みに失敗したら戻る
3583  if (file.bad())
3584  {
3585 #if defined(DEBUG)
3586  std::cerr << "Error: Can't read OBJ file: " << path << std::endl;
3587 #endif
3588  file.close();
3589  return false;
3590  }
3591 
3592  // ファイルを閉じる
3593  file.close();
3594 
3595  // 最後のポリゴングループの次の三角形番号
3596  const GLsizei nextgroup(static_cast<GLsizei>(face.size()));
3597  if (nextgroup > startgroup)
3598  {
3599  // 最後のポリゴングループの三角形数と材質を記録する
3600  group.emplace_back(nextgroup, static_cast<GLuint>(mtl[mtlname]));
3601  }
3602 
3603  // スムーズシェーディングしない三角形の頂点を追加する
3604  for (auto &f : face)
3605  {
3606  if (!f.smooth)
3607  {
3608  // 三頂点のそれぞれについて
3609  for (int i = 0; i < 3; ++i)
3610  {
3611  // 新しい頂点座標を生成する (std::array の要素は emplace_back できない)
3612  pos.push_back(pos[f.p[i] - 1]);
3613  f.p[i] = static_cast<int>(pos.size());
3614 
3615  if (f.t[i] > 0)
3616  {
3617  // 新しいテクスチャ座標を生成する
3618  tex.push_back(tex[f.t[i] - 1]);
3619  f.t[i] = static_cast<int>(tex.size());
3620  }
3621 
3622  if (f.n[i] > 0)
3623  {
3624  // 新しい法線を生成する
3625  norm.push_back(norm[f.n[i] - 1]);
3626  f.n[i] = static_cast<int>(norm.size());
3627  }
3628  }
3629  }
3630  }
3631 
3632  // 法線データがなければ算出しておく
3633  if (norm.empty())
3634  {
3635  // 法線データ数の初期値は頂点数と同じでスムーズシェーディングのために初期値は 0
3636  norm.resize(pos.size(), { 0.0f, 0.0f, 0.0f });
3637 
3638  // 面の法線の算出と頂点法線の算出
3639  for (auto &f : face)
3640  {
3641  // 頂点座標番号
3642  const int v0(f.p[0] - 1);
3643  const int v1(f.p[1] - 1);
3644  const int v2(f.p[2] - 1);
3645 
3646  // v1 - v0, v2 - v0 を求める
3647  const GLfloat d1[] = { pos[v1][0] - pos[v0][0], pos[v1][1] - pos[v0][1], pos[v1][2] - pos[v0][2] };
3648  const GLfloat d2[] = { pos[v2][0] - pos[v0][0], pos[v2][1] - pos[v0][1], pos[v2][2] - pos[v0][2] };
3649 
3650  // 外積により面法線を求める
3651  vec3 n;
3652  ggCross(n.data(), d1, d2);
3653 
3654  if (f.smooth)
3655  {
3656  // スムースシェーディングを行うときは
3657  for (int i = 0; i < 3; ++i)
3658  {
3659  // 面法線を頂点法線に積算する
3660  norm[v0][i] += n[i];
3661  norm[v1][i] += n[i];
3662  norm[v2][i] += n[i];
3663 
3664  // 面の各頂点の法線番号は頂点番号と同じにする
3665  f.n[i] = f.p[i];
3666  }
3667  }
3668  else
3669  {
3670  // 面法線を最初の頂点に保存する
3671  norm[v0] = n;
3672  f.n[0] = f.p[0];
3673 
3674  // 2 頂点追加
3675  for (int i = 1; i < 3; ++i)
3676  {
3677  norm.emplace_back(n);
3678  f.n[i] = static_cast<GLuint>(norm.size());
3679  }
3680  }
3681  }
3682 
3683  // 頂点の法線ベクトルを正規化する
3684  for (auto &n : norm) ggNormalize3(n.data());
3685  }
3686 
3687  // 図形の正規化
3688  if (normalize)
3689  {
3690  // 図形の大きさ
3691  const GLfloat sx(bmax[0] - bmin[0]);
3692  const GLfloat sy(bmax[1] - bmin[1]);
3693  const GLfloat sz(bmax[2] - bmin[2]);
3694 
3695  // 図形のスケール
3696  GLfloat s(sx);
3697  if (sy > s) s = sy;
3698  if (sz > s) s = sz;
3699  const GLfloat scale((s != 0.0f) ? 2.0f / s : 1.0f);
3700 
3701  // 図形の中心位置
3702  const GLfloat cx((bmax[0] + bmin[0]) * 0.5f);
3703  const GLfloat cy((bmax[1] + bmin[1]) * 0.5f);
3704  const GLfloat cz((bmax[2] + bmin[2]) * 0.5f);
3705 
3706  // 図形の大きさと位置を正規化する
3707  for (auto &p : pos)
3708  {
3709  p[0] = (p[0] - cx) * scale;
3710  p[1] = (p[1] - cy) * scale;
3711  p[2] = (p[2] - cz) * scale;
3712  }
3713  }
3714 
3715 #if defined(DEBUG)
3716  std::cerr
3717  << "[" << name << "]\n(Parsed) Group: " << group.size() << ", Material: " << mtl.size()
3718  << ", Pos: " << pos.size() << ", Norm: " << norm.size() << ", Tex: " << tex.size()
3719  << ", Face: " << face.size() << "\n";
3720 #endif
3721 
3722  // OBJ ファイルの読み込み成功
3723  return true;
3724  }
3725 }
3727 
3728 /*
3729 ** 三角形分割された Alias OBJ 形式のファイルと MTL ファイルを読み込む (Arrays 形式)
3730 **
3731 ** name 読み込むOBJ ファイル名
3732 ** group 読み込んだデータの各ポリゴングループの最初の三角形番号と三角形数
3733 ** material 読み込んだデータのポリゴングループごとの材質
3734 ** vert 読み込んだデータの頂点属性
3735 ** normalize true ならサイズを正規化する
3736 ** 戻り値 読み込みに成功したら true
3737 */
3738 bool gg::ggLoadSimpleObj(const char *name,
3739  std::vector<std::array<GLuint, 3>> &group,
3740  std::vector<GgSimpleShader::Material> &material,
3741  std::vector<GgVertex> &vert,
3742  bool normalize)
3743 {
3744  // 読み込み用の一時記憶領域
3745  std::vector<fgrp> tgroup;
3746  std::vector<vec3> tpos;
3747  std::vector<vec3> tnorm;
3748  std::vector<vec2> ttex;
3749  std::vector<fidx> tface;
3750 
3751  // OBJ ファイルを解析する
3752  if (!ggParseObj(name, tgroup, material, tpos, tnorm, ttex, tface, normalize)) return false;
3753 
3754  // 頂点属性データのメモリを確保する
3755  vert.reserve(vert.size() + tface.size() * 3);
3756 
3757  // ポリゴングループデータのメモリを確保する
3758  group.reserve(group.size() + tgroup.size());
3759  material.reserve(material.size() + tgroup.size());
3760 
3761  // ポリゴングループの最初の三角形番号
3762  GLuint startgroup(0);
3763 
3764  // ポリゴングループデータの作成
3765  for (auto &g : tgroup)
3766  {
3767  // このポリゴングループの最初の頂点番号と頂点数・材質番号
3768  std::array<GLuint, 3> v;
3769 
3770  // このポリゴングループの最初の頂点番号を保存する
3771  v[0] = static_cast<GLuint>(vert.size());
3772 
3773  // 三角形ごとの頂点データの作成
3774  for (GLuint j = startgroup; j < g.nextgroup; ++j)
3775  {
3776  // 処理対象の三角形
3777  auto &f = tface[j];
3778 
3779  // 三頂点のそれぞれについて
3780  for (int i = 0; i < 3; ++i)
3781  {
3782  // テクスチャ座標
3783  vec2 tex = { 0.0f };
3784  if (f.t[i] > 0) tex = ttex[f.t[i] - 1];
3785 
3786  // 頂点法線
3787  vec3 norm = { 0.0f };
3788  if (f.n[i] > 0) norm = tnorm[f.n[i] - 1];
3789 
3790  // 頂点属性の追加
3791  vert.emplace_back(tpos[f.p[i] - 1].data(), norm.data());
3792  }
3793  }
3794 
3795  // このポリゴングループの頂点数を保存する
3796  v[1] = static_cast<GLuint>(vert.size()) - v[0];
3797  v[2] = g.mtlno;
3798 
3799  // このポリゴングループの最初の頂点番号と頂点数・材質番号を登録する
3800  group.emplace_back(v);
3801 
3802  // 次のポリゴングループの最初の三角形番号を求める
3803  startgroup = g.nextgroup;
3804  }
3805 
3806 #if defined(DEBUG)
3807  std::cerr
3808  << "(Stored) Group: " << group.size() << ", Material: " << material.size()
3809  << ", Vertex: " << vert.size() << "\n";
3810 #endif
3811 
3812  // OBJ ファイルの読み込み成功
3813  return true;
3814 }
3815 
3816 /*
3817 ** 三角形分割された Alias OBJ 形式のファイルと MTL ファイルを読み込む (Elements 形式)
3818 **
3819 ** name 読み込むOBJ ファイル名
3820 ** group 読み込んだデータの各ポリゴングループの最初の三角形番号と三角形数
3821 ** material 読み込んだデータのポリゴングループごとの材質
3822 ** vert 読み込んだデータの頂点属性
3823 ** face 読み込んだデータの三角形の頂点インデックス
3824 ** normalize true ならサイズを正規化する
3825 ** 戻り値 読み込みに成功したら true
3826 */
3827 bool gg::ggLoadSimpleObj(const char *name,
3828  std::vector<std::array<GLuint, 3>> &group,
3829  std::vector<GgSimpleShader::Material> &material,
3830  std::vector<GgVertex> &vert,
3831  std::vector<GLuint> &face,
3832  bool normalize)
3833 {
3834  // 読み込み用の一時記憶領域
3835  std::vector<fgrp> tgroup;
3836  std::vector<vec3> tpos;
3837  std::vector<vec3> tnorm;
3838  std::vector<vec2> ttex;
3839  std::vector<fidx> tface;
3840 
3841  // OBJ ファイルを解析する
3842  if (!ggParseObj(name, tgroup, material, tpos, tnorm, ttex, tface, normalize)) return false;
3843 
3844  // 頂点属性データの最初の頂点番号
3845  const int vertbase(static_cast<int>(vert.size()));
3846 
3847  // 頂点属性データのメモリを確保する
3848  vert.resize(vertbase + tpos.size());
3849 
3850  // 三角形データのメモリを確保する
3851  face.reserve(face.size() + tface.size());
3852 
3853  // ポリゴングループデータのメモリを確保する
3854  group.reserve(group.size() + tgroup.size());
3855  material.reserve(material.size() + tgroup.size());
3856 
3857  // ポリゴングループの最初の三角形番号
3858  GLuint startgroup(0);
3859 
3860  // ポリゴングループデータの作成
3861  for (auto &g : tgroup)
3862  {
3863  // このポリゴングループの最初の頂点番号と頂点数・材質番号
3864  std::array<GLuint, 3> v;
3865 
3866  // このポリゴングループの最初の三角形番号を保存する
3867  v[0] = static_cast<GLuint>(face.size());
3868 
3869  // 三角形ごとの頂点データの作成
3870  for (GLuint j = startgroup; j < g.nextgroup; ++j)
3871  {
3872  // 処理対象の三角形
3873  auto &f = tface[j];
3874 
3875  // 三頂点のそれぞれについて
3876  for (int i = 0; i < 3; ++i)
3877  {
3878  // 追加する三角形データの頂点番号
3879  const int q(f.p[i] - 1 + vertbase);
3880 
3881  // 三角形データの追加
3882  face.emplace_back(q);
3883 
3884  // テクスチャ座標番号
3885  vec2 tex = { 0.0f };
3886  if (f.t[i] > 0) tex = ttex[f.t[i] - 1];
3887 
3888  // 頂点法線番号
3889  vec3 norm = { 0.0f };
3890  if (f.n[i] > 0) norm = tnorm[f.n[i] - 1];
3891 
3892  // 頂点の格納
3893  vert[q] = GgVertex(tpos[f.p[i] - 1].data(), norm.data());
3894  }
3895  }
3896 
3897  // このポリゴングループの三角形数を保存する
3898  v[1] = static_cast<GLuint>(face.size()) - v[0];
3899  v[2] = g.mtlno;
3900 
3901  // このポリゴングループの最初の三角形番号と三角形数・材質番号を登録する
3902  group.emplace_back(v);
3903 
3904  // 次のポリゴングループの最初の三角形番号を求める
3905  startgroup = g.nextgroup;
3906  }
3907 
3908 #if defined(DEBUG)
3909  std::cerr
3910  << "(Stored) Group: " << group.size() << ", Material: " << material.size()
3911  << ", Vertex: " << vert.size() << ", Face: " << face.size() << "\n";
3912 #endif
3913 
3914  // OBJ ファイルの読み込み成功
3915  return true;
3916 }
3917 
3918 /*
3919 ** シェーダオブジェクトのコンパイル結果を表示する
3920 */
3921 static GLboolean printShaderInfoLog(GLuint shader, const char *str)
3922 {
3923  // コンパイル結果を取得する
3924  GLint status;
3925  glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
3926 #if defined(DEBUG)
3927  if (status == GL_FALSE) std::cerr << "Compile Error in " << str << std::endl;
3928 #endif
3929 
3930  // シェーダのコンパイル時のログの長さを取得する
3931  GLsizei bufSize;
3932  glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &bufSize);
3933 
3934  if (bufSize > 1)
3935  {
3936  // シェーダのコンパイル時のログの内容を取得する
3937  std::vector<GLchar> infoLog(bufSize);
3938  GLsizei length;
3939  glGetShaderInfoLog(shader, bufSize, &length, &infoLog[0]);
3940 #if defined(DEBUG)
3941  std::cerr << &infoLog[0] << std::endl;
3942 #endif
3943  }
3944 
3945  // コンパイル結果を返す
3946  return static_cast<GLboolean>(status);
3947 }
3948 
3949 /*
3950 ** プログラムオブジェクトのリンク結果を表示する
3951 */
3952 static GLboolean printProgramInfoLog(GLuint program)
3953 {
3954  // リンク結果を取得する
3955  GLint status;
3956  glGetProgramiv(program, GL_LINK_STATUS, &status);
3957 #if defined(DEBUG)
3958  if (status == GL_FALSE) std::cerr << "Link Error." << std::endl;
3959 #endif
3960 
3961  // シェーダのリンク時のログの長さを取得する
3962  GLsizei bufSize;
3963  glGetProgramiv(program, GL_INFO_LOG_LENGTH, &bufSize);
3964 
3965  // シェーダのリンク時のログの内容を取得する
3966  if (bufSize > 1)
3967  {
3968  std::vector<GLchar> infoLog(bufSize);
3969  GLsizei length;
3970  glGetProgramInfoLog(program, bufSize, &length, &infoLog[0]);
3971 #if defined(DEBUG)
3972  std::cerr << &infoLog[0] << std::endl;
3973 #endif
3974  }
3975 
3976  // リンク結果を返す
3977  return static_cast<GLboolean>(status);
3978 }
3979 
3980 /*
3981 ** シェーダのソースプログラムの文字列を読み込んでプログラムオブジェクトを作成する
3982 **
3983 ** vsrc バーテックスシェーダのソースプログラムの文字列
3984 ** fsrc フラグメントシェーダのソースプログラムの文字列 (nullptr なら不使用)
3985 ** gsrc ジオメトリシェーダのソースプログラムの文字列 (nullptr なら不使用)
3986 ** nvarying フィードバックする varying 変数の数 (0 なら不使用)
3987 ** varyings フィードバックする varying 変数のリスト (nullptr なら不使用)
3988 ** vtext バーテックスシェーダのコンパイル時のメッセージに追加する文字列
3989 ** ftext フラグメントシェーダのコンパイル時のメッセージに追加する文字列
3990 ** gtext ジオメトリシェーダのコンパイル時のメッセージに追加する文字列
3991 ** 戻り値 プログラムオブジェクトのプログラム名 (作成できなければ 0)
3992 */
3993 GLuint gg::ggCreateShader(const char *vsrc, const char *fsrc, const char *gsrc,
3994  GLint nvarying, const char *const varyings[],
3995  const char *vtext, const char *ftext, const char *gtext)
3996 {
3997  // シェーダプログラムの作成
3998  const GLuint program(glCreateProgram());
3999 
4000  if (program > 0)
4001  {
4002  bool status = true;
4003 
4004  if (vsrc)
4005  {
4006  // バーテックスシェーダのシェーダオブジェクトを作成する
4007  const GLuint vertShader(glCreateShader(GL_VERTEX_SHADER));
4008  glShaderSource(vertShader, 1, &vsrc, nullptr);
4009  glCompileShader(vertShader);
4010 
4011  // バーテックスシェーダのシェーダオブジェクトをプログラムオブジェクトに組み込む
4012  if (printShaderInfoLog(vertShader, vtext))
4013  glAttachShader(program, vertShader);
4014  else
4015  status = false;
4016  glDeleteShader(vertShader);
4017  }
4018 
4019  if (fsrc)
4020  {
4021  // フラグメントシェーダのシェーダオブジェクトを作成する
4022  const GLuint fragShader(glCreateShader(GL_FRAGMENT_SHADER));
4023  glShaderSource(fragShader, 1, &fsrc, nullptr);
4024  glCompileShader(fragShader);
4025 
4026  // フラグメントシェーダのシェーダオブジェクトをプログラムオブジェクトに組み込む
4027  if (printShaderInfoLog(fragShader, ftext))
4028  glAttachShader(program, fragShader);
4029  else
4030  status = false;
4031  glDeleteShader(fragShader);
4032  }
4033 
4034  if (gsrc)
4035  {
4036  // ジオメトリシェーダのシェーダオブジェクトを作成する
4037  const GLuint geomShader(glCreateShader(GL_GEOMETRY_SHADER));
4038  glShaderSource(geomShader, 1, &gsrc, nullptr);
4039  glCompileShader(geomShader);
4040 
4041  // ジオメトリシェーダのシェーダオブジェクトをプログラムオブジェクトに組み込む
4042  if (printShaderInfoLog(geomShader, gtext))
4043  glAttachShader(program, geomShader);
4044  else
4045  status = false;
4046  glDeleteShader(geomShader);
4047  }
4048 
4049  // feedback に使う varying 変数を指定する
4050  if (nvarying > 0)
4051  glTransformFeedbackVaryings(program, nvarying, varyings, GL_SEPARATE_ATTRIBS);
4052 
4053  // 全てのシェーダオブジェクトのコンパイルに成功したら
4054  if (status)
4055  {
4056  // シェーダプログラムをリンクする
4057  glLinkProgram(program);
4058 
4059  // リンクに成功したらプログラムオブジェクト名を返す
4060  if (printProgramInfoLog(program) != GL_FALSE) return program;
4061  }
4062  }
4063 
4064  // プログラムオブジェクトが作成できなかった
4065  glDeleteProgram(program);
4066  return 0;
4067 }
4068 
4069 /*
4070 ** シェーダのソースファイルを読み込んだ vector を返す
4071 **
4072 ** name ソースファイル名
4073 ** src 読み込んだソースファイルの文字列
4074 ** 戻り値 読み込みの成功すれば true, 失敗したら false
4075 */
4076 static bool readShaderSource(const char *name, std::vector<GLchar> &src)
4077 {
4078 // ファイル名が nullptr ならそのまま戻る
4079  if (name == nullptr) return true;
4080 
4081  // ソースファイルを開く
4082  std::ifstream file(name, std::ios::binary);
4083  if (!file)
4084  {
4085  // ファイルが開けなければエラーで戻る
4086 #if defined(DEBUG)
4087  std::cerr << "Error: Can't open source file: " << name << std::endl;
4088 #endif
4089  return false;
4090  }
4091 
4092  // ファイルの末尾に移動する
4093  file.seekg(0L, std::ios::end);
4094 
4095  // ファイルサイズ (= ファイルの末尾の位置) + 1 文字のメモリを確保する
4096  src.resize(static_cast<GLsizei>(file.tellg()) + 1);
4097 
4098  // ファイルを先頭から読み込む
4099  file.seekg(0L, std::ios::beg);
4100  file.read(src.data(), src.size());
4101  src.push_back('\0');
4102 
4103  // ファイルがうまく読み込めなければ戻る
4104  if (file.bad())
4105  {
4106 #if defined(DEBUG)
4107  std::cerr << "Error: Could not read souce file: " << name << std::endl;
4108 #endif
4109  file.close();
4110  return false;
4111  }
4112 
4113  // ファイルを閉じて戻る
4114  file.close();
4115  return true;
4116 }
4117 
4118 /*
4119 ** シェーダのソースファイルを読み込んでプログラムオブジェクトを作成する
4120 **
4121 ** vert バーテックスシェーダのソースファイル名
4122 ** frag フラグメントシェーダのソースファイル名 (nullptr なら不使用)
4123 ** geom ジオメトリシェーダのソースファイル名 (nullptr なら不使用)
4124 ** nvarying フィードバックする varying 変数の数 (0 なら不使用)
4125 ** varyings フィードバックする varying 変数のリスト (nullptr なら不使用)
4126 ** 戻り値 シェーダプログラムのプログラム名 (作成できなければ 0)
4127 */
4128 GLuint gg::ggLoadShader(const char *vert, const char *frag, const char *geom,
4129  GLint nvarying, const char *const varyings[])
4130 {
4131  // シェーダのソースファイルを読み込む
4132  std::vector<GLchar> vsrc, fsrc, gsrc;
4133  if (readShaderSource(vert, vsrc) && readShaderSource(frag, fsrc) && readShaderSource(geom, gsrc))
4134  {
4135  // プログラムオブジェクトを作成する
4136  return ggCreateShader(vsrc.data(), fsrc.data(), gsrc.data(), nvarying, varyings, vert, frag, geom);
4137  }
4138 
4139  // プログラムオブジェクト作成失敗
4140  return 0;
4141 }
4142 
4143 #if !defined(__APPLE__)
4144 /*
4145 ** コンピュートシェーダのソースプログラムの文字列を読み込んでプログラムオブジェクトを作成する
4146 **
4147 ** csrc コンピュートシェーダのソースプログラムの文字列
4148 ** 戻り値 プログラムオブジェクトのプログラム名 (作成できなければ 0)
4149 */
4150 GLuint gg::ggCreateComputeShader(const char *csrc, const char *ctext)
4151 {
4152  // シェーダプログラムの作成
4153  const GLuint program(glCreateProgram());
4154 
4155  if (program > 0)
4156  {
4157  if (csrc)
4158  {
4159  // コンピュートシェーダのシェーダオブジェクトを作成する
4160  const GLuint compShader(glCreateShader(GL_COMPUTE_SHADER));
4161  glShaderSource(compShader, 1, &csrc, nullptr);
4162  glCompileShader(compShader);
4163 
4164  // コンピュートシェーダのシェーダオブジェクトをプログラムオブジェクトに組み込む
4165  if (printShaderInfoLog(compShader, ctext))
4166  glAttachShader(program, compShader);
4167  glDeleteShader(compShader);
4168  }
4169 
4170  // シェーダプログラムをリンクする
4171  glLinkProgram(program);
4172 
4173  // プログラムオブジェクトが作成できなければ 0 を返す
4174  if (printProgramInfoLog(program) == GL_FALSE)
4175  {
4176  glDeleteProgram(program);
4177  return 0;
4178  }
4179  }
4180 
4181  // プログラムオブジェクトを返す
4182  return program;
4183 }
4184 
4185 /*
4186 ** コンピュートシェーダのソースファイルを読み込んでプログラムオブジェクトを作成する
4187 **
4188 ** comp コンピュートシェーダのソースファイル名
4189 ** 戻り値 プログラムオブジェクトのプログラム名 (作成できなければ 0)
4190 */
4191 GLuint gg::ggLoadComputeShader(const char *comp)
4192 {
4193  // シェーダのソースファイルを読み込む
4194  std::vector<GLchar> csrc;
4195  if (readShaderSource(comp, csrc))
4196  {
4197  // プログラムオブジェクトを作成する
4198  return ggCreateComputeShader(csrc.data(), comp);
4199  }
4200 
4201  // プログラムオブジェクト作成失敗
4202  return 0;
4203 }
4204 #endif
4205 
4206 /*
4207 ** 3 要素の長さ
4208 **
4209 ** a GLfloat 型の 3 要素の配列
4210 */
4211 GLfloat gg::ggLength3(const GLfloat *a)
4212 {
4213  return sqrt(ggDot3(a, a));
4214 }
4215 
4216 /*
4217 ** 4 要素の長さ
4218 **
4219 ** a GLfloat 型の 4 要素の配列
4220 */
4221 GLfloat gg::ggLength4(const GLfloat *a)
4222 {
4223  return sqrt(ggDot4(a, a));
4224 }
4225 
4226 /*
4227 ** 変換行列:行列とベクトルの積 c ← a × b
4228 */
4229 void gg::GgMatrix::projection(GLfloat *c, const GLfloat *a, const GLfloat *b) const
4230 {
4231  for (int i = 0; i < 4; ++i)
4232  {
4233  c[i] = a[0 + i] * b[0] + a[4 + i] * b[1] + a[8 + i] * b[2] + a[12 + i] * b[3];
4234  }
4235 }
4236 
4237 /*
4238 ** 変換行列:行列と行列の積 c ← a × b
4239 */
4240 void gg::GgMatrix::multiply(GLfloat *c, const GLfloat *a, const GLfloat *b) const
4241 {
4242  for (int i = 0; i < 16; ++i)
4243  {
4244  int j = i & 3, k = i & ~3;
4245 
4246  c[i] = a[0 + j] * b[k + 0] + a[4 + j] * b[k + 1] + a[8 + j] * b[k + 2] + a[12 + j] * b[k + 3];
4247  }
4248 }
4249 
4250 /*
4251 ** 変換行列:単位行列を設定する
4252 */
4254 {
4255  array[ 1] = array[ 2] = array[ 3] = array[ 4] =
4256  array[ 6] = array[ 7] = array[ 8] = array[ 9] =
4257  array[11] = array[12] = array[13] = array[14] = 0.0f;
4258  array[ 0] = array[ 5] = array[10] = array[15] = 1.0f;
4259 
4260  return *this;
4261 }
4262 
4263 /*
4264 ** 変換行列:平行移動変換行列を設定する
4265 */
4266 gg::GgMatrix &gg::GgMatrix::loadTranslate(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
4267 {
4268  array[12] = x;
4269  array[13] = y;
4270  array[14] = z;
4271  array[ 0] = array[ 5] = array[10] = array[15] = w;
4272  array[ 1] = array[ 2] = array[ 3] = array[ 4] =
4273  array[ 6] = array[ 7] = array[ 8] = array[ 9] =
4274  array[ 11] = 0.0f;
4275 
4276  return *this;
4277 }
4278 
4279 /*
4280 ** 変換行列:拡大縮小変換行列を設定する
4281 */
4282 gg::GgMatrix &gg::GgMatrix::loadScale(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
4283 {
4284  array[ 0] = x;
4285  array[ 5] = y;
4286  array[10] = z;
4287  array[15] = w;
4288  array[ 1] = array[ 2] = array[ 3] = array[ 4] =
4289  array[ 6] = array[ 7] = array[ 8] = array[ 9] =
4290  array[11] = array[12] = array[13] = array[14] = 0.0f;
4291 
4292  return *this;
4293 }
4294 
4295 /*
4296 ** 変換行列:x 軸中心の回転変換行列を設定する
4297 */
4299 {
4300  const GLfloat c(cos(a));
4301  const GLfloat s(sin(a));
4302 
4303  array[ 0] = 1.0f; array[ 1] = 0.0f; array[ 2] = 0.0f; array[ 3] = 0.0f;
4304  array[ 4] = 0.0f; array[ 5] = c; array[ 6] = s; array[ 7] = 0.0f;
4305  array[ 8] = 0.0f; array[ 9] = -s; array[10] = c; array[11] = 0.0f;
4306  array[12] = 0.0f; array[13] = 0.0f; array[14] = 0.0f; array[15] = 1.0f;
4307 
4308  return *this;
4309 }
4310 
4311 /*
4312 ** 変換行列:y 軸中心の回転変換行列を設定する
4313 */
4315 {
4316  const GLfloat c(cos(a));
4317  const GLfloat s(sin(a));
4318 
4319  array[ 0] = c; array[ 1] = 0.0f; array[ 2] = -s; array[ 3] = 0.0f;
4320  array[ 4] = 0.0f; array[ 5] = 1.0f; array[ 6] = 0.0f; array[ 7] = 0.0f;
4321  array[ 8] = s; array[ 9] = 0.0f; array[10] = c; array[11] = 0.0f;
4322  array[12] = 0.0f; array[13] = 0.0f; array[14] = 0.0f; array[15] = 1.0f;
4323 
4324  return *this;
4325 }
4326 
4327 /*
4328 ** 変換行列:z 軸中心の回転変換行列を設定する
4329 */
4331 {
4332  const GLfloat c(cos(a));
4333  const GLfloat s(sin(a));
4334 
4335  array[ 0] = c; array[ 1] = s; array[ 2] = 0.0f; array[ 3] = 0.0f;
4336  array[ 4] = -s; array[ 5] = c; array[ 6] = 0.0f; array[ 7] = 0.0f;
4337  array[ 8] = 0.0f; array[ 9] = 0.0f; array[10] = 1.0f; array[11] = 0.0f;
4338  array[12] = 0.0f; array[13] = 0.0f; array[14] = 0.0f; array[15] = 1.0f;
4339 
4340  return *this;
4341 }
4342 
4343 /*
4344 ** 変換行列:任意軸中心の回転変換行列を設定する
4345 */
4346 gg::GgMatrix &gg::GgMatrix::loadRotate(GLfloat x, GLfloat y, GLfloat z, GLfloat a)
4347 {
4348  const GLfloat d(sqrt(x * x + y * y + z * z));
4349 
4350  if (d > 0.0f)
4351  {
4352  const GLfloat l(x / d), m(y / d), n(z / d);
4353  const GLfloat l2(l * l), m2(m * m), n2(n * n);
4354  const GLfloat lm(l * m), mn(m * n), nl(n * l);
4355  const GLfloat c(cos(a)), c1(1.0f - c);
4356  const GLfloat s(sin(a));
4357 
4358  array[ 0] = (1.0f - l2) * c + l2;
4359  array[ 1] = lm * c1 + n * s;
4360  array[ 2] = nl * c1 - m * s;
4361  array[ 3] = 0.0f;
4362 
4363  array[ 4] = lm * c1 - n * s;
4364  array[ 5] = (1.0f - m2) * c + m2;
4365  array[ 6] = mn * c1 + l * s;
4366  array[ 7] = 0.0f;
4367 
4368  array[ 8] = nl * c1 + m * s;
4369  array[ 9] = mn * c1 - l * s;
4370  array[10] = (1.0f - n2) * c + n2;
4371  array[11] = 0.0f;
4372 
4373  array[12] = 0.0f;
4374  array[13] = 0.0f;
4375  array[14] = 0.0f;
4376  array[15] = 1.0f;
4377  }
4378 
4379  return *this;
4380 }
4381 
4382 /*
4383 ** 変換行列:転置行列を設定する
4384 */
4386 {
4387  array[ 0] = marray[ 0];
4388  array[ 1] = marray[ 4];
4389  array[ 2] = marray[ 8];
4390  array[ 3] = marray[12];
4391  array[ 4] = marray[ 1];
4392  array[ 5] = marray[ 5];
4393  array[ 6] = marray[ 9];
4394  array[ 7] = marray[13];
4395  array[ 8] = marray[ 2];
4396  array[ 9] = marray[ 6];
4397  array[10] = marray[10];
4398  array[11] = marray[14];
4399  array[12] = marray[ 3];
4400  array[13] = marray[ 7];
4401  array[14] = marray[11];
4402  array[15] = marray[15];
4403 
4404  return *this;
4405 }
4406 
4407 /*
4408 ** 変換行列:逆行列を設定する
4409 */
4411 {
4412  GLfloat lu[20], *plu[4];
4413 
4414  // j 行の要素の値の絶対値の最大値を plu[j][4] に求める
4415  for (int j = 0; j < 4; ++j)
4416  {
4417  GLfloat max(fabs(*(plu[j] = lu + 5 * j) = *(marray++)));
4418 
4419  for (int i = 0; ++i < 4;)
4420  {
4421  GLfloat a(fabs(plu[j][i] = *(marray++)));
4422  if (a > max) max = a;
4423  }
4424  if (max == 0.0f) return *this;
4425  plu[j][4] = 1.0f / max;
4426  }
4427 
4428  // ピボットを考慮した LU 分解
4429  for (int j = 0; j < 4; ++j)
4430  {
4431  GLfloat max(fabs(plu[j][j] * plu[j][4]));
4432  int i = j;
4433 
4434  for (int k = j; ++k < 4;)
4435  {
4436  GLfloat a(fabs(plu[k][j] * plu[k][4]));
4437  if (a > max)
4438  {
4439  max = a;
4440  i = k;
4441  }
4442  }
4443  if (i > j)
4444  {
4445  GLfloat *t(plu[j]);
4446  plu[j] = plu[i];
4447  plu[i] = t;
4448  }
4449  if (plu[j][j] == 0.0f) return *this;
4450  for (int k = j; ++k < 4;)
4451  {
4452  plu[k][j] /= plu[j][j];
4453  for (int i = j; ++i < 4;)
4454  {
4455  plu[k][i] -= plu[j][i] * plu[k][j];
4456  }
4457  }
4458  }
4459 
4460  // LU 分解から逆行列を求める
4461  for (int k = 0; k < 4; ++k)
4462  {
4463  // array に単位行列を設定する
4464  for (int i = 0; i < 4; ++i)
4465  {
4466  array[i * 4 + k] = (plu[i] == lu + k * 5) ? 1.0f : 0.0f;
4467  }
4468  // lu から逆行列を求める
4469  for (int i = 0; i < 4; ++i)
4470  {
4471  for (int j = i; ++j < 4;)
4472  {
4473  array[j * 4 + k] -= array[i * 4 + k] * plu[j][i];
4474  }
4475  }
4476  for (int i = 4; --i >= 0;)
4477  {
4478  for (int j = i; ++j < 4;)
4479  {
4480  array[i * 4 + k] -= plu[i][j] * array[j * 4 + k];
4481  }
4482  array[i * 4 + k] /= plu[i][i];
4483  }
4484  }
4485 
4486  return *this;
4487 }
4488 
4489 /*
4490 ** 変換行列:法線変換行列を設定する
4491 */
4493 {
4494  array[ 0] = marray[ 5] * marray[10] - marray[ 6] * marray[ 9];
4495  array[ 1] = marray[ 6] * marray[ 8] - marray[ 4] * marray[10];
4496  array[ 2] = marray[ 4] * marray[ 9] - marray[ 5] * marray[ 8];
4497  array[ 4] = marray[ 9] * marray[ 2] - marray[10] * marray[ 1];
4498  array[ 5] = marray[10] * marray[ 0] - marray[ 8] * marray[ 2];
4499  array[ 6] = marray[ 8] * marray[ 1] - marray[ 9] * marray[ 0];
4500  array[ 8] = marray[ 1] * marray[ 6] - marray[ 2] * marray[ 5];
4501  array[ 9] = marray[ 2] * marray[ 4] - marray[ 0] * marray[ 6];
4502  array[10] = marray[ 0] * marray[ 5] - marray[ 1] * marray[ 4];
4503  array[ 3] = array[ 7] = array[11] = array[12] = array[13] = array[14] = 0.0f;
4504  array[15] = 1.0f;
4505 
4506  return *this;
4507 }
4508 
4509 /*
4510 ** 変換行列:ビュー変換行列を設定する
4511 */
4512 gg::GgMatrix &gg::GgMatrix::loadLookat(GLfloat ex, GLfloat ey, GLfloat ez,
4513  GLfloat tx, GLfloat ty, GLfloat tz,
4514  GLfloat ux, GLfloat uy, GLfloat uz)
4515 {
4516  // z 軸 = e - t
4517  const GLfloat zx(ex - tx);
4518  const GLfloat zy(ey - ty);
4519  const GLfloat zz(ez - tz);
4520 
4521  // x 軸 = u x z 軸
4522  const GLfloat xx(uy * zz - uz * zy);
4523  const GLfloat xy(uz * zx - ux * zz);
4524  const GLfloat xz(ux * zy - uy * zx);
4525 
4526  // y 軸 = z 軸 x x 軸
4527  const GLfloat yx(zy * xz - zz * xy);
4528  const GLfloat yy(zz * xx - zx * xz);
4529  const GLfloat yz(zx * xy - zy * xx);
4530 
4531  // y 軸の長さをチェック
4532  GLfloat y(yx * yx + yy * yy + yz * yz);
4533  if (y == 0.0f) return *this;
4534 
4535  // x 軸の正規化
4536  const GLfloat x(sqrt(xx * xx + xy * xy + xz * xz));
4537  array[ 0] = xx / x;
4538  array[ 4] = xy / x;
4539  array[ 8] = xz / x;
4540 
4541  // y 軸の正規化
4542  y = sqrt(y);
4543  array[ 1] = yx / y;
4544  array[ 5] = yy / y;
4545  array[ 9] = yz / y;
4546 
4547  // z 軸の正規化
4548  const GLfloat z(sqrt(zx * zx + zy * zy + zz * zz));
4549  array[ 2] = zx / z;
4550  array[ 6] = zy / z;
4551  array[10] = zz / z;
4552 
4553  // 平行移動
4554  array[12] = -(ex * array[ 0] + ey * array[ 4] + ez * array[ 8]);
4555  array[13] = -(ex * array[ 1] + ey * array[ 5] + ez * array[ 9]);
4556  array[14] = -(ex * array[ 2] + ey * array[ 6] + ez * array[10]);
4557 
4558  // 残り
4559  array[ 3] = array[ 7] = array[11] = 0.0f;
4560  array[15] = 1.0f;
4561 
4562  return *this;
4563 }
4564 
4565 /*
4566 ** 変換行列:平行投影変換行列を設定する
4567 */
4568 gg::GgMatrix &gg::GgMatrix::loadOrthogonal(GLfloat left, GLfloat right,
4569  GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
4570 {
4571  const GLfloat dx(right - left);
4572  const GLfloat dy(top - bottom);
4573  const GLfloat dz(zFar - zNear);
4574 
4575  if (dx != 0.0f && dy != 0.0f && dz != 0.0f)
4576  {
4577  array[ 0] = 2.0f / dx;
4578  array[ 5] = 2.0f / dy;
4579  array[10] = -2.0f / dz;
4580  array[12] = -(right + left) / dx;
4581  array[13] = -(top + bottom) / dy;
4582  array[14] = -(zFar + zNear) / dz;
4583  array[15] = 1.0f;
4584  array[ 1] = array[ 2] = array[ 3] = array[ 4] =
4585  array[ 6] = array[ 7] = array[ 8] = array[ 9] =
4586  array[11] = 0.0f;
4587  }
4588 
4589  return *this;
4590 }
4591 
4592 /*
4593 ** 変換行列:透視投影変換行列を設定する
4594 */
4595 gg::GgMatrix &gg::GgMatrix::loadFrustum(GLfloat left, GLfloat right,
4596  GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
4597 {
4598  const GLfloat dx(right - left);
4599  const GLfloat dy(top - bottom);
4600  const GLfloat dz(zFar - zNear);
4601 
4602  if (dx != 0.0f && dy != 0.0f && dz != 0.0f)
4603  {
4604  array[ 0] = 2.0f * zNear / dx;
4605  array[ 5] = 2.0f * zNear / dy;
4606  array[ 8] = (right + left) / dx;
4607  array[ 9] = (top + bottom) / dy;
4608  array[10] = -(zFar + zNear) / dz;
4609  array[11] = -1.0f;
4610  array[14] = -2.0f * zFar * zNear / dz;
4611  array[ 1] = array[ 2] = array[ 3] = array[ 4] =
4612  array[ 6] = array[ 7] = array[12] = array[13] =
4613  array[15] = 0.0f;
4614  }
4615 
4616  return *this;
4617 }
4618 
4619 /*
4620 ** 変換行列:画角から透視投影変換行列を設定する
4621 */
4622 gg::GgMatrix &gg::GgMatrix::loadPerspective(GLfloat fovy, GLfloat aspect,
4623  GLfloat zNear, GLfloat zFar)
4624 {
4625  const GLfloat dz(zFar - zNear);
4626 
4627  if (dz != 0.0f)
4628  {
4629  array[ 5] = 1.0f / tan(fovy * 0.5f);
4630  array[ 0] = array[5] / aspect;
4631  array[10] = -(zFar + zNear) / dz;
4632  array[11] = -1.0f;
4633  array[14] = -2.0f * zFar * zNear / dz;
4634  array[ 1] = array[ 2] = array[ 3] = array[ 4] =
4635  array[ 6] = array[ 7] = array[ 8] = array[ 9] =
4636  array[12] = array[13] = array[15] = 0.0f;
4637  }
4638 
4639  return *this;
4640 }
4641 
4642 /*
4643 ** 四元数:GgQuaternion 型の四元数 p, q の積を r に求める
4644 */
4645 void gg::GgQuaternion::multiply(GLfloat *r, const GLfloat *p, const GLfloat *q) const
4646 {
4647  r[0] = p[1] * q[2] - p[2] * q[1] + p[0] * q[3] + p[3] * q[0];
4648  r[1] = p[2] * q[0] - p[0] * q[2] + p[1] * q[3] + p[3] * q[1];
4649  r[2] = p[0] * q[1] - p[1] * q[0] + p[2] * q[3] + p[3] * q[2];
4650  r[3] = p[3] * q[3] - p[0] * q[0] - p[1] * q[1] - p[2] * q[2];
4651 }
4652 
4653 /*
4654 ** 四元数:GgQuaternion 型の四元数 q が表す変換行列を m に求める
4655 */
4656 void gg::GgQuaternion::toMatrix(GLfloat *m, const GLfloat *q) const
4657 {
4658  const GLfloat xx(q[0] * q[0] * 2.0f);
4659  const GLfloat yy(q[1] * q[1] * 2.0f);
4660  const GLfloat zz(q[2] * q[2] * 2.0f);
4661  const GLfloat xy(q[0] * q[1] * 2.0f);
4662  const GLfloat yz(q[1] * q[2] * 2.0f);
4663  const GLfloat zx(q[2] * q[0] * 2.0f);
4664  const GLfloat xw(q[0] * q[3] * 2.0f);
4665  const GLfloat yw(q[1] * q[3] * 2.0f);
4666  const GLfloat zw(q[2] * q[3] * 2.0f);
4667 
4668  m[ 0] = 1.0f - yy - zz;
4669  m[ 1] = xy + zw;
4670  m[ 2] = zx - yw;
4671  m[ 4] = xy - zw;
4672  m[ 5] = 1.0f - zz - xx;
4673  m[ 6] = yz + xw;
4674  m[ 8] = zx + yw;
4675  m[ 9] = yz - xw;
4676  m[10] = 1.0f - xx - yy;
4677  m[ 3] = m[ 7] = m[11] = m[12] = m[13] = m[14] = 0.0f;
4678  m[15] = 1.0f;
4679 }
4680 
4681 /*
4682 ** 四元数:回転変換行列 a が表す四元数を q に求める
4683 */
4684 void gg::GgQuaternion::toQuaternion(GLfloat *q, const GLfloat *a) const
4685 {
4686  const GLfloat tr(a[0] + a[5] + a[10] + a[15]);
4687 
4688  if (tr > 0.0f)
4689  {
4690  q[3] = sqrt(tr) * 0.5f;
4691  q[0] = (a[6] - a[9]) * 0.25f / q[3];
4692  q[1] = (a[8] - a[2]) * 0.25f / q[3];
4693  q[2] = (a[1] - a[4]) * 0.25f / q[3];
4694  }
4695 }
4696 
4697 /*
4698 ** 四元数:球面線形補間 p に q と r を t で補間した四元数を求める
4699 */
4700 void gg::GgQuaternion::slerp(GLfloat *p, const GLfloat *q, const GLfloat *r, GLfloat t) const
4701 {
4702  const GLfloat qr(ggDot3(q, r));
4703  const GLfloat ss(1.0f - qr * qr);
4704 
4705  if (ss == 0.0f)
4706  {
4707  if (p != q)
4708  {
4709  p[0] = q[0];
4710  p[1] = q[1];
4711  p[2] = q[2];
4712  p[3] = q[3];
4713  }
4714  }
4715  else
4716  {
4717  const GLfloat sp(sqrt(ss));
4718  const GLfloat ph(acos(qr));
4719  const GLfloat pt(ph * t);
4720  const GLfloat t1(sin(pt) / sp);
4721  const GLfloat t0(sin(ph - pt) / sp);
4722 
4723  p[0] = q[0] * t0 + r[0] * t1;
4724  p[1] = q[1] * t0 + r[1] * t1;
4725  p[2] = q[2] * t0 + r[2] * t1;
4726  p[3] = q[3] * t0 + r[3] * t1;
4727  }
4728 }
4729 
4730 /*
4731 ** 四元数:(x, y, z) を軸とし角度 a 回転する四元数を求める
4732 */
4733 gg::GgQuaternion &gg::GgQuaternion::loadRotate(GLfloat x, GLfloat y, GLfloat z, GLfloat a)
4734 {
4735  const GLfloat l(x * x + y * y + z * z);
4736 
4737  if (l != 0.0)
4738  {
4739  GLfloat s(sin(a *= 0.5f) / sqrt(l));
4740 
4741  quaternion[0] = x * s;
4742  quaternion[1] = y * s;
4743  quaternion[2] = z * s;
4744  }
4745  else
4746  {
4747  quaternion[0] = quaternion[1] = quaternion[2] = 0.0f;
4748  }
4749  quaternion[3] = cos(a);
4750 
4751  return *this;
4752 }
4753 
4754 /*
4755 ** x 軸中心に角度 a 回転する四元数を格納する
4756 */
4758 {
4759  const GLfloat t(a * 0.5f);
4760 
4761  quaternion[0] = sin(t);
4762  quaternion[3] = cos(t);
4763  quaternion[1] = quaternion[2] = 0.0f;
4764 
4765  return *this;
4766 }
4767 
4768 /*
4769 ** y 軸中心に角度 a 回転する四元数を格納する
4770 */
4772 {
4773  const GLfloat t(a * 0.5f);
4774 
4775  quaternion[1] = sin(t);
4776  quaternion[3] = cos(t);
4777  quaternion[0] = quaternion[2] = 0.0f;
4778 
4779  return *this;
4780 }
4781 
4782 /*
4783 ** z 軸中心に角度 a 回転する四元数を格納する
4784 */
4786 {
4787  const GLfloat t(a * 0.5f);
4788 
4789  quaternion[2] = sin(t);
4790  quaternion[3] = cos(t);
4791  quaternion[0] = quaternion[1] = 0.0f;
4792 
4793  return *this;
4794 }
4795 
4796 /*
4797 ** 四元数:オイラー角 (heading, pitch, roll) にもとづいて四元数を求める
4798 */
4799 gg::GgQuaternion &gg::GgQuaternion::loadEuler(GLfloat heading, GLfloat pitch, GLfloat roll)
4800 {
4801  GgQuaternion h, p, r;
4802 
4803  h.loadRotateY(heading);
4804  p.loadRotateX(pitch);
4805  r.loadRotateZ(roll);
4806 
4807  *this = h * p * r;
4808 
4809  return *this;
4810 }
4811 
4812 /*
4813 ** 四元数:正規化して格納する
4814 */
4816 {
4817  quaternion[0] = a[0];
4818  quaternion[1] = a[1];
4819  quaternion[2] = a[2];
4820  quaternion[3] = a[3];
4821 
4822  ggNormalize4(quaternion.data());
4823 
4824  return *this;
4825 }
4826 
4827 /*
4828 ** 四元数:共役四元数を格納する
4829 */
4831 {
4832  // w 要素を反転する
4833  quaternion[0] = a[0];
4834  quaternion[1] = a[1];
4835  quaternion[2] = a[2];
4836  quaternion[3] = -a[3];
4837 
4838  return *this;
4839 }
4840 
4841 /*
4842 ** 四元数:逆元を格納する
4843 */
4845 {
4846  // ノルムの二乗を求める
4847  const GLfloat l(ggDot4(a, a));
4848 
4849  if (l > 0.0f)
4850  {
4851  // 共役四元数を求める
4852  GgQuaternion r;
4853  r.loadConjugate(a);
4854 
4855  // ノルムの二乗で割る
4856  quaternion[0] = r.quaternion[0] / l;
4857  quaternion[1] = r.quaternion[1] / l;
4858  quaternion[2] = r.quaternion[2] / l;
4859  quaternion[3] = r.quaternion[3] / l;
4860  }
4861 
4862  return *this;
4863 }
4864 
4865 /*
4866 ** 簡易トラックボール処理:リセット
4867 */
4869 {
4870  // ドラッグ中ではない
4871  drag = false;
4872 
4873  // 単位クォーターニオンで初期化する
4874  tq = cq.loadIdentity();
4875 
4876  // 回転行列を初期化する
4877  tq.getMatrix(rt);
4878 }
4879 
4880 /*
4881 ** 簡易トラックボール処理:トラックボールする領域の設定
4882 **
4883 ** Reshape コールバック (resize) の中で実行する
4884 ** (w, h) ウィンドウサイズ
4885 */
4886 void gg::GgTrackball::region(float w, float h)
4887 {
4888  // マウスポインタ位置のウィンドウ内の相対的位置への換算用
4889  scale[0] = 1.0f / w;
4890  scale[1] = 1.0f / h;
4891 }
4892 
4893 /*
4894 ** 簡易トラックボール処理:ドラッグ開始時の処理
4895 **
4896 ** マウスボタンを押したときに実行する
4897 ** (x, y) 現在のマウス位置
4898 */
4899 void gg::GgTrackball::begin(float x, float y)
4900 {
4901  // ドラッグ開始
4902  drag = true;
4903 
4904  // ドラッグ開始点を記録する
4905  start[0] = x;
4906  start[1] = y;
4907 }
4908 
4909 /*
4910 ** 簡易トラックボール処理:ドラッグ中の処理
4911 **
4912 ** マウスのドラッグ中に実行する
4913 ** (x, y) 現在のマウス位置
4914 */
4915 void gg::GgTrackball::motion(float x, float y)
4916 {
4917  if (drag)
4918  {
4919  // マウスポインタの位置のドラッグ開始位置からの変位
4920  const float d[] = { (x - start[0]) * scale[0], (y - start[1]) * scale[1] };
4921 
4922  // マウスポインタの位置のドラッグ開始位置からの距離
4923  const float a(sqrt(d[0] * d[0] + d[1] * d[1]));
4924 
4925  if (a != 0.0)
4926  {
4927  // 現在の回転の四元数に作った四元数を掛けて合成する
4928  tq = ggRotateQuaternion(d[1], d[0], 0.0f, a * 6.283185f) * cq;
4929 
4930  // 合成した四元数から回転の変換行列を求める
4931  tq.getMatrix(rt);
4932  }
4933  }
4934 }
4935 
4936 /*
4937 ** 簡易トラックボール処理:回転角の修正
4938 **
4939 ** 現在の回転角を修正する
4940 ** q 修正分の回転角を表す四元数
4941 */
4943 {
4944  if (!drag)
4945  {
4946  // 保存されている四元数に修正分の四元数を掛けて合成する
4947  tq = q * cq;
4948 
4949  // 合成した四元数から回転の変換行列を求める
4950  tq.getMatrix(rt);
4951 
4952  // 誤差を吸収するために正規化して保存する
4953  cq = tq.normalize();
4954  }
4955 }
4956 
4957 /*
4958 ** 簡易トラックボール処理:停止時の処理
4959 **
4960 ** マウスボタンを離したときに実行する
4961 ** (x, y) 現在のマウス位置
4962 */
4963 void gg::GgTrackball::end(float x, float y)
4964 {
4965  // ドラッグ終了点における回転を求める
4966  motion(x, y);
4967 
4968  // 誤差を吸収するために正規化して保存する
4969  cq = tq.normalize();
4970 
4971  // ドラッグ終了
4972  drag = false;
4973 }
4974 
4975 /*
4976 ** 点:描画
4977 */
4978 void gg::GgPoints::draw(GLint first, GLsizei count) const
4979 {
4980  // 頂点配列オブジェクトを指定する
4981  GgShape::draw(first, count);
4982 
4983  // 図形を描画する
4984  glDrawArrays(getMode(), first, count > 0 ? count : getCount() - first);
4985 }
4986 
4987 /*
4988 ** 三角形:描画
4989 */
4990 void gg::GgTriangles::draw(GLint first, GLsizei count) const
4991 {
4992  // 頂点配列オブジェクトを指定する
4993  GgShape::draw(first, count);
4994 
4995  // 図形を描画する
4996  glDrawArrays(getMode(), first, count > 0 ? count : getCount() - first);
4997 }
4998 
4999 /*
5000 ** オブジェクト:描画
5001 */
5002 void gg::GgElements::draw(GLint first, GLsizei count) const
5003 {
5004  // 頂点配列オブジェクトを指定する
5005  GgShape::draw(first, count);
5006 
5007  // 図形を描画する
5008  glDrawElements(getMode(), count > 0 ? count : getIndexCount() - first,
5009  GL_UNSIGNED_INT, static_cast<GLuint *>(0) + first);
5010 }
5011 
5012 /*
5013 ** 点群を立方体状に生成する
5014 */
5015 gg::GgPoints *gg::ggPointsCube(GLsizei count, GLfloat length, GLfloat cx, GLfloat cy, GLfloat cz)
5016 {
5017  // メモリを確保する
5018  std::vector<GgVector> pos;
5019  pos.reserve(count);
5020 
5021  // 点を生成する
5022  for (GLsizei v = 0; v < count; ++v)
5023  {
5024  const GgVector p =
5025  {
5026  (static_cast<GLfloat>(rand()) / static_cast<float>(RAND_MAX) - 0.5f) * length + cx,
5027  (static_cast<GLfloat>(rand()) / static_cast<float>(RAND_MAX) - 0.5f) * length + cy,
5028  (static_cast<GLfloat>(rand()) / static_cast<float>(RAND_MAX) - 0.5f) * length + cz,
5029  1.0f
5030  };
5031 
5032  pos.emplace_back(p);
5033  }
5034 
5035  // 点データの GgPoints オブジェクトを作成する
5036  GgPoints *const points(new GgPoints(pos.data(), static_cast<GLuint>(pos.size()), GL_POINTS));
5037 
5038  // GgPoints オブジェクトを返す
5039  return points;
5040 }
5041 
5042 /*
5043 ** 点群を球状に生成する
5044 */
5045 gg::GgPoints *gg::ggPointsSphere(GLsizei count, GLfloat radius,
5046  GLfloat cx, GLfloat cy, GLfloat cz)
5047 {
5048  // メモリを確保する
5049  std::vector<GgVector> pos;
5050  pos.reserve(count);
5051 
5052  // 点を生成する
5053  for (GLsizei v = 0; v < count; ++v)
5054  {
5055  const float r(radius * static_cast<float>(rand()) / static_cast<float>(RAND_MAX));
5056  const float t(6.2831853f * static_cast<float>(rand()) / (static_cast<float>(RAND_MAX) + 1.0f));
5057  const float cp(2.0f * static_cast<float>(rand()) / static_cast<float>(RAND_MAX) - 1.0f);
5058  const float sp(sqrt(1.0f - cp * cp));
5059  const float ct(cos(t));
5060  const float st(sin(t));
5061 
5062  const GgVector p = { r * sp * ct + cx, r * sp * st + cy, r * cp + cz, 1.0f };
5063 
5064  pos.emplace_back(p);
5065  }
5066 
5067  // 点データの GgPoints オブジェクトを作成する
5068  GgPoints *const points(new GgPoints(pos.data(), static_cast<GLsizei>(pos.size()), GL_POINTS));
5069 
5070  // GgPoints オブジェクトを返す
5071  return points;
5072 }
5073 
5074 /*
5075 ** 矩形状に 2 枚の三角形を生成する
5076 */
5077 gg::GgTriangles *gg::ggRectangle(GLfloat width, GLfloat height)
5078 {
5079  // 頂点属性
5080  std::array<GgVertex, 4> vert;
5081 
5082  // 頂点位置と法線を求める
5083  for (int v = 0; v < 4; ++v)
5084  {
5085  const GLfloat x(((v & 1) * 2 - 1) * width);
5086  const GLfloat y(((v & 2) - 1) * height);
5087 
5088  vert[v] = GgVertex(x, y, 0.0f, 0.0f, 0.0f, 1.0f);
5089  }
5090 
5091  // 矩形の GgTrianges オブジェクトを作成する
5092  return new GgTriangles(vert.data(), static_cast<GLsizei>(vert.size()), GL_TRIANGLE_STRIP);
5093 }
5094 
5095 /*
5096 ** 楕円状に三角形を生成する
5097 */
5098 gg::GgTriangles *gg::ggEllipse(GLfloat width, GLfloat height, GLuint slices)
5099 {
5100  // 楕円のスケール
5101  constexpr GLfloat scale(0.5f);
5102 
5103  // 作業用のメモリ
5104  std::vector<GgVertex> vert;
5105  vert.reserve(slices);
5106 
5107  // 頂点位置と法線を求める
5108  for (GLuint v = 0; v < slices; ++v)
5109  {
5110  const GLfloat t(6.2831853f * static_cast<float>(v) / static_cast<float>(slices));
5111  const GLfloat x(cos(t) * width * scale);
5112  const GLfloat y(sin(t) * height * scale);
5113 
5114  vert.emplace_back(x, y, 0.0f, 0.0f, 0.0f, 1.0f);
5115  }
5116 
5117  // GgTriangles オブジェクトを作成する
5118  return new GgTriangles(vert.data(), static_cast<GLsizei>(vert.size()), GL_TRIANGLE_FAN);
5119 }
5120 
5121 /*
5122 ** Wavefront OBJ ファイルを読み込む (Arrays 形式)
5123 */
5124 gg::GgTriangles *gg::ggArraysObj(const char *name, bool normalize)
5125 {
5126  std::vector< std::array<GLuint, 3> > group;
5127  std::vector<GgSimpleShader::Material> material;
5128  std::vector<GgVertex> vert;
5129 
5130  // ファイルを読み込む
5131  if (!ggLoadSimpleObj(name, group, material, vert, normalize)) return 0;
5132 
5133  // GgTriangles オブジェクトを作成する
5134  return new GgTriangles(vert.data(), static_cast<GLsizei>(vert.size()), GL_TRIANGLES);
5135 }
5136 
5137 /*
5138 ** Wavefront OBJ ファイル を読み込む (Elements 形式)
5139 */
5140 gg::GgElements *gg::ggElementsObj(const char *name, bool normalize)
5141 {
5142  std::vector< std::array<GLuint, 3> > group;
5143  std::vector<GgSimpleShader::Material> material;
5144  std::vector<GgVertex> vert;
5145  std::vector<GLuint> face;
5146 
5147  // ファイルを読み込む
5148  if (!ggLoadSimpleObj(name, group, material, vert, face, normalize)) return 0;
5149 
5150  // GgElements オブジェクトを作成する
5151  return new GgElements(vert.data(), static_cast<GLsizei>(vert.size()),
5152  face.data(), static_cast<GLsizei>(face.size()), GL_TRIANGLES);
5153 }
5154 
5155 /*
5156 ** メッシュ形状を作成する (Elements 形式)
5157 */
5158 gg::GgElements *gg::ggElementsMesh(GLuint slices, GLuint stacks, const GLfloat (*pos)[3], const GLfloat (*norm)[3])
5159 {
5160  // 頂点属性
5161  std::vector<GgVertex> vert;
5162  vert.reserve((slices + 1) * (stacks + 1));
5163 
5164  // 頂点の法線を求める
5165  for (GLuint j = 0; j <= stacks; ++j)
5166  {
5167  for (GLuint i = 0; i <= slices; ++i)
5168  {
5169  // 処理対象の頂点番号
5170  const GLuint k(j * (slices + 1) + i);
5171 
5172  // 頂点の法線
5173  GgVector tnorm;
5174  tnorm[3] = 0.0f;
5175 
5176  if (norm)
5177  {
5178  tnorm[0] = norm[k][0];
5179  tnorm[1] = norm[k][1];
5180  tnorm[2] = norm[k][2];
5181  }
5182  else
5183  {
5184  // 処理対象の頂点の周囲の頂点番号
5185  const GLuint kim(i > 0 ? k - 1 : k);
5186  const GLuint kip(i < slices ? k + 1 : k);
5187  const GLuint kjm(j > 0 ? k - slices - 1 : k);
5188  const GLuint kjp(j < stacks ? k + slices + 1 : k);
5189 
5190  // 接線ベクトル
5191  const std::array<GLfloat, 3> t =
5192  {
5193  pos[kip][0] - pos[kim][0],
5194  pos[kip][1] - pos[kim][1],
5195  pos[kip][2] - pos[kim][2]
5196  };
5197 
5198  // 従接線ベクトル
5199  const std::array<GLfloat, 3> b =
5200  {
5201  pos[kjp][0] - pos[kjm][0],
5202  pos[kjp][1] - pos[kjm][1],
5203  pos[kjp][2] - pos[kjm][2]
5204  };
5205 
5206  // 法線
5207  tnorm[0] = t[1] * b[2] - t[2] * b[1];
5208  tnorm[1] = t[2] * b[0] - t[0] * b[2];
5209  tnorm[2] = t[0] * b[1] - t[1] * b[0];
5210 
5211  // 法線の正規化
5212  ggNormalize3(tnorm.data());
5213  }
5214 
5215  // 頂点の位置
5216  const GgVector tpos = { pos[k][0], pos[k][1], pos[k][2], 1.0f };
5217 
5218  // 頂点属性の保存
5219  vert.emplace_back(tpos, tnorm);
5220  }
5221  }
5222 
5223  // 頂点のインデックス (三角形データ)
5224  std::vector<GLuint> face;
5225 
5226  // 頂点のインデックスを求める
5227  for (GLuint j = 0; j < stacks; ++j)
5228  {
5229  for (GLuint i = 0; i < slices; ++i)
5230  {
5231  // 処理対象のマス
5232  const GLuint k((slices + 1) * j + i);
5233 
5234  // マスの上半分の三角形
5235  face.emplace_back(k);
5236  face.emplace_back(k + slices + 2);
5237  face.emplace_back(k + 1);
5238 
5239  // マスのお下半分の三角形
5240  face.emplace_back(k);
5241  face.emplace_back(k + slices + 1);
5242  face.emplace_back(k + slices + 2);
5243  }
5244  }
5245 
5246  // GgElements オブジェクトを作成する
5247  return new GgElements(vert.data(), static_cast<GLsizei>(vert.size()),
5248  face.data(), static_cast<GLsizei>(face.size()), GL_TRIANGLES);
5249 }
5250 
5251 /*
5252 ** 球状に三角形データを生成する (Elements 形式)
5253 */
5254 gg::GgElements *gg::ggElementsSphere(GLfloat radius, int slices, int stacks)
5255 {
5256  // 頂点の位置と法線
5257  std::vector<GLfloat> p, n;
5258 
5259  // 頂点の位置と法線を求める
5260  for (int j = 0; j <= stacks; ++j)
5261  {
5262  const float t(static_cast<float>(j) / static_cast<float>(stacks));
5263  const float ph(3.141593f * t);
5264  const float y(cosf(ph));
5265  const float r(sinf(ph));
5266 
5267  for (int i = 0; i <= slices; ++i)
5268  {
5269  const float s(static_cast<float>(i) / static_cast<float>(slices));
5270  const float th(-2.0f * 3.141593f * s);
5271  const float x(r * cosf(th));
5272  const float z(r * sinf(th));
5273 
5274  // 頂点の座標値
5275  p.push_back(x * radius);
5276  p.push_back(y * radius);
5277  p.push_back(z * radius);
5278 
5279  // 頂点の法線
5280  n.push_back(x);
5281  n.push_back(y);
5282  n.push_back(z);
5283  }
5284  }
5285 
5286  // GgElements オブジェクトを作成する
5287  return ggElementsMesh(slices, stacks, reinterpret_cast<GLfloat (*)[3]>(&p[0]),
5288  reinterpret_cast<GLfloat (*)[3]>(&n[0]));
5289 }
5290 
5291 /*
5292 ** 三角形に単純な陰影付けを行うシェーダが参照する光源データ:光源の強度の環境光成分を設定する
5293 **
5294 ** r 光源の強度の環境光成分の赤成分
5295 ** g 光源の強度の環境光成分の緑成分
5296 ** b 光源の強度の環境光成分の青成分
5297 ** a 光源の強度の環境光成分の不透明度, デフォルトは 1
5298 ** first 値を設定する光源データの最初の番号, デフォルトは 0
5299 ** count 値を設定する光源データの数, デフォルトは 1
5300 */
5301 void gg::GgSimpleShader::LightBuffer::loadAmbient(GLfloat r, GLfloat g, GLfloat b, GLfloat a,
5302  GLint first, GLsizei count) const
5303 {
5304  // データを格納するバッファオブジェクトの先頭のポインタ
5305  char *const start(static_cast<char *>(map(first, count)));
5306  for (GLsizei i = 0; i < count; ++i)
5307  {
5308  // バッファオブジェクトの i 番目のブロックのポインタ
5309  Light *const light(reinterpret_cast<Light *>(start + getStride() * i));
5310 
5311  // 光源の環境光成分を設定する
5312  light->ambient[0] = r;
5313  light->ambient[1] = g;
5314  light->ambient[2] = b;
5315  light->ambient[3] = a;
5316  }
5317  unmap();
5318 }
5319 
5320 /*
5321 ** 三角形に単純な陰影付けを行うシェーダが参照する光源データ:光源の強度の拡散反射光成分を設定する
5322 **
5323 ** r 光源の強度の拡散反射光成分の赤成分
5324 ** g 光源の強度の拡散反射光成分の緑成分
5325 ** b 光源の強度の拡散反射光成分の青成分
5326 ** a 光源の強度の拡散反射光成分の不透明度, デフォルトは 1
5327 ** first 値を設定する光源データの最初の番号, デフォルトは 0
5328 ** count 値を設定する光源データの数, デフォルトは 1
5329 */
5330 void gg::GgSimpleShader::LightBuffer::loadDiffuse(GLfloat r, GLfloat g, GLfloat b, GLfloat a,
5331  GLint first, GLsizei count) const
5332 {
5333  // データを格納するバッファオブジェクトの先頭のポインタ
5334  char *const start(static_cast<char *>(map(first, count)));
5335  for (GLsizei i = 0; i < count; ++i)
5336  {
5337  // バッファオブジェクトの i 番目のブロックのポインタ
5338  Light *const light(reinterpret_cast<Light *>(start + getStride() * i));
5339 
5340  // 光源の拡散反射光成分を設定する
5341  light->diffuse[0] = r;
5342  light->diffuse[1] = g;
5343  light->diffuse[2] = b;
5344  light->diffuse[3] = a;
5345  }
5346  unmap();
5347 }
5348 
5349 /*
5350 ** 三角形に単純な陰影付けを行うシェーダが参照する光源データ:光源の強度の鏡面反射光成分を設定する
5351 **
5352 ** r 光源の強度の鏡面反射光成分の赤成分
5353 ** g 光源の強度の鏡面反射光成分の緑成分
5354 ** b 光源の強度の鏡面反射光成分の青成分
5355 ** a 光源の強度の鏡面反射光成分の不透明度, デフォルトは 1
5356 ** first 値を設定する光源データの最初の番号, デフォルトは 0
5357 ** count 値を設定する光源データの数, デフォルトは 1
5358 */
5359 void gg::GgSimpleShader::LightBuffer::loadSpecular(GLfloat r, GLfloat g, GLfloat b, GLfloat a,
5360  GLint first, GLsizei count) const
5361 {
5362  // データを格納するバッファオブジェクトの先頭のポインタ
5363  char *const start(static_cast<char *>(map(first, count)));
5364  for (GLsizei i = 0; i < count; ++i)
5365  {
5366  // バッファオブジェクトの i 番目のブロックのポインタ
5367  Light *const light(reinterpret_cast<Light *>(start + getStride() * i));
5368 
5369  // 光源の鏡面反射光成分を設定する
5370  light->specular[0] = r;
5371  light->specular[1] = g;
5372  light->specular[2] = b;
5373  light->specular[3] = a;
5374  }
5375  unmap();
5376 }
5377 
5378 /*
5379 ** 三角形に単純な陰影付けを行うシェーダが参照する光源データ:光源の色を設定するが位置は変更しない
5380 **
5381 ** material 光源の特性の GgSimpleShader::Light 構造体
5382 ** first 値を設定する光源データの最初の番号, デフォルトは 0
5383 ** count 値を設定する光源データの数, デフォルトは 1
5384 */
5386  GLint first, GLsizei count) const
5387 {
5388  // データを格納するバッファオブジェクトの先頭のポインタ
5389  char *const start(static_cast<char *>(map(first, count)));
5390  for (GLsizei i = 0; i < count; ++i)
5391  {
5392  // バッファオブジェクトの i 番目のブロックのポインタ
5393  Light *const light(reinterpret_cast<Light *>(start + getStride() * i));
5394 
5395  // 光源の色を設定する
5396  light->ambient = color.ambient;
5397  light->diffuse = color.diffuse;
5398  light->specular = color.specular;
5399  }
5400  unmap();
5401 }
5402 
5403 /*
5404 ** 三角形に単純な陰影付けを行うシェーダが参照する光源データ:光源の位置を設定する
5405 **
5406 ** x 光源の位置の x 座標
5407 ** y 光源の位置の y 座標
5408 ** z 光源の位置の z 座標
5409 ** w 光源の位置の w 座標, デフォルトは 1
5410 ** first 値を設定する光源データの最初の番号, デフォルトは 0
5411 ** count 値を設定する光源データの数, デフォルトは 1
5412 */
5413 void gg::GgSimpleShader::LightBuffer::loadPosition(GLfloat x, GLfloat y, GLfloat z, GLfloat w,
5414  GLint first, GLsizei count) const
5415 {
5416  // データを格納するバッファオブジェクトの先頭のポインタ
5417  char *const start(static_cast<char *>(map(first, count)));
5418  for (GLsizei i = 0; i < count; ++i)
5419  {
5420  // バッファオブジェクトの i 番目のブロックのポインタ
5421  Light *const light(reinterpret_cast<Light *>(start + getStride() * i));
5422 
5423  // 光源の位置を設定する
5424  light->position[0] = x;
5425  light->position[1] = y;
5426  light->position[2] = z;
5427  light->position[3] = w;
5428  }
5429  unmap();
5430 }
5431 
5432 /*
5433 ** 三角形に単純な陰影付けを行うシェーダが参照する光源データ:光源の位置を設定する
5434 **
5435 ** position 光源の位置
5436 ** first 値を設定する光源データの最初の番号, デフォルトは 0
5437 ** count 値を設定する光源データの数, デフォルトは 1
5438 */
5440  GLint first, GLsizei count) const
5441 {
5442  // データを格納するバッファオブジェクトの先頭のポインタ
5443  char *const start(static_cast<char *>(map(first, count)));
5444  for (GLsizei i = 0; i < count; ++i)
5445  {
5446  // バッファオブジェクトの i 番目のブロックのポインタ
5447  Light *const light(reinterpret_cast<Light *>(start + getStride() * i));
5448 
5449  // 光源の位置を設定する
5450  light->position = position;
5451  }
5452  unmap();
5453 }
5454 
5455 /*
5456 ** 三角形に単純な陰影付けを行うシェーダが参照する材質データ:環境光に対する反射係数を設定する
5457 **
5458 ** r 環境光に対する反射係数の赤成分
5459 ** g 環境光に対する反射係数の緑成分
5460 ** b 環境光に対する反射係数の青成分
5461 ** a 環境光に対する反射係数の不透明度, デフォルトは 1
5462 ** first 値を設定する材質データの最初の番号, デフォルトは 0
5463 ** count 値を設定する材質データの数, デフォルトは 1
5464 */
5465 void gg::GgSimpleShader::MaterialBuffer::loadAmbient(GLfloat r, GLfloat g, GLfloat b, GLfloat a,
5466  GLint first, GLsizei count) const
5467 {
5468  // データを格納するバッファオブジェクトの先頭のポインタ
5469  char *const start(static_cast<char *>(map(first, count)));
5470  for (GLsizei i = 0; i < count; ++i)
5471  {
5472  // バッファオブジェクトの i 番目のブロックのポインタ
5473  Material *const material(reinterpret_cast<Material *>(start + getStride() * i));
5474 
5475  // 環境光に対する反射係数を設定する
5476  material->ambient[0] = r;
5477  material->ambient[1] = g;
5478  material->ambient[2] = b;
5479  material->ambient[3] = a;
5480  }
5481  unmap();
5482 }
5483 
5484 /*
5485 ** 三角形に単純な陰影付けを行うシェーダが参照する材質データ:拡散反射係数を設定する
5486 **
5487 ** r 拡散反射係数の赤成分
5488 ** g 拡散反射係数の緑成分
5489 ** b 拡散反射係数の青成分
5490 ** a 拡散反射係数の不透明度, デフォルトは 1
5491 ** first 値を設定する材質データの最初の番号, デフォルトは 0
5492 ** count 値を設定する材質データの数, デフォルトは 1
5493 */
5494 void gg::GgSimpleShader::MaterialBuffer::loadDiffuse(GLfloat r, GLfloat g, GLfloat b, GLfloat a,
5495  GLint first, GLsizei count) const
5496 {
5497  // データを格納するバッファオブジェクトの先頭のポインタ
5498  char *const start(static_cast<char *>(map(first, count)));
5499  for (GLsizei i = 0; i < count; ++i)
5500  {
5501  // バッファオブジェクトの i 番目のブロックのポインタ
5502  Material *const material(reinterpret_cast<Material *>(start + getStride() * i));
5503 
5504  // 拡散反射係数を設定する
5505  material->diffuse[0] = r;
5506  material->diffuse[1] = g;
5507  material->diffuse[2] = b;
5508  material->diffuse[3] = a;
5509  }
5510  unmap();
5511 }
5512 
5513 /*
5514 ** 三角形に単純な陰影付けを行うシェーダが参照する材質データ:環境光に対する反射係数と拡散反射係数を設定する
5515 **
5516 ** r 環境光に対する反射係数と拡散反射係数の赤成分
5517 ** g 環境光に対する反射係数と拡散反射係数の緑成分
5518 ** b 環境光に対する反射係数と拡散反射係数の青成分
5519 ** a 環境光に対する反射係数と拡散反射係数の不透明度, デフォルトは 1
5520 ** first 値を設定する材質データの最初の番号, デフォルトは 0
5521 ** count 値を設定する材質データの数, デフォルトは 1
5522 */
5523 void gg::GgSimpleShader::MaterialBuffer::loadAmbientAndDiffuse(GLfloat r, GLfloat g, GLfloat b, GLfloat a,
5524  GLint first, GLsizei count) const
5525 {
5526  // データを格納するバッファオブジェクトの先頭のポインタ
5527  char *const start(static_cast<char *>(map(first, count)));
5528  for (GLsizei i = 0; i < count; ++i)
5529  {
5530  // バッファオブジェクトの i 番目のブロックのポインタ
5531  Material *const material(reinterpret_cast<Material *>(start + getStride() * i));
5532 
5533  // 環境光に対する反射係数と拡散反射係数を設定する
5534  material->ambient[0] = material->diffuse[0] = r;
5535  material->ambient[1] = material->diffuse[1] = g;
5536  material->ambient[2] = material->diffuse[2] = b;
5537  material->ambient[3] = material->diffuse[3] = a;
5538  }
5539  unmap();
5540 }
5541 
5542 /*
5543 ** 三角形に単純な陰影付けを行うシェーダが参照する材質データ:環境光に対する反射係数と拡散反射係数を設定する
5544 **
5545 ** color 環境光に対する反射係数と拡散反射係数を格納した GLfloat 型の 4 要素の配列
5546 ** first 値を設定する材質データの最初の番号, デフォルトは 0
5547 ** count 値を設定する材質データの数, デフォルトは 1
5548 */
5550  GLint first, GLsizei count) const
5551 {
5552  // ambient 要素のバイトオフセット
5553  constexpr GLint ambientOffset(offsetof(Material, ambient));
5554 
5555  // ambient 要素のバイト数
5556  constexpr size_t ambientSize(sizeof (Material::diffuse));
5557 
5558  // diffuse 要素のバイトオフセット
5559  constexpr GLint diffuseOffset(offsetof(Material, diffuse));
5560 
5561  // diffuse 要素のバイト数
5562  constexpr size_t diffuseSize(sizeof (Material::diffuse));
5563 
5564  // 元のデータの先頭
5565  const char *source(reinterpret_cast<const char *>(color));
5566 
5567  // first 番目のブロックから count 個の ambient 要素と diffuse 要素に値を設定する
5568  bind();
5569  for (GLsizei i = 0; i < count; ++i)
5570  {
5571  // 格納先
5572  const GLsizeiptr destination(getStride() * (first + i));
5573 
5574  // first + i 番目のブロックの ambient 要素に値を設定する
5575  glBufferSubData(getTarget(), destination + ambientOffset, ambientSize, source + i * ambientSize);
5576 
5577  // first + i 番目のブロックの diffuse 要素に値を設定する
5578  glBufferSubData(getTarget(), destination + diffuseOffset, diffuseSize, source + i * diffuseSize);
5579  }
5580 }
5581 
5582 /*
5583 ** 三角形に単純な陰影付けを行うシェーダが参照する材質データ:鏡面反射係数を設定する
5584 **
5585 ** r 鏡面反射係数の赤成分
5586 ** g 鏡面反射係数の緑成分
5587 ** b 鏡面反射係数の青成分
5588 ** a 鏡面反射係数の不透明度, デフォルトは 1
5589 ** first 値を設定する材質データの最初の番号, デフォルトは 0
5590 ** count 値を設定する材質データの数, デフォルトは 1
5591 */
5592 void gg::GgSimpleShader::MaterialBuffer::loadSpecular(GLfloat r, GLfloat g, GLfloat b, GLfloat a,
5593  GLint first, GLsizei count) const
5594 {
5595  // データを格納するバッファオブジェクトの先頭のポインタ
5596  char *const start(static_cast<char *>(map(first, count)));
5597  for (GLsizei i = 0; i < count; ++i)
5598  {
5599  // バッファオブジェクトの i 番目のブロックのポインタ
5600  Material *const material(reinterpret_cast<Material *>(start + getStride() * i));
5601 
5602  // 鏡面反射係数を設定する
5603  material->specular[0] = r;
5604  material->specular[1] = g;
5605  material->specular[2] = b;
5606  material->specular[3] = a;
5607  }
5608  unmap();
5609 }
5610 
5611 /*
5612 ** 三角形に単純な陰影付けを行うシェーダが参照する材質データ:輝き係数を設定する
5613 **
5614 ** shininess 輝き係数
5615 ** first 値を設定する材質データの最初の番号, デフォルトは 0
5616 ** count 値を設定する材質データの数, デフォルトは 1
5617 */
5619  GLint first, GLsizei count) const
5620 {
5621  // データを格納するバッファオブジェクトの先頭のポインタ
5622  char *const start(static_cast<char *>(map(first, count)));
5623  for (GLsizei i = 0; i < count; ++i)
5624  {
5625  // バッファオブジェクトの i 番目のブロックのポインタ
5626  Material *const material(reinterpret_cast<Material *>(start + getStride() * i));
5627  material->shininess = shininess;
5628  }
5629  unmap();
5630 }
5631 
5632 /*
5633 ** 三角形に単純な陰影付けを行うシェーダが参照する材質データ:輝き係数を設定する
5634 **
5635 ** shininess 輝き係数
5636 ** first 値を設定する材質データの最初の番号, デフォルトは 0
5637 ** count 値を設定する材質データの数, デフォルトは 1
5638 */
5640  GLint first, GLsizei count) const
5641 {
5642  // データを格納するバッファオブジェクトの先頭のポインタ
5643  char *const start(static_cast<char *>(map(first, count)));
5644  for (GLsizei i = 0; i < count; ++i)
5645  {
5646  // バッファオブジェクトの i 番目のブロックのポインタ
5647  Material *const material(reinterpret_cast<Material *>(start + getStride() * i));
5648  material->shininess = shininess[i];
5649  }
5650  unmap();
5651 }
5652 
5653 /*
5654 ** 三角形に単純な陰影付けを行うシェーダ:シェーダのソースファイルの読み込み
5655 */
5656 void gg::GgSimpleShader::load(const char* vert, const char* frag,
5657  const char* geom, GLint nvarying, const char** varyings)
5658 {
5659  GgPointShader::load(vert, frag, geom, nvarying, varyings);
5660  mnLoc = glGetUniformLocation(get(), "mn");
5661  lightIndex = glGetUniformBlockIndex(get(), "Light");
5662  glUniformBlockBinding(get(), lightIndex, 0);
5663  materialIndex = glGetUniformBlockIndex(get(), "Material");
5664  glUniformBlockBinding(get(), materialIndex, 1);
5665 }
5666 
5667 /*
5668 ** Wavefront OBJ 形式のデータ:コンストラクタ
5669 */
5670 gg::GgSimpleObj::GgSimpleObj(const char *name, bool normalize)
5671 {
5672  // 作業用のメモリ
5673  std::vector<GgSimpleShader::Material> mat;
5674  std::vector<GgVertex> vert;
5675  std::vector<GLuint> face;
5676 
5677  // ファイルを読み込む
5678  if (ggLoadSimpleObj(name, group, mat, vert, face, normalize))
5679  {
5680  // 頂点バッファオブジェクトを作成する
5681  data.reset(new GgElements(vert.data(), static_cast<GLsizei>(vert.size()),
5682  face.data(), static_cast<GLsizei>(face.size()), GL_TRIANGLES));
5683 
5684  // 材質データを設定する
5685  material.reset(new GgSimpleShader::MaterialBuffer(mat.data(), static_cast<GLsizei>(mat.size())));
5686  }
5687 }
5688 
5689 /*
5690 ** Wavefront OBJ 形式のデータ:図形の描画
5691 */
5692 void gg::GgSimpleObj::draw(GLint first, GLsizei count) const
5693 {
5694  // 保持しているグループの数
5695  const GLsizei ng(static_cast<GLsizei>(group.size()));
5696 
5697  // 描画する最後のグループの次
5698  GLsizei last(count <= static_cast<GLsizei>(0) ? ng : first + count);
5699  if (last > ng) last = ng;
5700 
5701  for (GLsizei g = first; g < last; ++g)
5702  {
5703  // 材質を設定する
5704  material->select(group[g][2]);
5705 
5706  // 図形を描画する
5707  data->draw(group[g][0], group[g][1]);
5708  }
5709 }
void load(const GLvoid *image, GLsizei width, GLsizei height, GLenum format=GL_BGR, GLenum type=GL_UNSIGNED_BYTE, GLenum internal=GL_RGB, GLenum wrap=GL_CLAMP_TO_EDGE)
テクスチャを作成してメモリ上のデータを読み込む.
Definition: gg.h:4005
三角形で表した形状データ (Elements 形式).
Definition: gg.h:4772
virtual void draw(GLint first=0, GLsizei count=0) const
インデックスを使った三角形の描画.
Definition: gg.cpp:5002
変換行列.
Definition: gg.h:1655
GgMatrix & loadIdentity()
単位行列を格納する.
Definition: gg.cpp:4253
GgMatrix & loadFrustum(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
透視透視投影変換行列を格納する.
Definition: gg.cpp:4595
GgMatrix & loadTranslate(GLfloat x, GLfloat y, GLfloat z, GLfloat w=1.0f)
平行移動の変換行列を格納する.
Definition: gg.cpp:4266
GgMatrix & loadPerspective(GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloat zFar)
画角を指定して透視投影変換行列を格納する.
Definition: gg.cpp:4622
GgMatrix & loadInvert(const GLfloat *a)
逆行列を格納する.
Definition: gg.cpp:4410
GgMatrix & loadLookat(GLfloat ex, GLfloat ey, GLfloat ez, GLfloat tx, GLfloat ty, GLfloat tz, GLfloat ux, GLfloat uy, GLfloat uz)
ビュー変換行列を格納する.
Definition: gg.cpp:4512
GgMatrix & loadScale(GLfloat x, GLfloat y, GLfloat z, GLfloat w=1.0f)
拡大縮小の変換行列を格納する.
Definition: gg.cpp:4282
GgMatrix & loadRotate(GLfloat x, GLfloat y, GLfloat z, GLfloat a)
(x, y, z) 方向のベクトルを軸とする回転の変換行列を格納する.
Definition: gg.cpp:4346
GgMatrix & loadRotateX(GLfloat a)
x 軸中心の回転の変換行列を格納する.
Definition: gg.cpp:4298
GgMatrix & loadRotateY(GLfloat a)
y 軸中心の回転の変換行列を格納する.
Definition: gg.cpp:4314
GgMatrix & loadOrthogonal(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
直交投影変換行列を格納する.
Definition: gg.cpp:4568
GgMatrix & loadRotateZ(GLfloat a)
z 軸中心の回転の変換行列を格納する.
Definition: gg.cpp:4330
GgMatrix & loadTranspose(const GLfloat *a)
転置行列を格納する.
Definition: gg.cpp:4385
GgMatrix & loadNormal(const GLfloat *a)
法線変換行列を格納する.
Definition: gg.cpp:4492
void load(const GLubyte *hmap, GLsizei width, GLsizei height, GLenum format=GL_RED, float nz=1.0f, GLenum internal=GL_RGBA)
メモリ上のデータから法線マップのテクスチャを作成する.
Definition: gg.h:4069
void load(const char *vert, const char *frag=0, const char *geom=0, GLint nvarying=0, const char **varyings=0)
シェーダのソースファイルを読み込む.
Definition: gg.h:5040
点.
Definition: gg.h:4580
virtual void draw(GLint first=0, GLsizei count=0) const
点の描画.
Definition: gg.cpp:4978
四元数.
Definition: gg.h:2717
GgQuaternion & loadRotateY(GLfloat a)
y 軸中心に角度 a 回転する四元数を格納する.
Definition: gg.cpp:4771
GgQuaternion & loadRotateZ(GLfloat a)
z 軸中心に角度 a 回転する四元数を格納する.
Definition: gg.cpp:4785
GgQuaternion & loadEuler(GLfloat heading, GLfloat pitch, GLfloat roll)
オイラー角 (heading, pitch, roll) で与えられた回転を表す四元数を格納する.
Definition: gg.cpp:4799
GgQuaternion & loadInvert(const GLfloat *a)
引数に指定した四元数の逆元を格納する.
Definition: gg.cpp:4844
void getMatrix(GLfloat *a) const
四元数が表す回転の変換行列を a に求める.
Definition: gg.h:3499
GgQuaternion & loadRotateX(GLfloat a)
x 軸中心に角度 a 回転する四元数を格納する.
Definition: gg.cpp:4757
GgQuaternion & loadRotate(GLfloat x, GLfloat y, GLfloat z, GLfloat a)
(x, y, z) を軸として角度 a 回転する四元数を格納する.
Definition: gg.cpp:4733
GgQuaternion & loadNormalize(const GLfloat *a)
引数に指定した四元数を正規化して格納する.
Definition: gg.cpp:4815
GgQuaternion & loadConjugate(const GLfloat *a)
引数に指定した四元数の共役四元数を格納する.
Definition: gg.cpp:4830
virtual void draw(GLint first=0, GLsizei count=0) const
図形の描画, 派生クラスでこの手続きをオーバーライドする.
Definition: gg.h:4569
virtual void draw(GLint first=0, GLsizei count=0) const
Wavefront OBJ 形式のデータを描画する手続き.
Definition: gg.cpp:5692
GgSimpleObj(const char *name, bool normalize=false)
コンストラクタ.
Definition: gg.cpp:5670
void loadSpecular(GLfloat r, GLfloat g, GLfloat b, GLfloat a=1.0f, GLint first=0, GLsizei count=1) const
光源の強度の鏡面反射光成分を設定する.
Definition: gg.cpp:5359
void loadDiffuse(GLfloat r, GLfloat g, GLfloat b, GLfloat a=1.0f, GLint first=0, GLsizei count=1) const
光源の強度の拡散反射光成分を設定する.
Definition: gg.cpp:5330
void loadPosition(GLfloat x, GLfloat y, GLfloat z, GLfloat w=1.0f, GLint first=0, GLsizei count=1) const
光源の位置を設定する.
Definition: gg.cpp:5413
void loadAmbient(GLfloat r, GLfloat g, GLfloat b, GLfloat a=1.0f, GLint first=0, GLsizei count=1) const
光源の強度の環境光成分を設定する.
Definition: gg.cpp:5301
void loadColor(const Light &color, GLint first=0, GLsizei count=1) const
光源の色を設定するが位置は変更しない.
Definition: gg.cpp:5385
三角形に単純な陰影付けを行うシェーダが参照する材質データのユニフォームバッファオブジェクト.
Definition: gg.h:5459
void loadShininess(GLfloat shininess, GLint first=0, GLsizei count=1) const
輝き係数を設定する.
Definition: gg.cpp:5618
void loadAmbient(GLfloat r, GLfloat g, GLfloat b, GLfloat a=1.0f, GLint first=0, GLsizei count=1) const
環境光に対する反射係数を設定する.
Definition: gg.cpp:5465
void loadSpecular(GLfloat r, GLfloat g, GLfloat b, GLfloat a=1.0f, GLint first=0, GLsizei count=1) const
鏡面反射係数を設定する.
Definition: gg.cpp:5592
void loadAmbientAndDiffuse(GLfloat r, GLfloat g, GLfloat b, GLfloat a=1.0f, GLint first=0, GLsizei count=1) const
環境光に対する反射係数と拡散反射係数を設定する.
Definition: gg.cpp:5523
void loadDiffuse(GLfloat r, GLfloat g, GLfloat b, GLfloat a=1.0f, GLint first=0, GLsizei count=1) const
拡散反射係数を設定する.
Definition: gg.cpp:5494
void load(const char *vert, const char *frag=0, const char *geom=0, GLint nvarying=0, const char **varyings=0)
シェーダのソースファイルの読み込み
Definition: gg.cpp:5656
テクスチャ.
Definition: gg.h:3869
void begin(float x, float y)
トラックボール処理を開始する.
Definition: gg.cpp:4899
void end(float x, float y)
トラックボール処理を停止する.
Definition: gg.cpp:4963
void motion(float x, float y)
回転の変換行列を計算する.
Definition: gg.cpp:4915
void region(float w, float h)
トラックボール処理するマウスの移動範囲を指定する.
Definition: gg.cpp:4886
void reset()
トラックボールをリセットする
Definition: gg.cpp:4868
void rotate(const GgQuaternion &q)
トラックボールの回転角を修正する.
Definition: gg.cpp:4942
三角形で表した形状データ (Arrays 形式).
Definition: gg.h:4691
virtual void draw(GLint first=0, GLsizei count=0) const
三角形の描画.
Definition: gg.cpp:4990
ゲームグラフィックス特論の宿題用補助プログラム GLFW3 版の宣言.
GgSimpleShader::Light light
Definition: ggsample01.cpp:8
ゲームグラフィックス特論の宿題用補助プログラムの名前空間
Definition: gg.h:1307
GgTriangles * ggArraysObj(const char *name, bool normalize=false)
Wavefront OBJ ファイルを読み込む (Arrays 形式)
Definition: gg.cpp:5124
GgElements * ggElementsMesh(GLuint slices, GLuint stacks, const GLfloat(*pos)[3], const GLfloat(*norm)[3]=nullptr)
メッシュ形状を作成する (Elements 形式).
Definition: gg.cpp:5158
GgTriangles * ggRectangle(GLfloat width=1.0f, GLfloat height=1.0f)
矩形状に 2 枚の三角形を生成する.
Definition: gg.cpp:5077
void _ggFBOError(const char *name=nullptr, unsigned int line=0)
FBO のエラーをチェックする.
Definition: gg.cpp:2618
void ggCreateNormalMap(const GLubyte *hmap, GLsizei width, GLsizei height, GLenum format, GLfloat nz, GLenum internal, std::vector< GgVector > &nmap)
グレースケール画像 (8bit) から法線マップのデータを作成する.
Definition: gg.cpp:3005
GLfloat ggLength4(const GLfloat *a)
4 要素の長さ.
Definition: gg.cpp:4221
GLfloat ggDot4(const GLfloat *a, const GLfloat *b)
4 要素の内積
Definition: gg.h:1635
GLint ggBufferAlignment
使用している GPU のバッファオブジェクトのアライメント, 初期化に取得される.
void ggCross(GLfloat *c, const GLfloat *a, const GLfloat *b)
3 要素の外積.
Definition: gg.h:1571
GgElements * ggElementsObj(const char *name, bool normalize=false)
Wavefront OBJ ファイル を読み込む (Elements 形式).
Definition: gg.cpp:5140
GLuint ggLoadShader(const char *vert, const char *frag=nullptr, const char *geom=nullptr, GLint nvarying=0, const char *const varyings[]=nullptr)
シェーダのソースファイルを読み込んでプログラムオブジェクトを作成する.
Definition: gg.cpp:4128
GLfloat ggDot3(const GLfloat *a, const GLfloat *b)
3 要素の内積.
Definition: gg.h:1559
GgQuaternion ggRotateQuaternion(GLfloat x, GLfloat y, GLfloat z, GLfloat a)
(x, y, z) を軸として角度 a 回転する四元数を返す.
Definition: gg.h:3619
std::array< GLfloat, 4 > GgVector
4 要素の単精度実数の配列.
Definition: gg.h:1325
void _ggError(const char *name=nullptr, unsigned int line=0)
OpenGL のエラーをチェックする.
Definition: gg.cpp:2574
GLfloat ggLength3(const GLfloat *a)
3 要素の長さ.
Definition: gg.cpp:4211
GLuint ggCreateShader(const char *vsrc, const char *fsrc=nullptr, const char *gsrc=nullptr, GLint nvarying=0, const char *const varyings[]=nullptr, const char *vtext="vertex shader", const char *ftext="fragment shader", const char *gtext="geometry shader")
シェーダのソースプログラムの文字列を読み込んでプログラムオブジェクトを作成する.
Definition: gg.cpp:3993
GgTriangles * ggEllipse(GLfloat width=1.0f, GLfloat height=1.0f, GLuint slices=16)
楕円状に三角形を生成する.
Definition: gg.cpp:5098
GLuint ggLoadTexture(const GLvoid *image, GLsizei width, GLsizei height, GLenum format=GL_BGR, GLenum type=GL_UNSIGNED_BYTE, GLenum internal=GL_RGB, GLenum wrap=GL_CLAMP_TO_EDGE)
テクスチャメモリを確保して画像データをテクスチャとして読み込む.
Definition: gg.cpp:2916
GgPoints * ggPointsCube(GLsizei countv, GLfloat length=1.0f, GLfloat cx=0.0f, GLfloat cy=0.0f, GLfloat cz=0.0f)
点群を立方体状に生成する.
Definition: gg.cpp:5015
GLuint ggLoadImage(const char *name, GLsizei *pWidth=nullptr, GLsizei *pHeight=nullptr, GLenum internal=0, GLenum wrap=GL_CLAMP_TO_EDGE)
テクスチャメモリを確保して TGA 画像ファイルを読み込む.
Definition: gg.cpp:2949
GLuint ggLoadHeight(const char *name, float nz, GLsizei *pWidth=nullptr, GLsizei *pHeight=nullptr, GLenum internal=GL_RGBA)
テクスチャメモリを確保して TGA 画像ファイルを読み込み法線マップを作成する.
Definition: gg.cpp:3085
GgPoints * ggPointsSphere(GLsizei countv, GLfloat radius=0.5f, GLfloat cx=0.0f, GLfloat cy=0.0f, GLfloat cz=0.0f)
点群を球状に生成する.
Definition: gg.cpp:5045
void ggNormalize4(GLfloat *a)
4 要素の正規化.
Definition: gg.h:1600
bool ggSaveTga(const char *name, const void *buffer, unsigned int width, unsigned int height, unsigned int depth)
配列の内容を TGA ファイルに保存する.
Definition: gg.cpp:2665
bool ggLoadSimpleObj(const char *name, std::vector< std::array< GLuint, 3 >> &group, std::vector< GgSimpleShader::Material > &material, std::vector< GgVertex > &vert, bool normalize=false)
三角形分割された OBJ ファイルと MTL ファイルを読み込む (Arrays 形式)
Definition: gg.cpp:3738
GgElements * ggElementsSphere(GLfloat radius=1.0f, int slices=16, int stacks=8)
Definition: gg.cpp:5254
GLuint ggLoadComputeShader(const char *comp)
コンピュートシェーダのソースファイルを読み込んでプログラムオブジェクトを作成する.
Definition: gg.cpp:4191
bool ggSaveColor(const char *name)
カラーバッファの内容を TGA ファイルに保存する.
Definition: gg.cpp:2748
void ggNormalize3(GLfloat *a)
3 要素の正規化.
Definition: gg.h:1542
void ggInit()
ゲームグラフィックス特論の都合にもとづく初期化を行う.
Definition: gg.cpp:1319
bool ggSaveDepth(const char *name)
デプスバッファの内容を TGA ファイルに保存する.
Definition: gg.cpp:2774
bool ggReadImage(const char *name, std::vector< GLubyte > &image, GLsizei *pWidth, GLsizei *pHeight, GLenum *pFormat)
TGA ファイル (8/16/24/32bit) をメモリに読み込む.
Definition: gg.cpp:2804
GLuint ggCreateComputeShader(const char *csrc, const char *ctext="compute shader")
コンピュートシェーダのソースプログラムの文字列を読み込んでプログラムオブジェクトを作成する.
Definition: gg.cpp:4150
三角形に単純な陰影付けを行うシェーダが参照する光源データ.
Definition: gg.h:5286
GgVector position
光源の位置.
Definition: gg.h:5290
GgVector ambient
光源強度の環境光成分.
Definition: gg.h:5287
GgVector diffuse
光源強度の拡散反射光成分.
Definition: gg.h:5288
GgVector specular
光源強度の鏡面反射光成分.
Definition: gg.h:5289
三角形に単純な陰影付けを行うシェーダが参照する材質データ.
Definition: gg.h:5447
GgVector specular
鏡面反射係数.
Definition: gg.h:5450
GLfloat shininess
輝き係数.
Definition: gg.h:5451
GgVector ambient
環境光に対する反射係数.
Definition: gg.h:5448
GgVector diffuse
拡散反射係数.
Definition: gg.h:5449
三角形の頂点データ.
Definition: gg.h:4652