├── .gitignore ├── CMakeLists.txt ├── GL ├── gl3w.h └── glcorearb.h ├── LICENSE ├── README.md ├── deps └── CMakeLists.txt ├── settings.txt ├── shader ├── cs.glsl ├── fs.glsl ├── gs.glsl └── vs.glsl ├── src ├── Attractor.hpp ├── Camera.hpp ├── ConfigLoader.hpp ├── GLFWInput.hpp ├── GLFWTimer.hpp ├── GLFWWindow.hpp ├── ParticleBuffer.cpp ├── ParticleBuffer.hpp ├── ParticleSystem.cpp ├── ParticleSystem.hpp ├── ParticleTexture.cpp ├── ParticleTexture.hpp ├── ShaderBaseModel.hpp ├── ShaderManager.cpp ├── ShaderManager.hpp ├── gl3w.c ├── main.cpp ├── tga.c └── tga.h └── texture └── Particle.tga /.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | build 3 | .vscode -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | 3 | project(OpenGL_Particlesystem) 4 | 5 | set (CMAKE_CXX_STANDARD 17) 6 | 7 | add_subdirectory(deps) 8 | 9 | include_directories(${DEPENDENCY_INCLUDE_DIR}) 10 | include_directories(${CMAKE_SOURCE_DIR}) 11 | 12 | set(SOURCE_FILES 13 | src/main.cpp 14 | src/gl3w.c 15 | src/ShaderManager.cpp 16 | src/tga.c 17 | src/ParticleBuffer.cpp 18 | src/ParticleSystem.cpp 19 | src/ParticleTexture.cpp 20 | src/ShaderManager.cpp 21 | ) 22 | 23 | set(HEADER_FILES 24 | src/Attractor.hpp 25 | src/GLFWWindow.hpp 26 | src/GLFWInput.hpp 27 | src/Camera.hpp 28 | src/ParticleBuffer.hpp 29 | src/ShaderManager.hpp 30 | src/tga.h 31 | src/ParticleSystem.hpp 32 | src/GLFWTimer.hpp 33 | ) 34 | 35 | set(SHADER_FILES 36 | shader/cs.glsl 37 | shader/fs.glsl 38 | shader/gs.glsl 39 | shader/vs.glsl 40 | ) 41 | 42 | foreach(SHADER ${SHADER_FILES}) 43 | configure_file(${SHADER} ${SHADER} COPYONLY) 44 | endforeach() 45 | 46 | configure_file(settings.txt settings.txt COPYONLY) 47 | configure_file(texture/Particle.tga texture/Particle.tga COPYONLY) 48 | add_executable(OpenGL_Particlesystem ${SOURCE_FILES} ${HEADER_FILES}) 49 | add_dependencies(OpenGL_Particlesystem glfw_ext glm_ext) 50 | target_link_libraries(OpenGL_Particlesystem PUBLIC glfw dl) 51 | target_compile_options(OpenGL_Particlesystem PUBLIC -Wall -g) -------------------------------------------------------------------------------- /GL/gl3w.h: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | This file was generated with gl3w_gen.py, part of gl3w 4 | (hosted at https://github.com/skaslev/gl3w) 5 | 6 | This is free and unencumbered software released into the public domain. 7 | 8 | Anyone is free to copy, modify, publish, use, compile, sell, or 9 | distribute this software, either in source code form or as a compiled 10 | binary, for any purpose, commercial or non-commercial, and by any 11 | means. 12 | 13 | In jurisdictions that recognize copyright laws, the author or authors 14 | of this software dedicate any and all copyright interest in the 15 | software to the public domain. We make this dedication for the benefit 16 | of the public at large and to the detriment of our heirs and 17 | successors. We intend this dedication to be an overt act of 18 | relinquishment in perpetuity of all present and future rights to this 19 | software under copyright law. 20 | 21 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 24 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 25 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 26 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 27 | OTHER DEALINGS IN THE SOFTWARE. 28 | 29 | */ 30 | 31 | #ifndef __gl3w_h_ 32 | #define __gl3w_h_ 33 | 34 | #include 35 | 36 | #ifndef __gl_h_ 37 | #define __gl_h_ 38 | #endif 39 | 40 | #ifdef __cplusplus 41 | extern "C" { 42 | #endif 43 | 44 | typedef void (*GL3WglProc)(void); 45 | 46 | /* gl3w api */ 47 | int gl3wInit(void); 48 | int gl3wIsSupported(int major, int minor); 49 | GL3WglProc gl3wGetProcAddress(const char *proc); 50 | 51 | /* OpenGL functions */ 52 | extern PFNGLACTIVESHADERPROGRAMPROC gl3wActiveShaderProgram; 53 | extern PFNGLACTIVETEXTUREPROC gl3wActiveTexture; 54 | extern PFNGLATTACHSHADERPROC gl3wAttachShader; 55 | extern PFNGLBEGINCONDITIONALRENDERPROC gl3wBeginConditionalRender; 56 | extern PFNGLBEGINQUERYPROC gl3wBeginQuery; 57 | extern PFNGLBEGINQUERYINDEXEDPROC gl3wBeginQueryIndexed; 58 | extern PFNGLBEGINTRANSFORMFEEDBACKPROC gl3wBeginTransformFeedback; 59 | extern PFNGLBINDATTRIBLOCATIONPROC gl3wBindAttribLocation; 60 | extern PFNGLBINDBUFFERPROC gl3wBindBuffer; 61 | extern PFNGLBINDBUFFERBASEPROC gl3wBindBufferBase; 62 | extern PFNGLBINDBUFFERRANGEPROC gl3wBindBufferRange; 63 | extern PFNGLBINDBUFFERSBASEPROC gl3wBindBuffersBase; 64 | extern PFNGLBINDBUFFERSRANGEPROC gl3wBindBuffersRange; 65 | extern PFNGLBINDFRAGDATALOCATIONPROC gl3wBindFragDataLocation; 66 | extern PFNGLBINDFRAGDATALOCATIONINDEXEDPROC gl3wBindFragDataLocationIndexed; 67 | extern PFNGLBINDFRAMEBUFFERPROC gl3wBindFramebuffer; 68 | extern PFNGLBINDIMAGETEXTUREPROC gl3wBindImageTexture; 69 | extern PFNGLBINDIMAGETEXTURESPROC gl3wBindImageTextures; 70 | extern PFNGLBINDPROGRAMPIPELINEPROC gl3wBindProgramPipeline; 71 | extern PFNGLBINDRENDERBUFFERPROC gl3wBindRenderbuffer; 72 | extern PFNGLBINDSAMPLERPROC gl3wBindSampler; 73 | extern PFNGLBINDSAMPLERSPROC gl3wBindSamplers; 74 | extern PFNGLBINDTEXTUREPROC gl3wBindTexture; 75 | extern PFNGLBINDTEXTUREUNITPROC gl3wBindTextureUnit; 76 | extern PFNGLBINDTEXTURESPROC gl3wBindTextures; 77 | extern PFNGLBINDTRANSFORMFEEDBACKPROC gl3wBindTransformFeedback; 78 | extern PFNGLBINDVERTEXARRAYPROC gl3wBindVertexArray; 79 | extern PFNGLBINDVERTEXBUFFERPROC gl3wBindVertexBuffer; 80 | extern PFNGLBINDVERTEXBUFFERSPROC gl3wBindVertexBuffers; 81 | extern PFNGLBLENDCOLORPROC gl3wBlendColor; 82 | extern PFNGLBLENDEQUATIONPROC gl3wBlendEquation; 83 | extern PFNGLBLENDEQUATIONSEPARATEPROC gl3wBlendEquationSeparate; 84 | extern PFNGLBLENDEQUATIONSEPARATEIPROC gl3wBlendEquationSeparatei; 85 | extern PFNGLBLENDEQUATIONSEPARATEIARBPROC gl3wBlendEquationSeparateiARB; 86 | extern PFNGLBLENDEQUATIONIPROC gl3wBlendEquationi; 87 | extern PFNGLBLENDEQUATIONIARBPROC gl3wBlendEquationiARB; 88 | extern PFNGLBLENDFUNCPROC gl3wBlendFunc; 89 | extern PFNGLBLENDFUNCSEPARATEPROC gl3wBlendFuncSeparate; 90 | extern PFNGLBLENDFUNCSEPARATEIPROC gl3wBlendFuncSeparatei; 91 | extern PFNGLBLENDFUNCSEPARATEIARBPROC gl3wBlendFuncSeparateiARB; 92 | extern PFNGLBLENDFUNCIPROC gl3wBlendFunci; 93 | extern PFNGLBLENDFUNCIARBPROC gl3wBlendFunciARB; 94 | extern PFNGLBLITFRAMEBUFFERPROC gl3wBlitFramebuffer; 95 | extern PFNGLBLITNAMEDFRAMEBUFFERPROC gl3wBlitNamedFramebuffer; 96 | extern PFNGLBUFFERDATAPROC gl3wBufferData; 97 | extern PFNGLBUFFERPAGECOMMITMENTARBPROC gl3wBufferPageCommitmentARB; 98 | extern PFNGLBUFFERSTORAGEPROC gl3wBufferStorage; 99 | extern PFNGLBUFFERSUBDATAPROC gl3wBufferSubData; 100 | extern PFNGLCHECKFRAMEBUFFERSTATUSPROC gl3wCheckFramebufferStatus; 101 | extern PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC gl3wCheckNamedFramebufferStatus; 102 | extern PFNGLCLAMPCOLORPROC gl3wClampColor; 103 | extern PFNGLCLEARPROC gl3wClear; 104 | extern PFNGLCLEARBUFFERDATAPROC gl3wClearBufferData; 105 | extern PFNGLCLEARBUFFERSUBDATAPROC gl3wClearBufferSubData; 106 | extern PFNGLCLEARBUFFERFIPROC gl3wClearBufferfi; 107 | extern PFNGLCLEARBUFFERFVPROC gl3wClearBufferfv; 108 | extern PFNGLCLEARBUFFERIVPROC gl3wClearBufferiv; 109 | extern PFNGLCLEARBUFFERUIVPROC gl3wClearBufferuiv; 110 | extern PFNGLCLEARCOLORPROC gl3wClearColor; 111 | extern PFNGLCLEARDEPTHPROC gl3wClearDepth; 112 | extern PFNGLCLEARDEPTHFPROC gl3wClearDepthf; 113 | extern PFNGLCLEARNAMEDBUFFERDATAPROC gl3wClearNamedBufferData; 114 | extern PFNGLCLEARNAMEDBUFFERSUBDATAPROC gl3wClearNamedBufferSubData; 115 | extern PFNGLCLEARNAMEDFRAMEBUFFERFIPROC gl3wClearNamedFramebufferfi; 116 | extern PFNGLCLEARNAMEDFRAMEBUFFERFVPROC gl3wClearNamedFramebufferfv; 117 | extern PFNGLCLEARNAMEDFRAMEBUFFERIVPROC gl3wClearNamedFramebufferiv; 118 | extern PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC gl3wClearNamedFramebufferuiv; 119 | extern PFNGLCLEARSTENCILPROC gl3wClearStencil; 120 | extern PFNGLCLEARTEXIMAGEPROC gl3wClearTexImage; 121 | extern PFNGLCLEARTEXSUBIMAGEPROC gl3wClearTexSubImage; 122 | extern PFNGLCLIENTWAITSYNCPROC gl3wClientWaitSync; 123 | extern PFNGLCLIPCONTROLPROC gl3wClipControl; 124 | extern PFNGLCOLORMASKPROC gl3wColorMask; 125 | extern PFNGLCOLORMASKIPROC gl3wColorMaski; 126 | extern PFNGLCOMPILESHADERPROC gl3wCompileShader; 127 | extern PFNGLCOMPILESHADERINCLUDEARBPROC gl3wCompileShaderIncludeARB; 128 | extern PFNGLCOMPRESSEDTEXIMAGE1DPROC gl3wCompressedTexImage1D; 129 | extern PFNGLCOMPRESSEDTEXIMAGE2DPROC gl3wCompressedTexImage2D; 130 | extern PFNGLCOMPRESSEDTEXIMAGE3DPROC gl3wCompressedTexImage3D; 131 | extern PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC gl3wCompressedTexSubImage1D; 132 | extern PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC gl3wCompressedTexSubImage2D; 133 | extern PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC gl3wCompressedTexSubImage3D; 134 | extern PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC gl3wCompressedTextureSubImage1D; 135 | extern PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC gl3wCompressedTextureSubImage2D; 136 | extern PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC gl3wCompressedTextureSubImage3D; 137 | extern PFNGLCOPYBUFFERSUBDATAPROC gl3wCopyBufferSubData; 138 | extern PFNGLCOPYIMAGESUBDATAPROC gl3wCopyImageSubData; 139 | extern PFNGLCOPYNAMEDBUFFERSUBDATAPROC gl3wCopyNamedBufferSubData; 140 | extern PFNGLCOPYTEXIMAGE1DPROC gl3wCopyTexImage1D; 141 | extern PFNGLCOPYTEXIMAGE2DPROC gl3wCopyTexImage2D; 142 | extern PFNGLCOPYTEXSUBIMAGE1DPROC gl3wCopyTexSubImage1D; 143 | extern PFNGLCOPYTEXSUBIMAGE2DPROC gl3wCopyTexSubImage2D; 144 | extern PFNGLCOPYTEXSUBIMAGE3DPROC gl3wCopyTexSubImage3D; 145 | extern PFNGLCOPYTEXTURESUBIMAGE1DPROC gl3wCopyTextureSubImage1D; 146 | extern PFNGLCOPYTEXTURESUBIMAGE2DPROC gl3wCopyTextureSubImage2D; 147 | extern PFNGLCOPYTEXTURESUBIMAGE3DPROC gl3wCopyTextureSubImage3D; 148 | extern PFNGLCREATEBUFFERSPROC gl3wCreateBuffers; 149 | extern PFNGLCREATEFRAMEBUFFERSPROC gl3wCreateFramebuffers; 150 | extern PFNGLCREATEPROGRAMPROC gl3wCreateProgram; 151 | extern PFNGLCREATEPROGRAMPIPELINESPROC gl3wCreateProgramPipelines; 152 | extern PFNGLCREATEQUERIESPROC gl3wCreateQueries; 153 | extern PFNGLCREATERENDERBUFFERSPROC gl3wCreateRenderbuffers; 154 | extern PFNGLCREATESAMPLERSPROC gl3wCreateSamplers; 155 | extern PFNGLCREATESHADERPROC gl3wCreateShader; 156 | extern PFNGLCREATESHADERPROGRAMVPROC gl3wCreateShaderProgramv; 157 | extern PFNGLCREATESYNCFROMCLEVENTARBPROC gl3wCreateSyncFromCLeventARB; 158 | extern PFNGLCREATETEXTURESPROC gl3wCreateTextures; 159 | extern PFNGLCREATETRANSFORMFEEDBACKSPROC gl3wCreateTransformFeedbacks; 160 | extern PFNGLCREATEVERTEXARRAYSPROC gl3wCreateVertexArrays; 161 | extern PFNGLCULLFACEPROC gl3wCullFace; 162 | extern PFNGLDEBUGMESSAGECALLBACKPROC gl3wDebugMessageCallback; 163 | extern PFNGLDEBUGMESSAGECALLBACKARBPROC gl3wDebugMessageCallbackARB; 164 | extern PFNGLDEBUGMESSAGECONTROLPROC gl3wDebugMessageControl; 165 | extern PFNGLDEBUGMESSAGECONTROLARBPROC gl3wDebugMessageControlARB; 166 | extern PFNGLDEBUGMESSAGEINSERTPROC gl3wDebugMessageInsert; 167 | extern PFNGLDEBUGMESSAGEINSERTARBPROC gl3wDebugMessageInsertARB; 168 | extern PFNGLDELETEBUFFERSPROC gl3wDeleteBuffers; 169 | extern PFNGLDELETEFRAMEBUFFERSPROC gl3wDeleteFramebuffers; 170 | extern PFNGLDELETENAMEDSTRINGARBPROC gl3wDeleteNamedStringARB; 171 | extern PFNGLDELETEPROGRAMPROC gl3wDeleteProgram; 172 | extern PFNGLDELETEPROGRAMPIPELINESPROC gl3wDeleteProgramPipelines; 173 | extern PFNGLDELETEQUERIESPROC gl3wDeleteQueries; 174 | extern PFNGLDELETERENDERBUFFERSPROC gl3wDeleteRenderbuffers; 175 | extern PFNGLDELETESAMPLERSPROC gl3wDeleteSamplers; 176 | extern PFNGLDELETESHADERPROC gl3wDeleteShader; 177 | extern PFNGLDELETESYNCPROC gl3wDeleteSync; 178 | extern PFNGLDELETETEXTURESPROC gl3wDeleteTextures; 179 | extern PFNGLDELETETRANSFORMFEEDBACKSPROC gl3wDeleteTransformFeedbacks; 180 | extern PFNGLDELETEVERTEXARRAYSPROC gl3wDeleteVertexArrays; 181 | extern PFNGLDEPTHFUNCPROC gl3wDepthFunc; 182 | extern PFNGLDEPTHMASKPROC gl3wDepthMask; 183 | extern PFNGLDEPTHRANGEPROC gl3wDepthRange; 184 | extern PFNGLDEPTHRANGEARRAYVPROC gl3wDepthRangeArrayv; 185 | extern PFNGLDEPTHRANGEINDEXEDPROC gl3wDepthRangeIndexed; 186 | extern PFNGLDEPTHRANGEFPROC gl3wDepthRangef; 187 | extern PFNGLDETACHSHADERPROC gl3wDetachShader; 188 | extern PFNGLDISABLEPROC gl3wDisable; 189 | extern PFNGLDISABLEVERTEXARRAYATTRIBPROC gl3wDisableVertexArrayAttrib; 190 | extern PFNGLDISABLEVERTEXATTRIBARRAYPROC gl3wDisableVertexAttribArray; 191 | extern PFNGLDISABLEIPROC gl3wDisablei; 192 | extern PFNGLDISPATCHCOMPUTEPROC gl3wDispatchCompute; 193 | extern PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC gl3wDispatchComputeGroupSizeARB; 194 | extern PFNGLDISPATCHCOMPUTEINDIRECTPROC gl3wDispatchComputeIndirect; 195 | extern PFNGLDRAWARRAYSPROC gl3wDrawArrays; 196 | extern PFNGLDRAWARRAYSINDIRECTPROC gl3wDrawArraysIndirect; 197 | extern PFNGLDRAWARRAYSINSTANCEDPROC gl3wDrawArraysInstanced; 198 | extern PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC gl3wDrawArraysInstancedBaseInstance; 199 | extern PFNGLDRAWBUFFERPROC gl3wDrawBuffer; 200 | extern PFNGLDRAWBUFFERSPROC gl3wDrawBuffers; 201 | extern PFNGLDRAWELEMENTSPROC gl3wDrawElements; 202 | extern PFNGLDRAWELEMENTSBASEVERTEXPROC gl3wDrawElementsBaseVertex; 203 | extern PFNGLDRAWELEMENTSINDIRECTPROC gl3wDrawElementsIndirect; 204 | extern PFNGLDRAWELEMENTSINSTANCEDPROC gl3wDrawElementsInstanced; 205 | extern PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC gl3wDrawElementsInstancedBaseInstance; 206 | extern PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC gl3wDrawElementsInstancedBaseVertex; 207 | extern PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC gl3wDrawElementsInstancedBaseVertexBaseInstance; 208 | extern PFNGLDRAWRANGEELEMENTSPROC gl3wDrawRangeElements; 209 | extern PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC gl3wDrawRangeElementsBaseVertex; 210 | extern PFNGLDRAWTRANSFORMFEEDBACKPROC gl3wDrawTransformFeedback; 211 | extern PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC gl3wDrawTransformFeedbackInstanced; 212 | extern PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC gl3wDrawTransformFeedbackStream; 213 | extern PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC gl3wDrawTransformFeedbackStreamInstanced; 214 | extern PFNGLENABLEPROC gl3wEnable; 215 | extern PFNGLENABLEVERTEXARRAYATTRIBPROC gl3wEnableVertexArrayAttrib; 216 | extern PFNGLENABLEVERTEXATTRIBARRAYPROC gl3wEnableVertexAttribArray; 217 | extern PFNGLENABLEIPROC gl3wEnablei; 218 | extern PFNGLENDCONDITIONALRENDERPROC gl3wEndConditionalRender; 219 | extern PFNGLENDQUERYPROC gl3wEndQuery; 220 | extern PFNGLENDQUERYINDEXEDPROC gl3wEndQueryIndexed; 221 | extern PFNGLENDTRANSFORMFEEDBACKPROC gl3wEndTransformFeedback; 222 | extern PFNGLFENCESYNCPROC gl3wFenceSync; 223 | extern PFNGLFINISHPROC gl3wFinish; 224 | extern PFNGLFLUSHPROC gl3wFlush; 225 | extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC gl3wFlushMappedBufferRange; 226 | extern PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC gl3wFlushMappedNamedBufferRange; 227 | extern PFNGLFRAMEBUFFERPARAMETERIPROC gl3wFramebufferParameteri; 228 | extern PFNGLFRAMEBUFFERRENDERBUFFERPROC gl3wFramebufferRenderbuffer; 229 | extern PFNGLFRAMEBUFFERTEXTUREPROC gl3wFramebufferTexture; 230 | extern PFNGLFRAMEBUFFERTEXTURE1DPROC gl3wFramebufferTexture1D; 231 | extern PFNGLFRAMEBUFFERTEXTURE2DPROC gl3wFramebufferTexture2D; 232 | extern PFNGLFRAMEBUFFERTEXTURE3DPROC gl3wFramebufferTexture3D; 233 | extern PFNGLFRAMEBUFFERTEXTURELAYERPROC gl3wFramebufferTextureLayer; 234 | extern PFNGLFRONTFACEPROC gl3wFrontFace; 235 | extern PFNGLGENBUFFERSPROC gl3wGenBuffers; 236 | extern PFNGLGENFRAMEBUFFERSPROC gl3wGenFramebuffers; 237 | extern PFNGLGENPROGRAMPIPELINESPROC gl3wGenProgramPipelines; 238 | extern PFNGLGENQUERIESPROC gl3wGenQueries; 239 | extern PFNGLGENRENDERBUFFERSPROC gl3wGenRenderbuffers; 240 | extern PFNGLGENSAMPLERSPROC gl3wGenSamplers; 241 | extern PFNGLGENTEXTURESPROC gl3wGenTextures; 242 | extern PFNGLGENTRANSFORMFEEDBACKSPROC gl3wGenTransformFeedbacks; 243 | extern PFNGLGENVERTEXARRAYSPROC gl3wGenVertexArrays; 244 | extern PFNGLGENERATEMIPMAPPROC gl3wGenerateMipmap; 245 | extern PFNGLGENERATETEXTUREMIPMAPPROC gl3wGenerateTextureMipmap; 246 | extern PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC gl3wGetActiveAtomicCounterBufferiv; 247 | extern PFNGLGETACTIVEATTRIBPROC gl3wGetActiveAttrib; 248 | extern PFNGLGETACTIVESUBROUTINENAMEPROC gl3wGetActiveSubroutineName; 249 | extern PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC gl3wGetActiveSubroutineUniformName; 250 | extern PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC gl3wGetActiveSubroutineUniformiv; 251 | extern PFNGLGETACTIVEUNIFORMPROC gl3wGetActiveUniform; 252 | extern PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC gl3wGetActiveUniformBlockName; 253 | extern PFNGLGETACTIVEUNIFORMBLOCKIVPROC gl3wGetActiveUniformBlockiv; 254 | extern PFNGLGETACTIVEUNIFORMNAMEPROC gl3wGetActiveUniformName; 255 | extern PFNGLGETACTIVEUNIFORMSIVPROC gl3wGetActiveUniformsiv; 256 | extern PFNGLGETATTACHEDSHADERSPROC gl3wGetAttachedShaders; 257 | extern PFNGLGETATTRIBLOCATIONPROC gl3wGetAttribLocation; 258 | extern PFNGLGETBOOLEANI_VPROC gl3wGetBooleani_v; 259 | extern PFNGLGETBOOLEANVPROC gl3wGetBooleanv; 260 | extern PFNGLGETBUFFERPARAMETERI64VPROC gl3wGetBufferParameteri64v; 261 | extern PFNGLGETBUFFERPARAMETERIVPROC gl3wGetBufferParameteriv; 262 | extern PFNGLGETBUFFERPOINTERVPROC gl3wGetBufferPointerv; 263 | extern PFNGLGETBUFFERSUBDATAPROC gl3wGetBufferSubData; 264 | extern PFNGLGETCOMPRESSEDTEXIMAGEPROC gl3wGetCompressedTexImage; 265 | extern PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC gl3wGetCompressedTextureImage; 266 | extern PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC gl3wGetCompressedTextureSubImage; 267 | extern PFNGLGETDEBUGMESSAGELOGPROC gl3wGetDebugMessageLog; 268 | extern PFNGLGETDEBUGMESSAGELOGARBPROC gl3wGetDebugMessageLogARB; 269 | extern PFNGLGETDOUBLEI_VPROC gl3wGetDoublei_v; 270 | extern PFNGLGETDOUBLEVPROC gl3wGetDoublev; 271 | extern PFNGLGETERRORPROC gl3wGetError; 272 | extern PFNGLGETFLOATI_VPROC gl3wGetFloati_v; 273 | extern PFNGLGETFLOATVPROC gl3wGetFloatv; 274 | extern PFNGLGETFRAGDATAINDEXPROC gl3wGetFragDataIndex; 275 | extern PFNGLGETFRAGDATALOCATIONPROC gl3wGetFragDataLocation; 276 | extern PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC gl3wGetFramebufferAttachmentParameteriv; 277 | extern PFNGLGETFRAMEBUFFERPARAMETERIVPROC gl3wGetFramebufferParameteriv; 278 | extern PFNGLGETGRAPHICSRESETSTATUSPROC gl3wGetGraphicsResetStatus; 279 | extern PFNGLGETGRAPHICSRESETSTATUSARBPROC gl3wGetGraphicsResetStatusARB; 280 | extern PFNGLGETIMAGEHANDLEARBPROC gl3wGetImageHandleARB; 281 | extern PFNGLGETINTEGER64I_VPROC gl3wGetInteger64i_v; 282 | extern PFNGLGETINTEGER64VPROC gl3wGetInteger64v; 283 | extern PFNGLGETINTEGERI_VPROC gl3wGetIntegeri_v; 284 | extern PFNGLGETINTEGERVPROC gl3wGetIntegerv; 285 | extern PFNGLGETINTERNALFORMATI64VPROC gl3wGetInternalformati64v; 286 | extern PFNGLGETINTERNALFORMATIVPROC gl3wGetInternalformativ; 287 | extern PFNGLGETMULTISAMPLEFVPROC gl3wGetMultisamplefv; 288 | extern PFNGLGETNAMEDBUFFERPARAMETERI64VPROC gl3wGetNamedBufferParameteri64v; 289 | extern PFNGLGETNAMEDBUFFERPARAMETERIVPROC gl3wGetNamedBufferParameteriv; 290 | extern PFNGLGETNAMEDBUFFERPOINTERVPROC gl3wGetNamedBufferPointerv; 291 | extern PFNGLGETNAMEDBUFFERSUBDATAPROC gl3wGetNamedBufferSubData; 292 | extern PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC gl3wGetNamedFramebufferAttachmentParameteriv; 293 | extern PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC gl3wGetNamedFramebufferParameteriv; 294 | extern PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC gl3wGetNamedRenderbufferParameteriv; 295 | extern PFNGLGETNAMEDSTRINGARBPROC gl3wGetNamedStringARB; 296 | extern PFNGLGETNAMEDSTRINGIVARBPROC gl3wGetNamedStringivARB; 297 | extern PFNGLGETOBJECTLABELPROC gl3wGetObjectLabel; 298 | extern PFNGLGETOBJECTPTRLABELPROC gl3wGetObjectPtrLabel; 299 | extern PFNGLGETPOINTERVPROC gl3wGetPointerv; 300 | extern PFNGLGETPROGRAMBINARYPROC gl3wGetProgramBinary; 301 | extern PFNGLGETPROGRAMINFOLOGPROC gl3wGetProgramInfoLog; 302 | extern PFNGLGETPROGRAMINTERFACEIVPROC gl3wGetProgramInterfaceiv; 303 | extern PFNGLGETPROGRAMPIPELINEINFOLOGPROC gl3wGetProgramPipelineInfoLog; 304 | extern PFNGLGETPROGRAMPIPELINEIVPROC gl3wGetProgramPipelineiv; 305 | extern PFNGLGETPROGRAMRESOURCEINDEXPROC gl3wGetProgramResourceIndex; 306 | extern PFNGLGETPROGRAMRESOURCELOCATIONPROC gl3wGetProgramResourceLocation; 307 | extern PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC gl3wGetProgramResourceLocationIndex; 308 | extern PFNGLGETPROGRAMRESOURCENAMEPROC gl3wGetProgramResourceName; 309 | extern PFNGLGETPROGRAMRESOURCEIVPROC gl3wGetProgramResourceiv; 310 | extern PFNGLGETPROGRAMSTAGEIVPROC gl3wGetProgramStageiv; 311 | extern PFNGLGETPROGRAMIVPROC gl3wGetProgramiv; 312 | extern PFNGLGETQUERYBUFFEROBJECTI64VPROC gl3wGetQueryBufferObjecti64v; 313 | extern PFNGLGETQUERYBUFFEROBJECTIVPROC gl3wGetQueryBufferObjectiv; 314 | extern PFNGLGETQUERYBUFFEROBJECTUI64VPROC gl3wGetQueryBufferObjectui64v; 315 | extern PFNGLGETQUERYBUFFEROBJECTUIVPROC gl3wGetQueryBufferObjectuiv; 316 | extern PFNGLGETQUERYINDEXEDIVPROC gl3wGetQueryIndexediv; 317 | extern PFNGLGETQUERYOBJECTI64VPROC gl3wGetQueryObjecti64v; 318 | extern PFNGLGETQUERYOBJECTIVPROC gl3wGetQueryObjectiv; 319 | extern PFNGLGETQUERYOBJECTUI64VPROC gl3wGetQueryObjectui64v; 320 | extern PFNGLGETQUERYOBJECTUIVPROC gl3wGetQueryObjectuiv; 321 | extern PFNGLGETQUERYIVPROC gl3wGetQueryiv; 322 | extern PFNGLGETRENDERBUFFERPARAMETERIVPROC gl3wGetRenderbufferParameteriv; 323 | extern PFNGLGETSAMPLERPARAMETERIIVPROC gl3wGetSamplerParameterIiv; 324 | extern PFNGLGETSAMPLERPARAMETERIUIVPROC gl3wGetSamplerParameterIuiv; 325 | extern PFNGLGETSAMPLERPARAMETERFVPROC gl3wGetSamplerParameterfv; 326 | extern PFNGLGETSAMPLERPARAMETERIVPROC gl3wGetSamplerParameteriv; 327 | extern PFNGLGETSHADERINFOLOGPROC gl3wGetShaderInfoLog; 328 | extern PFNGLGETSHADERPRECISIONFORMATPROC gl3wGetShaderPrecisionFormat; 329 | extern PFNGLGETSHADERSOURCEPROC gl3wGetShaderSource; 330 | extern PFNGLGETSHADERIVPROC gl3wGetShaderiv; 331 | extern PFNGLGETSTRINGPROC gl3wGetString; 332 | extern PFNGLGETSTRINGIPROC gl3wGetStringi; 333 | extern PFNGLGETSUBROUTINEINDEXPROC gl3wGetSubroutineIndex; 334 | extern PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC gl3wGetSubroutineUniformLocation; 335 | extern PFNGLGETSYNCIVPROC gl3wGetSynciv; 336 | extern PFNGLGETTEXIMAGEPROC gl3wGetTexImage; 337 | extern PFNGLGETTEXLEVELPARAMETERFVPROC gl3wGetTexLevelParameterfv; 338 | extern PFNGLGETTEXLEVELPARAMETERIVPROC gl3wGetTexLevelParameteriv; 339 | extern PFNGLGETTEXPARAMETERIIVPROC gl3wGetTexParameterIiv; 340 | extern PFNGLGETTEXPARAMETERIUIVPROC gl3wGetTexParameterIuiv; 341 | extern PFNGLGETTEXPARAMETERFVPROC gl3wGetTexParameterfv; 342 | extern PFNGLGETTEXPARAMETERIVPROC gl3wGetTexParameteriv; 343 | extern PFNGLGETTEXTUREHANDLEARBPROC gl3wGetTextureHandleARB; 344 | extern PFNGLGETTEXTUREIMAGEPROC gl3wGetTextureImage; 345 | extern PFNGLGETTEXTURELEVELPARAMETERFVPROC gl3wGetTextureLevelParameterfv; 346 | extern PFNGLGETTEXTURELEVELPARAMETERIVPROC gl3wGetTextureLevelParameteriv; 347 | extern PFNGLGETTEXTUREPARAMETERIIVPROC gl3wGetTextureParameterIiv; 348 | extern PFNGLGETTEXTUREPARAMETERIUIVPROC gl3wGetTextureParameterIuiv; 349 | extern PFNGLGETTEXTUREPARAMETERFVPROC gl3wGetTextureParameterfv; 350 | extern PFNGLGETTEXTUREPARAMETERIVPROC gl3wGetTextureParameteriv; 351 | extern PFNGLGETTEXTURESAMPLERHANDLEARBPROC gl3wGetTextureSamplerHandleARB; 352 | extern PFNGLGETTEXTURESUBIMAGEPROC gl3wGetTextureSubImage; 353 | extern PFNGLGETTRANSFORMFEEDBACKVARYINGPROC gl3wGetTransformFeedbackVarying; 354 | extern PFNGLGETTRANSFORMFEEDBACKI64_VPROC gl3wGetTransformFeedbacki64_v; 355 | extern PFNGLGETTRANSFORMFEEDBACKI_VPROC gl3wGetTransformFeedbacki_v; 356 | extern PFNGLGETTRANSFORMFEEDBACKIVPROC gl3wGetTransformFeedbackiv; 357 | extern PFNGLGETUNIFORMBLOCKINDEXPROC gl3wGetUniformBlockIndex; 358 | extern PFNGLGETUNIFORMINDICESPROC gl3wGetUniformIndices; 359 | extern PFNGLGETUNIFORMLOCATIONPROC gl3wGetUniformLocation; 360 | extern PFNGLGETUNIFORMSUBROUTINEUIVPROC gl3wGetUniformSubroutineuiv; 361 | extern PFNGLGETUNIFORMDVPROC gl3wGetUniformdv; 362 | extern PFNGLGETUNIFORMFVPROC gl3wGetUniformfv; 363 | extern PFNGLGETUNIFORMIVPROC gl3wGetUniformiv; 364 | extern PFNGLGETUNIFORMUIVPROC gl3wGetUniformuiv; 365 | extern PFNGLGETVERTEXARRAYINDEXED64IVPROC gl3wGetVertexArrayIndexed64iv; 366 | extern PFNGLGETVERTEXARRAYINDEXEDIVPROC gl3wGetVertexArrayIndexediv; 367 | extern PFNGLGETVERTEXARRAYIVPROC gl3wGetVertexArrayiv; 368 | extern PFNGLGETVERTEXATTRIBIIVPROC gl3wGetVertexAttribIiv; 369 | extern PFNGLGETVERTEXATTRIBIUIVPROC gl3wGetVertexAttribIuiv; 370 | extern PFNGLGETVERTEXATTRIBLDVPROC gl3wGetVertexAttribLdv; 371 | extern PFNGLGETVERTEXATTRIBLUI64VARBPROC gl3wGetVertexAttribLui64vARB; 372 | extern PFNGLGETVERTEXATTRIBPOINTERVPROC gl3wGetVertexAttribPointerv; 373 | extern PFNGLGETVERTEXATTRIBDVPROC gl3wGetVertexAttribdv; 374 | extern PFNGLGETVERTEXATTRIBFVPROC gl3wGetVertexAttribfv; 375 | extern PFNGLGETVERTEXATTRIBIVPROC gl3wGetVertexAttribiv; 376 | extern PFNGLGETNCOMPRESSEDTEXIMAGEPROC gl3wGetnCompressedTexImage; 377 | extern PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC gl3wGetnCompressedTexImageARB; 378 | extern PFNGLGETNTEXIMAGEPROC gl3wGetnTexImage; 379 | extern PFNGLGETNTEXIMAGEARBPROC gl3wGetnTexImageARB; 380 | extern PFNGLGETNUNIFORMDVPROC gl3wGetnUniformdv; 381 | extern PFNGLGETNUNIFORMDVARBPROC gl3wGetnUniformdvARB; 382 | extern PFNGLGETNUNIFORMFVPROC gl3wGetnUniformfv; 383 | extern PFNGLGETNUNIFORMFVARBPROC gl3wGetnUniformfvARB; 384 | extern PFNGLGETNUNIFORMIVPROC gl3wGetnUniformiv; 385 | extern PFNGLGETNUNIFORMIVARBPROC gl3wGetnUniformivARB; 386 | extern PFNGLGETNUNIFORMUIVPROC gl3wGetnUniformuiv; 387 | extern PFNGLGETNUNIFORMUIVARBPROC gl3wGetnUniformuivARB; 388 | extern PFNGLHINTPROC gl3wHint; 389 | extern PFNGLINVALIDATEBUFFERDATAPROC gl3wInvalidateBufferData; 390 | extern PFNGLINVALIDATEBUFFERSUBDATAPROC gl3wInvalidateBufferSubData; 391 | extern PFNGLINVALIDATEFRAMEBUFFERPROC gl3wInvalidateFramebuffer; 392 | extern PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC gl3wInvalidateNamedFramebufferData; 393 | extern PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC gl3wInvalidateNamedFramebufferSubData; 394 | extern PFNGLINVALIDATESUBFRAMEBUFFERPROC gl3wInvalidateSubFramebuffer; 395 | extern PFNGLINVALIDATETEXIMAGEPROC gl3wInvalidateTexImage; 396 | extern PFNGLINVALIDATETEXSUBIMAGEPROC gl3wInvalidateTexSubImage; 397 | extern PFNGLISBUFFERPROC gl3wIsBuffer; 398 | extern PFNGLISENABLEDPROC gl3wIsEnabled; 399 | extern PFNGLISENABLEDIPROC gl3wIsEnabledi; 400 | extern PFNGLISFRAMEBUFFERPROC gl3wIsFramebuffer; 401 | extern PFNGLISIMAGEHANDLERESIDENTARBPROC gl3wIsImageHandleResidentARB; 402 | extern PFNGLISNAMEDSTRINGARBPROC gl3wIsNamedStringARB; 403 | extern PFNGLISPROGRAMPROC gl3wIsProgram; 404 | extern PFNGLISPROGRAMPIPELINEPROC gl3wIsProgramPipeline; 405 | extern PFNGLISQUERYPROC gl3wIsQuery; 406 | extern PFNGLISRENDERBUFFERPROC gl3wIsRenderbuffer; 407 | extern PFNGLISSAMPLERPROC gl3wIsSampler; 408 | extern PFNGLISSHADERPROC gl3wIsShader; 409 | extern PFNGLISSYNCPROC gl3wIsSync; 410 | extern PFNGLISTEXTUREPROC gl3wIsTexture; 411 | extern PFNGLISTEXTUREHANDLERESIDENTARBPROC gl3wIsTextureHandleResidentARB; 412 | extern PFNGLISTRANSFORMFEEDBACKPROC gl3wIsTransformFeedback; 413 | extern PFNGLISVERTEXARRAYPROC gl3wIsVertexArray; 414 | extern PFNGLLINEWIDTHPROC gl3wLineWidth; 415 | extern PFNGLLINKPROGRAMPROC gl3wLinkProgram; 416 | extern PFNGLLOGICOPPROC gl3wLogicOp; 417 | extern PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC gl3wMakeImageHandleNonResidentARB; 418 | extern PFNGLMAKEIMAGEHANDLERESIDENTARBPROC gl3wMakeImageHandleResidentARB; 419 | extern PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC gl3wMakeTextureHandleNonResidentARB; 420 | extern PFNGLMAKETEXTUREHANDLERESIDENTARBPROC gl3wMakeTextureHandleResidentARB; 421 | extern PFNGLMAPBUFFERPROC gl3wMapBuffer; 422 | extern PFNGLMAPBUFFERRANGEPROC gl3wMapBufferRange; 423 | extern PFNGLMAPNAMEDBUFFERPROC gl3wMapNamedBuffer; 424 | extern PFNGLMAPNAMEDBUFFERRANGEPROC gl3wMapNamedBufferRange; 425 | extern PFNGLMEMORYBARRIERPROC gl3wMemoryBarrier; 426 | extern PFNGLMEMORYBARRIERBYREGIONPROC gl3wMemoryBarrierByRegion; 427 | extern PFNGLMINSAMPLESHADINGPROC gl3wMinSampleShading; 428 | extern PFNGLMINSAMPLESHADINGARBPROC gl3wMinSampleShadingARB; 429 | extern PFNGLMULTIDRAWARRAYSPROC gl3wMultiDrawArrays; 430 | extern PFNGLMULTIDRAWARRAYSINDIRECTPROC gl3wMultiDrawArraysIndirect; 431 | extern PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC gl3wMultiDrawArraysIndirectCountARB; 432 | extern PFNGLMULTIDRAWELEMENTSPROC gl3wMultiDrawElements; 433 | extern PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC gl3wMultiDrawElementsBaseVertex; 434 | extern PFNGLMULTIDRAWELEMENTSINDIRECTPROC gl3wMultiDrawElementsIndirect; 435 | extern PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC gl3wMultiDrawElementsIndirectCountARB; 436 | extern PFNGLNAMEDBUFFERDATAPROC gl3wNamedBufferData; 437 | extern PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC gl3wNamedBufferPageCommitmentARB; 438 | extern PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC gl3wNamedBufferPageCommitmentEXT; 439 | extern PFNGLNAMEDBUFFERSTORAGEPROC gl3wNamedBufferStorage; 440 | extern PFNGLNAMEDBUFFERSUBDATAPROC gl3wNamedBufferSubData; 441 | extern PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC gl3wNamedFramebufferDrawBuffer; 442 | extern PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC gl3wNamedFramebufferDrawBuffers; 443 | extern PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC gl3wNamedFramebufferParameteri; 444 | extern PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC gl3wNamedFramebufferReadBuffer; 445 | extern PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC gl3wNamedFramebufferRenderbuffer; 446 | extern PFNGLNAMEDFRAMEBUFFERTEXTUREPROC gl3wNamedFramebufferTexture; 447 | extern PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC gl3wNamedFramebufferTextureLayer; 448 | extern PFNGLNAMEDRENDERBUFFERSTORAGEPROC gl3wNamedRenderbufferStorage; 449 | extern PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC gl3wNamedRenderbufferStorageMultisample; 450 | extern PFNGLNAMEDSTRINGARBPROC gl3wNamedStringARB; 451 | extern PFNGLOBJECTLABELPROC gl3wObjectLabel; 452 | extern PFNGLOBJECTPTRLABELPROC gl3wObjectPtrLabel; 453 | extern PFNGLPATCHPARAMETERFVPROC gl3wPatchParameterfv; 454 | extern PFNGLPATCHPARAMETERIPROC gl3wPatchParameteri; 455 | extern PFNGLPAUSETRANSFORMFEEDBACKPROC gl3wPauseTransformFeedback; 456 | extern PFNGLPIXELSTOREFPROC gl3wPixelStoref; 457 | extern PFNGLPIXELSTOREIPROC gl3wPixelStorei; 458 | extern PFNGLPOINTPARAMETERFPROC gl3wPointParameterf; 459 | extern PFNGLPOINTPARAMETERFVPROC gl3wPointParameterfv; 460 | extern PFNGLPOINTPARAMETERIPROC gl3wPointParameteri; 461 | extern PFNGLPOINTPARAMETERIVPROC gl3wPointParameteriv; 462 | extern PFNGLPOINTSIZEPROC gl3wPointSize; 463 | extern PFNGLPOLYGONMODEPROC gl3wPolygonMode; 464 | extern PFNGLPOLYGONOFFSETPROC gl3wPolygonOffset; 465 | extern PFNGLPOPDEBUGGROUPPROC gl3wPopDebugGroup; 466 | extern PFNGLPRIMITIVERESTARTINDEXPROC gl3wPrimitiveRestartIndex; 467 | extern PFNGLPROGRAMBINARYPROC gl3wProgramBinary; 468 | extern PFNGLPROGRAMPARAMETERIPROC gl3wProgramParameteri; 469 | extern PFNGLPROGRAMUNIFORM1DPROC gl3wProgramUniform1d; 470 | extern PFNGLPROGRAMUNIFORM1DVPROC gl3wProgramUniform1dv; 471 | extern PFNGLPROGRAMUNIFORM1FPROC gl3wProgramUniform1f; 472 | extern PFNGLPROGRAMUNIFORM1FVPROC gl3wProgramUniform1fv; 473 | extern PFNGLPROGRAMUNIFORM1IPROC gl3wProgramUniform1i; 474 | extern PFNGLPROGRAMUNIFORM1IVPROC gl3wProgramUniform1iv; 475 | extern PFNGLPROGRAMUNIFORM1UIPROC gl3wProgramUniform1ui; 476 | extern PFNGLPROGRAMUNIFORM1UIVPROC gl3wProgramUniform1uiv; 477 | extern PFNGLPROGRAMUNIFORM2DPROC gl3wProgramUniform2d; 478 | extern PFNGLPROGRAMUNIFORM2DVPROC gl3wProgramUniform2dv; 479 | extern PFNGLPROGRAMUNIFORM2FPROC gl3wProgramUniform2f; 480 | extern PFNGLPROGRAMUNIFORM2FVPROC gl3wProgramUniform2fv; 481 | extern PFNGLPROGRAMUNIFORM2IPROC gl3wProgramUniform2i; 482 | extern PFNGLPROGRAMUNIFORM2IVPROC gl3wProgramUniform2iv; 483 | extern PFNGLPROGRAMUNIFORM2UIPROC gl3wProgramUniform2ui; 484 | extern PFNGLPROGRAMUNIFORM2UIVPROC gl3wProgramUniform2uiv; 485 | extern PFNGLPROGRAMUNIFORM3DPROC gl3wProgramUniform3d; 486 | extern PFNGLPROGRAMUNIFORM3DVPROC gl3wProgramUniform3dv; 487 | extern PFNGLPROGRAMUNIFORM3FPROC gl3wProgramUniform3f; 488 | extern PFNGLPROGRAMUNIFORM3FVPROC gl3wProgramUniform3fv; 489 | extern PFNGLPROGRAMUNIFORM3IPROC gl3wProgramUniform3i; 490 | extern PFNGLPROGRAMUNIFORM3IVPROC gl3wProgramUniform3iv; 491 | extern PFNGLPROGRAMUNIFORM3UIPROC gl3wProgramUniform3ui; 492 | extern PFNGLPROGRAMUNIFORM3UIVPROC gl3wProgramUniform3uiv; 493 | extern PFNGLPROGRAMUNIFORM4DPROC gl3wProgramUniform4d; 494 | extern PFNGLPROGRAMUNIFORM4DVPROC gl3wProgramUniform4dv; 495 | extern PFNGLPROGRAMUNIFORM4FPROC gl3wProgramUniform4f; 496 | extern PFNGLPROGRAMUNIFORM4FVPROC gl3wProgramUniform4fv; 497 | extern PFNGLPROGRAMUNIFORM4IPROC gl3wProgramUniform4i; 498 | extern PFNGLPROGRAMUNIFORM4IVPROC gl3wProgramUniform4iv; 499 | extern PFNGLPROGRAMUNIFORM4UIPROC gl3wProgramUniform4ui; 500 | extern PFNGLPROGRAMUNIFORM4UIVPROC gl3wProgramUniform4uiv; 501 | extern PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC gl3wProgramUniformHandleui64ARB; 502 | extern PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC gl3wProgramUniformHandleui64vARB; 503 | extern PFNGLPROGRAMUNIFORMMATRIX2DVPROC gl3wProgramUniformMatrix2dv; 504 | extern PFNGLPROGRAMUNIFORMMATRIX2FVPROC gl3wProgramUniformMatrix2fv; 505 | extern PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC gl3wProgramUniformMatrix2x3dv; 506 | extern PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC gl3wProgramUniformMatrix2x3fv; 507 | extern PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC gl3wProgramUniformMatrix2x4dv; 508 | extern PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC gl3wProgramUniformMatrix2x4fv; 509 | extern PFNGLPROGRAMUNIFORMMATRIX3DVPROC gl3wProgramUniformMatrix3dv; 510 | extern PFNGLPROGRAMUNIFORMMATRIX3FVPROC gl3wProgramUniformMatrix3fv; 511 | extern PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC gl3wProgramUniformMatrix3x2dv; 512 | extern PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC gl3wProgramUniformMatrix3x2fv; 513 | extern PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC gl3wProgramUniformMatrix3x4dv; 514 | extern PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC gl3wProgramUniformMatrix3x4fv; 515 | extern PFNGLPROGRAMUNIFORMMATRIX4DVPROC gl3wProgramUniformMatrix4dv; 516 | extern PFNGLPROGRAMUNIFORMMATRIX4FVPROC gl3wProgramUniformMatrix4fv; 517 | extern PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC gl3wProgramUniformMatrix4x2dv; 518 | extern PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC gl3wProgramUniformMatrix4x2fv; 519 | extern PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC gl3wProgramUniformMatrix4x3dv; 520 | extern PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC gl3wProgramUniformMatrix4x3fv; 521 | extern PFNGLPROVOKINGVERTEXPROC gl3wProvokingVertex; 522 | extern PFNGLPUSHDEBUGGROUPPROC gl3wPushDebugGroup; 523 | extern PFNGLQUERYCOUNTERPROC gl3wQueryCounter; 524 | extern PFNGLREADBUFFERPROC gl3wReadBuffer; 525 | extern PFNGLREADPIXELSPROC gl3wReadPixels; 526 | extern PFNGLREADNPIXELSPROC gl3wReadnPixels; 527 | extern PFNGLREADNPIXELSARBPROC gl3wReadnPixelsARB; 528 | extern PFNGLRELEASESHADERCOMPILERPROC gl3wReleaseShaderCompiler; 529 | extern PFNGLRENDERBUFFERSTORAGEPROC gl3wRenderbufferStorage; 530 | extern PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC gl3wRenderbufferStorageMultisample; 531 | extern PFNGLRESUMETRANSFORMFEEDBACKPROC gl3wResumeTransformFeedback; 532 | extern PFNGLSAMPLECOVERAGEPROC gl3wSampleCoverage; 533 | extern PFNGLSAMPLEMASKIPROC gl3wSampleMaski; 534 | extern PFNGLSAMPLERPARAMETERIIVPROC gl3wSamplerParameterIiv; 535 | extern PFNGLSAMPLERPARAMETERIUIVPROC gl3wSamplerParameterIuiv; 536 | extern PFNGLSAMPLERPARAMETERFPROC gl3wSamplerParameterf; 537 | extern PFNGLSAMPLERPARAMETERFVPROC gl3wSamplerParameterfv; 538 | extern PFNGLSAMPLERPARAMETERIPROC gl3wSamplerParameteri; 539 | extern PFNGLSAMPLERPARAMETERIVPROC gl3wSamplerParameteriv; 540 | extern PFNGLSCISSORPROC gl3wScissor; 541 | extern PFNGLSCISSORARRAYVPROC gl3wScissorArrayv; 542 | extern PFNGLSCISSORINDEXEDPROC gl3wScissorIndexed; 543 | extern PFNGLSCISSORINDEXEDVPROC gl3wScissorIndexedv; 544 | extern PFNGLSHADERBINARYPROC gl3wShaderBinary; 545 | extern PFNGLSHADERSOURCEPROC gl3wShaderSource; 546 | extern PFNGLSHADERSTORAGEBLOCKBINDINGPROC gl3wShaderStorageBlockBinding; 547 | extern PFNGLSTENCILFUNCPROC gl3wStencilFunc; 548 | extern PFNGLSTENCILFUNCSEPARATEPROC gl3wStencilFuncSeparate; 549 | extern PFNGLSTENCILMASKPROC gl3wStencilMask; 550 | extern PFNGLSTENCILMASKSEPARATEPROC gl3wStencilMaskSeparate; 551 | extern PFNGLSTENCILOPPROC gl3wStencilOp; 552 | extern PFNGLSTENCILOPSEPARATEPROC gl3wStencilOpSeparate; 553 | extern PFNGLTEXBUFFERPROC gl3wTexBuffer; 554 | extern PFNGLTEXBUFFERRANGEPROC gl3wTexBufferRange; 555 | extern PFNGLTEXIMAGE1DPROC gl3wTexImage1D; 556 | extern PFNGLTEXIMAGE2DPROC gl3wTexImage2D; 557 | extern PFNGLTEXIMAGE2DMULTISAMPLEPROC gl3wTexImage2DMultisample; 558 | extern PFNGLTEXIMAGE3DPROC gl3wTexImage3D; 559 | extern PFNGLTEXIMAGE3DMULTISAMPLEPROC gl3wTexImage3DMultisample; 560 | extern PFNGLTEXPAGECOMMITMENTARBPROC gl3wTexPageCommitmentARB; 561 | extern PFNGLTEXPARAMETERIIVPROC gl3wTexParameterIiv; 562 | extern PFNGLTEXPARAMETERIUIVPROC gl3wTexParameterIuiv; 563 | extern PFNGLTEXPARAMETERFPROC gl3wTexParameterf; 564 | extern PFNGLTEXPARAMETERFVPROC gl3wTexParameterfv; 565 | extern PFNGLTEXPARAMETERIPROC gl3wTexParameteri; 566 | extern PFNGLTEXPARAMETERIVPROC gl3wTexParameteriv; 567 | extern PFNGLTEXSTORAGE1DPROC gl3wTexStorage1D; 568 | extern PFNGLTEXSTORAGE2DPROC gl3wTexStorage2D; 569 | extern PFNGLTEXSTORAGE2DMULTISAMPLEPROC gl3wTexStorage2DMultisample; 570 | extern PFNGLTEXSTORAGE3DPROC gl3wTexStorage3D; 571 | extern PFNGLTEXSTORAGE3DMULTISAMPLEPROC gl3wTexStorage3DMultisample; 572 | extern PFNGLTEXSUBIMAGE1DPROC gl3wTexSubImage1D; 573 | extern PFNGLTEXSUBIMAGE2DPROC gl3wTexSubImage2D; 574 | extern PFNGLTEXSUBIMAGE3DPROC gl3wTexSubImage3D; 575 | extern PFNGLTEXTUREBARRIERPROC gl3wTextureBarrier; 576 | extern PFNGLTEXTUREBUFFERPROC gl3wTextureBuffer; 577 | extern PFNGLTEXTUREBUFFERRANGEPROC gl3wTextureBufferRange; 578 | extern PFNGLTEXTUREPARAMETERIIVPROC gl3wTextureParameterIiv; 579 | extern PFNGLTEXTUREPARAMETERIUIVPROC gl3wTextureParameterIuiv; 580 | extern PFNGLTEXTUREPARAMETERFPROC gl3wTextureParameterf; 581 | extern PFNGLTEXTUREPARAMETERFVPROC gl3wTextureParameterfv; 582 | extern PFNGLTEXTUREPARAMETERIPROC gl3wTextureParameteri; 583 | extern PFNGLTEXTUREPARAMETERIVPROC gl3wTextureParameteriv; 584 | extern PFNGLTEXTURESTORAGE1DPROC gl3wTextureStorage1D; 585 | extern PFNGLTEXTURESTORAGE2DPROC gl3wTextureStorage2D; 586 | extern PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC gl3wTextureStorage2DMultisample; 587 | extern PFNGLTEXTURESTORAGE3DPROC gl3wTextureStorage3D; 588 | extern PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC gl3wTextureStorage3DMultisample; 589 | extern PFNGLTEXTURESUBIMAGE1DPROC gl3wTextureSubImage1D; 590 | extern PFNGLTEXTURESUBIMAGE2DPROC gl3wTextureSubImage2D; 591 | extern PFNGLTEXTURESUBIMAGE3DPROC gl3wTextureSubImage3D; 592 | extern PFNGLTEXTUREVIEWPROC gl3wTextureView; 593 | extern PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC gl3wTransformFeedbackBufferBase; 594 | extern PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC gl3wTransformFeedbackBufferRange; 595 | extern PFNGLTRANSFORMFEEDBACKVARYINGSPROC gl3wTransformFeedbackVaryings; 596 | extern PFNGLUNIFORM1DPROC gl3wUniform1d; 597 | extern PFNGLUNIFORM1DVPROC gl3wUniform1dv; 598 | extern PFNGLUNIFORM1FPROC gl3wUniform1f; 599 | extern PFNGLUNIFORM1FVPROC gl3wUniform1fv; 600 | extern PFNGLUNIFORM1IPROC gl3wUniform1i; 601 | extern PFNGLUNIFORM1IVPROC gl3wUniform1iv; 602 | extern PFNGLUNIFORM1UIPROC gl3wUniform1ui; 603 | extern PFNGLUNIFORM1UIVPROC gl3wUniform1uiv; 604 | extern PFNGLUNIFORM2DPROC gl3wUniform2d; 605 | extern PFNGLUNIFORM2DVPROC gl3wUniform2dv; 606 | extern PFNGLUNIFORM2FPROC gl3wUniform2f; 607 | extern PFNGLUNIFORM2FVPROC gl3wUniform2fv; 608 | extern PFNGLUNIFORM2IPROC gl3wUniform2i; 609 | extern PFNGLUNIFORM2IVPROC gl3wUniform2iv; 610 | extern PFNGLUNIFORM2UIPROC gl3wUniform2ui; 611 | extern PFNGLUNIFORM2UIVPROC gl3wUniform2uiv; 612 | extern PFNGLUNIFORM3DPROC gl3wUniform3d; 613 | extern PFNGLUNIFORM3DVPROC gl3wUniform3dv; 614 | extern PFNGLUNIFORM3FPROC gl3wUniform3f; 615 | extern PFNGLUNIFORM3FVPROC gl3wUniform3fv; 616 | extern PFNGLUNIFORM3IPROC gl3wUniform3i; 617 | extern PFNGLUNIFORM3IVPROC gl3wUniform3iv; 618 | extern PFNGLUNIFORM3UIPROC gl3wUniform3ui; 619 | extern PFNGLUNIFORM3UIVPROC gl3wUniform3uiv; 620 | extern PFNGLUNIFORM4DPROC gl3wUniform4d; 621 | extern PFNGLUNIFORM4DVPROC gl3wUniform4dv; 622 | extern PFNGLUNIFORM4FPROC gl3wUniform4f; 623 | extern PFNGLUNIFORM4FVPROC gl3wUniform4fv; 624 | extern PFNGLUNIFORM4IPROC gl3wUniform4i; 625 | extern PFNGLUNIFORM4IVPROC gl3wUniform4iv; 626 | extern PFNGLUNIFORM4UIPROC gl3wUniform4ui; 627 | extern PFNGLUNIFORM4UIVPROC gl3wUniform4uiv; 628 | extern PFNGLUNIFORMBLOCKBINDINGPROC gl3wUniformBlockBinding; 629 | extern PFNGLUNIFORMHANDLEUI64ARBPROC gl3wUniformHandleui64ARB; 630 | extern PFNGLUNIFORMHANDLEUI64VARBPROC gl3wUniformHandleui64vARB; 631 | extern PFNGLUNIFORMMATRIX2DVPROC gl3wUniformMatrix2dv; 632 | extern PFNGLUNIFORMMATRIX2FVPROC gl3wUniformMatrix2fv; 633 | extern PFNGLUNIFORMMATRIX2X3DVPROC gl3wUniformMatrix2x3dv; 634 | extern PFNGLUNIFORMMATRIX2X3FVPROC gl3wUniformMatrix2x3fv; 635 | extern PFNGLUNIFORMMATRIX2X4DVPROC gl3wUniformMatrix2x4dv; 636 | extern PFNGLUNIFORMMATRIX2X4FVPROC gl3wUniformMatrix2x4fv; 637 | extern PFNGLUNIFORMMATRIX3DVPROC gl3wUniformMatrix3dv; 638 | extern PFNGLUNIFORMMATRIX3FVPROC gl3wUniformMatrix3fv; 639 | extern PFNGLUNIFORMMATRIX3X2DVPROC gl3wUniformMatrix3x2dv; 640 | extern PFNGLUNIFORMMATRIX3X2FVPROC gl3wUniformMatrix3x2fv; 641 | extern PFNGLUNIFORMMATRIX3X4DVPROC gl3wUniformMatrix3x4dv; 642 | extern PFNGLUNIFORMMATRIX3X4FVPROC gl3wUniformMatrix3x4fv; 643 | extern PFNGLUNIFORMMATRIX4DVPROC gl3wUniformMatrix4dv; 644 | extern PFNGLUNIFORMMATRIX4FVPROC gl3wUniformMatrix4fv; 645 | extern PFNGLUNIFORMMATRIX4X2DVPROC gl3wUniformMatrix4x2dv; 646 | extern PFNGLUNIFORMMATRIX4X2FVPROC gl3wUniformMatrix4x2fv; 647 | extern PFNGLUNIFORMMATRIX4X3DVPROC gl3wUniformMatrix4x3dv; 648 | extern PFNGLUNIFORMMATRIX4X3FVPROC gl3wUniformMatrix4x3fv; 649 | extern PFNGLUNIFORMSUBROUTINESUIVPROC gl3wUniformSubroutinesuiv; 650 | extern PFNGLUNMAPBUFFERPROC gl3wUnmapBuffer; 651 | extern PFNGLUNMAPNAMEDBUFFERPROC gl3wUnmapNamedBuffer; 652 | extern PFNGLUSEPROGRAMPROC gl3wUseProgram; 653 | extern PFNGLUSEPROGRAMSTAGESPROC gl3wUseProgramStages; 654 | extern PFNGLVALIDATEPROGRAMPROC gl3wValidateProgram; 655 | extern PFNGLVALIDATEPROGRAMPIPELINEPROC gl3wValidateProgramPipeline; 656 | extern PFNGLVERTEXARRAYATTRIBBINDINGPROC gl3wVertexArrayAttribBinding; 657 | extern PFNGLVERTEXARRAYATTRIBFORMATPROC gl3wVertexArrayAttribFormat; 658 | extern PFNGLVERTEXARRAYATTRIBIFORMATPROC gl3wVertexArrayAttribIFormat; 659 | extern PFNGLVERTEXARRAYATTRIBLFORMATPROC gl3wVertexArrayAttribLFormat; 660 | extern PFNGLVERTEXARRAYBINDINGDIVISORPROC gl3wVertexArrayBindingDivisor; 661 | extern PFNGLVERTEXARRAYELEMENTBUFFERPROC gl3wVertexArrayElementBuffer; 662 | extern PFNGLVERTEXARRAYVERTEXBUFFERPROC gl3wVertexArrayVertexBuffer; 663 | extern PFNGLVERTEXARRAYVERTEXBUFFERSPROC gl3wVertexArrayVertexBuffers; 664 | extern PFNGLVERTEXATTRIB1DPROC gl3wVertexAttrib1d; 665 | extern PFNGLVERTEXATTRIB1DVPROC gl3wVertexAttrib1dv; 666 | extern PFNGLVERTEXATTRIB1FPROC gl3wVertexAttrib1f; 667 | extern PFNGLVERTEXATTRIB1FVPROC gl3wVertexAttrib1fv; 668 | extern PFNGLVERTEXATTRIB1SPROC gl3wVertexAttrib1s; 669 | extern PFNGLVERTEXATTRIB1SVPROC gl3wVertexAttrib1sv; 670 | extern PFNGLVERTEXATTRIB2DPROC gl3wVertexAttrib2d; 671 | extern PFNGLVERTEXATTRIB2DVPROC gl3wVertexAttrib2dv; 672 | extern PFNGLVERTEXATTRIB2FPROC gl3wVertexAttrib2f; 673 | extern PFNGLVERTEXATTRIB2FVPROC gl3wVertexAttrib2fv; 674 | extern PFNGLVERTEXATTRIB2SPROC gl3wVertexAttrib2s; 675 | extern PFNGLVERTEXATTRIB2SVPROC gl3wVertexAttrib2sv; 676 | extern PFNGLVERTEXATTRIB3DPROC gl3wVertexAttrib3d; 677 | extern PFNGLVERTEXATTRIB3DVPROC gl3wVertexAttrib3dv; 678 | extern PFNGLVERTEXATTRIB3FPROC gl3wVertexAttrib3f; 679 | extern PFNGLVERTEXATTRIB3FVPROC gl3wVertexAttrib3fv; 680 | extern PFNGLVERTEXATTRIB3SPROC gl3wVertexAttrib3s; 681 | extern PFNGLVERTEXATTRIB3SVPROC gl3wVertexAttrib3sv; 682 | extern PFNGLVERTEXATTRIB4NBVPROC gl3wVertexAttrib4Nbv; 683 | extern PFNGLVERTEXATTRIB4NIVPROC gl3wVertexAttrib4Niv; 684 | extern PFNGLVERTEXATTRIB4NSVPROC gl3wVertexAttrib4Nsv; 685 | extern PFNGLVERTEXATTRIB4NUBPROC gl3wVertexAttrib4Nub; 686 | extern PFNGLVERTEXATTRIB4NUBVPROC gl3wVertexAttrib4Nubv; 687 | extern PFNGLVERTEXATTRIB4NUIVPROC gl3wVertexAttrib4Nuiv; 688 | extern PFNGLVERTEXATTRIB4NUSVPROC gl3wVertexAttrib4Nusv; 689 | extern PFNGLVERTEXATTRIB4BVPROC gl3wVertexAttrib4bv; 690 | extern PFNGLVERTEXATTRIB4DPROC gl3wVertexAttrib4d; 691 | extern PFNGLVERTEXATTRIB4DVPROC gl3wVertexAttrib4dv; 692 | extern PFNGLVERTEXATTRIB4FPROC gl3wVertexAttrib4f; 693 | extern PFNGLVERTEXATTRIB4FVPROC gl3wVertexAttrib4fv; 694 | extern PFNGLVERTEXATTRIB4IVPROC gl3wVertexAttrib4iv; 695 | extern PFNGLVERTEXATTRIB4SPROC gl3wVertexAttrib4s; 696 | extern PFNGLVERTEXATTRIB4SVPROC gl3wVertexAttrib4sv; 697 | extern PFNGLVERTEXATTRIB4UBVPROC gl3wVertexAttrib4ubv; 698 | extern PFNGLVERTEXATTRIB4UIVPROC gl3wVertexAttrib4uiv; 699 | extern PFNGLVERTEXATTRIB4USVPROC gl3wVertexAttrib4usv; 700 | extern PFNGLVERTEXATTRIBBINDINGPROC gl3wVertexAttribBinding; 701 | extern PFNGLVERTEXATTRIBDIVISORPROC gl3wVertexAttribDivisor; 702 | extern PFNGLVERTEXATTRIBFORMATPROC gl3wVertexAttribFormat; 703 | extern PFNGLVERTEXATTRIBI1IPROC gl3wVertexAttribI1i; 704 | extern PFNGLVERTEXATTRIBI1IVPROC gl3wVertexAttribI1iv; 705 | extern PFNGLVERTEXATTRIBI1UIPROC gl3wVertexAttribI1ui; 706 | extern PFNGLVERTEXATTRIBI1UIVPROC gl3wVertexAttribI1uiv; 707 | extern PFNGLVERTEXATTRIBI2IPROC gl3wVertexAttribI2i; 708 | extern PFNGLVERTEXATTRIBI2IVPROC gl3wVertexAttribI2iv; 709 | extern PFNGLVERTEXATTRIBI2UIPROC gl3wVertexAttribI2ui; 710 | extern PFNGLVERTEXATTRIBI2UIVPROC gl3wVertexAttribI2uiv; 711 | extern PFNGLVERTEXATTRIBI3IPROC gl3wVertexAttribI3i; 712 | extern PFNGLVERTEXATTRIBI3IVPROC gl3wVertexAttribI3iv; 713 | extern PFNGLVERTEXATTRIBI3UIPROC gl3wVertexAttribI3ui; 714 | extern PFNGLVERTEXATTRIBI3UIVPROC gl3wVertexAttribI3uiv; 715 | extern PFNGLVERTEXATTRIBI4BVPROC gl3wVertexAttribI4bv; 716 | extern PFNGLVERTEXATTRIBI4IPROC gl3wVertexAttribI4i; 717 | extern PFNGLVERTEXATTRIBI4IVPROC gl3wVertexAttribI4iv; 718 | extern PFNGLVERTEXATTRIBI4SVPROC gl3wVertexAttribI4sv; 719 | extern PFNGLVERTEXATTRIBI4UBVPROC gl3wVertexAttribI4ubv; 720 | extern PFNGLVERTEXATTRIBI4UIPROC gl3wVertexAttribI4ui; 721 | extern PFNGLVERTEXATTRIBI4UIVPROC gl3wVertexAttribI4uiv; 722 | extern PFNGLVERTEXATTRIBI4USVPROC gl3wVertexAttribI4usv; 723 | extern PFNGLVERTEXATTRIBIFORMATPROC gl3wVertexAttribIFormat; 724 | extern PFNGLVERTEXATTRIBIPOINTERPROC gl3wVertexAttribIPointer; 725 | extern PFNGLVERTEXATTRIBL1DPROC gl3wVertexAttribL1d; 726 | extern PFNGLVERTEXATTRIBL1DVPROC gl3wVertexAttribL1dv; 727 | extern PFNGLVERTEXATTRIBL1UI64ARBPROC gl3wVertexAttribL1ui64ARB; 728 | extern PFNGLVERTEXATTRIBL1UI64VARBPROC gl3wVertexAttribL1ui64vARB; 729 | extern PFNGLVERTEXATTRIBL2DPROC gl3wVertexAttribL2d; 730 | extern PFNGLVERTEXATTRIBL2DVPROC gl3wVertexAttribL2dv; 731 | extern PFNGLVERTEXATTRIBL3DPROC gl3wVertexAttribL3d; 732 | extern PFNGLVERTEXATTRIBL3DVPROC gl3wVertexAttribL3dv; 733 | extern PFNGLVERTEXATTRIBL4DPROC gl3wVertexAttribL4d; 734 | extern PFNGLVERTEXATTRIBL4DVPROC gl3wVertexAttribL4dv; 735 | extern PFNGLVERTEXATTRIBLFORMATPROC gl3wVertexAttribLFormat; 736 | extern PFNGLVERTEXATTRIBLPOINTERPROC gl3wVertexAttribLPointer; 737 | extern PFNGLVERTEXATTRIBP1UIPROC gl3wVertexAttribP1ui; 738 | extern PFNGLVERTEXATTRIBP1UIVPROC gl3wVertexAttribP1uiv; 739 | extern PFNGLVERTEXATTRIBP2UIPROC gl3wVertexAttribP2ui; 740 | extern PFNGLVERTEXATTRIBP2UIVPROC gl3wVertexAttribP2uiv; 741 | extern PFNGLVERTEXATTRIBP3UIPROC gl3wVertexAttribP3ui; 742 | extern PFNGLVERTEXATTRIBP3UIVPROC gl3wVertexAttribP3uiv; 743 | extern PFNGLVERTEXATTRIBP4UIPROC gl3wVertexAttribP4ui; 744 | extern PFNGLVERTEXATTRIBP4UIVPROC gl3wVertexAttribP4uiv; 745 | extern PFNGLVERTEXATTRIBPOINTERPROC gl3wVertexAttribPointer; 746 | extern PFNGLVERTEXBINDINGDIVISORPROC gl3wVertexBindingDivisor; 747 | extern PFNGLVIEWPORTPROC gl3wViewport; 748 | extern PFNGLVIEWPORTARRAYVPROC gl3wViewportArrayv; 749 | extern PFNGLVIEWPORTINDEXEDFPROC gl3wViewportIndexedf; 750 | extern PFNGLVIEWPORTINDEXEDFVPROC gl3wViewportIndexedfv; 751 | extern PFNGLWAITSYNCPROC gl3wWaitSync; 752 | 753 | #define glActiveShaderProgram gl3wActiveShaderProgram 754 | #define glActiveTexture gl3wActiveTexture 755 | #define glAttachShader gl3wAttachShader 756 | #define glBeginConditionalRender gl3wBeginConditionalRender 757 | #define glBeginQuery gl3wBeginQuery 758 | #define glBeginQueryIndexed gl3wBeginQueryIndexed 759 | #define glBeginTransformFeedback gl3wBeginTransformFeedback 760 | #define glBindAttribLocation gl3wBindAttribLocation 761 | #define glBindBuffer gl3wBindBuffer 762 | #define glBindBufferBase gl3wBindBufferBase 763 | #define glBindBufferRange gl3wBindBufferRange 764 | #define glBindBuffersBase gl3wBindBuffersBase 765 | #define glBindBuffersRange gl3wBindBuffersRange 766 | #define glBindFragDataLocation gl3wBindFragDataLocation 767 | #define glBindFragDataLocationIndexed gl3wBindFragDataLocationIndexed 768 | #define glBindFramebuffer gl3wBindFramebuffer 769 | #define glBindImageTexture gl3wBindImageTexture 770 | #define glBindImageTextures gl3wBindImageTextures 771 | #define glBindProgramPipeline gl3wBindProgramPipeline 772 | #define glBindRenderbuffer gl3wBindRenderbuffer 773 | #define glBindSampler gl3wBindSampler 774 | #define glBindSamplers gl3wBindSamplers 775 | #define glBindTexture gl3wBindTexture 776 | #define glBindTextureUnit gl3wBindTextureUnit 777 | #define glBindTextures gl3wBindTextures 778 | #define glBindTransformFeedback gl3wBindTransformFeedback 779 | #define glBindVertexArray gl3wBindVertexArray 780 | #define glBindVertexBuffer gl3wBindVertexBuffer 781 | #define glBindVertexBuffers gl3wBindVertexBuffers 782 | #define glBlendColor gl3wBlendColor 783 | #define glBlendEquation gl3wBlendEquation 784 | #define glBlendEquationSeparate gl3wBlendEquationSeparate 785 | #define glBlendEquationSeparatei gl3wBlendEquationSeparatei 786 | #define glBlendEquationSeparateiARB gl3wBlendEquationSeparateiARB 787 | #define glBlendEquationi gl3wBlendEquationi 788 | #define glBlendEquationiARB gl3wBlendEquationiARB 789 | #define glBlendFunc gl3wBlendFunc 790 | #define glBlendFuncSeparate gl3wBlendFuncSeparate 791 | #define glBlendFuncSeparatei gl3wBlendFuncSeparatei 792 | #define glBlendFuncSeparateiARB gl3wBlendFuncSeparateiARB 793 | #define glBlendFunci gl3wBlendFunci 794 | #define glBlendFunciARB gl3wBlendFunciARB 795 | #define glBlitFramebuffer gl3wBlitFramebuffer 796 | #define glBlitNamedFramebuffer gl3wBlitNamedFramebuffer 797 | #define glBufferData gl3wBufferData 798 | #define glBufferPageCommitmentARB gl3wBufferPageCommitmentARB 799 | #define glBufferStorage gl3wBufferStorage 800 | #define glBufferSubData gl3wBufferSubData 801 | #define glCheckFramebufferStatus gl3wCheckFramebufferStatus 802 | #define glCheckNamedFramebufferStatus gl3wCheckNamedFramebufferStatus 803 | #define glClampColor gl3wClampColor 804 | #define glClear gl3wClear 805 | #define glClearBufferData gl3wClearBufferData 806 | #define glClearBufferSubData gl3wClearBufferSubData 807 | #define glClearBufferfi gl3wClearBufferfi 808 | #define glClearBufferfv gl3wClearBufferfv 809 | #define glClearBufferiv gl3wClearBufferiv 810 | #define glClearBufferuiv gl3wClearBufferuiv 811 | #define glClearColor gl3wClearColor 812 | #define glClearDepth gl3wClearDepth 813 | #define glClearDepthf gl3wClearDepthf 814 | #define glClearNamedBufferData gl3wClearNamedBufferData 815 | #define glClearNamedBufferSubData gl3wClearNamedBufferSubData 816 | #define glClearNamedFramebufferfi gl3wClearNamedFramebufferfi 817 | #define glClearNamedFramebufferfv gl3wClearNamedFramebufferfv 818 | #define glClearNamedFramebufferiv gl3wClearNamedFramebufferiv 819 | #define glClearNamedFramebufferuiv gl3wClearNamedFramebufferuiv 820 | #define glClearStencil gl3wClearStencil 821 | #define glClearTexImage gl3wClearTexImage 822 | #define glClearTexSubImage gl3wClearTexSubImage 823 | #define glClientWaitSync gl3wClientWaitSync 824 | #define glClipControl gl3wClipControl 825 | #define glColorMask gl3wColorMask 826 | #define glColorMaski gl3wColorMaski 827 | #define glCompileShader gl3wCompileShader 828 | #define glCompileShaderIncludeARB gl3wCompileShaderIncludeARB 829 | #define glCompressedTexImage1D gl3wCompressedTexImage1D 830 | #define glCompressedTexImage2D gl3wCompressedTexImage2D 831 | #define glCompressedTexImage3D gl3wCompressedTexImage3D 832 | #define glCompressedTexSubImage1D gl3wCompressedTexSubImage1D 833 | #define glCompressedTexSubImage2D gl3wCompressedTexSubImage2D 834 | #define glCompressedTexSubImage3D gl3wCompressedTexSubImage3D 835 | #define glCompressedTextureSubImage1D gl3wCompressedTextureSubImage1D 836 | #define glCompressedTextureSubImage2D gl3wCompressedTextureSubImage2D 837 | #define glCompressedTextureSubImage3D gl3wCompressedTextureSubImage3D 838 | #define glCopyBufferSubData gl3wCopyBufferSubData 839 | #define glCopyImageSubData gl3wCopyImageSubData 840 | #define glCopyNamedBufferSubData gl3wCopyNamedBufferSubData 841 | #define glCopyTexImage1D gl3wCopyTexImage1D 842 | #define glCopyTexImage2D gl3wCopyTexImage2D 843 | #define glCopyTexSubImage1D gl3wCopyTexSubImage1D 844 | #define glCopyTexSubImage2D gl3wCopyTexSubImage2D 845 | #define glCopyTexSubImage3D gl3wCopyTexSubImage3D 846 | #define glCopyTextureSubImage1D gl3wCopyTextureSubImage1D 847 | #define glCopyTextureSubImage2D gl3wCopyTextureSubImage2D 848 | #define glCopyTextureSubImage3D gl3wCopyTextureSubImage3D 849 | #define glCreateBuffers gl3wCreateBuffers 850 | #define glCreateFramebuffers gl3wCreateFramebuffers 851 | #define glCreateProgram gl3wCreateProgram 852 | #define glCreateProgramPipelines gl3wCreateProgramPipelines 853 | #define glCreateQueries gl3wCreateQueries 854 | #define glCreateRenderbuffers gl3wCreateRenderbuffers 855 | #define glCreateSamplers gl3wCreateSamplers 856 | #define glCreateShader gl3wCreateShader 857 | #define glCreateShaderProgramv gl3wCreateShaderProgramv 858 | #define glCreateSyncFromCLeventARB gl3wCreateSyncFromCLeventARB 859 | #define glCreateTextures gl3wCreateTextures 860 | #define glCreateTransformFeedbacks gl3wCreateTransformFeedbacks 861 | #define glCreateVertexArrays gl3wCreateVertexArrays 862 | #define glCullFace gl3wCullFace 863 | #define glDebugMessageCallback gl3wDebugMessageCallback 864 | #define glDebugMessageCallbackARB gl3wDebugMessageCallbackARB 865 | #define glDebugMessageControl gl3wDebugMessageControl 866 | #define glDebugMessageControlARB gl3wDebugMessageControlARB 867 | #define glDebugMessageInsert gl3wDebugMessageInsert 868 | #define glDebugMessageInsertARB gl3wDebugMessageInsertARB 869 | #define glDeleteBuffers gl3wDeleteBuffers 870 | #define glDeleteFramebuffers gl3wDeleteFramebuffers 871 | #define glDeleteNamedStringARB gl3wDeleteNamedStringARB 872 | #define glDeleteProgram gl3wDeleteProgram 873 | #define glDeleteProgramPipelines gl3wDeleteProgramPipelines 874 | #define glDeleteQueries gl3wDeleteQueries 875 | #define glDeleteRenderbuffers gl3wDeleteRenderbuffers 876 | #define glDeleteSamplers gl3wDeleteSamplers 877 | #define glDeleteShader gl3wDeleteShader 878 | #define glDeleteSync gl3wDeleteSync 879 | #define glDeleteTextures gl3wDeleteTextures 880 | #define glDeleteTransformFeedbacks gl3wDeleteTransformFeedbacks 881 | #define glDeleteVertexArrays gl3wDeleteVertexArrays 882 | #define glDepthFunc gl3wDepthFunc 883 | #define glDepthMask gl3wDepthMask 884 | #define glDepthRange gl3wDepthRange 885 | #define glDepthRangeArrayv gl3wDepthRangeArrayv 886 | #define glDepthRangeIndexed gl3wDepthRangeIndexed 887 | #define glDepthRangef gl3wDepthRangef 888 | #define glDetachShader gl3wDetachShader 889 | #define glDisable gl3wDisable 890 | #define glDisableVertexArrayAttrib gl3wDisableVertexArrayAttrib 891 | #define glDisableVertexAttribArray gl3wDisableVertexAttribArray 892 | #define glDisablei gl3wDisablei 893 | #define glDispatchCompute gl3wDispatchCompute 894 | #define glDispatchComputeGroupSizeARB gl3wDispatchComputeGroupSizeARB 895 | #define glDispatchComputeIndirect gl3wDispatchComputeIndirect 896 | #define glDrawArrays gl3wDrawArrays 897 | #define glDrawArraysIndirect gl3wDrawArraysIndirect 898 | #define glDrawArraysInstanced gl3wDrawArraysInstanced 899 | #define glDrawArraysInstancedBaseInstance gl3wDrawArraysInstancedBaseInstance 900 | #define glDrawBuffer gl3wDrawBuffer 901 | #define glDrawBuffers gl3wDrawBuffers 902 | #define glDrawElements gl3wDrawElements 903 | #define glDrawElementsBaseVertex gl3wDrawElementsBaseVertex 904 | #define glDrawElementsIndirect gl3wDrawElementsIndirect 905 | #define glDrawElementsInstanced gl3wDrawElementsInstanced 906 | #define glDrawElementsInstancedBaseInstance gl3wDrawElementsInstancedBaseInstance 907 | #define glDrawElementsInstancedBaseVertex gl3wDrawElementsInstancedBaseVertex 908 | #define glDrawElementsInstancedBaseVertexBaseInstance gl3wDrawElementsInstancedBaseVertexBaseInstance 909 | #define glDrawRangeElements gl3wDrawRangeElements 910 | #define glDrawRangeElementsBaseVertex gl3wDrawRangeElementsBaseVertex 911 | #define glDrawTransformFeedback gl3wDrawTransformFeedback 912 | #define glDrawTransformFeedbackInstanced gl3wDrawTransformFeedbackInstanced 913 | #define glDrawTransformFeedbackStream gl3wDrawTransformFeedbackStream 914 | #define glDrawTransformFeedbackStreamInstanced gl3wDrawTransformFeedbackStreamInstanced 915 | #define glEnable gl3wEnable 916 | #define glEnableVertexArrayAttrib gl3wEnableVertexArrayAttrib 917 | #define glEnableVertexAttribArray gl3wEnableVertexAttribArray 918 | #define glEnablei gl3wEnablei 919 | #define glEndConditionalRender gl3wEndConditionalRender 920 | #define glEndQuery gl3wEndQuery 921 | #define glEndQueryIndexed gl3wEndQueryIndexed 922 | #define glEndTransformFeedback gl3wEndTransformFeedback 923 | #define glFenceSync gl3wFenceSync 924 | #define glFinish gl3wFinish 925 | #define glFlush gl3wFlush 926 | #define glFlushMappedBufferRange gl3wFlushMappedBufferRange 927 | #define glFlushMappedNamedBufferRange gl3wFlushMappedNamedBufferRange 928 | #define glFramebufferParameteri gl3wFramebufferParameteri 929 | #define glFramebufferRenderbuffer gl3wFramebufferRenderbuffer 930 | #define glFramebufferTexture gl3wFramebufferTexture 931 | #define glFramebufferTexture1D gl3wFramebufferTexture1D 932 | #define glFramebufferTexture2D gl3wFramebufferTexture2D 933 | #define glFramebufferTexture3D gl3wFramebufferTexture3D 934 | #define glFramebufferTextureLayer gl3wFramebufferTextureLayer 935 | #define glFrontFace gl3wFrontFace 936 | #define glGenBuffers gl3wGenBuffers 937 | #define glGenFramebuffers gl3wGenFramebuffers 938 | #define glGenProgramPipelines gl3wGenProgramPipelines 939 | #define glGenQueries gl3wGenQueries 940 | #define glGenRenderbuffers gl3wGenRenderbuffers 941 | #define glGenSamplers gl3wGenSamplers 942 | #define glGenTextures gl3wGenTextures 943 | #define glGenTransformFeedbacks gl3wGenTransformFeedbacks 944 | #define glGenVertexArrays gl3wGenVertexArrays 945 | #define glGenerateMipmap gl3wGenerateMipmap 946 | #define glGenerateTextureMipmap gl3wGenerateTextureMipmap 947 | #define glGetActiveAtomicCounterBufferiv gl3wGetActiveAtomicCounterBufferiv 948 | #define glGetActiveAttrib gl3wGetActiveAttrib 949 | #define glGetActiveSubroutineName gl3wGetActiveSubroutineName 950 | #define glGetActiveSubroutineUniformName gl3wGetActiveSubroutineUniformName 951 | #define glGetActiveSubroutineUniformiv gl3wGetActiveSubroutineUniformiv 952 | #define glGetActiveUniform gl3wGetActiveUniform 953 | #define glGetActiveUniformBlockName gl3wGetActiveUniformBlockName 954 | #define glGetActiveUniformBlockiv gl3wGetActiveUniformBlockiv 955 | #define glGetActiveUniformName gl3wGetActiveUniformName 956 | #define glGetActiveUniformsiv gl3wGetActiveUniformsiv 957 | #define glGetAttachedShaders gl3wGetAttachedShaders 958 | #define glGetAttribLocation gl3wGetAttribLocation 959 | #define glGetBooleani_v gl3wGetBooleani_v 960 | #define glGetBooleanv gl3wGetBooleanv 961 | #define glGetBufferParameteri64v gl3wGetBufferParameteri64v 962 | #define glGetBufferParameteriv gl3wGetBufferParameteriv 963 | #define glGetBufferPointerv gl3wGetBufferPointerv 964 | #define glGetBufferSubData gl3wGetBufferSubData 965 | #define glGetCompressedTexImage gl3wGetCompressedTexImage 966 | #define glGetCompressedTextureImage gl3wGetCompressedTextureImage 967 | #define glGetCompressedTextureSubImage gl3wGetCompressedTextureSubImage 968 | #define glGetDebugMessageLog gl3wGetDebugMessageLog 969 | #define glGetDebugMessageLogARB gl3wGetDebugMessageLogARB 970 | #define glGetDoublei_v gl3wGetDoublei_v 971 | #define glGetDoublev gl3wGetDoublev 972 | #define glGetError gl3wGetError 973 | #define glGetFloati_v gl3wGetFloati_v 974 | #define glGetFloatv gl3wGetFloatv 975 | #define glGetFragDataIndex gl3wGetFragDataIndex 976 | #define glGetFragDataLocation gl3wGetFragDataLocation 977 | #define glGetFramebufferAttachmentParameteriv gl3wGetFramebufferAttachmentParameteriv 978 | #define glGetFramebufferParameteriv gl3wGetFramebufferParameteriv 979 | #define glGetGraphicsResetStatus gl3wGetGraphicsResetStatus 980 | #define glGetGraphicsResetStatusARB gl3wGetGraphicsResetStatusARB 981 | #define glGetImageHandleARB gl3wGetImageHandleARB 982 | #define glGetInteger64i_v gl3wGetInteger64i_v 983 | #define glGetInteger64v gl3wGetInteger64v 984 | #define glGetIntegeri_v gl3wGetIntegeri_v 985 | #define glGetIntegerv gl3wGetIntegerv 986 | #define glGetInternalformati64v gl3wGetInternalformati64v 987 | #define glGetInternalformativ gl3wGetInternalformativ 988 | #define glGetMultisamplefv gl3wGetMultisamplefv 989 | #define glGetNamedBufferParameteri64v gl3wGetNamedBufferParameteri64v 990 | #define glGetNamedBufferParameteriv gl3wGetNamedBufferParameteriv 991 | #define glGetNamedBufferPointerv gl3wGetNamedBufferPointerv 992 | #define glGetNamedBufferSubData gl3wGetNamedBufferSubData 993 | #define glGetNamedFramebufferAttachmentParameteriv gl3wGetNamedFramebufferAttachmentParameteriv 994 | #define glGetNamedFramebufferParameteriv gl3wGetNamedFramebufferParameteriv 995 | #define glGetNamedRenderbufferParameteriv gl3wGetNamedRenderbufferParameteriv 996 | #define glGetNamedStringARB gl3wGetNamedStringARB 997 | #define glGetNamedStringivARB gl3wGetNamedStringivARB 998 | #define glGetObjectLabel gl3wGetObjectLabel 999 | #define glGetObjectPtrLabel gl3wGetObjectPtrLabel 1000 | #define glGetPointerv gl3wGetPointerv 1001 | #define glGetProgramBinary gl3wGetProgramBinary 1002 | #define glGetProgramInfoLog gl3wGetProgramInfoLog 1003 | #define glGetProgramInterfaceiv gl3wGetProgramInterfaceiv 1004 | #define glGetProgramPipelineInfoLog gl3wGetProgramPipelineInfoLog 1005 | #define glGetProgramPipelineiv gl3wGetProgramPipelineiv 1006 | #define glGetProgramResourceIndex gl3wGetProgramResourceIndex 1007 | #define glGetProgramResourceLocation gl3wGetProgramResourceLocation 1008 | #define glGetProgramResourceLocationIndex gl3wGetProgramResourceLocationIndex 1009 | #define glGetProgramResourceName gl3wGetProgramResourceName 1010 | #define glGetProgramResourceiv gl3wGetProgramResourceiv 1011 | #define glGetProgramStageiv gl3wGetProgramStageiv 1012 | #define glGetProgramiv gl3wGetProgramiv 1013 | #define glGetQueryBufferObjecti64v gl3wGetQueryBufferObjecti64v 1014 | #define glGetQueryBufferObjectiv gl3wGetQueryBufferObjectiv 1015 | #define glGetQueryBufferObjectui64v gl3wGetQueryBufferObjectui64v 1016 | #define glGetQueryBufferObjectuiv gl3wGetQueryBufferObjectuiv 1017 | #define glGetQueryIndexediv gl3wGetQueryIndexediv 1018 | #define glGetQueryObjecti64v gl3wGetQueryObjecti64v 1019 | #define glGetQueryObjectiv gl3wGetQueryObjectiv 1020 | #define glGetQueryObjectui64v gl3wGetQueryObjectui64v 1021 | #define glGetQueryObjectuiv gl3wGetQueryObjectuiv 1022 | #define glGetQueryiv gl3wGetQueryiv 1023 | #define glGetRenderbufferParameteriv gl3wGetRenderbufferParameteriv 1024 | #define glGetSamplerParameterIiv gl3wGetSamplerParameterIiv 1025 | #define glGetSamplerParameterIuiv gl3wGetSamplerParameterIuiv 1026 | #define glGetSamplerParameterfv gl3wGetSamplerParameterfv 1027 | #define glGetSamplerParameteriv gl3wGetSamplerParameteriv 1028 | #define glGetShaderInfoLog gl3wGetShaderInfoLog 1029 | #define glGetShaderPrecisionFormat gl3wGetShaderPrecisionFormat 1030 | #define glGetShaderSource gl3wGetShaderSource 1031 | #define glGetShaderiv gl3wGetShaderiv 1032 | #define glGetString gl3wGetString 1033 | #define glGetStringi gl3wGetStringi 1034 | #define glGetSubroutineIndex gl3wGetSubroutineIndex 1035 | #define glGetSubroutineUniformLocation gl3wGetSubroutineUniformLocation 1036 | #define glGetSynciv gl3wGetSynciv 1037 | #define glGetTexImage gl3wGetTexImage 1038 | #define glGetTexLevelParameterfv gl3wGetTexLevelParameterfv 1039 | #define glGetTexLevelParameteriv gl3wGetTexLevelParameteriv 1040 | #define glGetTexParameterIiv gl3wGetTexParameterIiv 1041 | #define glGetTexParameterIuiv gl3wGetTexParameterIuiv 1042 | #define glGetTexParameterfv gl3wGetTexParameterfv 1043 | #define glGetTexParameteriv gl3wGetTexParameteriv 1044 | #define glGetTextureHandleARB gl3wGetTextureHandleARB 1045 | #define glGetTextureImage gl3wGetTextureImage 1046 | #define glGetTextureLevelParameterfv gl3wGetTextureLevelParameterfv 1047 | #define glGetTextureLevelParameteriv gl3wGetTextureLevelParameteriv 1048 | #define glGetTextureParameterIiv gl3wGetTextureParameterIiv 1049 | #define glGetTextureParameterIuiv gl3wGetTextureParameterIuiv 1050 | #define glGetTextureParameterfv gl3wGetTextureParameterfv 1051 | #define glGetTextureParameteriv gl3wGetTextureParameteriv 1052 | #define glGetTextureSamplerHandleARB gl3wGetTextureSamplerHandleARB 1053 | #define glGetTextureSubImage gl3wGetTextureSubImage 1054 | #define glGetTransformFeedbackVarying gl3wGetTransformFeedbackVarying 1055 | #define glGetTransformFeedbacki64_v gl3wGetTransformFeedbacki64_v 1056 | #define glGetTransformFeedbacki_v gl3wGetTransformFeedbacki_v 1057 | #define glGetTransformFeedbackiv gl3wGetTransformFeedbackiv 1058 | #define glGetUniformBlockIndex gl3wGetUniformBlockIndex 1059 | #define glGetUniformIndices gl3wGetUniformIndices 1060 | #define glGetUniformLocation gl3wGetUniformLocation 1061 | #define glGetUniformSubroutineuiv gl3wGetUniformSubroutineuiv 1062 | #define glGetUniformdv gl3wGetUniformdv 1063 | #define glGetUniformfv gl3wGetUniformfv 1064 | #define glGetUniformiv gl3wGetUniformiv 1065 | #define glGetUniformuiv gl3wGetUniformuiv 1066 | #define glGetVertexArrayIndexed64iv gl3wGetVertexArrayIndexed64iv 1067 | #define glGetVertexArrayIndexediv gl3wGetVertexArrayIndexediv 1068 | #define glGetVertexArrayiv gl3wGetVertexArrayiv 1069 | #define glGetVertexAttribIiv gl3wGetVertexAttribIiv 1070 | #define glGetVertexAttribIuiv gl3wGetVertexAttribIuiv 1071 | #define glGetVertexAttribLdv gl3wGetVertexAttribLdv 1072 | #define glGetVertexAttribLui64vARB gl3wGetVertexAttribLui64vARB 1073 | #define glGetVertexAttribPointerv gl3wGetVertexAttribPointerv 1074 | #define glGetVertexAttribdv gl3wGetVertexAttribdv 1075 | #define glGetVertexAttribfv gl3wGetVertexAttribfv 1076 | #define glGetVertexAttribiv gl3wGetVertexAttribiv 1077 | #define glGetnCompressedTexImage gl3wGetnCompressedTexImage 1078 | #define glGetnCompressedTexImageARB gl3wGetnCompressedTexImageARB 1079 | #define glGetnTexImage gl3wGetnTexImage 1080 | #define glGetnTexImageARB gl3wGetnTexImageARB 1081 | #define glGetnUniformdv gl3wGetnUniformdv 1082 | #define glGetnUniformdvARB gl3wGetnUniformdvARB 1083 | #define glGetnUniformfv gl3wGetnUniformfv 1084 | #define glGetnUniformfvARB gl3wGetnUniformfvARB 1085 | #define glGetnUniformiv gl3wGetnUniformiv 1086 | #define glGetnUniformivARB gl3wGetnUniformivARB 1087 | #define glGetnUniformuiv gl3wGetnUniformuiv 1088 | #define glGetnUniformuivARB gl3wGetnUniformuivARB 1089 | #define glHint gl3wHint 1090 | #define glInvalidateBufferData gl3wInvalidateBufferData 1091 | #define glInvalidateBufferSubData gl3wInvalidateBufferSubData 1092 | #define glInvalidateFramebuffer gl3wInvalidateFramebuffer 1093 | #define glInvalidateNamedFramebufferData gl3wInvalidateNamedFramebufferData 1094 | #define glInvalidateNamedFramebufferSubData gl3wInvalidateNamedFramebufferSubData 1095 | #define glInvalidateSubFramebuffer gl3wInvalidateSubFramebuffer 1096 | #define glInvalidateTexImage gl3wInvalidateTexImage 1097 | #define glInvalidateTexSubImage gl3wInvalidateTexSubImage 1098 | #define glIsBuffer gl3wIsBuffer 1099 | #define glIsEnabled gl3wIsEnabled 1100 | #define glIsEnabledi gl3wIsEnabledi 1101 | #define glIsFramebuffer gl3wIsFramebuffer 1102 | #define glIsImageHandleResidentARB gl3wIsImageHandleResidentARB 1103 | #define glIsNamedStringARB gl3wIsNamedStringARB 1104 | #define glIsProgram gl3wIsProgram 1105 | #define glIsProgramPipeline gl3wIsProgramPipeline 1106 | #define glIsQuery gl3wIsQuery 1107 | #define glIsRenderbuffer gl3wIsRenderbuffer 1108 | #define glIsSampler gl3wIsSampler 1109 | #define glIsShader gl3wIsShader 1110 | #define glIsSync gl3wIsSync 1111 | #define glIsTexture gl3wIsTexture 1112 | #define glIsTextureHandleResidentARB gl3wIsTextureHandleResidentARB 1113 | #define glIsTransformFeedback gl3wIsTransformFeedback 1114 | #define glIsVertexArray gl3wIsVertexArray 1115 | #define glLineWidth gl3wLineWidth 1116 | #define glLinkProgram gl3wLinkProgram 1117 | #define glLogicOp gl3wLogicOp 1118 | #define glMakeImageHandleNonResidentARB gl3wMakeImageHandleNonResidentARB 1119 | #define glMakeImageHandleResidentARB gl3wMakeImageHandleResidentARB 1120 | #define glMakeTextureHandleNonResidentARB gl3wMakeTextureHandleNonResidentARB 1121 | #define glMakeTextureHandleResidentARB gl3wMakeTextureHandleResidentARB 1122 | #define glMapBuffer gl3wMapBuffer 1123 | #define glMapBufferRange gl3wMapBufferRange 1124 | #define glMapNamedBuffer gl3wMapNamedBuffer 1125 | #define glMapNamedBufferRange gl3wMapNamedBufferRange 1126 | #define glMemoryBarrier gl3wMemoryBarrier 1127 | #define glMemoryBarrierByRegion gl3wMemoryBarrierByRegion 1128 | #define glMinSampleShading gl3wMinSampleShading 1129 | #define glMinSampleShadingARB gl3wMinSampleShadingARB 1130 | #define glMultiDrawArrays gl3wMultiDrawArrays 1131 | #define glMultiDrawArraysIndirect gl3wMultiDrawArraysIndirect 1132 | #define glMultiDrawArraysIndirectCountARB gl3wMultiDrawArraysIndirectCountARB 1133 | #define glMultiDrawElements gl3wMultiDrawElements 1134 | #define glMultiDrawElementsBaseVertex gl3wMultiDrawElementsBaseVertex 1135 | #define glMultiDrawElementsIndirect gl3wMultiDrawElementsIndirect 1136 | #define glMultiDrawElementsIndirectCountARB gl3wMultiDrawElementsIndirectCountARB 1137 | #define glNamedBufferData gl3wNamedBufferData 1138 | #define glNamedBufferPageCommitmentARB gl3wNamedBufferPageCommitmentARB 1139 | #define glNamedBufferPageCommitmentEXT gl3wNamedBufferPageCommitmentEXT 1140 | #define glNamedBufferStorage gl3wNamedBufferStorage 1141 | #define glNamedBufferSubData gl3wNamedBufferSubData 1142 | #define glNamedFramebufferDrawBuffer gl3wNamedFramebufferDrawBuffer 1143 | #define glNamedFramebufferDrawBuffers gl3wNamedFramebufferDrawBuffers 1144 | #define glNamedFramebufferParameteri gl3wNamedFramebufferParameteri 1145 | #define glNamedFramebufferReadBuffer gl3wNamedFramebufferReadBuffer 1146 | #define glNamedFramebufferRenderbuffer gl3wNamedFramebufferRenderbuffer 1147 | #define glNamedFramebufferTexture gl3wNamedFramebufferTexture 1148 | #define glNamedFramebufferTextureLayer gl3wNamedFramebufferTextureLayer 1149 | #define glNamedRenderbufferStorage gl3wNamedRenderbufferStorage 1150 | #define glNamedRenderbufferStorageMultisample gl3wNamedRenderbufferStorageMultisample 1151 | #define glNamedStringARB gl3wNamedStringARB 1152 | #define glObjectLabel gl3wObjectLabel 1153 | #define glObjectPtrLabel gl3wObjectPtrLabel 1154 | #define glPatchParameterfv gl3wPatchParameterfv 1155 | #define glPatchParameteri gl3wPatchParameteri 1156 | #define glPauseTransformFeedback gl3wPauseTransformFeedback 1157 | #define glPixelStoref gl3wPixelStoref 1158 | #define glPixelStorei gl3wPixelStorei 1159 | #define glPointParameterf gl3wPointParameterf 1160 | #define glPointParameterfv gl3wPointParameterfv 1161 | #define glPointParameteri gl3wPointParameteri 1162 | #define glPointParameteriv gl3wPointParameteriv 1163 | #define glPointSize gl3wPointSize 1164 | #define glPolygonMode gl3wPolygonMode 1165 | #define glPolygonOffset gl3wPolygonOffset 1166 | #define glPopDebugGroup gl3wPopDebugGroup 1167 | #define glPrimitiveRestartIndex gl3wPrimitiveRestartIndex 1168 | #define glProgramBinary gl3wProgramBinary 1169 | #define glProgramParameteri gl3wProgramParameteri 1170 | #define glProgramUniform1d gl3wProgramUniform1d 1171 | #define glProgramUniform1dv gl3wProgramUniform1dv 1172 | #define glProgramUniform1f gl3wProgramUniform1f 1173 | #define glProgramUniform1fv gl3wProgramUniform1fv 1174 | #define glProgramUniform1i gl3wProgramUniform1i 1175 | #define glProgramUniform1iv gl3wProgramUniform1iv 1176 | #define glProgramUniform1ui gl3wProgramUniform1ui 1177 | #define glProgramUniform1uiv gl3wProgramUniform1uiv 1178 | #define glProgramUniform2d gl3wProgramUniform2d 1179 | #define glProgramUniform2dv gl3wProgramUniform2dv 1180 | #define glProgramUniform2f gl3wProgramUniform2f 1181 | #define glProgramUniform2fv gl3wProgramUniform2fv 1182 | #define glProgramUniform2i gl3wProgramUniform2i 1183 | #define glProgramUniform2iv gl3wProgramUniform2iv 1184 | #define glProgramUniform2ui gl3wProgramUniform2ui 1185 | #define glProgramUniform2uiv gl3wProgramUniform2uiv 1186 | #define glProgramUniform3d gl3wProgramUniform3d 1187 | #define glProgramUniform3dv gl3wProgramUniform3dv 1188 | #define glProgramUniform3f gl3wProgramUniform3f 1189 | #define glProgramUniform3fv gl3wProgramUniform3fv 1190 | #define glProgramUniform3i gl3wProgramUniform3i 1191 | #define glProgramUniform3iv gl3wProgramUniform3iv 1192 | #define glProgramUniform3ui gl3wProgramUniform3ui 1193 | #define glProgramUniform3uiv gl3wProgramUniform3uiv 1194 | #define glProgramUniform4d gl3wProgramUniform4d 1195 | #define glProgramUniform4dv gl3wProgramUniform4dv 1196 | #define glProgramUniform4f gl3wProgramUniform4f 1197 | #define glProgramUniform4fv gl3wProgramUniform4fv 1198 | #define glProgramUniform4i gl3wProgramUniform4i 1199 | #define glProgramUniform4iv gl3wProgramUniform4iv 1200 | #define glProgramUniform4ui gl3wProgramUniform4ui 1201 | #define glProgramUniform4uiv gl3wProgramUniform4uiv 1202 | #define glProgramUniformHandleui64ARB gl3wProgramUniformHandleui64ARB 1203 | #define glProgramUniformHandleui64vARB gl3wProgramUniformHandleui64vARB 1204 | #define glProgramUniformMatrix2dv gl3wProgramUniformMatrix2dv 1205 | #define glProgramUniformMatrix2fv gl3wProgramUniformMatrix2fv 1206 | #define glProgramUniformMatrix2x3dv gl3wProgramUniformMatrix2x3dv 1207 | #define glProgramUniformMatrix2x3fv gl3wProgramUniformMatrix2x3fv 1208 | #define glProgramUniformMatrix2x4dv gl3wProgramUniformMatrix2x4dv 1209 | #define glProgramUniformMatrix2x4fv gl3wProgramUniformMatrix2x4fv 1210 | #define glProgramUniformMatrix3dv gl3wProgramUniformMatrix3dv 1211 | #define glProgramUniformMatrix3fv gl3wProgramUniformMatrix3fv 1212 | #define glProgramUniformMatrix3x2dv gl3wProgramUniformMatrix3x2dv 1213 | #define glProgramUniformMatrix3x2fv gl3wProgramUniformMatrix3x2fv 1214 | #define glProgramUniformMatrix3x4dv gl3wProgramUniformMatrix3x4dv 1215 | #define glProgramUniformMatrix3x4fv gl3wProgramUniformMatrix3x4fv 1216 | #define glProgramUniformMatrix4dv gl3wProgramUniformMatrix4dv 1217 | #define glProgramUniformMatrix4fv gl3wProgramUniformMatrix4fv 1218 | #define glProgramUniformMatrix4x2dv gl3wProgramUniformMatrix4x2dv 1219 | #define glProgramUniformMatrix4x2fv gl3wProgramUniformMatrix4x2fv 1220 | #define glProgramUniformMatrix4x3dv gl3wProgramUniformMatrix4x3dv 1221 | #define glProgramUniformMatrix4x3fv gl3wProgramUniformMatrix4x3fv 1222 | #define glProvokingVertex gl3wProvokingVertex 1223 | #define glPushDebugGroup gl3wPushDebugGroup 1224 | #define glQueryCounter gl3wQueryCounter 1225 | #define glReadBuffer gl3wReadBuffer 1226 | #define glReadPixels gl3wReadPixels 1227 | #define glReadnPixels gl3wReadnPixels 1228 | #define glReadnPixelsARB gl3wReadnPixelsARB 1229 | #define glReleaseShaderCompiler gl3wReleaseShaderCompiler 1230 | #define glRenderbufferStorage gl3wRenderbufferStorage 1231 | #define glRenderbufferStorageMultisample gl3wRenderbufferStorageMultisample 1232 | #define glResumeTransformFeedback gl3wResumeTransformFeedback 1233 | #define glSampleCoverage gl3wSampleCoverage 1234 | #define glSampleMaski gl3wSampleMaski 1235 | #define glSamplerParameterIiv gl3wSamplerParameterIiv 1236 | #define glSamplerParameterIuiv gl3wSamplerParameterIuiv 1237 | #define glSamplerParameterf gl3wSamplerParameterf 1238 | #define glSamplerParameterfv gl3wSamplerParameterfv 1239 | #define glSamplerParameteri gl3wSamplerParameteri 1240 | #define glSamplerParameteriv gl3wSamplerParameteriv 1241 | #define glScissor gl3wScissor 1242 | #define glScissorArrayv gl3wScissorArrayv 1243 | #define glScissorIndexed gl3wScissorIndexed 1244 | #define glScissorIndexedv gl3wScissorIndexedv 1245 | #define glShaderBinary gl3wShaderBinary 1246 | #define glShaderSource gl3wShaderSource 1247 | #define glShaderStorageBlockBinding gl3wShaderStorageBlockBinding 1248 | #define glStencilFunc gl3wStencilFunc 1249 | #define glStencilFuncSeparate gl3wStencilFuncSeparate 1250 | #define glStencilMask gl3wStencilMask 1251 | #define glStencilMaskSeparate gl3wStencilMaskSeparate 1252 | #define glStencilOp gl3wStencilOp 1253 | #define glStencilOpSeparate gl3wStencilOpSeparate 1254 | #define glTexBuffer gl3wTexBuffer 1255 | #define glTexBufferRange gl3wTexBufferRange 1256 | #define glTexImage1D gl3wTexImage1D 1257 | #define glTexImage2D gl3wTexImage2D 1258 | #define glTexImage2DMultisample gl3wTexImage2DMultisample 1259 | #define glTexImage3D gl3wTexImage3D 1260 | #define glTexImage3DMultisample gl3wTexImage3DMultisample 1261 | #define glTexPageCommitmentARB gl3wTexPageCommitmentARB 1262 | #define glTexParameterIiv gl3wTexParameterIiv 1263 | #define glTexParameterIuiv gl3wTexParameterIuiv 1264 | #define glTexParameterf gl3wTexParameterf 1265 | #define glTexParameterfv gl3wTexParameterfv 1266 | #define glTexParameteri gl3wTexParameteri 1267 | #define glTexParameteriv gl3wTexParameteriv 1268 | #define glTexStorage1D gl3wTexStorage1D 1269 | #define glTexStorage2D gl3wTexStorage2D 1270 | #define glTexStorage2DMultisample gl3wTexStorage2DMultisample 1271 | #define glTexStorage3D gl3wTexStorage3D 1272 | #define glTexStorage3DMultisample gl3wTexStorage3DMultisample 1273 | #define glTexSubImage1D gl3wTexSubImage1D 1274 | #define glTexSubImage2D gl3wTexSubImage2D 1275 | #define glTexSubImage3D gl3wTexSubImage3D 1276 | #define glTextureBarrier gl3wTextureBarrier 1277 | #define glTextureBuffer gl3wTextureBuffer 1278 | #define glTextureBufferRange gl3wTextureBufferRange 1279 | #define glTextureParameterIiv gl3wTextureParameterIiv 1280 | #define glTextureParameterIuiv gl3wTextureParameterIuiv 1281 | #define glTextureParameterf gl3wTextureParameterf 1282 | #define glTextureParameterfv gl3wTextureParameterfv 1283 | #define glTextureParameteri gl3wTextureParameteri 1284 | #define glTextureParameteriv gl3wTextureParameteriv 1285 | #define glTextureStorage1D gl3wTextureStorage1D 1286 | #define glTextureStorage2D gl3wTextureStorage2D 1287 | #define glTextureStorage2DMultisample gl3wTextureStorage2DMultisample 1288 | #define glTextureStorage3D gl3wTextureStorage3D 1289 | #define glTextureStorage3DMultisample gl3wTextureStorage3DMultisample 1290 | #define glTextureSubImage1D gl3wTextureSubImage1D 1291 | #define glTextureSubImage2D gl3wTextureSubImage2D 1292 | #define glTextureSubImage3D gl3wTextureSubImage3D 1293 | #define glTextureView gl3wTextureView 1294 | #define glTransformFeedbackBufferBase gl3wTransformFeedbackBufferBase 1295 | #define glTransformFeedbackBufferRange gl3wTransformFeedbackBufferRange 1296 | #define glTransformFeedbackVaryings gl3wTransformFeedbackVaryings 1297 | #define glUniform1d gl3wUniform1d 1298 | #define glUniform1dv gl3wUniform1dv 1299 | #define glUniform1f gl3wUniform1f 1300 | #define glUniform1fv gl3wUniform1fv 1301 | #define glUniform1i gl3wUniform1i 1302 | #define glUniform1iv gl3wUniform1iv 1303 | #define glUniform1ui gl3wUniform1ui 1304 | #define glUniform1uiv gl3wUniform1uiv 1305 | #define glUniform2d gl3wUniform2d 1306 | #define glUniform2dv gl3wUniform2dv 1307 | #define glUniform2f gl3wUniform2f 1308 | #define glUniform2fv gl3wUniform2fv 1309 | #define glUniform2i gl3wUniform2i 1310 | #define glUniform2iv gl3wUniform2iv 1311 | #define glUniform2ui gl3wUniform2ui 1312 | #define glUniform2uiv gl3wUniform2uiv 1313 | #define glUniform3d gl3wUniform3d 1314 | #define glUniform3dv gl3wUniform3dv 1315 | #define glUniform3f gl3wUniform3f 1316 | #define glUniform3fv gl3wUniform3fv 1317 | #define glUniform3i gl3wUniform3i 1318 | #define glUniform3iv gl3wUniform3iv 1319 | #define glUniform3ui gl3wUniform3ui 1320 | #define glUniform3uiv gl3wUniform3uiv 1321 | #define glUniform4d gl3wUniform4d 1322 | #define glUniform4dv gl3wUniform4dv 1323 | #define glUniform4f gl3wUniform4f 1324 | #define glUniform4fv gl3wUniform4fv 1325 | #define glUniform4i gl3wUniform4i 1326 | #define glUniform4iv gl3wUniform4iv 1327 | #define glUniform4ui gl3wUniform4ui 1328 | #define glUniform4uiv gl3wUniform4uiv 1329 | #define glUniformBlockBinding gl3wUniformBlockBinding 1330 | #define glUniformHandleui64ARB gl3wUniformHandleui64ARB 1331 | #define glUniformHandleui64vARB gl3wUniformHandleui64vARB 1332 | #define glUniformMatrix2dv gl3wUniformMatrix2dv 1333 | #define glUniformMatrix2fv gl3wUniformMatrix2fv 1334 | #define glUniformMatrix2x3dv gl3wUniformMatrix2x3dv 1335 | #define glUniformMatrix2x3fv gl3wUniformMatrix2x3fv 1336 | #define glUniformMatrix2x4dv gl3wUniformMatrix2x4dv 1337 | #define glUniformMatrix2x4fv gl3wUniformMatrix2x4fv 1338 | #define glUniformMatrix3dv gl3wUniformMatrix3dv 1339 | #define glUniformMatrix3fv gl3wUniformMatrix3fv 1340 | #define glUniformMatrix3x2dv gl3wUniformMatrix3x2dv 1341 | #define glUniformMatrix3x2fv gl3wUniformMatrix3x2fv 1342 | #define glUniformMatrix3x4dv gl3wUniformMatrix3x4dv 1343 | #define glUniformMatrix3x4fv gl3wUniformMatrix3x4fv 1344 | #define glUniformMatrix4dv gl3wUniformMatrix4dv 1345 | #define glUniformMatrix4fv gl3wUniformMatrix4fv 1346 | #define glUniformMatrix4x2dv gl3wUniformMatrix4x2dv 1347 | #define glUniformMatrix4x2fv gl3wUniformMatrix4x2fv 1348 | #define glUniformMatrix4x3dv gl3wUniformMatrix4x3dv 1349 | #define glUniformMatrix4x3fv gl3wUniformMatrix4x3fv 1350 | #define glUniformSubroutinesuiv gl3wUniformSubroutinesuiv 1351 | #define glUnmapBuffer gl3wUnmapBuffer 1352 | #define glUnmapNamedBuffer gl3wUnmapNamedBuffer 1353 | #define glUseProgram gl3wUseProgram 1354 | #define glUseProgramStages gl3wUseProgramStages 1355 | #define glValidateProgram gl3wValidateProgram 1356 | #define glValidateProgramPipeline gl3wValidateProgramPipeline 1357 | #define glVertexArrayAttribBinding gl3wVertexArrayAttribBinding 1358 | #define glVertexArrayAttribFormat gl3wVertexArrayAttribFormat 1359 | #define glVertexArrayAttribIFormat gl3wVertexArrayAttribIFormat 1360 | #define glVertexArrayAttribLFormat gl3wVertexArrayAttribLFormat 1361 | #define glVertexArrayBindingDivisor gl3wVertexArrayBindingDivisor 1362 | #define glVertexArrayElementBuffer gl3wVertexArrayElementBuffer 1363 | #define glVertexArrayVertexBuffer gl3wVertexArrayVertexBuffer 1364 | #define glVertexArrayVertexBuffers gl3wVertexArrayVertexBuffers 1365 | #define glVertexAttrib1d gl3wVertexAttrib1d 1366 | #define glVertexAttrib1dv gl3wVertexAttrib1dv 1367 | #define glVertexAttrib1f gl3wVertexAttrib1f 1368 | #define glVertexAttrib1fv gl3wVertexAttrib1fv 1369 | #define glVertexAttrib1s gl3wVertexAttrib1s 1370 | #define glVertexAttrib1sv gl3wVertexAttrib1sv 1371 | #define glVertexAttrib2d gl3wVertexAttrib2d 1372 | #define glVertexAttrib2dv gl3wVertexAttrib2dv 1373 | #define glVertexAttrib2f gl3wVertexAttrib2f 1374 | #define glVertexAttrib2fv gl3wVertexAttrib2fv 1375 | #define glVertexAttrib2s gl3wVertexAttrib2s 1376 | #define glVertexAttrib2sv gl3wVertexAttrib2sv 1377 | #define glVertexAttrib3d gl3wVertexAttrib3d 1378 | #define glVertexAttrib3dv gl3wVertexAttrib3dv 1379 | #define glVertexAttrib3f gl3wVertexAttrib3f 1380 | #define glVertexAttrib3fv gl3wVertexAttrib3fv 1381 | #define glVertexAttrib3s gl3wVertexAttrib3s 1382 | #define glVertexAttrib3sv gl3wVertexAttrib3sv 1383 | #define glVertexAttrib4Nbv gl3wVertexAttrib4Nbv 1384 | #define glVertexAttrib4Niv gl3wVertexAttrib4Niv 1385 | #define glVertexAttrib4Nsv gl3wVertexAttrib4Nsv 1386 | #define glVertexAttrib4Nub gl3wVertexAttrib4Nub 1387 | #define glVertexAttrib4Nubv gl3wVertexAttrib4Nubv 1388 | #define glVertexAttrib4Nuiv gl3wVertexAttrib4Nuiv 1389 | #define glVertexAttrib4Nusv gl3wVertexAttrib4Nusv 1390 | #define glVertexAttrib4bv gl3wVertexAttrib4bv 1391 | #define glVertexAttrib4d gl3wVertexAttrib4d 1392 | #define glVertexAttrib4dv gl3wVertexAttrib4dv 1393 | #define glVertexAttrib4f gl3wVertexAttrib4f 1394 | #define glVertexAttrib4fv gl3wVertexAttrib4fv 1395 | #define glVertexAttrib4iv gl3wVertexAttrib4iv 1396 | #define glVertexAttrib4s gl3wVertexAttrib4s 1397 | #define glVertexAttrib4sv gl3wVertexAttrib4sv 1398 | #define glVertexAttrib4ubv gl3wVertexAttrib4ubv 1399 | #define glVertexAttrib4uiv gl3wVertexAttrib4uiv 1400 | #define glVertexAttrib4usv gl3wVertexAttrib4usv 1401 | #define glVertexAttribBinding gl3wVertexAttribBinding 1402 | #define glVertexAttribDivisor gl3wVertexAttribDivisor 1403 | #define glVertexAttribFormat gl3wVertexAttribFormat 1404 | #define glVertexAttribI1i gl3wVertexAttribI1i 1405 | #define glVertexAttribI1iv gl3wVertexAttribI1iv 1406 | #define glVertexAttribI1ui gl3wVertexAttribI1ui 1407 | #define glVertexAttribI1uiv gl3wVertexAttribI1uiv 1408 | #define glVertexAttribI2i gl3wVertexAttribI2i 1409 | #define glVertexAttribI2iv gl3wVertexAttribI2iv 1410 | #define glVertexAttribI2ui gl3wVertexAttribI2ui 1411 | #define glVertexAttribI2uiv gl3wVertexAttribI2uiv 1412 | #define glVertexAttribI3i gl3wVertexAttribI3i 1413 | #define glVertexAttribI3iv gl3wVertexAttribI3iv 1414 | #define glVertexAttribI3ui gl3wVertexAttribI3ui 1415 | #define glVertexAttribI3uiv gl3wVertexAttribI3uiv 1416 | #define glVertexAttribI4bv gl3wVertexAttribI4bv 1417 | #define glVertexAttribI4i gl3wVertexAttribI4i 1418 | #define glVertexAttribI4iv gl3wVertexAttribI4iv 1419 | #define glVertexAttribI4sv gl3wVertexAttribI4sv 1420 | #define glVertexAttribI4ubv gl3wVertexAttribI4ubv 1421 | #define glVertexAttribI4ui gl3wVertexAttribI4ui 1422 | #define glVertexAttribI4uiv gl3wVertexAttribI4uiv 1423 | #define glVertexAttribI4usv gl3wVertexAttribI4usv 1424 | #define glVertexAttribIFormat gl3wVertexAttribIFormat 1425 | #define glVertexAttribIPointer gl3wVertexAttribIPointer 1426 | #define glVertexAttribL1d gl3wVertexAttribL1d 1427 | #define glVertexAttribL1dv gl3wVertexAttribL1dv 1428 | #define glVertexAttribL1ui64ARB gl3wVertexAttribL1ui64ARB 1429 | #define glVertexAttribL1ui64vARB gl3wVertexAttribL1ui64vARB 1430 | #define glVertexAttribL2d gl3wVertexAttribL2d 1431 | #define glVertexAttribL2dv gl3wVertexAttribL2dv 1432 | #define glVertexAttribL3d gl3wVertexAttribL3d 1433 | #define glVertexAttribL3dv gl3wVertexAttribL3dv 1434 | #define glVertexAttribL4d gl3wVertexAttribL4d 1435 | #define glVertexAttribL4dv gl3wVertexAttribL4dv 1436 | #define glVertexAttribLFormat gl3wVertexAttribLFormat 1437 | #define glVertexAttribLPointer gl3wVertexAttribLPointer 1438 | #define glVertexAttribP1ui gl3wVertexAttribP1ui 1439 | #define glVertexAttribP1uiv gl3wVertexAttribP1uiv 1440 | #define glVertexAttribP2ui gl3wVertexAttribP2ui 1441 | #define glVertexAttribP2uiv gl3wVertexAttribP2uiv 1442 | #define glVertexAttribP3ui gl3wVertexAttribP3ui 1443 | #define glVertexAttribP3uiv gl3wVertexAttribP3uiv 1444 | #define glVertexAttribP4ui gl3wVertexAttribP4ui 1445 | #define glVertexAttribP4uiv gl3wVertexAttribP4uiv 1446 | #define glVertexAttribPointer gl3wVertexAttribPointer 1447 | #define glVertexBindingDivisor gl3wVertexBindingDivisor 1448 | #define glViewport gl3wViewport 1449 | #define glViewportArrayv gl3wViewportArrayv 1450 | #define glViewportIndexedf gl3wViewportIndexedf 1451 | #define glViewportIndexedfv gl3wViewportIndexedfv 1452 | #define glWaitSync gl3wWaitSync 1453 | 1454 | #ifdef __cplusplus 1455 | } 1456 | #endif 1457 | 1458 | #endif 1459 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 StanEpp 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Particle System 2 | This is a small particle system written in C++14/17 with OpenGL. It uses compute shader to compute the movement of the particles. 3 | 4 | ## Build and Run 5 | Clone the repository: 6 | ``` 7 | git clone https://github.com/StanEpp/OpenGL_ParticleSystem.git 8 | ``` 9 | Then build it: 10 | ``` 11 | cd OpenGL_ParticleSystem 12 | mkdir build 13 | cd build 14 | cmake .. 15 | make -j8 16 | ``` 17 | Execute the application and run one example scene: 18 | ``` 19 | ./OpenGL_ParticleSystem 20 | ``` 21 | 22 | ## Keys 23 | - W, A, S, D - Moving the camera 24 | - E, Q - Adjusting the attractor's depth 25 | - Left mouse button - Activating the attractor mode (Camera does not move anymore) 26 | - Right mouse button - Activating the attractor as the source of gravity (Only in attractor mode) 27 | - TAB - Toggle Fps in title bar. Only visible when in window mode. 28 | 29 | 30 | ## Errors and Problems 31 | 32 | If no GLFW window can be created nor an OpenGL context then make sure you've got the latest graphics driver which supports OpenGL 4.3. 33 | 34 | ## Comment 35 | 36 | I started this project to learn OpenGL. It has been revised several times since the first commit. When there are bugs, design problems or inconsistencies please let me know. 37 | -------------------------------------------------------------------------------- /deps/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | include(ExternalProject) 2 | 3 | set(DEPENDENCY_DIR ${CMAKE_BINARY_DIR}/deps) 4 | set(DEPENDENCY_INSTALL_DIR ${DEPENDENCY_DIR}/installed) 5 | set(DEPENDENCY_INSTALL_LIB_DIR ${DEPENDENCY_INSTALL_DIR}/lib) 6 | set(DEPENDENCY_INSTALL_INCLUDE_DIR ${DEPENDENCY_INSTALL_DIR}/include) 7 | 8 | set(DEPENDENCY_INCLUDE_DIR ${CMAKE_BINARY_DIR}/deps/installed/include PARENT_SCOPE) 9 | 10 | externalproject_add(glm_ext 11 | PREFIX ${DEPENDENCY_DIR}/glm 12 | INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory 13 | /glm ${DEPENDENCY_INSTALL_INCLUDE_DIR}/glm 14 | CONFIGURE_COMMAND "" 15 | BUILD_COMMAND "" 16 | UPDATE_COMMAND "" 17 | UPDATE_DISCONNECTED 1 18 | URL https://github.com/g-truc/glm/archive/0.9.9-a2.zip 19 | ) 20 | 21 | externalproject_add(glfw_ext 22 | PREFIX ${DEPENDENCY_DIR}/glfw 23 | CMAKE_ARGS -DGLFW_BUILD_TESTS=OFF 24 | -DGLFW_BUILD_EXAMPLES=OFF 25 | -DGLFW_BUILD_DOCS=OFF 26 | -DGLFW_INSTALL=ON 27 | -DBUILD_SHARED_LIBS=ON 28 | -DCMAKE_INSTALL_PREFIX=${DEPENDENCY_INSTALL_DIR} 29 | UPDATE_COMMAND "" 30 | UPDATE_DISCONNECTED 1 31 | URL https://github.com/glfw/glfw/releases/download/3.2.1/glfw-3.2.1.zip 32 | ) 33 | 34 | add_library(glfw SHARED IMPORTED GLOBAL) 35 | 36 | set_target_properties(glfw PROPERTIES IMPORTED_LOCATION 37 | "${DEPENDENCY_INSTALL_LIB_DIR}/${CMAKE_SHARED_MODULE_PREFIX}glfw${CMAKE_SHARED_LIBRARY_SUFFIX}" 38 | ) -------------------------------------------------------------------------------- /settings.txt: -------------------------------------------------------------------------------- 1 | ## Camera 2 | movementSpeed 100 3 | cameraSensitivity 0.5 4 | nearPlane 0.01 5 | farPlane 1000 6 | fovY 45 7 | 8 | ## Particles 9 | numParticles 10000 10 | particleSpawnRadius 15 11 | sizeOfParticle 0.01 12 | 13 | ## Window 14 | width 1920 15 | height 1080 16 | fullscreen 0 -------------------------------------------------------------------------------- /shader/cs.glsl: -------------------------------------------------------------------------------- 1 | #version 430 2 | #extension GL_ARB_compute_shader : enable 3 | #extension GL_ARB_shader_storage_buffer_object : enable 4 | 5 | struct particle{ 6 | vec4 currPos; 7 | vec4 prevPos; 8 | }; 9 | 10 | layout(std430, binding=0) buffer particles{ 11 | particle p[]; 12 | }; 13 | 14 | uniform vec4 attPos; 15 | uniform float dt; 16 | uniform uint maxParticles; 17 | 18 | layout (local_size_x = 256, local_size_y = 1, local_size_z = 1) in; 19 | void main(){ 20 | uint gid = gl_GlobalInvocationID.x; 21 | 22 | if(gid <= maxParticles){ 23 | particle part = p[gid]; 24 | 25 | // The direction of this vector corresponds to the direction of the gravity. 26 | // A zero vector will freeze the particles when not interacted with them. 27 | vec4 gv = normalize(vec4(0, -1, 0, 0)); 28 | 29 | // Direction vector of the acceleration. 30 | // The length of this vector determines strength of attractor. 31 | vec4 a = vec4(0); 32 | 33 | if(attPos.w >= 0.0f){ 34 | // Take particle's distance from origin as coefficient, so that every 35 | // particle behaves differently. Change coefficient to change attractor's strength. 36 | a = normalize(attPos - part.currPos) * length(part.currPos.xyz) * 10.f; 37 | } 38 | 39 | // Add gravity vector times its strength. 40 | a += gv * 0.5f; 41 | 42 | // Slightly modified verlet integration http://lonesock.net/article/verlet.html 43 | vec4 tempCurrPos = 1.99f * part.currPos - 0.99f * part.prevPos + a * dt * dt; 44 | part.prevPos = part.currPos; 45 | part.currPos = tempCurrPos; 46 | 47 | p[gid] = part; 48 | } 49 | } -------------------------------------------------------------------------------- /shader/fs.glsl: -------------------------------------------------------------------------------- 1 | #version 430 2 | 3 | in vec2 ex_TexCoor; 4 | out vec4 color; 5 | 6 | uniform sampler2D texture; 7 | uniform float time; 8 | 9 | void main(void){ 10 | vec4 outputColor = texture2D(texture, ex_TexCoor) * 3.f; 11 | 12 | float red, green, blue; 13 | 14 | // Play around with the values to change color of particles over time 15 | green = cos(time * 0.2 + 1.5) + 1.f; 16 | red = cos(time * 0.04) * sin(time * 0.003) * 0.35 + 1.f; 17 | blue = sin(time * 0.0006) * 0.5 + 1.f; 18 | 19 | outputColor.x *= red; 20 | outputColor.y *= green; 21 | outputColor.z *= blue; 22 | 23 | color = outputColor; 24 | } -------------------------------------------------------------------------------- /shader/gs.glsl: -------------------------------------------------------------------------------- 1 | #version 430 2 | 3 | layout(points) in; 4 | layout(triangle_strip, max_vertices = 4) out; 5 | 6 | out vec2 ex_TexCoor; 7 | 8 | uniform mat4 viewMatrix; 9 | uniform mat4 projMatrix; 10 | uniform vec4 camPos; 11 | uniform float quadLength; 12 | 13 | void main(void){ 14 | vec4 normal = normalize(viewMatrix * gl_in[0].gl_Position - camPos); 15 | 16 | vec3 rightAxis = cross(normal.xyz, vec3(0,1,0)); 17 | vec3 upAxis = cross(rightAxis, normal.xyz); 18 | 19 | vec4 rightVector = projMatrix * vec4(rightAxis.xyz, 1.0f) * (quadLength*0.5f); 20 | vec4 upVector = projMatrix * vec4(upAxis.xyz, 1.0f) * (quadLength*0.5f); 21 | vec4 particlePos = projMatrix * viewMatrix * gl_in[0].gl_Position; 22 | 23 | gl_Position = particlePos-rightVector - upVector; 24 | ex_TexCoor = vec2(0,0); 25 | EmitVertex(); 26 | 27 | gl_Position = particlePos+rightVector - upVector; 28 | gl_Position.x += 0.5; 29 | ex_TexCoor = vec2(1,0); 30 | EmitVertex(); 31 | 32 | gl_Position = particlePos-rightVector + upVector; 33 | gl_Position.y += 0.5; 34 | ex_TexCoor = vec2(0,1); 35 | EmitVertex(); 36 | 37 | gl_Position = particlePos+rightVector + upVector; 38 | gl_Position.y += 0.5; 39 | gl_Position.x += 0.5; 40 | ex_TexCoor = vec2(1,1); 41 | EmitVertex(); 42 | } 43 | -------------------------------------------------------------------------------- /shader/vs.glsl: -------------------------------------------------------------------------------- 1 | #version 430 2 | 3 | layout(location=0) in vec4 currentPos; 4 | layout(location=1) in vec4 prevPos; 5 | 6 | void main(void){ 7 | gl_Position = currentPos; 8 | } -------------------------------------------------------------------------------- /src/Attractor.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | #include "Camera.hpp" 8 | #include "GLFWInput.hpp" 9 | 10 | class Attractor 11 | { 12 | public: 13 | Attractor() = default; 14 | Attractor(glm::vec4& position) : m_position(position) {} 15 | 16 | glm::vec4 pos() const{ return m_position; } 17 | float depth() const { return m_attDepth; } 18 | bool active() const { return m_active; } 19 | 20 | void updateAttractor(const Camera& camera, const GLFWInput& input) 21 | { 22 | // When right mouse button is not pressed the attractor is not used. 23 | if (!input.isMouseButtonPressed(GLFW_MOUSE_BUTTON_RIGHT)) { 24 | m_active = false; 25 | return; 26 | } 27 | 28 | // Update attractor depth 29 | if (input.isKeyPressed(GLFW_KEY_E)) { 30 | incrementDepth(1.0f); 31 | } 32 | if (input.isKeyPressed(GLFW_KEY_Q)) { 33 | incrementDepth(-1.0f); 34 | } 35 | 36 | if (input.isMouseButtonPressed(GLFW_MOUSE_BUTTON_LEFT)) { 37 | m_active = true; 38 | } else { 39 | m_active = false; 40 | } 41 | 42 | glm::vec3 view, rightVec, upVec, pos, dir, attractor(0); 43 | auto width = static_cast(camera.width()); 44 | auto height = static_cast(camera.height()); 45 | float aspectRatio = width / height; 46 | 47 | // Get coordinate axes 48 | view = glm::vec3(camera.lookDir()); 49 | rightVec = glm::vec3(camera.right()); 50 | upVec = glm::vec3(camera.up()); 51 | 52 | // Compute half height of near plane in camera coordinate system 53 | float vLength = std::tan((camera.fovY()/2.f) * 180.f / std::acos(-1)) * camera.nearPlane(); 54 | 55 | upVec *= vLength; 56 | rightVec *= vLength * aspectRatio; 57 | 58 | // Get mouse coordinates in screen coordinate system and map to [-1, 1] 59 | float mouseX = std::clamp(static_cast(input.getXPos()), 0.f, width); 60 | float mouseY = std::clamp(static_cast(input.getYPos()), 0.f, height); 61 | mouseX = (mouseX - (width/2.0f)) / (width/2.0f); 62 | mouseY = (mouseY - (height/2.0f)) / (height/2.0f); 63 | 64 | // Compute the intersection with the near plane 65 | pos = glm::vec3(camera.pos()) + view * camera.nearPlane() + rightVec * mouseX - upVec * mouseY; 66 | // Compute the direction of the ray 67 | dir = glm::normalize(pos - glm::vec3(camera.pos())); 68 | 69 | // Shoot attractor along the ray to the given depth 70 | attractor = pos + dir * m_attDepth; 71 | 72 | // Update attractor 73 | m_position = glm::vec4(attractor, 1.0f); 74 | } 75 | 76 | void incrementDepth(float inc) 77 | { 78 | m_attDepth += inc; 79 | if (m_attDepth < 0) { 80 | m_attDepth = 0; 81 | } else if (m_attDepth > 1000) { 82 | m_attDepth = 1000; 83 | } 84 | } 85 | 86 | private: 87 | glm::vec4 m_position{0, 0, 0, 0}; 88 | float m_attDepth = 0; //The z-Coordinate of the attractor 89 | bool m_active = false; 90 | }; -------------------------------------------------------------------------------- /src/Camera.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "GLFWInput.hpp" 4 | 5 | #include 6 | #include 7 | 8 | class Camera 9 | { 10 | public: 11 | Camera(int width, int height, float fovY, 12 | glm::vec3 pos, glm::vec3 lookAt, glm::vec3 up, 13 | float nearPlane, float farPlane, 14 | float sensitivity, float movementSpeed) 15 | : m_width(width), 16 | m_height(height), 17 | m_sensitivity(sensitivity), 18 | m_movementSpeed(movementSpeed), 19 | m_nearPlane(nearPlane), 20 | m_farPlane(farPlane), 21 | m_pos(pos) 22 | { 23 | m_lookDir = glm::normalize(lookAt - pos); 24 | m_right = glm::normalize(glm::cross(up, m_lookDir)); 25 | m_up = glm::cross(m_right, m_lookDir); 26 | 27 | m_fovY = std::tan(fovY * std::acos(-1) / 180.f); 28 | 29 | m_projectionMatrix = glm::perspectiveFov(m_fovY, 30 | static_cast(m_width), 31 | static_cast(m_height), 32 | m_nearPlane, m_farPlane); 33 | } 34 | 35 | int width() const{ return m_width; } 36 | int height() const { return m_height; } 37 | float fovY() const{ return m_fovY; } 38 | float fovX() const { return m_fovX; } 39 | float nearPlane() const{ return m_nearPlane; } 40 | float farPlane() const { return m_farPlane; } 41 | const glm::vec3& pos() const { return m_pos; } 42 | const glm::vec3& lookDir() const { return m_lookDir; } 43 | const glm::vec3& up() const { return m_up; } 44 | const glm::vec3& right() const { return m_right; } 45 | const glm::mat4& projectionMatrix() const { return m_projectionMatrix; } 46 | const glm::mat4& viewMatrix() const { return m_viewMatrix; } 47 | 48 | void update(const GLFWInput &input, float dt) 49 | { 50 | float dz, dx, dy; 51 | dz = dx = dy = 0.f; 52 | 53 | if (input.isKeyPressed(GLFW_KEY_W)) { 54 | dz = m_sensitivity * dt; 55 | } else if (input.isKeyPressed(GLFW_KEY_S)) { 56 | dz = -1.f * m_sensitivity * dt; 57 | } 58 | 59 | if (input.isKeyPressed(GLFW_KEY_D)) { 60 | dx = m_sensitivity * dt; 61 | } else if (input.isKeyPressed(GLFW_KEY_A)) { 62 | dx = -1.f * m_sensitivity * dt; 63 | } 64 | 65 | if (!input.isMouseButtonPressed(GLFW_MOUSE_BUTTON_RIGHT)) { 66 | m_accRotY -= input.getXPosDiff() * m_sensitivity * dt; 67 | m_accRotX -= input.getYPosDiff() * m_sensitivity * dt; 68 | m_accRotY = std::fmod(m_accRotY, 360); 69 | m_accRotX = std::fmod(m_accRotX, 360); 70 | } 71 | 72 | auto rotX = glm::rotate(glm::mat4(1.f), m_accRotX, glm::vec3(1.f, 0.f, 0.f)); 73 | auto rotY = glm::rotate(glm::mat4(1.f), m_accRotY, glm::vec3(0.f, 1.f, 0.f)); 74 | 75 | auto rotMatrix = rotY * rotX; 76 | 77 | m_lookDir = glm::normalize(glm::vec3(rotMatrix * glm::vec4(0.f, 0.f, -1.f, 0.f))); 78 | m_up = glm::normalize(glm::vec3(rotMatrix * glm::vec4(0.f, 1.f, 0.f, 0.f))); 79 | m_right = glm::normalize(glm::cross(m_lookDir, m_up)); 80 | 81 | m_pos += m_movementSpeed * ( dz * m_lookDir + dx * m_right); 82 | 83 | m_viewMatrix = glm::lookAt(m_pos, m_pos + m_lookDir, m_up); 84 | } 85 | 86 | private: 87 | int m_width = 1280; 88 | int m_height = 720; 89 | float m_fovY = 0.f; 90 | float m_fovX = 0.f; 91 | float m_accRotX = 0.f; 92 | float m_accRotY = 0.f; 93 | float m_sensitivity = 1.f; 94 | float m_movementSpeed = 10.f; 95 | float m_nearPlane = 0.1f; 96 | float m_farPlane = 1000.f; 97 | 98 | glm::vec3 m_pos{ 0.f, 0.f, 0.f }; 99 | glm::vec3 m_lookDir{ 0.f, 0.f, -1.f }; 100 | glm::vec3 m_up{ 0.f, 1.f, 0.f }; 101 | glm::vec3 m_right{ 1.f, 0.f, 0.f }; 102 | 103 | glm::mat4 m_projectionMatrix; 104 | glm::mat4 m_viewMatrix; 105 | }; -------------------------------------------------------------------------------- /src/ConfigLoader.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | struct Settings 9 | { 10 | uint32_t width = 1280; 11 | uint32_t height = 720; 12 | float nearPlane = 0.1f; 13 | float farPlane = 1000.f; 14 | bool fullscreen = false; 15 | float fovY = 45.0f; 16 | float cameraSensitivity = 0.005f; 17 | float movementSpeed = 5.f; 18 | 19 | uint32_t numParticles = 10000; 20 | uint32_t particleSpawnRadius = 16; 21 | float sizeOfParticle = 0.01f; 22 | }; 23 | 24 | class ConfigLoader 25 | { 26 | public: 27 | /* 28 | Format Type: 29 | 30 | width 1024 31 | height 768 32 | maxFps 60 33 | fullscreen 1 34 | 35 | */ 36 | ConfigLoader(const std::string &filename) 37 | { 38 | std::ifstream file(filename, std::ios::in); 39 | 40 | if (!file) { 41 | std::cerr << "Error: Cannot open config file! Make sure there is a config file with the name \"" << filename << "\" in the same directory as the executable.\n"; 42 | std::cerr << "Falling back to default values!\n"; 43 | return; 44 | } 45 | 46 | std::string line, value, descr; 47 | std::istringstream token; 48 | 49 | while (!file.eof()) { 50 | getline(file, line); 51 | if (!line.empty()) { 52 | token = std::istringstream(line); 53 | getline(token, descr, ' '); 54 | getline(token, value, ' '); 55 | if (descr == "width"){ m_settings.width = std::stoi(value); } 56 | else if (descr == "height"){ m_settings.height = std::stoi(value); } 57 | else if (descr == "fovY"){ m_settings.fovY = std::stof(value); } 58 | else if (descr == "nearPlane"){ m_settings.nearPlane = std::stof(value); } 59 | else if (descr == "farPlane"){ m_settings.farPlane = std::stof(value); } 60 | else if (descr == "fullscreen"){ m_settings.fullscreen = std::stoi(value); } 61 | else if (descr == "cameraSensitivity"){ m_settings.cameraSensitivity = std::stof(value); } 62 | else if (descr == "movementSpeed"){ m_settings.movementSpeed = std::stof(value); } 63 | else if (descr == "numParticles"){ m_settings.numParticles = std::stoi(value); } 64 | else if (descr == "particleSpawnRadius"){ m_settings.particleSpawnRadius = std::stoi(value); } 65 | else if (descr == "sizeOfParticle"){ m_settings.sizeOfParticle = std::stof(value); } 66 | } 67 | } 68 | } 69 | 70 | Settings settings() const { return m_settings; } 71 | 72 | private: 73 | Settings m_settings; 74 | }; -------------------------------------------------------------------------------- /src/GLFWInput.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | #include "GLFWWindow.hpp" 9 | 10 | class GLFWInput 11 | { 12 | public: 13 | void bindInputToWindow(const GLFWWindow& window) 14 | { 15 | m_window = window.getGLFWwindow(); 16 | } 17 | 18 | void updateInput() 19 | { 20 | double x, y; 21 | glfwPollEvents(); 22 | glfwGetCursorPos(m_window, &x, &y); 23 | m_xDiff = x - m_xPos; 24 | m_yDiff = y - m_yPos; 25 | m_xPos = x; 26 | m_yPos = y; 27 | } 28 | 29 | bool isKeyPressed(unsigned int GLFW_Key) const 30 | { 31 | return (glfwGetKey(m_window, GLFW_Key) == GLFW_PRESS); 32 | } 33 | 34 | bool isMouseButtonPressed(unsigned int GLFW_MouseButton) const 35 | { 36 | return (glfwGetMouseButton(m_window, GLFW_MouseButton) == GLFW_PRESS); 37 | } 38 | 39 | double getXPos() const { return m_xPos; } 40 | double getYPos() const { return m_yPos; } 41 | double getXPosDiff() const { return m_xDiff; } 42 | double getYPosDiff() const { return m_yDiff; } 43 | 44 | bool isKeyPressedOnce(unsigned int GLFW_Key) 45 | { 46 | if (isKeyPressed(GLFW_Key)) { 47 | if (m_keyPressed.find(GLFW_Key) == m_keyPressed.end()) { 48 | m_keyPressed.insert(GLFW_Key); 49 | return true; 50 | } 51 | } else { 52 | m_keyPressed.erase(GLFW_Key); 53 | } 54 | return false; 55 | } 56 | 57 | bool isMouseButtonPressedOnce(unsigned int GLFW_MouseButton) 58 | { 59 | if (isMouseButtonPressed(GLFW_MouseButton)) { 60 | if (!m_mouseButtonPressed[GLFW_MouseButton]) { 61 | m_mouseButtonPressed[GLFW_MouseButton] = true; 62 | return true; 63 | } 64 | } else { 65 | m_mouseButtonPressed[GLFW_MouseButton] = false; 66 | } 67 | return false; 68 | } 69 | 70 | void setMousePos(double xpos, double ypos) 71 | { 72 | glfwSetCursorPos(m_window, xpos, ypos); 73 | } 74 | 75 | private: 76 | double m_xPos = 0; 77 | double m_yPos = 0; 78 | double m_xDiff = 0; 79 | double m_yDiff = 0; 80 | std::array m_mouseButtonPressed{ false, false, false }; 81 | std::unordered_set m_keyPressed; 82 | GLFWwindow* m_window = nullptr; 83 | }; -------------------------------------------------------------------------------- /src/GLFWTimer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | class GLFWTimer 6 | { 7 | private: 8 | double m_timestamp = 0.; 9 | 10 | public: 11 | // Receives time since glfwInit() call 12 | double timestamp() const 13 | { 14 | return glfwGetTime(); 15 | } 16 | 17 | void setTimestamp() 18 | { 19 | m_timestamp = timestamp(); 20 | } 21 | 22 | // Returns the time difference since the last setTimestamp() call. 23 | double timestampDiff() const 24 | { 25 | return glfwGetTime() - m_timestamp; 26 | } 27 | }; -------------------------------------------------------------------------------- /src/GLFWWindow.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include "GL/gl3w.h" 7 | #include 8 | 9 | class GLFWWindow 10 | { 11 | public: 12 | GLFWWindow(int width, int height, const std::string& windowName, bool fullscreen) : 13 | m_width(width), 14 | m_height(height), 15 | m_windowName(windowName), 16 | m_fullscreen(fullscreen) 17 | { 18 | initialize(); 19 | setVSync(m_vsync); 20 | } 21 | 22 | ~GLFWWindow() 23 | { 24 | glfwTerminate(); 25 | } 26 | 27 | int getWidth() const { return m_width; } 28 | 29 | int getHeight() const { return m_height; } 30 | 31 | GLFWwindow* getGLFWwindow() const 32 | { 33 | return m_window; 34 | } 35 | 36 | void swapBuffers() 37 | { 38 | glfwSwapBuffers(m_window); 39 | } 40 | 41 | void setWindowTitle(const char *title) 42 | { 43 | glfwSetWindowTitle(m_window, title); 44 | } 45 | 46 | void setDefaultWindowTitle() 47 | { 48 | glfwSetWindowTitle(m_window, m_windowName.c_str()); 49 | } 50 | 51 | void setVSync(bool enable) 52 | { 53 | m_vsync = enable; 54 | glfwSwapInterval( enable?1:0); 55 | } 56 | 57 | bool vsync() const { return m_vsync; } 58 | 59 | private: 60 | 61 | void initialize() 62 | { 63 | if (glfwInit() != GL_TRUE) { 64 | throw std::runtime_error("Could not initialize GLFW!"); 65 | } 66 | 67 | glfwDefaultWindowHints(); 68 | glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); 69 | 70 | m_window = glfwCreateWindow(m_width, m_height, m_windowName.c_str(), m_fullscreen ? glfwGetPrimaryMonitor() : NULL, NULL); 71 | 72 | if (!m_window) { 73 | glfwTerminate(); 74 | throw std::runtime_error("Could not open GLFW Window!"); 75 | } 76 | 77 | setWindowTitle(m_windowName.c_str()); 78 | 79 | glfwSetInputMode(m_window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); 80 | 81 | glfwMakeContextCurrent(m_window); 82 | 83 | if (gl3wInit()) { 84 | throw std::runtime_error("Could not initialize gl3w!"); 85 | } 86 | 87 | if (!gl3wIsSupported(4, 3)) { 88 | throw std::runtime_error("OpenGL 4.3 not supported!"); 89 | } 90 | 91 | std::cout << "OpenGL Version: " << glGetString(GL_VERSION) << '\n'; 92 | std::cout << "GLSL Version: " << glGetString(GL_SHADING_LANGUAGE_VERSION) << '\n'; 93 | } 94 | 95 | int m_width = 1280; 96 | int m_height = 720; 97 | std::string m_windowName; 98 | bool m_fullscreen = false; 99 | bool m_vsync = true; 100 | GLFWwindow* m_window = nullptr; 101 | }; -------------------------------------------------------------------------------- /src/ParticleBuffer.cpp: -------------------------------------------------------------------------------- 1 | #include "ParticleBuffer.hpp" 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | ParticleBuffer::ParticleBuffer(unsigned int numParticles, int initRadius) : 8 | _numParticles(numParticles), 9 | _initRadius(initRadius) 10 | {} 11 | 12 | ParticleBuffer::~ParticleBuffer() 13 | { 14 | deleteParticleBuffer(); 15 | } 16 | 17 | void ParticleBuffer::initializeParticles() 18 | { 19 | auto particles = std::make_unique(_numParticles); 20 | distributeParticles(particles.get()); 21 | 22 | glGetError(); 23 | 24 | glGenBuffers(1, &_buffID); 25 | glBindBuffer(GL_SHADER_STORAGE_BUFFER, _buffID); 26 | glBufferData(GL_SHADER_STORAGE_BUFFER, _numParticles * sizeof(Particle), particles.get(), GL_STATIC_DRAW); 27 | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, _buffID); 28 | 29 | if (glGetError() != GL_NO_ERROR) { 30 | throw std::runtime_error("ERROR: Could not generate or bind shader storage buffer for particles!"); 31 | } 32 | } 33 | 34 | void ParticleBuffer::distributeParticles(Particle* particles) 35 | { 36 | float rndX, rndY, rndZ; 37 | auto fInitRadius = static_cast(_initRadius); 38 | std::mt19937 eng; 39 | std::uniform_real_distribution dist(fInitRadius*(-1.f), fInitRadius); 40 | 41 | for (auto i = 0u; i < _numParticles; ++i) { 42 | rndX = dist(eng); 43 | rndY = dist(eng); 44 | rndZ = dist(eng); 45 | particles[i].currPosition = glm::vec4(rndX, rndY, rndZ, 1.f); 46 | particles[i].prevPosition = glm::vec4(rndX, rndY, rndZ, 1.f); 47 | } 48 | } 49 | 50 | GLuint ParticleBuffer::getParticleBufferID() const 51 | { 52 | return _buffID; 53 | } 54 | 55 | unsigned int ParticleBuffer::getNumParticles() const 56 | { 57 | return _numParticles; 58 | } 59 | 60 | void ParticleBuffer::deleteParticleBuffer() noexcept 61 | { 62 | if(!_buffID) return; 63 | glGetError(); 64 | glDeleteBuffers(1, &_buffID); 65 | if (glGetError() != GL_NO_ERROR) { 66 | std::cerr << "Could not properly delete particle Buffer!" << std::endl; 67 | } 68 | _buffID = 0; 69 | } -------------------------------------------------------------------------------- /src/ParticleBuffer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | struct Particle 7 | { 8 | glm::vec4 currPosition; 9 | glm::vec4 prevPosition; 10 | }; 11 | 12 | class ParticleBuffer 13 | { 14 | public: 15 | ParticleBuffer() = default; 16 | ParticleBuffer(unsigned int, int); 17 | ParticleBuffer(ParticleBuffer&) = delete; 18 | ParticleBuffer(ParticleBuffer&&) = delete; 19 | ParticleBuffer& operator=(ParticleBuffer&) = delete; 20 | ParticleBuffer& operator=(ParticleBuffer&&) = delete; 21 | ~ParticleBuffer(); 22 | 23 | void initializeParticles(); 24 | 25 | GLuint getParticleBufferID() const; 26 | unsigned int getNumParticles() const; 27 | 28 | private: 29 | void distributeParticles(Particle*); 30 | void deleteParticleBuffer() noexcept; 31 | GLuint _buffID = 0; 32 | unsigned int _numParticles = 1000; 33 | int _initRadius = 15; 34 | }; -------------------------------------------------------------------------------- /src/ParticleSystem.cpp: -------------------------------------------------------------------------------- 1 | #include "ParticleSystem.hpp" 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | #include "GLFWTimer.hpp" 9 | 10 | #define WORK_GROUP_SIZE 256 11 | 12 | ParticleSystem::ParticleSystem(const std::string& settingsFile) : 13 | m_settings(ConfigLoader(settingsFile).settings()), 14 | m_window(m_settings.width, m_settings.height, "OpenGL_4.3_Particle_System", m_settings.fullscreen), 15 | m_camera(m_settings.width, m_settings.height, m_settings.fovY, 16 | glm::vec3(0, 0, -5), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0), 17 | m_settings.nearPlane, m_settings.farPlane, 18 | m_settings.cameraSensitivity, m_settings.movementSpeed), 19 | m_particleBuffer(m_settings.numParticles, m_settings.particleSpawnRadius), 20 | m_showFPS(false) 21 | { 22 | m_inputControl.bindInputToWindow(m_window); 23 | } 24 | 25 | ParticleSystem::~ParticleSystem() 26 | { 27 | if (m_computeProgID) { 28 | m_shaderManager.deleteProgram(m_computeProgID); 29 | } 30 | 31 | if (m_shaderProgID) { 32 | m_shaderManager.deleteProgram(m_shaderProgID); 33 | } 34 | } 35 | 36 | void ParticleSystem::initialize() 37 | { 38 | namespace fs = std::filesystem; 39 | 40 | //////// Initialize GLFW window, input, rendering context and gl3w 41 | m_window.setVSync(false); 42 | m_inputControl.bindInputToWindow(m_window); 43 | 44 | if (gl3wInit()) throw std::runtime_error("Could not initialize gl3w!"); 45 | if (!gl3wIsSupported(4, 3)) throw std::runtime_error("OpenGL 4.3 not supported!"); 46 | 47 | std::cout << "OpenGL Version: " << glGetString(GL_VERSION) << std::endl; 48 | std::cout << "GLSL Version: " << glGetString(GL_SHADING_LANGUAGE_VERSION) << std::endl; 49 | 50 | // Generate Vertex Arrays and initialize particles 51 | m_particleBuffer.initializeParticles(); 52 | 53 | glGenVertexArrays(1, &m_vertexArrayID); 54 | glBindVertexArray(m_vertexArrayID); 55 | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, m_particleBuffer.getParticleBufferID()); 56 | glEnableVertexAttribArray(0); 57 | glBindBuffer(GL_ARRAY_BUFFER, m_particleBuffer.getParticleBufferID()); 58 | glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, sizeof(Particle), (GLvoid*)0); 59 | glBindVertexArray(0); 60 | 61 | //Initiliaze shader and shader program 62 | fs::path shaderFolder("shader"); 63 | m_shaderManager.loadShader(shaderFolder/"vs.glsl", "vertexShader", GL_VERTEX_SHADER); 64 | m_shaderManager.loadShader(shaderFolder/"gs.glsl", "geometryShader", GL_GEOMETRY_SHADER); 65 | m_shaderManager.loadShader(shaderFolder/"fs.glsl", "fragmentShader", GL_FRAGMENT_SHADER); 66 | m_shaderManager.loadShader(shaderFolder/"cs.glsl", "computeShader", GL_COMPUTE_SHADER); 67 | 68 | m_shaderProgID = m_shaderManager.createProgram("shaderProg"); 69 | m_computeProgID = m_shaderManager.createProgram("computeProg"); 70 | 71 | m_shaderManager.attachShader("vertexShader", "shaderProg"); 72 | m_shaderManager.attachShader("geometryShader", "shaderProg"); 73 | m_shaderManager.attachShader("fragmentShader", "shaderProg"); 74 | m_shaderManager.attachShader("computeShader", "computeProg"); 75 | 76 | m_shaderManager.linkProgram("computeProg"); 77 | m_shaderManager.linkProgram("shaderProg"); 78 | 79 | // Since the programs are linked, the shaders are not needed anymore 80 | m_shaderManager.deleteShader("vertexShader"); 81 | m_shaderManager.deleteShader("geometryShader"); 82 | m_shaderManager.deleteShader("fragmentShader"); 83 | m_shaderManager.deleteShader("computeShader"); 84 | 85 | m_particleTexture.loadTexture(fs::path("texture")/"Particle.tga"); 86 | 87 | // Retrieve the uniform locations for both shaders and set the 88 | // uniform variables which will not change for every frame. 89 | m_shaderManager.useProgram(m_computeProgID); 90 | m_shaderManager.loadUniform_(m_computeProgID, "maxParticles", m_particleBuffer.getNumParticles()); 91 | m_csLocations.dt = m_shaderManager.getUniformLocation(m_computeProgID, "dt"); 92 | m_csLocations.attPos = m_shaderManager.getUniformLocation(m_computeProgID, "attPos"); 93 | 94 | m_shaderManager.useProgram(m_shaderProgID); 95 | m_shaderManager.loadUniform_(m_shaderProgID, "quadLength", m_settings.sizeOfParticle); 96 | m_shaderManager.loadMatrix4(m_shaderProgID, "projMatrix", glm::value_ptr(m_camera.projectionMatrix())); 97 | m_psLocations.viewMatrix = m_shaderManager.getUniformLocation(m_shaderProgID, "viewMatrix"); 98 | m_psLocations.camPos = m_shaderManager.getUniformLocation(m_shaderProgID, "camPos"); 99 | m_psLocations.time = m_shaderManager.getUniformLocation(m_shaderProgID, "time"); 100 | 101 | m_shaderManager.resetProgram(); 102 | 103 | // Depth test needs to be disabled for only rendering transparent particles. 104 | glDisable(GL_DEPTH_TEST); 105 | glEnable(GL_BLEND); 106 | glBlendFunc(GL_SRC_ALPHA, GL_ONE); 107 | } 108 | 109 | void ParticleSystem::run() 110 | { 111 | bool running = true; 112 | 113 | GLFWTimer mainTimer; 114 | GLFWTimer fpsTimer; 115 | 116 | std::string fpsStr; 117 | uint32_t frameCounter = 0; 118 | double dt = 0.; 119 | 120 | while (running) { 121 | // TODO: too high fps changes physics behavior. 122 | // Artificially limit max fps to 60. 123 | if (mainTimer.timestampDiff() > 1./60.) { 124 | dt = mainTimer.timestampDiff(); 125 | mainTimer.setTimestamp(); 126 | 127 | // Exit the program if ESC is pressed 128 | if (m_inputControl.isKeyPressed(GLFW_KEY_ESCAPE)) { 129 | running = false; 130 | } 131 | // Show FPS when TAB is pressed 132 | if (m_inputControl.isKeyPressedOnce(GLFW_KEY_TAB)) { 133 | m_showFPS = !m_showFPS; 134 | if (!m_showFPS) { 135 | m_window.setDefaultWindowTitle(); 136 | } 137 | } 138 | 139 | m_inputControl.updateInput(); 140 | 141 | m_camera.update(m_inputControl, dt); 142 | m_attractor.updateAttractor(m_camera, m_inputControl); 143 | 144 | updateParticles(dt); 145 | render(mainTimer.timestamp()); 146 | 147 | // Compute FPS and store them in a string. 148 | if (fpsTimer.timestampDiff() > 1.0) { 149 | if (m_showFPS) { 150 | m_window.setWindowTitle(std::to_string(frameCounter).c_str()); 151 | } 152 | frameCounter = 0; 153 | fpsTimer.setTimestamp(); 154 | } 155 | 156 | m_window.swapBuffers(); 157 | frameCounter++; 158 | } 159 | } 160 | } 161 | 162 | void ParticleSystem::updateParticles(double dt) 163 | { 164 | m_shaderManager.useProgram(m_computeProgID); 165 | 166 | m_shaderManager.loadUniform(m_csLocations.dt, static_cast(dt)); 167 | 168 | m_shaderManager.loadUniform(m_csLocations.attPos, 169 | m_attractor.pos().x, 170 | m_attractor.pos().y, 171 | m_attractor.pos().z, 172 | m_attractor.active() ? 1.0f : -1.0f); //Uses the last vector-entry to determine whether attractor or gravity is used 173 | 174 | glDispatchCompute((m_particleBuffer.getNumParticles()/WORK_GROUP_SIZE) + 1, 1, 1); 175 | glMemoryBarrier(GL_SHADER_STORAGE_BARRIER_BIT | GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT); 176 | } 177 | 178 | void ParticleSystem::render(double time) 179 | { 180 | glClearColor(0.0, 0.0, 0.0, 0.0); 181 | glClear(GL_COLOR_BUFFER_BIT); 182 | 183 | glBindVertexArray(m_vertexArrayID); 184 | 185 | m_shaderManager.useProgram(m_shaderProgID); 186 | 187 | m_shaderManager.loadMatrix4(m_psLocations.viewMatrix, glm::value_ptr(m_camera.viewMatrix())); 188 | m_shaderManager.loadUniform(m_psLocations.camPos, 189 | m_camera.pos().x, 190 | m_camera.pos().y, 191 | m_camera.pos().z, 192 | 1.0f); 193 | 194 | m_shaderManager.loadUniform(m_psLocations.time, static_cast(time)); 195 | 196 | glDrawArrays(GL_POINTS, 0, m_particleBuffer.getNumParticles()); 197 | 198 | glBindVertexArray(0); 199 | 200 | m_shaderManager.resetProgram(); 201 | } -------------------------------------------------------------------------------- /src/ParticleSystem.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include "ShaderManager.hpp" 6 | #include "ParticleBuffer.hpp" 7 | #include "ParticleTexture.hpp" 8 | #include "Attractor.hpp" 9 | #include "GLFWWindow.hpp" 10 | #include "GLFWInput.hpp" 11 | #include "Camera.hpp" 12 | #include "ConfigLoader.hpp" 13 | 14 | class ParticleSystem 15 | { 16 | private: 17 | Settings m_settings; 18 | GLFWWindow m_window; 19 | Camera m_camera; 20 | Attractor m_attractor; 21 | GLFWInput m_inputControl; 22 | ParticleBuffer m_particleBuffer; 23 | ParticleTexture m_particleTexture; 24 | GLuint m_vertexUVBufferID = 0; 25 | GLuint m_vertexArrayID = 0; 26 | bool m_showFPS = false; 27 | GLuint m_computeProgID = 0; 28 | GLuint m_shaderProgID = 0; 29 | 30 | ShaderManager m_shaderManager; 31 | 32 | struct ComputeShaderUniformLocations { 33 | GLuint dt = 0; 34 | GLuint attPos = 0; 35 | } m_csLocations; 36 | 37 | struct ParticleShaderUniformLocations { 38 | GLuint viewMatrix = 0; 39 | GLuint camPos = 0; 40 | GLuint time = 0; 41 | } m_psLocations; 42 | 43 | void render(double); 44 | void updateParticles(double); 45 | 46 | public: 47 | ParticleSystem() = delete; 48 | ParticleSystem(const std::string&); 49 | ParticleSystem(ParticleSystem&) = delete; 50 | ParticleSystem(ParticleSystem&&) = delete; 51 | ParticleSystem& operator=(ParticleSystem&) = delete; 52 | ParticleSystem& operator=(ParticleSystem&&) = delete; 53 | ~ParticleSystem(); 54 | 55 | void initialize(); 56 | void run(); 57 | }; -------------------------------------------------------------------------------- /src/ParticleTexture.cpp: -------------------------------------------------------------------------------- 1 | #include "ParticleTexture.hpp" 2 | 3 | #include 4 | 5 | #include "tga.h" 6 | 7 | ParticleTexture::~ParticleTexture() 8 | { 9 | deleteTexture(); 10 | } 11 | 12 | void ParticleTexture::loadTexture(const std::string& path) 13 | { 14 | tTGA tga; 15 | if (!load_TGA(&tga, path.c_str())) { 16 | throw std::runtime_error("ERROR: Could not load particle texture!"); 17 | } 18 | 19 | glGetError(); 20 | 21 | glGenTextures(1, &_textureID); 22 | glBindTexture(GL_TEXTURE_2D, _textureID); 23 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 24 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 25 | glTexImage2D( 26 | GL_TEXTURE_2D, 27 | 0, 28 | (tga.alpha) ? (GL_RGB) : (GL_RGB8), 29 | tga.width, 30 | tga.height, 31 | 0, 32 | (tga.alpha) ? (GL_RGBA) : (GL_RGB), 33 | GL_UNSIGNED_BYTE, 34 | tga.data 35 | ); 36 | 37 | if (glGetError() != GL_NO_ERROR) { 38 | glDeleteTextures(1, &_textureID); 39 | free_TGA(&tga); 40 | throw std::runtime_error("ERROR: Could not initialize particle texture!"); 41 | } 42 | } 43 | 44 | void ParticleTexture::useTexture(GLuint shaderProgramID) 45 | { 46 | glGetError(); 47 | 48 | glActiveTexture(GL_TEXTURE0); 49 | glBindTexture(GL_TEXTURE_2D, _textureID); 50 | 51 | auto uniLocation = glGetUniformLocation(shaderProgramID, "texture"); 52 | 53 | if (glGetError() != GL_NO_ERROR) { 54 | throw std::runtime_error("ERROR: Could not use particle texture!"); 55 | } 56 | glUniform1i(uniLocation, 0); 57 | } 58 | 59 | void ParticleTexture::deleteTexture() noexcept 60 | { 61 | if(_textureID != 0) glDeleteTextures(1, &_textureID); 62 | } -------------------------------------------------------------------------------- /src/ParticleTexture.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | class ParticleTexture 7 | { 8 | public: 9 | ParticleTexture() = default; 10 | ParticleTexture(ParticleTexture&) = delete; 11 | ParticleTexture(ParticleTexture&&) = delete; 12 | ParticleTexture& operator=(ParticleTexture&) = delete; 13 | ParticleTexture& operator=(ParticleTexture&&) = delete; 14 | ~ParticleTexture(); 15 | 16 | void loadTexture(const std::string& path); 17 | void useTexture(GLuint shaderProgramID); 18 | 19 | private: 20 | void deleteTexture() noexcept; 21 | 22 | GLuint _textureID = 0; 23 | }; -------------------------------------------------------------------------------- /src/ShaderBaseModel.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | class ShaderBaseModel 9 | { 10 | friend class ShaderManager; 11 | 12 | private: 13 | //May only be instantiated in ShaderManager 14 | ShaderBaseModel() {} 15 | 16 | public: 17 | /*Returns ShaderID with the associated Key. Returns 0 if Key does not exist. */ 18 | GLuint getShaderID(const std::string& shaderKey) 19 | { 20 | auto it = m_shader.find(shaderKey); 21 | 22 | if (it == m_shader.end()) { 23 | return 0; 24 | } else { 25 | return it->second; 26 | } 27 | } 28 | 29 | /*Returns ShaderID with the associated Key. Returns 0 if Key does not exist. */ 30 | GLuint getShaderProgramID(const std::string& shaderProgramKey) 31 | { 32 | auto it = m_shaderProgram.find(shaderProgramKey); 33 | 34 | if (it == m_shaderProgram.end()) { 35 | return 0; 36 | } else { 37 | return it->second; 38 | } 39 | } 40 | 41 | /*Returns false, if element with the same key already exists, otherwise returns true */ 42 | bool saveShader(const std::string& shaderKey,const GLuint ShaderID) 43 | { 44 | return m_shader.insert(std::make_pair(shaderKey, ShaderID)).second; 45 | } 46 | 47 | /*Returns false, if element with the same key already exists, otherwise returns true */ 48 | bool saveShaderProgram(const std::string& shaderProgramKey, const GLuint shaderProgramID) 49 | { 50 | return m_shaderProgram.insert(std::make_pair(shaderProgramKey, shaderProgramID)).second; 51 | } 52 | 53 | void deleteShader(const std::string& shaderKey) 54 | { 55 | m_shader.erase(shaderKey); 56 | } 57 | 58 | void deleteShaderProgram(const std::string& shaderProgramKey) 59 | { 60 | m_shaderProgram.erase(shaderProgramKey); 61 | } 62 | 63 | private: 64 | std::unordered_map m_shader; 65 | std::unordered_map m_shaderProgram; 66 | }; -------------------------------------------------------------------------------- /src/ShaderManager.cpp: -------------------------------------------------------------------------------- 1 | #include "ShaderManager.hpp" 2 | #include 3 | 4 | /////// Specialization of the uploadUniforms template method 5 | template<> 6 | void ShaderManager::uploadUniforms(GLuint uniID, GLfloat x, GLfloat y, GLfloat z, GLfloat w) 7 | { 8 | glUniform4f(uniID, x, y, z, w); 9 | } 10 | 11 | template<> 12 | void ShaderManager::uploadUniforms(GLuint uniID, GLfloat x, GLfloat y, GLfloat z) 13 | { 14 | glUniform3f(uniID, x, y, z); 15 | } 16 | 17 | template<> 18 | void ShaderManager::uploadUniforms(GLuint uniID, GLfloat x, GLfloat y) 19 | { 20 | glUniform2f(uniID, x, y); 21 | } 22 | 23 | template<> 24 | void ShaderManager::uploadUniforms(GLuint uniID, GLfloat x) 25 | { 26 | glUniform1f(uniID, x); 27 | } 28 | 29 | template<> 30 | void ShaderManager::uploadUniforms(GLuint uniID, GLint x) 31 | { 32 | glUniform1i(uniID, x); 33 | } 34 | 35 | template<> 36 | void ShaderManager::uploadUniforms(GLuint uniID, GLuint x) 37 | { 38 | glUniform1ui(uniID, x); 39 | } 40 | ////////////////////////////////////////////////////////////////////// 41 | 42 | ShaderManager::ShaderManager() 43 | { 44 | std::fill(_ubo_points.begin(), _ubo_points.end(), false); 45 | } 46 | 47 | std::string ShaderManager::getFileContents(const std::string& filename) const 48 | { 49 | std::ifstream in(filename, std::ios::in | std::ios::binary); 50 | if (in) { 51 | std::string contents; 52 | in.seekg(0, std::ios::end); 53 | int length = in.tellg(); 54 | if (length != -1) { 55 | contents.resize(static_cast(length)); 56 | in.seekg(0, std::ios::beg); 57 | in.read(&contents[0], contents.size()); 58 | in.close(); 59 | return contents; 60 | } 61 | throw std::runtime_error("Failed reading buffer position of file: " + filename + " !"); 62 | } 63 | throw std::runtime_error("Could not open file: " + filename + " !"); 64 | } 65 | 66 | void ShaderManager::compileShader(const std::string& shaderCode, const std::string& shaderKey, GLenum type) 67 | { 68 | glGetError(); 69 | 70 | GLuint shaderID = glCreateShader(type); 71 | const char* source = shaderCode.c_str(); 72 | 73 | if (shaderID != 0) { 74 | _shaderData.saveShader(shaderKey, shaderID); 75 | glShaderSource(shaderID, 1, &source, NULL); 76 | glCompileShader(shaderID); 77 | } 78 | 79 | GLint compileStatus; 80 | glGetShaderiv(shaderID, GL_COMPILE_STATUS, &compileStatus); 81 | 82 | if (glGetError() != GL_NO_ERROR || compileStatus == GL_FALSE) { 83 | 84 | if (shaderID != 0) _shaderData.deleteShader(shaderKey); 85 | 86 | GLsizei length; 87 | glGetShaderiv(shaderID, GL_INFO_LOG_LENGTH, &length); //Get the length of the compilation log 88 | auto compilationLog = new char[length]; //Create the needed char array to store the log 89 | glGetShaderInfoLog(shaderID, length, NULL, compilationLog); //Get the compilation log 90 | std::string compilationLogString(compilationLog); //Create string for the compilation log 91 | delete[] compilationLog; //Delete the compilation log array 92 | 93 | throw std::runtime_error("ERROR: \nCompilation log of shader " + shaderKey + ": \n" + compilationLogString); 94 | } 95 | } 96 | 97 | void ShaderManager::loadShader(const std::string& filename, const std::string& shaderKey, GLenum type) 98 | { 99 | auto shaderCode = getFileContents(filename); 100 | compileShader(shaderCode, shaderKey, type); 101 | } 102 | 103 | void ShaderManager::attachShader(const std::string& shaderKey, const std::string& shaderProgramKey) 104 | { 105 | glGetError(); 106 | 107 | GLuint shaderID = _shaderData.getShaderID(shaderKey); 108 | GLuint shaderProgramID = _shaderData.getShaderProgramID(shaderProgramKey); 109 | 110 | if (shaderProgramID != 0 && shaderID != 0) { 111 | glAttachShader(shaderProgramID, shaderID); 112 | } else { 113 | throw std::runtime_error("ERROR: No shader with associated key does exist!"); 114 | } 115 | 116 | if (glGetError() != GL_NO_ERROR) { 117 | throw std::runtime_error("ERROR: Could not attach shader " + shaderKey + " to " + shaderProgramKey); 118 | } 119 | } 120 | 121 | void ShaderManager::detachShader(const std::string& shaderKey, const std::string& shaderProgramKey) 122 | { 123 | glGetError(); 124 | 125 | GLuint shaderID = _shaderData.getShaderID(shaderKey); 126 | GLuint shaderProgramID = _shaderData.getShaderProgramID(shaderProgramKey); 127 | 128 | if (shaderProgramID != 0 && shaderID != 0) { 129 | glDetachShader(shaderProgramID, shaderID); 130 | } else { 131 | throw std::runtime_error("ERROR: No shader or shader-program with associated key does exist!"); 132 | } 133 | 134 | if (glGetError() != GL_NO_ERROR) { 135 | throw std::runtime_error("ERROR: Could not detach shader " + shaderKey + " from " + shaderProgramKey); 136 | } 137 | } 138 | 139 | void ShaderManager::resetProgram() 140 | { 141 | glUseProgram(0); 142 | } 143 | 144 | GLuint ShaderManager::createProgram(const std::string& shaderProgramKey) 145 | { 146 | glGetError(); 147 | 148 | GLuint shaderProgramID = glCreateProgram(); 149 | 150 | if (shaderProgramID != 0) _shaderData.saveShaderProgram(shaderProgramKey, shaderProgramID); 151 | 152 | if (glGetError() != GL_NO_ERROR) { 153 | if (shaderProgramID != 0) _shaderData.deleteShaderProgram(shaderProgramKey); 154 | throw std::runtime_error("ERROR: Could not create shader-program " + shaderProgramKey); 155 | } 156 | 157 | return shaderProgramID; 158 | } 159 | 160 | GLuint ShaderManager::createProgram() 161 | { 162 | glGetError(); 163 | GLuint shaderProgramID = glCreateProgram(); 164 | if (glGetError() != GL_NO_ERROR) { 165 | throw std::runtime_error("ERROR: Could not create shader-program"); 166 | } 167 | return shaderProgramID; 168 | } 169 | 170 | void ShaderManager::useProgram(const std::string& shaderProgramKey) 171 | { 172 | GLuint shaderProgramID = _shaderData.getShaderProgramID(shaderProgramKey); 173 | useProgram(shaderProgramID); 174 | } 175 | 176 | void ShaderManager::useProgram(GLuint shaderProgramID) 177 | { 178 | glGetError(); 179 | 180 | if (shaderProgramID != 0) { 181 | glUseProgram(shaderProgramID); 182 | } else { 183 | throw std::runtime_error("ERROR: No shader-program with ID less or equal than 0 exists!"); 184 | } 185 | 186 | if (glGetError() != GL_NO_ERROR) 187 | throw std::runtime_error("ERROR: Could not use shaderProgram with ID " + std::to_string(shaderProgramID) + "!\n"); 188 | } 189 | 190 | void ShaderManager::linkProgram(const std::string& shaderProgramKey) 191 | { 192 | GLuint shaderProgramID = _shaderData.getShaderProgramID(shaderProgramKey); 193 | linkProgram(shaderProgramID); 194 | } 195 | 196 | void ShaderManager::linkProgram(GLuint shaderProgramID) 197 | { 198 | glGetError(); 199 | 200 | if (shaderProgramID != 0) { 201 | glLinkProgram(shaderProgramID); 202 | } else { 203 | throw std::runtime_error("ERROR: Can't link shader program with invalid ID " + std::to_string(shaderProgramID) + "!"); 204 | } 205 | 206 | GLint linkStatus; 207 | glGetProgramiv(shaderProgramID, GL_LINK_STATUS, &linkStatus); 208 | 209 | if (glGetError() != GL_NO_ERROR || linkStatus == GL_FALSE) { 210 | GLsizei length; 211 | glGetProgramiv(shaderProgramID, GL_INFO_LOG_LENGTH, &length); //Get the length of the compilation log 212 | auto linkingLog = new char[length]; //Create the needed char array to store the log 213 | glGetProgramInfoLog(shaderProgramID, length, NULL, linkingLog); //Get the compilation log 214 | std::string linkingLogString(linkingLog); //Save the linking log in a string 215 | delete[] linkingLog; //Free the allocated memory 216 | 217 | throw std::runtime_error("ERROR: \nLinker log of shader-programm:\n" + linkingLogString); 218 | } 219 | } 220 | 221 | GLuint ShaderManager::getShaderID(const std::string& shaderKey) 222 | { 223 | return _shaderData.getShaderID(shaderKey); 224 | } 225 | 226 | GLuint ShaderManager::getShaderProgramID(const std::string& shaderProgramKey) 227 | { 228 | return _shaderData.getShaderProgramID(shaderProgramKey); 229 | } 230 | 231 | GLuint ShaderManager::occupyUBOBindingPoint() 232 | { 233 | for (unsigned int i = 0; i < GL_MAX_UNIFORM_BUFFER_BINDINGS; i++) { 234 | if (_ubo_points[i] == false) { 235 | _ubo_points[i] = true; 236 | return i; 237 | } 238 | } 239 | return GL_MAX_UNIFORM_BUFFER_BINDINGS + 1; 240 | } 241 | 242 | void ShaderManager::unoccupyUBOBindingPoint(GLuint slot) 243 | { 244 | if (slot < GL_MAX_UNIFORM_BUFFER_BINDINGS) { 245 | _ubo_points[slot] = false; 246 | } 247 | } 248 | 249 | void ShaderManager::deleteProgram(const std::string& shaderProgramKey) 250 | { 251 | auto shaderProgramID = _shaderData.getShaderProgramID(shaderProgramKey); 252 | 253 | if (shaderProgramID == 0) { 254 | return; 255 | } 256 | 257 | try { 258 | deleteProgram(shaderProgramID); 259 | } catch (std::exception& e) { 260 | throw std::runtime_error("Delete shader-program: \"" + shaderProgramKey + "\"\t " + e.what()); 261 | return; 262 | } 263 | _shaderData.deleteShaderProgram(shaderProgramKey); 264 | } 265 | 266 | void ShaderManager::deleteProgram(GLuint shaderProgramID) 267 | { 268 | glGetError(); 269 | 270 | if (shaderProgramID != 0) { 271 | glDeleteProgram(shaderProgramID); 272 | } 273 | 274 | auto err = glGetError(); 275 | if (err != GL_NO_ERROR) { 276 | throw std::runtime_error("ID: " + std::to_string(shaderProgramID) + " ErrCode: " + errVal(err)); 277 | } 278 | } 279 | 280 | void ShaderManager::deleteShader(const std::string& shaderKey) 281 | { 282 | auto shaderID = _shaderData.getShaderID(shaderKey); 283 | deleteShader(shaderID); 284 | _shaderData.deleteShader(shaderKey); 285 | } 286 | 287 | void ShaderManager::deleteShader(GLuint shaderID) 288 | { 289 | glGetError(); 290 | if (shaderID != 0) { 291 | glDeleteShader(shaderID); 292 | } 293 | 294 | if (glGetError() != GL_NO_ERROR) { 295 | throw std::runtime_error("ERROR: Could not delete shader with ID \"" + std::to_string(shaderID)); 296 | } 297 | } 298 | 299 | void ShaderManager::loadMatrix4(const std::string& shaderProgram, const std::string& name, const GLfloat* value) 300 | { 301 | loadMatrix4(getShaderProgramID(shaderProgram), name, value); 302 | } 303 | 304 | void ShaderManager::loadMatrix4(GLuint shaderProgramID, const std::string& name, const GLfloat* value) 305 | { 306 | glGetError(); 307 | 308 | auto _uniID = glGetUniformLocation(shaderProgramID, name.c_str()); 309 | 310 | if (glGetError() != GL_NO_ERROR) { 311 | throw std::runtime_error("ERROR: Could not get " + name + "-uniform-location!"); 312 | } 313 | 314 | loadMatrix4(_uniID, value); 315 | } 316 | 317 | void ShaderManager::loadMatrix4(GLint location, const GLfloat* value) 318 | { 319 | if (location == -1) { 320 | throw std::runtime_error("ERROR: -1 is not a valid uniform location!"); 321 | return; 322 | } 323 | 324 | glGetError(); 325 | 326 | glUniformMatrix4fv(location, 1, GL_FALSE, value); 327 | 328 | if (glGetError() != GL_NO_ERROR) { 329 | throw std::runtime_error("ERROR: Could not update uniform with location " + std::to_string(location) + " !"); 330 | } 331 | } 332 | 333 | void ShaderManager::getBufferVariableIndices(const std::string& shaderProgram, int length, const GLchar** names, GLint* indices) 334 | { 335 | for (int i = 0; i < length; ++i) { 336 | indices[i] = glGetProgramResourceIndex(getShaderProgramID(shaderProgram), GL_BUFFER_VARIABLE, names[i]); 337 | } 338 | } 339 | 340 | GLint ShaderManager::getUniformLocation(GLuint shaderProgramID, const std::string& name) 341 | { 342 | return glGetUniformLocation(shaderProgramID, name.c_str()); 343 | } 344 | 345 | GLint ShaderManager::getUniformLocation(const std::string& shaderProgram, const std::string& name) 346 | { 347 | return getUniformLocation(getShaderProgramID(shaderProgram), name); 348 | } 349 | 350 | const std::string ShaderManager::errVal(GLenum error) 351 | { 352 | if (error == GL_NO_ERROR) { 353 | return "GL_NO_ERROR"; 354 | } else if (error == GL_INVALID_ENUM) { 355 | return "GL_INVALID_ENUM"; 356 | } else if (error == GL_INVALID_VALUE) { 357 | return "GL_INVALID_VALUE"; 358 | } else if (error == GL_INVALID_OPERATION) { 359 | return "GL_INVALID_OPERATION"; 360 | } else if (error == GL_INVALID_FRAMEBUFFER_OPERATION) { 361 | return "GL_INVALID_FRAMEBUFFER_OPERATION"; 362 | } else if (error == GL_OUT_OF_MEMORY) { 363 | return "GL_OUT_OF_MEMORY"; 364 | } else if (error == GL_STACK_OVERFLOW) { 365 | return "GL_STACK_OVERFLOW"; 366 | } else if (error == GL_STACK_UNDERFLOW) { 367 | return "GL_STACK_UNDERFLOW"; 368 | } 369 | 370 | return "UNKNOWN"; 371 | } -------------------------------------------------------------------------------- /src/ShaderManager.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include "GL/gl3w.h" 8 | #include 9 | 10 | #include "ShaderBaseModel.hpp" 11 | 12 | template 13 | struct are_same : std::true_type {}; 14 | 15 | template 16 | struct are_same : 17 | std::integral_constant < bool, std::is_same::value && are_same::value > 18 | {}; 19 | 20 | /* A rather lengthy management class for opengl shader, which is copy pasted from other personal projects. 21 | * Note that not all the functionalities of this class are used in this project. 22 | */ 23 | class ShaderManager 24 | { 25 | public: 26 | ShaderManager(); 27 | ShaderManager(ShaderManager&) = delete; 28 | ShaderManager(ShaderManager&&) = delete; 29 | ShaderManager& operator=(ShaderManager&) = delete; 30 | ShaderManager& operator=(ShaderManager&&) = delete; 31 | 32 | void compileShader(const std::string& shaderCode, const std::string& shaderKey, GLenum type); 33 | void loadShader(const std::string& filename, const std::string& shaderKey, GLenum type); 34 | void attachShader(const std::string& shaderKey, const std::string& shaderProgramKey); 35 | void detachShader(const std::string& shaderKey, const std::string& shaderProgramKey); 36 | 37 | GLuint createProgram(const std::string& shaderProgramKey); 38 | GLuint createProgram(); 39 | 40 | void useProgram(const std::string& shaderProgramKey); 41 | void useProgram(GLuint shaderProgramID); 42 | 43 | void linkProgram(const std::string& shaderProgramKey); 44 | void linkProgram(GLuint shaderProgramID); 45 | 46 | GLuint getShaderID(const std::string& shaderKey); 47 | GLuint getShaderProgramID(const std::string& shaderProgramKey); 48 | 49 | GLuint occupyUBOBindingPoint(); 50 | void unoccupyUBOBindingPoint(GLuint point); 51 | 52 | void deleteProgram(const std::string& shaderProgramKey); 53 | void deleteProgram(GLuint shaderProgramID); 54 | 55 | void deleteShader(const std::string& shaderKey); 56 | void deleteShader(GLuint shaderID); 57 | 58 | void resetProgram(); 59 | 60 | void loadMatrix4(const std::string& shaderProgram, const std::string& name, const GLfloat* value); 61 | void loadMatrix4(GLuint shaderProgramID, const std::string& name, const GLfloat* value); 62 | void loadMatrix4(GLint location, const GLfloat* value); 63 | 64 | void getBufferVariableIndices(const std::string& shaderProgram, int length, const GLchar** names, GLint* indices); 65 | 66 | GLint getUniformLocation(GLuint shaderProgramID, const std::string& name); 67 | GLint getUniformLocation(const std::string& shaderProgramID, const std::string& name); 68 | 69 | template 70 | void loadUniform(GLint location, Args... args) 71 | { 72 | checkForHomogenousTypes(); 73 | 74 | if (location == -1) { 75 | std::cerr << "ERROR: -1 is not a valid uniform location!\n"; 76 | return; 77 | } 78 | 79 | glGetError(); 80 | 81 | uploadUniforms(location, args...); 82 | 83 | if (glGetError() != GL_NO_ERROR) { 84 | std::cerr << "ERROR: Could not update uniform with location" << location << " !\n"; 85 | return; 86 | } 87 | } 88 | 89 | template 90 | void loadUniform_(GLuint shaderProgramID, const std::string& name, Args... args) 91 | { 92 | checkForHomogenousTypes(); 93 | 94 | glGetError(); 95 | 96 | auto uniID = glGetUniformLocation(shaderProgramID, name.c_str()); 97 | 98 | if (glGetError() != GL_NO_ERROR || uniID == -1) { 99 | std::cerr << "ERROR: Could not get " + name + "-uniform-location!\n"; 100 | return; 101 | } 102 | 103 | uploadUniforms(uniID, args...); 104 | 105 | if (glGetError() != GL_NO_ERROR) { 106 | std::cerr << "ERROR: Could not update " + name + "-uniform-location!\n"; 107 | return; 108 | } 109 | } 110 | 111 | template 112 | void loadUniform_(const std::string& shaderProgram, const std::string& name, Args... args) 113 | { 114 | checkForHomogenousTypes(); 115 | 116 | loadUniform_(getShaderProgramID(shaderProgram), name.c_str(), args...); 117 | } 118 | 119 | private: 120 | ShaderBaseModel _shaderData; 121 | std::array _ubo_points; 122 | 123 | std::string getFileContents(const std::string&) const; 124 | 125 | template 126 | void checkForHomogenousTypes() 127 | { 128 | static_assert(are_same::value, "The arguments in the uniform loading method are not of the same type!"); 129 | } 130 | 131 | template 132 | void uploadUniforms(GLuint uniID, Args... args); 133 | 134 | const std::string errVal(GLenum error); 135 | }; -------------------------------------------------------------------------------- /src/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "ParticleSystem.hpp" 4 | 5 | int main() 6 | { 7 | try{ 8 | ParticleSystem ps("settings.txt"); 9 | 10 | std::cout << "Initializing Particle System" < 148 | #include 149 | #include 150 | #include "tga.h" 151 | 152 | #define then 153 | #ifndef TRUE 154 | #define TRUE (1) 155 | #define FALSE (0) 156 | #endif 157 | 158 | /*--------------------------------------------------------------------------+/ 159 | load_TGA 160 | /+--------------------------------------------------------------------------*/ 161 | int load_TGA( tTGA *tga, const char *filename ) { 162 | 163 | #define SIZEOF_TGA_HEADER 18 164 | 165 | unsigned char buffer[ 256 ]; 166 | 167 | int size_of_image_id; 168 | int is_colormap; 169 | int targa_type; 170 | int colormap_origin; 171 | unsigned int colormap_length; 172 | int colormap_entry_size; 173 | int image_pixel_size; 174 | int image_descriptor; 175 | int is_inverted; 176 | 177 | int image_width; 178 | int image_height; 179 | 180 | unsigned char *colormap; 181 | FILE *f; 182 | unsigned char *data; 183 | int x, y, i, j; 184 | int raster_width; 185 | 186 | if ((f = fopen( filename, "rb" )) == NULL) then return FALSE; 187 | 188 | /* header info */ 189 | if (fread( buffer, 1, SIZEOF_TGA_HEADER, f ) != SIZEOF_TGA_HEADER) then return FALSE; 190 | 191 | size_of_image_id = buffer[ 0 ]; 192 | is_colormap = buffer[ 1 ]; 193 | targa_type = buffer[ 2 ]; 194 | 195 | colormap_origin = buffer[ 3 ] +((int)(buffer[ 4 ]) << 8); 196 | colormap_length = buffer[ 5 ] +((int)(buffer[ 6 ]) << 8); 197 | colormap_entry_size = buffer[ 7 ]; 198 | 199 | image_width = buffer[ 12 ] +((unsigned)(buffer[ 13 ]) << 8); 200 | image_height = buffer[ 14 ] +((unsigned)(buffer[ 15 ]) << 8); 201 | image_pixel_size = buffer[ 16 ]; 202 | image_descriptor = buffer[ 17 ]; 203 | 204 | /* valid type? */ 205 | if ((targa_type != 1) && (targa_type != 2)) then return FALSE; 206 | 207 | /* colormap required but missing? */ 208 | if ((targa_type == 1) && !is_colormap) then return FALSE; 209 | 210 | /* cannot load direct-color images */ 211 | if ((targa_type == 2) && is_colormap) then return FALSE; 212 | 213 | /* image id */ 214 | if (size_of_image_id) then 215 | if ((int)fread( buffer, 1, size_of_image_id, f ) != size_of_image_id) then return FALSE; 216 | 217 | is_inverted = (image_descriptor & 0x10) != 0; 218 | 219 | /* cannot handle interlacing */ 220 | if ((image_descriptor & 0xC0)) then return FALSE; 221 | 222 | /* assume that targa 32 contains alpha (image_descriptor bits 0..3) */ 223 | 224 | /* load colormap, if any */ 225 | if (is_colormap) 226 | then { 227 | /* must be targa 24 or targa 32 */ 228 | if ((colormap_entry_size != 24) && (colormap_entry_size != 32)) then return FALSE; 229 | 230 | /* convert to number of bytes/color entry */ 231 | colormap_entry_size >>= 3; 232 | 233 | colormap = malloc( colormap_length *colormap_entry_size ); 234 | if (colormap == NULL) then return FALSE; 235 | 236 | if (fread( colormap, colormap_entry_size, colormap_length, f ) != colormap_length) 237 | then { 238 | lerror: 239 | free( colormap ); 240 | return FALSE; 241 | } 242 | 243 | /* initializations */ 244 | image_pixel_size = (image_pixel_size +7) >> 3; 245 | raster_width = image_width *colormap_entry_size; 246 | } 247 | else { 248 | /* must be targa 24 or targa 32 */ 249 | if ((image_pixel_size != 24) && (image_pixel_size != 32)) then return FALSE; 250 | image_pixel_size >>= 3; 251 | raster_width = image_width *image_pixel_size; 252 | } 253 | 254 | data = malloc( raster_width *image_height ); 255 | if (data == NULL) then goto lerror; 256 | 257 | /* load image data */ 258 | for (y = (is_inverted ? (image_height -1) : 0); 259 | (is_inverted ? (y >= 0) : (y < (int)image_height)); 260 | (is_inverted ? (--y) : (++y))) 261 | for (x = 0; x < image_width; x++) { 262 | 263 | /* get the next pixel */ 264 | if ((int)fread( buffer, 1, image_pixel_size, f ) != image_pixel_size) then goto lerror; 265 | 266 | /* store it */ 267 | if (is_colormap) 268 | then { 269 | /* colormapped */ 270 | i = ((buffer[ 0 ] +((unsigned)(buffer[ 1 ]) << 8)) -colormap_origin) 271 | *colormap_entry_size; 272 | j = (y *raster_width) +(x *colormap_entry_size); 273 | 274 | data[ j ] = colormap[ i +2 ]; 275 | data[ j +1 ] = colormap[ i +1 ]; 276 | data[ j +2 ] = colormap[ i ]; 277 | 278 | if (colormap_entry_size > 3) then data[ j +3 ] = colormap[ i + 3 ]; 279 | } 280 | else { 281 | /* non-colormapped */ 282 | j = (y *raster_width) +(x *image_pixel_size); 283 | 284 | data[ j ] = buffer[ 2 ]; 285 | data[ j +1 ] = buffer[ 1 ]; 286 | data[ j +2 ] = buffer[ 0 ]; 287 | 288 | if (image_pixel_size > 3) then data[ j +3 ] = buffer[ 3 ]; 289 | } 290 | } 291 | 292 | /* free the colormap if we had loaded it */ 293 | if (is_colormap) then free( colormap ); 294 | 295 | /* store the result */ 296 | tga->width = image_width; 297 | tga->height = image_height; 298 | tga->data = data; 299 | tga->alpha = (is_colormap ? (colormap_entry_size > 3) : (image_pixel_size > 3)); 300 | 301 | #undef SIZEOF_TGA_HEADER 302 | 303 | return TRUE; 304 | } 305 | 306 | /*--------------------------------------------------------------------------+/ 307 | free_TGA 308 | /+--------------------------------------------------------------------------*/ 309 | void free_TGA( tTGA *tga ) { 310 | 311 | if (tga->data) then free( tga->data ); 312 | 313 | tga->data = NULL; 314 | tga->height = 315 | tga->width = 0; 316 | tga->alpha = 0; 317 | } 318 | 319 | /* end tga.c */ -------------------------------------------------------------------------------- /src/tga.h: -------------------------------------------------------------------------------- 1 | /* tga.h 2 | 3 | Load uncompressed Targa 24 or Targa 32 images. 4 | 5 | Copyright 2004, 2011 Michael Thomas Greer 6 | Distributed under the Boost Software License, Version 1.0. 7 | (See http://www.boost.org/LICENSE_1_0.txt ) 8 | 9 | NOTE This module is only capable of the most basic image handling. If your 10 | TGA does not load when using this module, go back to your image editor and 11 | make sure that the following are true: 12 | No compression 13 | No colormap data is stored in an RGB(A) file (the TGA must be either 14 | colormapped or not). 15 | The x axis is not flipped. (TGA Screen Origin is at left edge of image.) 16 | No interlacing. 17 | This algorithm simply assumes that Targa 32 means that the TGA includes 18 | an alpha channel. If you don't want alpha information, use Targa 24. 19 | 20 | ---------------------------------------------------------------------------- 21 | tTGA 22 | ---------------------------------------------------------------------------- 23 | type 24 | Contains the image data. 25 | 26 | members 27 | long width The width of the image in pixels. 28 | long height The height of the image in pixels. 29 | unsigned char *data The image data. 30 | bool alpha Does the image data include an alpha channel? 31 | 32 | The data is always stored as 33 | array[ 0..height-1 ] of 34 | array[ 0..width -1 ] of pixel 35 | 36 | If alpha is true, then pixel is defined as 37 | record 38 | red, 39 | green, 40 | blue, 41 | alpha: byte 42 | end 43 | 44 | If alpha is false, then pixel is defined as 45 | record 46 | red, 47 | green, 48 | blue: byte 49 | end 50 | 51 | The pixel at data[ 0 ][ 0 ] is the bottom-left corner of the image, and 52 | data[ height-1 ][ width -1 ] is the pixel in the upper-right corner of 53 | the image. 54 | 55 | ---------------------------------------------------------------------------- 56 | load_TGA 57 | ---------------------------------------------------------------------------- 58 | function 59 | Load a TGA file. Cannot load compressed TGAs. 60 | 61 | It will only load Targa 24 and Targa 32 images. The image may be a 62 | colormapped TGA. 63 | 64 | arguments 65 | tTGA * Where to store the image data. 66 | const char * The filename to load from. 67 | 68 | returns 69 | TRUE or FALSE for success or failure. 70 | 71 | 72 | ---------------------------------------------------------------------------- 73 | free_TGA 74 | ---------------------------------------------------------------------------- 75 | function 76 | Free memory used by a tTGA and clear the structure to 0/NULL. 77 | 78 | ---------------------------------------------------------------------------- 79 | load_texture_TGA 80 | ---------------------------------------------------------------------------- 81 | function 82 | Load a texture from a TGA file and mipmap it. 83 | 84 | arguments 85 | filename The file to load. 86 | width Returns the width of the image in pixels. May be NULL. 87 | height Returns the height of the image in pixels. May be NULL. 88 | wrap_s Must be either GL_REPEAT or GL_CLAMP. 89 | wrap_t Must be either GL_REPEAT or GL_CLAMP. 90 | 91 | returns 92 | The texture object ID, or zero on failure. 93 | 94 | */ 95 | 96 | #ifndef TGA_H 97 | #define TGA_H 98 | 99 | #ifdef __cplusplus 100 | extern "C" { 101 | #endif 102 | 103 | typedef struct { 104 | long width; 105 | long height; 106 | unsigned char *data; 107 | int alpha; 108 | } tTGA; 109 | 110 | int load_TGA( tTGA *tga, const char *filename ); 111 | void free_TGA( tTGA *tga ); 112 | 113 | #ifdef __cplusplus 114 | } 115 | #endif 116 | 117 | #endif 118 | 119 | /* end tga.h */ 120 | -------------------------------------------------------------------------------- /texture/Particle.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StanEpp/OpenGL_ParticleSystem/5007518dcfb46bbe924582d8c4515413009f3ab2/texture/Particle.tga --------------------------------------------------------------------------------