ゲームグラフィックス特論
読み取り中…
検索中…
一致する文字列を見つけられません
gg.h
[詳解]
1#pragma once
2
26
34
35// 標準ライブラリ
36#include <cmath>
37#include <array>
38#include <vector>
39#include <string>
40#include <memory>
41#include <cassert>
42
43// Windows (Visual Studio) のとき
44#if defined(_MSC_VER)
45// 非推奨の警告を出さない
46# pragma warning(disable:4996)
47// 数学ライブラリの定数を使う
48# define _USE_MATH_DEFINES
49// MIN() / MAX マクロは使わない
50# define NOMINMAX
51// ファイルパスの文字コード
52#include <atlstr.h>
53using pathString = CString;
54using pathChar = wchar_t;
55extern pathString Utf8ToTChar(const std::string& string);
56extern std::string TCharToUtf8(const pathString& cstring);
57// デバッグビルドかどうか調べる
58# if defined(_DEBUG)
59# if !defined(DEBUG)
60# define DEBUG
61# endif
62# define GLFW3_CONFIGURATION "Debug"
63# else
64# if !defined(NDEBUG)
65# define NDEBUG
66# endif
67# define GLFW3_CONFIGURATION "Release"
68# endif
69// プラットフォームを調べる
70# if defined(_WIN64)
71# define GLFW3_PLATFORM "x64"
72# else
73# define GLFW3_PLATFORM "Win32"
74# endif
75#else
76// ファイルパスの文字コード
77using pathString = std::string;
78using pathChar = char;
79inline pathString Utf8ToTChar(const std::string& string) { return string; }
80inline std::string TCharToUtf8(const pathString& cstring) { return cstring; }
81#endif
82
84
85// macOS で "OpenGL deprecated の警告を出さない
86#if defined(__APPLE__)
87# define GL_SILENCE_DEPRECATION
88#endif
89
90// フレームワークに GLFW 3 を使う
91#if defined(IMGUI_IMPL_OPENGL_ES2)
92# define GLFW_INCLUDE_ES2
93#elif defined(IMGUI_IMPL_OPENGL_ES3)
94# define GLFW_INCLUDE_ES3
95#else
96# define GLFW_INCLUDE_GLCOREARB
97#endif
98#include <GLFW/glfw3.h>
99#if !defined(__gl_h__)
100# define __gl_h__
101#endif
102#if !defined(__GL_H__)
103# define __GL_H__
104#endif
105
106// OpenGL 3.2 の API のエントリポイント
107#if !defined(GL3_PROTOTYPES) && !defined(GL_GLES_PROTOTYPES)
108extern PFNGLACTIVEPROGRAMEXTPROC glActiveProgramEXT;
109extern PFNGLACTIVESHADERPROGRAMPROC glActiveShaderProgram;
110extern PFNGLACTIVETEXTUREPROC glActiveTexture;
111extern PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC glApplyFramebufferAttachmentCMAAINTEL;
112extern PFNGLATTACHSHADERPROC glAttachShader;
113extern PFNGLBEGINCONDITIONALRENDERNVPROC glBeginConditionalRenderNV;
114extern PFNGLBEGINCONDITIONALRENDERPROC glBeginConditionalRender;
115extern PFNGLBEGINPERFMONITORAMDPROC glBeginPerfMonitorAMD;
116extern PFNGLBEGINPERFQUERYINTELPROC glBeginPerfQueryINTEL;
117extern PFNGLBEGINQUERYINDEXEDPROC glBeginQueryIndexed;
118extern PFNGLBEGINQUERYPROC glBeginQuery;
119extern PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback;
120extern PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation;
121extern PFNGLBINDBUFFERBASEPROC glBindBufferBase;
122extern PFNGLBINDBUFFERPROC glBindBuffer;
123extern PFNGLBINDBUFFERRANGEPROC glBindBufferRange;
124extern PFNGLBINDBUFFERSBASEPROC glBindBuffersBase;
125extern PFNGLBINDBUFFERSRANGEPROC glBindBuffersRange;
126extern PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glBindFragDataLocationIndexed;
127extern PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation;
128extern PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
129extern PFNGLBINDIMAGETEXTUREPROC glBindImageTexture;
130extern PFNGLBINDIMAGETEXTURESPROC glBindImageTextures;
131extern PFNGLBINDMULTITEXTUREEXTPROC glBindMultiTextureEXT;
132extern PFNGLBINDPROGRAMPIPELINEPROC glBindProgramPipeline;
133extern PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
134extern PFNGLBINDSAMPLERPROC glBindSampler;
135extern PFNGLBINDSAMPLERSPROC glBindSamplers;
136extern PFNGLBINDTEXTUREPROC glBindTexture;
137extern PFNGLBINDTEXTURESPROC glBindTextures;
138extern PFNGLBINDTEXTUREUNITPROC glBindTextureUnit;
139extern PFNGLBINDTRANSFORMFEEDBACKPROC glBindTransformFeedback;
140extern PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
141extern PFNGLBINDVERTEXBUFFERPROC glBindVertexBuffer;
142extern PFNGLBINDVERTEXBUFFERSPROC glBindVertexBuffers;
143extern PFNGLBLENDBARRIERKHRPROC glBlendBarrierKHR;
144extern PFNGLBLENDBARRIERNVPROC glBlendBarrierNV;
145extern PFNGLBLENDCOLORPROC glBlendColor;
146extern PFNGLBLENDEQUATIONIARBPROC glBlendEquationiARB;
147extern PFNGLBLENDEQUATIONIPROC glBlendEquationi;
148extern PFNGLBLENDEQUATIONPROC glBlendEquation;
149extern PFNGLBLENDEQUATIONSEPARATEIARBPROC glBlendEquationSeparateiARB;
150extern PFNGLBLENDEQUATIONSEPARATEIPROC glBlendEquationSeparatei;
151extern PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate;
152extern PFNGLBLENDFUNCIARBPROC glBlendFunciARB;
153extern PFNGLBLENDFUNCIPROC glBlendFunci;
154extern PFNGLBLENDFUNCPROC glBlendFunc;
155extern PFNGLBLENDFUNCSEPARATEIARBPROC glBlendFuncSeparateiARB;
156extern PFNGLBLENDFUNCSEPARATEIPROC glBlendFuncSeparatei;
157extern PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate;
158extern PFNGLBLENDPARAMETERINVPROC glBlendParameteriNV;
159extern PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
160extern PFNGLBLITNAMEDFRAMEBUFFERPROC glBlitNamedFramebuffer;
161extern PFNGLBUFFERADDRESSRANGENVPROC glBufferAddressRangeNV;
162extern PFNGLBUFFERDATAPROC glBufferData;
163extern PFNGLBUFFERPAGECOMMITMENTARBPROC glBufferPageCommitmentARB;
164extern PFNGLBUFFERSTORAGEPROC glBufferStorage;
165extern PFNGLBUFFERSUBDATAPROC glBufferSubData;
166extern PFNGLCALLCOMMANDLISTNVPROC glCallCommandListNV;
167extern PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
168extern PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC glCheckNamedFramebufferStatusEXT;
169extern PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glCheckNamedFramebufferStatus;
170extern PFNGLCLAMPCOLORPROC glClampColor;
171extern PFNGLCLEARBUFFERDATAPROC glClearBufferData;
172extern PFNGLCLEARBUFFERFIPROC glClearBufferfi;
173extern PFNGLCLEARBUFFERFVPROC glClearBufferfv;
174extern PFNGLCLEARBUFFERIVPROC glClearBufferiv;
175extern PFNGLCLEARBUFFERSUBDATAPROC glClearBufferSubData;
176extern PFNGLCLEARBUFFERUIVPROC glClearBufferuiv;
177extern PFNGLCLEARCOLORPROC glClearColor;
178extern PFNGLCLEARDEPTHFPROC glClearDepthf;
179extern PFNGLCLEARDEPTHPROC glClearDepth;
180extern PFNGLCLEARNAMEDBUFFERDATAEXTPROC glClearNamedBufferDataEXT;
181extern PFNGLCLEARNAMEDBUFFERDATAPROC glClearNamedBufferData;
182extern PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC glClearNamedBufferSubDataEXT;
183extern PFNGLCLEARNAMEDBUFFERSUBDATAPROC glClearNamedBufferSubData;
184extern PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glClearNamedFramebufferfi;
185extern PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glClearNamedFramebufferfv;
186extern PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glClearNamedFramebufferiv;
187extern PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glClearNamedFramebufferuiv;
188extern PFNGLCLEARPROC glClear;
189extern PFNGLCLEARSTENCILPROC glClearStencil;
190extern PFNGLCLEARTEXIMAGEPROC glClearTexImage;
191extern PFNGLCLEARTEXSUBIMAGEPROC glClearTexSubImage;
192extern PFNGLCLIENTATTRIBDEFAULTEXTPROC glClientAttribDefaultEXT;
193extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
194extern PFNGLCLIPCONTROLPROC glClipControl;
195extern PFNGLCOLORFORMATNVPROC glColorFormatNV;
196extern PFNGLCOLORMASKIPROC glColorMaski;
197extern PFNGLCOLORMASKPROC glColorMask;
198extern PFNGLCOMMANDLISTSEGMENTSNVPROC glCommandListSegmentsNV;
199extern PFNGLCOMPILECOMMANDLISTNVPROC glCompileCommandListNV;
200extern PFNGLCOMPILESHADERINCLUDEARBPROC glCompileShaderIncludeARB;
201extern PFNGLCOMPILESHADERPROC glCompileShader;
202extern PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC glCompressedMultiTexImage1DEXT;
203extern PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC glCompressedMultiTexImage2DEXT;
204extern PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC glCompressedMultiTexImage3DEXT;
205extern PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC glCompressedMultiTexSubImage1DEXT;
206extern PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC glCompressedMultiTexSubImage2DEXT;
207extern PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC glCompressedMultiTexSubImage3DEXT;
208extern PFNGLCOMPRESSEDTEXIMAGE1DPROC glCompressedTexImage1D;
209extern PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D;
210extern PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D;
211extern PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glCompressedTexSubImage1D;
212extern PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D;
213extern PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D;
214extern PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC glCompressedTextureImage1DEXT;
215extern PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC glCompressedTextureImage2DEXT;
216extern PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC glCompressedTextureImage3DEXT;
217extern PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC glCompressedTextureSubImage1DEXT;
218extern PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glCompressedTextureSubImage1D;
219extern PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC glCompressedTextureSubImage2DEXT;
220extern PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glCompressedTextureSubImage2D;
221extern PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC glCompressedTextureSubImage3DEXT;
222extern PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glCompressedTextureSubImage3D;
223extern PFNGLCONSERVATIVERASTERPARAMETERFNVPROC glConservativeRasterParameterfNV;
224extern PFNGLCONSERVATIVERASTERPARAMETERINVPROC glConservativeRasterParameteriNV;
225extern PFNGLCOPYBUFFERSUBDATAPROC glCopyBufferSubData;
226extern PFNGLCOPYIMAGESUBDATAPROC glCopyImageSubData;
227extern PFNGLCOPYMULTITEXIMAGE1DEXTPROC glCopyMultiTexImage1DEXT;
228extern PFNGLCOPYMULTITEXIMAGE2DEXTPROC glCopyMultiTexImage2DEXT;
229extern PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC glCopyMultiTexSubImage1DEXT;
230extern PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC glCopyMultiTexSubImage2DEXT;
231extern PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC glCopyMultiTexSubImage3DEXT;
232extern PFNGLCOPYNAMEDBUFFERSUBDATAPROC glCopyNamedBufferSubData;
233extern PFNGLCOPYPATHNVPROC glCopyPathNV;
234extern PFNGLCOPYTEXIMAGE1DPROC glCopyTexImage1D;
235extern PFNGLCOPYTEXIMAGE2DPROC glCopyTexImage2D;
236extern PFNGLCOPYTEXSUBIMAGE1DPROC glCopyTexSubImage1D;
237extern PFNGLCOPYTEXSUBIMAGE2DPROC glCopyTexSubImage2D;
238extern PFNGLCOPYTEXSUBIMAGE3DPROC glCopyTexSubImage3D;
239extern PFNGLCOPYTEXTUREIMAGE1DEXTPROC glCopyTextureImage1DEXT;
240extern PFNGLCOPYTEXTUREIMAGE2DEXTPROC glCopyTextureImage2DEXT;
241extern PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC glCopyTextureSubImage1DEXT;
242extern PFNGLCOPYTEXTURESUBIMAGE1DPROC glCopyTextureSubImage1D;
243extern PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC glCopyTextureSubImage2DEXT;
244extern PFNGLCOPYTEXTURESUBIMAGE2DPROC glCopyTextureSubImage2D;
245extern PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC glCopyTextureSubImage3DEXT;
246extern PFNGLCOPYTEXTURESUBIMAGE3DPROC glCopyTextureSubImage3D;
247extern PFNGLCOVERAGEMODULATIONNVPROC glCoverageModulationNV;
248extern PFNGLCOVERAGEMODULATIONTABLENVPROC glCoverageModulationTableNV;
249extern PFNGLCOVERFILLPATHINSTANCEDNVPROC glCoverFillPathInstancedNV;
250extern PFNGLCOVERFILLPATHNVPROC glCoverFillPathNV;
251extern PFNGLCOVERSTROKEPATHINSTANCEDNVPROC glCoverStrokePathInstancedNV;
252extern PFNGLCOVERSTROKEPATHNVPROC glCoverStrokePathNV;
253extern PFNGLCREATEBUFFERSPROC glCreateBuffers;
254extern PFNGLCREATECOMMANDLISTSNVPROC glCreateCommandListsNV;
255extern PFNGLCREATEFRAMEBUFFERSPROC glCreateFramebuffers;
256extern PFNGLCREATEPERFQUERYINTELPROC glCreatePerfQueryINTEL;
257extern PFNGLCREATEPROGRAMPIPELINESPROC glCreateProgramPipelines;
258extern PFNGLCREATEPROGRAMPROC glCreateProgram;
259extern PFNGLCREATEQUERIESPROC glCreateQueries;
260extern PFNGLCREATERENDERBUFFERSPROC glCreateRenderbuffers;
261extern PFNGLCREATESAMPLERSPROC glCreateSamplers;
262extern PFNGLCREATESHADERPROC glCreateShader;
263extern PFNGLCREATESHADERPROGRAMEXTPROC glCreateShaderProgramEXT;
264extern PFNGLCREATESHADERPROGRAMVPROC glCreateShaderProgramv;
265extern PFNGLCREATESTATESNVPROC glCreateStatesNV;
266extern PFNGLCREATESYNCFROMCLEVENTARBPROC glCreateSyncFromCLeventARB;
267extern PFNGLCREATETEXTURESPROC glCreateTextures;
268extern PFNGLCREATETRANSFORMFEEDBACKSPROC glCreateTransformFeedbacks;
269extern PFNGLCREATEVERTEXARRAYSPROC glCreateVertexArrays;
270extern PFNGLCULLFACEPROC glCullFace;
271extern PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARB;
272extern PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback;
273extern PFNGLDEBUGMESSAGECONTROLARBPROC glDebugMessageControlARB;
274extern PFNGLDEBUGMESSAGECONTROLPROC glDebugMessageControl;
275extern PFNGLDEBUGMESSAGEINSERTARBPROC glDebugMessageInsertARB;
276extern PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert;
277extern PFNGLDELETEBUFFERSPROC glDeleteBuffers;
278extern PFNGLDELETECOMMANDLISTSNVPROC glDeleteCommandListsNV;
279extern PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
280extern PFNGLDELETENAMEDSTRINGARBPROC glDeleteNamedStringARB;
281extern PFNGLDELETEPATHSNVPROC glDeletePathsNV;
282extern PFNGLDELETEPERFMONITORSAMDPROC glDeletePerfMonitorsAMD;
283extern PFNGLDELETEPERFQUERYINTELPROC glDeletePerfQueryINTEL;
284extern PFNGLDELETEPROGRAMPIPELINESPROC glDeleteProgramPipelines;
285extern PFNGLDELETEPROGRAMPROC glDeleteProgram;
286extern PFNGLDELETEQUERIESPROC glDeleteQueries;
287extern PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
288extern PFNGLDELETESAMPLERSPROC glDeleteSamplers;
289extern PFNGLDELETESHADERPROC glDeleteShader;
290extern PFNGLDELETESTATESNVPROC glDeleteStatesNV;
291extern PFNGLDELETESYNCPROC glDeleteSync;
292extern PFNGLDELETETEXTURESPROC glDeleteTextures;
293extern PFNGLDELETETRANSFORMFEEDBACKSPROC glDeleteTransformFeedbacks;
294extern PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
295extern PFNGLDEPTHFUNCPROC glDepthFunc;
296extern PFNGLDEPTHMASKPROC glDepthMask;
297extern PFNGLDEPTHRANGEARRAYVPROC glDepthRangeArrayv;
298extern PFNGLDEPTHRANGEFPROC glDepthRangef;
299extern PFNGLDEPTHRANGEINDEXEDPROC glDepthRangeIndexed;
300extern PFNGLDEPTHRANGEPROC glDepthRange;
301extern PFNGLDETACHSHADERPROC glDetachShader;
302extern PFNGLDISABLECLIENTSTATEIEXTPROC glDisableClientStateiEXT;
303extern PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC glDisableClientStateIndexedEXT;
304extern PFNGLDISABLEINDEXEDEXTPROC glDisableIndexedEXT;
305extern PFNGLDISABLEIPROC glDisablei;
306extern PFNGLDISABLEPROC glDisable;
307extern PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC glDisableVertexArrayAttribEXT;
308extern PFNGLDISABLEVERTEXARRAYATTRIBPROC glDisableVertexArrayAttrib;
309extern PFNGLDISABLEVERTEXARRAYEXTPROC glDisableVertexArrayEXT;
310extern PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
311extern PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC glDispatchComputeGroupSizeARB;
312extern PFNGLDISPATCHCOMPUTEINDIRECTPROC glDispatchComputeIndirect;
313extern PFNGLDISPATCHCOMPUTEPROC glDispatchCompute;
314extern PFNGLDRAWARRAYSINDIRECTPROC glDrawArraysIndirect;
315extern PFNGLDRAWARRAYSINSTANCEDARBPROC glDrawArraysInstancedARB;
316extern PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstance;
317extern PFNGLDRAWARRAYSINSTANCEDEXTPROC glDrawArraysInstancedEXT;
318extern PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
319extern PFNGLDRAWARRAYSPROC glDrawArrays;
320extern PFNGLDRAWBUFFERPROC glDrawBuffer;
321extern PFNGLDRAWBUFFERSPROC glDrawBuffers;
322extern PFNGLDRAWCOMMANDSADDRESSNVPROC glDrawCommandsAddressNV;
323extern PFNGLDRAWCOMMANDSNVPROC glDrawCommandsNV;
324extern PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC glDrawCommandsStatesAddressNV;
325extern PFNGLDRAWCOMMANDSSTATESNVPROC glDrawCommandsStatesNV;
326extern PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex;
327extern PFNGLDRAWELEMENTSINDIRECTPROC glDrawElementsIndirect;
328extern PFNGLDRAWELEMENTSINSTANCEDARBPROC glDrawElementsInstancedARB;
329extern PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glDrawElementsInstancedBaseInstance;
330extern PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glDrawElementsInstancedBaseVertexBaseInstance;
331extern PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex;
332extern PFNGLDRAWELEMENTSINSTANCEDEXTPROC glDrawElementsInstancedEXT;
333extern PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
334extern PFNGLDRAWELEMENTSPROC glDrawElements;
335extern PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glDrawRangeElementsBaseVertex;
336extern PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
337extern PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glDrawTransformFeedbackInstanced;
338extern PFNGLDRAWTRANSFORMFEEDBACKPROC glDrawTransformFeedback;
339extern PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glDrawTransformFeedbackStreamInstanced;
340extern PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glDrawTransformFeedbackStream;
341extern PFNGLDRAWVKIMAGENVPROC glDrawVkImageNV;
342extern PFNGLEDGEFLAGFORMATNVPROC glEdgeFlagFormatNV;
343extern PFNGLENABLECLIENTSTATEIEXTPROC glEnableClientStateiEXT;
344extern PFNGLENABLECLIENTSTATEINDEXEDEXTPROC glEnableClientStateIndexedEXT;
345extern PFNGLENABLEINDEXEDEXTPROC glEnableIndexedEXT;
346extern PFNGLENABLEIPROC glEnablei;
347extern PFNGLENABLEPROC glEnable;
348extern PFNGLENABLEVERTEXARRAYATTRIBEXTPROC glEnableVertexArrayAttribEXT;
349extern PFNGLENABLEVERTEXARRAYATTRIBPROC glEnableVertexArrayAttrib;
350extern PFNGLENABLEVERTEXARRAYEXTPROC glEnableVertexArrayEXT;
351extern PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
352extern PFNGLENDCONDITIONALRENDERNVPROC glEndConditionalRenderNV;
353extern PFNGLENDCONDITIONALRENDERPROC glEndConditionalRender;
354extern PFNGLENDPERFMONITORAMDPROC glEndPerfMonitorAMD;
355extern PFNGLENDPERFQUERYINTELPROC glEndPerfQueryINTEL;
356extern PFNGLENDQUERYINDEXEDPROC glEndQueryIndexed;
357extern PFNGLENDQUERYPROC glEndQuery;
358extern PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback;
359extern PFNGLEVALUATEDEPTHVALUESARBPROC glEvaluateDepthValuesARB;
360extern PFNGLFENCESYNCPROC glFenceSync;
361extern PFNGLFINISHPROC glFinish;
362extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
363extern PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC glFlushMappedNamedBufferRangeEXT;
364extern PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glFlushMappedNamedBufferRange;
365extern PFNGLFLUSHPROC glFlush;
366extern PFNGLFOGCOORDFORMATNVPROC glFogCoordFormatNV;
367extern PFNGLFRAGMENTCOVERAGECOLORNVPROC glFragmentCoverageColorNV;
368extern PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC glFramebufferDrawBufferEXT;
369extern PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC glFramebufferDrawBuffersEXT;
370extern PFNGLFRAMEBUFFERPARAMETERIPROC glFramebufferParameteri;
371extern PFNGLFRAMEBUFFERREADBUFFEREXTPROC glFramebufferReadBufferEXT;
372extern PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer;
373extern PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glFramebufferSampleLocationsfvARB;
374extern PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glFramebufferSampleLocationsfvNV;
375extern PFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D;
376extern PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
377extern PFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D;
378extern PFNGLFRAMEBUFFERTEXTUREARBPROC glFramebufferTextureARB;
379extern PFNGLFRAMEBUFFERTEXTUREFACEARBPROC glFramebufferTextureFaceARB;
380extern PFNGLFRAMEBUFFERTEXTURELAYERARBPROC glFramebufferTextureLayerARB;
381extern PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer;
382extern PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC glFramebufferTextureMultiviewOVR;
383extern PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture;
384extern PFNGLFRONTFACEPROC glFrontFace;
385extern PFNGLGENBUFFERSPROC glGenBuffers;
386extern PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
387extern PFNGLGENERATEMULTITEXMIPMAPEXTPROC glGenerateMultiTexMipmapEXT;
388extern PFNGLGENERATETEXTUREMIPMAPEXTPROC glGenerateTextureMipmapEXT;
389extern PFNGLGENERATETEXTUREMIPMAPPROC glGenerateTextureMipmap;
390extern PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
391extern PFNGLGENPATHSNVPROC glGenPathsNV;
392extern PFNGLGENPERFMONITORSAMDPROC glGenPerfMonitorsAMD;
393extern PFNGLGENPROGRAMPIPELINESPROC glGenProgramPipelines;
394extern PFNGLGENQUERIESPROC glGenQueries;
395extern PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
396extern PFNGLGENSAMPLERSPROC glGenSamplers;
397extern PFNGLGENTEXTURESPROC glGenTextures;
398extern PFNGLGENTRANSFORMFEEDBACKSPROC glGenTransformFeedbacks;
399extern PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
400extern PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glGetActiveAtomicCounterBufferiv;
401extern PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib;
402extern PFNGLGETACTIVESUBROUTINENAMEPROC glGetActiveSubroutineName;
403extern PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glGetActiveSubroutineUniformiv;
404extern PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glGetActiveSubroutineUniformName;
405extern PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv;
406extern PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glGetActiveUniformBlockName;
407extern PFNGLGETACTIVEUNIFORMNAMEPROC glGetActiveUniformName;
408extern PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform;
409extern PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv;
410extern PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders;
411extern PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation;
412extern PFNGLGETBOOLEANINDEXEDVEXTPROC glGetBooleanIndexedvEXT;
413extern PFNGLGETBOOLEANI_VPROC glGetBooleani_v;
414extern PFNGLGETBOOLEANVPROC glGetBooleanv;
415extern PFNGLGETBUFFERPARAMETERI64VPROC glGetBufferParameteri64v;
416extern PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv;
417extern PFNGLGETBUFFERPARAMETERUI64VNVPROC glGetBufferParameterui64vNV;
418extern PFNGLGETBUFFERPOINTERVPROC glGetBufferPointerv;
419extern PFNGLGETBUFFERSUBDATAPROC glGetBufferSubData;
420extern PFNGLGETCOMMANDHEADERNVPROC glGetCommandHeaderNV;
421extern PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC glGetCompressedMultiTexImageEXT;
422extern PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage;
423extern PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC glGetCompressedTextureImageEXT;
424extern PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glGetCompressedTextureImage;
425extern PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glGetCompressedTextureSubImage;
426extern PFNGLGETCOVERAGEMODULATIONTABLENVPROC glGetCoverageModulationTableNV;
427extern PFNGLGETDEBUGMESSAGELOGARBPROC glGetDebugMessageLogARB;
428extern PFNGLGETDEBUGMESSAGELOGPROC glGetDebugMessageLog;
429extern PFNGLGETDOUBLEINDEXEDVEXTPROC glGetDoubleIndexedvEXT;
430extern PFNGLGETDOUBLEI_VEXTPROC glGetDoublei_vEXT;
431extern PFNGLGETDOUBLEI_VPROC glGetDoublei_v;
432extern PFNGLGETDOUBLEVPROC glGetDoublev;
433extern PFNGLGETERRORPROC glGetError;
434extern PFNGLGETFIRSTPERFQUERYIDINTELPROC glGetFirstPerfQueryIdINTEL;
435extern PFNGLGETFLOATINDEXEDVEXTPROC glGetFloatIndexedvEXT;
436extern PFNGLGETFLOATI_VEXTPROC glGetFloati_vEXT;
437extern PFNGLGETFLOATI_VPROC glGetFloati_v;
438extern PFNGLGETFLOATVPROC glGetFloatv;
439extern PFNGLGETFRAGDATAINDEXPROC glGetFragDataIndex;
440extern PFNGLGETFRAGDATALOCATIONPROC glGetFragDataLocation;
441extern PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv;
442extern PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC glGetFramebufferParameterivEXT;
443extern PFNGLGETFRAMEBUFFERPARAMETERIVPROC glGetFramebufferParameteriv;
444extern PFNGLGETGRAPHICSRESETSTATUSARBPROC glGetGraphicsResetStatusARB;
445extern PFNGLGETGRAPHICSRESETSTATUSPROC glGetGraphicsResetStatus;
446extern PFNGLGETIMAGEHANDLEARBPROC glGetImageHandleARB;
447extern PFNGLGETIMAGEHANDLENVPROC glGetImageHandleNV;
448extern PFNGLGETINTEGER64I_VPROC glGetInteger64i_v;
449extern PFNGLGETINTEGER64VPROC glGetInteger64v;
450extern PFNGLGETINTEGERINDEXEDVEXTPROC glGetIntegerIndexedvEXT;
451extern PFNGLGETINTEGERI_VPROC glGetIntegeri_v;
452extern PFNGLGETINTEGERUI64I_VNVPROC glGetIntegerui64i_vNV;
453extern PFNGLGETINTEGERUI64VNVPROC glGetIntegerui64vNV;
454extern PFNGLGETINTEGERVPROC glGetIntegerv;
455extern PFNGLGETINTERNALFORMATI64VPROC glGetInternalformati64v;
456extern PFNGLGETINTERNALFORMATIVPROC glGetInternalformativ;
457extern PFNGLGETINTERNALFORMATSAMPLEIVNVPROC glGetInternalformatSampleivNV;
458extern PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv;
459extern PFNGLGETMULTITEXENVFVEXTPROC glGetMultiTexEnvfvEXT;
460extern PFNGLGETMULTITEXENVIVEXTPROC glGetMultiTexEnvivEXT;
461extern PFNGLGETMULTITEXGENDVEXTPROC glGetMultiTexGendvEXT;
462extern PFNGLGETMULTITEXGENFVEXTPROC glGetMultiTexGenfvEXT;
463extern PFNGLGETMULTITEXGENIVEXTPROC glGetMultiTexGenivEXT;
464extern PFNGLGETMULTITEXIMAGEEXTPROC glGetMultiTexImageEXT;
465extern PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC glGetMultiTexLevelParameterfvEXT;
466extern PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC glGetMultiTexLevelParameterivEXT;
467extern PFNGLGETMULTITEXPARAMETERFVEXTPROC glGetMultiTexParameterfvEXT;
468extern PFNGLGETMULTITEXPARAMETERIIVEXTPROC glGetMultiTexParameterIivEXT;
469extern PFNGLGETMULTITEXPARAMETERIUIVEXTPROC glGetMultiTexParameterIuivEXT;
470extern PFNGLGETMULTITEXPARAMETERIVEXTPROC glGetMultiTexParameterivEXT;
471extern PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glGetNamedBufferParameteri64v;
472extern PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC glGetNamedBufferParameterivEXT;
473extern PFNGLGETNAMEDBUFFERPARAMETERIVPROC glGetNamedBufferParameteriv;
474extern PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC glGetNamedBufferParameterui64vNV;
475extern PFNGLGETNAMEDBUFFERPOINTERVEXTPROC glGetNamedBufferPointervEXT;
476extern PFNGLGETNAMEDBUFFERPOINTERVPROC glGetNamedBufferPointerv;
477extern PFNGLGETNAMEDBUFFERSUBDATAEXTPROC glGetNamedBufferSubDataEXT;
478extern PFNGLGETNAMEDBUFFERSUBDATAPROC glGetNamedBufferSubData;
479extern PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetNamedFramebufferAttachmentParameterivEXT;
480extern PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetNamedFramebufferAttachmentParameteriv;
481extern PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC glGetNamedFramebufferParameterivEXT;
482extern PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glGetNamedFramebufferParameteriv;
483extern PFNGLGETNAMEDPROGRAMIVEXTPROC glGetNamedProgramivEXT;
484extern PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC glGetNamedProgramLocalParameterdvEXT;
485extern PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC glGetNamedProgramLocalParameterfvEXT;
486extern PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC glGetNamedProgramLocalParameterIivEXT;
487extern PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC glGetNamedProgramLocalParameterIuivEXT;
488extern PFNGLGETNAMEDPROGRAMSTRINGEXTPROC glGetNamedProgramStringEXT;
489extern PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC glGetNamedRenderbufferParameterivEXT;
490extern PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glGetNamedRenderbufferParameteriv;
491extern PFNGLGETNAMEDSTRINGARBPROC glGetNamedStringARB;
492extern PFNGLGETNAMEDSTRINGIVARBPROC glGetNamedStringivARB;
493extern PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC glGetnCompressedTexImageARB;
494extern PFNGLGETNCOMPRESSEDTEXIMAGEPROC glGetnCompressedTexImage;
495extern PFNGLGETNEXTPERFQUERYIDINTELPROC glGetNextPerfQueryIdINTEL;
496extern PFNGLGETNTEXIMAGEARBPROC glGetnTexImageARB;
497extern PFNGLGETNTEXIMAGEPROC glGetnTexImage;
498extern PFNGLGETNUNIFORMDVARBPROC glGetnUniformdvARB;
499extern PFNGLGETNUNIFORMDVPROC glGetnUniformdv;
500extern PFNGLGETNUNIFORMFVARBPROC glGetnUniformfvARB;
501extern PFNGLGETNUNIFORMFVPROC glGetnUniformfv;
502extern PFNGLGETNUNIFORMI64VARBPROC glGetnUniformi64vARB;
503extern PFNGLGETNUNIFORMIVARBPROC glGetnUniformivARB;
504extern PFNGLGETNUNIFORMIVPROC glGetnUniformiv;
505extern PFNGLGETNUNIFORMUI64VARBPROC glGetnUniformui64vARB;
506extern PFNGLGETNUNIFORMUIVARBPROC glGetnUniformuivARB;
507extern PFNGLGETNUNIFORMUIVPROC glGetnUniformuiv;
508extern PFNGLGETOBJECTLABELEXTPROC glGetObjectLabelEXT;
509extern PFNGLGETOBJECTLABELPROC glGetObjectLabel;
510extern PFNGLGETOBJECTPTRLABELPROC glGetObjectPtrLabel;
511extern PFNGLGETPATHCOMMANDSNVPROC glGetPathCommandsNV;
512extern PFNGLGETPATHCOORDSNVPROC glGetPathCoordsNV;
513extern PFNGLGETPATHDASHARRAYNVPROC glGetPathDashArrayNV;
514extern PFNGLGETPATHLENGTHNVPROC glGetPathLengthNV;
515extern PFNGLGETPATHMETRICRANGENVPROC glGetPathMetricRangeNV;
516extern PFNGLGETPATHMETRICSNVPROC glGetPathMetricsNV;
517extern PFNGLGETPATHPARAMETERFVNVPROC glGetPathParameterfvNV;
518extern PFNGLGETPATHPARAMETERIVNVPROC glGetPathParameterivNV;
519extern PFNGLGETPATHSPACINGNVPROC glGetPathSpacingNV;
520extern PFNGLGETPERFCOUNTERINFOINTELPROC glGetPerfCounterInfoINTEL;
521extern PFNGLGETPERFMONITORCOUNTERDATAAMDPROC glGetPerfMonitorCounterDataAMD;
522extern PFNGLGETPERFMONITORCOUNTERINFOAMDPROC glGetPerfMonitorCounterInfoAMD;
523extern PFNGLGETPERFMONITORCOUNTERSAMDPROC glGetPerfMonitorCountersAMD;
524extern PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC glGetPerfMonitorCounterStringAMD;
525extern PFNGLGETPERFMONITORGROUPSAMDPROC glGetPerfMonitorGroupsAMD;
526extern PFNGLGETPERFMONITORGROUPSTRINGAMDPROC glGetPerfMonitorGroupStringAMD;
527extern PFNGLGETPERFQUERYDATAINTELPROC glGetPerfQueryDataINTEL;
528extern PFNGLGETPERFQUERYIDBYNAMEINTELPROC glGetPerfQueryIdByNameINTEL;
529extern PFNGLGETPERFQUERYINFOINTELPROC glGetPerfQueryInfoINTEL;
530extern PFNGLGETPOINTERINDEXEDVEXTPROC glGetPointerIndexedvEXT;
531extern PFNGLGETPOINTERI_VEXTPROC glGetPointeri_vEXT;
532extern PFNGLGETPOINTERVPROC glGetPointerv;
533extern PFNGLGETPROGRAMBINARYPROC glGetProgramBinary;
534extern PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
535extern PFNGLGETPROGRAMINTERFACEIVPROC glGetProgramInterfaceiv;
536extern PFNGLGETPROGRAMIVPROC glGetProgramiv;
537extern PFNGLGETPROGRAMPIPELINEINFOLOGPROC glGetProgramPipelineInfoLog;
538extern PFNGLGETPROGRAMPIPELINEIVPROC glGetProgramPipelineiv;
539extern PFNGLGETPROGRAMRESOURCEFVNVPROC glGetProgramResourcefvNV;
540extern PFNGLGETPROGRAMRESOURCEINDEXPROC glGetProgramResourceIndex;
541extern PFNGLGETPROGRAMRESOURCEIVPROC glGetProgramResourceiv;
542extern PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glGetProgramResourceLocationIndex;
543extern PFNGLGETPROGRAMRESOURCELOCATIONPROC glGetProgramResourceLocation;
544extern PFNGLGETPROGRAMRESOURCENAMEPROC glGetProgramResourceName;
545extern PFNGLGETPROGRAMSTAGEIVPROC glGetProgramStageiv;
546extern PFNGLGETQUERYBUFFEROBJECTI64VPROC glGetQueryBufferObjecti64v;
547extern PFNGLGETQUERYBUFFEROBJECTIVPROC glGetQueryBufferObjectiv;
548extern PFNGLGETQUERYBUFFEROBJECTUI64VPROC glGetQueryBufferObjectui64v;
549extern PFNGLGETQUERYBUFFEROBJECTUIVPROC glGetQueryBufferObjectuiv;
550extern PFNGLGETQUERYINDEXEDIVPROC glGetQueryIndexediv;
551extern PFNGLGETQUERYIVPROC glGetQueryiv;
552extern PFNGLGETQUERYOBJECTI64VPROC glGetQueryObjecti64v;
553extern PFNGLGETQUERYOBJECTIVPROC glGetQueryObjectiv;
554extern PFNGLGETQUERYOBJECTUI64VPROC glGetQueryObjectui64v;
555extern PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv;
556extern PFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv;
557extern PFNGLGETSAMPLERPARAMETERFVPROC glGetSamplerParameterfv;
558extern PFNGLGETSAMPLERPARAMETERIIVPROC glGetSamplerParameterIiv;
559extern PFNGLGETSAMPLERPARAMETERIUIVPROC glGetSamplerParameterIuiv;
560extern PFNGLGETSAMPLERPARAMETERIVPROC glGetSamplerParameteriv;
561extern PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
562extern PFNGLGETSHADERIVPROC glGetShaderiv;
563extern PFNGLGETSHADERPRECISIONFORMATPROC glGetShaderPrecisionFormat;
564extern PFNGLGETSHADERSOURCEPROC glGetShaderSource;
565extern PFNGLGETSTAGEINDEXNVPROC glGetStageIndexNV;
566extern PFNGLGETSTRINGIPROC glGetStringi;
567extern PFNGLGETSTRINGPROC glGetString;
568extern PFNGLGETSUBROUTINEINDEXPROC glGetSubroutineIndex;
569extern PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glGetSubroutineUniformLocation;
570extern PFNGLGETSYNCIVPROC glGetSynciv;
571extern PFNGLGETTEXIMAGEPROC glGetTexImage;
572extern PFNGLGETTEXLEVELPARAMETERFVPROC glGetTexLevelParameterfv;
573extern PFNGLGETTEXLEVELPARAMETERIVPROC glGetTexLevelParameteriv;
574extern PFNGLGETTEXPARAMETERFVPROC glGetTexParameterfv;
575extern PFNGLGETTEXPARAMETERIIVPROC glGetTexParameterIiv;
576extern PFNGLGETTEXPARAMETERIUIVPROC glGetTexParameterIuiv;
577extern PFNGLGETTEXPARAMETERIVPROC glGetTexParameteriv;
578extern PFNGLGETTEXTUREHANDLEARBPROC glGetTextureHandleARB;
579extern PFNGLGETTEXTUREHANDLENVPROC glGetTextureHandleNV;
580extern PFNGLGETTEXTUREIMAGEEXTPROC glGetTextureImageEXT;
581extern PFNGLGETTEXTUREIMAGEPROC glGetTextureImage;
582extern PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC glGetTextureLevelParameterfvEXT;
583extern PFNGLGETTEXTURELEVELPARAMETERFVPROC glGetTextureLevelParameterfv;
584extern PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC glGetTextureLevelParameterivEXT;
585extern PFNGLGETTEXTURELEVELPARAMETERIVPROC glGetTextureLevelParameteriv;
586extern PFNGLGETTEXTUREPARAMETERFVEXTPROC glGetTextureParameterfvEXT;
587extern PFNGLGETTEXTUREPARAMETERFVPROC glGetTextureParameterfv;
588extern PFNGLGETTEXTUREPARAMETERIIVEXTPROC glGetTextureParameterIivEXT;
589extern PFNGLGETTEXTUREPARAMETERIIVPROC glGetTextureParameterIiv;
590extern PFNGLGETTEXTUREPARAMETERIUIVEXTPROC glGetTextureParameterIuivEXT;
591extern PFNGLGETTEXTUREPARAMETERIUIVPROC glGetTextureParameterIuiv;
592extern PFNGLGETTEXTUREPARAMETERIVEXTPROC glGetTextureParameterivEXT;
593extern PFNGLGETTEXTUREPARAMETERIVPROC glGetTextureParameteriv;
594extern PFNGLGETTEXTURESAMPLERHANDLEARBPROC glGetTextureSamplerHandleARB;
595extern PFNGLGETTEXTURESAMPLERHANDLENVPROC glGetTextureSamplerHandleNV;
596extern PFNGLGETTEXTURESUBIMAGEPROC glGetTextureSubImage;
597extern PFNGLGETTRANSFORMFEEDBACKI64_VPROC glGetTransformFeedbacki64_v;
598extern PFNGLGETTRANSFORMFEEDBACKIVPROC glGetTransformFeedbackiv;
599extern PFNGLGETTRANSFORMFEEDBACKI_VPROC glGetTransformFeedbacki_v;
600extern PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying;
601extern PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex;
602extern PFNGLGETUNIFORMDVPROC glGetUniformdv;
603extern PFNGLGETUNIFORMFVPROC glGetUniformfv;
604extern PFNGLGETUNIFORMI64VARBPROC glGetUniformi64vARB;
605extern PFNGLGETUNIFORMI64VNVPROC glGetUniformi64vNV;
606extern PFNGLGETUNIFORMINDICESPROC glGetUniformIndices;
607extern PFNGLGETUNIFORMIVPROC glGetUniformiv;
608extern PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
609extern PFNGLGETUNIFORMSUBROUTINEUIVPROC glGetUniformSubroutineuiv;
610extern PFNGLGETUNIFORMUI64VARBPROC glGetUniformui64vARB;
611extern PFNGLGETUNIFORMUI64VNVPROC glGetUniformui64vNV;
612extern PFNGLGETUNIFORMUIVPROC glGetUniformuiv;
613extern PFNGLGETVERTEXARRAYINDEXED64IVPROC glGetVertexArrayIndexed64iv;
614extern PFNGLGETVERTEXARRAYINDEXEDIVPROC glGetVertexArrayIndexediv;
615extern PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC glGetVertexArrayIntegeri_vEXT;
616extern PFNGLGETVERTEXARRAYINTEGERVEXTPROC glGetVertexArrayIntegervEXT;
617extern PFNGLGETVERTEXARRAYIVPROC glGetVertexArrayiv;
618extern PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC glGetVertexArrayPointeri_vEXT;
619extern PFNGLGETVERTEXARRAYPOINTERVEXTPROC glGetVertexArrayPointervEXT;
620extern PFNGLGETVERTEXATTRIBDVPROC glGetVertexAttribdv;
621extern PFNGLGETVERTEXATTRIBFVPROC glGetVertexAttribfv;
622extern PFNGLGETVERTEXATTRIBIIVPROC glGetVertexAttribIiv;
623extern PFNGLGETVERTEXATTRIBIUIVPROC glGetVertexAttribIuiv;
624extern PFNGLGETVERTEXATTRIBIVPROC glGetVertexAttribiv;
625extern PFNGLGETVERTEXATTRIBLDVPROC glGetVertexAttribLdv;
626extern PFNGLGETVERTEXATTRIBLI64VNVPROC glGetVertexAttribLi64vNV;
627extern PFNGLGETVERTEXATTRIBLUI64VARBPROC glGetVertexAttribLui64vARB;
628extern PFNGLGETVERTEXATTRIBLUI64VNVPROC glGetVertexAttribLui64vNV;
629extern PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv;
630extern PFNGLGETVKPROCADDRNVPROC glGetVkProcAddrNV;
631extern PFNGLHINTPROC glHint;
632extern PFNGLINDEXFORMATNVPROC glIndexFormatNV;
633extern PFNGLINSERTEVENTMARKEREXTPROC glInsertEventMarkerEXT;
634extern PFNGLINTERPOLATEPATHSNVPROC glInterpolatePathsNV;
635extern PFNGLINVALIDATEBUFFERDATAPROC glInvalidateBufferData;
636extern PFNGLINVALIDATEBUFFERSUBDATAPROC glInvalidateBufferSubData;
637extern PFNGLINVALIDATEFRAMEBUFFERPROC glInvalidateFramebuffer;
638extern PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glInvalidateNamedFramebufferData;
639extern PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glInvalidateNamedFramebufferSubData;
640extern PFNGLINVALIDATESUBFRAMEBUFFERPROC glInvalidateSubFramebuffer;
641extern PFNGLINVALIDATETEXIMAGEPROC glInvalidateTexImage;
642extern PFNGLINVALIDATETEXSUBIMAGEPROC glInvalidateTexSubImage;
643extern PFNGLISBUFFERPROC glIsBuffer;
644extern PFNGLISBUFFERRESIDENTNVPROC glIsBufferResidentNV;
645extern PFNGLISCOMMANDLISTNVPROC glIsCommandListNV;
646extern PFNGLISENABLEDINDEXEDEXTPROC glIsEnabledIndexedEXT;
647extern PFNGLISENABLEDIPROC glIsEnabledi;
648extern PFNGLISENABLEDPROC glIsEnabled;
649extern PFNGLISFRAMEBUFFERPROC glIsFramebuffer;
650extern PFNGLISIMAGEHANDLERESIDENTARBPROC glIsImageHandleResidentARB;
651extern PFNGLISIMAGEHANDLERESIDENTNVPROC glIsImageHandleResidentNV;
652extern PFNGLISNAMEDBUFFERRESIDENTNVPROC glIsNamedBufferResidentNV;
653extern PFNGLISNAMEDSTRINGARBPROC glIsNamedStringARB;
654extern PFNGLISPATHNVPROC glIsPathNV;
655extern PFNGLISPOINTINFILLPATHNVPROC glIsPointInFillPathNV;
656extern PFNGLISPOINTINSTROKEPATHNVPROC glIsPointInStrokePathNV;
657extern PFNGLISPROGRAMPIPELINEPROC glIsProgramPipeline;
658extern PFNGLISPROGRAMPROC glIsProgram;
659extern PFNGLISQUERYPROC glIsQuery;
660extern PFNGLISRENDERBUFFERPROC glIsRenderbuffer;
661extern PFNGLISSAMPLERPROC glIsSampler;
662extern PFNGLISSHADERPROC glIsShader;
663extern PFNGLISSTATENVPROC glIsStateNV;
664extern PFNGLISSYNCPROC glIsSync;
665extern PFNGLISTEXTUREHANDLERESIDENTARBPROC glIsTextureHandleResidentARB;
666extern PFNGLISTEXTUREHANDLERESIDENTNVPROC glIsTextureHandleResidentNV;
667extern PFNGLISTEXTUREPROC glIsTexture;
668extern PFNGLISTRANSFORMFEEDBACKPROC glIsTransformFeedback;
669extern PFNGLISVERTEXARRAYPROC glIsVertexArray;
670extern PFNGLLABELOBJECTEXTPROC glLabelObjectEXT;
671extern PFNGLLINEWIDTHPROC glLineWidth;
672extern PFNGLLINKPROGRAMPROC glLinkProgram;
673extern PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC glListDrawCommandsStatesClientNV;
674extern PFNGLLOGICOPPROC glLogicOp;
675extern PFNGLMAKEBUFFERNONRESIDENTNVPROC glMakeBufferNonResidentNV;
676extern PFNGLMAKEBUFFERRESIDENTNVPROC glMakeBufferResidentNV;
677extern PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC glMakeImageHandleNonResidentARB;
678extern PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC glMakeImageHandleNonResidentNV;
679extern PFNGLMAKEIMAGEHANDLERESIDENTARBPROC glMakeImageHandleResidentARB;
680extern PFNGLMAKEIMAGEHANDLERESIDENTNVPROC glMakeImageHandleResidentNV;
681extern PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC glMakeNamedBufferNonResidentNV;
682extern PFNGLMAKENAMEDBUFFERRESIDENTNVPROC glMakeNamedBufferResidentNV;
683extern PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC glMakeTextureHandleNonResidentARB;
684extern PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC glMakeTextureHandleNonResidentNV;
685extern PFNGLMAKETEXTUREHANDLERESIDENTARBPROC glMakeTextureHandleResidentARB;
686extern PFNGLMAKETEXTUREHANDLERESIDENTNVPROC glMakeTextureHandleResidentNV;
687extern PFNGLMAPBUFFERPROC glMapBuffer;
688extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
689extern PFNGLMAPNAMEDBUFFEREXTPROC glMapNamedBufferEXT;
690extern PFNGLMAPNAMEDBUFFERPROC glMapNamedBuffer;
691extern PFNGLMAPNAMEDBUFFERRANGEEXTPROC glMapNamedBufferRangeEXT;
692extern PFNGLMAPNAMEDBUFFERRANGEPROC glMapNamedBufferRange;
693extern PFNGLMATRIXFRUSTUMEXTPROC glMatrixFrustumEXT;
694extern PFNGLMATRIXLOAD3X2FNVPROC glMatrixLoad3x2fNV;
695extern PFNGLMATRIXLOAD3X3FNVPROC glMatrixLoad3x3fNV;
696extern PFNGLMATRIXLOADDEXTPROC glMatrixLoaddEXT;
697extern PFNGLMATRIXLOADFEXTPROC glMatrixLoadfEXT;
698extern PFNGLMATRIXLOADIDENTITYEXTPROC glMatrixLoadIdentityEXT;
699extern PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC glMatrixLoadTranspose3x3fNV;
700extern PFNGLMATRIXLOADTRANSPOSEDEXTPROC glMatrixLoadTransposedEXT;
701extern PFNGLMATRIXLOADTRANSPOSEFEXTPROC glMatrixLoadTransposefEXT;
702extern PFNGLMATRIXMULT3X2FNVPROC glMatrixMult3x2fNV;
703extern PFNGLMATRIXMULT3X3FNVPROC glMatrixMult3x3fNV;
704extern PFNGLMATRIXMULTDEXTPROC glMatrixMultdEXT;
705extern PFNGLMATRIXMULTFEXTPROC glMatrixMultfEXT;
706extern PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC glMatrixMultTranspose3x3fNV;
707extern PFNGLMATRIXMULTTRANSPOSEDEXTPROC glMatrixMultTransposedEXT;
708extern PFNGLMATRIXMULTTRANSPOSEFEXTPROC glMatrixMultTransposefEXT;
709extern PFNGLMATRIXORTHOEXTPROC glMatrixOrthoEXT;
710extern PFNGLMATRIXPOPEXTPROC glMatrixPopEXT;
711extern PFNGLMATRIXPUSHEXTPROC glMatrixPushEXT;
712extern PFNGLMATRIXROTATEDEXTPROC glMatrixRotatedEXT;
713extern PFNGLMATRIXROTATEFEXTPROC glMatrixRotatefEXT;
714extern PFNGLMATRIXSCALEDEXTPROC glMatrixScaledEXT;
715extern PFNGLMATRIXSCALEFEXTPROC glMatrixScalefEXT;
716extern PFNGLMATRIXTRANSLATEDEXTPROC glMatrixTranslatedEXT;
717extern PFNGLMATRIXTRANSLATEFEXTPROC glMatrixTranslatefEXT;
718extern PFNGLMAXSHADERCOMPILERTHREADSARBPROC glMaxShaderCompilerThreadsARB;
719extern PFNGLMEMORYBARRIERBYREGIONPROC glMemoryBarrierByRegion;
720extern PFNGLMEMORYBARRIERPROC glMemoryBarrier;
721extern PFNGLMINSAMPLESHADINGARBPROC glMinSampleShadingARB;
722extern PFNGLMINSAMPLESHADINGPROC glMinSampleShading;
723extern PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC glMultiDrawArraysIndirectBindlessCountNV;
724extern PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC glMultiDrawArraysIndirectBindlessNV;
725extern PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC glMultiDrawArraysIndirectCountARB;
726extern PFNGLMULTIDRAWARRAYSINDIRECTPROC glMultiDrawArraysIndirect;
727extern PFNGLMULTIDRAWARRAYSPROC glMultiDrawArrays;
728extern PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glMultiDrawElementsBaseVertex;
729extern PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC glMultiDrawElementsIndirectBindlessCountNV;
730extern PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC glMultiDrawElementsIndirectBindlessNV;
731extern PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC glMultiDrawElementsIndirectCountARB;
732extern PFNGLMULTIDRAWELEMENTSINDIRECTPROC glMultiDrawElementsIndirect;
733extern PFNGLMULTIDRAWELEMENTSPROC glMultiDrawElements;
734extern PFNGLMULTITEXBUFFEREXTPROC glMultiTexBufferEXT;
735extern PFNGLMULTITEXCOORDPOINTEREXTPROC glMultiTexCoordPointerEXT;
736extern PFNGLMULTITEXENVFEXTPROC glMultiTexEnvfEXT;
737extern PFNGLMULTITEXENVFVEXTPROC glMultiTexEnvfvEXT;
738extern PFNGLMULTITEXENVIEXTPROC glMultiTexEnviEXT;
739extern PFNGLMULTITEXENVIVEXTPROC glMultiTexEnvivEXT;
740extern PFNGLMULTITEXGENDEXTPROC glMultiTexGendEXT;
741extern PFNGLMULTITEXGENDVEXTPROC glMultiTexGendvEXT;
742extern PFNGLMULTITEXGENFEXTPROC glMultiTexGenfEXT;
743extern PFNGLMULTITEXGENFVEXTPROC glMultiTexGenfvEXT;
744extern PFNGLMULTITEXGENIEXTPROC glMultiTexGeniEXT;
745extern PFNGLMULTITEXGENIVEXTPROC glMultiTexGenivEXT;
746extern PFNGLMULTITEXIMAGE1DEXTPROC glMultiTexImage1DEXT;
747extern PFNGLMULTITEXIMAGE2DEXTPROC glMultiTexImage2DEXT;
748extern PFNGLMULTITEXIMAGE3DEXTPROC glMultiTexImage3DEXT;
749extern PFNGLMULTITEXPARAMETERFEXTPROC glMultiTexParameterfEXT;
750extern PFNGLMULTITEXPARAMETERFVEXTPROC glMultiTexParameterfvEXT;
751extern PFNGLMULTITEXPARAMETERIEXTPROC glMultiTexParameteriEXT;
752extern PFNGLMULTITEXPARAMETERIIVEXTPROC glMultiTexParameterIivEXT;
753extern PFNGLMULTITEXPARAMETERIUIVEXTPROC glMultiTexParameterIuivEXT;
754extern PFNGLMULTITEXPARAMETERIVEXTPROC glMultiTexParameterivEXT;
755extern PFNGLMULTITEXRENDERBUFFEREXTPROC glMultiTexRenderbufferEXT;
756extern PFNGLMULTITEXSUBIMAGE1DEXTPROC glMultiTexSubImage1DEXT;
757extern PFNGLMULTITEXSUBIMAGE2DEXTPROC glMultiTexSubImage2DEXT;
758extern PFNGLMULTITEXSUBIMAGE3DEXTPROC glMultiTexSubImage3DEXT;
759extern PFNGLNAMEDBUFFERDATAEXTPROC glNamedBufferDataEXT;
760extern PFNGLNAMEDBUFFERDATAPROC glNamedBufferData;
761extern PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC glNamedBufferPageCommitmentARB;
762extern PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC glNamedBufferPageCommitmentEXT;
763extern PFNGLNAMEDBUFFERSTORAGEEXTPROC glNamedBufferStorageEXT;
764extern PFNGLNAMEDBUFFERSTORAGEPROC glNamedBufferStorage;
765extern PFNGLNAMEDBUFFERSUBDATAEXTPROC glNamedBufferSubDataEXT;
766extern PFNGLNAMEDBUFFERSUBDATAPROC glNamedBufferSubData;
767extern PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC glNamedCopyBufferSubDataEXT;
768extern PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glNamedFramebufferDrawBuffer;
769extern PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glNamedFramebufferDrawBuffers;
770extern PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC glNamedFramebufferParameteriEXT;
771extern PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glNamedFramebufferParameteri;
772extern PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glNamedFramebufferReadBuffer;
773extern PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC glNamedFramebufferRenderbufferEXT;
774extern PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glNamedFramebufferRenderbuffer;
775extern PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glNamedFramebufferSampleLocationsfvARB;
776extern PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glNamedFramebufferSampleLocationsfvNV;
777extern PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC glNamedFramebufferTexture1DEXT;
778extern PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC glNamedFramebufferTexture2DEXT;
779extern PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC glNamedFramebufferTexture3DEXT;
780extern PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC glNamedFramebufferTextureEXT;
781extern PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC glNamedFramebufferTextureFaceEXT;
782extern PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC glNamedFramebufferTextureLayerEXT;
783extern PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glNamedFramebufferTextureLayer;
784extern PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glNamedFramebufferTexture;
785extern PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC glNamedProgramLocalParameter4dEXT;
786extern PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC glNamedProgramLocalParameter4dvEXT;
787extern PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC glNamedProgramLocalParameter4fEXT;
788extern PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC glNamedProgramLocalParameter4fvEXT;
789extern PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC glNamedProgramLocalParameterI4iEXT;
790extern PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC glNamedProgramLocalParameterI4ivEXT;
791extern PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC glNamedProgramLocalParameterI4uiEXT;
792extern PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC glNamedProgramLocalParameterI4uivEXT;
793extern PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC glNamedProgramLocalParameters4fvEXT;
794extern PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC glNamedProgramLocalParametersI4ivEXT;
795extern PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC glNamedProgramLocalParametersI4uivEXT;
796extern PFNGLNAMEDPROGRAMSTRINGEXTPROC glNamedProgramStringEXT;
797extern PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC glNamedRenderbufferStorageEXT;
798extern PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC glNamedRenderbufferStorageMultisampleCoverageEXT;
799extern PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glNamedRenderbufferStorageMultisampleEXT;
800extern PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glNamedRenderbufferStorageMultisample;
801extern PFNGLNAMEDRENDERBUFFERSTORAGEPROC glNamedRenderbufferStorage;
802extern PFNGLNAMEDSTRINGARBPROC glNamedStringARB;
803extern PFNGLNORMALFORMATNVPROC glNormalFormatNV;
804extern PFNGLOBJECTLABELPROC glObjectLabel;
805extern PFNGLOBJECTPTRLABELPROC glObjectPtrLabel;
806extern PFNGLPATCHPARAMETERFVPROC glPatchParameterfv;
807extern PFNGLPATCHPARAMETERIPROC glPatchParameteri;
808extern PFNGLPATHCOMMANDSNVPROC glPathCommandsNV;
809extern PFNGLPATHCOORDSNVPROC glPathCoordsNV;
810extern PFNGLPATHCOVERDEPTHFUNCNVPROC glPathCoverDepthFuncNV;
811extern PFNGLPATHDASHARRAYNVPROC glPathDashArrayNV;
812extern PFNGLPATHGLYPHINDEXARRAYNVPROC glPathGlyphIndexArrayNV;
813extern PFNGLPATHGLYPHINDEXRANGENVPROC glPathGlyphIndexRangeNV;
814extern PFNGLPATHGLYPHRANGENVPROC glPathGlyphRangeNV;
815extern PFNGLPATHGLYPHSNVPROC glPathGlyphsNV;
816extern PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC glPathMemoryGlyphIndexArrayNV;
817extern PFNGLPATHPARAMETERFNVPROC glPathParameterfNV;
818extern PFNGLPATHPARAMETERFVNVPROC glPathParameterfvNV;
819extern PFNGLPATHPARAMETERINVPROC glPathParameteriNV;
820extern PFNGLPATHPARAMETERIVNVPROC glPathParameterivNV;
821extern PFNGLPATHSTENCILDEPTHOFFSETNVPROC glPathStencilDepthOffsetNV;
822extern PFNGLPATHSTENCILFUNCNVPROC glPathStencilFuncNV;
823extern PFNGLPATHSTRINGNVPROC glPathStringNV;
824extern PFNGLPATHSUBCOMMANDSNVPROC glPathSubCommandsNV;
825extern PFNGLPATHSUBCOORDSNVPROC glPathSubCoordsNV;
826extern PFNGLPAUSETRANSFORMFEEDBACKPROC glPauseTransformFeedback;
827extern PFNGLPIXELSTOREFPROC glPixelStoref;
828extern PFNGLPIXELSTOREIPROC glPixelStorei;
829extern PFNGLPOINTALONGPATHNVPROC glPointAlongPathNV;
830extern PFNGLPOINTPARAMETERFPROC glPointParameterf;
831extern PFNGLPOINTPARAMETERFVPROC glPointParameterfv;
832extern PFNGLPOINTPARAMETERIPROC glPointParameteri;
833extern PFNGLPOINTPARAMETERIVPROC glPointParameteriv;
834extern PFNGLPOINTSIZEPROC glPointSize;
835extern PFNGLPOLYGONMODEPROC glPolygonMode;
836extern PFNGLPOLYGONOFFSETCLAMPEXTPROC glPolygonOffsetClampEXT;
837extern PFNGLPOLYGONOFFSETPROC glPolygonOffset;
838extern PFNGLPOPDEBUGGROUPPROC glPopDebugGroup;
839extern PFNGLPOPGROUPMARKEREXTPROC glPopGroupMarkerEXT;
840extern PFNGLPRIMITIVEBOUNDINGBOXARBPROC glPrimitiveBoundingBoxARB;
841extern PFNGLPRIMITIVERESTARTINDEXPROC glPrimitiveRestartIndex;
842extern PFNGLPROGRAMBINARYPROC glProgramBinary;
843extern PFNGLPROGRAMPARAMETERIARBPROC glProgramParameteriARB;
844extern PFNGLPROGRAMPARAMETERIPROC glProgramParameteri;
845extern PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC glProgramPathFragmentInputGenNV;
846extern PFNGLPROGRAMUNIFORM1DEXTPROC glProgramUniform1dEXT;
847extern PFNGLPROGRAMUNIFORM1DPROC glProgramUniform1d;
848extern PFNGLPROGRAMUNIFORM1DVEXTPROC glProgramUniform1dvEXT;
849extern PFNGLPROGRAMUNIFORM1DVPROC glProgramUniform1dv;
850extern PFNGLPROGRAMUNIFORM1FEXTPROC glProgramUniform1fEXT;
851extern PFNGLPROGRAMUNIFORM1FPROC glProgramUniform1f;
852extern PFNGLPROGRAMUNIFORM1FVEXTPROC glProgramUniform1fvEXT;
853extern PFNGLPROGRAMUNIFORM1FVPROC glProgramUniform1fv;
854extern PFNGLPROGRAMUNIFORM1I64ARBPROC glProgramUniform1i64ARB;
855extern PFNGLPROGRAMUNIFORM1I64NVPROC glProgramUniform1i64NV;
856extern PFNGLPROGRAMUNIFORM1I64VARBPROC glProgramUniform1i64vARB;
857extern PFNGLPROGRAMUNIFORM1I64VNVPROC glProgramUniform1i64vNV;
858extern PFNGLPROGRAMUNIFORM1IEXTPROC glProgramUniform1iEXT;
859extern PFNGLPROGRAMUNIFORM1IPROC glProgramUniform1i;
860extern PFNGLPROGRAMUNIFORM1IVEXTPROC glProgramUniform1ivEXT;
861extern PFNGLPROGRAMUNIFORM1IVPROC glProgramUniform1iv;
862extern PFNGLPROGRAMUNIFORM1UI64ARBPROC glProgramUniform1ui64ARB;
863extern PFNGLPROGRAMUNIFORM1UI64NVPROC glProgramUniform1ui64NV;
864extern PFNGLPROGRAMUNIFORM1UI64VARBPROC glProgramUniform1ui64vARB;
865extern PFNGLPROGRAMUNIFORM1UI64VNVPROC glProgramUniform1ui64vNV;
866extern PFNGLPROGRAMUNIFORM1UIEXTPROC glProgramUniform1uiEXT;
867extern PFNGLPROGRAMUNIFORM1UIPROC glProgramUniform1ui;
868extern PFNGLPROGRAMUNIFORM1UIVEXTPROC glProgramUniform1uivEXT;
869extern PFNGLPROGRAMUNIFORM1UIVPROC glProgramUniform1uiv;
870extern PFNGLPROGRAMUNIFORM2DEXTPROC glProgramUniform2dEXT;
871extern PFNGLPROGRAMUNIFORM2DPROC glProgramUniform2d;
872extern PFNGLPROGRAMUNIFORM2DVEXTPROC glProgramUniform2dvEXT;
873extern PFNGLPROGRAMUNIFORM2DVPROC glProgramUniform2dv;
874extern PFNGLPROGRAMUNIFORM2FEXTPROC glProgramUniform2fEXT;
875extern PFNGLPROGRAMUNIFORM2FPROC glProgramUniform2f;
876extern PFNGLPROGRAMUNIFORM2FVEXTPROC glProgramUniform2fvEXT;
877extern PFNGLPROGRAMUNIFORM2FVPROC glProgramUniform2fv;
878extern PFNGLPROGRAMUNIFORM2I64ARBPROC glProgramUniform2i64ARB;
879extern PFNGLPROGRAMUNIFORM2I64NVPROC glProgramUniform2i64NV;
880extern PFNGLPROGRAMUNIFORM2I64VARBPROC glProgramUniform2i64vARB;
881extern PFNGLPROGRAMUNIFORM2I64VNVPROC glProgramUniform2i64vNV;
882extern PFNGLPROGRAMUNIFORM2IEXTPROC glProgramUniform2iEXT;
883extern PFNGLPROGRAMUNIFORM2IPROC glProgramUniform2i;
884extern PFNGLPROGRAMUNIFORM2IVEXTPROC glProgramUniform2ivEXT;
885extern PFNGLPROGRAMUNIFORM2IVPROC glProgramUniform2iv;
886extern PFNGLPROGRAMUNIFORM2UI64ARBPROC glProgramUniform2ui64ARB;
887extern PFNGLPROGRAMUNIFORM2UI64NVPROC glProgramUniform2ui64NV;
888extern PFNGLPROGRAMUNIFORM2UI64VARBPROC glProgramUniform2ui64vARB;
889extern PFNGLPROGRAMUNIFORM2UI64VNVPROC glProgramUniform2ui64vNV;
890extern PFNGLPROGRAMUNIFORM2UIEXTPROC glProgramUniform2uiEXT;
891extern PFNGLPROGRAMUNIFORM2UIPROC glProgramUniform2ui;
892extern PFNGLPROGRAMUNIFORM2UIVEXTPROC glProgramUniform2uivEXT;
893extern PFNGLPROGRAMUNIFORM2UIVPROC glProgramUniform2uiv;
894extern PFNGLPROGRAMUNIFORM3DEXTPROC glProgramUniform3dEXT;
895extern PFNGLPROGRAMUNIFORM3DPROC glProgramUniform3d;
896extern PFNGLPROGRAMUNIFORM3DVEXTPROC glProgramUniform3dvEXT;
897extern PFNGLPROGRAMUNIFORM3DVPROC glProgramUniform3dv;
898extern PFNGLPROGRAMUNIFORM3FEXTPROC glProgramUniform3fEXT;
899extern PFNGLPROGRAMUNIFORM3FPROC glProgramUniform3f;
900extern PFNGLPROGRAMUNIFORM3FVEXTPROC glProgramUniform3fvEXT;
901extern PFNGLPROGRAMUNIFORM3FVPROC glProgramUniform3fv;
902extern PFNGLPROGRAMUNIFORM3I64ARBPROC glProgramUniform3i64ARB;
903extern PFNGLPROGRAMUNIFORM3I64NVPROC glProgramUniform3i64NV;
904extern PFNGLPROGRAMUNIFORM3I64VARBPROC glProgramUniform3i64vARB;
905extern PFNGLPROGRAMUNIFORM3I64VNVPROC glProgramUniform3i64vNV;
906extern PFNGLPROGRAMUNIFORM3IEXTPROC glProgramUniform3iEXT;
907extern PFNGLPROGRAMUNIFORM3IPROC glProgramUniform3i;
908extern PFNGLPROGRAMUNIFORM3IVEXTPROC glProgramUniform3ivEXT;
909extern PFNGLPROGRAMUNIFORM3IVPROC glProgramUniform3iv;
910extern PFNGLPROGRAMUNIFORM3UI64ARBPROC glProgramUniform3ui64ARB;
911extern PFNGLPROGRAMUNIFORM3UI64NVPROC glProgramUniform3ui64NV;
912extern PFNGLPROGRAMUNIFORM3UI64VARBPROC glProgramUniform3ui64vARB;
913extern PFNGLPROGRAMUNIFORM3UI64VNVPROC glProgramUniform3ui64vNV;
914extern PFNGLPROGRAMUNIFORM3UIEXTPROC glProgramUniform3uiEXT;
915extern PFNGLPROGRAMUNIFORM3UIPROC glProgramUniform3ui;
916extern PFNGLPROGRAMUNIFORM3UIVEXTPROC glProgramUniform3uivEXT;
917extern PFNGLPROGRAMUNIFORM3UIVPROC glProgramUniform3uiv;
918extern PFNGLPROGRAMUNIFORM4DEXTPROC glProgramUniform4dEXT;
919extern PFNGLPROGRAMUNIFORM4DPROC glProgramUniform4d;
920extern PFNGLPROGRAMUNIFORM4DVEXTPROC glProgramUniform4dvEXT;
921extern PFNGLPROGRAMUNIFORM4DVPROC glProgramUniform4dv;
922extern PFNGLPROGRAMUNIFORM4FEXTPROC glProgramUniform4fEXT;
923extern PFNGLPROGRAMUNIFORM4FPROC glProgramUniform4f;
924extern PFNGLPROGRAMUNIFORM4FVEXTPROC glProgramUniform4fvEXT;
925extern PFNGLPROGRAMUNIFORM4FVPROC glProgramUniform4fv;
926extern PFNGLPROGRAMUNIFORM4I64ARBPROC glProgramUniform4i64ARB;
927extern PFNGLPROGRAMUNIFORM4I64NVPROC glProgramUniform4i64NV;
928extern PFNGLPROGRAMUNIFORM4I64VARBPROC glProgramUniform4i64vARB;
929extern PFNGLPROGRAMUNIFORM4I64VNVPROC glProgramUniform4i64vNV;
930extern PFNGLPROGRAMUNIFORM4IEXTPROC glProgramUniform4iEXT;
931extern PFNGLPROGRAMUNIFORM4IPROC glProgramUniform4i;
932extern PFNGLPROGRAMUNIFORM4IVEXTPROC glProgramUniform4ivEXT;
933extern PFNGLPROGRAMUNIFORM4IVPROC glProgramUniform4iv;
934extern PFNGLPROGRAMUNIFORM4UI64ARBPROC glProgramUniform4ui64ARB;
935extern PFNGLPROGRAMUNIFORM4UI64NVPROC glProgramUniform4ui64NV;
936extern PFNGLPROGRAMUNIFORM4UI64VARBPROC glProgramUniform4ui64vARB;
937extern PFNGLPROGRAMUNIFORM4UI64VNVPROC glProgramUniform4ui64vNV;
938extern PFNGLPROGRAMUNIFORM4UIEXTPROC glProgramUniform4uiEXT;
939extern PFNGLPROGRAMUNIFORM4UIPROC glProgramUniform4ui;
940extern PFNGLPROGRAMUNIFORM4UIVEXTPROC glProgramUniform4uivEXT;
941extern PFNGLPROGRAMUNIFORM4UIVPROC glProgramUniform4uiv;
942extern PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC glProgramUniformHandleui64ARB;
943extern PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC glProgramUniformHandleui64NV;
944extern PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC glProgramUniformHandleui64vARB;
945extern PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC glProgramUniformHandleui64vNV;
946extern PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC glProgramUniformMatrix2dvEXT;
947extern PFNGLPROGRAMUNIFORMMATRIX2DVPROC glProgramUniformMatrix2dv;
948extern PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC glProgramUniformMatrix2fvEXT;
949extern PFNGLPROGRAMUNIFORMMATRIX2FVPROC glProgramUniformMatrix2fv;
950extern PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC glProgramUniformMatrix2x3dvEXT;
951extern PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glProgramUniformMatrix2x3dv;
952extern PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC glProgramUniformMatrix2x3fvEXT;
953extern PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glProgramUniformMatrix2x3fv;
954extern PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC glProgramUniformMatrix2x4dvEXT;
955extern PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glProgramUniformMatrix2x4dv;
956extern PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC glProgramUniformMatrix2x4fvEXT;
957extern PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glProgramUniformMatrix2x4fv;
958extern PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC glProgramUniformMatrix3dvEXT;
959extern PFNGLPROGRAMUNIFORMMATRIX3DVPROC glProgramUniformMatrix3dv;
960extern PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC glProgramUniformMatrix3fvEXT;
961extern PFNGLPROGRAMUNIFORMMATRIX3FVPROC glProgramUniformMatrix3fv;
962extern PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC glProgramUniformMatrix3x2dvEXT;
963extern PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glProgramUniformMatrix3x2dv;
964extern PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC glProgramUniformMatrix3x2fvEXT;
965extern PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glProgramUniformMatrix3x2fv;
966extern PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC glProgramUniformMatrix3x4dvEXT;
967extern PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glProgramUniformMatrix3x4dv;
968extern PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC glProgramUniformMatrix3x4fvEXT;
969extern PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glProgramUniformMatrix3x4fv;
970extern PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC glProgramUniformMatrix4dvEXT;
971extern PFNGLPROGRAMUNIFORMMATRIX4DVPROC glProgramUniformMatrix4dv;
972extern PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC glProgramUniformMatrix4fvEXT;
973extern PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv;
974extern PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC glProgramUniformMatrix4x2dvEXT;
975extern PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glProgramUniformMatrix4x2dv;
976extern PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC glProgramUniformMatrix4x2fvEXT;
977extern PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glProgramUniformMatrix4x2fv;
978extern PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC glProgramUniformMatrix4x3dvEXT;
979extern PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glProgramUniformMatrix4x3dv;
980extern PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC glProgramUniformMatrix4x3fvEXT;
981extern PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glProgramUniformMatrix4x3fv;
982extern PFNGLPROGRAMUNIFORMUI64NVPROC glProgramUniformui64NV;
983extern PFNGLPROGRAMUNIFORMUI64VNVPROC glProgramUniformui64vNV;
984extern PFNGLPROVOKINGVERTEXPROC glProvokingVertex;
985extern PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC glPushClientAttribDefaultEXT;
986extern PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup;
987extern PFNGLPUSHGROUPMARKEREXTPROC glPushGroupMarkerEXT;
988extern PFNGLQUERYCOUNTERPROC glQueryCounter;
989extern PFNGLRASTERSAMPLESEXTPROC glRasterSamplesEXT;
990extern PFNGLREADBUFFERPROC glReadBuffer;
991extern PFNGLREADNPIXELSARBPROC glReadnPixelsARB;
992extern PFNGLREADNPIXELSPROC glReadnPixels;
993extern PFNGLREADPIXELSPROC glReadPixels;
994extern PFNGLRELEASESHADERCOMPILERPROC glReleaseShaderCompiler;
995extern PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC glRenderbufferStorageMultisampleCoverageNV;
996extern PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample;
997extern PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
998extern PFNGLRESOLVEDEPTHVALUESNVPROC glResolveDepthValuesNV;
999extern PFNGLRESUMETRANSFORMFEEDBACKPROC glResumeTransformFeedback;
1000extern PFNGLSAMPLECOVERAGEPROC glSampleCoverage;
1001extern PFNGLSAMPLEMASKIPROC glSampleMaski;
1002extern PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf;
1003extern PFNGLSAMPLERPARAMETERFVPROC glSamplerParameterfv;
1004extern PFNGLSAMPLERPARAMETERIIVPROC glSamplerParameterIiv;
1005extern PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri;
1006extern PFNGLSAMPLERPARAMETERIUIVPROC glSamplerParameterIuiv;
1007extern PFNGLSAMPLERPARAMETERIVPROC glSamplerParameteriv;
1008extern PFNGLSCISSORARRAYVPROC glScissorArrayv;
1009extern PFNGLSCISSORINDEXEDPROC glScissorIndexed;
1010extern PFNGLSCISSORINDEXEDVPROC glScissorIndexedv;
1011extern PFNGLSCISSORPROC glScissor;
1012extern PFNGLSECONDARYCOLORFORMATNVPROC glSecondaryColorFormatNV;
1013extern PFNGLSELECTPERFMONITORCOUNTERSAMDPROC glSelectPerfMonitorCountersAMD;
1014extern PFNGLSHADERBINARYPROC glShaderBinary;
1015extern PFNGLSHADERSOURCEPROC glShaderSource;
1016extern PFNGLSHADERSTORAGEBLOCKBINDINGPROC glShaderStorageBlockBinding;
1017extern PFNGLSIGNALVKFENCENVPROC glSignalVkFenceNV;
1018extern PFNGLSIGNALVKSEMAPHORENVPROC glSignalVkSemaphoreNV;
1019extern PFNGLSPECIALIZESHADERARBPROC glSpecializeShaderARB;
1020extern PFNGLSTATECAPTURENVPROC glStateCaptureNV;
1021extern PFNGLSTENCILFILLPATHINSTANCEDNVPROC glStencilFillPathInstancedNV;
1022extern PFNGLSTENCILFILLPATHNVPROC glStencilFillPathNV;
1023extern PFNGLSTENCILFUNCPROC glStencilFunc;
1024extern PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate;
1025extern PFNGLSTENCILMASKPROC glStencilMask;
1026extern PFNGLSTENCILMASKSEPARATEPROC glStencilMaskSeparate;
1027extern PFNGLSTENCILOPPROC glStencilOp;
1028extern PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate;
1029extern PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC glStencilStrokePathInstancedNV;
1030extern PFNGLSTENCILSTROKEPATHNVPROC glStencilStrokePathNV;
1031extern PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC glStencilThenCoverFillPathInstancedNV;
1032extern PFNGLSTENCILTHENCOVERFILLPATHNVPROC glStencilThenCoverFillPathNV;
1033extern PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC glStencilThenCoverStrokePathInstancedNV;
1034extern PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC glStencilThenCoverStrokePathNV;
1035extern PFNGLSUBPIXELPRECISIONBIASNVPROC glSubpixelPrecisionBiasNV;
1036extern PFNGLTEXBUFFERARBPROC glTexBufferARB;
1037extern PFNGLTEXBUFFERPROC glTexBuffer;
1038extern PFNGLTEXBUFFERRANGEPROC glTexBufferRange;
1039extern PFNGLTEXCOORDFORMATNVPROC glTexCoordFormatNV;
1040extern PFNGLTEXIMAGE1DPROC glTexImage1D;
1041extern PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample;
1042extern PFNGLTEXIMAGE2DPROC glTexImage2D;
1043extern PFNGLTEXIMAGE3DMULTISAMPLEPROC glTexImage3DMultisample;
1044extern PFNGLTEXIMAGE3DPROC glTexImage3D;
1045extern PFNGLTEXPAGECOMMITMENTARBPROC glTexPageCommitmentARB;
1046extern PFNGLTEXPARAMETERFPROC glTexParameterf;
1047extern PFNGLTEXPARAMETERFVPROC glTexParameterfv;
1048extern PFNGLTEXPARAMETERIIVPROC glTexParameterIiv;
1049extern PFNGLTEXPARAMETERIPROC glTexParameteri;
1050extern PFNGLTEXPARAMETERIUIVPROC glTexParameterIuiv;
1051extern PFNGLTEXPARAMETERIVPROC glTexParameteriv;
1052extern PFNGLTEXSTORAGE1DPROC glTexStorage1D;
1053extern PFNGLTEXSTORAGE2DMULTISAMPLEPROC glTexStorage2DMultisample;
1054extern PFNGLTEXSTORAGE2DPROC glTexStorage2D;
1055extern PFNGLTEXSTORAGE3DMULTISAMPLEPROC glTexStorage3DMultisample;
1056extern PFNGLTEXSTORAGE3DPROC glTexStorage3D;
1057extern PFNGLTEXSUBIMAGE1DPROC glTexSubImage1D;
1058extern PFNGLTEXSUBIMAGE2DPROC glTexSubImage2D;
1059extern PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D;
1060extern PFNGLTEXTUREBARRIERNVPROC glTextureBarrierNV;
1061extern PFNGLTEXTUREBARRIERPROC glTextureBarrier;
1062extern PFNGLTEXTUREBUFFEREXTPROC glTextureBufferEXT;
1063extern PFNGLTEXTUREBUFFERPROC glTextureBuffer;
1064extern PFNGLTEXTUREBUFFERRANGEEXTPROC glTextureBufferRangeEXT;
1065extern PFNGLTEXTUREBUFFERRANGEPROC glTextureBufferRange;
1066extern PFNGLTEXTUREIMAGE1DEXTPROC glTextureImage1DEXT;
1067extern PFNGLTEXTUREIMAGE2DEXTPROC glTextureImage2DEXT;
1068extern PFNGLTEXTUREIMAGE3DEXTPROC glTextureImage3DEXT;
1069extern PFNGLTEXTUREPAGECOMMITMENTEXTPROC glTexturePageCommitmentEXT;
1070extern PFNGLTEXTUREPARAMETERFEXTPROC glTextureParameterfEXT;
1071extern PFNGLTEXTUREPARAMETERFPROC glTextureParameterf;
1072extern PFNGLTEXTUREPARAMETERFVEXTPROC glTextureParameterfvEXT;
1073extern PFNGLTEXTUREPARAMETERFVPROC glTextureParameterfv;
1074extern PFNGLTEXTUREPARAMETERIEXTPROC glTextureParameteriEXT;
1075extern PFNGLTEXTUREPARAMETERIIVEXTPROC glTextureParameterIivEXT;
1076extern PFNGLTEXTUREPARAMETERIIVPROC glTextureParameterIiv;
1077extern PFNGLTEXTUREPARAMETERIPROC glTextureParameteri;
1078extern PFNGLTEXTUREPARAMETERIUIVEXTPROC glTextureParameterIuivEXT;
1079extern PFNGLTEXTUREPARAMETERIUIVPROC glTextureParameterIuiv;
1080extern PFNGLTEXTUREPARAMETERIVEXTPROC glTextureParameterivEXT;
1081extern PFNGLTEXTUREPARAMETERIVPROC glTextureParameteriv;
1082extern PFNGLTEXTURERENDERBUFFEREXTPROC glTextureRenderbufferEXT;
1083extern PFNGLTEXTURESTORAGE1DEXTPROC glTextureStorage1DEXT;
1084extern PFNGLTEXTURESTORAGE1DPROC glTextureStorage1D;
1085extern PFNGLTEXTURESTORAGE2DEXTPROC glTextureStorage2DEXT;
1086extern PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC glTextureStorage2DMultisampleEXT;
1087extern PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glTextureStorage2DMultisample;
1088extern PFNGLTEXTURESTORAGE2DPROC glTextureStorage2D;
1089extern PFNGLTEXTURESTORAGE3DEXTPROC glTextureStorage3DEXT;
1090extern PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC glTextureStorage3DMultisampleEXT;
1091extern PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glTextureStorage3DMultisample;
1092extern PFNGLTEXTURESTORAGE3DPROC glTextureStorage3D;
1093extern PFNGLTEXTURESUBIMAGE1DEXTPROC glTextureSubImage1DEXT;
1094extern PFNGLTEXTURESUBIMAGE1DPROC glTextureSubImage1D;
1095extern PFNGLTEXTURESUBIMAGE2DEXTPROC glTextureSubImage2DEXT;
1096extern PFNGLTEXTURESUBIMAGE2DPROC glTextureSubImage2D;
1097extern PFNGLTEXTURESUBIMAGE3DEXTPROC glTextureSubImage3DEXT;
1098extern PFNGLTEXTURESUBIMAGE3DPROC glTextureSubImage3D;
1099extern PFNGLTEXTUREVIEWPROC glTextureView;
1100extern PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glTransformFeedbackBufferBase;
1101extern PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glTransformFeedbackBufferRange;
1102extern PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings;
1103extern PFNGLTRANSFORMPATHNVPROC glTransformPathNV;
1104extern PFNGLUNIFORM1DPROC glUniform1d;
1105extern PFNGLUNIFORM1DVPROC glUniform1dv;
1106extern PFNGLUNIFORM1FPROC glUniform1f;
1107extern PFNGLUNIFORM1FVPROC glUniform1fv;
1108extern PFNGLUNIFORM1I64ARBPROC glUniform1i64ARB;
1109extern PFNGLUNIFORM1I64NVPROC glUniform1i64NV;
1110extern PFNGLUNIFORM1I64VARBPROC glUniform1i64vARB;
1111extern PFNGLUNIFORM1I64VNVPROC glUniform1i64vNV;
1112extern PFNGLUNIFORM1IPROC glUniform1i;
1113extern PFNGLUNIFORM1IVPROC glUniform1iv;
1114extern PFNGLUNIFORM1UI64ARBPROC glUniform1ui64ARB;
1115extern PFNGLUNIFORM1UI64NVPROC glUniform1ui64NV;
1116extern PFNGLUNIFORM1UI64VARBPROC glUniform1ui64vARB;
1117extern PFNGLUNIFORM1UI64VNVPROC glUniform1ui64vNV;
1118extern PFNGLUNIFORM1UIPROC glUniform1ui;
1119extern PFNGLUNIFORM1UIVPROC glUniform1uiv;
1120extern PFNGLUNIFORM2DPROC glUniform2d;
1121extern PFNGLUNIFORM2DVPROC glUniform2dv;
1122extern PFNGLUNIFORM2FPROC glUniform2f;
1123extern PFNGLUNIFORM2FVPROC glUniform2fv;
1124extern PFNGLUNIFORM2I64ARBPROC glUniform2i64ARB;
1125extern PFNGLUNIFORM2I64NVPROC glUniform2i64NV;
1126extern PFNGLUNIFORM2I64VARBPROC glUniform2i64vARB;
1127extern PFNGLUNIFORM2I64VNVPROC glUniform2i64vNV;
1128extern PFNGLUNIFORM2IPROC glUniform2i;
1129extern PFNGLUNIFORM2IVPROC glUniform2iv;
1130extern PFNGLUNIFORM2UI64ARBPROC glUniform2ui64ARB;
1131extern PFNGLUNIFORM2UI64NVPROC glUniform2ui64NV;
1132extern PFNGLUNIFORM2UI64VARBPROC glUniform2ui64vARB;
1133extern PFNGLUNIFORM2UI64VNVPROC glUniform2ui64vNV;
1134extern PFNGLUNIFORM2UIPROC glUniform2ui;
1135extern PFNGLUNIFORM2UIVPROC glUniform2uiv;
1136extern PFNGLUNIFORM3DPROC glUniform3d;
1137extern PFNGLUNIFORM3DVPROC glUniform3dv;
1138extern PFNGLUNIFORM3FPROC glUniform3f;
1139extern PFNGLUNIFORM3FVPROC glUniform3fv;
1140extern PFNGLUNIFORM3I64ARBPROC glUniform3i64ARB;
1141extern PFNGLUNIFORM3I64NVPROC glUniform3i64NV;
1142extern PFNGLUNIFORM3I64VARBPROC glUniform3i64vARB;
1143extern PFNGLUNIFORM3I64VNVPROC glUniform3i64vNV;
1144extern PFNGLUNIFORM3IPROC glUniform3i;
1145extern PFNGLUNIFORM3IVPROC glUniform3iv;
1146extern PFNGLUNIFORM3UI64ARBPROC glUniform3ui64ARB;
1147extern PFNGLUNIFORM3UI64NVPROC glUniform3ui64NV;
1148extern PFNGLUNIFORM3UI64VARBPROC glUniform3ui64vARB;
1149extern PFNGLUNIFORM3UI64VNVPROC glUniform3ui64vNV;
1150extern PFNGLUNIFORM3UIPROC glUniform3ui;
1151extern PFNGLUNIFORM3UIVPROC glUniform3uiv;
1152extern PFNGLUNIFORM4DPROC glUniform4d;
1153extern PFNGLUNIFORM4DVPROC glUniform4dv;
1154extern PFNGLUNIFORM4FPROC glUniform4f;
1155extern PFNGLUNIFORM4FVPROC glUniform4fv;
1156extern PFNGLUNIFORM4I64ARBPROC glUniform4i64ARB;
1157extern PFNGLUNIFORM4I64NVPROC glUniform4i64NV;
1158extern PFNGLUNIFORM4I64VARBPROC glUniform4i64vARB;
1159extern PFNGLUNIFORM4I64VNVPROC glUniform4i64vNV;
1160extern PFNGLUNIFORM4IPROC glUniform4i;
1161extern PFNGLUNIFORM4IVPROC glUniform4iv;
1162extern PFNGLUNIFORM4UI64ARBPROC glUniform4ui64ARB;
1163extern PFNGLUNIFORM4UI64NVPROC glUniform4ui64NV;
1164extern PFNGLUNIFORM4UI64VARBPROC glUniform4ui64vARB;
1165extern PFNGLUNIFORM4UI64VNVPROC glUniform4ui64vNV;
1166extern PFNGLUNIFORM4UIPROC glUniform4ui;
1167extern PFNGLUNIFORM4UIVPROC glUniform4uiv;
1168extern PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
1169extern PFNGLUNIFORMHANDLEUI64ARBPROC glUniformHandleui64ARB;
1170extern PFNGLUNIFORMHANDLEUI64NVPROC glUniformHandleui64NV;
1171extern PFNGLUNIFORMHANDLEUI64VARBPROC glUniformHandleui64vARB;
1172extern PFNGLUNIFORMHANDLEUI64VNVPROC glUniformHandleui64vNV;
1173extern PFNGLUNIFORMMATRIX2DVPROC glUniformMatrix2dv;
1174extern PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv;
1175extern PFNGLUNIFORMMATRIX2X3DVPROC glUniformMatrix2x3dv;
1176extern PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv;
1177extern PFNGLUNIFORMMATRIX2X4DVPROC glUniformMatrix2x4dv;
1178extern PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv;
1179extern PFNGLUNIFORMMATRIX3DVPROC glUniformMatrix3dv;
1180extern PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv;
1181extern PFNGLUNIFORMMATRIX3X2DVPROC glUniformMatrix3x2dv;
1182extern PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv;
1183extern PFNGLUNIFORMMATRIX3X4DVPROC glUniformMatrix3x4dv;
1184extern PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv;
1185extern PFNGLUNIFORMMATRIX4DVPROC glUniformMatrix4dv;
1186extern PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
1187extern PFNGLUNIFORMMATRIX4X2DVPROC glUniformMatrix4x2dv;
1188extern PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv;
1189extern PFNGLUNIFORMMATRIX4X3DVPROC glUniformMatrix4x3dv;
1190extern PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv;
1191extern PFNGLUNIFORMSUBROUTINESUIVPROC glUniformSubroutinesuiv;
1192extern PFNGLUNIFORMUI64NVPROC glUniformui64NV;
1193extern PFNGLUNIFORMUI64VNVPROC glUniformui64vNV;
1194extern PFNGLUNMAPBUFFERPROC glUnmapBuffer;
1195extern PFNGLUNMAPNAMEDBUFFEREXTPROC glUnmapNamedBufferEXT;
1196extern PFNGLUNMAPNAMEDBUFFERPROC glUnmapNamedBuffer;
1197extern PFNGLUSEPROGRAMPROC glUseProgram;
1198extern PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages;
1199extern PFNGLUSESHADERPROGRAMEXTPROC glUseShaderProgramEXT;
1200extern PFNGLVALIDATEPROGRAMPIPELINEPROC glValidateProgramPipeline;
1201extern PFNGLVALIDATEPROGRAMPROC glValidateProgram;
1202extern PFNGLVERTEXARRAYATTRIBBINDINGPROC glVertexArrayAttribBinding;
1203extern PFNGLVERTEXARRAYATTRIBFORMATPROC glVertexArrayAttribFormat;
1204extern PFNGLVERTEXARRAYATTRIBIFORMATPROC glVertexArrayAttribIFormat;
1205extern PFNGLVERTEXARRAYATTRIBLFORMATPROC glVertexArrayAttribLFormat;
1206extern PFNGLVERTEXARRAYBINDINGDIVISORPROC glVertexArrayBindingDivisor;
1207extern PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC glVertexArrayBindVertexBufferEXT;
1208extern PFNGLVERTEXARRAYCOLOROFFSETEXTPROC glVertexArrayColorOffsetEXT;
1209extern PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC glVertexArrayEdgeFlagOffsetEXT;
1210extern PFNGLVERTEXARRAYELEMENTBUFFERPROC glVertexArrayElementBuffer;
1211extern PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC glVertexArrayFogCoordOffsetEXT;
1212extern PFNGLVERTEXARRAYINDEXOFFSETEXTPROC glVertexArrayIndexOffsetEXT;
1213extern PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC glVertexArrayMultiTexCoordOffsetEXT;
1214extern PFNGLVERTEXARRAYNORMALOFFSETEXTPROC glVertexArrayNormalOffsetEXT;
1215extern PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC glVertexArraySecondaryColorOffsetEXT;
1216extern PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC glVertexArrayTexCoordOffsetEXT;
1217extern PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC glVertexArrayVertexAttribBindingEXT;
1218extern PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC glVertexArrayVertexAttribDivisorEXT;
1219extern PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC glVertexArrayVertexAttribFormatEXT;
1220extern PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC glVertexArrayVertexAttribIFormatEXT;
1221extern PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC glVertexArrayVertexAttribIOffsetEXT;
1222extern PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC glVertexArrayVertexAttribLFormatEXT;
1223extern PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC glVertexArrayVertexAttribLOffsetEXT;
1224extern PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC glVertexArrayVertexAttribOffsetEXT;
1225extern PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC glVertexArrayVertexBindingDivisorEXT;
1226extern PFNGLVERTEXARRAYVERTEXBUFFERPROC glVertexArrayVertexBuffer;
1227extern PFNGLVERTEXARRAYVERTEXBUFFERSPROC glVertexArrayVertexBuffers;
1228extern PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC glVertexArrayVertexOffsetEXT;
1229extern PFNGLVERTEXATTRIB1DPROC glVertexAttrib1d;
1230extern PFNGLVERTEXATTRIB1DVPROC glVertexAttrib1dv;
1231extern PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f;
1232extern PFNGLVERTEXATTRIB1FVPROC glVertexAttrib1fv;
1233extern PFNGLVERTEXATTRIB1SPROC glVertexAttrib1s;
1234extern PFNGLVERTEXATTRIB1SVPROC glVertexAttrib1sv;
1235extern PFNGLVERTEXATTRIB2DPROC glVertexAttrib2d;
1236extern PFNGLVERTEXATTRIB2DVPROC glVertexAttrib2dv;
1237extern PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f;
1238extern PFNGLVERTEXATTRIB2FVPROC glVertexAttrib2fv;
1239extern PFNGLVERTEXATTRIB2SPROC glVertexAttrib2s;
1240extern PFNGLVERTEXATTRIB2SVPROC glVertexAttrib2sv;
1241extern PFNGLVERTEXATTRIB3DPROC glVertexAttrib3d;
1242extern PFNGLVERTEXATTRIB3DVPROC glVertexAttrib3dv;
1243extern PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f;
1244extern PFNGLVERTEXATTRIB3FVPROC glVertexAttrib3fv;
1245extern PFNGLVERTEXATTRIB3SPROC glVertexAttrib3s;
1246extern PFNGLVERTEXATTRIB3SVPROC glVertexAttrib3sv;
1247extern PFNGLVERTEXATTRIB4BVPROC glVertexAttrib4bv;
1248extern PFNGLVERTEXATTRIB4DPROC glVertexAttrib4d;
1249extern PFNGLVERTEXATTRIB4DVPROC glVertexAttrib4dv;
1250extern PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f;
1251extern PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv;
1252extern PFNGLVERTEXATTRIB4IVPROC glVertexAttrib4iv;
1253extern PFNGLVERTEXATTRIB4NBVPROC glVertexAttrib4Nbv;
1254extern PFNGLVERTEXATTRIB4NIVPROC glVertexAttrib4Niv;
1255extern PFNGLVERTEXATTRIB4NSVPROC glVertexAttrib4Nsv;
1256extern PFNGLVERTEXATTRIB4NUBPROC glVertexAttrib4Nub;
1257extern PFNGLVERTEXATTRIB4NUBVPROC glVertexAttrib4Nubv;
1258extern PFNGLVERTEXATTRIB4NUIVPROC glVertexAttrib4Nuiv;
1259extern PFNGLVERTEXATTRIB4NUSVPROC glVertexAttrib4Nusv;
1260extern PFNGLVERTEXATTRIB4SPROC glVertexAttrib4s;
1261extern PFNGLVERTEXATTRIB4SVPROC glVertexAttrib4sv;
1262extern PFNGLVERTEXATTRIB4UBVPROC glVertexAttrib4ubv;
1263extern PFNGLVERTEXATTRIB4UIVPROC glVertexAttrib4uiv;
1264extern PFNGLVERTEXATTRIB4USVPROC glVertexAttrib4usv;
1265extern PFNGLVERTEXATTRIBBINDINGPROC glVertexAttribBinding;
1266extern PFNGLVERTEXATTRIBDIVISORARBPROC glVertexAttribDivisorARB;
1267extern PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor;
1268extern PFNGLVERTEXATTRIBFORMATNVPROC glVertexAttribFormatNV;
1269extern PFNGLVERTEXATTRIBFORMATPROC glVertexAttribFormat;
1270extern PFNGLVERTEXATTRIBI1IPROC glVertexAttribI1i;
1271extern PFNGLVERTEXATTRIBI1IVPROC glVertexAttribI1iv;
1272extern PFNGLVERTEXATTRIBI1UIPROC glVertexAttribI1ui;
1273extern PFNGLVERTEXATTRIBI1UIVPROC glVertexAttribI1uiv;
1274extern PFNGLVERTEXATTRIBI2IPROC glVertexAttribI2i;
1275extern PFNGLVERTEXATTRIBI2IVPROC glVertexAttribI2iv;
1276extern PFNGLVERTEXATTRIBI2UIPROC glVertexAttribI2ui;
1277extern PFNGLVERTEXATTRIBI2UIVPROC glVertexAttribI2uiv;
1278extern PFNGLVERTEXATTRIBI3IPROC glVertexAttribI3i;
1279extern PFNGLVERTEXATTRIBI3IVPROC glVertexAttribI3iv;
1280extern PFNGLVERTEXATTRIBI3UIPROC glVertexAttribI3ui;
1281extern PFNGLVERTEXATTRIBI3UIVPROC glVertexAttribI3uiv;
1282extern PFNGLVERTEXATTRIBI4BVPROC glVertexAttribI4bv;
1283extern PFNGLVERTEXATTRIBI4IPROC glVertexAttribI4i;
1284extern PFNGLVERTEXATTRIBI4IVPROC glVertexAttribI4iv;
1285extern PFNGLVERTEXATTRIBI4SVPROC glVertexAttribI4sv;
1286extern PFNGLVERTEXATTRIBI4UBVPROC glVertexAttribI4ubv;
1287extern PFNGLVERTEXATTRIBI4UIPROC glVertexAttribI4ui;
1288extern PFNGLVERTEXATTRIBI4UIVPROC glVertexAttribI4uiv;
1289extern PFNGLVERTEXATTRIBI4USVPROC glVertexAttribI4usv;
1290extern PFNGLVERTEXATTRIBIFORMATNVPROC glVertexAttribIFormatNV;
1291extern PFNGLVERTEXATTRIBIFORMATPROC glVertexAttribIFormat;
1292extern PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer;
1293extern PFNGLVERTEXATTRIBL1DPROC glVertexAttribL1d;
1294extern PFNGLVERTEXATTRIBL1DVPROC glVertexAttribL1dv;
1295extern PFNGLVERTEXATTRIBL1I64NVPROC glVertexAttribL1i64NV;
1296extern PFNGLVERTEXATTRIBL1I64VNVPROC glVertexAttribL1i64vNV;
1297extern PFNGLVERTEXATTRIBL1UI64ARBPROC glVertexAttribL1ui64ARB;
1298extern PFNGLVERTEXATTRIBL1UI64NVPROC glVertexAttribL1ui64NV;
1299extern PFNGLVERTEXATTRIBL1UI64VARBPROC glVertexAttribL1ui64vARB;
1300extern PFNGLVERTEXATTRIBL1UI64VNVPROC glVertexAttribL1ui64vNV;
1301extern PFNGLVERTEXATTRIBL2DPROC glVertexAttribL2d;
1302extern PFNGLVERTEXATTRIBL2DVPROC glVertexAttribL2dv;
1303extern PFNGLVERTEXATTRIBL2I64NVPROC glVertexAttribL2i64NV;
1304extern PFNGLVERTEXATTRIBL2I64VNVPROC glVertexAttribL2i64vNV;
1305extern PFNGLVERTEXATTRIBL2UI64NVPROC glVertexAttribL2ui64NV;
1306extern PFNGLVERTEXATTRIBL2UI64VNVPROC glVertexAttribL2ui64vNV;
1307extern PFNGLVERTEXATTRIBL3DPROC glVertexAttribL3d;
1308extern PFNGLVERTEXATTRIBL3DVPROC glVertexAttribL3dv;
1309extern PFNGLVERTEXATTRIBL3I64NVPROC glVertexAttribL3i64NV;
1310extern PFNGLVERTEXATTRIBL3I64VNVPROC glVertexAttribL3i64vNV;
1311extern PFNGLVERTEXATTRIBL3UI64NVPROC glVertexAttribL3ui64NV;
1312extern PFNGLVERTEXATTRIBL3UI64VNVPROC glVertexAttribL3ui64vNV;
1313extern PFNGLVERTEXATTRIBL4DPROC glVertexAttribL4d;
1314extern PFNGLVERTEXATTRIBL4DVPROC glVertexAttribL4dv;
1315extern PFNGLVERTEXATTRIBL4I64NVPROC glVertexAttribL4i64NV;
1316extern PFNGLVERTEXATTRIBL4I64VNVPROC glVertexAttribL4i64vNV;
1317extern PFNGLVERTEXATTRIBL4UI64NVPROC glVertexAttribL4ui64NV;
1318extern PFNGLVERTEXATTRIBL4UI64VNVPROC glVertexAttribL4ui64vNV;
1319extern PFNGLVERTEXATTRIBLFORMATNVPROC glVertexAttribLFormatNV;
1320extern PFNGLVERTEXATTRIBLFORMATPROC glVertexAttribLFormat;
1321extern PFNGLVERTEXATTRIBLPOINTERPROC glVertexAttribLPointer;
1322extern PFNGLVERTEXATTRIBP1UIPROC glVertexAttribP1ui;
1323extern PFNGLVERTEXATTRIBP1UIVPROC glVertexAttribP1uiv;
1324extern PFNGLVERTEXATTRIBP2UIPROC glVertexAttribP2ui;
1325extern PFNGLVERTEXATTRIBP2UIVPROC glVertexAttribP2uiv;
1326extern PFNGLVERTEXATTRIBP3UIPROC glVertexAttribP3ui;
1327extern PFNGLVERTEXATTRIBP3UIVPROC glVertexAttribP3uiv;
1328extern PFNGLVERTEXATTRIBP4UIPROC glVertexAttribP4ui;
1329extern PFNGLVERTEXATTRIBP4UIVPROC glVertexAttribP4uiv;
1330extern PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
1331extern PFNGLVERTEXBINDINGDIVISORPROC glVertexBindingDivisor;
1332extern PFNGLVERTEXFORMATNVPROC glVertexFormatNV;
1333extern PFNGLVIEWPORTARRAYVPROC glViewportArrayv;
1334extern PFNGLVIEWPORTINDEXEDFPROC glViewportIndexedf;
1335extern PFNGLVIEWPORTINDEXEDFVPROC glViewportIndexedfv;
1336extern PFNGLVIEWPORTPOSITIONWSCALENVPROC glViewportPositionWScaleNV;
1337extern PFNGLVIEWPORTPROC glViewport;
1338extern PFNGLVIEWPORTSWIZZLENVPROC glViewportSwizzleNV;
1339extern PFNGLWAITSYNCPROC glWaitSync;
1340extern PFNGLWAITVKSEMAPHORENVPROC glWaitVkSemaphoreNV;
1341extern PFNGLWEIGHTPATHSNVPROC glWeightPathsNV;
1342extern PFNGLWINDOWRECTANGLESEXTPROC glWindowRectanglesEXT;
1343#endif
1344
1346
1350namespace gg
1351{
1360
1364 extern GLint ggBufferAlignment;
1365
1372 extern void ggInit();
1373
1383 extern void _ggError(const std::string& name = "", unsigned int line = 0);
1384
1395#if defined(DEBUG)
1396# define ggError() gg::_ggError(__FILE__, __LINE__)
1397#else
1398# define ggError()
1399#endif
1400
1410 extern void _ggFBOError(const std::string& name = "", unsigned int line = 0);
1411
1422#if defined(DEBUG)
1423# define ggFBOError() gg::_ggFBOError(__FILE__, __LINE__)
1424#else
1425# define ggFBOError()
1426#endif
1427
1435 inline void ggCross(GLfloat* c, const GLfloat* a, const GLfloat* b)
1436 {
1437 c[0] = a[1] * b[2] - a[2] * b[1];
1438 c[1] = a[2] * b[0] - a[0] * b[2];
1439 c[2] = a[0] * b[1] - a[1] * b[0];
1440 }
1441
1449 inline GLfloat ggDot3(const GLfloat* a, const GLfloat* b)
1450 {
1451 return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
1452 }
1453
1460 inline GLfloat ggLength3(const GLfloat* a)
1461 {
1462 return sqrtf(ggDot3(a, a));
1463 }
1464
1472 inline GLfloat ggDistance3(const GLfloat* a, const GLfloat* b)
1473 {
1474 const GLfloat c[]{ a[0] - b[0], a[1] - b[1], a[2] - b[2], 0.0f };
1475 return ggLength3(c);
1476 }
1477
1484 inline void ggNormalize3(const GLfloat* a, GLfloat* b)
1485 {
1486 const GLfloat l{ ggLength3(a) };
1487 assert(l > 0.0f);
1488 b[0] = a[0] / l;
1489 b[1] = a[1] / l;
1490 b[2] = a[2] / l;
1491 }
1492
1498 inline void ggNormalize3(GLfloat* a)
1499 {
1500 const GLfloat l{ ggLength3(a) };
1501 assert(l > 0.0f);
1502 a[0] /= l;
1503 a[1] /= l;
1504 a[2] /= l;
1505 }
1506
1514 inline GLfloat ggDot4(const GLfloat* a, const GLfloat* b)
1515 {
1516 return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
1517 }
1518
1525 inline GLfloat ggLength4(const GLfloat* a)
1526 {
1527 return sqrtf(ggDot4(a, a));
1528 }
1529
1537 inline GLfloat ggDistance4(const GLfloat* a, const GLfloat* b)
1538 {
1539 const GLfloat c[]{ a[0] - b[0], a[1] - b[1], a[2] - b[2], a[3] - b[3] };
1540 return ggLength4(c);
1541 }
1542
1549 inline void ggNormalize4(const GLfloat* a, GLfloat* b)
1550 {
1551 const GLfloat l{ ggLength4(a) };
1552 assert(l > 0.0f);
1553 b[0] = a[0] / l;
1554 b[1] = a[1] / l;
1555 b[2] = a[2] / l;
1556 b[3] = a[3] / l;
1557 }
1558
1564 inline void ggNormalize4(GLfloat* a)
1565 {
1566 const GLfloat l{ ggLength4(a) };
1567 assert(l > 0.0f);
1568 a[0] /= l;
1569 a[1] /= l;
1570 a[2] /= l;
1571 a[3] /= l;
1572 }
1573
1577 class GgVector : public std::array<GLfloat, 4>
1578 {
1579 public:
1580
1584 GgVector() = default;
1585
1594 constexpr GgVector(GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) :
1595 std::array<GLfloat, 4>{ v0, v1, v2, v3 }
1596 {
1597 }
1598
1604 constexpr GgVector(const GLfloat* a) :
1605 GgVector{ a[0], a[1], a[2], a[3] }
1606 {
1607 }
1608
1614 constexpr GgVector(GLfloat c) :
1615 GgVector{ c, c, c, c }
1616 {
1617 }
1618
1624 GgVector(const GgVector& v) = default;
1625
1631 GgVector(GgVector&& v) = default;
1632
1636 ~GgVector() = default;
1637
1641 GgVector& operator=(const GgVector& v) = default;
1642
1646 GgVector& operator=(GgVector&& v) = default;
1647
1654 constexpr GgVector operator+(const GgVector& v) const noexcept
1655 {
1656 return GgVector{ (*this)[0] + v[0], (*this)[1] + v[1], (*this)[2] + v[2], (*this)[3] + v[3] };
1657 }
1658
1665 constexpr GgVector operator+(GLfloat c) const noexcept
1666 {
1667 return GgVector{ (*this)[0] + c, (*this)[1] + c, (*this)[2] + c, (*this)[3] + c };
1668 }
1669
1676 constexpr GgVector& operator+=(const GgVector& v) noexcept
1677 {
1678 (*this)[0] += v[0];
1679 (*this)[1] += v[1];
1680 (*this)[2] += v[2];
1681 (*this)[3] += v[3];
1682 return *this;
1683 }
1684
1691 constexpr GgVector& operator+=(GLfloat c) noexcept
1692 {
1693 (*this)[0] += c;
1694 (*this)[1] += c;
1695 (*this)[2] += c;
1696 (*this)[3] += c;
1697 return *this;
1698 }
1699
1706 constexpr GgVector operator-(const GgVector& v) const noexcept
1707 {
1708 return GgVector{ (*this)[0] - v[0], (*this)[1] - v[1], (*this)[2] - v[2], (*this)[3] - v[3] };
1709 }
1710
1717 constexpr GgVector operator-(GLfloat c) const noexcept
1718 {
1719 return GgVector{ (*this)[0] - c, (*this)[1] - c, (*this)[2] - c, (*this)[3] - c };
1720 }
1721
1728 constexpr GgVector& operator-=(const GgVector& v) noexcept
1729 {
1730 (*this)[0] -= v[0];
1731 (*this)[1] -= v[1];
1732 (*this)[2] -= v[2];
1733 (*this)[3] -= v[3];
1734 return *this;
1735 }
1736
1743 constexpr GgVector& operator-=(GLfloat c) noexcept
1744 {
1745 (*this)[0] -= c;
1746 (*this)[1] -= c;
1747 (*this)[2] -= c;
1748 (*this)[3] -= c;
1749 return *this;
1750 }
1751
1758 constexpr GgVector operator*(const GgVector& v) const noexcept
1759 {
1760 return GgVector{ (*this)[0] * v[0], (*this)[1] * v[1], (*this)[2] * v[2], (*this)[3] * v[3] };
1761 }
1762
1769 constexpr GgVector operator*(GLfloat c) const noexcept
1770 {
1771 return GgVector{ (*this)[0] * c, (*this)[1] * c, (*this)[2] * c, (*this)[3] * c };
1772 }
1773
1780 constexpr GgVector& operator*=(const GgVector& v) noexcept
1781 {
1782 (*this)[0] *= v[0];
1783 (*this)[1] *= v[1];
1784 (*this)[2] *= v[2];
1785 (*this)[3] *= v[3];
1786 return *this;
1787 }
1788
1795 constexpr GgVector& operator*=(GLfloat c) noexcept
1796 {
1797 (*this)[0] *= c;
1798 (*this)[1] *= c;
1799 (*this)[2] *= c;
1800 (*this)[3] *= c;
1801 return *this;
1802 }
1803
1810 constexpr GgVector operator/(const GgVector& v) const noexcept
1811 {
1812 return GgVector{ (*this)[0] / v[0], (*this)[1] / v[1], (*this)[2] / v[2], (*this)[3] / v[3] };
1813 }
1814
1821 constexpr GgVector operator/(GLfloat c) const noexcept
1822 {
1823 return GgVector{ (*this)[0] / c, (*this)[1] / c, (*this)[2] / c, (*this)[3] / c };
1824 }
1825
1832 constexpr GgVector& operator/=(const GgVector& v) noexcept
1833 {
1834 (*this)[0] /= v[0];
1835 (*this)[1] /= v[1];
1836 (*this)[2] /= v[2];
1837 (*this)[3] /= v[3];
1838 return *this;
1839 }
1840
1847 constexpr GgVector& operator/=(GLfloat c) noexcept
1848 {
1849 (*this)[0] /= c;
1850 (*this)[1] /= c;
1851 (*this)[2] /= c;
1852 (*this)[3] /= c;
1853 return *this;
1854 }
1855
1862 inline GLfloat dot3(const GgVector& v) const
1863 {
1864 return ggDot3(data(), v.data());
1865 }
1866
1872 inline GLfloat length3() const
1873 {
1874 return ggLength3(data());
1875 }
1876
1883 inline GLfloat distance3(const GgVector& v) const
1884 {
1885 return ggDistance3(data(), v.data());
1886 }
1887
1893 inline GgVector normalize3() const
1894 {
1895 GgVector b;
1896 ggNormalize3(data(), b.data());
1897 return b;
1898 }
1899
1906 inline GLfloat dot4(const GgVector& v) const
1907 {
1908 return ggDot4(data(), v.data());
1909 }
1910
1916 inline GLfloat length4() const
1917 {
1918 return ggLength4(data());
1919 }
1920
1927 inline GLfloat distance4(const GgVector& v) const
1928 {
1929 return ggDistance4(data(), v.data());
1930 }
1931
1937 inline GgVector normalize4() const
1938 {
1939 GgVector b;
1940 ggNormalize4(data(), b.data());
1941 return b;
1942 }
1943 };
1944
1951 inline const GgVector& operator+(const GgVector& v)
1952 {
1953 return v;
1954 }
1955
1963 inline GgVector operator+(GLfloat a, const GgVector& b)
1964 {
1965 return GgVector{ a + b[0], a + b[1], a + b[2], a + b[3] };
1966 }
1967
1974 inline const GgVector operator-(const GgVector& v)
1975 {
1976 return GgVector{ -v[0], -v[1], -v[2], -v[3] };
1977 }
1978
1986 inline GgVector operator-(GLfloat a, const GgVector& b)
1987 {
1988 return GgVector{ a - b[0], a - b[1], a - b[2], a - b[3] };
1989 }
1990
1998 inline GgVector operator*(GLfloat a, const GgVector& b)
1999 {
2000 return GgVector{ a * b[0], a * b[1], a * b[2], a * b[3] };
2001 }
2002
2010 inline GgVector operator/(GLfloat a, const GgVector& b)
2011 {
2012 return GgVector{ a / b[0], a / b[1], a / b[2], a / b[3] };
2013 }
2014
2025 inline GgVector ggCross(const GgVector& a, const GgVector& b)
2026 {
2027 GgVector c;
2028 ggCross(c.data(), a.data(), b.data());
2029 return c;
2030 }
2031
2039 inline GLfloat ggDot3(const GgVector& a, const GgVector& b)
2040 {
2041 return ggDot3(a.data(), b.data());
2042 }
2043
2050 inline GLfloat ggLength3(const GgVector& a)
2051 {
2052 return ggLength3(a.data());
2053 }
2054
2062 inline GLfloat ggDistance3(const GgVector& a, const GgVector& b)
2063 {
2064 return ggDistance3(a.data(), b.data());
2065 }
2066
2077 {
2078 GgVector b;
2079 ggNormalize3(a.data(), b.data());
2080 return b;
2081 }
2082
2091 inline void ggNormalize3(GgVector* a)
2092 {
2093 ggNormalize3(a->data());
2094 }
2095
2103 inline GLfloat ggDot4(const GgVector& a, const GgVector& b)
2104 {
2105 return ggDot4(a.data(), b.data());
2106 }
2107
2114 inline GLfloat ggLength4(const GgVector& a)
2115 {
2116 return ggLength4(a.data());
2117 }
2118
2126 inline GLfloat ggDistance4(const GgVector& a, const GgVector& b)
2127 {
2128 return ggDistance4(a.data(), b.data());
2129 }
2130
2138 {
2139 GgVector b;
2140 ggNormalize4(a.data(), b.data());
2141 return b;
2142 }
2143
2149 inline void ggNormalize4(GgVector* a)
2150 {
2151 ggNormalize4(a->data());
2152 }
2153
2157 class GgMatrix : public std::array<GLfloat, 16>
2158 {
2159 // 行列 a とベクトル b の積をベクトル c に格納する
2160 void projection(GLfloat* c, const GLfloat* a, const GLfloat* b) const;
2161
2162 // 行列 a と行列 b の積を行列 c に格納する
2163 void multiply(GLfloat* c, const GLfloat* a, const GLfloat* b) const;
2164
2165 public:
2166
2170 GgMatrix() = default;
2171
2192 constexpr GgMatrix(
2193 GLfloat m00, GLfloat m01, GLfloat m02, GLfloat m03,
2194 GLfloat m10, GLfloat m11, GLfloat m12, GLfloat m13,
2195 GLfloat m20, GLfloat m21, GLfloat m22, GLfloat m23,
2196 GLfloat m30, GLfloat m31, GLfloat m32, GLfloat m33
2197 ) :
2198 std::array<GLfloat, 16>{ m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33 }
2199 {
2200 }
2201
2207 constexpr GgMatrix(const GLfloat* a) :
2208 GgMatrix{ a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15] }
2209 {
2210 }
2211
2217 constexpr GgMatrix(GLfloat c) :
2218 GgMatrix{ c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }
2219 {
2220 }
2221
2227 GgMatrix(const GgMatrix& m) = default;
2228
2234 GgMatrix(GgMatrix&& m) = default;
2235
2239 ~GgMatrix() = default;
2240
2244 GgMatrix& operator=(const GgMatrix& m) = default;
2245
2249 GgMatrix& operator=(GgMatrix&& m) = default;
2250
2257 GgMatrix& operator=(const GLfloat* a)
2258 {
2259 *this = GgMatrix(a);
2260 return *this;
2261 }
2262
2269 GgMatrix operator+(const GLfloat* a) const
2270 {
2271 GgMatrix t;
2272 for (std::size_t i = 0; i < size(); ++i) t[i] = data()[i] + a[i];
2273 return t;
2274 }
2275
2283 {
2284 return operator+(m.data());
2285 }
2286
2293 GgMatrix& operator+=(const GLfloat* a)
2294 {
2295 for (std::size_t i = 0; i < size(); ++i) data()[i] += a[i];
2296 return *this;
2297 }
2298
2306 {
2307 return operator+=(m.data());
2308 }
2309
2316 GgMatrix operator-(const GLfloat* a) const
2317 {
2318 GgMatrix t;
2319 for (std::size_t i = 0; i < size(); ++i) t[i] = data()[i] - a[i];
2320 return t;
2321 }
2322
2330 {
2331 return operator-(m.data());
2332 }
2333
2340 GgMatrix& operator-=(const GLfloat* a)
2341 {
2342 for (std::size_t i = 0; i < size(); ++i) data()[i] -= a[i];
2343 return *this;
2344 }
2345
2353 {
2354 return operator-=(m.data());
2355 }
2356
2363 GgMatrix operator*(const GLfloat* a) const
2364 {
2365 GgMatrix t;
2366 multiply(t.data(), data(), a);
2367 return t;
2368 }
2369
2377 {
2378 return operator*(m.data());
2379 }
2380
2387 GgMatrix& operator*=(const GLfloat* a)
2388 {
2389 *this = operator*(a);
2390 return *this;
2391 }
2392
2400 {
2401 return operator*=(m.data());
2402 }
2403
2410 GgMatrix operator/(const GLfloat* a) const
2411 {
2412 GgMatrix i, t;
2413 i.loadInvert(a);
2414 multiply(t.data(), data(), i.data());
2415 return t;
2416 }
2417
2425 {
2426 return operator/(m.data());
2427 }
2428
2435 GgMatrix& operator/=(const GLfloat* a)
2436 {
2437 *this = operator/(a);
2438 return *this;
2439 }
2440
2448 {
2449 return operator/=(m.data());
2450 }
2451
2456
2466 GgMatrix& loadTranslate(GLfloat x, GLfloat y, GLfloat z, GLfloat w = 1.0f);
2467
2474 GgMatrix& loadTranslate(const GLfloat* t)
2475 {
2476 return loadTranslate(t[0], t[1], t[2]);
2477 }
2478
2486 {
2487 return loadTranslate(t[0], t[1], t[2], t[3]);
2488 }
2489
2499 GgMatrix& loadScale(GLfloat x, GLfloat y, GLfloat z, GLfloat w = 1.0f);
2500
2507 GgMatrix& loadScale(const GLfloat* s)
2508 {
2509 return loadScale(s[0], s[1], s[2]);
2510 }
2511
2519 {
2520 return loadScale(s[0], s[1], s[2], s[3]);
2521 }
2522
2529 GgMatrix& loadRotateX(GLfloat a);
2530
2537 GgMatrix& loadRotateY(GLfloat a);
2538
2545 GgMatrix& loadRotateZ(GLfloat a);
2546
2556 GgMatrix& loadRotate(GLfloat x, GLfloat y, GLfloat z, GLfloat a);
2557
2565 GgMatrix& loadRotate(const GLfloat* r, GLfloat a)
2566 {
2567 return loadRotate(r[0], r[1], r[2], a);
2568 }
2569
2577 GgMatrix& loadRotate(const GgVector& r, GLfloat a)
2578 {
2579 return loadRotate(r[0], r[1], r[2], a);
2580 }
2581
2588 GgMatrix& loadRotate(const GLfloat* r)
2589 {
2590 return loadRotate(r[0], r[1], r[2], r[3]);
2591 }
2592
2600 {
2601 return loadRotate(r[0], r[1], r[2], r[3]);
2602 }
2603
2618 GgMatrix& loadLookat(GLfloat ex, GLfloat ey, GLfloat ez,
2619 GLfloat tx, GLfloat ty, GLfloat tz,
2620 GLfloat ux, GLfloat uy, GLfloat uz);
2621
2630 GgMatrix& loadLookat(const GLfloat* e, const GLfloat* t, const GLfloat* u)
2631 {
2632 return loadLookat(e[0], e[1], e[2], t[0], t[1], t[2], u[0], u[1], u[2]);
2633 }
2634
2643 GgMatrix& loadLookat(const GgVector& e, const GgVector& t, const GgVector& u)
2644 {
2645 return loadLookat(e[0], e[1], e[2], t[0], t[1], t[2], u[0], u[1], u[2]);
2646 }
2647
2659 GgMatrix& loadOrthogonal(GLfloat left, GLfloat right,
2660 GLfloat bottom, GLfloat top,
2661 GLfloat zNear, GLfloat zFar);
2662
2674 GgMatrix& loadFrustum(GLfloat left, GLfloat right,
2675 GLfloat bottom, GLfloat top,
2676 GLfloat zNear, GLfloat zFar);
2677
2687 GgMatrix& loadPerspective(GLfloat fovy, GLfloat aspect,
2688 GLfloat zNear, GLfloat zFar);
2689
2696 GgMatrix& loadTranspose(const GLfloat* a);
2697
2705 {
2706 return loadTranspose(m.data());
2707 }
2708
2715 GgMatrix& loadInvert(const GLfloat* a);
2716
2724 {
2725 return loadInvert(m.data());
2726 }
2727
2734 GgMatrix& loadNormal(const GLfloat* a);
2735
2743 {
2744 return loadNormal(m.data());
2745 }
2746
2756 GgMatrix translate(GLfloat x, GLfloat y, GLfloat z, GLfloat w = 1.0f) const
2757 {
2758 GgMatrix m;
2759 return operator*(m.loadTranslate(x, y, z, w));
2760 }
2761
2768 GgMatrix translate(const GLfloat* t) const
2769 {
2770 return translate(t[0], t[1], t[2]);
2771 }
2772
2780 {
2781 return translate(t[0], t[1], t[2], t[3]);
2782 }
2783
2793 GgMatrix scale(GLfloat x, GLfloat y, GLfloat z, GLfloat w = 1.0f) const
2794 {
2795 GgMatrix m;
2796 return operator*(m.loadScale(x, y, z, w));
2797 }
2798
2805 GgMatrix scale(const GLfloat* s) const
2806 {
2807 return scale(s[0], s[1], s[2]);
2808 }
2809
2816 GgMatrix scale(const GgVector& s) const
2817 {
2818 return scale(s[0], s[1], s[2], s[3]);
2819 }
2820
2827 GgMatrix rotateX(GLfloat a) const
2828 {
2829 GgMatrix m;
2830 return operator*(m.loadRotateX(a));
2831 }
2832
2839 GgMatrix rotateY(GLfloat a) const
2840 {
2841 GgMatrix m;
2842 return operator*(m.loadRotateY(a));
2843 }
2844
2851 GgMatrix rotateZ(GLfloat a) const
2852 {
2853 GgMatrix m;
2854 return operator*(m.loadRotateZ(a));
2855 }
2856
2866 GgMatrix rotate(GLfloat x, GLfloat y, GLfloat z, GLfloat a) const
2867 {
2868 GgMatrix m;
2869 return operator*(m.loadRotate(x, y, z, a));
2870 }
2871
2879 GgMatrix rotate(const GLfloat* r, GLfloat a) const
2880 {
2881 return rotate(r[0], r[1], r[2], a);
2882 }
2883
2891 GgMatrix rotate(const GgVector& r, GLfloat a) const
2892 {
2893 return rotate(r[0], r[1], r[2], a);
2894 }
2895
2902 GgMatrix rotate(const GLfloat* r) const
2903 {
2904 return rotate(r[0], r[1], r[2], r[3]);
2905 }
2906
2913 GgMatrix rotate(const GgVector& r) const
2914 {
2915 return rotate(r[0], r[1], r[2], r[3]);
2916 }
2917
2933 GLfloat ex, GLfloat ey, GLfloat ez,
2934 GLfloat tx, GLfloat ty, GLfloat tz,
2935 GLfloat ux, GLfloat uy, GLfloat uz
2936 ) const
2937 {
2938 GgMatrix m;
2939 return operator*(m.loadLookat(ex, ey, ez, tx, ty, tz, ux, uy, uz));
2940 }
2941
2950 GgMatrix lookat(const GLfloat* e, const GLfloat* t, const GLfloat* u) const
2951 {
2952 return lookat(e[0], e[1], e[2], t[0], t[1], t[2], u[0], u[1], u[2]);
2953 }
2954
2963 GgMatrix lookat(const GgVector& e, const GgVector& t, const GgVector& u) const
2964 {
2965 return lookat(e[0], e[1], e[2], t[0], t[1], t[2], u[0], u[1], u[2]);
2966 }
2967
2980 GLfloat left, GLfloat right,
2981 GLfloat bottom, GLfloat top,
2982 GLfloat zNear, GLfloat zFar
2983 ) const
2984 {
2985 GgMatrix m;
2986 return operator*(m.loadOrthogonal(left, right, bottom, top, zNear, zFar));
2987 }
2988
3001 GLfloat left, GLfloat right,
3002 GLfloat bottom, GLfloat top,
3003 GLfloat zNear, GLfloat zFar
3004 ) const
3005 {
3006 GgMatrix m;
3007 return operator*(m.loadFrustum(left, right, bottom, top, zNear, zFar));
3008 }
3009
3020 GLfloat fovy, GLfloat aspect,
3021 GLfloat zNear, GLfloat zFar
3022 ) const
3023 {
3024 GgMatrix m;
3025 return operator*(m.loadPerspective(fovy, aspect, zNear, zFar));
3026 }
3027
3034 {
3035 GgMatrix t;
3036 return t.loadTranspose(*this);
3037 }
3038
3045 {
3046 GgMatrix t;
3047 return t.loadInvert(*this);
3048 }
3049
3056 {
3057 GgMatrix t;
3058 return t.loadNormal(*this);
3059 }
3060
3067 void projection(GLfloat* c, const GLfloat* v) const
3068 {
3069 projection(c, data(), v);
3070 }
3071
3078 void projection(GLfloat* c, const GgVector& v) const
3079 {
3080 projection(c, v.data());
3081 }
3082
3089 void projection(GgVector& c, const GLfloat* v) const
3090 {
3091 projection(c.data(), v);
3092 }
3093
3100 void projection(GgVector& c, const GgVector& v) const
3101 {
3102 projection(c.data(), v.data());
3103 }
3104
3112 {
3113 GgVector c;
3114 projection(c, v);
3115 return c;
3116 }
3117
3123 const GLfloat* get() const
3124 {
3125 return data();
3126 }
3127
3133 void get(GLfloat* a) const
3134 {
3135 std::copy(data(), data() + size(), a);
3136 }
3137 };
3138
3145 {
3146 GgMatrix t;
3147 return t.loadIdentity();
3148 }
3149
3159 inline GgMatrix ggTranslate(GLfloat x, GLfloat y, GLfloat z, GLfloat w = 1.0f)
3160 {
3161 GgMatrix m;
3162 return m.loadTranslate(x, y, z, w);
3163 }
3164
3171 inline GgMatrix ggTranslate(const GLfloat* t)
3172 {
3173 GgMatrix m;
3174 return m.loadTranslate(t[0], t[1], t[2]);
3175 }
3176
3184 {
3185 GgMatrix m;
3186 return m.loadTranslate(t[0], t[1], t[2], t[3]);
3187 }
3188
3198 inline GgMatrix ggScale(GLfloat x, GLfloat y, GLfloat z, GLfloat w = 1.0f)
3199 {
3200 GgMatrix m;
3201 return m.loadScale(x, y, z, w);
3202 }
3203
3210 inline GgMatrix ggScale(const GLfloat* s)
3211 {
3212 GgMatrix m;
3213 return m.loadScale(s[0], s[1], s[2]);
3214 }
3215
3222 inline GgMatrix ggScale(const GgVector& s)
3223 {
3224 GgMatrix m;
3225 return m.loadScale(s[0], s[1], s[2], s[3]);
3226 }
3227
3234 inline GgMatrix ggRotateX(GLfloat a)
3235 {
3236 GgMatrix m;
3237 return m.loadRotateX(a);
3238 }
3239
3246 inline GgMatrix ggRotateY(GLfloat a)
3247 {
3248 GgMatrix m;
3249 return m.loadRotateY(a);
3250 }
3251
3258 inline GgMatrix ggRotateZ(GLfloat a)
3259 {
3260 GgMatrix m;
3261 return m.loadRotateZ(a);
3262 }
3263
3273 inline GgMatrix ggRotate(GLfloat x, GLfloat y, GLfloat z, GLfloat a)
3274 {
3275 GgMatrix m;
3276 return m.loadRotate(x, y, z, a);
3277 }
3278
3286 inline GgMatrix ggRotate(const GLfloat* r, GLfloat a)
3287 {
3288 GgMatrix m;
3289 return m.loadRotate(r[0], r[1], r[2], a);
3290 }
3291
3299 inline GgMatrix ggRotate(const GgVector& r, GLfloat a)
3300 {
3301 GgMatrix m;
3302 return m.loadRotate(r[0], r[1], r[2], a);
3303 }
3304
3311 inline GgMatrix ggRotate(const GLfloat* r)
3312 {
3313 GgMatrix m;
3314 return m.loadRotate(r[0], r[1], r[2], r[3]);
3315 }
3316
3323 inline GgMatrix ggRotate(const GgVector& r)
3324 {
3325 GgMatrix m;
3326 return m.loadRotate(r[0], r[1], r[2], r[3]);
3327 }
3328
3344 GLfloat ex, GLfloat ey, GLfloat ez, // 視点の位置
3345 GLfloat tx, GLfloat ty, GLfloat tz, // 目標点の位置
3346 GLfloat ux, GLfloat uy, GLfloat uz // 上方向のベクトル
3347 )
3348 {
3349 GgMatrix m;
3350 return m.loadLookat(ex, ey, ez, tx, ty, tz, ux, uy, uz);
3351 }
3352
3362 const GLfloat* e, // 視点の位置
3363 const GLfloat* t, // 目標点の位置
3364 const GLfloat* u // 上方向のベクトル
3365 )
3366 {
3367 GgMatrix m;
3368 return m.loadLookat(e[0], e[1], e[2], t[0], t[1], t[2], u[0], u[1], u[2]);
3369 }
3370
3380 const GgVector& e, // 視点の位置
3381 const GgVector& t, // 目標点の位置
3382 const GgVector& u // 上方向のベクトル
3383 )
3384 {
3385 GgMatrix m;
3386 return m.loadLookat(e[0], e[1], e[2], t[0], t[1], t[2], u[0], u[1], u[2]);
3387 }
3388
3400 inline GgMatrix ggOrthogonal(GLfloat left, GLfloat right,
3401 GLfloat bottom, GLfloat top,
3402 GLfloat zNear, GLfloat zFar)
3403 {
3404 GgMatrix m;
3405 return m.loadOrthogonal(left, right, bottom, top, zNear, zFar);
3406 }
3407
3420 GLfloat left, GLfloat right,
3421 GLfloat bottom, GLfloat top,
3422 GLfloat zNear, GLfloat zFar
3423 )
3424 {
3425 GgMatrix m;
3426 return m.loadFrustum(left, right, bottom, top, zNear, zFar);
3427 }
3428
3439 GLfloat fovy, GLfloat aspect,
3440 GLfloat zNear, GLfloat zFar
3441 )
3442 {
3443 GgMatrix m;
3444 return m.loadPerspective(fovy, aspect, zNear, zFar);
3445 }
3446
3454 {
3455 return m.transpose();
3456 }
3457
3464 inline GgMatrix ggInvert(const GgMatrix& m)
3465 {
3466 return m.invert();
3467 }
3468
3475 inline GgMatrix ggNormal(const GgMatrix& m)
3476 {
3477 return m.normal();
3478 }
3479
3483 class GgQuaternion : public GgVector
3484 {
3485 // GgQuaternion 型の四元数 p と四元数 q の積を四元数 r に求める
3486 void multiply(GLfloat* r, const GLfloat* p, const GLfloat* q) const;
3487
3488 // GgQuaternion 型の四元数 q が表す回転の変換行列を m に求める
3489 void toMatrix(GLfloat* m, const GLfloat* q) const;
3490
3491 // 回転の変換行列 m が表す四元数を q に求める
3492 void toQuaternion(GLfloat* q, const GLfloat* m) const;
3493
3494 // 球面線形補間 q と r を t で補間した四元数を p に求める
3495 void slerp(GLfloat* p, const GLfloat* q, const GLfloat* r, GLfloat t) const;
3496
3497 public:
3498
3502 GgQuaternion() = default;
3503
3512 constexpr GgQuaternion(GLfloat x, GLfloat y, GLfloat z, GLfloat w) :
3513 GgVector{ x, y, z, w }
3514 {
3515 }
3516
3522 constexpr GgQuaternion(GLfloat c) :
3523 GgQuaternion{ c, c, c, c }
3524 {
3525 }
3526
3532 GgQuaternion(const GLfloat* a) :
3533 GgQuaternion{ a[0], a[1], a[2], a[3] }
3534 {
3535 }
3536
3543 GgQuaternion{ v[0], v[1], v[2], v[3] }
3544 {
3545 }
3546
3552 GgQuaternion(const GgQuaternion& q) = default;
3553
3560
3564 ~GgQuaternion() = default;
3565
3573
3581
3587 GLfloat norm() const
3588 {
3589 return ggLength4(*this);
3590 }
3591
3601 GgQuaternion& loadAdd(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
3602 {
3603 (*this)[0] += x;
3604 (*this)[1] += y;
3605 (*this)[2] += z;
3606 (*this)[3] += w;
3607
3608 return *this;
3609 }
3610
3617 GgQuaternion& loadAdd(const GLfloat* a)
3618 {
3619 return loadAdd(a[0], a[1], a[2], a[3]);
3620 }
3621
3629 {
3630 return loadAdd(v[0], v[1], v[2], v[3]);
3631 }
3632
3640 {
3641 return loadAdd(q[0], q[1], q[2], q[3]);
3642 }
3643
3653 GgQuaternion& loadSubtract(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
3654 {
3655 (*this)[0] -= x;
3656 (*this)[1] -= y;
3657 (*this)[2] -= z;
3658 (*this)[3] -= w;
3659
3660 return *this;
3661 }
3662
3669 GgQuaternion& loadSubtract(const GLfloat* a)
3670 {
3671 return loadSubtract(a[0], a[1], a[2], a[3]);
3672 }
3673
3681 {
3682 return loadSubtract(v[0], v[1], v[2], v[3]);
3683 }
3684
3692 {
3693 return loadSubtract(q[0], q[1], q[2], q[3]);
3694 }
3695
3705 GgQuaternion& loadMultiply(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
3706 {
3707 const GLfloat a[]{ x, y, z, w };
3708 return loadMultiply(a);
3709 }
3710
3717 GgQuaternion& loadMultiply(const GLfloat* a)
3718 {
3719 return *this = multiply(a);
3720 }
3721
3729 {
3730 return loadMultiply(v.data());
3731 }
3732
3740 {
3741 return loadMultiply(q.data());
3742 }
3743
3753 GgQuaternion& loadDivide(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
3754 {
3755 const GLfloat a[]{ x, y, z, w };
3756 return loadDivide(a);
3757 }
3758
3765 GgQuaternion& loadDivide(const GLfloat* a)
3766 {
3767 return *this = divide(a);
3768 }
3769
3777 {
3778 return loadDivide(v.data());
3779 }
3780
3788 {
3789 return loadDivide(q.data());
3790 }
3791
3801 GgQuaternion add(GLfloat x, GLfloat y, GLfloat z, GLfloat w) const
3802 {
3803 GgQuaternion s{ *this };
3804 return s.loadAdd(x, y, z, w);
3805 }
3806
3813 GgQuaternion add(const GLfloat* a) const
3814 {
3815 return add(a[0], a[1], a[2], a[3]);
3816 }
3817
3824 GgQuaternion add(const GgVector& v) const
3825 {
3826 return add(v[0], v[1], v[2], v[3]);
3827 }
3828
3836 {
3837 return add(q[0], q[1], q[2], q[3]);
3838 }
3839
3849 GgQuaternion subtract(GLfloat x, GLfloat y, GLfloat z, GLfloat w) const
3850 {
3851 GgQuaternion s{ *this };
3852 return s.loadSubtract(x, y, z, w);
3853 }
3854
3861 GgQuaternion subtract(const GLfloat* a) const
3862 {
3863 return subtract(a[0], a[1], a[2], a[3]);
3864 }
3865
3873 {
3874 return subtract(v[0], v[1], v[2], v[3]);
3875 }
3876
3884 {
3885 return subtract(q[0], q[1], q[2], q[3]);
3886 }
3887
3897 GgQuaternion multiply(GLfloat x, GLfloat y, GLfloat z, GLfloat w) const
3898 {
3899 const GLfloat a[]{ x, y, z, w };
3900 return multiply(a);
3901 }
3902
3909 GgQuaternion multiply(const GLfloat* a) const
3910 {
3911 GgQuaternion s;
3912 multiply(s.data(), data(), a);
3913 return s;
3914 }
3915
3923 {
3924 return multiply(v.data());
3925 }
3926
3934 {
3935 return multiply(q.data());
3936 }
3937
3947 GgQuaternion divide(GLfloat x, GLfloat y, GLfloat z, GLfloat w) const
3948 {
3949 const GLfloat a[]{ x, y, z, w };
3950 return divide(a);
3951 }
3952
3959 GgQuaternion divide(const GLfloat* a) const
3960 {
3961 GgQuaternion s, ia;
3962 ia.loadInvert(a);
3963 multiply(s.data(), data(), ia.data());
3964 return s;
3965 }
3966
3974 {
3975 return divide(v.data());
3976 }
3977
3985 {
3986 return divide(q.data());
3987 }
3988
3989 // 演算子
3990 GgQuaternion& operator=(const GLfloat* a)
3991 {
3992 return *this = GgQuaternion(a);
3993 }
3995 {
3996 return *this = GgQuaternion(v);
3997 }
3998 GgQuaternion& operator+=(const GLfloat* a)
3999 {
4000 return loadAdd(a);
4001 }
4003 {
4004 return loadAdd(v);
4005 }
4007 {
4008 return loadAdd(q);
4009 }
4010 GgQuaternion& operator-=(const GLfloat* a)
4011 {
4012 return loadSubtract(a);
4013 }
4015 {
4016 return loadSubtract(v);
4017 }
4019 {
4020 return operator-=(q.data());
4021 }
4022 GgQuaternion& operator*=(const GLfloat* a)
4023 {
4024 return loadMultiply(a);
4025 }
4027 {
4028 return loadMultiply(v);
4029 }
4031 {
4032 return operator*=(q.data());
4033 }
4034 GgQuaternion& operator/=(const GLfloat* a)
4035 {
4036 return loadDivide(a);
4037 }
4039 {
4040 return loadDivide(v);
4041 }
4043 {
4044 return operator/=(q.data());
4045 }
4046 GgQuaternion operator+(const GLfloat* a) const
4047 {
4048 return add(a);
4049 }
4051 {
4052 return add(v);
4053 }
4055 {
4056 return operator+(q.data());
4057 }
4058 GgQuaternion operator-(const GLfloat* a) const
4059 {
4060 return subtract(a);
4061 }
4063 {
4064 return subtract(v);
4065 }
4067 {
4068 return operator-(q.data());
4069 }
4070 GgQuaternion operator*(const GLfloat* a) const
4071 {
4072 return multiply(a);
4073 }
4075 {
4076 return multiply(v);
4077 }
4079 {
4080 return operator*(q.data());
4081 }
4082 GgQuaternion operator/(const GLfloat* a) const
4083 {
4084 return divide(a);
4085 }
4087 {
4088 return divide(v);
4089 }
4091 {
4092 return operator/(q.data());
4093 }
4094
4101 GgQuaternion& loadMatrix(const GLfloat* a)
4102 {
4103 toQuaternion(data(), a);
4104 return *this;
4105 }
4106
4114 {
4115 return loadMatrix(m.get());
4116 }
4117
4124 {
4125 return *this = GgQuaternion(0.0f, 0.0f, 0.0f, 1.0f);
4126 }
4127
4137 GgQuaternion& loadRotate(GLfloat x, GLfloat y, GLfloat z, GLfloat a);
4138
4146 GgQuaternion& loadRotate(const GLfloat* v, GLfloat a)
4147 {
4148 return loadRotate(v[0], v[1], v[2], a);
4149 }
4150
4157 GgQuaternion& loadRotate(const GLfloat* v)
4158 {
4159 return loadRotate(v[0], v[1], v[2], v[3]);
4160 }
4161
4168 GgQuaternion& loadRotateX(GLfloat a);
4169
4176 GgQuaternion& loadRotateY(GLfloat a);
4177
4184 GgQuaternion& loadRotateZ(GLfloat a);
4185
4195 GgQuaternion rotate(GLfloat x, GLfloat y, GLfloat z, GLfloat a) const
4196 {
4197 GgQuaternion q;
4198 return multiply(q.loadRotate(x, y, z, a));
4199 }
4200
4208 GgQuaternion rotate(const GLfloat* v, GLfloat a) const
4209 {
4210 return rotate(v[0], v[1], v[2], a);
4211 }
4212
4219 GgQuaternion rotate(const GLfloat* v) const
4220 {
4221 return rotate(v[0], v[1], v[2], v[3]);
4222 }
4223
4230 GgQuaternion rotateX(GLfloat a) const
4231 {
4232 return rotate(1.0f, 0.0f, 0.0f, a);
4233 }
4234
4241 GgQuaternion rotateY(GLfloat a) const
4242 {
4243 return rotate(0.0f, 1.0f, 0.0f, a);
4244 }
4245
4252 GgQuaternion rotateZ(GLfloat a) const
4253 {
4254 return rotate(0.0f, 0.0f, 1.0f, a);
4255 }
4256
4265 GgQuaternion& loadEuler(GLfloat heading, GLfloat pitch, GLfloat roll);
4266
4273 GgQuaternion& loadEuler(const GLfloat* e)
4274 {
4275 return loadEuler(e[0], e[1], e[2]);
4276 }
4277
4286 GgQuaternion euler(GLfloat heading, GLfloat pitch, GLfloat roll) const
4287 {
4288 GgQuaternion r;
4289 return multiply(r.loadEuler(heading, pitch, roll));
4290 }
4291
4298 GgQuaternion euler(const GLfloat* e) const
4299 {
4300 return euler(e[0], e[1], e[2]);
4301 }
4302
4313 {
4314 return euler(e[0], e[1], e[2]);
4315 }
4316
4325 GgQuaternion& loadSlerp(const GLfloat* a, const GLfloat* b, GLfloat t)
4326 {
4327 slerp(data(), a, b, t);
4328 return *this;
4329 }
4330
4339 GgQuaternion& loadSlerp(const GgQuaternion& q, const GgQuaternion& r, GLfloat t)
4340 {
4341 return loadSlerp(q.data(), r.data(), t);
4342 }
4343
4352 GgQuaternion& loadSlerp(const GgQuaternion& q, const GLfloat* a, GLfloat t)
4353 {
4354 return loadSlerp(q.data(), a, t);
4355 }
4356
4365 GgQuaternion& loadSlerp(const GLfloat* a, const GgQuaternion& q, GLfloat t)
4366 {
4367 return loadSlerp(a, q.data(), t);
4368 }
4369
4376 GgQuaternion& loadNormalize(const GLfloat* a);
4377
4385 {
4386 return loadNormalize(q.data());
4387 }
4388
4395 GgQuaternion& loadConjugate(const GLfloat* a);
4396
4404 {
4405 return loadConjugate(q.data());
4406 }
4407
4414 GgQuaternion& loadInvert(const GLfloat* a);
4415
4423 {
4424 return loadInvert(q.data());
4425 }
4426
4434 GgQuaternion slerp(GLfloat* a, GLfloat t) const
4435 {
4436 GgQuaternion p;
4437 slerp(p.data(), data(), a, t);
4438 return p;
4439 }
4440
4448 GgQuaternion slerp(const GgQuaternion& q, GLfloat t) const
4449 {
4450 GgQuaternion p;
4451 slerp(p.data(), data(), q.data(), t);
4452 return p;
4453 }
4454
4461 {
4462 GgQuaternion q;
4463 q.loadNormalize(data());
4464 return q;
4465 }
4466
4473 {
4474 GgQuaternion q;
4475 q.loadConjugate(data());
4476 return q;
4477 }
4478
4485 {
4486 GgQuaternion q;
4487 q.loadInvert(data());
4488 return q;
4489 }
4490
4496 void get(GLfloat* a) const
4497 {
4498 a[0] = data()[0];
4499 a[1] = data()[1];
4500 a[2] = data()[2];
4501 a[3] = data()[3];
4502 }
4503
4509 void getMatrix(GLfloat* a) const
4510 {
4511 toMatrix(a, data());
4512 }
4513
4519 void getMatrix(GgMatrix& m) const
4520 {
4521 getMatrix(m.data());
4522 }
4523
4530 {
4531 GgMatrix m;
4532 getMatrix(m);
4533 return m;
4534 }
4535
4541 void getConjugateMatrix(GLfloat* a) const
4542 {
4543 GgQuaternion c;
4544 c.loadConjugate(data());
4545 toMatrix(a, c.data());
4546 }
4547
4554 {
4555 getConjugateMatrix(m.data());
4556 }
4557
4564 {
4565 GgMatrix m;
4567 return m;
4568 }
4569 };
4570
4577 {
4578 GgQuaternion q;
4579 return q.loadIdentity();
4580 }
4581
4588 inline GgQuaternion ggMatrixQuaternion(const GLfloat* a)
4589 {
4590 GgQuaternion q;
4591 return q.loadMatrix(a);
4592 }
4593
4601 {
4602 return ggMatrixQuaternion(m.get());
4603 }
4604
4612 {
4613 GLfloat m[16];
4614 q.getMatrix(m);
4615 return GgMatrix{ m };
4616 }
4617
4625 {
4626 GLfloat m[16];
4627 q.getMatrix(m);
4628 GgMatrix t;
4629 return t.loadTranspose(m);
4630 }
4631
4641 inline GgQuaternion ggRotateQuaternion(GLfloat x, GLfloat y, GLfloat z, GLfloat a)
4642 {
4643 GgQuaternion q;
4644 return q.loadRotate(x, y, z, a);
4645 }
4646
4654 inline GgQuaternion ggRotateQuaternion(const GLfloat* v, GLfloat a)
4655 {
4656 return ggRotateQuaternion(v[0], v[1], v[2], a);
4657 }
4658
4665 inline GgQuaternion ggRotateQuaternion(const GLfloat* v)
4666 {
4667 return ggRotateQuaternion(v[0], v[1], v[2], v[3]);
4668 }
4669
4678 inline GgQuaternion ggEulerQuaternion(GLfloat heading, GLfloat pitch, GLfloat roll)
4679 {
4680 GgQuaternion q;
4681 return q.loadEuler(heading, pitch, roll);
4682 }
4683
4690 inline GgQuaternion ggEulerQuaternion(const GLfloat* e)
4691 {
4692 return ggEulerQuaternion(e[0], e[1], e[2]);
4693 }
4694
4702 {
4703 return ggEulerQuaternion(e[0], e[1], e[2]);
4704 }
4705
4714 inline GgQuaternion ggSlerp(const GLfloat* a, const GLfloat* b, GLfloat t)
4715 {
4716 GgQuaternion r;
4717 return r.loadSlerp(a, b, t);
4718 }
4719
4728 inline GgQuaternion ggSlerp(const GgQuaternion& q, const GgQuaternion& r, GLfloat t)
4729 {
4730 return ggSlerp(q.data(), r.data(), t);
4731 }
4732
4741 inline GgQuaternion ggSlerp(const GgQuaternion& q, const GLfloat* a, GLfloat t)
4742 {
4743 return ggSlerp(q.data(), a, t);
4744 }
4745
4754 inline GgQuaternion ggSlerp(const GLfloat* a, const GgQuaternion& q, GLfloat t)
4755 {
4756 return ggSlerp(a, q.data(), t);
4757 }
4758
4765 inline GLfloat ggNorm(const GgQuaternion& q)
4766 {
4767 return q.norm();
4768 }
4769
4777 {
4778 return q.normalize();
4779 }
4780
4788 {
4789 return q.conjugate();
4790 }
4791
4799 {
4800 return q.invert();
4801 }
4802
4807 {
4808 bool drag; // ドラッグ中か否か
4809 GLfloat start[2]; // ドラッグ開始位置
4810 GLfloat scale[2]; // マウスの絶対位置→ウィンドウ内での相対位置の換算係数
4811 GgQuaternion cq; // 回転の初期値 (四元数)
4812 GgMatrix rt; // 回転の変換行列
4813
4814 public:
4815
4822 {
4823 reset(q);
4824 }
4825
4829 ~GgTrackball() = default;
4830
4837 {
4839 return *this;
4840 }
4841
4851 void region(GLfloat w, GLfloat h);
4852
4862 void region(int w, int h)
4863 {
4864 region(static_cast<GLfloat>(w), static_cast<GLfloat>(h));
4865 }
4866
4876 void begin(GLfloat x, GLfloat y);
4877
4887 void motion(GLfloat x, GLfloat y);
4888
4894 void rotate(const GgQuaternion& q);
4895
4905 void end(GLfloat x, GLfloat y);
4906
4912 void reset(const GgQuaternion& q = ggIdentityQuaternion());
4913
4919 const GLfloat* getStart() const
4920 {
4921 return start;
4922 }
4923
4927 const GLfloat& getStart(int direction) const
4928 {
4929 return start[direction];
4930 }
4931
4937 void getStart(GLfloat* position) const
4938 {
4939 position[0] = start[0];
4940 position[1] = start[1];
4941 }
4942
4948 const GLfloat* getScale() const
4949 {
4950 return scale;
4951 }
4952
4958 const GLfloat getScale(int direction) const
4959 {
4960 return scale[direction];
4961 }
4962
4968 void getScale(GLfloat* factor) const
4969 {
4970 factor[0] = scale[0];
4971 factor[1] = scale[1];
4972 }
4973
4980 {
4981 return *this;
4982 }
4983
4989 const GgMatrix& getMatrix() const
4990 {
4991 return rt;
4992 }
4993
4999 const GLfloat* get() const
5000 {
5001 return rt.get();
5002 }
5003 };
5004
5015 extern bool ggSaveTga(
5016 const std::string& name,
5017 const void* buffer,
5018 unsigned int width,
5019 unsigned int height,
5020 unsigned int depth
5021 );
5022
5029 extern bool ggSaveColor(const std::string& name);
5030
5037 extern bool ggSaveDepth(const std::string& name);
5038
5049 extern bool ggReadImage(
5050 const std::string& name,
5051 std::vector<GLubyte>& image,
5052 GLsizei* pWidth,
5053 GLsizei* pHeight,
5054 GLenum* pFormat
5055 );
5056
5070 extern GLuint ggLoadTexture(
5071 const GLvoid* image,
5072 GLsizei width,
5073 GLsizei height,
5074 GLenum format = GL_RGB,
5075 GLenum type = GL_UNSIGNED_BYTE,
5076 GLenum internal = GL_RGB,
5077 GLenum wrap = GL_CLAMP_TO_EDGE,
5078 bool swizzle = false
5079 );
5080
5091 extern GLuint ggLoadImage(
5092 const std::string& name,
5093 GLsizei* pWidth = nullptr,
5094 GLsizei* pHeight = nullptr,
5095 GLenum internal = GL_RGBA,
5096 GLenum wrap = GL_CLAMP_TO_EDGE
5097 );
5098
5110 extern void ggCreateNormalMap(
5111 const GLubyte* hmap,
5112 GLsizei width,
5113 GLsizei height,
5114 GLenum format,
5115 GLfloat nz,
5116 GLenum internal,
5117 std::vector<GgVector>& nmap
5118 );
5119
5130 extern GLuint ggLoadHeight(
5131 const std::string& name,
5132 GLfloat nz,
5133 GLsizei* pWidth = nullptr,
5134 GLsizei* pHeight = nullptr,
5135 GLenum internal = GL_RGBA
5136 );
5137
5151 extern GLuint ggCreateShader(
5152 const std::string& vsrc,
5153 const std::string& fsrc = "",
5154 const std::string& gsrc = "",
5155 GLint nvarying = 0,
5156 const char* const* varyings = nullptr,
5157 const std::string& vtext = "vertex shader",
5158 const std::string& ftext = "fragment shader",
5159 const std::string& gtext = "geometry shader");
5160
5171 extern GLuint ggLoadShader(
5172 const std::string& vert,
5173 const std::string& frag = "",
5174 const std::string& geom = "",
5175 GLint nvarying = 0,
5176 const char* const* varyings = nullptr
5177 );
5178
5187 inline GLuint ggLoadShader(
5188 const std::array<std::string, 3>& files,
5189 GLint nvarying = 0,
5190 const char* const* varyings = nullptr
5191 )
5192 {
5193 return ggLoadShader(files[0], files[1], files[2], nvarying, varyings);
5194 }
5195
5196#if !defined(__APPLE__)
5204 extern GLuint ggCreateComputeShader(
5205 const std::string& csrc,
5206 const std::string& ctext = "compute shader"
5207 );
5208
5215 extern GLuint ggLoadComputeShader(const std::string& comp);
5216#endif
5217
5225 {
5226 // テクスチャ名
5227 GLuint texture;
5228
5229 // テクスチャの縦横の画素数
5230 GLsizei size[2];
5231
5232 public:
5233
5247 const GLvoid* image,
5248 GLsizei width,
5249 GLsizei height,
5250 GLenum format = GL_RGB,
5251 GLenum type = GL_UNSIGNED_BYTE,
5252 GLenum internal = GL_RGBA,
5253 GLenum wrap = GL_CLAMP_TO_EDGE,
5254 bool swizzle = false
5255 ) :
5256 texture{ ggLoadTexture(image, width, height, format, type, internal, wrap, swizzle) },
5257 size{ width, height }
5258 {
5259 }
5260
5266 GgTexture(const GgTexture& texture) = delete;
5267
5277 GgTexture(GgTexture&& o) noexcept :
5278 texture{ o.texture },
5279 size{ o.size[0], o.size[1] }
5280 {
5281 o.texture = 0;
5282 }
5283
5287 virtual ~GgTexture()
5288 {
5289 glBindTexture(GL_TEXTURE_2D, 0);
5290 glDeleteTextures(1, &texture);
5291 }
5292
5299 GgTexture& operator=(const GgTexture& texture) = delete;
5300
5311 {
5312 if (&o != this)
5313 {
5314 // 保持しているテクスチャを削除する
5315 glBindTexture(GL_TEXTURE_2D, 0);
5316 glDeleteTextures(1, &texture);
5317
5318 // テクスチャ名の所有権を移動する
5319 texture = o.texture;
5320 size[0] = o.size[0];
5321 size[1] = o.size[1];
5322 o.texture = 0;
5323 }
5324
5325 return *this;
5326 }
5327
5331 void bind() const
5332 {
5333 glBindTexture(GL_TEXTURE_2D, texture);
5334 }
5335
5339 void unbind() const
5340 {
5341 glBindTexture(GL_TEXTURE_2D, 0);
5342 }
5343
5349 void swapRandB(bool swizzle) const;
5350
5356 const GLsizei& getWidth() const
5357 {
5358 return size[0];
5359 }
5360
5366 const GLsizei& getHeight() const
5367 {
5368 return size[1];
5369 }
5370
5376 void getSize(GLsizei* size) const
5377 {
5378 size[0] = getWidth();
5379 size[1] = getHeight();
5380 }
5381
5387 const GLsizei* getSize() const
5388 {
5389 return size;
5390 }
5391
5397 const GLuint& getTexture() const
5398 {
5399 return texture;
5400 }
5401 };
5402
5410 {
5411 // テクスチャ
5412 std::shared_ptr<GgTexture> texture;
5413
5414 public:
5415
5420 {
5421 }
5422
5436 const GLvoid* image,
5437 GLsizei width,
5438 GLsizei height,
5439 GLenum format = GL_RGB,
5440 GLenum type = GL_UNSIGNED_BYTE,
5441 GLenum internal = GL_RGB,
5442 GLenum wrap = GL_CLAMP_TO_EDGE,
5443 bool swizzle = true
5444 )
5445 {
5446 load(image, width, height, format, type, internal, wrap, swizzle);
5447 }
5448
5457 const std::string& name,
5458 GLenum internal = 0,
5459 GLenum wrap = GL_CLAMP_TO_EDGE
5460 )
5461 {
5462 load(name, internal, wrap);
5463 }
5464
5469 {
5470 }
5471
5484 void load(
5485 const GLvoid* image,
5486 GLsizei width,
5487 GLsizei height,
5488 GLenum format = GL_RGB,
5489 GLenum type = GL_UNSIGNED_BYTE,
5490 GLenum internal = GL_RGB,
5491 GLenum wrap = GL_CLAMP_TO_EDGE,
5492 bool swizzle = true
5493 )
5494 {
5495 // テクスチャを作成する
5496 texture = std::make_shared<GgTexture>(image, width, height, format, type, internal, wrap, swizzle);
5497 }
5498
5506 void load(
5507 const std::string& name,
5508 GLenum internal = 0,
5509 GLenum wrap = GL_CLAMP_TO_EDGE
5510 );
5511
5517 explicit operator bool() const noexcept
5518 {
5519 return texture != nullptr;
5520 }
5521
5527 bool operator!() const noexcept
5528 {
5529 return !static_cast<bool>(*this);
5530 }
5531
5537 const GgTexture* get() const
5538 {
5539 return texture.get();
5540 }
5541
5547 GLuint getTexture() const
5548 {
5549 return texture ? texture->getTexture() : 0;
5550 }
5551
5557 GLsizei getWidth() const
5558 {
5559 return texture ? texture->getWidth() : 0;
5560 }
5561
5567 GLsizei getHeight() const
5568 {
5569 return texture ? texture->getHeight() : 0;
5570 }
5571
5577 void getSize(GLsizei* size) const
5578 {
5579 if (texture) texture->getSize(size);
5580 }
5581
5587 const GLsizei* getSize() const
5588 {
5589 return texture ? texture->getSize() : nullptr;
5590 }
5591
5595 void bind() const
5596 {
5597 if (texture) texture->bind();
5598 }
5599
5603 void unbind() const
5604 {
5605 if (texture) texture->unbind();
5606 }
5607 };
5608
5616 {
5617 // テクスチャ
5618 std::shared_ptr<GgTexture> texture;
5619
5620 public:
5621
5626 {
5627 }
5628
5640 const GLubyte* image,
5641 GLsizei width,
5642 GLsizei height,
5643 GLenum format = GL_RED,
5644 GLfloat nz = 1.0f,
5645 GLenum internal = GL_RGBA
5646 )
5647 {
5648 // 法線マップのテクスチャを作成する
5649 load(image, width, height, format, nz, internal);
5650 }
5651
5660 const std::string& name,
5661 GLfloat nz = 1.0f,
5662 GLenum internal = GL_RGBA
5663 )
5664 {
5665 // 法線マップのテクスチャを作成する
5666 load(name, nz, internal);
5667 }
5668
5673 {
5674 }
5675
5686 void load(
5687 const GLubyte* hmap,
5688 GLsizei width,
5689 GLsizei height,
5690 GLenum format = GL_RED,
5691 GLfloat nz = 1.0f,
5692 GLenum internal = GL_RGBA
5693 )
5694 {
5695 // 法線マップ
5696 std::vector<GgVector> nmap;
5697
5698 // 法線マップを作成する
5699 ggCreateNormalMap(hmap, width, height, format, nz, internal, nmap);
5700
5701 // テクスチャを作成する
5702 texture = std::make_shared<GgTexture>(nmap.data(), width, height, GL_RGBA, GL_FLOAT, internal, GL_REPEAT);
5703 }
5704
5712 void load(
5713 const std::string& name,
5714 GLfloat nz = 1.0f,
5715 GLenum internal = GL_RGBA
5716 );
5717
5723 explicit operator bool() const noexcept
5724 {
5725 return texture != nullptr;
5726 }
5727
5733 bool operator!() const noexcept
5734 {
5735 return !static_cast<bool>(*this);
5736 }
5737
5743 const GgTexture* get() const
5744 {
5745 return texture.get();
5746 }
5747
5753 GLuint getTexture() const
5754 {
5755 return texture ? texture->getTexture() : 0;
5756 }
5757
5763 GLsizei getWidth() const
5764 {
5765 return texture ? texture->getWidth() : 0;
5766 }
5767
5773 GLsizei getHeight() const
5774 {
5775 return texture ? texture->getHeight() : 0;
5776 }
5777
5783 void getSize(GLsizei* size) const
5784 {
5785 if (texture) texture->getSize(size);
5786 }
5787
5793 const GLsizei* getSize() const
5794 {
5795 return texture ? texture->getSize() : nullptr;
5796 }
5797
5801 void bind() const
5802 {
5803 if (texture) texture->bind();
5804 }
5805
5809 void unbind() const
5810 {
5811 if (texture) texture->unbind();
5812 }
5813 };
5814
5821 template <typename T>
5823 {
5824 // ターゲット
5825 const GLenum target;
5826
5827 // バッファオブジェクトのアライメントを考慮したデータの間隔
5828 const GLsizei stride;
5829
5830 // データの数
5831 const GLsizei count;
5832
5833 // バッファオブジェクト (ムーブしたら 0 になる)
5834 GLuint buffer;
5835
5836 public:
5837
5848 GLenum target,
5849 const T* data,
5850 GLsizei stride,
5851 GLsizei count,
5852 GLenum usage
5853 ) :
5854 target{ target },
5855 stride{ stride },
5856 count{ count },
5857 buffer{ [] { GLuint buffer; glGenBuffers(1, &buffer); return buffer; } () }
5858 {
5859 // バッファオブジェクトのメモリを確保してデータを転送する
5860 glBindBuffer(target, buffer);
5861 glBufferData(target, getStride() * count, data, usage);
5862 }
5863
5869 GgBuffer(const GgBuffer<T>& buffer) = delete;
5870
5881 GgBuffer(GgBuffer<T>&& o) noexcept :
5882 target{ o.target },
5883 stride{ o.stride },
5884 count{ o.count },
5885 buffer{ o.buffer }
5886 {
5887 o.buffer = 0;
5888 }
5889
5893 virtual ~GgBuffer()
5894 {
5895 // バッファオブジェクトを削除する (ムーブ済みなら buffer は 0 で無視される)
5896 glBindBuffer(target, 0);
5897 glDeleteBuffers(1, &buffer);
5898 }
5899
5906 GgBuffer<T>& operator=(const GgBuffer<T>& buffer) = delete;
5907
5913 const GLuint& getTarget() const
5914 {
5915 return target;
5916 }
5917
5923 GLsizeiptr getStride() const
5924 {
5925 return static_cast<GLsizeiptr>(stride);
5926 }
5927
5933 const GLsizei& getCount() const
5934 {
5935 return count;
5936 }
5937
5943 const GLuint& getBuffer() const
5944 {
5945 return buffer;
5946 }
5947
5951 void bind() const
5952 {
5953 glBindBuffer(target, buffer);
5954 }
5955
5959 void unbind() const
5960 {
5961 glBindBuffer(target, 0);
5962 }
5963
5969 void* map() const
5970 {
5971 glBindBuffer(target, buffer);
5972#if defined(GL_GLES_PROTOTYPES)
5973 return glMapBufferRange(target, 0, getStride() * count, GL_MAP_WRITE_BIT);
5974#else
5975 return glMapBuffer(target, GL_WRITE_ONLY);
5976#endif
5977 }
5978
5986 void* map(GLint first, GLsizei count) const
5987 {
5988 // count が 0 なら全データをマップする
5989 if (count == 0) count = getCount();
5990 if (first + count > getCount()) count = getCount() - first;
5991
5992 glBindBuffer(target, buffer);
5993 return glMapBufferRange(target, getStride() * first, getStride() * count, GL_MAP_WRITE_BIT);
5994 }
5995
5999 void unmap() const
6000 {
6001 glUnmapBuffer(target);
6002 }
6003
6011 void send(const T* data, GLint first, GLsizei count) const
6012 {
6013 // count が 0 なら全データを転送する
6014 if (count == 0) count = getCount();
6015 if (first + count > getCount()) count = getCount() - first;
6016
6017 // データを既存のバッファオブジェクトに転送する
6018 glBindBuffer(target, buffer);
6019 glBufferSubData(target, getStride() * first, getStride() * count, data);
6020 }
6021
6029 void read(T* data, GLint first, GLsizei count) const
6030 {
6031 // count が 0 なら全データを抽出する
6032 if (count == 0) count = getCount();
6033 if (first + count > getCount()) count = getCount() - first;
6034
6035 // データをバッファオブジェクトから抽出する
6036 glBindBuffer(target, buffer);
6037#if defined(GL_GLES_PROTOTYPES)
6038 const GLsizeiptr begin{ getStride() * first };
6039 const GLsizeiptr range{ getStride() * count };
6040 T* const source{ glMapBufferRange(target, begin, range, GL_MAP_READ_BIT) };
6041 std::copy(source, source + count, data);
6042 glUnmapBuffer(target);
6043#else
6044 glGetBufferSubData(target, getStride() * first, getStride() * count, data);
6045#endif
6046 }
6047
6056 void copy(GLuint src_buffer, GLint src_first = 0, GLint dst_first = 0, GLsizei count = 0) const
6057 {
6058 // count が 0 なら全データを複写する
6059 if (count == 0) count = getCount();
6060 if (src_first + count > getCount()) count = getCount() - src_first;
6061 if (dst_first + count > getCount()) count = getCount() - dst_first;
6062
6063 // データの間隔
6064 const GLsizeiptr stride{ getStride() };
6065
6066 glBindBuffer(GL_COPY_READ_BUFFER, src_buffer);
6067 glBindBuffer(GL_COPY_WRITE_BUFFER, buffer);
6068 glCopyBufferSubData(GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER,
6069 stride * src_first, stride * dst_first, stride * count);
6070 glBindBuffer(GL_COPY_WRITE_BUFFER, 0);
6071 glBindBuffer(GL_COPY_READ_BUFFER, 0);
6072 }
6073 };
6074
6081 template <typename T>
6083 {
6084 // ユニフォームバッファオブジェクト
6085 std::shared_ptr<GgBuffer<T>> uniform;
6086
6087 public:
6088
6093 {
6094 }
6095
6103 GgUniformBuffer(const T* data, GLsizei count, GLenum usage = GL_STATIC_DRAW)
6104 {
6105 load(data, count, usage);
6106 }
6107
6115 GgUniformBuffer(const T& data, GLsizei count, GLenum usage = GL_STATIC_DRAW)
6116 {
6117 load(data, count, usage);
6118 }
6119
6124 {
6125 }
6126
6132 const GLuint& getTarget() const
6133 {
6134 return uniform->getTarget();
6135 }
6136
6142 GLsizeiptr getStride() const
6143 {
6144 return uniform->getStride();
6145 }
6146
6152 const GLsizei& getCount() const
6153 {
6154 return uniform->getCount();
6155 }
6156
6162 const GLuint& getBuffer() const
6163 {
6164 return uniform->getBuffer();
6165 }
6166
6170 void bind() const
6171 {
6172 uniform->bind();
6173 }
6174
6178 void unbind() const
6179 {
6180 uniform->unbind();
6181 }
6182
6188 void* map() const
6189 {
6190 return uniform->map();
6191 }
6192
6200 void* map(GLint first, GLsizei count) const
6201 {
6202 return uniform->map(first, count);
6203 }
6204
6208 void unmap() const
6209 {
6210 uniform->unmap();
6211 }
6212
6220 void load(const T* data, GLsizei count, GLenum usage = GL_STATIC_DRAW)
6221 {
6222 // バッファオブジェクト上のデータの間隔
6223 const GLsizei stride{ (((static_cast<GLint>(sizeof(T)) - 1) / ggBufferAlignment) + 1) * ggBufferAlignment };
6224
6225 // ユニフォームバッファオブジェクトを確保する
6226 uniform = std::make_shared<GgBuffer<T>>(GL_UNIFORM_BUFFER, nullptr, stride, count, usage);
6227
6228 // 確保したユニフォームバッファオブジェクトにデータを転送する
6229 if (data) send(data, 0, sizeof(T), 0, count);
6230 }
6231
6239 void load(const T& data, GLsizei count, GLenum usage = GL_STATIC_DRAW)
6240 {
6241 // バッファオブジェクト上のデータの間隔
6242 const GLsizei stride{ (((static_cast<GLint>(sizeof(T)) - 1) / ggBufferAlignment) + 1) * ggBufferAlignment };
6243
6244 // ユニフォームバッファオブジェクトを確保する
6245 uniform = std::make_shared<GgBuffer<T>>(GL_UNIFORM_BUFFER, nullptr, stride, count, usage);
6246
6247 // 確保したユニフォームバッファオブジェクトにデータを転送する
6248 fill(&data, 0, sizeof(T), 0, count);
6249 }
6250
6260 void send(
6261 const GLvoid* data,
6262 GLint offset = 0,
6263 GLsizei size = sizeof(T),
6264 GLint first = 0,
6265 GLsizei count = 0
6266 ) const
6267 {
6268 // count が 0 なら全データを転送する
6269 if (count == 0) count = getCount();
6270 if (first + count > getCount()) count = getCount() - first;
6271
6272 // 転送元のデータの先頭
6273 const char* source{ reinterpret_cast<const char*>(data) };
6274
6275 // ターゲット
6276 const GLuint target{ getTarget() };
6277
6278 // データの間隔
6279 const GLsizeiptr stride{ getStride() };
6280
6281 // first 番目のブロックから count 個の各ブロックの先頭から offset バイトの位置にデータを転送する
6282 bind();
6283 for (GLsizei i = 0; i < count; ++i)
6284 {
6285 glBufferSubData(target, stride * (first + i) + offset, size, source + size * i);
6286 }
6287 }
6288
6298 void fill(
6299 const GLvoid* data,
6300 GLint offset = 0,
6301 GLsizei size = sizeof(T),
6302 GLint first = 0,
6303 GLsizei count = 0
6304 ) const
6305 {
6306 // count が 0 なら全データを転送する
6307 if (count == 0) count = getCount();
6308 if (first + count > getCount()) count = getCount() - first;
6309
6310 // ターゲット
6311 const GLuint target{ getTarget() };
6312
6313 // データの間隔
6314 const GLsizeiptr stride{ getStride() };
6315
6316 // first 番目のブロックから count 個の各ブロックの先頭から offset バイトの位置にデータを転送する
6317 bind();
6318 for (GLsizei i = 0; i < count; ++i)
6319 {
6320 glBufferSubData(target, stride * (first + i) + offset, size, data);
6321 }
6322 }
6323
6333 void read(
6334 GLvoid* data,
6335 GLint offset = 0,
6336 GLsizei size = sizeof(T),
6337 GLint first = 0,
6338 GLsizei count = 0
6339 ) const
6340 {
6341 // count が 0 なら全データを転送する
6342 if (count == 0) count = getCount();
6343 if (first + count > getCount()) count = getCount() - first;
6344
6345 // 抽出先のデータの先頭
6346 char* const destination{ reinterpret_cast<char*>(data) };
6347
6348 // ターゲット
6349 const GLuint target{ getTarget() };
6350
6351 // データの間隔
6352 const GLsizeiptr stride{ getStride() };
6353
6354 // データをユニフォームバッファオブジェクトから抽出する
6355 bind();
6356#if defined(GL_GLES_PROTOTYPES)
6357 const char* const source{ glMapBufferRange(target, stride * first, stride * count, GL_MAP_READ_BIT) };
6358 for (GLsizei i = 0; i < count; ++i)
6359 {
6360 const char* const begin{ source + stride * i + offset };
6361 const char* const end{ begin + size };
6362 std::copy(begin, end, destination + sizeof(T) * i);
6363 }
6364 glUnmapBuffer(target);
6365#else
6366 for (GLsizei i = 0; i < count; ++i)
6367 {
6368 glGetBufferSubData(target, stride * (first + i) + offset, size, destination + sizeof(T) * i);
6369 }
6370#endif
6371 }
6372
6381 void copy(
6382 GLuint src_buffer,
6383 GLint src_first = 0,
6384 GLint dst_first = 0,
6385 GLsizei count = 0
6386 ) const
6387 {
6388 // count が 0 なら全データを複写する
6389 if (count == 0) count = getCount();
6390 if (src_first + count > getCount()) count = getCount() - src_first;
6391 if (dst_first + count > getCount()) count = getCount() - dst_first;
6392
6393 // データの間隔
6394 const GLsizeiptr stride{ getStride() };
6395
6396 // ユニフォームバッファオブジェクトではブロックごとに転送する
6397 glBindBuffer(GL_COPY_READ_BUFFER, src_buffer);
6398 glBindBuffer(GL_COPY_WRITE_BUFFER, getBuffer());
6399 for (GLsizei i = 0; i < count; ++i)
6400 {
6401 glCopyBufferSubData(GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER,
6402 stride * (src_first + i), stride * (dst_first + i), sizeof(T));
6403 }
6404 glBindBuffer(GL_COPY_WRITE_BUFFER, 0);
6405 glBindBuffer(GL_COPY_READ_BUFFER, 0);
6406 }
6407 };
6408
6413 {
6414 // 頂点配列オブジェクト (ムーブしたら 0 になる)
6415 GLuint vao;
6416
6417 public:
6418
6424 GgVertexArray(GLenum mode = 0) :
6425 vao{ [] { GLuint vao; glGenVertexArrays(1, &vao); return vao; } () }
6426 {
6427 glBindVertexArray(vao);
6428 }
6429
6435 GgVertexArray(const GgVertexArray& array) = delete;
6436
6448 vao{ o.vao }
6449 {
6450 o.vao = 0;
6451 }
6452
6457 {
6458 // 頂点配列オブジェクトを削除する (ムーブ済みなら vao は 0 で無視される)
6459 glBindVertexArray(0);
6460 glDeleteVertexArrays(1, &vao);
6461 }
6462
6469 GgVertexArray& operator=(const GgVertexArray& array) = delete;
6470
6482 {
6483 if (&o != this)
6484 {
6485 // 保持している頂点配列オブジェクトを削除する
6486 glBindVertexArray(0);
6487 glDeleteVertexArrays(1, &vao);
6488
6489 // 頂点配列オブジェクト名の所有権を移動する
6490 vao = o.vao;
6491 o.vao = 0;
6492 }
6493
6494 return *this;
6495 }
6496
6502 const GLuint& get() const
6503 {
6504 return vao;
6505 }
6506
6510 void bind() const
6511 {
6512 glBindVertexArray(vao);
6513 }
6514 };
6515
6524 {
6525 // 頂点配列オブジェクト
6526 std::shared_ptr<GgVertexArray> object;
6527
6528 // 基本図形の種類
6529 GLenum mode;
6530
6531 public:
6532
6538 GgShape(GLenum mode = 0) :
6539 object{ std::make_shared<GgVertexArray>() },
6540 mode{ mode }
6541 {
6542 }
6543
6547 virtual ~GgShape()
6548 {
6549 }
6550
6556 virtual explicit operator bool() const noexcept
6557 {
6558 return object.get() != nullptr;
6559 }
6560
6566 virtual bool operator!() const noexcept
6567 {
6568 return !static_cast<bool>(*this);
6569 }
6570
6576 const GLuint& get() const
6577 {
6578 return object->get();
6579 }
6580
6586 void setMode(GLenum mode)
6587 {
6588 this->mode = mode;
6589 }
6590
6596 const GLenum& getMode() const
6597 {
6598 return this->mode;
6599 }
6600
6607 virtual void draw(GLint first = 0, GLsizei count = 0) const
6608 {
6609 object->bind();
6610 }
6611 };
6612
6617 : public GgShape
6618 {
6619 // 頂点バッファオブジェクト
6620 std::shared_ptr<GgBuffer<GgVector>> position;
6621
6622 public:
6623
6627 GgPoints(GLenum mode = GL_POINTS) :
6628 GgShape(mode)
6629 {
6630 }
6631
6641 const GgVector* pos,
6642 GLsizei countv,
6643 GLenum mode = GL_POINTS,
6644 GLenum usage = GL_STATIC_DRAW
6645 ) :
6646 GgPoints(mode)
6647 {
6648 load(pos, countv, usage);
6649 }
6650
6654 virtual ~GgPoints()
6655 {
6656 }
6657
6663 explicit operator bool() const noexcept
6664 {
6665 return position.get() != nullptr;
6666 }
6667
6673 bool operator!() const noexcept
6674 {
6675 return !static_cast<bool>(*this);
6676 }
6677
6683 const GLsizei& getCount() const
6684 {
6685 return position->getCount();
6686 }
6687
6693 const GLuint& getBuffer() const
6694 {
6695 return position->getBuffer();
6696 }
6697
6705 void send(const GgVector* pos, GLint first = 0, GLsizei count = 0) const
6706 {
6707 position->send(pos, first, count);
6708 }
6709
6717 void load(const GgVector* pos, GLsizei count, GLenum usage = GL_STATIC_DRAW);
6718
6725 virtual void draw(GLint first = 0, GLsizei count = 0) const;
6726 };
6727
6732 {
6735
6738
6743 {
6744 }
6745
6752 GgVertex(const GgVector& pos, const GgVector& norm) :
6753 position(pos),
6754 normal(norm)
6755 {
6756 }
6757
6769 GLfloat px, GLfloat py, GLfloat pz,
6770 GLfloat nx, GLfloat ny, GLfloat nz
6771 ) :
6772 position{ px, py, pz, 1.0f },
6773 normal{ nx, ny, nz, 0.0f }
6774 {
6775 }
6776
6783 GgVertex(const GLfloat* pos, const GLfloat* norm) :
6784 GgVertex(pos[0], pos[1], pos[2], norm[0], norm[1], norm[2])
6785 {
6786 }
6787 };
6788
6793 : public GgShape
6794 {
6795 // 頂点属性
6796 std::shared_ptr<GgBuffer<GgVertex>> vertex;
6797
6798 public:
6799
6805 GgTriangles(GLenum mode = GL_TRIANGLES) :
6806 GgShape(mode)
6807 {
6808 }
6809
6819 const GgVertex* vert,
6820 GLsizei count,
6821 GLenum mode = GL_TRIANGLES,
6822 GLenum usage = GL_STATIC_DRAW
6823 ) :
6824 GgTriangles(mode)
6825 {
6826 load(vert, count, usage);
6827 }
6828
6833 {
6834 }
6835
6841 const GLsizei& getCount() const
6842 {
6843 return vertex->getCount();
6844 }
6845
6851 const GLuint& getBuffer() const
6852 {
6853 return vertex->getBuffer();
6854 }
6855
6863 void send(const GgVertex* vert, GLint first = 0, GLsizei count = 0) const
6864 {
6865 vertex->send(vert, first, count);
6866 }
6867
6875 void load(const GgVertex* vert, GLsizei count, GLenum usage = GL_STATIC_DRAW);
6876
6883 virtual void draw(GLint first = 0, GLsizei count = 0) const;
6884 };
6885
6890 : public GgTriangles
6891 {
6892 // インデックスを格納する頂点バッファオブジェクト
6893 std::shared_ptr<GgBuffer<GLuint>> index;
6894
6895 public:
6896
6902 GgElements(GLenum mode = GL_TRIANGLES) :
6903 GgTriangles(mode)
6904 {
6905 }
6906
6918 const GgVertex* vert,
6919 GLsizei countv,
6920 const GLuint* face,
6921 GLsizei countf,
6922 GLenum mode = GL_TRIANGLES,
6923 GLenum usage = GL_STATIC_DRAW
6924 ) :
6925 GgElements(mode)
6926 {
6927 load(vert, countv, face, countf, usage);
6928 }
6929
6933 virtual ~GgElements()
6934 {
6935 }
6936
6941 const GLsizei& getIndexCount() const
6942 {
6943 return index->getCount();
6944 }
6945
6951 const GLuint& getIndexBuffer() const
6952 {
6953 return index->getBuffer();
6954 }
6955
6966 void send(
6967 const GgVertex* vert,
6968 GLuint firstv,
6969 GLsizei countv,
6970 const GLuint* face = nullptr,
6971 GLuint firstf = 0,
6972 GLsizei countf = 0
6973 ) const
6974 {
6975 GgTriangles::send(vert, firstv, countv);
6976 if (face != nullptr && countf > 0) index->send(face, firstf, countf);
6977 }
6978
6988 void load(
6989 const GgVertex* vert,
6990 GLsizei countv,
6991 const GLuint* face,
6992 GLsizei countf,
6993 GLenum usage = GL_STATIC_DRAW
6994 )
6995 {
6996 // 頂点バッファオブジェクトを作成する
6997 GgTriangles::load(vert, countv, usage);
6998
6999 // インデックスの頂点バッファオブジェクトを作成する
7000 index = std::make_shared<GgBuffer<GLuint>>(GL_ELEMENT_ARRAY_BUFFER, face, static_cast<GLsizei>(sizeof(GLuint)), countf, usage);
7001 }
7002
7009 virtual void draw(GLint first = 0, GLsizei count = 0) const;
7010 };
7011
7022 extern std::shared_ptr<GgPoints> ggPointsCube(
7023 GLsizei countv,
7024 GLfloat length = 1.0f,
7025 GLfloat cx = 0.0f,
7026 GLfloat cy = 0.0f,
7027 GLfloat cz = 0.0f
7028 );
7029
7040 extern std::shared_ptr<GgPoints> ggPointsSphere(
7041 GLsizei countv,
7042 GLfloat radius = 0.5f,
7043 GLfloat cx = 0.0f,
7044 GLfloat cy = 0.0f,
7045 GLfloat cz = 0.0f
7046 );
7047
7055 extern std::shared_ptr<GgTriangles> ggRectangle(
7056 GLfloat width = 1.0f,
7057 GLfloat height = 1.0f
7058 );
7059
7068 extern std::shared_ptr<GgTriangles> ggEllipse(
7069 GLfloat width = 1.0f,
7070 GLfloat height = 1.0f,
7071 GLuint slices = 16
7072 );
7073
7085 extern std::shared_ptr<GgTriangles> ggArraysObj(
7086 const std::string& name,
7087 bool normalize = false
7088 );
7089
7101 extern std::shared_ptr<GgElements> ggElementsObj(
7102 const std::string& name,
7103 bool normalize = false
7104 );
7105
7118 extern std::shared_ptr<GgElements> ggElementsMesh(
7119 GLuint slices,
7120 GLuint stacks,
7121 const GLfloat(*pos)[3],
7122 const GLfloat(*norm)[3] = nullptr
7123 );
7124
7135 extern std::shared_ptr<GgElements> ggElementsSphere(
7136 GLfloat radius = 1.0f,
7137 int slices = 16,
7138 int stacks = 8
7139 );
7140
7148 {
7149 // プログラム名 (ムーブしたら 0 になる)
7150 GLuint program;
7151
7152 public:
7153
7164 const std::string& vert,
7165 const std::string& frag = "",
7166 const std::string& geom = "",
7167 int nvarying = 0,
7168 const char* const* varyings = nullptr
7169 ) :
7170 program(ggLoadShader(vert, frag, geom, nvarying, varyings))
7171 {
7172 }
7173
7182 const std::array<std::string, 3>& files,
7183 int nvarying = 0,
7184 const char* const* varyings = nullptr
7185 ) :
7186 GgShader(files[0], files[1], files[2], nvarying, varyings)
7187 {
7188 }
7189
7195 GgShader(const GgShader& shader) = delete;
7196
7206 GgShader(GgShader&& o) noexcept :
7207 program{ o.program }
7208 {
7209 o.program = 0;
7210 }
7211
7215 virtual ~GgShader()
7216 {
7217 // シェーダプログラムを削除する (ムーブ済みなら program は 0 で無視される)
7218 glUseProgram(0);
7219 glDeleteProgram(program);
7220 }
7221
7228 GgShader& operator=(const GgShader& shader) = delete;
7229
7241 {
7242 if (&o != this)
7243 {
7244 // 保持しているシェーダプログラムを削除する
7245 glUseProgram(0);
7246 glDeleteProgram(program);
7247
7248 // プログラム名の所有権を移動する
7249 program = o.program;
7250 o.program = 0;
7251 }
7252
7253 return *this;
7254 }
7255
7259 void use() const
7260 {
7261 glUseProgram(program);
7262 }
7263
7267 void unuse() const
7268 {
7269 glUseProgram(0);
7270 }
7271
7277 GLuint get() const
7278 {
7279 return program;
7280 }
7281 };
7282
7287 {
7288 // シェーダー
7289 std::shared_ptr<GgShader> shader;
7290
7291 // 投影変換行列の uniform 変数の場所
7292 GLint mpLoc;
7293
7294 // モデルビュー変換行列の uniform 変数の場所
7295 GLint mvLoc;
7296
7297 public:
7298
7303 mpLoc{ -1 },
7304 mvLoc{ -1 }
7305 {
7306 }
7307
7318 const std::string& vert,
7319 const std::string& frag = "",
7320 const std::string& geom = "",
7321 GLint nvarying = 0,
7322 const char* const* varyings = nullptr
7323 ) :
7325 {
7326 load(vert, frag, geom, nvarying, varyings);
7327 }
7328
7337 const std::array<std::string, 3>& files,
7338 int nvarying = 0,
7339 const char* const* varyings = nullptr
7340 ) :
7341 GgPointShader(files[0], files[1], files[2], nvarying, varyings)
7342 {
7343 }
7344
7349 {
7350 }
7351
7362 bool load(
7363 const std::string& vert,
7364 const std::string& frag = "",
7365 const std::string& geom = "",
7366 GLint nvarying = 0,
7367 const char* const* varyings = nullptr
7368 )
7369 {
7370 // シェーダを作成する
7371 shader = std::make_shared<GgShader>(vert, frag, geom, nvarying, varyings);
7372
7373 // プログラム名を取り出す
7374 const GLuint program(shader->get());
7375
7376 // プログラムオブジェクトが作成できていなければ戻る
7377 if (program == 0) return false;
7378
7379 // 変換行列の uniform 変数の場所
7380 mpLoc = glGetUniformLocation(program, "mp");
7381 mvLoc = glGetUniformLocation(program, "mv");
7382
7383 // プログラムオブジェクトの作成に成功した
7384 return true;
7385 }
7386
7395 bool load(
7396 const std::array<std::string, 3>& files,
7397 GLint nvarying = 0,
7398 const char* const* varyings = nullptr
7399 )
7400 {
7401 return load(files[0], files[1], files[2], nvarying, varyings);
7402 }
7403
7409 virtual void loadProjectionMatrix(const GLfloat* mp) const
7410 {
7411 glUniformMatrix4fv(mpLoc, 1, GL_FALSE, mp);
7412 }
7413
7419 virtual void loadProjectionMatrix(const GgMatrix& mp) const
7420 {
7422 }
7423
7429 virtual void loadModelviewMatrix(const GLfloat* mv) const
7430 {
7431 glUniformMatrix4fv(mvLoc, 1, GL_FALSE, mv);
7432 }
7433
7439 virtual void loadModelviewMatrix(const GgMatrix& mv) const
7440 {
7442 }
7443
7450 virtual void loadMatrix(const GLfloat* mp, const GLfloat* mv) const
7451 {
7454 }
7455
7462 virtual void loadMatrix(const GgMatrix& mp, const GgMatrix& mv) const
7463 {
7464 loadMatrix(mp.get(), mv.get());
7465 }
7466
7470 virtual void use() const
7471 {
7472 shader->use();
7473 }
7474
7480 void use(const GLfloat* mp) const
7481 {
7482 use();
7484 }
7485
7491 void use(const GgMatrix& mp) const
7492 {
7493 use(mp.get());
7494 }
7495
7502 void use(const GLfloat* mp, const GLfloat* mv) const
7503 {
7504 use(mp);
7506 }
7507
7514 void use(const GgMatrix& mp, const GgMatrix& mv) const
7515 {
7516 use(mp.get(), mv.get());
7517 }
7518
7522 void unuse() const
7523 {
7524 shader->unuse();
7525 }
7526
7532 GLuint get() const
7533 {
7534 return shader->get();
7535 }
7536 };
7537
7542 : public GgPointShader
7543 {
7544 // モデルビュー変換の法線変換行列の uniform 変数の場所
7545 GLint mnLoc;
7546
7547 public:
7548
7553 GgPointShader(),
7554 mnLoc{ -1 }
7555 {
7556 }
7557
7568 const std::string& vert,
7569 const std::string& frag = "",
7570 const std::string& geom = "",
7571 GLint nvarying = 0,
7572 const char* const* varyings = nullptr
7573 )
7574 {
7575 load(vert, frag, geom, nvarying, varyings);
7576 }
7577
7586 const std::array<std::string, 3>& files,
7587 GLint nvarying = 0,
7588 const char* const* varyings = nullptr
7589 ) :
7590 GgSimpleShader(files[0], files[1], files[2], nvarying, varyings)
7591 {
7592 }
7593
7598 GgPointShader(o),
7599 mnLoc{ o.mnLoc }
7600 {
7601 }
7602
7607 {
7608 }
7609
7617 {
7618 if (&o != this)
7619 {
7620 GgPointShader::operator=(o);
7621 mnLoc = o.mnLoc;
7622 }
7623
7624 return *this;
7625 }
7626
7637 bool load(
7638 const std::string& vert,
7639 const std::string& frag = "",
7640 const std::string& geom = "",
7641 GLint nvarying = 0,
7642 const char* const* varyings = nullptr
7643 );
7644
7653 bool load(
7654 const std::array<std::string, 3>& files,
7655 GLint nvarying = 0,
7656 const char* const* varyings = nullptr
7657 )
7658 {
7659 return load(files[0], files[1], files[2], nvarying, varyings);
7660 }
7661
7668 virtual void loadModelviewMatrix(const GLfloat* mv, const GLfloat* mn) const
7669 {
7671 glUniformMatrix4fv(mnLoc, 1, GL_FALSE, mn);
7672 }
7673
7680 virtual void loadModelviewMatrix(const GgMatrix& mv, const GgMatrix& mn) const
7681 {
7682 loadModelviewMatrix(mv.get(), mn.get());
7683 }
7684
7690 virtual void loadModelviewMatrix(const GLfloat* mv) const
7691 {
7692 loadModelviewMatrix(mv, GgMatrix(mv).normal().get());
7693 }
7694
7700 virtual void loadModelviewMatrix(const GgMatrix& mv) const
7701 {
7703 }
7704
7712 virtual void loadMatrix(const GLfloat* mp, const GLfloat* mv, const GLfloat* mn) const
7713 {
7715 glUniformMatrix4fv(mnLoc, 1, GL_FALSE, mn);
7716 }
7717
7725 virtual void loadMatrix(const GgMatrix& mp, const GgMatrix& mv, const GgMatrix& mn) const
7726 {
7727 loadMatrix(mp.get(), mv.get(), mn.get());
7728 }
7729
7736 virtual void loadMatrix(const GLfloat* mp, const GLfloat* mv) const
7737 {
7738 loadMatrix(mp, mv, GgMatrix(mv).normal());
7739 }
7740
7747 virtual void loadMatrix(const GgMatrix& mp, const GgMatrix& mv) const
7748 {
7749 loadMatrix(mp, mv, mv.normal());
7750 }
7751
7762
7767 : public GgUniformBuffer<Light>
7768 {
7769 public:
7770
7779 const Light* light = nullptr,
7780 GLsizei count = 1,
7781 GLenum usage = GL_STATIC_DRAW
7782 ) :
7783 GgUniformBuffer<Light>(light, count, usage)
7784 {
7785 }
7786
7795 const Light& light,
7796 GLsizei count = 1,
7797 GLenum usage = GL_STATIC_DRAW
7798 ) :
7799 GgUniformBuffer<Light>(light, count, usage)
7800 {
7801 }
7802
7814 GgVector ambient,
7815 GgVector diffuse,
7816 GgVector specular,
7817 GgVector position,
7818 GLsizei count = 1,
7819 GLenum usage = GL_STATIC_DRAW
7820 ) :
7821 GgUniformBuffer<Light>(Light{ ambient, diffuse, specular, position }, count, usage)
7822 {
7823 }
7824
7829 {
7830 }
7831
7842 void loadAmbient(
7843 GLfloat r, GLfloat g, GLfloat b, GLfloat a = 1.0f,
7844 GLint first = 0, GLsizei count = 1
7845 ) const;
7846
7854 void loadAmbient(const GgVector& ambient, GLint first = 0, GLsizei count = 1) const;
7855
7863 void loadAmbient(const GLfloat* ambient, GLint first = 0, GLsizei count = 1) const
7864 {
7865 // first 番目のブロックから count 個の ambient 要素に値を設定する
7866 send(ambient, offsetof(Light, ambient), sizeof(Light::ambient), first, count);
7867 }
7868
7879 void loadDiffuse(
7880 GLfloat r, GLfloat g, GLfloat b, GLfloat a = 1.0f,
7881 GLint first = 0, GLsizei count = 1
7882 ) const;
7883
7891 void loadDiffuse(const GgVector& diffuse, GLint first = 0, GLsizei count = 1) const;
7892
7900 void loadDiffuse(const GLfloat* diffuse, GLint first = 0, GLsizei count = 1) const
7901 {
7902 // first 番目のブロックから count 個の diffuse 要素に値を設定する
7903 send(diffuse, offsetof(Light, diffuse), sizeof(Light::diffuse), first, count);
7904 }
7905
7916 void loadSpecular(
7917 GLfloat r, GLfloat g, GLfloat b, GLfloat a = 1.0f,
7918 GLint first = 0, GLsizei count = 1
7919 ) const;
7920
7928 void loadSpecular(const GgVector& specular, GLint first = 0, GLsizei count = 1) const;
7929
7937 void loadSpecular(const GLfloat* specular, GLint first = 0, GLsizei count = 1) const
7938 {
7939 // first 番目のブロックから count 個の specular 要素に値を設定する
7940 send(specular, offsetof(Light, specular), sizeof(Light::specular), first, count);
7941 }
7942
7950 void loadColor(const Light& color, GLint first = 0, GLsizei count = 1) const;
7951
7962 void loadPosition(
7963 GLfloat x, GLfloat y, GLfloat z, GLfloat w = 1.0f,
7964 GLint first = 0, GLsizei count = 1
7965 ) const;
7966
7974 void loadPosition(const GgVector& position, GLint first = 0, GLsizei count = 1) const;
7975
7983 void loadPosition(const GLfloat* position, GLint first = 0, GLsizei count = 1) const
7984 {
7985 // first 番目のブロックから count 個の position 要素に値を設定する
7986 send(position, offsetof(Light, position), sizeof(Light::position), first, count);
7987 }
7988
7996 void loadPosition(const GgVector* position, GLint first = 0, GLsizei count = 1) const
7997 {
7998 loadPosition(position->data(), first, count);
7999 }
8000
8008 void load(const Light* light, GLint first = 0, GLsizei count = 1) const
8009 {
8010 send(light, 0, sizeof(Light), first, count);
8011 }
8012
8020 void load(const Light& light, GLint first = 0, GLsizei count = 1) const
8021 {
8022 load(&light, first, count);
8023 }
8024
8030 void select(GLint i = 0) const
8031 {
8032 // バッファオブジェクトの i 番目のブロックの位置
8033 const GLintptr offset(static_cast<GLintptr>(getStride()) * i);
8034 glBindBufferRange(getTarget(), LightBindingPoint, getBuffer(), offset, sizeof(Light));
8035 }
8036 };
8037
8048
8053 : public GgUniformBuffer<Material>
8054 {
8055 public:
8056
8065 const Material* material = nullptr,
8066 GLsizei count = 1,
8067 GLenum usage = GL_STATIC_DRAW
8068 ) :
8069 GgUniformBuffer<Material>(material, count, usage)
8070 {
8071 }
8072
8081 const Material& material,
8082 GLsizei count = 1,
8083 GLenum usage = GL_STATIC_DRAW
8084 ) :
8085 GgUniformBuffer<Material>(material, count, usage)
8086 {
8087 }
8088
8100 GgVector ambient,
8101 GgVector diffuse,
8102 GgVector specular,
8103 GLfloat shininess,
8104 GLsizei count = 1,
8105 GLenum usage = GL_STATIC_DRAW
8106 ) :
8107 GgUniformBuffer<Material>(Material{ ambient, diffuse, specular, shininess }, count, usage)
8108 {
8109 }
8110
8115 {
8116 }
8117
8128 void loadAmbient(
8129 GLfloat r, GLfloat g, GLfloat b, GLfloat a = 1.0f,
8130 GLint first = 0, GLsizei count = 1
8131 ) const;
8132
8140 void loadAmbient(const GgVector& ambient, GLint first = 0, GLsizei count = 1) const;
8141
8149 void loadAmbient(const GLfloat* ambient, GLint first = 0, GLsizei count = 1) const
8150 {
8151 // first 番目のブロックから count 個のブロックの ambient 要素に値を設定する
8152 send(ambient, offsetof(Material, ambient), sizeof(Material::ambient), first, count);
8153 }
8154
8165 void loadDiffuse(
8166 GLfloat r, GLfloat g, GLfloat b, GLfloat a = 1.0f,
8167 GLint first = 0, GLsizei count = 1
8168 ) const;
8169
8177 void loadDiffuse(const GgVector& diffuse, GLint first = 0, GLsizei count = 1) const;
8178
8186 void loadDiffuse(const GLfloat* diffuse, GLint first = 0, GLsizei count = 1) const
8187 {
8188 // first 番目のブロックから count 個の diffuse 要素に値を設定する
8189 send(diffuse, offsetof(Material, diffuse), sizeof(Material::diffuse), first, count);
8190 }
8191
8202 void loadAmbientAndDiffuse(
8203 GLfloat r, GLfloat g, GLfloat b, GLfloat a = 1.0f,
8204 GLint first = 0, GLsizei count = 1
8205 ) const;
8206
8214 void loadAmbientAndDiffuse(const GgVector& color, GLint first = 0, GLsizei count = 1) const;
8215
8223 void loadAmbientAndDiffuse(const GLfloat* color, GLint first = 0, GLsizei count = 1) const;
8224
8235 void loadSpecular(
8236 GLfloat r, GLfloat g, GLfloat b, GLfloat a = 1.0f,
8237 GLint first = 0, GLsizei count = 1
8238 ) const;
8239
8247 void loadSpecular(const GgVector& specular, GLint first = 0, GLsizei count = 1) const;
8248
8256 void loadSpecular(const GLfloat* specular, GLint first = 0, GLsizei count = 1) const
8257 {
8258 // first 番目のブロックから count 個の specular 要素に値を設定する
8259 send(specular, offsetof(Material, specular), sizeof(Material::specular), first, count);
8260 }
8261
8269 void loadShininess(GLfloat shininess, GLint first = 0, GLsizei count = 1) const;
8270
8278 void loadShininess(const GLfloat* shininess, GLint first = 0, GLsizei count = 1) const;
8279
8287 void load(const Material* material, GLint first = 0, GLsizei count = 1) const
8288 {
8289 send(material, 0, sizeof(Material), first, count);
8290 }
8291
8299 void load(const Material& material, GLint first = 0, GLsizei count = 1) const
8300 {
8301 load(&material, first, count);
8302 }
8303
8309 void select(GLint i = 0) const
8310 {
8311 // バッファオブジェクトの i 番目のブロックの位置
8312 const GLintptr offset{ static_cast<GLintptr>(getStride()) * i };
8313 glBindBufferRange(getTarget(), MaterialBindingPoint, getBuffer(), offset, sizeof(Material));
8314 }
8315 };
8316
8320 void use() const
8321 {
8322 // プログラムオブジェクトは基底クラスで指定する
8324 }
8325
8333 void use(const GLfloat* mp, const GLfloat* mv, const GLfloat* mn) const
8334 {
8335 // プログラムオブジェクトを指定する
8336 use();
8337
8338 // 変換行列を設定する
8339 loadMatrix(mp, mv, mn);
8340 }
8341
8349 void use(const GgMatrix& mp, const GgMatrix& mv, const GgMatrix& mn) const
8350 {
8351 use(mp.get(), mv.get(), mn.get());
8352 }
8353
8360 void use(const GLfloat* mp, const GLfloat* mv) const
8361 {
8362 use(mp, mv, GgMatrix(mv).normal().get());
8363 }
8364
8371 void use(const GgMatrix& mp, const GgMatrix& mv) const
8372 {
8373 use(mp, mv, mv.normal());
8374 }
8375
8382 void use(const LightBuffer* light, GLint i = 0) const
8383 {
8384 // プログラムオブジェクトを指定する
8385 use();
8386
8387 // 光源を設定する
8388 light->select(i);
8389 }
8390
8397 void use(const LightBuffer& light, GLint i = 0) const
8398 {
8399 use(&light, i);
8400 }
8401
8411 void use(
8412 const GLfloat* mp,
8413 const GLfloat* mv,
8414 const GLfloat* mn,
8415 const LightBuffer* light,
8416 GLint i = 0
8417 ) const
8418 {
8419 // 光源を指定してプログラムオブジェクトを指定する
8420 use(light, i);
8421
8422 // 変換行列を設定する
8423 loadMatrix(mp, mv, mn);
8424 }
8425
8435 void use(
8436 const GgMatrix& mp,
8437 const GgMatrix& mv,
8438 const GgMatrix& mn,
8439 const LightBuffer& light,
8440 GLint i = 0
8441 ) const
8442 {
8443 use(mp.get(), mv.get(), mn.get(), &light, i);
8444 }
8445
8454 void use(
8455 const GLfloat* mp,
8456 const GLfloat* mv,
8457 const LightBuffer* light,
8458 GLint i = 0
8459 ) const
8460 {
8461 use(mp, mv, GgMatrix(mv).normal().get(), light, i);
8462 }
8463
8472 void use(
8473 const GgMatrix& mp,
8474 const GgMatrix& mv,
8475 const LightBuffer& light,
8476 GLint i = 0
8477 ) const
8478 {
8479 use(mp, mv, mv.normal(), light, i);
8480 }
8481
8489 void use(const GLfloat* mp, const LightBuffer* light, GLint i = 0) const
8490 {
8491 // 光源を指定してプログラムオブジェクトを指定する
8492 use(light, i);
8493
8494 // 投影変換行列を設定する
8496 }
8497
8505 void use(const GgMatrix& mp, const LightBuffer& light, GLint i = 0) const
8506 {
8507 // 光源を指定してプログラムオブジェクトを指定する
8508 use(mp.get(), &light, i);
8509 }
8510 };
8511
8522 extern bool ggLoadSimpleObj(
8523 const std::string& name,
8524 std::vector<std::array<GLuint, 3>>& group,
8525 std::vector<GgSimpleShader::Material>& material,
8526 std::vector<GgVertex>& vert,
8527 bool normalize = false
8528 );
8529
8541 extern bool ggLoadSimpleObj(
8542 const std::string& name,
8543 std::vector<std::array<GLuint, 3>>& group,
8544 std::vector<GgSimpleShader::Material>& material,
8545 std::vector<GgVertex>& vert,
8546 std::vector<GLuint>& face,
8547 bool normalize = false
8548 );
8549
8554 {
8555 // 同じ材質を割り当てるポリゴングループごとの三角形数
8556 std::shared_ptr <std::vector<std::array<GLuint, 3>>> group;
8557
8558 // ポリゴングループごとの材質のユニフォームバッファ
8559 std::shared_ptr<GgSimpleShader::MaterialBuffer> material;
8560
8561 // この図形の形状データ
8562 std::shared_ptr<GgElements> data;
8563
8564 public:
8565
8572 GgSimpleObj(const std::string& name, bool normalize = false);
8573
8577 {
8578 }
8579
8585 explicit operator bool() const noexcept
8586 {
8587 return data.get() != nullptr;
8588 }
8589
8595 bool operator!() const noexcept
8596 {
8597 return !static_cast<bool>(*this);
8598 }
8599
8605 const GgTriangles* get() const
8606 {
8607 return data.get();
8608 }
8609
8616 virtual void draw(GLint first = 0, GLsizei count = 0) const;
8617 };
8618}
void unmap() const
Definition gg.h:5999
GgBuffer(const GgBuffer< T > &buffer)=delete
void copy(GLuint src_buffer, GLint src_first=0, GLint dst_first=0, GLsizei count=0) const
Definition gg.h:6056
void read(T *data, GLint first, GLsizei count) const
Definition gg.h:6029
void send(const T *data, GLint first, GLsizei count) const
Definition gg.h:6011
GgBuffer(GgBuffer< T > &&o) noexcept
Definition gg.h:5881
GgBuffer< T > & operator=(const GgBuffer< T > &buffer)=delete
GgBuffer(GLenum target, const T *data, GLsizei stride, GLsizei count, GLenum usage)
Definition gg.h:5847
void bind() const
Definition gg.h:5951
const GLsizei & getCount() const
Definition gg.h:5933
void unbind() const
Definition gg.h:5959
const GLuint & getBuffer() const
Definition gg.h:5943
void * map(GLint first, GLsizei count) const
Definition gg.h:5986
void * map() const
Definition gg.h:5969
const GLuint & getTarget() const
Definition gg.h:5913
virtual ~GgBuffer()
Definition gg.h:5893
GLsizeiptr getStride() const
Definition gg.h:5923
const GgTexture * get() const
Definition gg.h:5537
const GLsizei * getSize() const
Definition gg.h:5587
GLuint getTexture() const
Definition gg.h:5547
GLsizei getHeight() const
Definition gg.h:5567
bool operator!() const noexcept
Definition gg.h:5527
virtual ~GgColorTexture()
Definition gg.h:5468
GgColorTexture(const std::string &name, GLenum internal=0, GLenum wrap=GL_CLAMP_TO_EDGE)
Definition gg.h:5456
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
void getSize(GLsizei *size) const
Definition gg.h:5577
GLsizei getWidth() const
Definition gg.h:5557
void unbind() const
Definition gg.h:5603
void bind() const
Definition gg.h:5595
GgColorTexture(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:5435
GgElements(const GgVertex *vert, GLsizei countv, const GLuint *face, GLsizei countf, GLenum mode=GL_TRIANGLES, GLenum usage=GL_STATIC_DRAW)
Definition gg.h:6917
const GLuint & getIndexBuffer() const
Definition gg.h:6951
void send(const GgVertex *vert, GLuint firstv, GLsizei countv, const GLuint *face=nullptr, GLuint firstf=0, GLsizei countf=0) const
Definition gg.h:6966
GgElements(GLenum mode=GL_TRIANGLES)
Definition gg.h:6902
virtual ~GgElements()
Definition gg.h:6933
const GLsizei & getIndexCount() const
Definition gg.h:6941
void load(const GgVertex *vert, GLsizei countv, const GLuint *face, GLsizei countf, GLenum usage=GL_STATIC_DRAW)
Definition gg.h:6988
GgMatrix & loadNormal(const GgMatrix &m)
Definition gg.h:2742
GgMatrix translate(const GLfloat *t) const
Definition gg.h:2768
GgMatrix()=default
GgMatrix scale(const GLfloat *s) const
Definition gg.h:2805
GgMatrix & operator+=(const GLfloat *a)
Definition gg.h:2293
GgVector operator*(const GgVector &v) const
Definition gg.h:3111
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 operator+(const GLfloat *a) const
Definition gg.h:2269
GgMatrix & operator+=(const GgMatrix &m)
Definition gg.h:2305
GgMatrix & loadLookat(const GLfloat *e, const GLfloat *t, const GLfloat *u)
Definition gg.h:2630
GgMatrix rotate(const GLfloat *r, GLfloat a) const
Definition gg.h:2879
void projection(GLfloat *c, const GLfloat *v) const
Definition gg.h:3067
GgMatrix & operator=(const GLfloat *a)
Definition gg.h:2257
constexpr GgMatrix(const GLfloat *a)
Definition gg.h:2207
GgMatrix & loadPerspective(GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloat zFar)
Definition gg.cpp:3164
GgMatrix operator/(const GLfloat *a) const
Definition gg.h:2410
GgMatrix rotate(const GgVector &r, GLfloat a) const
Definition gg.h:2891
GgMatrix operator-(const GLfloat *a) const
Definition gg.h:2316
void projection(GgVector &c, const GLfloat *v) const
Definition gg.h:3089
GgMatrix & loadRotate(const GLfloat *r)
Definition gg.h:2588
GgMatrix & operator/=(const GgMatrix &m)
Definition gg.h:2447
GgMatrix & operator*=(const GLfloat *a)
Definition gg.h:2387
GgMatrix lookat(const GgVector &e, const GgVector &t, const GgVector &u) const
Definition gg.h:2963
GgMatrix lookat(GLfloat ex, GLfloat ey, GLfloat ez, GLfloat tx, GLfloat ty, GLfloat tz, GLfloat ux, GLfloat uy, GLfloat uz) const
Definition gg.h:2932
GgMatrix & loadTranslate(const GLfloat *t)
Definition gg.h:2474
GgMatrix & loadRotate(const GLfloat *r, GLfloat a)
Definition gg.h:2565
GgMatrix & operator=(GgMatrix &&m)=default
GgMatrix & loadInvert(const GLfloat *a)
Definition gg.cpp:2909
GgMatrix rotateZ(GLfloat a) const
Definition gg.h:2851
GgMatrix scale(GLfloat x, GLfloat y, GLfloat z, GLfloat w=1.0f) const
Definition gg.h:2793
GgMatrix rotateX(GLfloat a) const
Definition gg.h:2827
GgMatrix translate(GLfloat x, GLfloat y, GLfloat z, GLfloat w=1.0f) const
Definition gg.h:2756
GgMatrix & loadLookat(const GgVector &e, const GgVector &t, const GgVector &u)
Definition gg.h:2643
GgMatrix normal() const
Definition gg.h:3055
GgMatrix rotate(const GLfloat *r) const
Definition gg.h:2902
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 & operator=(const GgMatrix &m)=default
GgMatrix & operator*=(const GgMatrix &m)
Definition gg.h:2399
GgMatrix rotate(GLfloat x, GLfloat y, GLfloat z, GLfloat a) const
Definition gg.h:2866
GgMatrix(GgMatrix &&m)=default
const GLfloat * get() const
Definition gg.h:3123
GgMatrix invert() const
Definition gg.h:3044
GgMatrix & loadTranslate(const GgVector &t)
Definition gg.h:2485
GgMatrix & loadRotate(const GgVector &r, GLfloat a)
Definition gg.h:2577
GgMatrix(const GgMatrix &m)=default
GgMatrix operator+(const GgMatrix &m) const
Definition gg.h:2282
constexpr GgMatrix(GLfloat c)
Definition gg.h:2217
GgMatrix & loadRotate(const GgVector &r)
Definition gg.h:2599
GgMatrix & loadTranspose(const GgMatrix &m)
Definition gg.h:2704
GgMatrix frustum(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) const
Definition gg.h:3000
GgMatrix rotate(const GgVector &r) const
Definition gg.h:2913
GgMatrix rotateY(GLfloat a) const
Definition gg.h:2839
GgMatrix operator/(const GgMatrix &m) const
Definition gg.h:2424
GgMatrix & loadInvert(const GgMatrix &m)
Definition gg.h:2723
GgMatrix operator*(const GgMatrix &m) const
Definition gg.h:2376
GgMatrix lookat(const GLfloat *e, const GLfloat *t, const GLfloat *u) const
Definition gg.h:2950
GgMatrix operator-(const GgMatrix &m) const
Definition gg.h:2329
GgMatrix & loadScale(const GLfloat *s)
Definition gg.h:2507
GgMatrix operator*(const GLfloat *a) const
Definition gg.h:2363
GgMatrix & operator-=(const GLfloat *a)
Definition gg.h:2340
void projection(GLfloat *c, const GgVector &v) const
Definition gg.h:3078
GgMatrix orthogonal(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) const
Definition gg.h:2979
GgMatrix & operator/=(const GLfloat *a)
Definition gg.h:2435
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 transpose() const
Definition gg.h:3033
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 scale(const GgVector &s) const
Definition gg.h:2816
void get(GLfloat *a) const
Definition gg.h:3133
GgMatrix & loadTranspose(const GLfloat *a)
Definition gg.cpp:2881
~GgMatrix()=default
GgMatrix translate(const GgVector &t) const
Definition gg.h:2779
void projection(GgVector &c, const GgVector &v) const
Definition gg.h:3100
constexpr GgMatrix(GLfloat m00, GLfloat m01, GLfloat m02, GLfloat m03, GLfloat m10, GLfloat m11, GLfloat m12, GLfloat m13, GLfloat m20, GLfloat m21, GLfloat m22, GLfloat m23, GLfloat m30, GLfloat m31, GLfloat m32, GLfloat m33)
Definition gg.h:2192
GgMatrix & operator-=(const GgMatrix &m)
Definition gg.h:2352
GgMatrix & loadScale(const GgVector &s)
Definition gg.h:2518
GgMatrix perspective(GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloat zFar) const
Definition gg.h:3019
GgMatrix & loadNormal(const GLfloat *a)
Definition gg.cpp:2992
const GgTexture * get() const
Definition gg.h:5743
GLuint getTexture() const
Definition gg.h:5753
GgNormalTexture(const std::string &name, GLfloat nz=1.0f, GLenum internal=GL_RGBA)
Definition gg.h:5659
GLsizei getHeight() const
Definition gg.h:5773
GgNormalTexture(const GLubyte *image, GLsizei width, GLsizei height, GLenum format=GL_RED, GLfloat nz=1.0f, GLenum internal=GL_RGBA)
Definition gg.h:5639
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
void getSize(GLsizei *size) const
Definition gg.h:5783
virtual ~GgNormalTexture()
Definition gg.h:5672
void bind() const
Definition gg.h:5801
void unbind() const
Definition gg.h:5809
bool operator!() const noexcept
Definition gg.h:5733
const GLsizei * getSize() const
Definition gg.h:5793
GLsizei getWidth() const
Definition gg.h:5763
void use(const GLfloat *mp) const
Definition gg.h:7480
virtual void loadProjectionMatrix(const GLfloat *mp) const
Definition gg.h:7409
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 loadMatrix(const GgMatrix &mp, const GgMatrix &mv) const
Definition gg.h:7462
GgPointShader(const std::array< std::string, 3 > &files, int nvarying=0, const char *const *varyings=nullptr)
Definition gg.h:7336
virtual void loadProjectionMatrix(const GgMatrix &mp) const
Definition gg.h:7419
virtual void use() const
Definition gg.h:7470
void use(const GgMatrix &mp, const GgMatrix &mv) const
Definition gg.h:7514
void unuse() const
Definition gg.h:7522
virtual ~GgPointShader()
Definition gg.h:7348
void use(const GgMatrix &mp) const
Definition gg.h:7491
bool load(const std::array< std::string, 3 > &files, GLint nvarying=0, const char *const *varyings=nullptr)
Definition gg.h:7395
virtual void loadMatrix(const GLfloat *mp, const GLfloat *mv) const
Definition gg.h:7450
void use(const GLfloat *mp, const GLfloat *mv) const
Definition gg.h:7502
GgPointShader(const std::string &vert, const std::string &frag="", const std::string &geom="", GLint nvarying=0, const char *const *varyings=nullptr)
Definition gg.h:7317
virtual void loadModelviewMatrix(const GLfloat *mv) const
Definition gg.h:7429
virtual void loadModelviewMatrix(const GgMatrix &mv) const
Definition gg.h:7439
void send(const GgVector *pos, GLint first=0, GLsizei count=0) const
Definition gg.h:6705
const GLuint & getBuffer() const
Definition gg.h:6693
bool operator!() const noexcept
Definition gg.h:6673
const GLsizei & getCount() const
Definition gg.h:6683
void load(const GgVector *pos, GLsizei count, GLenum usage=GL_STATIC_DRAW)
Definition gg.cpp:5131
GgPoints(const GgVector *pos, GLsizei countv, GLenum mode=GL_POINTS, GLenum usage=GL_STATIC_DRAW)
Definition gg.h:6640
GgPoints(GLenum mode=GL_POINTS)
Definition gg.h:6627
virtual ~GgPoints()
Definition gg.h:6654
GgQuaternion multiply(GLfloat x, GLfloat y, GLfloat z, GLfloat w) const
Definition gg.h:3897
GgQuaternion rotateY(GLfloat a) const
Definition gg.h:4241
~GgQuaternion()=default
GgQuaternion multiply(const GgVector &v) const
Definition gg.h:3922
GgQuaternion divide(const GLfloat *a) const
Definition gg.h:3959
GgQuaternion divide(GLfloat x, GLfloat y, GLfloat z, GLfloat w) const
Definition gg.h:3947
GgQuaternion & operator-=(const GLfloat *a)
Definition gg.h:4010
void getConjugateMatrix(GLfloat *a) const
Definition gg.h:4541
GgQuaternion & operator+=(const GgVector &v)
Definition gg.h:4002
GgQuaternion(const GgQuaternion &q)=default
GgQuaternion & loadMatrix(const GgMatrix &m)
Definition gg.h:4113
GgQuaternion & operator/=(const GgQuaternion &q)
Definition gg.h:4042
GgQuaternion multiply(const GgQuaternion &q) const
Definition gg.h:3933
GgQuaternion operator*(const GgQuaternion &q) const
Definition gg.h:4078
GgQuaternion & loadMultiply(const GgVector &v)
Definition gg.h:3728
GgQuaternion add(const GLfloat *a) const
Definition gg.h:3813
GgQuaternion & loadSubtract(const GLfloat *a)
Definition gg.h:3669
GgQuaternion & loadRotateY(GLfloat a)
Definition gg.cpp:3341
GgQuaternion(GgQuaternion &&q)=default
GgQuaternion & loadRotateZ(GLfloat a)
Definition gg.cpp:3353
GgQuaternion & loadEuler(GLfloat heading, GLfloat pitch, GLfloat roll)
Definition gg.cpp:3365
GgQuaternion divide(const GgQuaternion &q) const
Definition gg.h:3984
GgQuaternion subtract(GLfloat x, GLfloat y, GLfloat z, GLfloat w) const
Definition gg.h:3849
GgQuaternion & loadConjugate(const GgQuaternion &q)
Definition gg.h:4403
GgQuaternion & loadRotate(const GLfloat *v)
Definition gg.h:4157
GgQuaternion & loadInvert(const GLfloat *a)
Definition gg.cpp:3407
GgQuaternion(const GgVector &v)
Definition gg.h:3542
GgQuaternion & loadEuler(const GLfloat *e)
Definition gg.h:4273
GgQuaternion operator*(const GgVector &v) const
Definition gg.h:4074
GgQuaternion & loadAdd(const GgVector &v)
Definition gg.h:3628
GgQuaternion & loadRotate(const GLfloat *v, GLfloat a)
Definition gg.h:4146
GgQuaternion & operator*=(const GLfloat *a)
Definition gg.h:4022
GgQuaternion divide(const GgVector &v) const
Definition gg.h:3973
GgQuaternion operator+(const GLfloat *a) const
Definition gg.h:4046
GgQuaternion & loadMultiply(const GgQuaternion &q)
Definition gg.h:3739
GgQuaternion subtract(const GLfloat *a) const
Definition gg.h:3861
GgQuaternion & loadIdentity()
Definition gg.h:4123
GgQuaternion rotateZ(GLfloat a) const
Definition gg.h:4252
GgQuaternion & operator*=(const GgQuaternion &q)
Definition gg.h:4030
GgQuaternion subtract(const GgQuaternion &q) const
Definition gg.h:3883
GgQuaternion add(GLfloat x, GLfloat y, GLfloat z, GLfloat w) const
Definition gg.h:3801
void getMatrix(GLfloat *a) const
Definition gg.h:4509
GgQuaternion & loadMultiply(const GLfloat *a)
Definition gg.h:3717
GgQuaternion & loadMultiply(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Definition gg.h:3705
GgQuaternion euler(const GLfloat *e) const
Definition gg.h:4298
GgQuaternion euler(const GgVector &e) const
Definition gg.h:4312
void get(GLfloat *a) const
Definition gg.h:4496
GgQuaternion & loadAdd(const GgQuaternion &q)
Definition gg.h:3639
GgMatrix getMatrix() const
Definition gg.h:4529
GgQuaternion operator-(const GgQuaternion &q) const
Definition gg.h:4066
GgQuaternion & loadRotateX(GLfloat a)
Definition gg.cpp:3329
GgQuaternion & loadDivide(const GLfloat *a)
Definition gg.h:3765
GgQuaternion rotate(const GLfloat *v, GLfloat a) const
Definition gg.h:4208
GgQuaternion & loadNormalize(const GgQuaternion &q)
Definition gg.h:4384
GgQuaternion & loadInvert(const GgQuaternion &q)
Definition gg.h:4422
GLfloat norm() const
Definition gg.h:3587
void getMatrix(GgMatrix &m) const
Definition gg.h:4519
GgQuaternion operator/(const GgQuaternion &q) const
Definition gg.h:4090
GgQuaternion & loadRotate(GLfloat x, GLfloat y, GLfloat z, GLfloat a)
Definition gg.cpp:3307
GgQuaternion normalize() const
Definition gg.h:4460
GgQuaternion & loadDivide(const GgQuaternion &q)
Definition gg.h:3787
GgQuaternion rotate(const GLfloat *v) const
Definition gg.h:4219
GgQuaternion operator/(const GLfloat *a) const
Definition gg.h:4082
void getConjugateMatrix(GgMatrix &m) const
Definition gg.h:4553
GgQuaternion operator-(const GgVector &v) const
Definition gg.h:4062
GgQuaternion & operator/=(const GgVector &v)
Definition gg.h:4038
GgQuaternion add(const GgQuaternion &q) const
Definition gg.h:3835
GgQuaternion & operator-=(const GgQuaternion &q)
Definition gg.h:4018
GgQuaternion & loadSlerp(const GLfloat *a, const GLfloat *b, GLfloat t)
Definition gg.h:4325
GgQuaternion & operator+=(const GLfloat *a)
Definition gg.h:3998
GgQuaternion conjugate() const
Definition gg.h:4472
GgQuaternion & operator+=(const GgQuaternion &q)
Definition gg.h:4006
GgQuaternion & operator*=(const GgVector &v)
Definition gg.h:4026
GgQuaternion rotate(GLfloat x, GLfloat y, GLfloat z, GLfloat a) const
Definition gg.h:4195
GgQuaternion & loadDivide(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Definition gg.h:3753
GgQuaternion operator-(const GLfloat *a) const
Definition gg.h:4058
GgQuaternion rotateX(GLfloat a) const
Definition gg.h:4230
GgQuaternion euler(GLfloat heading, GLfloat pitch, GLfloat roll) const
Definition gg.h:4286
GgQuaternion()=default
GgQuaternion & loadDivide(const GgVector &v)
Definition gg.h:3776
GgQuaternion add(const GgVector &v) const
Definition gg.h:3824
GgQuaternion operator+(const GgQuaternion &q) const
Definition gg.h:4054
GgQuaternion(const GLfloat *a)
Definition gg.h:3532
GgMatrix getConjugateMatrix() const
Definition gg.h:4563
GgQuaternion subtract(const GgVector &v) const
Definition gg.h:3872
GgQuaternion & operator/=(const GLfloat *a)
Definition gg.h:4034
GgQuaternion & loadAdd(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Definition gg.h:3601
GgQuaternion & loadMatrix(const GLfloat *a)
Definition gg.h:4101
constexpr GgQuaternion(GLfloat c)
Definition gg.h:3522
GgQuaternion operator+(const GgVector &v) const
Definition gg.h:4050
GgQuaternion & operator=(const GgQuaternion &q)=default
GgQuaternion & operator=(const GgVector &v)
Definition gg.h:3994
GgQuaternion & loadSubtract(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Definition gg.h:3653
GgQuaternion invert() const
Definition gg.h:4484
GgQuaternion slerp(GLfloat *a, GLfloat t) const
Definition gg.h:4434
GgQuaternion & operator-=(const GgVector &v)
Definition gg.h:4014
GgQuaternion & loadSubtract(const GgQuaternion &q)
Definition gg.h:3691
GgQuaternion & loadSlerp(const GgQuaternion &q, const GLfloat *a, GLfloat t)
Definition gg.h:4352
GgQuaternion & loadSlerp(const GLfloat *a, const GgQuaternion &q, GLfloat t)
Definition gg.h:4365
GgQuaternion & operator=(const GLfloat *a)
Definition gg.h:3990
GgQuaternion & operator=(GgQuaternion &&q)=default
GgQuaternion operator/(const GgVector &v) const
Definition gg.h:4086
GgQuaternion & loadNormalize(const GLfloat *a)
Definition gg.cpp:3381
GgQuaternion slerp(const GgQuaternion &q, GLfloat t) const
Definition gg.h:4448
GgQuaternion & loadConjugate(const GLfloat *a)
Definition gg.cpp:3393
GgQuaternion operator*(const GLfloat *a) const
Definition gg.h:4070
constexpr GgQuaternion(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
Definition gg.h:3512
GgQuaternion multiply(const GLfloat *a) const
Definition gg.h:3909
GgQuaternion & loadSlerp(const GgQuaternion &q, const GgQuaternion &r, GLfloat t)
Definition gg.h:4339
GgQuaternion & loadSubtract(const GgVector &v)
Definition gg.h:3680
GgQuaternion & loadAdd(const GLfloat *a)
Definition gg.h:3617
void unuse() const
Definition gg.h:7267
GgShader(GgShader &&o) noexcept
Definition gg.h:7206
void use() const
Definition gg.h:7259
GgShader & operator=(const GgShader &shader)=delete
GgShader(const std::array< std::string, 3 > &files, int nvarying=0, const char *const *varyings=nullptr)
Definition gg.h:7181
GgShader(const std::string &vert, const std::string &frag="", const std::string &geom="", int nvarying=0, const char *const *varyings=nullptr)
Definition gg.h:7163
GgShader & operator=(GgShader &&o) noexcept
Definition gg.h:7240
GgShader(const GgShader &shader)=delete
virtual ~GgShader()
Definition gg.h:7215
GLuint get() const
Definition gg.h:7277
void setMode(GLenum mode)
Definition gg.h:6586
GgShape(GLenum mode=0)
Definition gg.h:6538
const GLenum & getMode() const
Definition gg.h:6596
virtual bool operator!() const noexcept
Definition gg.h:6566
virtual ~GgShape()
Definition gg.h:6547
const GLuint & get() const
Definition gg.h:6576
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
const GgTriangles * get() const
Definition gg.h:8605
virtual ~GgSimpleObj()
デストラクタ.
Definition gg.h:8576
bool operator!() const noexcept
Definition gg.h:8595
void loadPosition(const GgVector *position, GLint first=0, GLsizei count=1) const
Definition gg.h:7996
void loadAmbient(const GLfloat *ambient, GLint first=0, GLsizei count=1) const
Definition gg.h:7863
void select(GLint i=0) const
Definition gg.h:8030
LightBuffer(const Light &light, GLsizei count=1, GLenum usage=GL_STATIC_DRAW)
Definition gg.h:7794
void loadSpecular(const GLfloat *specular, GLint first=0, GLsizei count=1) const
Definition gg.h:7937
void load(const Light &light, GLint first=0, GLsizei count=1) const
Definition gg.h:8020
void loadPosition(const GLfloat *position, GLint first=0, GLsizei count=1) const
Definition gg.h:7983
void loadPosition(GLfloat x, GLfloat y, GLfloat z, GLfloat w=1.0f, GLint first=0, GLsizei count=1) const
Definition gg.cpp:5658
void loadDiffuse(const GLfloat *diffuse, GLint first=0, GLsizei count=1) const
Definition gg.h:7900
LightBuffer(GgVector ambient, GgVector diffuse, GgVector specular, GgVector position, GLsizei count=1, GLenum usage=GL_STATIC_DRAW)
Definition gg.h:7813
LightBuffer(const Light *light=nullptr, GLsizei count=1, GLenum usage=GL_STATIC_DRAW)
Definition gg.h:7778
void load(const Light *light, GLint first=0, GLsizei count=1) const
Definition gg.h:8008
MaterialBuffer(const Material &material, GLsizei count=1, GLenum usage=GL_STATIC_DRAW)
Definition gg.h:8080
void loadSpecular(const GLfloat *specular, GLint first=0, GLsizei count=1) const
Definition gg.h:8256
void select(GLint i=0) const
Definition gg.h:8309
void loadAmbient(const GLfloat *ambient, GLint first=0, GLsizei count=1) const
Definition gg.h:8149
void load(const Material &material, GLint first=0, GLsizei count=1) const
Definition gg.h:8299
MaterialBuffer(GgVector ambient, GgVector diffuse, GgVector specular, GLfloat shininess, GLsizei count=1, GLenum usage=GL_STATIC_DRAW)
Definition gg.h:8099
void loadDiffuse(const GLfloat *diffuse, GLint first=0, GLsizei count=1) const
Definition gg.h:8186
MaterialBuffer(const Material *material=nullptr, GLsizei count=1, GLenum usage=GL_STATIC_DRAW)
Definition gg.h:8064
void load(const Material *material, GLint first=0, GLsizei count=1) const
Definition gg.h:8287
virtual void loadModelviewMatrix(const GgMatrix &mv, const GgMatrix &mn) const
Definition gg.h:7680
void use(const GgMatrix &mp, const GgMatrix &mv, const GgMatrix &mn, const LightBuffer &light, GLint i=0) const
Definition gg.h:8435
virtual void loadMatrix(const GLfloat *mp, const GLfloat *mv, const GLfloat *mn) const
Definition gg.h:7712
virtual void loadModelviewMatrix(const GLfloat *mv) const
Definition gg.h:7690
GgSimpleShader & operator=(const GgSimpleShader &o)
Definition gg.h:7616
void use(const GLfloat *mp, const GLfloat *mv, const GLfloat *mn) const
Definition gg.h:8333
void use(const GLfloat *mp, const GLfloat *mv, const GLfloat *mn, const LightBuffer *light, GLint i=0) const
Definition gg.h:8411
virtual void loadModelviewMatrix(const GLfloat *mv, const GLfloat *mn) const
Definition gg.h:7668
GgSimpleShader(const std::array< std::string, 3 > &files, GLint nvarying=0, const char *const *varyings=nullptr)
Definition gg.h:7585
virtual void loadModelviewMatrix(const GgMatrix &mv) const
Definition gg.h:7700
void use(const GLfloat *mp, const LightBuffer *light, GLint i=0) const
Definition gg.h:8489
void use(const GgMatrix &mp, const GgMatrix &mv, const LightBuffer &light, GLint i=0) const
Definition gg.h:8472
virtual void loadMatrix(const GgMatrix &mp, const GgMatrix &mv, const GgMatrix &mn) const
Definition gg.h:7725
GgSimpleShader(const GgSimpleShader &o)
Definition gg.h:7597
virtual void loadMatrix(const GgMatrix &mp, const GgMatrix &mv) const
Definition gg.h:7747
GgSimpleShader(const std::string &vert, const std::string &frag="", const std::string &geom="", GLint nvarying=0, const char *const *varyings=nullptr)
Definition gg.h:7567
void use() const
Definition gg.h:8320
void use(const GgMatrix &mp, const GgMatrix &mv) const
Definition gg.h:8371
void use(const GgMatrix &mp, const GgMatrix &mv, const GgMatrix &mn) const
Definition gg.h:8349
void use(const LightBuffer *light, GLint i=0) const
Definition gg.h:8382
virtual void loadMatrix(const GLfloat *mp, const GLfloat *mv) const
Definition gg.h:7736
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
bool load(const std::array< std::string, 3 > &files, GLint nvarying=0, const char *const *varyings=nullptr)
Definition gg.h:7653
void use(const GLfloat *mp, const GLfloat *mv, const LightBuffer *light, GLint i=0) const
Definition gg.h:8454
virtual ~GgSimpleShader()
Definition gg.h:7606
void use(const LightBuffer &light, GLint i=0) const
Definition gg.h:8397
void use(const GLfloat *mp, const GLfloat *mv) const
Definition gg.h:8360
void use(const GgMatrix &mp, const LightBuffer &light, GLint i=0) const
Definition gg.h:8505
void unbind() const
Definition gg.h:5339
const GLsizei & getWidth() const
Definition gg.h:5356
const GLuint & getTexture() const
Definition gg.h:5397
GgTexture(const GgTexture &texture)=delete
GgTexture & operator=(const GgTexture &texture)=delete
const GLsizei & getHeight() const
Definition gg.h:5366
void swapRandB(bool swizzle) const
Definition gg.cpp:4021
GgTexture(const GLvoid *image, GLsizei width, GLsizei height, GLenum format=GL_RGB, GLenum type=GL_UNSIGNED_BYTE, GLenum internal=GL_RGBA, GLenum wrap=GL_CLAMP_TO_EDGE, bool swizzle=false)
Definition gg.h:5246
GgTexture & operator=(GgTexture &&o) noexcept
Definition gg.h:5310
GgTexture(GgTexture &&o) noexcept
Definition gg.h:5277
const GLsizei * getSize() const
Definition gg.h:5387
virtual ~GgTexture()
Definition gg.h:5287
void getSize(GLsizei *size) const
Definition gg.h:5376
void bind() const
Definition gg.h:5331
const GLfloat * getStart() const
Definition gg.h:4919
const GgMatrix & getMatrix() const
Definition gg.h:4989
const GLfloat * get() const
Definition gg.h:4999
void end(GLfloat x, GLfloat y)
Definition gg.cpp:3528
const GLfloat getScale(int direction) const
Definition gg.h:4958
const GgQuaternion & getQuaternion() const
Definition gg.h:4979
const GLfloat * getScale() const
Definition gg.h:4948
GgTrackball(const GgQuaternion &q=ggIdentityQuaternion())
Definition gg.h:4821
void motion(GLfloat x, GLfloat y)
Definition gg.cpp:3478
GgTrackball & operator=(const GgQuaternion &q)
Definition gg.h:4836
void begin(GLfloat x, GLfloat y)
Definition gg.cpp:3462
void reset(const GgQuaternion &q=ggIdentityQuaternion())
Definition gg.cpp:3431
void getScale(GLfloat *factor) const
Definition gg.h:4968
void region(GLfloat w, GLfloat h)
Definition gg.cpp:3449
const GLfloat & getStart(int direction) const
Definition gg.h:4927
void rotate(const GgQuaternion &q)
Definition gg.cpp:3507
~GgTrackball()=default
void getStart(GLfloat *position) const
Definition gg.h:4937
void region(int w, int h)
Definition gg.h:4862
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 ~GgTriangles()
Definition gg.h:6832
GgTriangles(GLenum mode=GL_TRIANGLES)
Definition gg.h:6805
void send(const GgVertex *vert, GLint first=0, GLsizei count=0) const
Definition gg.h:6863
const GLuint & getBuffer() const
Definition gg.h:6851
GgTriangles(const GgVertex *vert, GLsizei count, GLenum mode=GL_TRIANGLES, GLenum usage=GL_STATIC_DRAW)
Definition gg.h:6818
void copy(GLuint src_buffer, GLint src_first=0, GLint dst_first=0, GLsizei count=0) const
Definition gg.h:6381
void load(const T *data, GLsizei count, GLenum usage=GL_STATIC_DRAW)
Definition gg.h:6220
const GLuint & getBuffer() const
Definition gg.h:6162
void unbind() const
Definition gg.h:6178
const GLsizei & getCount() const
Definition gg.h:6152
void fill(const GLvoid *data, GLint offset=0, GLsizei size=sizeof(T), GLint first=0, GLsizei count=0) const
Definition gg.h:6298
void load(const T &data, GLsizei count, GLenum usage=GL_STATIC_DRAW)
Definition gg.h:6239
void * map() const
Definition gg.h:6188
void * map(GLint first, GLsizei count) const
Definition gg.h:6200
void bind() const
Definition gg.h:6170
void unmap() const
Definition gg.h:6208
const GLuint & getTarget() const
Definition gg.h:6132
GgUniformBuffer(const T *data, GLsizei count, GLenum usage=GL_STATIC_DRAW)
Definition gg.h:6103
GLsizeiptr getStride() const
Definition gg.h:6142
void read(GLvoid *data, GLint offset=0, GLsizei size=sizeof(T), GLint first=0, GLsizei count=0) const
Definition gg.h:6333
GgUniformBuffer(const T &data, GLsizei count, GLenum usage=GL_STATIC_DRAW)
Definition gg.h:6115
void send(const GLvoid *data, GLint offset=0, GLsizei size=sizeof(T), GLint first=0, GLsizei count=0) const
Definition gg.h:6260
virtual ~GgUniformBuffer()
Definition gg.h:6123
GLfloat length3() const
Definition gg.h:1872
constexpr GgVector operator+(GLfloat c) const noexcept
Definition gg.h:1665
constexpr GgVector operator*(const GgVector &v) const noexcept
Definition gg.h:1758
constexpr GgVector operator-(const GgVector &v) const noexcept
Definition gg.h:1706
~GgVector()=default
constexpr GgVector operator-(GLfloat c) const noexcept
Definition gg.h:1717
GgVector & operator=(GgVector &&v)=default
constexpr GgVector & operator+=(GLfloat c) noexcept
Definition gg.h:1691
constexpr GgVector operator+(const GgVector &v) const noexcept
Definition gg.h:1654
constexpr GgVector operator/(const GgVector &v) const noexcept
Definition gg.h:1810
GgVector(const GgVector &v)=default
constexpr GgVector operator/(GLfloat c) const noexcept
Definition gg.h:1821
GgVector normalize3() const
Definition gg.h:1893
constexpr GgVector & operator*=(const GgVector &v) noexcept
Definition gg.h:1780
constexpr GgVector & operator/=(GLfloat c) noexcept
Definition gg.h:1847
GLfloat distance3(const GgVector &v) const
Definition gg.h:1883
GLfloat dot3(const GgVector &v) const
Definition gg.h:1862
GLfloat length4() const
Definition gg.h:1916
GgVector()=default
constexpr GgVector & operator+=(const GgVector &v) noexcept
Definition gg.h:1676
GLfloat distance4(const GgVector &v) const
Definition gg.h:1927
GgVector & operator=(const GgVector &v)=default
constexpr GgVector(GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
Definition gg.h:1594
constexpr GgVector & operator/=(const GgVector &v) noexcept
Definition gg.h:1832
GgVector normalize4() const
Definition gg.h:1937
constexpr GgVector(const GLfloat *a)
Definition gg.h:1604
constexpr GgVector(GLfloat c)
Definition gg.h:1614
constexpr GgVector & operator*=(GLfloat c) noexcept
Definition gg.h:1795
GLfloat dot4(const GgVector &v) const
Definition gg.h:1906
constexpr GgVector operator*(GLfloat c) const noexcept
Definition gg.h:1769
GgVector(GgVector &&v)=default
constexpr GgVector & operator-=(GLfloat c) noexcept
Definition gg.h:1743
constexpr GgVector & operator-=(const GgVector &v) noexcept
Definition gg.h:1728
GgVertexArray & operator=(GgVertexArray &&o) noexcept
Definition gg.h:6481
void bind() const
Definition gg.h:6510
const GLuint & get() const
Definition gg.h:6502
GgVertexArray(GgVertexArray &&o) noexcept
Definition gg.h:6447
GgVertexArray & operator=(const GgVertexArray &array)=delete
GgVertexArray(const GgVertexArray &array)=delete
virtual ~GgVertexArray()
Definition gg.h:6456
GgVertexArray(GLenum mode=0)
Definition gg.h:6424
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
char pathChar
Definition gg.h:78
Definition gg.h:1351
GgMatrix ggQuaternionTransposeMatrix(const GgQuaternion &q)
Definition gg.h:4624
GgMatrix ggScale(GLfloat x, GLfloat y, GLfloat z, GLfloat w=1.0f)
Definition gg.h:3198
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
GgMatrix ggRotateZ(GLfloat a)
Definition gg.h:3258
GgQuaternion ggSlerp(const GLfloat *a, const GLfloat *b, GLfloat t)
Definition gg.h:4714
GLfloat ggDistance3(const GLfloat *a, const GLfloat *b)
Definition gg.h:1472
GgMatrix ggTranslate(GLfloat x, GLfloat y, GLfloat z, GLfloat w=1.0f)
Definition gg.h:3159
const GgVector & operator+(const GgVector &v)
Definition gg.h:1951
bool ggSaveDepth(const std::string &name)
Definition gg.cpp:3652
const GgVector operator-(const GgVector &v)
Definition gg.h:1974
GgMatrix ggLookat(GLfloat ex, GLfloat ey, GLfloat ez, GLfloat tx, GLfloat ty, GLfloat tz, GLfloat ux, GLfloat uy, GLfloat uz)
Definition gg.h:3343
void ggCreateNormalMap(const GLubyte *hmap, GLsizei width, GLsizei height, GLenum format, GLfloat nz, GLenum internal, std::vector< GgVector > &nmap)
Definition gg.cpp:3896
GLfloat ggLength4(const GLfloat *a)
Definition gg.h:1525
GLfloat ggDot4(const GLfloat *a, const GLfloat *b)
Definition gg.h:1514
GgMatrix ggNormal(const GgMatrix &m)
Definition gg.h:3475
GgMatrix ggRotate(GLfloat x, GLfloat y, GLfloat z, GLfloat a)
Definition gg.h:3273
GLint ggBufferAlignment
使用している GPU のバッファアライメント.
void ggCross(GLfloat *c, const GLfloat *a, const GLfloat *b)
Definition gg.h:1435
GgVector operator/(GLfloat a, const GgVector &b)
Definition gg.h:2010
void _ggError(const std::string &name="", unsigned int line=0)
Definition gg.cpp:2609
GLfloat ggDot3(const GLfloat *a, const GLfloat *b)
Definition gg.h:1449
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
GgMatrix ggFrustum(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
Definition gg.h:3419
GgQuaternion ggRotateQuaternion(GLfloat x, GLfloat y, GLfloat z, GLfloat a)
Definition gg.h:4641
bool ggSaveColor(const std::string &name)
Definition gg.cpp:3626
void _ggFBOError(const std::string &name="", unsigned int line=0)
Definition gg.cpp:2653
GgVector operator*(GLfloat a, const GgVector &b)
Definition gg.h:1998
GgQuaternion ggConjugate(const GgQuaternion &q)
Definition gg.h:4787
GgMatrix ggPerspective(GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloat zFar)
Definition gg.h:3438
GLfloat ggLength3(const GLfloat *a)
Definition gg.h:1460
GgMatrix ggTranspose(const GgMatrix &m)
Definition gg.h:3453
GLfloat ggDistance4(const GLfloat *a, const GLfloat *b)
Definition gg.h:1537
GgQuaternion ggNormalize(const GgQuaternion &q)
Definition gg.h:4776
GgQuaternion ggEulerQuaternion(GLfloat heading, GLfloat pitch, GLfloat roll)
Definition gg.h:4678
GgMatrix ggQuaternionMatrix(const GgQuaternion &q)
Definition gg.h:4611
GgMatrix ggOrthogonal(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
Definition gg.h:3400
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
GgQuaternion ggMatrixQuaternion(const GLfloat *a)
Definition gg.h:4588
GLfloat ggNorm(const GgQuaternion &q)
Definition gg.h:4765
GgMatrix ggRotateY(GLfloat a)
Definition gg.h:3246
GgMatrix ggRotateX(GLfloat a)
Definition gg.h:3234
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
BindingPoints
Definition gg.h:1356
@ MaterialBindingPoint
材質の uniform buffer object の結合ポイント.
Definition gg.h:1358
@ LightBindingPoint
光源の uniform buffer object の結合ポイント.
Definition gg.h:1357
GgMatrix ggInvert(const GgMatrix &m)
Definition gg.h:3464
void ggInit()
Definition gg.cpp:1354
GgQuaternion ggIdentityQuaternion()
Definition gg.h:4576
GgMatrix ggIdentity()
Definition gg.h:3144
GgVector position
光源の位置.
Definition gg.h:7760
GgVector ambient
光源強度の環境光成分.
Definition gg.h:7757
GgVector diffuse
光源強度の拡散反射光成分.
Definition gg.h:7758
GgVector specular
光源強度の鏡面反射光成分.
Definition gg.h:7759
GgVector specular
鏡面反射係数.
Definition gg.h:8045
GLfloat shininess
輝き係数.
Definition gg.h:8046
GgVector ambient
環境光に対する反射係数.
Definition gg.h:8043
GgVector diffuse
拡散反射係数.
Definition gg.h:8044
GgVector normal
法線.
Definition gg.h:6737
GgVertex()
Definition gg.h:6742
GgVector position
位置.
Definition gg.h:6734
GgVertex(GLfloat px, GLfloat py, GLfloat pz, GLfloat nx, GLfloat ny, GLfloat nz)
Definition gg.h:6768
GgVertex(const GgVector &pos, const GgVector &norm)
Definition gg.h:6752
GgVertex(const GLfloat *pos, const GLfloat *norm)
Definition gg.h:6783