├── .clang-format ├── .gitignore ├── 3rdparty └── gl3w │ ├── include │ └── GL │ │ ├── gl3w.h │ │ ├── glcorearb.h │ │ └── glext.h │ └── src │ └── gl3w.c ├── CMakeLists.txt ├── LICENCE ├── Readme.md ├── cmake └── FindGLFW.cmake ├── example.cpp ├── example_gl.cpp └── tinyddsloader.h /.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | BasedOnStyle: Google 3 | AccessModifierOffset: -4 4 | IndentWidth: 4 5 | TabWidth: 4 6 | DerivePointerAlignment: false 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /.vscode/ipch/56b18ea1281d400f 3 | -------------------------------------------------------------------------------- /3rdparty/gl3w/include/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 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.2) 2 | 3 | project(tinyddsloader) 4 | 5 | set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") 6 | 7 | find_package(OpenGL REQUIRED) 8 | find_package(GLFW REQUIRED) 9 | include_directories(${GLFW_INCLUDE_DIR}) 10 | include_directories(3rdparty/gl3w/include) 11 | 12 | add_executable(example example.cpp) 13 | 14 | add_executable(example_gl tinyddsloader.h example_gl.cpp 3rdparty/gl3w/src/gl3w.c) 15 | target_link_libraries(example_gl 16 | ${OPENGL_LIBRARY} 17 | ${GLFW_LIBRARIES} 18 | ) 19 | -------------------------------------------------------------------------------- /LICENCE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 benikabocha 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 13 | all 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 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # Tiny DDS File Loader 2 | 3 | Simpl DDS file loader. 4 | 5 | ## See also 6 | 7 | https://github.com/Microsoft/DirectXTex 8 | -------------------------------------------------------------------------------- /cmake/FindGLFW.cmake: -------------------------------------------------------------------------------- 1 | # GLFW_FOUND 2 | # GLFW_INCLUDE_DIR 3 | # GLFW_LIBRARIES 4 | # 5 | 6 | find_path (GLFW_INCLUDE_DIR 7 | NAMES 8 | GLFW/glfw3.h 9 | PATHS 10 | "${GLFW_ROOT}/include" 11 | /usr/X11R6/include 12 | /usr/include/X11 13 | /opt/graphics/OpenGL/include 14 | /opt/graphics/OpenGL/contrib/libglfw 15 | /usr/local/include 16 | /usr/include/GL 17 | /usr/include 18 | DOC 19 | "The directory where GL/glfw.h resides" 20 | ) 21 | 22 | if (WIN32) 23 | if (MSVC11 OR (${MSVC_VERSION} EQUAL 1700)) 24 | find_library (GLFW_LIBRARIES 25 | NAMES 26 | glfw3 27 | PATHS 28 | "${GLFW_ROOT}/lib" 29 | "${GLFW_ROOT}/lib-vc2012" 30 | DOCS 31 | "The GLFW library" 32 | ) 33 | elseif (MSVC12 OR (${MSVC_VERSION} EQUAL 1800)) 34 | find_library (GLFW_LIBRARIES 35 | NAMES 36 | glfw3 37 | PATHS 38 | "${GLFW_ROOT}/lib" 39 | "${GLFW_ROOT}/lib-vc2013" 40 | DOCS 41 | "The GLFW library" 42 | ) 43 | elseif (MSVC14 OR (${MSVC_VERSION} EQUAL 1900)) 44 | find_library (GLFW_LIBRARIES 45 | NAMES 46 | glfw3 47 | PATHS 48 | "${GLFW_ROOT}/lib" 49 | "${GLFW_ROOT}/lib-vc2015" 50 | DOCS 51 | "The GLFW library" 52 | ) 53 | elseif (MINGW) 54 | if (CMAKE_CL_64) 55 | find_library (GLFW_LIBRARIES 56 | NAMES 57 | glfw3 58 | PATHS 59 | "${GLFW_ROOT}/lib" 60 | "${GLFW_ROOT}/lib-mingw-w64" 61 | DOCS 62 | "The GLFW library" 63 | ) 64 | else () 65 | find_library (GLFW_LIBRARIES 66 | NAMES 67 | glfw3 68 | PATHS 69 | "${GLFW_ROOT}/lib" 70 | "${GLFW_ROOT}/lib-mingw" 71 | DOCS 72 | "The GLFW library" 73 | ) 74 | endif () 75 | else() 76 | find_library (GLFW_LIBRARIES 77 | NAMES 78 | glfw3 79 | PATHS 80 | "${GLFW_ROOT}/lib" 81 | DOCS 82 | "The GLFW library" 83 | ) 84 | endif() 85 | else () 86 | find_library (GLFW_LIBRARIES 87 | NAMES 88 | glfw 89 | glfw3 90 | PATHS 91 | "${GLFW_ROOT}/lib" 92 | "${GLFW_ROOT}/lib/x11" 93 | /usr/lib64 94 | /usr/lib 95 | /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE} 96 | /usr/local/lib64 97 | /usr/local/lib 98 | /usr/local/lib/${CMAKE_LIBRARY_ARCHITECTURE} 99 | /usr/X11R6/lib 100 | DOCS 101 | "The GLFW library" 102 | ) 103 | if (APPLE) 104 | list (APPEND GLFW_LIBRARIES 105 | "-framework Cocoa" 106 | "-framework CoreVideo" 107 | "-framework IOKit" 108 | ) 109 | else () 110 | find_package(Threads REQUIRED) 111 | 112 | find_package(X11 REQUIRED) 113 | 114 | # Set up library and include paths 115 | list(APPEND GLFW_INCLUDE_DIR "${X11_X11_INCLUDE_PATH}") 116 | list(APPEND GLFW_LIBRARIES "${X11_X11_LIB}" "${CMAKE_THREAD_LIBS_INIT}" "${CMAKE_DL_LIBS}") 117 | 118 | # Check for XRandR (modern resolution switching and gamma control) 119 | if (NOT X11_Xrandr_FOUND) 120 | message(FATAL_ERROR "The RandR library and headers were not found") 121 | endif() 122 | 123 | list(APPEND GLFW_INCLUDE_DIR "${X11_Xrandr_INCLUDE_PATH}") 124 | list(APPEND GLFW_LIBRARIES "${X11_Xrandr_LIB}") 125 | 126 | # Check for Xinerama (legacy multi-monitor support) 127 | if (NOT X11_Xinerama_FOUND) 128 | message(FATAL_ERROR "The Xinerama library and headers were not found") 129 | endif() 130 | 131 | list(APPEND GLFW_INCLUDE_DIR "${X11_Xinerama_INCLUDE_PATH}") 132 | list(APPEND GLFW_LIBRARIES "${X11_Xinerama_LIB}") 133 | 134 | # Check for Xkb (X keyboard extension) 135 | if (NOT X11_Xkb_FOUND) 136 | message(FATAL_ERROR "The X keyboard extension headers were not found") 137 | endif() 138 | 139 | list(APPEND GLFW_INCLUDE_DIR "${X11_Xkb_INCLUDE_PATH}") 140 | 141 | # Check for Xcursor 142 | if (NOT X11_Xcursor_FOUND) 143 | message(FATAL_ERROR "The Xcursor libraries and headers were not found") 144 | endif() 145 | 146 | list(APPEND GLFW_INCLUDE_DIR "${X11_Xcursor_INCLUDE_PATH}") 147 | list(APPEND GLFW_LIBRARIES "${X11_Xcursor_LIB}") 148 | 149 | # Check for Xrandr 150 | if(NOT X11_Xrandr_FOUND) 151 | message(FATAL_ERROR "Xrandr library not found - required for GLFW") 152 | endif() 153 | 154 | list(APPEND GLFW_LIBRARIES "${X11_Xrandr_LIB}") 155 | 156 | # Check for xf86vmode 157 | if(NOT X11_xf86vmode_FOUND) 158 | message(FATAL_ERROR "xf86vmode library not found - required for GLFW") 159 | endif() 160 | 161 | list(APPEND GLFW_LIBRARIES "${X11_Xxf86vm_LIB}") 162 | 163 | endif () 164 | endif() 165 | 166 | include(FindPackageHandleStandardArgs) 167 | find_package_handle_standard_args(GLFW DEFAULT_MSG GLFW_LIBRARIES GLFW_INCLUDE_DIR) 168 | 169 | mark_as_advanced(GLFW_INCLUDE_DIR GLFW_LIBRARIES) 170 | -------------------------------------------------------------------------------- /example.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #define TINYDDSLOADER_IMPLEMENTATION 4 | #include "tinyddsloader.h" 5 | 6 | using namespace tinyddsloader; 7 | 8 | int main(int argc, char** argv) { 9 | if (argc < 2) { 10 | std::cout << "example \n"; 11 | return 1; 12 | } 13 | 14 | DDSFile dds; 15 | auto ret = dds.Load(argv[1]); 16 | if (tinyddsloader::Result::Success != ret) { 17 | std::cout << "Failed to load.[" << argv[1] << "]\n"; 18 | std::cout << "Result : " << int(ret) << "\n"; 19 | return 1; 20 | } 21 | 22 | std::cout << "Width: " << dds.GetWidth() << "\n"; 23 | std::cout << "Height: " << dds.GetHeight() << "\n"; 24 | std::cout << "Depth: " << dds.GetDepth() << "\n"; 25 | 26 | std::cout << "Mip: " << dds.GetMipCount() << "\n"; 27 | std::cout << "Array: " << dds.GetArraySize() << "\n"; 28 | for (uint32_t arrayIdx = 0; arrayIdx < dds.GetArraySize(); arrayIdx++) { 29 | for (uint32_t mipIdx = 0; mipIdx < dds.GetMipCount(); mipIdx++) { 30 | const auto* imageData = dds.GetImageData(mipIdx, arrayIdx); 31 | std::cout << "Array[" << arrayIdx << "] " 32 | << "Mip[" << mipIdx << "]: " 33 | << "(" << imageData->m_width << ", " 34 | << imageData->m_height << ", " << imageData->m_depth 35 | << ")\n"; 36 | } 37 | } 38 | std::cout << "Cubemap: " << dds.IsCubemap() << "\n"; 39 | 40 | std::cout << "Dimension: "; 41 | switch (dds.GetTextureDimension()) { 42 | case DDSFile::TextureDimension::Texture1D: 43 | std::cout << "Texture1D"; 44 | break; 45 | case DDSFile::TextureDimension::Texture2D: 46 | std::cout << "Texture2D"; 47 | break; 48 | case DDSFile::TextureDimension::Texture3D: 49 | std::cout << "Texture3D"; 50 | break; 51 | default: 52 | std::cout << "Unknown"; 53 | break; 54 | } 55 | std::cout << "\n"; 56 | 57 | std::cout << "Format: "; 58 | switch (dds.GetFormat()) { 59 | case DDSFile::DXGIFormat::R32G32B32A32_Typeless: 60 | std::cout << "R32G32B32A32_Typeless"; 61 | break; 62 | case DDSFile::DXGIFormat::R32G32B32A32_Float: 63 | std::cout << "R32G32B32A32_Float"; 64 | break; 65 | case DDSFile::DXGIFormat::R32G32B32A32_UInt: 66 | std::cout << "R32G32B32A32_UInt"; 67 | break; 68 | case DDSFile::DXGIFormat::R32G32B32A32_SInt: 69 | std::cout << "R32G32B32A32_SInt"; 70 | break; 71 | case DDSFile::DXGIFormat::R32G32B32_Typeless: 72 | std::cout << "R32G32B32_Typeless"; 73 | break; 74 | case DDSFile::DXGIFormat::R32G32B32_Float: 75 | std::cout << "R32G32B32_Float"; 76 | break; 77 | case DDSFile::DXGIFormat::R32G32B32_UInt: 78 | std::cout << "R32G32B32_UInt"; 79 | break; 80 | case DDSFile::DXGIFormat::R32G32B32_SInt: 81 | std::cout << "R32G32B32_SInt"; 82 | break; 83 | case DDSFile::DXGIFormat::R16G16B16A16_Typeless: 84 | std::cout << "R16G16B16A16_Typeless"; 85 | break; 86 | case DDSFile::DXGIFormat::R16G16B16A16_Float: 87 | std::cout << "R16G16B16A16_Float"; 88 | break; 89 | case DDSFile::DXGIFormat::R16G16B16A16_UNorm: 90 | std::cout << "R16G16B16A16_UNorm"; 91 | break; 92 | case DDSFile::DXGIFormat::R16G16B16A16_UInt: 93 | std::cout << "R16G16B16A16_UInt"; 94 | break; 95 | case DDSFile::DXGIFormat::R16G16B16A16_SNorm: 96 | std::cout << "R16G16B16A16_SNorm"; 97 | break; 98 | case DDSFile::DXGIFormat::R16G16B16A16_SInt: 99 | std::cout << "R16G16B16A16_SInt"; 100 | break; 101 | case DDSFile::DXGIFormat::R32G32_Typeless: 102 | std::cout << "R32G32_Typeless"; 103 | break; 104 | case DDSFile::DXGIFormat::R32G32_Float: 105 | std::cout << "R32G32_Float"; 106 | break; 107 | case DDSFile::DXGIFormat::R32G32_UInt: 108 | std::cout << "R32G32_UInt"; 109 | break; 110 | case DDSFile::DXGIFormat::R32G32_SInt: 111 | std::cout << "R32G32_SInt"; 112 | break; 113 | case DDSFile::DXGIFormat::R32G8X24_Typeless: 114 | std::cout << "R32G8X24_Typeless"; 115 | break; 116 | case DDSFile::DXGIFormat::D32_Float_S8X24_UInt: 117 | std::cout << "D32_Float_S8X24_UInt"; 118 | break; 119 | case DDSFile::DXGIFormat::R32_Float_X8X24_Typeless: 120 | std::cout << "R32_Float_X8X24_Typeless"; 121 | break; 122 | case DDSFile::DXGIFormat::X32_Typeless_G8X24_UInt: 123 | std::cout << "X32_Typeless_G8X24_UInt"; 124 | break; 125 | case DDSFile::DXGIFormat::R10G10B10A2_Typeless: 126 | std::cout << "R10G10B10A2_Typeless"; 127 | break; 128 | case DDSFile::DXGIFormat::R10G10B10A2_UNorm: 129 | std::cout << "R10G10B10A2_UNorm"; 130 | break; 131 | case DDSFile::DXGIFormat::R10G10B10A2_UInt: 132 | std::cout << "R10G10B10A2_UInt"; 133 | break; 134 | case DDSFile::DXGIFormat::R11G11B10_Float: 135 | std::cout << "R11G11B10_Float"; 136 | break; 137 | case DDSFile::DXGIFormat::R8G8B8A8_Typeless: 138 | std::cout << "R8G8B8A8_Typeless"; 139 | break; 140 | case DDSFile::DXGIFormat::R8G8B8A8_UNorm: 141 | std::cout << "R8G8B8A8_UNorm"; 142 | break; 143 | case DDSFile::DXGIFormat::R8G8B8A8_UNorm_SRGB: 144 | std::cout << "R8G8B8A8_UNorm_SRGB"; 145 | break; 146 | case DDSFile::DXGIFormat::R8G8B8A8_UInt: 147 | std::cout << "R8G8B8A8_UInt"; 148 | break; 149 | case DDSFile::DXGIFormat::R8G8B8A8_SNorm: 150 | std::cout << "R8G8B8A8_SNorm"; 151 | break; 152 | case DDSFile::DXGIFormat::R8G8B8A8_SInt: 153 | std::cout << "R8G8B8A8_SInt"; 154 | break; 155 | case DDSFile::DXGIFormat::R16G16_Typeless: 156 | std::cout << "R16G16_Typeless"; 157 | break; 158 | case DDSFile::DXGIFormat::R16G16_Float: 159 | std::cout << "R16G16_Float"; 160 | break; 161 | case DDSFile::DXGIFormat::R16G16_UNorm: 162 | std::cout << "R16G16_UNorm"; 163 | break; 164 | case DDSFile::DXGIFormat::R16G16_UInt: 165 | std::cout << "R16G16_UInt"; 166 | break; 167 | case DDSFile::DXGIFormat::R16G16_SNorm: 168 | std::cout << "R16G16_SNorm"; 169 | break; 170 | case DDSFile::DXGIFormat::R16G16_SInt: 171 | std::cout << "R16G16_SInt"; 172 | break; 173 | case DDSFile::DXGIFormat::R32_Typeless: 174 | std::cout << "R32_Typeless"; 175 | break; 176 | case DDSFile::DXGIFormat::D32_Float: 177 | std::cout << "D32_Float"; 178 | break; 179 | case DDSFile::DXGIFormat::R32_Float: 180 | std::cout << "R32_Float"; 181 | break; 182 | case DDSFile::DXGIFormat::R32_UInt: 183 | std::cout << "R32_UInt"; 184 | break; 185 | case DDSFile::DXGIFormat::R32_SInt: 186 | std::cout << "R32_SInt"; 187 | break; 188 | case DDSFile::DXGIFormat::R24G8_Typeless: 189 | std::cout << "R24G8_Typeless"; 190 | break; 191 | case DDSFile::DXGIFormat::D24_UNorm_S8_UInt: 192 | std::cout << "D24_UNorm_S8_UInt"; 193 | break; 194 | case DDSFile::DXGIFormat::R24_UNorm_X8_Typeless: 195 | std::cout << "R24_UNorm_X8_Typeless"; 196 | break; 197 | case DDSFile::DXGIFormat::X24_Typeless_G8_UInt: 198 | std::cout << "X24_Typeless_G8_UInt"; 199 | break; 200 | case DDSFile::DXGIFormat::R8G8_Typeless: 201 | std::cout << "R8G8_Typeless"; 202 | break; 203 | case DDSFile::DXGIFormat::R8G8_UNorm: 204 | std::cout << "R8G8_UNorm"; 205 | break; 206 | case DDSFile::DXGIFormat::R8G8_UInt: 207 | std::cout << "R8G8_UInt"; 208 | break; 209 | case DDSFile::DXGIFormat::R8G8_SNorm: 210 | std::cout << "R8G8_SNorm"; 211 | break; 212 | case DDSFile::DXGIFormat::R8G8_SInt: 213 | std::cout << "R8G8_SInt"; 214 | break; 215 | case DDSFile::DXGIFormat::R16_Typeless: 216 | std::cout << "R16_Typeless"; 217 | break; 218 | case DDSFile::DXGIFormat::R16_Float: 219 | std::cout << "R16_Float"; 220 | break; 221 | case DDSFile::DXGIFormat::D16_UNorm: 222 | std::cout << "D16_UNorm"; 223 | break; 224 | case DDSFile::DXGIFormat::R16_UNorm: 225 | std::cout << "R16_UNorm"; 226 | break; 227 | case DDSFile::DXGIFormat::R16_UInt: 228 | std::cout << "R16_UInt"; 229 | break; 230 | case DDSFile::DXGIFormat::R16_SNorm: 231 | std::cout << "R16_SNorm"; 232 | break; 233 | case DDSFile::DXGIFormat::R16_SInt: 234 | std::cout << "R16_SInt"; 235 | break; 236 | case DDSFile::DXGIFormat::R8_Typeless: 237 | std::cout << "R8_Typeless"; 238 | break; 239 | case DDSFile::DXGIFormat::R8_UNorm: 240 | std::cout << "R8_UNorm"; 241 | break; 242 | case DDSFile::DXGIFormat::R8_UInt: 243 | std::cout << "R8_UInt"; 244 | break; 245 | case DDSFile::DXGIFormat::R8_SNorm: 246 | std::cout << "R8_SNorm"; 247 | break; 248 | case DDSFile::DXGIFormat::R8_SInt: 249 | std::cout << "R8_SInt"; 250 | break; 251 | case DDSFile::DXGIFormat::A8_UNorm: 252 | std::cout << "A8_UNorm"; 253 | break; 254 | case DDSFile::DXGIFormat::R1_UNorm: 255 | std::cout << "R1_UNorm"; 256 | break; 257 | case DDSFile::DXGIFormat::R9G9B9E5_SHAREDEXP: 258 | std::cout << "R9G9B9E5_SHAREDEXP"; 259 | break; 260 | case DDSFile::DXGIFormat::R8G8_B8G8_UNorm: 261 | std::cout << "R8G8_B8G8_UNorm"; 262 | break; 263 | case DDSFile::DXGIFormat::G8R8_G8B8_UNorm: 264 | std::cout << "G8R8_G8B8_UNorm"; 265 | break; 266 | case DDSFile::DXGIFormat::BC1_Typeless: 267 | std::cout << "BC1_Typeless"; 268 | break; 269 | case DDSFile::DXGIFormat::BC1_UNorm: 270 | std::cout << "BC1_UNorm"; 271 | break; 272 | case DDSFile::DXGIFormat::BC1_UNorm_SRGB: 273 | std::cout << "BC1_UNorm_SRGB"; 274 | break; 275 | case DDSFile::DXGIFormat::BC2_Typeless: 276 | std::cout << "BC2_Typeless"; 277 | break; 278 | case DDSFile::DXGIFormat::BC2_UNorm: 279 | std::cout << "BC2_UNorm"; 280 | break; 281 | case DDSFile::DXGIFormat::BC2_UNorm_SRGB: 282 | std::cout << "BC2_UNorm_SRGB"; 283 | break; 284 | case DDSFile::DXGIFormat::BC3_Typeless: 285 | std::cout << "BC3_Typeless"; 286 | break; 287 | case DDSFile::DXGIFormat::BC3_UNorm: 288 | std::cout << "BC3_UNorm"; 289 | break; 290 | case DDSFile::DXGIFormat::BC3_UNorm_SRGB: 291 | std::cout << "BC3_UNorm_SRGB"; 292 | break; 293 | case DDSFile::DXGIFormat::BC4_Typeless: 294 | std::cout << "BC4_Typeless"; 295 | break; 296 | case DDSFile::DXGIFormat::BC4_UNorm: 297 | std::cout << "BC4_UNorm"; 298 | break; 299 | case DDSFile::DXGIFormat::BC4_SNorm: 300 | std::cout << "BC4_SNorm"; 301 | break; 302 | case DDSFile::DXGIFormat::BC5_Typeless: 303 | std::cout << "BC5_Typeless"; 304 | break; 305 | case DDSFile::DXGIFormat::BC5_UNorm: 306 | std::cout << "BC5_UNorm"; 307 | break; 308 | case DDSFile::DXGIFormat::BC5_SNorm: 309 | std::cout << "BC5_SNorm"; 310 | break; 311 | case DDSFile::DXGIFormat::B5G6R5_UNorm: 312 | std::cout << "B5G6R5_UNorm"; 313 | break; 314 | case DDSFile::DXGIFormat::B5G5R5A1_UNorm: 315 | std::cout << "B5G5R5A1_UNorm"; 316 | break; 317 | case DDSFile::DXGIFormat::B8G8R8A8_UNorm: 318 | std::cout << "B8G8R8A8_UNorm"; 319 | break; 320 | case DDSFile::DXGIFormat::B8G8R8X8_UNorm: 321 | std::cout << "B8G8R8X8_UNorm"; 322 | break; 323 | case DDSFile::DXGIFormat::R10G10B10_XR_BIAS_A2_UNorm: 324 | std::cout << "R10G10B10_XR_BIAS_A2_UNorm"; 325 | break; 326 | case DDSFile::DXGIFormat::B8G8R8A8_Typeless: 327 | std::cout << "B8G8R8A8_Typeless"; 328 | break; 329 | case DDSFile::DXGIFormat::B8G8R8A8_UNorm_SRGB: 330 | std::cout << "B8G8R8A8_UNorm_SRGB"; 331 | break; 332 | case DDSFile::DXGIFormat::B8G8R8X8_Typeless: 333 | std::cout << "B8G8R8X8_Typeless"; 334 | break; 335 | case DDSFile::DXGIFormat::B8G8R8X8_UNorm_SRGB: 336 | std::cout << "B8G8R8X8_UNorm_SRGB"; 337 | break; 338 | case DDSFile::DXGIFormat::BC6H_Typeless: 339 | std::cout << "BC6H_Typeless"; 340 | break; 341 | case DDSFile::DXGIFormat::BC6H_UF16: 342 | std::cout << "BC6H_UF16"; 343 | break; 344 | case DDSFile::DXGIFormat::BC6H_SF16: 345 | std::cout << "BC6H_SF16"; 346 | break; 347 | case DDSFile::DXGIFormat::BC7_Typeless: 348 | std::cout << "BC7_Typeless"; 349 | break; 350 | case DDSFile::DXGIFormat::BC7_UNorm: 351 | std::cout << "BC7_UNorm"; 352 | break; 353 | case DDSFile::DXGIFormat::BC7_UNorm_SRGB: 354 | std::cout << "BC7_UNorm_SRGB"; 355 | break; 356 | case DDSFile::DXGIFormat::AYUV: 357 | std::cout << "AYUV"; 358 | break; 359 | case DDSFile::DXGIFormat::Y410: 360 | std::cout << "Y410"; 361 | break; 362 | case DDSFile::DXGIFormat::Y416: 363 | std::cout << "Y416"; 364 | break; 365 | case DDSFile::DXGIFormat::NV12: 366 | std::cout << "NV12"; 367 | break; 368 | case DDSFile::DXGIFormat::P010: 369 | std::cout << "P010"; 370 | break; 371 | case DDSFile::DXGIFormat::P016: 372 | std::cout << "P016"; 373 | break; 374 | case DDSFile::DXGIFormat::YUV420_OPAQUE: 375 | std::cout << "YUV420_OPAQUE"; 376 | break; 377 | case DDSFile::DXGIFormat::YUY2: 378 | std::cout << "YUY2"; 379 | break; 380 | case DDSFile::DXGIFormat::Y210: 381 | std::cout << "Y210"; 382 | break; 383 | case DDSFile::DXGIFormat::Y216: 384 | std::cout << "Y216"; 385 | break; 386 | case DDSFile::DXGIFormat::NV11: 387 | std::cout << "NV11"; 388 | break; 389 | case DDSFile::DXGIFormat::AI44: 390 | std::cout << "AI44"; 391 | break; 392 | case DDSFile::DXGIFormat::IA44: 393 | std::cout << "IA44"; 394 | break; 395 | case DDSFile::DXGIFormat::P8: 396 | std::cout << "P8"; 397 | break; 398 | case DDSFile::DXGIFormat::A8P8: 399 | std::cout << "A8P8"; 400 | break; 401 | case DDSFile::DXGIFormat::B4G4R4A4_UNorm: 402 | std::cout << "B4G4R4A4_UNorm"; 403 | break; 404 | case DDSFile::DXGIFormat::P208: 405 | std::cout << "P208"; 406 | break; 407 | case DDSFile::DXGIFormat::V208: 408 | std::cout << "V208"; 409 | break; 410 | case DDSFile::DXGIFormat::V408: 411 | std::cout << "V408"; 412 | break; 413 | } 414 | std::cout << "\n"; 415 | 416 | return 0; 417 | } 418 | -------------------------------------------------------------------------------- /example_gl.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include 5 | 6 | #define TINYDDSLOADER_IMPLEMENTATION 7 | #include "tinyddsloader.h" 8 | 9 | #ifndef GL_EXT_texture_compression_s3tc 10 | #define GL_EXT_texture_compression_s3tc 1 11 | #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 12 | #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 13 | #define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 14 | #define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 15 | #define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB 16 | #define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC 17 | #define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD 18 | #define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE 19 | #endif /* GL_EXT_texture_compression_s3tc */ 20 | 21 | using namespace tinyddsloader; 22 | 23 | struct GLSwizzle { 24 | GLenum m_r, m_g, m_b, m_a; 25 | }; 26 | 27 | struct GLFormat { 28 | DDSFile::DXGIFormat m_dxgiFormat; 29 | GLenum m_type; 30 | GLenum m_format; 31 | GLSwizzle m_swizzle; 32 | }; 33 | 34 | bool TranslateFormat(DDSFile::DXGIFormat fmt, GLFormat* outFormat) { 35 | static const GLSwizzle sws[] = { 36 | {GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA}, 37 | {GL_BLUE, GL_GREEN, GL_RED, GL_ALPHA}, 38 | {GL_BLUE, GL_GREEN, GL_RED, GL_ONE}, 39 | {GL_RED, GL_GREEN, GL_BLUE, GL_ONE}, 40 | {GL_RED, GL_ZERO, GL_ZERO, GL_ZERO}, 41 | {GL_RED, GL_GREEN, GL_ZERO, GL_ZERO}, 42 | }; 43 | using DXGIFmt = DDSFile::DXGIFormat; 44 | static const GLFormat formats[] = { 45 | {DXGIFmt::R8G8B8A8_UNorm, GL_UNSIGNED_BYTE, GL_RGBA, sws[0]}, 46 | {DXGIFmt::B8G8R8A8_UNorm, GL_UNSIGNED_BYTE, GL_RGBA, sws[1]}, 47 | {DXGIFmt::B8G8R8X8_UNorm, GL_UNSIGNED_BYTE, GL_RGBA, sws[2]}, 48 | {DXGIFmt::BC1_UNorm, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, sws[0]}, 49 | {DXGIFmt::BC2_UNorm, 0, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, sws[0]}, 50 | {DXGIFmt::BC3_UNorm, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, sws[0]}, 51 | {DXGIFmt::BC4_UNorm, 0, GL_COMPRESSED_RED_RGTC1_EXT, sws[0]}, 52 | {DXGIFmt::BC4_SNorm, 0, GL_COMPRESSED_SIGNED_RED_RGTC1_EXT, sws[0]}, 53 | {DXGIFmt::BC5_UNorm, 0, GL_COMPRESSED_RED_GREEN_RGTC2_EXT, sws[0]}, 54 | {DXGIFmt::BC5_SNorm, 0, GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT, 55 | sws[0]}, 56 | }; 57 | for (const auto& format : formats) { 58 | if (format.m_dxgiFormat == fmt) { 59 | if (outFormat) { 60 | *outFormat = format; 61 | } 62 | return true; 63 | } 64 | } 65 | return false; 66 | } 67 | 68 | bool IsCompressed(GLenum fmt) { 69 | switch (fmt) { 70 | case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: 71 | case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: 72 | case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: 73 | case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: 74 | case GL_COMPRESSED_RED_RGTC1_EXT: 75 | case GL_COMPRESSED_SIGNED_RED_RGTC1_EXT: 76 | case GL_COMPRESSED_RED_GREEN_RGTC2_EXT: 77 | case GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: 78 | return true; 79 | default: 80 | return false; 81 | } 82 | } 83 | 84 | bool LoadGLTexture(GLuint tex, DDSFile& dds) { 85 | GLenum target = GL_INVALID_ENUM; 86 | bool isArray = false; 87 | if (dds.GetTextureDimension() == DDSFile::TextureDimension::Texture1D) { 88 | if (dds.GetArraySize() > 1) { 89 | target = GL_TEXTURE_1D_ARRAY; 90 | isArray = true; 91 | } else { 92 | target = GL_TEXTURE_1D; 93 | } 94 | } else if (dds.GetTextureDimension() == 95 | DDSFile::TextureDimension::Texture2D) { 96 | if (dds.GetArraySize() > 1) { 97 | if (dds.IsCubemap()) { 98 | if (dds.GetArraySize() > 6) { 99 | target = GL_TEXTURE_CUBE_MAP_ARRAY; 100 | isArray = true; 101 | } else { 102 | target = GL_TEXTURE_CUBE_MAP; 103 | } 104 | } else { 105 | target = GL_TEXTURE_2D_ARRAY; 106 | isArray = true; 107 | } 108 | } else { 109 | target = GL_TEXTURE_2D; 110 | } 111 | } else if (dds.GetTextureDimension() == 112 | DDSFile::TextureDimension::Texture3D) { 113 | target = GL_TEXTURE_3D; 114 | } 115 | 116 | GLFormat format; 117 | if (!TranslateFormat(dds.GetFormat(), &format)) { 118 | return false; 119 | } 120 | 121 | glBindTexture(target, tex); 122 | glTexParameteri(target, GL_TEXTURE_BASE_LEVEL, 0); 123 | glTexParameteri(target, GL_TEXTURE_MAX_LEVEL, dds.GetMipCount() - 1); 124 | glTexParameteri(target, GL_TEXTURE_SWIZZLE_R, format.m_swizzle.m_r); 125 | glTexParameteri(target, GL_TEXTURE_SWIZZLE_G, format.m_swizzle.m_g); 126 | glTexParameteri(target, GL_TEXTURE_SWIZZLE_B, format.m_swizzle.m_b); 127 | glTexParameteri(target, GL_TEXTURE_SWIZZLE_A, format.m_swizzle.m_a); 128 | 129 | switch (target) { 130 | case GL_TEXTURE_1D: 131 | glTexStorage1D(target, dds.GetMipCount(), format.m_format, 132 | dds.GetWidth()); 133 | break; 134 | case GL_TEXTURE_1D_ARRAY: 135 | glTexStorage2D(target, dds.GetMipCount(), format.m_format, 136 | dds.GetWidth(), dds.GetArraySize()); 137 | break; 138 | case GL_TEXTURE_2D: 139 | glTexStorage2D(target, dds.GetMipCount(), format.m_format, 140 | dds.GetWidth(), dds.GetHeight()); 141 | break; 142 | case GL_TEXTURE_CUBE_MAP: 143 | glTexStorage2D(target, dds.GetMipCount(), format.m_format, 144 | dds.GetWidth(), dds.GetHeight()); 145 | break; 146 | case GL_TEXTURE_2D_ARRAY: 147 | glTexStorage3D(target, dds.GetMipCount(), format.m_format, 148 | dds.GetWidth(), dds.GetHeight(), dds.GetArraySize()); 149 | break; 150 | case GL_TEXTURE_3D: 151 | glTexStorage3D(target, dds.GetMipCount(), format.m_format, 152 | dds.GetWidth(), dds.GetHeight(), dds.GetDepth()); 153 | break; 154 | case GL_TEXTURE_CUBE_MAP_ARRAY: 155 | glTexStorage3D(target, dds.GetMipCount(), format.m_format, 156 | dds.GetWidth(), dds.GetHeight(), dds.GetArraySize()); 157 | break; 158 | default: 159 | glBindTexture(target, 0); 160 | return false; 161 | } 162 | dds.Flip(); 163 | 164 | uint32_t numFaces = dds.IsCubemap() ? 6 : 1; 165 | for (uint32_t layer = 0; layer < dds.GetArraySize(); layer++) { 166 | for (uint32_t face = 0; face < numFaces; face++) { 167 | for (uint32_t level = 0; level < dds.GetMipCount(); level++) { 168 | GLenum target2 = dds.IsCubemap() 169 | ? (GL_TEXTURE_CUBE_MAP_POSITIVE_X + face) 170 | : target; 171 | auto imageData = dds.GetImageData(level, layer * numFaces); 172 | switch (target) { 173 | case GL_TEXTURE_1D: 174 | if (IsCompressed(format.m_format)) { 175 | glCompressedTexSubImage1D( 176 | target2, level, 0, imageData->m_width, 177 | format.m_format, imageData->m_memSlicePitch, 178 | imageData->m_mem); 179 | } else { 180 | glTexSubImage1D(target2, level, 0, 181 | imageData->m_width, format.m_format, 182 | format.m_type, imageData->m_mem); 183 | } 184 | break; 185 | case GL_TEXTURE_1D_ARRAY: 186 | case GL_TEXTURE_2D: 187 | case GL_TEXTURE_CUBE_MAP: { 188 | auto w = imageData->m_width; 189 | auto h = isArray ? layer : imageData->m_height; 190 | if (IsCompressed(format.m_format)) { 191 | glCompressedTexSubImage2D( 192 | target2, level, 0, 0, w, h, format.m_format, 193 | imageData->m_memSlicePitch, imageData->m_mem); 194 | } else { 195 | glTexSubImage2D(target2, level, 0, 0, w, h, 196 | format.m_format, format.m_type, 197 | imageData->m_mem); 198 | } 199 | break; 200 | } 201 | default: 202 | glBindTexture(target, 0); 203 | return false; 204 | } 205 | } 206 | } 207 | } 208 | 209 | glBindTexture(target, 0); 210 | return true; 211 | } 212 | 213 | int main(int argc, char** argv) { 214 | if (argc < 2) { 215 | return 1; 216 | } 217 | 218 | DDSFile dds; 219 | auto ret = dds.Load(argv[1]); 220 | if (tinyddsloader::Result::Success != ret) { 221 | std::cout << "Failed to load.[" << argv[1] << "]\n"; 222 | std::cout << "Result : " << int(ret) << "\n"; 223 | return 1; 224 | } 225 | 226 | if (!glfwInit()) { 227 | return 1; 228 | } 229 | 230 | glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 231 | glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); 232 | glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 233 | glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 234 | 235 | GLFWwindow* window = nullptr; 236 | window = glfwCreateWindow(800, 600, "ddsloader", nullptr, nullptr); 237 | if (!window) { 238 | glfwTerminate(); 239 | return 1; 240 | } 241 | 242 | glfwMakeContextCurrent(window); 243 | 244 | if (gl3wInit() != 0) { 245 | return 1; 246 | } 247 | 248 | GLuint tex; 249 | glGenTextures(1, &tex); 250 | 251 | if (!LoadGLTexture(tex, dds)) { 252 | return 1; 253 | } 254 | 255 | while (!glfwWindowShouldClose(window)) { 256 | glClear(GL_COLOR_BUFFER_BIT); 257 | 258 | glfwSwapBuffers(window); 259 | 260 | glfwPollEvents(); 261 | } 262 | 263 | glfwTerminate(); 264 | 265 | return 0; 266 | } 267 | -------------------------------------------------------------------------------- /tinyddsloader.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright(c) 2019 benikabocha. 3 | // Distributed under the MIT License (http://opensource.org/licenses/MIT) 4 | // 5 | 6 | #ifndef TINYDDSLOADER_H_ 7 | #define TINYDDSLOADER_H_ 8 | 9 | #include 10 | #include 11 | 12 | namespace tinyddsloader { 13 | 14 | enum Result { 15 | Success, 16 | ErrorFileOpen, 17 | ErrorRead, 18 | ErrorMagicWord, 19 | ErrorSize, 20 | ErrorVerify, 21 | ErrorNotSupported, 22 | ErrorInvalidData, 23 | }; 24 | 25 | class DDSFile { 26 | public: 27 | static const char Magic[4]; 28 | 29 | enum class PixelFormatFlagBits : uint32_t { 30 | FourCC = 0x00000004, 31 | RGB = 0x00000040, 32 | RGBA = 0x00000041, 33 | Luminance = 0x00020000, 34 | LuminanceA = 0x00020001, 35 | AlphaPixels = 0x00000001, 36 | Alpha = 0x00000002, 37 | Palette8 = 0x00000020, 38 | Palette8A = 0x00000021, 39 | BumpDUDV = 0x00080000 40 | }; 41 | 42 | enum class DXGIFormat : uint32_t { 43 | Unknown = 0, 44 | R32G32B32A32_Typeless = 1, 45 | R32G32B32A32_Float = 2, 46 | R32G32B32A32_UInt = 3, 47 | R32G32B32A32_SInt = 4, 48 | R32G32B32_Typeless = 5, 49 | R32G32B32_Float = 6, 50 | R32G32B32_UInt = 7, 51 | R32G32B32_SInt = 8, 52 | R16G16B16A16_Typeless = 9, 53 | R16G16B16A16_Float = 10, 54 | R16G16B16A16_UNorm = 11, 55 | R16G16B16A16_UInt = 12, 56 | R16G16B16A16_SNorm = 13, 57 | R16G16B16A16_SInt = 14, 58 | R32G32_Typeless = 15, 59 | R32G32_Float = 16, 60 | R32G32_UInt = 17, 61 | R32G32_SInt = 18, 62 | R32G8X24_Typeless = 19, 63 | D32_Float_S8X24_UInt = 20, 64 | R32_Float_X8X24_Typeless = 21, 65 | X32_Typeless_G8X24_UInt = 22, 66 | R10G10B10A2_Typeless = 23, 67 | R10G10B10A2_UNorm = 24, 68 | R10G10B10A2_UInt = 25, 69 | R11G11B10_Float = 26, 70 | R8G8B8A8_Typeless = 27, 71 | R8G8B8A8_UNorm = 28, 72 | R8G8B8A8_UNorm_SRGB = 29, 73 | R8G8B8A8_UInt = 30, 74 | R8G8B8A8_SNorm = 31, 75 | R8G8B8A8_SInt = 32, 76 | R16G16_Typeless = 33, 77 | R16G16_Float = 34, 78 | R16G16_UNorm = 35, 79 | R16G16_UInt = 36, 80 | R16G16_SNorm = 37, 81 | R16G16_SInt = 38, 82 | R32_Typeless = 39, 83 | D32_Float = 40, 84 | R32_Float = 41, 85 | R32_UInt = 42, 86 | R32_SInt = 43, 87 | R24G8_Typeless = 44, 88 | D24_UNorm_S8_UInt = 45, 89 | R24_UNorm_X8_Typeless = 46, 90 | X24_Typeless_G8_UInt = 47, 91 | R8G8_Typeless = 48, 92 | R8G8_UNorm = 49, 93 | R8G8_UInt = 50, 94 | R8G8_SNorm = 51, 95 | R8G8_SInt = 52, 96 | R16_Typeless = 53, 97 | R16_Float = 54, 98 | D16_UNorm = 55, 99 | R16_UNorm = 56, 100 | R16_UInt = 57, 101 | R16_SNorm = 58, 102 | R16_SInt = 59, 103 | R8_Typeless = 60, 104 | R8_UNorm = 61, 105 | R8_UInt = 62, 106 | R8_SNorm = 63, 107 | R8_SInt = 64, 108 | A8_UNorm = 65, 109 | R1_UNorm = 66, 110 | R9G9B9E5_SHAREDEXP = 67, 111 | R8G8_B8G8_UNorm = 68, 112 | G8R8_G8B8_UNorm = 69, 113 | BC1_Typeless = 70, 114 | BC1_UNorm = 71, 115 | BC1_UNorm_SRGB = 72, 116 | BC2_Typeless = 73, 117 | BC2_UNorm = 74, 118 | BC2_UNorm_SRGB = 75, 119 | BC3_Typeless = 76, 120 | BC3_UNorm = 77, 121 | BC3_UNorm_SRGB = 78, 122 | BC4_Typeless = 79, 123 | BC4_UNorm = 80, 124 | BC4_SNorm = 81, 125 | BC5_Typeless = 82, 126 | BC5_UNorm = 83, 127 | BC5_SNorm = 84, 128 | B5G6R5_UNorm = 85, 129 | B5G5R5A1_UNorm = 86, 130 | B8G8R8A8_UNorm = 87, 131 | B8G8R8X8_UNorm = 88, 132 | R10G10B10_XR_BIAS_A2_UNorm = 89, 133 | B8G8R8A8_Typeless = 90, 134 | B8G8R8A8_UNorm_SRGB = 91, 135 | B8G8R8X8_Typeless = 92, 136 | B8G8R8X8_UNorm_SRGB = 93, 137 | BC6H_Typeless = 94, 138 | BC6H_UF16 = 95, 139 | BC6H_SF16 = 96, 140 | BC7_Typeless = 97, 141 | BC7_UNorm = 98, 142 | BC7_UNorm_SRGB = 99, 143 | AYUV = 100, 144 | Y410 = 101, 145 | Y416 = 102, 146 | NV12 = 103, 147 | P010 = 104, 148 | P016 = 105, 149 | YUV420_OPAQUE = 106, 150 | YUY2 = 107, 151 | Y210 = 108, 152 | Y216 = 109, 153 | NV11 = 110, 154 | AI44 = 111, 155 | IA44 = 112, 156 | P8 = 113, 157 | A8P8 = 114, 158 | B4G4R4A4_UNorm = 115, 159 | P208 = 130, 160 | V208 = 131, 161 | V408 = 132, 162 | }; 163 | 164 | enum class HeaderFlagBits : uint32_t { 165 | Height = 0x00000002, 166 | Width = 0x00000004, 167 | Texture = 0x00001007, 168 | Mipmap = 0x00020000, 169 | Volume = 0x00800000, 170 | Pitch = 0x00000008, 171 | LinearSize = 0x00080000, 172 | }; 173 | 174 | enum class HeaderCaps2FlagBits : uint32_t { 175 | CubemapPositiveX = 0x00000600, 176 | CubemapNegativeX = 0x00000a00, 177 | CubemapPositiveY = 0x00001200, 178 | CubemapNegativeY = 0x00002200, 179 | CubemapPositiveZ = 0x00004200, 180 | CubemapNegativeZ = 0x00008200, 181 | CubemapAllFaces = CubemapPositiveX | CubemapNegativeX | 182 | CubemapPositiveY | CubemapNegativeY | 183 | CubemapPositiveZ | CubemapNegativeZ, 184 | Volume = 0x00200000, 185 | }; 186 | 187 | struct PixelFormat { 188 | uint32_t m_size; 189 | uint32_t m_flags; 190 | uint32_t m_fourCC; 191 | uint32_t m_bitCount; 192 | uint32_t m_RBitMask; 193 | uint32_t m_GBitMask; 194 | uint32_t m_BBitMask; 195 | uint32_t m_ABitMask; 196 | }; 197 | 198 | struct Header { 199 | uint32_t m_size; 200 | uint32_t m_flags; 201 | uint32_t m_height; 202 | uint32_t m_width; 203 | uint32_t m_pitchOrLinerSize; 204 | uint32_t m_depth; 205 | uint32_t m_mipMapCount; 206 | uint32_t m_reserved1[11]; 207 | PixelFormat m_pixelFormat; 208 | uint32_t m_caps; 209 | uint32_t m_caps2; 210 | uint32_t m_caps3; 211 | uint32_t m_caps4; 212 | uint32_t m_reserved2; 213 | }; 214 | 215 | enum class TextureDimension : uint32_t { 216 | Unknown = 0, 217 | Texture1D = 2, 218 | Texture2D = 3, 219 | Texture3D = 4 220 | }; 221 | 222 | enum class DXT10MiscFlagBits : uint32_t { TextureCube = 0x4 }; 223 | 224 | struct HeaderDXT10 { 225 | DXGIFormat m_format; 226 | TextureDimension m_resourceDimension; 227 | uint32_t m_miscFlag; 228 | uint32_t m_arraySize; 229 | uint32_t m_miscFlag2; 230 | }; 231 | 232 | struct ImageData { 233 | uint32_t m_width; 234 | uint32_t m_height; 235 | uint32_t m_depth; 236 | void* m_mem; 237 | uint32_t m_memPitch; 238 | uint32_t m_memSlicePitch; 239 | }; 240 | 241 | struct BC1Block { 242 | uint16_t m_color0; 243 | uint16_t m_color1; 244 | uint8_t m_row0; 245 | uint8_t m_row1; 246 | uint8_t m_row2; 247 | uint8_t m_row3; 248 | }; 249 | 250 | struct BC2Block { 251 | uint16_t m_alphaRow0; 252 | uint16_t m_alphaRow1; 253 | uint16_t m_alphaRow2; 254 | uint16_t m_alphaRow3; 255 | uint16_t m_color0; 256 | uint16_t m_color1; 257 | uint8_t m_row0; 258 | uint8_t m_row1; 259 | uint8_t m_row2; 260 | uint8_t m_row3; 261 | }; 262 | 263 | struct BC3Block { 264 | uint8_t m_alpha0; 265 | uint8_t m_alpha1; 266 | uint8_t m_alphaR0; 267 | uint8_t m_alphaR1; 268 | uint8_t m_alphaR2; 269 | uint8_t m_alphaR3; 270 | uint8_t m_alphaR4; 271 | uint8_t m_alphaR5; 272 | uint16_t m_color0; 273 | uint16_t m_color1; 274 | uint8_t m_row0; 275 | uint8_t m_row1; 276 | uint8_t m_row2; 277 | uint8_t m_row3; 278 | }; 279 | 280 | struct BC4Block { 281 | uint8_t m_red0; 282 | uint8_t m_red1; 283 | uint8_t m_redR0; 284 | uint8_t m_redR1; 285 | uint8_t m_redR2; 286 | uint8_t m_redR3; 287 | uint8_t m_redR4; 288 | uint8_t m_redR5; 289 | }; 290 | 291 | struct BC5Block { 292 | uint8_t m_red0; 293 | uint8_t m_red1; 294 | uint8_t m_redR0; 295 | uint8_t m_redR1; 296 | uint8_t m_redR2; 297 | uint8_t m_redR3; 298 | uint8_t m_redR4; 299 | uint8_t m_redR5; 300 | uint8_t m_green0; 301 | uint8_t m_green1; 302 | uint8_t m_greenR0; 303 | uint8_t m_greenR1; 304 | uint8_t m_greenR2; 305 | uint8_t m_greenR3; 306 | uint8_t m_greenR4; 307 | uint8_t m_greenR5; 308 | }; 309 | 310 | public: 311 | static bool IsCompressed(DXGIFormat fmt); 312 | static uint32_t MakeFourCC(char ch0, char ch1, char ch2, char ch3); 313 | static DXGIFormat GetDXGIFormat(const PixelFormat& pf); 314 | static uint32_t GetBitsPerPixel(DXGIFormat fmt); 315 | 316 | Result Load(const char* filepath); 317 | Result Load(std::istream& input); 318 | Result Load(const uint8_t* data, size_t size); 319 | Result Load(std::vector&& dds); 320 | 321 | const ImageData* GetImageData(uint32_t mipIdx = 0, 322 | uint32_t arrayIdx = 0) const { 323 | if (mipIdx < m_mipCount && arrayIdx < m_arraySize) { 324 | return &m_imageDatas[m_mipCount * arrayIdx + mipIdx]; 325 | } 326 | return nullptr; 327 | } 328 | 329 | bool Flip(); 330 | 331 | uint32_t GetWidth() const { return m_width; } 332 | uint32_t GetHeight() const { return m_height; } 333 | uint32_t GetDepth() const { return m_depth; } 334 | uint32_t GetMipCount() const { return m_mipCount; } 335 | uint32_t GetArraySize() const { return m_arraySize; } 336 | DXGIFormat GetFormat() const { return m_format; } 337 | bool IsCubemap() const { return m_isCubemap; } 338 | TextureDimension GetTextureDimension() const { return m_texDim; } 339 | 340 | private: 341 | void GetImageInfo(uint32_t w, uint32_t h, DXGIFormat fmt, 342 | uint32_t* outNumBytes, uint32_t* outRowBytes, 343 | uint32_t* outNumRows); 344 | bool FlipImage(ImageData& imageData); 345 | bool FlipCompressedImage(ImageData& imageData); 346 | void FlipCompressedImageBC1(ImageData& imageData); 347 | void FlipCompressedImageBC2(ImageData& imageData); 348 | void FlipCompressedImageBC3(ImageData& imageData); 349 | void FlipCompressedImageBC4(ImageData& imageData); 350 | void FlipCompressedImageBC5(ImageData& imageData); 351 | 352 | private: 353 | std::vector m_dds; 354 | std::vector m_imageDatas; 355 | 356 | uint32_t m_height; 357 | uint32_t m_width; 358 | uint32_t m_depth; 359 | uint32_t m_mipCount; 360 | uint32_t m_arraySize; 361 | DXGIFormat m_format; 362 | bool m_isCubemap; 363 | TextureDimension m_texDim; 364 | }; 365 | 366 | } // namespace tinyddsloader 367 | 368 | #ifdef TINYDDSLOADER_IMPLEMENTATION 369 | 370 | #if _WIN32 371 | #undef min 372 | #undef max 373 | #endif // _Win32 374 | 375 | #include 376 | #include 377 | 378 | namespace tinyddsloader { 379 | 380 | const char DDSFile::Magic[4] = {'D', 'D', 'S', ' '}; 381 | 382 | bool DDSFile::IsCompressed(DXGIFormat fmt) { 383 | switch (fmt) { 384 | case DXGIFormat::BC1_Typeless: 385 | case DXGIFormat::BC1_UNorm: 386 | case DXGIFormat::BC1_UNorm_SRGB: 387 | case DXGIFormat::BC2_Typeless: 388 | case DXGIFormat::BC2_UNorm: 389 | case DXGIFormat::BC2_UNorm_SRGB: 390 | case DXGIFormat::BC3_Typeless: 391 | case DXGIFormat::BC3_UNorm: 392 | case DXGIFormat::BC3_UNorm_SRGB: 393 | case DXGIFormat::BC4_Typeless: 394 | case DXGIFormat::BC4_UNorm: 395 | case DXGIFormat::BC4_SNorm: 396 | case DXGIFormat::BC5_Typeless: 397 | case DXGIFormat::BC5_UNorm: 398 | case DXGIFormat::BC5_SNorm: 399 | case DXGIFormat::BC6H_Typeless: 400 | case DXGIFormat::BC6H_UF16: 401 | case DXGIFormat::BC6H_SF16: 402 | case DXGIFormat::BC7_Typeless: 403 | case DXGIFormat::BC7_UNorm: 404 | case DXGIFormat::BC7_UNorm_SRGB: 405 | return true; 406 | } 407 | return false; 408 | } 409 | 410 | uint32_t DDSFile::MakeFourCC(char ch0, char ch1, char ch2, char ch3) { 411 | return (uint32_t(uint8_t(ch0)) | (uint32_t(uint8_t(ch1)) << 8) | 412 | (uint32_t(uint8_t(ch2)) << 16) | (uint32_t(uint8_t(ch3)) << 24)); 413 | } 414 | 415 | DDSFile::DXGIFormat DDSFile::GetDXGIFormat(const PixelFormat& pf) { 416 | if (pf.m_flags & uint32_t(PixelFormatFlagBits::RGB)) { 417 | switch (pf.m_bitCount) { 418 | case 32: 419 | if (pf.m_RBitMask == 0x000000ff && 420 | pf.m_GBitMask == 0x0000ff00 && 421 | pf.m_BBitMask == 0x00ff0000 && 422 | pf.m_ABitMask == 0xff000000) { 423 | return DXGIFormat::R8G8B8A8_UNorm; 424 | } 425 | if (pf.m_RBitMask == 0x00ff0000 && 426 | pf.m_GBitMask == 0x0000ff00 && 427 | pf.m_BBitMask == 0x000000ff && 428 | pf.m_ABitMask == 0xff000000) { 429 | return DXGIFormat::B8G8R8A8_UNorm; 430 | } 431 | if (pf.m_RBitMask == 0x00ff0000 && 432 | pf.m_GBitMask == 0x0000ff00 && 433 | pf.m_BBitMask == 0x000000ff && 434 | pf.m_ABitMask == 0x00000000) { 435 | return DXGIFormat::B8G8R8X8_UNorm; 436 | } 437 | 438 | if (pf.m_RBitMask == 0x0000ffff && 439 | pf.m_GBitMask == 0xffff0000 && 440 | pf.m_BBitMask == 0x00000000 && 441 | pf.m_ABitMask == 0x00000000) { 442 | return DXGIFormat::R16G16_UNorm; 443 | } 444 | 445 | if (pf.m_RBitMask == 0xffffffff && 446 | pf.m_GBitMask == 0x00000000 && 447 | pf.m_BBitMask == 0x00000000 && 448 | pf.m_ABitMask == 0x00000000) { 449 | return DXGIFormat::R32_Float; 450 | } 451 | break; 452 | case 24: 453 | break; 454 | case 16: 455 | if (pf.m_RBitMask == 0x7c00 && pf.m_GBitMask == 0x03e0 && 456 | pf.m_BBitMask == 0x001f && pf.m_ABitMask == 0x8000) { 457 | return DXGIFormat::B5G5R5A1_UNorm; 458 | } 459 | if (pf.m_RBitMask == 0xf800 && pf.m_GBitMask == 0x07e0 && 460 | pf.m_BBitMask == 0x001f && pf.m_ABitMask == 0x0000) { 461 | return DXGIFormat::B5G6R5_UNorm; 462 | } 463 | 464 | if (pf.m_RBitMask == 0x0f00 && pf.m_GBitMask == 0x00f0 && 465 | pf.m_BBitMask == 0x000f && pf.m_ABitMask == 0xf000) { 466 | return DXGIFormat::B4G4R4A4_UNorm; 467 | } 468 | break; 469 | default: 470 | break; 471 | } 472 | } else if (pf.m_flags & uint32_t(PixelFormatFlagBits::Luminance)) { 473 | if (8 == pf.m_bitCount) { 474 | if (pf.m_RBitMask == 0x000000ff && pf.m_GBitMask == 0x00000000 && 475 | pf.m_BBitMask == 0x00000000 && pf.m_ABitMask == 0x00000000) { 476 | return DXGIFormat::R8_UNorm; 477 | } 478 | if (pf.m_RBitMask == 0x000000ff && pf.m_GBitMask == 0x0000ff00 && 479 | pf.m_BBitMask == 0x00000000 && pf.m_ABitMask == 0x00000000) { 480 | return DXGIFormat::R8G8_UNorm; 481 | } 482 | } 483 | if (16 == pf.m_bitCount) { 484 | if (pf.m_RBitMask == 0x0000ffff && pf.m_GBitMask == 0x00000000 && 485 | pf.m_BBitMask == 0x00000000 && pf.m_ABitMask == 0x00000000) { 486 | return DXGIFormat::R16_UNorm; 487 | } 488 | if (pf.m_RBitMask == 0x000000ff && pf.m_GBitMask == 0x0000ff00 && 489 | pf.m_BBitMask == 0x00000000 && pf.m_ABitMask == 0x00000000) { 490 | return DXGIFormat::R8G8_UNorm; 491 | } 492 | } 493 | } else if (pf.m_flags & uint32_t(PixelFormatFlagBits::Alpha)) { 494 | if (8 == pf.m_bitCount) { 495 | return DXGIFormat::A8_UNorm; 496 | } 497 | } else if (pf.m_flags & uint32_t(PixelFormatFlagBits::BumpDUDV)) { 498 | if (16 == pf.m_bitCount) { 499 | if (pf.m_RBitMask == 0x00ff && pf.m_GBitMask == 0xff00 && 500 | pf.m_BBitMask == 0x0000 && pf.m_ABitMask == 0x0000) { 501 | return DXGIFormat::R8G8_SNorm; 502 | } 503 | } 504 | if (32 == pf.m_bitCount) { 505 | if (pf.m_RBitMask == 0x000000ff && pf.m_GBitMask == 0x0000ff00 && 506 | pf.m_BBitMask == 0x00ff0000 && pf.m_ABitMask == 0xff000000) { 507 | return DXGIFormat::R8G8B8A8_SNorm; 508 | } 509 | if (pf.m_RBitMask == 0x0000ffff && pf.m_GBitMask == 0xffff0000 && 510 | pf.m_BBitMask == 0x00000000 && pf.m_ABitMask == 0x00000000) { 511 | return DXGIFormat::R16G16_SNorm; 512 | } 513 | } 514 | } else if (pf.m_flags & uint32_t(PixelFormatFlagBits::FourCC)) { 515 | if (MakeFourCC('D', 'X', 'T', '1') == pf.m_fourCC) { 516 | return DXGIFormat::BC1_UNorm; 517 | } 518 | if (MakeFourCC('D', 'X', 'T', '3') == pf.m_fourCC) { 519 | return DXGIFormat::BC2_UNorm; 520 | } 521 | if (MakeFourCC('D', 'X', 'T', '5') == pf.m_fourCC) { 522 | return DXGIFormat::BC3_UNorm; 523 | } 524 | 525 | if (MakeFourCC('D', 'X', 'T', '4') == pf.m_fourCC) { 526 | return DXGIFormat::BC2_UNorm; 527 | } 528 | if (MakeFourCC('D', 'X', 'T', '5') == pf.m_fourCC) { 529 | return DXGIFormat::BC3_UNorm; 530 | } 531 | 532 | if (MakeFourCC('A', 'T', 'I', '1') == pf.m_fourCC) { 533 | return DXGIFormat::BC4_UNorm; 534 | } 535 | if (MakeFourCC('B', 'C', '4', 'U') == pf.m_fourCC) { 536 | return DXGIFormat::BC4_UNorm; 537 | } 538 | if (MakeFourCC('B', 'C', '4', 'S') == pf.m_fourCC) { 539 | return DXGIFormat::BC4_SNorm; 540 | } 541 | 542 | if (MakeFourCC('A', 'T', 'I', '2') == pf.m_fourCC) { 543 | return DXGIFormat::BC5_UNorm; 544 | } 545 | if (MakeFourCC('B', 'C', '5', 'U') == pf.m_fourCC) { 546 | return DXGIFormat::BC5_UNorm; 547 | } 548 | if (MakeFourCC('B', 'C', '5', 'S') == pf.m_fourCC) { 549 | return DXGIFormat::BC5_SNorm; 550 | } 551 | 552 | if (MakeFourCC('R', 'G', 'B', 'G') == pf.m_fourCC) { 553 | return DXGIFormat::R8G8_B8G8_UNorm; 554 | } 555 | if (MakeFourCC('G', 'R', 'G', 'B') == pf.m_fourCC) { 556 | return DXGIFormat::G8R8_G8B8_UNorm; 557 | } 558 | 559 | if (MakeFourCC('Y', 'U', 'Y', '2') == pf.m_fourCC) { 560 | return DXGIFormat::YUY2; 561 | } 562 | 563 | switch (pf.m_fourCC) { 564 | case 36: 565 | return DXGIFormat::R16G16B16A16_UNorm; 566 | case 110: 567 | return DXGIFormat::R16G16B16A16_SNorm; 568 | case 111: 569 | return DXGIFormat::R16_Float; 570 | case 112: 571 | return DXGIFormat::R16G16_Float; 572 | case 113: 573 | return DXGIFormat::R16G16B16A16_Float; 574 | case 114: 575 | return DXGIFormat::R32_Float; 576 | case 115: 577 | return DXGIFormat::R32G32_Float; 578 | case 116: 579 | return DXGIFormat::R32G32B32A32_Float; 580 | } 581 | } 582 | 583 | return DXGIFormat::Unknown; 584 | } 585 | 586 | uint32_t DDSFile::GetBitsPerPixel(DXGIFormat fmt) { 587 | switch (fmt) { 588 | case DXGIFormat::R32G32B32A32_Typeless: 589 | case DXGIFormat::R32G32B32A32_Float: 590 | case DXGIFormat::R32G32B32A32_UInt: 591 | case DXGIFormat::R32G32B32A32_SInt: 592 | return 128; 593 | 594 | case DXGIFormat::R32G32B32_Typeless: 595 | case DXGIFormat::R32G32B32_Float: 596 | case DXGIFormat::R32G32B32_UInt: 597 | case DXGIFormat::R32G32B32_SInt: 598 | return 96; 599 | 600 | case DXGIFormat::R16G16B16A16_Typeless: 601 | case DXGIFormat::R16G16B16A16_Float: 602 | case DXGIFormat::R16G16B16A16_UNorm: 603 | case DXGIFormat::R16G16B16A16_UInt: 604 | case DXGIFormat::R16G16B16A16_SNorm: 605 | case DXGIFormat::R16G16B16A16_SInt: 606 | case DXGIFormat::R32G32_Typeless: 607 | case DXGIFormat::R32G32_Float: 608 | case DXGIFormat::R32G32_UInt: 609 | case DXGIFormat::R32G32_SInt: 610 | case DXGIFormat::R32G8X24_Typeless: 611 | case DXGIFormat::D32_Float_S8X24_UInt: 612 | case DXGIFormat::R32_Float_X8X24_Typeless: 613 | case DXGIFormat::X32_Typeless_G8X24_UInt: 614 | case DXGIFormat::Y416: 615 | case DXGIFormat::Y210: 616 | case DXGIFormat::Y216: 617 | return 64; 618 | 619 | case DXGIFormat::R10G10B10A2_Typeless: 620 | case DXGIFormat::R10G10B10A2_UNorm: 621 | case DXGIFormat::R10G10B10A2_UInt: 622 | case DXGIFormat::R11G11B10_Float: 623 | case DXGIFormat::R8G8B8A8_Typeless: 624 | case DXGIFormat::R8G8B8A8_UNorm: 625 | case DXGIFormat::R8G8B8A8_UNorm_SRGB: 626 | case DXGIFormat::R8G8B8A8_UInt: 627 | case DXGIFormat::R8G8B8A8_SNorm: 628 | case DXGIFormat::R8G8B8A8_SInt: 629 | case DXGIFormat::R16G16_Typeless: 630 | case DXGIFormat::R16G16_Float: 631 | case DXGIFormat::R16G16_UNorm: 632 | case DXGIFormat::R16G16_UInt: 633 | case DXGIFormat::R16G16_SNorm: 634 | case DXGIFormat::R16G16_SInt: 635 | case DXGIFormat::R32_Typeless: 636 | case DXGIFormat::D32_Float: 637 | case DXGIFormat::R32_Float: 638 | case DXGIFormat::R32_UInt: 639 | case DXGIFormat::R32_SInt: 640 | case DXGIFormat::R24G8_Typeless: 641 | case DXGIFormat::D24_UNorm_S8_UInt: 642 | case DXGIFormat::R24_UNorm_X8_Typeless: 643 | case DXGIFormat::X24_Typeless_G8_UInt: 644 | case DXGIFormat::R9G9B9E5_SHAREDEXP: 645 | case DXGIFormat::R8G8_B8G8_UNorm: 646 | case DXGIFormat::G8R8_G8B8_UNorm: 647 | case DXGIFormat::B8G8R8A8_UNorm: 648 | case DXGIFormat::B8G8R8X8_UNorm: 649 | case DXGIFormat::R10G10B10_XR_BIAS_A2_UNorm: 650 | case DXGIFormat::B8G8R8A8_Typeless: 651 | case DXGIFormat::B8G8R8A8_UNorm_SRGB: 652 | case DXGIFormat::B8G8R8X8_Typeless: 653 | case DXGIFormat::B8G8R8X8_UNorm_SRGB: 654 | case DXGIFormat::AYUV: 655 | case DXGIFormat::Y410: 656 | case DXGIFormat::YUY2: 657 | return 32; 658 | 659 | case DXGIFormat::P010: 660 | case DXGIFormat::P016: 661 | return 24; 662 | 663 | case DXGIFormat::R8G8_Typeless: 664 | case DXGIFormat::R8G8_UNorm: 665 | case DXGIFormat::R8G8_UInt: 666 | case DXGIFormat::R8G8_SNorm: 667 | case DXGIFormat::R8G8_SInt: 668 | case DXGIFormat::R16_Typeless: 669 | case DXGIFormat::R16_Float: 670 | case DXGIFormat::D16_UNorm: 671 | case DXGIFormat::R16_UNorm: 672 | case DXGIFormat::R16_UInt: 673 | case DXGIFormat::R16_SNorm: 674 | case DXGIFormat::R16_SInt: 675 | case DXGIFormat::B5G6R5_UNorm: 676 | case DXGIFormat::B5G5R5A1_UNorm: 677 | case DXGIFormat::A8P8: 678 | case DXGIFormat::B4G4R4A4_UNorm: 679 | return 16; 680 | 681 | case DXGIFormat::NV12: 682 | case DXGIFormat::YUV420_OPAQUE: 683 | case DXGIFormat::NV11: 684 | return 12; 685 | 686 | case DXGIFormat::R8_Typeless: 687 | case DXGIFormat::R8_UNorm: 688 | case DXGIFormat::R8_UInt: 689 | case DXGIFormat::R8_SNorm: 690 | case DXGIFormat::R8_SInt: 691 | case DXGIFormat::A8_UNorm: 692 | case DXGIFormat::AI44: 693 | case DXGIFormat::IA44: 694 | case DXGIFormat::P8: 695 | return 8; 696 | 697 | case DXGIFormat::R1_UNorm: 698 | return 1; 699 | 700 | case DXGIFormat::BC1_Typeless: 701 | case DXGIFormat::BC1_UNorm: 702 | case DXGIFormat::BC1_UNorm_SRGB: 703 | case DXGIFormat::BC4_Typeless: 704 | case DXGIFormat::BC4_UNorm: 705 | case DXGIFormat::BC4_SNorm: 706 | return 4; 707 | 708 | case DXGIFormat::BC2_Typeless: 709 | case DXGIFormat::BC2_UNorm: 710 | case DXGIFormat::BC2_UNorm_SRGB: 711 | case DXGIFormat::BC3_Typeless: 712 | case DXGIFormat::BC3_UNorm: 713 | case DXGIFormat::BC3_UNorm_SRGB: 714 | case DXGIFormat::BC5_Typeless: 715 | case DXGIFormat::BC5_UNorm: 716 | case DXGIFormat::BC5_SNorm: 717 | case DXGIFormat::BC6H_Typeless: 718 | case DXGIFormat::BC6H_UF16: 719 | case DXGIFormat::BC6H_SF16: 720 | case DXGIFormat::BC7_Typeless: 721 | case DXGIFormat::BC7_UNorm: 722 | case DXGIFormat::BC7_UNorm_SRGB: 723 | return 8; 724 | default: 725 | return 0; 726 | } 727 | } 728 | 729 | Result DDSFile::Load(const char* filepath) { 730 | std::ifstream ifs(filepath, std::ios_base::binary); 731 | if (!ifs.is_open()) { 732 | return Result::ErrorFileOpen; 733 | } 734 | 735 | return Load(ifs); 736 | } 737 | 738 | Result DDSFile::Load(std::istream& input) { 739 | m_dds.clear(); 740 | 741 | input.seekg(0, std::ios_base::beg); 742 | auto begPos = input.tellg(); 743 | input.seekg(0, std::ios_base::end); 744 | auto endPos = input.tellg(); 745 | input.seekg(0, std::ios_base::beg); 746 | 747 | auto fileSize = endPos - begPos; 748 | if (fileSize == 0) { 749 | return Result::ErrorRead; 750 | } 751 | std::vector dds(fileSize); 752 | 753 | input.read(reinterpret_cast(dds.data()), fileSize); 754 | 755 | if (input.bad()) { 756 | return Result::ErrorRead; 757 | } 758 | 759 | return Load(std::move(dds)); 760 | } 761 | 762 | Result DDSFile::Load(const uint8_t* data, size_t size) { 763 | std::vector dds(data, data + size); 764 | return Load(std::move(dds)); 765 | } 766 | 767 | Result DDSFile::Load(std::vector&& dds) { 768 | m_dds.clear(); 769 | 770 | if (dds.size() < 4) { 771 | return Result::ErrorSize; 772 | } 773 | 774 | for (int i = 0; i < 4; i++) { 775 | if (dds[i] != Magic[i]) { 776 | return Result::ErrorMagicWord; 777 | } 778 | } 779 | 780 | if ((sizeof(uint32_t) + sizeof(Header)) >= dds.size()) { 781 | return Result::ErrorSize; 782 | } 783 | auto header = 784 | reinterpret_cast(dds.data() + sizeof(uint32_t)); 785 | 786 | if (header->m_size != sizeof(Header) || 787 | header->m_pixelFormat.m_size != sizeof(PixelFormat)) { 788 | return Result::ErrorVerify; 789 | } 790 | bool dxt10Header = false; 791 | if ((header->m_pixelFormat.m_flags & 792 | uint32_t(PixelFormatFlagBits::FourCC)) && 793 | (MakeFourCC('D', 'X', '1', '0') == header->m_pixelFormat.m_fourCC)) { 794 | if ((sizeof(uint32_t) + sizeof(Header) + sizeof(HeaderDXT10)) >= 795 | dds.size()) { 796 | return Result::ErrorSize; 797 | } 798 | dxt10Header = true; 799 | } 800 | ptrdiff_t offset = sizeof(uint32_t) + sizeof(Header) + 801 | (dxt10Header ? sizeof(HeaderDXT10) : 0); 802 | 803 | m_height = header->m_height; 804 | m_width = header->m_width; 805 | m_texDim = TextureDimension::Unknown; 806 | m_arraySize = 1; 807 | m_format = DXGIFormat::Unknown; 808 | m_isCubemap = false; 809 | m_mipCount = header->m_mipMapCount; 810 | if (0 == m_mipCount) { 811 | m_mipCount = 1; 812 | } 813 | 814 | if (dxt10Header) { 815 | auto dxt10Header = reinterpret_cast( 816 | reinterpret_cast(header) + sizeof(Header)); 817 | 818 | m_arraySize = dxt10Header->m_arraySize; 819 | if (m_arraySize == 0) { 820 | return Result::ErrorInvalidData; 821 | } 822 | 823 | switch (dxt10Header->m_format) { 824 | case DXGIFormat::AI44: 825 | case DXGIFormat::IA44: 826 | case DXGIFormat::P8: 827 | case DXGIFormat::A8P8: 828 | return Result::ErrorNotSupported; 829 | default: 830 | if (GetBitsPerPixel(dxt10Header->m_format) == 0) { 831 | return Result::ErrorNotSupported; 832 | } 833 | } 834 | 835 | m_format = dxt10Header->m_format; 836 | 837 | switch (dxt10Header->m_resourceDimension) { 838 | case TextureDimension::Texture1D: 839 | if ((header->m_flags & uint32_t(HeaderFlagBits::Height) && 840 | (m_height != 1))) { 841 | return Result::ErrorInvalidData; 842 | } 843 | m_height = m_depth = 1; 844 | break; 845 | case TextureDimension::Texture2D: 846 | if (dxt10Header->m_miscFlag & 847 | uint32_t(DXT10MiscFlagBits::TextureCube)) { 848 | m_arraySize *= 6; 849 | m_isCubemap = true; 850 | } 851 | m_depth = 1; 852 | break; 853 | case TextureDimension::Texture3D: 854 | if (!(header->m_flags & uint32_t(HeaderFlagBits::Volume))) { 855 | return Result::ErrorInvalidData; 856 | } 857 | if (m_arraySize > 1) { 858 | return Result::ErrorNotSupported; 859 | } 860 | break; 861 | default: 862 | return Result::ErrorNotSupported; 863 | } 864 | 865 | m_texDim = dxt10Header->m_resourceDimension; 866 | } else { 867 | m_format = GetDXGIFormat(header->m_pixelFormat); 868 | if (m_format == DXGIFormat::Unknown) { 869 | return Result::ErrorNotSupported; 870 | } 871 | 872 | if (header->m_flags & uint32_t(HeaderFlagBits::Volume)) { 873 | m_texDim = TextureDimension::Texture3D; 874 | } else { 875 | auto caps2 = header->m_caps2 & 876 | uint32_t(HeaderCaps2FlagBits::CubemapAllFaces); 877 | if (caps2) { 878 | if (caps2 != uint32_t(HeaderCaps2FlagBits::CubemapAllFaces)) { 879 | return Result::ErrorNotSupported; 880 | } 881 | m_arraySize = 6; 882 | m_isCubemap = true; 883 | } 884 | 885 | m_depth = 1; 886 | m_texDim = TextureDimension::Texture2D; 887 | } 888 | } 889 | 890 | std::vector imageDatas(m_mipCount * m_arraySize); 891 | uint8_t* srcBits = dds.data() + offset; 892 | uint8_t* endBits = dds.data() + dds.size(); 893 | uint32_t idx = 0; 894 | for (uint32_t j = 0; j < m_arraySize; j++) { 895 | uint32_t w = m_width; 896 | uint32_t h = m_height; 897 | uint32_t d = m_depth; 898 | for (uint32_t i = 0; i < m_mipCount; i++) { 899 | uint32_t numBytes; 900 | uint32_t rowBytes; 901 | GetImageInfo(w, h, m_format, &numBytes, &rowBytes, nullptr); 902 | 903 | imageDatas[idx].m_width = w; 904 | imageDatas[idx].m_height = h; 905 | imageDatas[idx].m_depth = d; 906 | imageDatas[idx].m_mem = srcBits; 907 | imageDatas[idx].m_memPitch = rowBytes; 908 | imageDatas[idx].m_memSlicePitch = numBytes; 909 | idx++; 910 | 911 | if (srcBits + (numBytes * d) > endBits) { 912 | return Result::ErrorInvalidData; 913 | } 914 | srcBits += numBytes * d; 915 | w = std::max(1, w / 2); 916 | h = std::max(1, h / 2); 917 | d = std::max(1, d / 2); 918 | } 919 | } 920 | 921 | m_dds = std::move(dds); 922 | m_imageDatas = std::move(imageDatas); 923 | 924 | return Result::Success; 925 | } 926 | 927 | void DDSFile::GetImageInfo(uint32_t w, uint32_t h, DXGIFormat fmt, 928 | uint32_t* outNumBytes, uint32_t* outRowBytes, 929 | uint32_t* outNumRows) { 930 | uint32_t numBytes = 0; 931 | uint32_t rowBytes = 0; 932 | uint32_t numRows = 0; 933 | 934 | bool bc = false; 935 | bool packed = false; 936 | bool planar = false; 937 | uint32_t bpe = 0; 938 | switch (fmt) { 939 | case DXGIFormat::BC1_Typeless: 940 | case DXGIFormat::BC1_UNorm: 941 | case DXGIFormat::BC1_UNorm_SRGB: 942 | case DXGIFormat::BC4_Typeless: 943 | case DXGIFormat::BC4_UNorm: 944 | case DXGIFormat::BC4_SNorm: 945 | bc = true; 946 | bpe = 8; 947 | break; 948 | 949 | case DXGIFormat::BC2_Typeless: 950 | case DXGIFormat::BC2_UNorm: 951 | case DXGIFormat::BC2_UNorm_SRGB: 952 | case DXGIFormat::BC3_Typeless: 953 | case DXGIFormat::BC3_UNorm: 954 | case DXGIFormat::BC3_UNorm_SRGB: 955 | case DXGIFormat::BC5_Typeless: 956 | case DXGIFormat::BC5_UNorm: 957 | case DXGIFormat::BC5_SNorm: 958 | case DXGIFormat::BC6H_Typeless: 959 | case DXGIFormat::BC6H_UF16: 960 | case DXGIFormat::BC6H_SF16: 961 | case DXGIFormat::BC7_Typeless: 962 | case DXGIFormat::BC7_UNorm: 963 | case DXGIFormat::BC7_UNorm_SRGB: 964 | bc = true; 965 | bpe = 16; 966 | break; 967 | 968 | case DXGIFormat::R8G8_B8G8_UNorm: 969 | case DXGIFormat::G8R8_G8B8_UNorm: 970 | case DXGIFormat::YUY2: 971 | packed = true; 972 | bpe = 4; 973 | break; 974 | 975 | case DXGIFormat::Y210: 976 | case DXGIFormat::Y216: 977 | packed = true; 978 | bpe = 8; 979 | break; 980 | 981 | case DXGIFormat::NV12: 982 | case DXGIFormat::YUV420_OPAQUE: 983 | planar = true; 984 | bpe = 2; 985 | break; 986 | 987 | case DXGIFormat::P010: 988 | case DXGIFormat::P016: 989 | planar = true; 990 | bpe = 4; 991 | break; 992 | default: 993 | break; 994 | } 995 | 996 | if (bc) { 997 | uint32_t numBlocksWide = 0; 998 | if (w > 0) { 999 | numBlocksWide = std::max(1, (w + 3) / 4); 1000 | } 1001 | uint32_t numBlocksHigh = 0; 1002 | if (h > 0) { 1003 | numBlocksHigh = std::max(1, (h + 3) / 4); 1004 | } 1005 | rowBytes = numBlocksWide * bpe; 1006 | numRows = numBlocksHigh; 1007 | numBytes = rowBytes * numBlocksHigh; 1008 | } else if (packed) { 1009 | rowBytes = ((w + 1) >> 1) * bpe; 1010 | numRows = h; 1011 | numBytes = rowBytes * h; 1012 | } else if (fmt == DXGIFormat::NV11) { 1013 | rowBytes = ((w + 3) >> 2) * 4; 1014 | numRows = h * 2; 1015 | numBytes = rowBytes + numRows; 1016 | } else if (planar) { 1017 | rowBytes = ((w + 1) >> 1) * bpe; 1018 | numBytes = (rowBytes * h) + ((rowBytes * h + 1) >> 1); 1019 | numRows = h + ((h + 1) >> 1); 1020 | } else { 1021 | uint32_t bpp = GetBitsPerPixel(fmt); 1022 | rowBytes = (w * bpp + 7) / 8; 1023 | numRows = h; 1024 | numBytes = rowBytes * h; 1025 | } 1026 | 1027 | if (outNumBytes) { 1028 | *outNumBytes = numBytes; 1029 | } 1030 | if (outRowBytes) { 1031 | *outRowBytes = rowBytes; 1032 | } 1033 | if (outNumRows) { 1034 | *outNumRows = numRows; 1035 | } 1036 | } 1037 | 1038 | bool DDSFile::Flip() { 1039 | if (IsCompressed(m_format)) { 1040 | for (auto& imageData : m_imageDatas) { 1041 | if (!FlipCompressedImage(imageData)) { 1042 | return false; 1043 | } 1044 | } 1045 | } else { 1046 | for (auto& imageData : m_imageDatas) { 1047 | if (!FlipImage(imageData)) { 1048 | return false; 1049 | } 1050 | } 1051 | } 1052 | return true; 1053 | } 1054 | 1055 | bool DDSFile::FlipImage(ImageData& imageData) { 1056 | for (uint32_t y = 0; y < imageData.m_height / 2; y++) { 1057 | auto line0 = (uint8_t*)imageData.m_mem + y * imageData.m_memPitch; 1058 | auto line1 = (uint8_t*)imageData.m_mem + 1059 | (imageData.m_height - y - 1) * imageData.m_memPitch; 1060 | for (uint32_t i = 0; i < imageData.m_memPitch; i++) { 1061 | std::swap(*line0, *line1); 1062 | line0++; 1063 | line1++; 1064 | } 1065 | } 1066 | return true; 1067 | } 1068 | 1069 | bool DDSFile::FlipCompressedImage(ImageData& imageData) { 1070 | if (DXGIFormat::BC1_Typeless == m_format || 1071 | DXGIFormat::BC1_UNorm == m_format || 1072 | DXGIFormat::BC1_UNorm_SRGB == m_format) { 1073 | FlipCompressedImageBC1(imageData); 1074 | return true; 1075 | } else if (DXGIFormat::BC2_Typeless == m_format || 1076 | DXGIFormat::BC2_UNorm == m_format || 1077 | DXGIFormat::BC2_UNorm_SRGB == m_format) { 1078 | FlipCompressedImageBC2(imageData); 1079 | return true; 1080 | } else if (DXGIFormat::BC3_Typeless == m_format || 1081 | DXGIFormat::BC3_UNorm == m_format || 1082 | DXGIFormat::BC3_UNorm_SRGB == m_format) { 1083 | FlipCompressedImageBC3(imageData); 1084 | return true; 1085 | } else if (DXGIFormat::BC4_Typeless == m_format || 1086 | DXGIFormat::BC4_UNorm == m_format || 1087 | DXGIFormat::BC4_SNorm == m_format) { 1088 | FlipCompressedImageBC4(imageData); 1089 | return true; 1090 | } else if (DXGIFormat::BC5_Typeless == m_format || 1091 | DXGIFormat::BC5_UNorm == m_format || 1092 | DXGIFormat::BC5_SNorm == m_format) { 1093 | FlipCompressedImageBC5(imageData); 1094 | return true; 1095 | } 1096 | return false; 1097 | } 1098 | 1099 | void DDSFile::FlipCompressedImageBC1(ImageData& imageData) { 1100 | uint32_t numXBlocks = (imageData.m_width + 3) / 4; 1101 | uint32_t numYBlocks = (imageData.m_height + 3) / 4; 1102 | if (imageData.m_height == 1) { 1103 | } else if (imageData.m_height == 2) { 1104 | auto blocks = (BC1Block*)imageData.m_mem; 1105 | for (uint32_t x = 0; x < numXBlocks; x++) { 1106 | auto block = blocks + x; 1107 | std::swap(block->m_row0, block->m_row1); 1108 | std::swap(block->m_row2, block->m_row3); 1109 | } 1110 | } else { 1111 | for (uint32_t y = 0; y < (numYBlocks + 1) / 2; y++) { 1112 | auto blocks0 = (BC1Block*)((uint8_t*)imageData.m_mem + 1113 | imageData.m_memPitch * y); 1114 | auto blocks1 = 1115 | (BC1Block*)((uint8_t*)imageData.m_mem + 1116 | imageData.m_memPitch * (numYBlocks - y - 1)); 1117 | for (uint32_t x = 0; x < numXBlocks; x++) { 1118 | auto block0 = blocks0 + x; 1119 | auto block1 = blocks1 + x; 1120 | if (blocks0 != blocks1) { 1121 | std::swap(block0->m_color0, block1->m_color0); 1122 | std::swap(block0->m_color1, block1->m_color1); 1123 | std::swap(block0->m_row0, block1->m_row3); 1124 | std::swap(block0->m_row1, block1->m_row2); 1125 | std::swap(block0->m_row2, block1->m_row1); 1126 | std::swap(block0->m_row3, block1->m_row0); 1127 | } else { 1128 | std::swap(block0->m_row0, block0->m_row3); 1129 | std::swap(block0->m_row1, block0->m_row2); 1130 | } 1131 | } 1132 | } 1133 | } 1134 | } 1135 | 1136 | void DDSFile::FlipCompressedImageBC2(ImageData& imageData) { 1137 | uint32_t numXBlocks = (imageData.m_width + 3) / 4; 1138 | uint32_t numYBlocks = (imageData.m_height + 3) / 4; 1139 | if (imageData.m_height == 1) { 1140 | } else if (imageData.m_height == 2) { 1141 | auto blocks = (BC2Block*)imageData.m_mem; 1142 | for (uint32_t x = 0; x < numXBlocks; x++) { 1143 | auto block = blocks + x; 1144 | std::swap(block->m_alphaRow0, block->m_alphaRow1); 1145 | std::swap(block->m_alphaRow2, block->m_alphaRow3); 1146 | std::swap(block->m_row0, block->m_row1); 1147 | std::swap(block->m_row2, block->m_row3); 1148 | } 1149 | } else { 1150 | for (uint32_t y = 0; y < (numYBlocks + 1) / 2; y++) { 1151 | auto blocks0 = (BC2Block*)((uint8_t*)imageData.m_mem + 1152 | imageData.m_memPitch * y); 1153 | auto blocks1 = 1154 | (BC2Block*)((uint8_t*)imageData.m_mem + 1155 | imageData.m_memPitch * (numYBlocks - y - 1)); 1156 | for (uint32_t x = 0; x < numXBlocks; x++) { 1157 | auto block0 = blocks0 + x; 1158 | auto block1 = blocks1 + x; 1159 | if (block0 != block1) { 1160 | std::swap(block0->m_alphaRow0, block1->m_alphaRow3); 1161 | std::swap(block0->m_alphaRow1, block1->m_alphaRow2); 1162 | std::swap(block0->m_alphaRow2, block1->m_alphaRow1); 1163 | std::swap(block0->m_alphaRow3, block1->m_alphaRow0); 1164 | std::swap(block0->m_color0, block1->m_color0); 1165 | std::swap(block0->m_color1, block1->m_color1); 1166 | std::swap(block0->m_row0, block1->m_row3); 1167 | std::swap(block0->m_row1, block1->m_row2); 1168 | std::swap(block0->m_row2, block1->m_row1); 1169 | std::swap(block0->m_row3, block1->m_row0); 1170 | } else { 1171 | std::swap(block0->m_alphaRow0, block0->m_alphaRow3); 1172 | std::swap(block0->m_alphaRow1, block0->m_alphaRow2); 1173 | std::swap(block0->m_row0, block0->m_row3); 1174 | std::swap(block0->m_row1, block0->m_row2); 1175 | } 1176 | } 1177 | } 1178 | } 1179 | } 1180 | 1181 | void DDSFile::FlipCompressedImageBC3(ImageData& imageData) { 1182 | uint32_t numXBlocks = (imageData.m_width + 3) / 4; 1183 | uint32_t numYBlocks = (imageData.m_height + 3) / 4; 1184 | if (imageData.m_height == 1) { 1185 | } else if (imageData.m_height == 2) { 1186 | auto blocks = (BC3Block*)imageData.m_mem; 1187 | for (uint32_t x = 0; x < numXBlocks; x++) { 1188 | auto block = blocks + x; 1189 | uint8_t r0 = (block->m_alphaR1 >> 4) | (block->m_alphaR2 << 4); 1190 | uint8_t r1 = (block->m_alphaR2 >> 4) | (block->m_alphaR0 << 4); 1191 | uint8_t r2 = (block->m_alphaR0 >> 4) | (block->m_alphaR1 << 4); 1192 | uint8_t r3 = (block->m_alphaR4 >> 4) | (block->m_alphaR5 << 4); 1193 | uint8_t r4 = (block->m_alphaR5 >> 4) | (block->m_alphaR3 << 4); 1194 | uint8_t r5 = (block->m_alphaR3 >> 4) | (block->m_alphaR4 << 4); 1195 | 1196 | block->m_alphaR0 = r0; 1197 | block->m_alphaR1 = r1; 1198 | block->m_alphaR2 = r2; 1199 | block->m_alphaR3 = r3; 1200 | block->m_alphaR4 = r4; 1201 | block->m_alphaR5 = r5; 1202 | std::swap(block->m_row0, block->m_row1); 1203 | std::swap(block->m_row2, block->m_row3); 1204 | } 1205 | } else { 1206 | for (uint32_t y = 0; y < (numYBlocks + 1) / 2; y++) { 1207 | auto blocks0 = (BC3Block*)((uint8_t*)imageData.m_mem + 1208 | imageData.m_memPitch * y); 1209 | auto blocks1 = 1210 | (BC3Block*)((uint8_t*)imageData.m_mem + 1211 | imageData.m_memPitch * (numYBlocks - y - 1)); 1212 | for (uint32_t x = 0; x < numXBlocks; x++) { 1213 | auto block0 = blocks0 + x; 1214 | auto block1 = blocks1 + x; 1215 | if (block0 != block1) { 1216 | std::swap(block0->m_alpha0, block1->m_alpha0); 1217 | std::swap(block0->m_alpha1, block1->m_alpha1); 1218 | 1219 | uint8_t r0[6]; 1220 | r0[0] = (block0->m_alphaR4 >> 4) | (block0->m_alphaR5 << 4); 1221 | r0[1] = (block0->m_alphaR5 >> 4) | (block0->m_alphaR3 << 4); 1222 | r0[2] = (block0->m_alphaR3 >> 4) | (block0->m_alphaR4 << 4); 1223 | r0[3] = (block0->m_alphaR1 >> 4) | (block0->m_alphaR2 << 4); 1224 | r0[4] = (block0->m_alphaR2 >> 4) | (block0->m_alphaR0 << 4); 1225 | r0[5] = (block0->m_alphaR0 >> 4) | (block0->m_alphaR1 << 4); 1226 | uint8_t r1[6]; 1227 | r1[0] = (block1->m_alphaR4 >> 4) | (block1->m_alphaR5 << 4); 1228 | r1[1] = (block1->m_alphaR5 >> 4) | (block1->m_alphaR3 << 4); 1229 | r1[2] = (block1->m_alphaR3 >> 4) | (block1->m_alphaR4 << 4); 1230 | r1[3] = (block1->m_alphaR1 >> 4) | (block1->m_alphaR2 << 4); 1231 | r1[4] = (block1->m_alphaR2 >> 4) | (block1->m_alphaR0 << 4); 1232 | r1[5] = (block1->m_alphaR0 >> 4) | (block1->m_alphaR1 << 4); 1233 | 1234 | block0->m_alphaR0 = r1[0]; 1235 | block0->m_alphaR1 = r1[1]; 1236 | block0->m_alphaR2 = r1[2]; 1237 | block0->m_alphaR3 = r1[3]; 1238 | block0->m_alphaR4 = r1[4]; 1239 | block0->m_alphaR5 = r1[5]; 1240 | 1241 | block1->m_alphaR0 = r0[0]; 1242 | block1->m_alphaR1 = r0[1]; 1243 | block1->m_alphaR2 = r0[2]; 1244 | block1->m_alphaR3 = r0[3]; 1245 | block1->m_alphaR4 = r0[4]; 1246 | block1->m_alphaR5 = r0[5]; 1247 | 1248 | std::swap(block0->m_color0, block1->m_color0); 1249 | std::swap(block0->m_color1, block1->m_color1); 1250 | std::swap(block0->m_row0, block1->m_row3); 1251 | std::swap(block0->m_row1, block1->m_row2); 1252 | std::swap(block0->m_row2, block1->m_row1); 1253 | std::swap(block0->m_row3, block1->m_row0); 1254 | } else { 1255 | uint8_t r0[6]; 1256 | r0[0] = (block0->m_alphaR4 >> 4) | (block0->m_alphaR5 << 4); 1257 | r0[1] = (block0->m_alphaR5 >> 4) | (block0->m_alphaR3 << 4); 1258 | r0[2] = (block0->m_alphaR3 >> 4) | (block0->m_alphaR4 << 4); 1259 | r0[3] = (block0->m_alphaR1 >> 4) | (block0->m_alphaR2 << 4); 1260 | r0[4] = (block0->m_alphaR2 >> 4) | (block0->m_alphaR0 << 4); 1261 | r0[5] = (block0->m_alphaR0 >> 4) | (block0->m_alphaR1 << 4); 1262 | 1263 | block0->m_alphaR0 = r0[0]; 1264 | block0->m_alphaR1 = r0[1]; 1265 | block0->m_alphaR2 = r0[2]; 1266 | block0->m_alphaR3 = r0[3]; 1267 | block0->m_alphaR4 = r0[4]; 1268 | block0->m_alphaR5 = r0[5]; 1269 | 1270 | std::swap(block0->m_row0, block0->m_row3); 1271 | std::swap(block0->m_row1, block0->m_row2); 1272 | } 1273 | } 1274 | } 1275 | } 1276 | } 1277 | 1278 | void DDSFile::FlipCompressedImageBC4(ImageData& imageData) { 1279 | uint32_t numXBlocks = (imageData.m_width + 3) / 4; 1280 | uint32_t numYBlocks = (imageData.m_height + 3) / 4; 1281 | if (imageData.m_height == 1) { 1282 | } else if (imageData.m_height == 2) { 1283 | auto blocks = (BC4Block*)imageData.m_mem; 1284 | for (uint32_t x = 0; x < numXBlocks; x++) { 1285 | auto block = blocks + x; 1286 | uint8_t r0 = (block->m_redR1 >> 4) | (block->m_redR2 << 4); 1287 | uint8_t r1 = (block->m_redR2 >> 4) | (block->m_redR0 << 4); 1288 | uint8_t r2 = (block->m_redR0 >> 4) | (block->m_redR1 << 4); 1289 | uint8_t r3 = (block->m_redR4 >> 4) | (block->m_redR5 << 4); 1290 | uint8_t r4 = (block->m_redR5 >> 4) | (block->m_redR3 << 4); 1291 | uint8_t r5 = (block->m_redR3 >> 4) | (block->m_redR4 << 4); 1292 | 1293 | block->m_redR0 = r0; 1294 | block->m_redR1 = r1; 1295 | block->m_redR2 = r2; 1296 | block->m_redR3 = r3; 1297 | block->m_redR4 = r4; 1298 | block->m_redR5 = r5; 1299 | } 1300 | } else { 1301 | for (uint32_t y = 0; y < (numYBlocks + 1) / 2; y++) { 1302 | auto blocks0 = (BC4Block*)((uint8_t*)imageData.m_mem + 1303 | imageData.m_memPitch * y); 1304 | auto blocks1 = 1305 | (BC4Block*)((uint8_t*)imageData.m_mem + 1306 | imageData.m_memPitch * (numYBlocks - y - 1)); 1307 | for (uint32_t x = 0; x < numXBlocks; x++) { 1308 | auto block0 = blocks0 + x; 1309 | auto block1 = blocks1 + x; 1310 | if (block0 != block1) { 1311 | std::swap(block0->m_red0, block1->m_red0); 1312 | std::swap(block0->m_red1, block1->m_red1); 1313 | 1314 | uint8_t r0[6]; 1315 | r0[0] = (block0->m_redR4 >> 4) | (block0->m_redR5 << 4); 1316 | r0[1] = (block0->m_redR5 >> 4) | (block0->m_redR3 << 4); 1317 | r0[2] = (block0->m_redR3 >> 4) | (block0->m_redR4 << 4); 1318 | r0[3] = (block0->m_redR1 >> 4) | (block0->m_redR2 << 4); 1319 | r0[4] = (block0->m_redR2 >> 4) | (block0->m_redR0 << 4); 1320 | r0[5] = (block0->m_redR0 >> 4) | (block0->m_redR1 << 4); 1321 | uint8_t r1[6]; 1322 | r1[0] = (block1->m_redR4 >> 4) | (block1->m_redR5 << 4); 1323 | r1[1] = (block1->m_redR5 >> 4) | (block1->m_redR3 << 4); 1324 | r1[2] = (block1->m_redR3 >> 4) | (block1->m_redR4 << 4); 1325 | r1[3] = (block1->m_redR1 >> 4) | (block1->m_redR2 << 4); 1326 | r1[4] = (block1->m_redR2 >> 4) | (block1->m_redR0 << 4); 1327 | r1[5] = (block1->m_redR0 >> 4) | (block1->m_redR1 << 4); 1328 | 1329 | block0->m_redR0 = r1[0]; 1330 | block0->m_redR1 = r1[1]; 1331 | block0->m_redR2 = r1[2]; 1332 | block0->m_redR3 = r1[3]; 1333 | block0->m_redR4 = r1[4]; 1334 | block0->m_redR5 = r1[5]; 1335 | 1336 | block1->m_redR0 = r0[0]; 1337 | block1->m_redR1 = r0[1]; 1338 | block1->m_redR2 = r0[2]; 1339 | block1->m_redR3 = r0[3]; 1340 | block1->m_redR4 = r0[4]; 1341 | block1->m_redR5 = r0[5]; 1342 | 1343 | } else { 1344 | uint8_t r0[6]; 1345 | r0[0] = (block0->m_redR4 >> 4) | (block0->m_redR5 << 4); 1346 | r0[1] = (block0->m_redR5 >> 4) | (block0->m_redR3 << 4); 1347 | r0[2] = (block0->m_redR3 >> 4) | (block0->m_redR4 << 4); 1348 | r0[3] = (block0->m_redR1 >> 4) | (block0->m_redR2 << 4); 1349 | r0[4] = (block0->m_redR2 >> 4) | (block0->m_redR0 << 4); 1350 | r0[5] = (block0->m_redR0 >> 4) | (block0->m_redR1 << 4); 1351 | 1352 | block0->m_redR0 = r0[0]; 1353 | block0->m_redR1 = r0[1]; 1354 | block0->m_redR2 = r0[2]; 1355 | block0->m_redR3 = r0[3]; 1356 | block0->m_redR4 = r0[4]; 1357 | block0->m_redR5 = r0[5]; 1358 | } 1359 | } 1360 | } 1361 | } 1362 | } 1363 | 1364 | void DDSFile::FlipCompressedImageBC5(ImageData& imageData) { 1365 | uint32_t numXBlocks = (imageData.m_width + 3) / 4; 1366 | uint32_t numYBlocks = (imageData.m_height + 3) / 4; 1367 | if (imageData.m_height == 1) { 1368 | } else if (imageData.m_height == 2) { 1369 | auto blocks = (BC5Block*)imageData.m_mem; 1370 | for (uint32_t x = 0; x < numXBlocks; x++) { 1371 | auto block = blocks + x; 1372 | uint8_t r0 = (block->m_redR1 >> 4) | (block->m_redR2 << 4); 1373 | uint8_t r1 = (block->m_redR2 >> 4) | (block->m_redR0 << 4); 1374 | uint8_t r2 = (block->m_redR0 >> 4) | (block->m_redR1 << 4); 1375 | uint8_t r3 = (block->m_redR4 >> 4) | (block->m_redR5 << 4); 1376 | uint8_t r4 = (block->m_redR5 >> 4) | (block->m_redR3 << 4); 1377 | uint8_t r5 = (block->m_redR3 >> 4) | (block->m_redR4 << 4); 1378 | 1379 | block->m_redR0 = r0; 1380 | block->m_redR1 = r1; 1381 | block->m_redR2 = r2; 1382 | block->m_redR3 = r3; 1383 | block->m_redR4 = r4; 1384 | block->m_redR5 = r5; 1385 | 1386 | uint8_t g0 = (block->m_greenR1 >> 4) | (block->m_greenR2 << 4); 1387 | uint8_t g1 = (block->m_greenR2 >> 4) | (block->m_greenR0 << 4); 1388 | uint8_t g2 = (block->m_greenR0 >> 4) | (block->m_greenR1 << 4); 1389 | uint8_t g3 = (block->m_greenR4 >> 4) | (block->m_greenR5 << 4); 1390 | uint8_t g4 = (block->m_greenR5 >> 4) | (block->m_greenR3 << 4); 1391 | uint8_t g5 = (block->m_greenR3 >> 4) | (block->m_greenR4 << 4); 1392 | 1393 | block->m_greenR0 = g0; 1394 | block->m_greenR1 = g1; 1395 | block->m_greenR2 = g2; 1396 | block->m_greenR3 = g3; 1397 | block->m_greenR4 = g4; 1398 | block->m_greenR5 = g5; 1399 | } 1400 | } else { 1401 | for (uint32_t y = 0; y < (numYBlocks + 1) / 2; y++) { 1402 | auto blocks0 = (BC5Block*)((uint8_t*)imageData.m_mem + 1403 | imageData.m_memPitch * y); 1404 | auto blocks1 = 1405 | (BC5Block*)((uint8_t*)imageData.m_mem + 1406 | imageData.m_memPitch * (numYBlocks - y - 1)); 1407 | for (uint32_t x = 0; x < numXBlocks; x++) { 1408 | auto block0 = blocks0 + x; 1409 | auto block1 = blocks1 + x; 1410 | if (block0 != block1) { 1411 | std::swap(block0->m_red0, block1->m_red0); 1412 | std::swap(block0->m_red1, block1->m_red1); 1413 | 1414 | uint8_t r0[6]; 1415 | r0[0] = (block0->m_redR4 >> 4) | (block0->m_redR5 << 4); 1416 | r0[1] = (block0->m_redR5 >> 4) | (block0->m_redR3 << 4); 1417 | r0[2] = (block0->m_redR3 >> 4) | (block0->m_redR4 << 4); 1418 | r0[3] = (block0->m_redR1 >> 4) | (block0->m_redR2 << 4); 1419 | r0[4] = (block0->m_redR2 >> 4) | (block0->m_redR0 << 4); 1420 | r0[5] = (block0->m_redR0 >> 4) | (block0->m_redR1 << 4); 1421 | uint8_t r1[6]; 1422 | r1[0] = (block1->m_redR4 >> 4) | (block1->m_redR5 << 4); 1423 | r1[1] = (block1->m_redR5 >> 4) | (block1->m_redR3 << 4); 1424 | r1[2] = (block1->m_redR3 >> 4) | (block1->m_redR4 << 4); 1425 | r1[3] = (block1->m_redR1 >> 4) | (block1->m_redR2 << 4); 1426 | r1[4] = (block1->m_redR2 >> 4) | (block1->m_redR0 << 4); 1427 | r1[5] = (block1->m_redR0 >> 4) | (block1->m_redR1 << 4); 1428 | 1429 | block0->m_redR0 = r1[0]; 1430 | block0->m_redR1 = r1[1]; 1431 | block0->m_redR2 = r1[2]; 1432 | block0->m_redR3 = r1[3]; 1433 | block0->m_redR4 = r1[4]; 1434 | block0->m_redR5 = r1[5]; 1435 | 1436 | block1->m_redR0 = r0[0]; 1437 | block1->m_redR1 = r0[1]; 1438 | block1->m_redR2 = r0[2]; 1439 | block1->m_redR3 = r0[3]; 1440 | block1->m_redR4 = r0[4]; 1441 | block1->m_redR5 = r0[5]; 1442 | 1443 | std::swap(block0->m_green0, block1->m_green0); 1444 | std::swap(block0->m_green1, block1->m_green1); 1445 | 1446 | uint8_t g0[6]; 1447 | g0[0] = (block0->m_greenR4 >> 4) | (block0->m_greenR5 << 4); 1448 | g0[1] = (block0->m_greenR5 >> 4) | (block0->m_greenR3 << 4); 1449 | g0[2] = (block0->m_greenR3 >> 4) | (block0->m_greenR4 << 4); 1450 | g0[3] = (block0->m_greenR1 >> 4) | (block0->m_greenR2 << 4); 1451 | g0[4] = (block0->m_greenR2 >> 4) | (block0->m_greenR0 << 4); 1452 | g0[5] = (block0->m_greenR0 >> 4) | (block0->m_greenR1 << 4); 1453 | uint8_t g1[6]; 1454 | g1[0] = (block1->m_greenR4 >> 4) | (block1->m_greenR5 << 4); 1455 | g1[1] = (block1->m_greenR5 >> 4) | (block1->m_greenR3 << 4); 1456 | g1[2] = (block1->m_greenR3 >> 4) | (block1->m_greenR4 << 4); 1457 | g1[3] = (block1->m_greenR1 >> 4) | (block1->m_greenR2 << 4); 1458 | g1[4] = (block1->m_greenR2 >> 4) | (block1->m_greenR0 << 4); 1459 | g1[5] = (block1->m_greenR0 >> 4) | (block1->m_greenR1 << 4); 1460 | 1461 | block0->m_greenR0 = g1[0]; 1462 | block0->m_greenR1 = g1[1]; 1463 | block0->m_greenR2 = g1[2]; 1464 | block0->m_greenR3 = g1[3]; 1465 | block0->m_greenR4 = g1[4]; 1466 | block0->m_greenR5 = g1[5]; 1467 | 1468 | block1->m_greenR0 = g0[0]; 1469 | block1->m_greenR1 = g0[1]; 1470 | block1->m_greenR2 = g0[2]; 1471 | block1->m_greenR3 = g0[3]; 1472 | block1->m_greenR4 = g0[4]; 1473 | block1->m_greenR5 = g0[5]; 1474 | } else { 1475 | uint8_t r0[6]; 1476 | r0[0] = (block0->m_redR4 >> 4) | (block0->m_redR5 << 4); 1477 | r0[1] = (block0->m_redR5 >> 4) | (block0->m_redR3 << 4); 1478 | r0[2] = (block0->m_redR3 >> 4) | (block0->m_redR4 << 4); 1479 | r0[3] = (block0->m_redR1 >> 4) | (block0->m_redR2 << 4); 1480 | r0[4] = (block0->m_redR2 >> 4) | (block0->m_redR0 << 4); 1481 | r0[5] = (block0->m_redR0 >> 4) | (block0->m_redR1 << 4); 1482 | 1483 | block0->m_redR0 = r0[0]; 1484 | block0->m_redR1 = r0[1]; 1485 | block0->m_redR2 = r0[2]; 1486 | block0->m_redR3 = r0[3]; 1487 | block0->m_redR4 = r0[4]; 1488 | block0->m_redR5 = r0[5]; 1489 | 1490 | uint8_t g0[6]; 1491 | g0[0] = (block0->m_greenR4 >> 4) | (block0->m_greenR5 << 4); 1492 | g0[1] = (block0->m_greenR5 >> 4) | (block0->m_greenR3 << 4); 1493 | g0[2] = (block0->m_greenR3 >> 4) | (block0->m_greenR4 << 4); 1494 | g0[3] = (block0->m_greenR1 >> 4) | (block0->m_greenR2 << 4); 1495 | g0[4] = (block0->m_greenR2 >> 4) | (block0->m_greenR0 << 4); 1496 | g0[5] = (block0->m_greenR0 >> 4) | (block0->m_greenR1 << 4); 1497 | 1498 | block0->m_greenR0 = g0[0]; 1499 | block0->m_greenR1 = g0[1]; 1500 | block0->m_greenR2 = g0[2]; 1501 | block0->m_greenR3 = g0[3]; 1502 | block0->m_greenR4 = g0[4]; 1503 | block0->m_greenR5 = g0[5]; 1504 | } 1505 | } 1506 | } 1507 | } 1508 | } 1509 | 1510 | } // namespace tinyddsloader 1511 | 1512 | #endif // !TINYDDSLOADER_IMPLEMENTATION 1513 | 1514 | #endif // !TINYDDSLOADER_H_ 1515 | --------------------------------------------------------------------------------