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