//
// Created by Swung 0x48 on 2024/10/8.
//

#ifndef FOLD_CRAFT_LAUNCHER_GLES3_H
#define FOLD_CRAFT_LAUNCHER_GLES3_H

#include <GLES3/gl32.h>
#include "gl/gl.h"

struct es3_functions_t
{
    PFNGLACTIVETEXTUREPROC glActiveTexture;
    PFNGLATTACHSHADERPROC glAttachShader;
    PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation;
    PFNGLBINDBUFFERPROC glBindBuffer;
    PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
    PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
    PFNGLBINDTEXTUREPROC glBindTexture;
    PFNGLBLENDCOLORPROC glBlendColor;
    PFNGLBLENDEQUATIONPROC glBlendEquation;
    PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate;
    PFNGLBLENDFUNCPROC glBlendFunc;
    PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate;
    PFNGLBUFFERDATAPROC glBufferData;
    PFNGLBUFFERSUBDATAPROC glBufferSubData;
    PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
    PFNGLCLEARPROC glClear;
    PFNGLCLEARCOLORPROC glClearColor;
    PFNGLCLEARDEPTHFPROC glClearDepthf;
    PFNGLCLEARSTENCILPROC glClearStencil;
    PFNGLCOLORMASKPROC glColorMask;
    PFNGLCOMPILESHADERPROC glCompileShader;
    PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D;
    PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D;
    PFNGLCOPYTEXIMAGE2DPROC glCopyTexImage2D;
    PFNGLCOPYTEXSUBIMAGE2DPROC glCopyTexSubImage2D;
    PFNGLCREATEPROGRAMPROC glCreateProgram;
    PFNGLCREATESHADERPROC glCreateShader;
    PFNGLCULLFACEPROC glCullFace;
    PFNGLDELETEBUFFERSPROC glDeleteBuffers;
    PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
    PFNGLDELETEPROGRAMPROC glDeleteProgram;
    PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
    PFNGLDELETESHADERPROC glDeleteShader;
    PFNGLDELETETEXTURESPROC glDeleteTextures;
    PFNGLDEPTHFUNCPROC glDepthFunc;
    PFNGLDEPTHMASKPROC glDepthMask;
    PFNGLDEPTHRANGEFPROC glDepthRangef;
    PFNGLDETACHSHADERPROC glDetachShader;
    PFNGLDISABLEPROC glDisable;
    PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
    PFNGLDRAWARRAYSPROC glDrawArrays;
    PFNGLDRAWELEMENTSPROC glDrawElements;
    PFNGLENABLEPROC glEnable;
    PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
    PFNGLFINISHPROC glFinish;
    PFNGLFLUSHPROC glFlush;
    PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer;
    PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
    PFNGLFRONTFACEPROC glFrontFace;
    PFNGLGENBUFFERSPROC glGenBuffers;
    PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
    PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
    PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
    PFNGLGENTEXTURESPROC glGenTextures;
    PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib;
    PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform;
    PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders;
    PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation;
    PFNGLGETBOOLEANVPROC glGetBooleanv;
    PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv;
    PFNGLGETERRORPROC glGetError;
    PFNGLGETFLOATVPROC glGetFloatv;
    PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv;
    PFNGLGETINTEGERVPROC glGetIntegerv;
    PFNGLGETPROGRAMIVPROC glGetProgramiv;
    PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
    PFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv;
    PFNGLGETSHADERIVPROC glGetShaderiv;
    PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
    PFNGLGETSHADERPRECISIONFORMATPROC glGetShaderPrecisionFormat;
    PFNGLGETSHADERSOURCEPROC glGetShaderSource;
    PFNGLGETSTRINGPROC glGetString;
    PFNGLGETTEXPARAMETERFVPROC glGetTexParameterfv;
    PFNGLGETTEXPARAMETERIVPROC glGetTexParameteriv;
    PFNGLGETUNIFORMFVPROC glGetUniformfv;
    PFNGLGETUNIFORMIVPROC glGetUniformiv;
    PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
    PFNGLGETVERTEXATTRIBFVPROC glGetVertexAttribfv;
    PFNGLGETVERTEXATTRIBIVPROC glGetVertexAttribiv;
    PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv;
    PFNGLHINTPROC glHint;
    PFNGLISBUFFERPROC glIsBuffer;
    PFNGLISENABLEDPROC glIsEnabled;
    PFNGLISFRAMEBUFFERPROC glIsFramebuffer;
    PFNGLISPROGRAMPROC glIsProgram;
    PFNGLISRENDERBUFFERPROC glIsRenderbuffer;
    PFNGLISSHADERPROC glIsShader;
    PFNGLISTEXTUREPROC glIsTexture;
    PFNGLLINEWIDTHPROC glLineWidth;
    PFNGLLINKPROGRAMPROC glLinkProgram;
    PFNGLPIXELSTOREIPROC glPixelStorei;
    PFNGLPOLYGONOFFSETPROC glPolygonOffset;
    PFNGLREADPIXELSPROC glReadPixels;
    PFNGLRELEASESHADERCOMPILERPROC glReleaseShaderCompiler;
    PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
    PFNGLSAMPLECOVERAGEPROC glSampleCoverage;
    PFNGLSCISSORPROC glScissor;
    PFNGLSHADERBINARYPROC glShaderBinary;
    PFNGLSHADERSOURCEPROC glShaderSource;
    PFNGLSTENCILFUNCPROC glStencilFunc;
    PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate;
    PFNGLSTENCILMASKPROC glStencilMask;
    PFNGLSTENCILMASKSEPARATEPROC glStencilMaskSeparate;
    PFNGLSTENCILOPPROC glStencilOp;
    PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate;
    PFNGLTEXIMAGE2DPROC glTexImage2D;
    PFNGLTEXPARAMETERFPROC glTexParameterf;
    PFNGLTEXPARAMETERFVPROC glTexParameterfv;
    PFNGLTEXPARAMETERIPROC glTexParameteri;
    PFNGLTEXPARAMETERIVPROC glTexParameteriv;
    PFNGLTEXSUBIMAGE2DPROC glTexSubImage2D;
    PFNGLUNIFORM1FPROC glUniform1f;
    PFNGLUNIFORM1FVPROC glUniform1fv;
    PFNGLUNIFORM1IPROC glUniform1i;
    PFNGLUNIFORM1IVPROC glUniform1iv;
    PFNGLUNIFORM2FPROC glUniform2f;
    PFNGLUNIFORM2FVPROC glUniform2fv;
    PFNGLUNIFORM2IPROC glUniform2i;
    PFNGLUNIFORM2IVPROC glUniform2iv;
    PFNGLUNIFORM3FPROC glUniform3f;
    PFNGLUNIFORM3FVPROC glUniform3fv;
    PFNGLUNIFORM3IPROC glUniform3i;
    PFNGLUNIFORM3IVPROC glUniform3iv;
    PFNGLUNIFORM4FPROC glUniform4f;
    PFNGLUNIFORM4FVPROC glUniform4fv;
    PFNGLUNIFORM4IPROC glUniform4i;
    PFNGLUNIFORM4IVPROC glUniform4iv;
    PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv;
    PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv;
    PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
    PFNGLUSEPROGRAMPROC glUseProgram;
    PFNGLVALIDATEPROGRAMPROC glValidateProgram;
    PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f;
    PFNGLVERTEXATTRIB1FVPROC glVertexAttrib1fv;
    PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f;
    PFNGLVERTEXATTRIB2FVPROC glVertexAttrib2fv;
    PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f;
    PFNGLVERTEXATTRIB3FVPROC glVertexAttrib3fv;
    PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f;
    PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv;
    PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
    PFNGLVIEWPORTPROC glViewport;
    PFNGLREADBUFFERPROC glReadBuffer;
    PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
    PFNGLTEXIMAGE3DPROC glTexImage3D;
    PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D;
    PFNGLCOPYTEXSUBIMAGE3DPROC glCopyTexSubImage3D;
    PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D;
    PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D;
    PFNGLGENQUERIESPROC glGenQueries;
    PFNGLDELETEQUERIESPROC glDeleteQueries;
    PFNGLISQUERYPROC glIsQuery;
    PFNGLBEGINQUERYPROC glBeginQuery;
    PFNGLENDQUERYPROC glEndQuery;
    PFNGLGETQUERYIVPROC glGetQueryiv;
    PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv;
    PFNGLUNMAPBUFFERPROC glUnmapBuffer;
    PFNGLGETBUFFERPOINTERVPROC glGetBufferPointerv;
    PFNGLDRAWBUFFERSPROC glDrawBuffers;
    PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv;
    PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv;
    PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv;
    PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv;
    PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv;
    PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv;
    PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
    PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample;
    PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer;
    PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
    PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
    PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
    PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
    PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
    PFNGLISVERTEXARRAYPROC glIsVertexArray;
    PFNGLGETINTEGERI_VPROC glGetIntegeri_v;
    PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback;
    PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback;
    PFNGLBINDBUFFERRANGEPROC glBindBufferRange;
    PFNGLBINDBUFFERBASEPROC glBindBufferBase;
    PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings;
    PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying;
    PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer;
    PFNGLGETVERTEXATTRIBIIVPROC glGetVertexAttribIiv;
    PFNGLGETVERTEXATTRIBIUIVPROC glGetVertexAttribIuiv;
    PFNGLVERTEXATTRIBI4IPROC glVertexAttribI4i;
    PFNGLVERTEXATTRIBI4UIPROC glVertexAttribI4ui;
    PFNGLVERTEXATTRIBI4IVPROC glVertexAttribI4iv;
    PFNGLVERTEXATTRIBI4UIVPROC glVertexAttribI4uiv;
    PFNGLGETUNIFORMUIVPROC glGetUniformuiv;
    PFNGLGETFRAGDATALOCATIONPROC glGetFragDataLocation;
    PFNGLUNIFORM1UIPROC glUniform1ui;
    PFNGLUNIFORM2UIPROC glUniform2ui;
    PFNGLUNIFORM3UIPROC glUniform3ui;
    PFNGLUNIFORM4UIPROC glUniform4ui;
    PFNGLUNIFORM1UIVPROC glUniform1uiv;
    PFNGLUNIFORM2UIVPROC glUniform2uiv;
    PFNGLUNIFORM3UIVPROC glUniform3uiv;
    PFNGLUNIFORM4UIVPROC glUniform4uiv;
    PFNGLCLEARBUFFERIVPROC glClearBufferiv;
    PFNGLCLEARBUFFERUIVPROC glClearBufferuiv;
    PFNGLCLEARBUFFERFVPROC glClearBufferfv;
    PFNGLCLEARBUFFERFIPROC glClearBufferfi;
    PFNGLGETSTRINGIPROC glGetStringi;
    PFNGLCOPYBUFFERSUBDATAPROC glCopyBufferSubData;
    PFNGLGETUNIFORMINDICESPROC glGetUniformIndices;
    PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv;
    PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex;
    PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv;
    PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glGetActiveUniformBlockName;
    PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
    PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
    PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
    PFNGLFENCESYNCPROC glFenceSync;
    PFNGLISSYNCPROC glIsSync;
    PFNGLDELETESYNCPROC glDeleteSync;
    PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
    PFNGLWAITSYNCPROC glWaitSync;
    PFNGLGETINTEGER64VPROC glGetInteger64v;
    PFNGLGETSYNCIVPROC glGetSynciv;
    PFNGLGETINTEGER64I_VPROC glGetInteger64i_v;
    PFNGLGETBUFFERPARAMETERI64VPROC glGetBufferParameteri64v;
    PFNGLGENSAMPLERSPROC glGenSamplers;
    PFNGLDELETESAMPLERSPROC glDeleteSamplers;
    PFNGLISSAMPLERPROC glIsSampler;
    PFNGLBINDSAMPLERPROC glBindSampler;
    PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri;
    PFNGLSAMPLERPARAMETERIVPROC glSamplerParameteriv;
    PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf;
    PFNGLSAMPLERPARAMETERFVPROC glSamplerParameterfv;
    PFNGLGETSAMPLERPARAMETERIVPROC glGetSamplerParameteriv;
    PFNGLGETSAMPLERPARAMETERFVPROC glGetSamplerParameterfv;
    PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor;
    PFNGLBINDTRANSFORMFEEDBACKPROC glBindTransformFeedback;
    PFNGLDELETETRANSFORMFEEDBACKSPROC glDeleteTransformFeedbacks;
    PFNGLGENTRANSFORMFEEDBACKSPROC glGenTransformFeedbacks;
    PFNGLISTRANSFORMFEEDBACKPROC glIsTransformFeedback;
    PFNGLPAUSETRANSFORMFEEDBACKPROC glPauseTransformFeedback;
    PFNGLRESUMETRANSFORMFEEDBACKPROC glResumeTransformFeedback;
    PFNGLGETPROGRAMBINARYPROC glGetProgramBinary;
    PFNGLPROGRAMBINARYPROC glProgramBinary;
    PFNGLPROGRAMPARAMETERIPROC glProgramParameteri;
    PFNGLINVALIDATEFRAMEBUFFERPROC glInvalidateFramebuffer;
    PFNGLINVALIDATESUBFRAMEBUFFERPROC glInvalidateSubFramebuffer;
    PFNGLTEXSTORAGE2DPROC glTexStorage2D;
    PFNGLTEXSTORAGE3DPROC glTexStorage3D;
    PFNGLGETINTERNALFORMATIVPROC glGetInternalformativ;
    PFNGLDISPATCHCOMPUTEPROC glDispatchCompute;
    PFNGLDISPATCHCOMPUTEINDIRECTPROC glDispatchComputeIndirect;
    PFNGLDRAWARRAYSINDIRECTPROC glDrawArraysIndirect;
    PFNGLFRAMEBUFFERPARAMETERIPROC glFramebufferParameteri;
    PFNGLGETFRAMEBUFFERPARAMETERIVPROC glGetFramebufferParameteriv;
    PFNGLGETPROGRAMINTERFACEIVPROC glGetProgramInterfaceiv;
    PFNGLGETPROGRAMRESOURCEINDEXPROC glGetProgramResourceIndex;
    PFNGLGETPROGRAMRESOURCENAMEPROC glGetProgramResourceName;
    PFNGLGETPROGRAMRESOURCEIVPROC glGetProgramResourceiv;
    PFNGLGETPROGRAMRESOURCELOCATIONPROC glGetProgramResourceLocation;
    PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages;
    PFNGLACTIVESHADERPROGRAMPROC glActiveShaderProgram;
    PFNGLCREATESHADERPROGRAMVPROC glCreateShaderProgramv;
    PFNGLBINDPROGRAMPIPELINEPROC glBindProgramPipeline;
    PFNGLDELETEPROGRAMPIPELINESPROC glDeleteProgramPipelines;
    PFNGLGENPROGRAMPIPELINESPROC glGenProgramPipelines;
    PFNGLISPROGRAMPIPELINEPROC glIsProgramPipeline;
    PFNGLGETPROGRAMPIPELINEIVPROC glGetProgramPipelineiv;
    PFNGLPROGRAMUNIFORM1IPROC glProgramUniform1i;
    PFNGLPROGRAMUNIFORM2IPROC glProgramUniform2i;
    PFNGLPROGRAMUNIFORM3IPROC glProgramUniform3i;
    PFNGLPROGRAMUNIFORM4IPROC glProgramUniform4i;
    PFNGLPROGRAMUNIFORM1UIPROC glProgramUniform1ui;
    PFNGLPROGRAMUNIFORM2UIPROC glProgramUniform2ui;
    PFNGLPROGRAMUNIFORM3UIPROC glProgramUniform3ui;
    PFNGLPROGRAMUNIFORM4UIPROC glProgramUniform4ui;
    PFNGLPROGRAMUNIFORM1FPROC glProgramUniform1f;
    PFNGLPROGRAMUNIFORM2FPROC glProgramUniform2f;
    PFNGLPROGRAMUNIFORM3FPROC glProgramUniform3f;
    PFNGLPROGRAMUNIFORM4FPROC glProgramUniform4f;
    PFNGLPROGRAMUNIFORM1IVPROC glProgramUniform1iv;
    PFNGLPROGRAMUNIFORM2IVPROC glProgramUniform2iv;
    PFNGLPROGRAMUNIFORM3IVPROC glProgramUniform3iv;
    PFNGLPROGRAMUNIFORM4IVPROC glProgramUniform4iv;
    PFNGLPROGRAMUNIFORM1UIVPROC glProgramUniform1uiv;
    PFNGLPROGRAMUNIFORM2UIVPROC glProgramUniform2uiv;
    PFNGLPROGRAMUNIFORM3UIVPROC glProgramUniform3uiv;
    PFNGLPROGRAMUNIFORM4UIVPROC glProgramUniform4uiv;
    PFNGLPROGRAMUNIFORM1FVPROC glProgramUniform1fv;
    PFNGLPROGRAMUNIFORM2FVPROC glProgramUniform2fv;
    PFNGLPROGRAMUNIFORM3FVPROC glProgramUniform3fv;
    PFNGLPROGRAMUNIFORM4FVPROC glProgramUniform4fv;
    PFNGLPROGRAMUNIFORMMATRIX2FVPROC glProgramUniformMatrix2fv;
    PFNGLPROGRAMUNIFORMMATRIX3FVPROC glProgramUniformMatrix3fv;
    PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv;
    PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glProgramUniformMatrix2x3fv;
    PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glProgramUniformMatrix3x2fv;
    PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glProgramUniformMatrix2x4fv;
    PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glProgramUniformMatrix4x2fv;
    PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glProgramUniformMatrix3x4fv;
    PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glProgramUniformMatrix4x3fv;
    PFNGLVALIDATEPROGRAMPIPELINEPROC glValidateProgramPipeline;
    PFNGLGETPROGRAMPIPELINEINFOLOGPROC glGetProgramPipelineInfoLog;
    PFNGLBINDIMAGETEXTUREPROC glBindImageTexture;
    PFNGLGETBOOLEANI_VPROC glGetBooleani_v;
    PFNGLMEMORYBARRIERPROC glMemoryBarrier;
    PFNGLMEMORYBARRIERBYREGIONPROC glMemoryBarrierByRegion;
    PFNGLTEXSTORAGE2DMULTISAMPLEPROC glTexStorage2DMultisample;
    PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv;
    PFNGLSAMPLEMASKIPROC glSampleMaski;
    PFNGLGETTEXLEVELPARAMETERIVPROC glGetTexLevelParameteriv;
    PFNGLGETTEXLEVELPARAMETERFVPROC glGetTexLevelParameterfv;
    PFNGLBINDVERTEXBUFFERPROC glBindVertexBuffer;
    PFNGLVERTEXATTRIBFORMATPROC glVertexAttribFormat;
    PFNGLVERTEXATTRIBIFORMATPROC glVertexAttribIFormat;
    PFNGLVERTEXATTRIBBINDINGPROC glVertexAttribBinding;
    PFNGLVERTEXBINDINGDIVISORPROC glVertexBindingDivisor;
    PFNGLBLENDBARRIERPROC glBlendBarrier;
    PFNGLCOPYIMAGESUBDATAPROC glCopyImageSubData;
    PFNGLDEBUGMESSAGECONTROLPROC glDebugMessageControl;
    PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert;
    PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback;
    PFNGLGETDEBUGMESSAGELOGPROC glGetDebugMessageLog;
    PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup;
    PFNGLPOPDEBUGGROUPPROC glPopDebugGroup;
    PFNGLOBJECTLABELPROC glObjectLabel;
    PFNGLGETOBJECTLABELPROC glGetObjectLabel;
    PFNGLOBJECTPTRLABELPROC glObjectPtrLabel;
    PFNGLGETOBJECTPTRLABELPROC glGetObjectPtrLabel;
    PFNGLGETPOINTERVPROC glGetPointerv;
    PFNGLENABLEIPROC glEnablei;
    PFNGLDISABLEIPROC glDisablei;
    PFNGLBLENDEQUATIONIPROC glBlendEquationi;
    PFNGLBLENDEQUATIONSEPARATEIPROC glBlendEquationSeparatei;
    PFNGLBLENDFUNCIPROC glBlendFunci;
    PFNGLBLENDFUNCSEPARATEIPROC glBlendFuncSeparatei;
    PFNGLCOLORMASKIPROC glColorMaski;
    PFNGLISENABLEDIPROC glIsEnabledi;
    PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex;
    PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glDrawRangeElementsBaseVertex;
    PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex;
    PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture;
    PFNGLPRIMITIVEBOUNDINGBOXPROC glPrimitiveBoundingBox;
    PFNGLGETGRAPHICSRESETSTATUSPROC glGetGraphicsResetStatus;
    PFNGLREADNPIXELSPROC glReadnPixels;
    PFNGLGETNUNIFORMFVPROC glGetnUniformfv;
    PFNGLGETNUNIFORMIVPROC glGetnUniformiv;
    PFNGLGETNUNIFORMUIVPROC glGetnUniformuiv;
    PFNGLMINSAMPLESHADINGPROC glMinSampleShading;
    PFNGLPATCHPARAMETERIPROC glPatchParameteri;
    PFNGLTEXPARAMETERIIVPROC glTexParameterIiv;
    PFNGLTEXPARAMETERIUIVPROC glTexParameterIuiv;
    PFNGLGETTEXPARAMETERIIVPROC glGetTexParameterIiv;
    PFNGLGETTEXPARAMETERIUIVPROC glGetTexParameterIuiv;
    PFNGLSAMPLERPARAMETERIIVPROC glSamplerParameterIiv;
    PFNGLSAMPLERPARAMETERIUIVPROC glSamplerParameterIuiv;
    PFNGLGETSAMPLERPARAMETERIIVPROC glGetSamplerParameterIiv;
    PFNGLGETSAMPLERPARAMETERIUIVPROC glGetSamplerParameterIuiv;
    PFNGLTEXBUFFERPROC glTexBuffer;
    PFNGLTEXBUFFERRANGEPROC glTexBufferRange;
    PFNGLTEXSTORAGE3DMULTISAMPLEPROC glTexStorage3DMultisample;
    PFNGLDRAWELEMENTSINDIRECTPROC glDrawElementsIndirect;
    PFNGLMULTIDRAWARRAYSEXTPROC glMultiDrawArraysEXT;
    PFNGLMULTIDRAWELEMENTSEXTPROC glMultiDrawElementsEXT;
    PFNGLBUFFERSTORAGEEXTERNALEXTPROC glBufferStorage;
};

#endif //FOLD_CRAFT_LAUNCHER_GLES3_H
