summaryrefslogtreecommitdiffstats
path: root/src/Runtime
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2019-06-03 14:00:07 +0300
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2019-06-03 14:01:18 +0300
commit32edde39e5b0e4fa15eda28b7b69c1f713b27850 (patch)
treec41480bbb06377f3a79d13c465a53435cccb9de4 /src/Runtime
parentc36739204786bd90df6e2ef5a8be78c980240bdd (diff)
parent01cfc8025119609803b3fc00b1e8ca5bc56e84d0 (diff)
Merge "Merge branch '2.4'"
Diffstat (limited to 'src/Runtime')
-rw-r--r--src/Runtime/Qt3DSRuntimeStatic/Qt3DSRuntimeStatic.pro656
-rw-r--r--src/Runtime/Runtime.pro9
-rw-r--r--src/Runtime/api/studio3d/q3dsdatainput.cpp192
-rw-r--r--src/Runtime/api/studio3d/q3dsdataoutput.cpp118
-rw-r--r--src/Runtime/api/studio3d/q3dswidget.cpp332
-rw-r--r--src/Runtime/api/studio3d/q3dswidget.h92
-rw-r--r--src/Runtime/commoninclude.pri84
-rw-r--r--src/Runtime/ogl-runtime/commoninclude.pri82
-rw-r--r--src/Runtime/ogl-runtime/commonplatform.pri307
-rw-r--r--src/Runtime/ogl-runtime/ogl-runtime.pro6
-rw-r--r--src/Runtime/ogl-runtime/platformres.qrc (renamed from src/Runtime/platformres.qrc)0
-rw-r--r--src/Runtime/ogl-runtime/res.qrc (renamed from src/Runtime/res.qrc)0
-rw-r--r--src/Runtime/ogl-runtime/res/DataModelMetadata/en-us/MetaData.xml (renamed from src/Runtime/res/DataModelMetadata/en-us/MetaData.xml)0
-rw-r--r--src/Runtime/ogl-runtime/res/Font/TitilliumWeb-Regular.ttf (renamed from src/Runtime/res/Font/TitilliumWeb-Regular.ttf)bin63752 -> 63752 bytes
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/Fxaa3_11.glsllib (renamed from src/Runtime/res/effectlib/Fxaa3_11.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/Fxaa3_8.glsllib (renamed from src/Runtime/res/effectlib/Fxaa3_8.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/SMAA.glsllib (renamed from src/Runtime/res/effectlib/SMAA.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/SSAOCustomMaterial.glsllib (renamed from src/Runtime/res/effectlib/SSAOCustomMaterial.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/abbeNumberIOR.glsllib (renamed from src/Runtime/res/effectlib/abbeNumberIOR.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/anisotropyConversion.glsllib (renamed from src/Runtime/res/effectlib/anisotropyConversion.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/average.glsllib (renamed from src/Runtime/res/effectlib/average.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/blendColorLayers.glsllib (renamed from src/Runtime/res/effectlib/blendColorLayers.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/blur.glsllib (renamed from src/Runtime/res/effectlib/blur.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/calculateRoughness.glsllib (renamed from src/Runtime/res/effectlib/calculateRoughness.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/coordinateSource.glsllib (renamed from src/Runtime/res/effectlib/coordinateSource.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/cube.glsllib (renamed from src/Runtime/res/effectlib/cube.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/customCurveLayer.glsllib (renamed from src/Runtime/res/effectlib/customCurveLayer.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/customMaterial.glsllib (renamed from src/Runtime/res/effectlib/customMaterial.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/customMaterialFragBody.glsllib (renamed from src/Runtime/res/effectlib/customMaterialFragBody.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/customMaterialFragBodyAO.glsllib (renamed from src/Runtime/res/effectlib/customMaterialFragBodyAO.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/defaultMaterialBumpNoLod.glsllib (renamed from src/Runtime/res/effectlib/defaultMaterialBumpNoLod.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/defaultMaterialFileBumpTexture.glsllib (renamed from src/Runtime/res/effectlib/defaultMaterialFileBumpTexture.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/defaultMaterialFileDisplacementTexture.glsllib (renamed from src/Runtime/res/effectlib/defaultMaterialFileDisplacementTexture.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/defaultMaterialFileNormalTexture.glsllib (renamed from src/Runtime/res/effectlib/defaultMaterialFileNormalTexture.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/defaultMaterialFresnel.glsllib (renamed from src/Runtime/res/effectlib/defaultMaterialFresnel.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/defaultMaterialLighting.glsllib (renamed from src/Runtime/res/effectlib/defaultMaterialLighting.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/defaultMaterialPhysGlossyBSDF.glsllib (renamed from src/Runtime/res/effectlib/defaultMaterialPhysGlossyBSDF.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/depthpass.glsllib (renamed from src/Runtime/res/effectlib/depthpass.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/dfTint.glsllib (renamed from src/Runtime/res/effectlib/dfTint.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/diffuseReflectionBSDF.glsllib (renamed from src/Runtime/res/effectlib/diffuseReflectionBSDF.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/diffuseTransmissionBSDF.glsllib (renamed from src/Runtime/res/effectlib/diffuseTransmissionBSDF.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/directionalFactor.glsllib (renamed from src/Runtime/res/effectlib/directionalFactor.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/distancefieldtext.frag (renamed from src/Runtime/res/effectlib/distancefieldtext.frag)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/distancefieldtext.vert (renamed from src/Runtime/res/effectlib/distancefieldtext.vert)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_core.frag (renamed from src/Runtime/res/effectlib/distancefieldtext_core.frag)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_core.vert (renamed from src/Runtime/res/effectlib/distancefieldtext_core.vert)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_dropshadow.frag (renamed from src/Runtime/res/effectlib/distancefieldtext_dropshadow.frag)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_dropshadow.vert (renamed from src/Runtime/res/effectlib/distancefieldtext_dropshadow.vert)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_dropshadow_core.frag (renamed from src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.frag)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_dropshadow_core.vert (renamed from src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.vert)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/effect.glsllib (renamed from src/Runtime/res/effectlib/effect.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/evalBakedShadowMap.glsllib (renamed from src/Runtime/res/effectlib/evalBakedShadowMap.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/evalEnvironmentMap.glsllib (renamed from src/Runtime/res/effectlib/evalEnvironmentMap.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/evalLightmaps.glsllib (renamed from src/Runtime/res/effectlib/evalLightmaps.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/fileBumpTexture.glsllib (renamed from src/Runtime/res/effectlib/fileBumpTexture.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/fileDisplacementTexture.glsllib (renamed from src/Runtime/res/effectlib/fileDisplacementTexture.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/fileTexture.glsllib (renamed from src/Runtime/res/effectlib/fileTexture.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/flakeNoiseBumpTexture.glsllib (renamed from src/Runtime/res/effectlib/flakeNoiseBumpTexture.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/flakeNoiseTexture.glsllib (renamed from src/Runtime/res/effectlib/flakeNoiseTexture.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/fresnelLayer.glsllib (renamed from src/Runtime/res/effectlib/fresnelLayer.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/funcareaLightVars.glsllib (renamed from src/Runtime/res/effectlib/funcareaLightVars.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/funccalculateDiffuseAreaOld.glsllib (renamed from src/Runtime/res/effectlib/funccalculateDiffuseAreaOld.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/funccalculatePointLightAttenuation.glsllib (renamed from src/Runtime/res/effectlib/funccalculatePointLightAttenuation.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/funccomputeMicroHit.glsllib (renamed from src/Runtime/res/effectlib/funccomputeMicroHit.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/funcdiffuseReflectionBSDF.glsllib (renamed from src/Runtime/res/effectlib/funcdiffuseReflectionBSDF.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/funcdiffuseReflectionWrapBSDF.glsllib (renamed from src/Runtime/res/effectlib/funcdiffuseReflectionWrapBSDF.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/funcgetTransformedUVCoords.glsllib (renamed from src/Runtime/res/effectlib/funcgetTransformedUVCoords.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/funcsampleAreaGlossyDefault.glsllib (renamed from src/Runtime/res/effectlib/funcsampleAreaGlossyDefault.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/funcsampleLightVars.glsllib (renamed from src/Runtime/res/effectlib/funcsampleLightVars.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/funcspecularBSDF.glsllib (renamed from src/Runtime/res/effectlib/funcspecularBSDF.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/gles2/SSAOCustomMaterial.glsllib (renamed from src/Runtime/res/effectlib/gles2/SSAOCustomMaterial.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/gles2/defaultMaterialBumpNoLod.glsllib (renamed from src/Runtime/res/effectlib/gles2/defaultMaterialBumpNoLod.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/gles2/evalEnvironmentMap.glsllib (renamed from src/Runtime/res/effectlib/gles2/evalEnvironmentMap.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/gles2/funcareaLightVars.glsllib (renamed from src/Runtime/res/effectlib/gles2/funcareaLightVars.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/gles2/funcsampleLightVars.glsllib (renamed from src/Runtime/res/effectlib/gles2/funcsampleLightVars.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/gles2/microfacetBSDF.glsllib (renamed from src/Runtime/res/effectlib/gles2/microfacetBSDF.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/gles2/monoChannel.glsllib (renamed from src/Runtime/res/effectlib/gles2/monoChannel.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/gles2/refraction.glsllib (renamed from src/Runtime/res/effectlib/gles2/refraction.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/gles2/sampleProbe.glsllib (renamed from src/Runtime/res/effectlib/gles2/sampleProbe.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/gles2/shadowMapping.glsllib (renamed from src/Runtime/res/effectlib/gles2/shadowMapping.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/gles2/tangentSpaceNormalTexture.glsllib (renamed from src/Runtime/res/effectlib/gles2/tangentSpaceNormalTexture.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/gradient3Recolor.glsllib (renamed from src/Runtime/res/effectlib/gradient3Recolor.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/gradient3Texture.glsllib (renamed from src/Runtime/res/effectlib/gradient3Texture.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/gradientGetPosition.glsllib (renamed from src/Runtime/res/effectlib/gradientGetPosition.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/luminance.glsllib (renamed from src/Runtime/res/effectlib/luminance.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/miNoise.glsllib (renamed from src/Runtime/res/effectlib/miNoise.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/microfacetBSDF.glsllib (renamed from src/Runtime/res/effectlib/microfacetBSDF.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/monoChannel.glsllib (renamed from src/Runtime/res/effectlib/monoChannel.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/normalizedMix.glsllib (renamed from src/Runtime/res/effectlib/normalizedMix.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/perlinNoise.glsllib (renamed from src/Runtime/res/effectlib/perlinNoise.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/perlinNoiseBumpTexture.glsllib (renamed from src/Runtime/res/effectlib/perlinNoiseBumpTexture.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/perlinNoiseTexture.glsllib (renamed from src/Runtime/res/effectlib/perlinNoiseTexture.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/physGlossyBSDF.glsllib (renamed from src/Runtime/res/effectlib/physGlossyBSDF.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/random255.glsllib (renamed from src/Runtime/res/effectlib/random255.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/refraction.glsllib (renamed from src/Runtime/res/effectlib/refraction.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/rotationTranslationScale.glsllib (renamed from src/Runtime/res/effectlib/rotationTranslationScale.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/sampleArea.glsllib (renamed from src/Runtime/res/effectlib/sampleArea.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/sampleLight.glsllib (renamed from src/Runtime/res/effectlib/sampleLight.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/sampleProbe.glsllib (renamed from src/Runtime/res/effectlib/sampleProbe.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/screenSpaceAO.glsllib (renamed from src/Runtime/res/effectlib/screenSpaceAO.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/screenSpaceDO.glsllib (renamed from src/Runtime/res/effectlib/screenSpaceDO.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/shadowMapping.glsllib (renamed from src/Runtime/res/effectlib/shadowMapping.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/shadowMappingFragment.glsllib (renamed from src/Runtime/res/effectlib/shadowMappingFragment.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/simpleGlossyBSDF.glsllib (renamed from src/Runtime/res/effectlib/simpleGlossyBSDF.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/specularBSDF.glsllib (renamed from src/Runtime/res/effectlib/specularBSDF.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/spotEdf.glsllib (renamed from src/Runtime/res/effectlib/spotEdf.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/square.glsllib (renamed from src/Runtime/res/effectlib/square.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/tangentSpaceNormalTexture.glsllib (renamed from src/Runtime/res/effectlib/tangentSpaceNormalTexture.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/tessellationLinear.glsllib (renamed from src/Runtime/res/effectlib/tessellationLinear.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/tessellationLinearCM.glsllib (renamed from src/Runtime/res/effectlib/tessellationLinearCM.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/tessellationNPatch.glsllib (renamed from src/Runtime/res/effectlib/tessellationNPatch.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/tessellationNPatchCM.glsllib (renamed from src/Runtime/res/effectlib/tessellationNPatchCM.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/tessellationPath.glsllib (renamed from src/Runtime/res/effectlib/tessellationPath.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/tessellationPhong.glsllib (renamed from src/Runtime/res/effectlib/tessellationPhong.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/tessellationPhongCM.glsllib (renamed from src/Runtime/res/effectlib/tessellationPhongCM.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/textureCoordinateInfo.glsllib (renamed from src/Runtime/res/effectlib/textureCoordinateInfo.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/transformCoordinate.glsllib (renamed from src/Runtime/res/effectlib/transformCoordinate.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/vertexFragmentBase.glsllib (renamed from src/Runtime/res/effectlib/vertexFragmentBase.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/viewProperties.glsllib (renamed from src/Runtime/res/effectlib/viewProperties.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/weightedLayer.glsllib (renamed from src/Runtime/res/effectlib/weightedLayer.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/effectlib/wireframeCM.glsllib (renamed from src/Runtime/res/effectlib/wireframeCM.glsllib)0
-rw-r--r--src/Runtime/ogl-runtime/res/primitives/Cone.mesh (renamed from src/Runtime/res/primitives/Cone.mesh)bin5352 -> 5352 bytes
-rw-r--r--src/Runtime/ogl-runtime/res/primitives/Cube.mesh (renamed from src/Runtime/res/primitives/Cube.mesh)bin1764 -> 1764 bytes
-rw-r--r--src/Runtime/ogl-runtime/res/primitives/Cylinder.mesh (renamed from src/Runtime/res/primitives/Cylinder.mesh)bin15908 -> 15908 bytes
-rw-r--r--src/Runtime/ogl-runtime/res/primitives/Rectangle.mesh (renamed from src/Runtime/res/primitives/Rectangle.mesh)bin900 -> 900 bytes
-rw-r--r--src/Runtime/ogl-runtime/res/primitives/Sphere.mesh (renamed from src/Runtime/res/primitives/Sphere.mesh)bin177980 -> 177980 bytes
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/3rdparty.pro5
m---------src/Runtime/ogl-runtime/src/3rdparty/EASTL0
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/color/CColor.cpp719
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/color/CColor.h298
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES2/gl2.h677
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES2/gl2ext.h2946
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES2/gl2platform.h30
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl3.h1213
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl31.h1528
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl32.h1829
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl3ext.h24
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl3platform.h30
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/gl.h1543
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glcorearb.h4533
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glew.h16126
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glext.h11163
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glfuncdef.h343
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glu.h607
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glut.h771
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glx.h357
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glxew.h1587
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glxext.h941
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/nvogldebug.h794
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/wglew.h1363
-rw-r--r--src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/wglext.h421
-rw-r--r--src/Runtime/ogl-runtime/src/api/api.pro (renamed from src/Runtime/api/api.pro)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dscommandqueue.cpp (renamed from src/Runtime/api/studio3d/q3dscommandqueue.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dscommandqueue_p.h (renamed from src/Runtime/api/studio3d/q3dscommandqueue_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsdatainput.cpp403
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsdatainput.h (renamed from src/Runtime/api/studio3d/q3dsdatainput.h)9
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsdatainput_p.h (renamed from src/Runtime/api/studio3d/q3dsdatainput_p.h)1
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsdataoutput.cpp225
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsdataoutput.h (renamed from src/Runtime/api/studio3d/q3dsdataoutput.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsdataoutput_p.h (renamed from src/Runtime/api/studio3d/q3dsdataoutput_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dselement.cpp (renamed from src/Runtime/api/studio3d/q3dselement.cpp)130
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dselement.h (renamed from src/Runtime/api/studio3d/q3dselement.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dselement_p.h (renamed from src/Runtime/api/studio3d/q3dselement_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsgeometry.cpp (renamed from src/Runtime/api/studio3d/q3dsgeometry.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsgeometry.h (renamed from src/Runtime/api/studio3d/q3dsgeometry.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsgeometry_p.h (renamed from src/Runtime/api/studio3d/q3dsgeometry_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsimagesequencegenerator.cpp (renamed from src/Runtime/api/studio3d/q3dsimagesequencegenerator.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsimagesequencegenerator_p.h (renamed from src/Runtime/api/studio3d/q3dsimagesequencegenerator_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsimagesequencegeneratorthread.cpp (renamed from src/Runtime/api/studio3d/q3dsimagesequencegeneratorthread.cpp)2
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsimagesequencegeneratorthread_p.h (renamed from src/Runtime/api/studio3d/q3dsimagesequencegeneratorthread_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dspresentation.cpp (renamed from src/Runtime/api/studio3d/q3dspresentation.cpp)602
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dspresentation.h (renamed from src/Runtime/api/studio3d/q3dspresentation.h)4
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dspresentation_p.h (renamed from src/Runtime/api/studio3d/q3dspresentation_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dssceneelement.cpp (renamed from src/Runtime/api/studio3d/q3dssceneelement.cpp)197
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dssceneelement.h (renamed from src/Runtime/api/studio3d/q3dssceneelement.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dssceneelement_p.h (renamed from src/Runtime/api/studio3d/q3dssceneelement_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dssurfaceviewer.cpp (renamed from src/Runtime/api/studio3d/q3dssurfaceviewer.cpp)304
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dssurfaceviewer.h (renamed from src/Runtime/api/studio3d/q3dssurfaceviewer.h)40
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dssurfaceviewer_p.h (renamed from src/Runtime/api/studio3d/q3dssurfaceviewer_p.h)4
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsviewersettings.cpp (renamed from src/Runtime/api/studio3d/q3dsviewersettings.cpp)205
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsviewersettings.h (renamed from src/Runtime/api/studio3d/q3dsviewersettings.h)11
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/q3dsviewersettings_p.h (renamed from src/Runtime/api/studio3d/q3dsviewersettings_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/qstudio3dglobal.h (renamed from src/Runtime/api/studio3d/qstudio3dglobal.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/studio3d.pro (renamed from src/Runtime/api/studio3d/studio3d.pro)5
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/studioutils.cpp (renamed from src/Runtime/api/studio3d/studioutils.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/studioutils_p.h (renamed from src/Runtime/api/studio3d/studioutils_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/viewerqmlstreamproxy.cpp (renamed from src/Runtime/api/studio3d/viewerqmlstreamproxy.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3d/viewerqmlstreamproxy_p.h (renamed from src/Runtime/api/studio3d/viewerqmlstreamproxy_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsplugin.cpp (renamed from src/Runtime/api/studio3dqml/q3dsplugin.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsplugin.h (renamed from src/Runtime/api/studio3dqml/q3dsplugin.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3dqml/q3dspresentationitem.cpp (renamed from src/Runtime/api/studio3dqml/q3dspresentationitem.cpp)45
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3dqml/q3dspresentationitem_p.h (renamed from src/Runtime/api/studio3dqml/q3dspresentationitem_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsrenderer.cpp (renamed from src/Runtime/api/studio3dqml/q3dsrenderer.cpp)14
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsrenderer_p.h (renamed from src/Runtime/api/studio3dqml/q3dsrenderer_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsstudio3d.cpp (renamed from src/Runtime/api/studio3dqml/q3dsstudio3d.cpp)307
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsstudio3d_p.h (renamed from src/Runtime/api/studio3dqml/q3dsstudio3d_p.h)23
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3dqml/qmldir (renamed from src/Runtime/api/studio3dqml/qmldir)0
-rw-r--r--src/Runtime/ogl-runtime/src/api/studio3dqml/studio3dqml.pro (renamed from src/Runtime/api/studio3dqml/studio3dqml.pro)0
-rw-r--r--src/Runtime/ogl-runtime/src/commoninclude.pri1
-rw-r--r--src/Runtime/ogl-runtime/src/datamodel/DocumentResourceManagerCustomMaterialParser.h (renamed from src/Runtime/Source/datamodel/DocumentResourceManagerCustomMaterialParser.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/datamodel/DocumentResourceManagerRenderPluginParser.h (renamed from src/Runtime/Source/datamodel/DocumentResourceManagerRenderPluginParser.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/datamodel/DocumentResourceManagerScriptParser.h (renamed from src/Runtime/Source/datamodel/DocumentResourceManagerScriptParser.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/datamodel/Qt3DSMetadata.cpp (renamed from src/Runtime/Source/datamodel/Qt3DSMetadata.cpp)2
-rw-r--r--src/Runtime/ogl-runtime/src/datamodel/Qt3DSMetadata.h (renamed from src/Runtime/Source/datamodel/Qt3DSMetadata.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/dm/EASTL_new.cpp40
-rw-r--r--src/Runtime/ogl-runtime/src/dm/Qt3DSDMPrefix.h81
-rw-r--r--src/Runtime/ogl-runtime/src/dm/dm.pro58
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/ActionSystem.cpp131
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/ActionSystem.h84
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/HandleSystemBase.h169
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/HandleSystemTransactions.h88
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMActionCore.h99
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMActionInfo.h96
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMActionSystem.h68
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMAnimation.h841
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMComposerTypeDefinitions.cpp579
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMComposerTypeDefinitions.h956
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMDataCore.h320
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMDataTypes.h891
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMErrors.h308
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMGuides.cpp222
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMGuides.h102
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMHandles.h459
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaData.cpp4170
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaData.h400
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaDataTypes.h350
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaDataValue.h251
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMPropertyDefinition.h75
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalStructImpl.h305
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalStructs.h89
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalSystem.cpp184
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalSystem.h52
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignals.h611
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSlideCore.h239
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSlideGraphCore.h89
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSlides.h202
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMStringTable.cpp85
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMStringTable.h71
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMTestOps.h61
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMTransactions.h244
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMValue.cpp178
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMValue.h341
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMWStrOps.h40
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMWStrOpsImpl.h761
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMWindowsCompatibility.h182
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMXML.cpp1253
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMXML.h506
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/SignalsImpl.cpp1565
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/SignalsImpl.h50
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/SlideSystem.cpp867
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/SlideSystem.h179
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/StandardExtensions.h196
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/StudioAnimationSystem.cpp610
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/StudioAnimationSystem.h134
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/StudioCoreSystem.cpp409
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/StudioCoreSystem.h94
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/StudioFullSystem.cpp647
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/StudioFullSystem.h164
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/StudioPropertySystem.cpp233
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/StudioPropertySystem.h132
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/VectorTransactions.h235
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/ActionCoreProducer.cpp289
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/ActionCoreProducer.h125
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/AnimationCoreProducer.cpp488
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/AnimationCoreProducer.h148
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/DataCoreProducer.cpp457
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/DataCoreProducer.h175
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleActionCore.cpp240
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleActionCore.h165
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleAnimationCore.cpp618
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleAnimationCore.h230
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleDataCore.cpp574
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleDataCore.h373
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideCore.cpp420
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideCore.h408
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideGraphCore.cpp169
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideGraphCore.h134
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/SlideCoreProducer.cpp562
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/SlideCoreProducer.h190
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/SlideGraphCoreProducer.cpp245
-rw-r--r--src/Runtime/ogl-runtime/src/dm/systems/cores/SlideGraphCoreProducer.h98
-rw-r--r--src/Runtime/ogl-runtime/src/engine/EnginePrefix.h (renamed from src/Runtime/Source/engine/EnginePrefix.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/NVImageScaler.h (renamed from src/Runtime/Source/engine/NVImageScaler.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/OpenKodeInclude.h (renamed from src/Runtime/Source/engine/OpenKodeInclude.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/Qt3DSEGLInfo.h (renamed from src/Runtime/Source/engine/Qt3DSEGLInfo.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/Qt3DSEGLWindowSystem.h (renamed from src/Runtime/Source/engine/Qt3DSEGLWindowSystem.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/Qt3DSPluginDLL.h (renamed from src/Runtime/Source/engine/Qt3DSPluginDLL.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBinding.cpp (renamed from src/Runtime/Source/engine/Qt3DSRenderRuntimeBinding.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBinding.h (renamed from src/Runtime/Source/engine/Qt3DSRenderRuntimeBinding.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBindingImpl.h (renamed from src/Runtime/Source/engine/Qt3DSRenderRuntimeBindingImpl.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBindingImplRenderer.cpp (renamed from src/Runtime/Source/engine/Qt3DSRenderRuntimeBindingImplRenderer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp (renamed from src/Runtime/Source/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/Qt3DSRuntimeView.cpp (renamed from src/Runtime/Source/engine/Qt3DSRuntimeView.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/Qt3DSRuntimeView.h (renamed from src/Runtime/Source/engine/Qt3DSRuntimeView.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/Qt3DSTegraInputEngine.cpp (renamed from src/Runtime/Source/engine/Qt3DSTegraInputEngine.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/Qt3DSTegraInputEngine.h (renamed from src/Runtime/Source/engine/Qt3DSTegraInputEngine.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/engine/Qt3DSWindowSystem.h (renamed from src/Runtime/Source/engine/Qt3DSWindowSystem.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/event/EventFactory.cpp (renamed from src/Runtime/Source/event/EventFactory.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/event/EventFactory.h (renamed from src/Runtime/Source/event/EventFactory.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/event/EventPoller.cpp (renamed from src/Runtime/Source/event/EventPoller.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/event/EventPoller.h (renamed from src/Runtime/Source/event/EventPoller.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/event/EventPollingSystem.h (renamed from src/Runtime/Source/event/EventPollingSystem.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/event/EventSystem.h (renamed from src/Runtime/Source/event/EventSystem.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/event/EventSystemC.cpp (renamed from src/Runtime/Source/event/EventSystemC.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/event/EventSystemC.h (renamed from src/Runtime/Source/event/EventSystemC.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/event/test/CanProviderDemo.cpp (renamed from src/Runtime/Source/event/test/CanProviderDemo.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/event/test/CanProviderDemo.h (renamed from src/Runtime/Source/event/test/CanProviderDemo.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/AutoDeallocatorAllocator.h (renamed from src/Runtime/Source/foundation/AutoDeallocatorAllocator.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/ConvertUTF.cpp (renamed from src/Runtime/Source/foundation/ConvertUTF.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/ConvertUTF.h (renamed from src/Runtime/Source/foundation/ConvertUTF.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/EASTL_new.cpp (renamed from src/Runtime/Source/foundation/EASTL_new.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/FastAllocator.h (renamed from src/Runtime/Source/foundation/FastAllocator.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/FileTools.cpp (renamed from src/Runtime/Source/foundation/FileTools.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/FileTools.h (renamed from src/Runtime/Source/foundation/FileTools.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/IOStreams.cpp (renamed from src/Runtime/Source/foundation/IOStreams.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/IOStreams.h (renamed from src/Runtime/Source/foundation/IOStreams.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/LICENCE_SOCKET.TXT (renamed from src/Runtime/Source/foundation/LICENCE_SOCKET.TXT)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/LICENSE_CONVERTUTF.TXT (renamed from src/Runtime/Source/foundation/LICENSE_CONVERTUTF.TXT)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/PoolingAllocator.h (renamed from src/Runtime/Source/foundation/PoolingAllocator.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/PreAllocatedAllocator.h (renamed from src/Runtime/Source/foundation/PreAllocatedAllocator.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DS.h (renamed from src/Runtime/Source/foundation/Qt3DS.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSAllocator.h (renamed from src/Runtime/Source/foundation/Qt3DSAllocator.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSAllocatorCallback.h (renamed from src/Runtime/Source/foundation/Qt3DSAllocatorCallback.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSAssert.h (renamed from src/Runtime/Source/foundation/Qt3DSAssert.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSAtomic.h (renamed from src/Runtime/Source/foundation/Qt3DSAtomic.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSBasicTemplates.h (renamed from src/Runtime/Source/foundation/Qt3DSBasicTemplates.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSBounds3.h (renamed from src/Runtime/Source/foundation/Qt3DSBounds3.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSBroadcastingAllocator.h (renamed from src/Runtime/Source/foundation/Qt3DSBroadcastingAllocator.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSContainers.h (renamed from src/Runtime/Source/foundation/Qt3DSContainers.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSDataRef.h (renamed from src/Runtime/Source/foundation/Qt3DSDataRef.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSDiscriminatedUnion.h (renamed from src/Runtime/Source/foundation/Qt3DSDiscriminatedUnion.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSFPU.h (renamed from src/Runtime/Source/foundation/Qt3DSFPU.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSFastIPC.h (renamed from src/Runtime/Source/foundation/Qt3DSFastIPC.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSFlags.h (renamed from src/Runtime/Source/foundation/Qt3DSFlags.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSFoundation.cpp (renamed from src/Runtime/Source/foundation/Qt3DSFoundation.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSFoundation.h (renamed from src/Runtime/Source/foundation/Qt3DSFoundation.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSIPC.h (renamed from src/Runtime/Source/foundation/Qt3DSIPC.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSIndexableLinkedList.h (renamed from src/Runtime/Source/foundation/Qt3DSIndexableLinkedList.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSIntrinsics.h (renamed from src/Runtime/Source/foundation/Qt3DSIntrinsics.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSInvasiveLinkedList.h (renamed from src/Runtime/Source/foundation/Qt3DSInvasiveLinkedList.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSInvasiveSet.h (renamed from src/Runtime/Source/foundation/Qt3DSInvasiveSet.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSLogging.cpp (renamed from src/Runtime/Source/foundation/Qt3DSLogging.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSLogging.h (renamed from src/Runtime/Source/foundation/Qt3DSLogging.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSMat33.h (renamed from src/Runtime/Source/foundation/Qt3DSMat33.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSMat44.h (renamed from src/Runtime/Source/foundation/Qt3DSMat44.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSMath.h (renamed from src/Runtime/Source/foundation/Qt3DSMath.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSMathUtils.cpp (renamed from src/Runtime/Source/foundation/Qt3DSMathUtils.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSMathUtils.h (renamed from src/Runtime/Source/foundation/Qt3DSMathUtils.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSMemoryBuffer.h (renamed from src/Runtime/Source/foundation/Qt3DSMemoryBuffer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSMutex.h (renamed from src/Runtime/Source/foundation/Qt3DSMutex.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSNoCopy.h (renamed from src/Runtime/Source/foundation/Qt3DSNoCopy.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSOption.h (renamed from src/Runtime/Source/foundation/Qt3DSOption.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSPerfTimer.cpp (renamed from src/Runtime/Source/foundation/Qt3DSPerfTimer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSPerfTimer.h (renamed from src/Runtime/Source/foundation/Qt3DSPerfTimer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSPlane.h (renamed from src/Runtime/Source/foundation/Qt3DSPlane.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSPool.h (renamed from src/Runtime/Source/foundation/Qt3DSPool.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSPreprocessor.h (renamed from src/Runtime/Source/foundation/Qt3DSPreprocessor.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSQuat.h (renamed from src/Runtime/Source/foundation/Qt3DSQuat.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSRefCounted.h (renamed from src/Runtime/Source/foundation/Qt3DSRefCounted.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSSemaphore.h (renamed from src/Runtime/Source/foundation/Qt3DSSemaphore.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSSimpleTypes.h (renamed from src/Runtime/Source/foundation/Qt3DSSimpleTypes.h)24
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSStringTokenizer.h (renamed from src/Runtime/Source/foundation/Qt3DSStringTokenizer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSSync.h (renamed from src/Runtime/Source/foundation/Qt3DSSync.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSSystem.cpp (renamed from src/Runtime/Source/foundation/Qt3DSSystem.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSSystem.h (renamed from src/Runtime/Source/foundation/Qt3DSSystem.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSThread.h (renamed from src/Runtime/Source/foundation/Qt3DSThread.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSTime.h (renamed from src/Runtime/Source/foundation/Qt3DSTime.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSTransform.h (renamed from src/Runtime/Source/foundation/Qt3DSTransform.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSUnionCast.h (renamed from src/Runtime/Source/foundation/Qt3DSUnionCast.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSUtilities.h (renamed from src/Runtime/Source/foundation/Qt3DSUtilities.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSVec2.h (renamed from src/Runtime/Source/foundation/Qt3DSVec2.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSVec3.h (renamed from src/Runtime/Source/foundation/Qt3DSVec3.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSVec4.h (renamed from src/Runtime/Source/foundation/Qt3DSVec4.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Qt3DSVersionNumber.h (renamed from src/Runtime/Source/foundation/Qt3DSVersionNumber.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/SerializationTypes.h (renamed from src/Runtime/Source/foundation/SerializationTypes.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Socket.cpp (renamed from src/Runtime/Source/foundation/Socket.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Socket.h (renamed from src/Runtime/Source/foundation/Socket.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/StrConvertUTF.h (renamed from src/Runtime/Source/foundation/StrConvertUTF.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/StringConversion.h (renamed from src/Runtime/Source/foundation/StringConversion.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/StringConversionImpl.h (renamed from src/Runtime/Source/foundation/StringConversionImpl.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/StringTable.cpp (renamed from src/Runtime/Source/foundation/StringTable.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/StringTable.h (renamed from src/Runtime/Source/foundation/StringTable.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/StringTools.h (renamed from src/Runtime/Source/foundation/StringTools.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/TaggedPointer.h (renamed from src/Runtime/Source/foundation/TaggedPointer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/ThreadSafeQueue.h (renamed from src/Runtime/Source/foundation/ThreadSafeQueue.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/TrackingAllocator.cpp (renamed from src/Runtime/Source/foundation/TrackingAllocator.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/TrackingAllocator.h (renamed from src/Runtime/Source/foundation/TrackingAllocator.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/Utils.h (renamed from src/Runtime/Source/foundation/Utils.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/XML.cpp (renamed from src/Runtime/Source/foundation/XML.cpp)72
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/XML.h (renamed from src/Runtime/Source/foundation/XML.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/LICENSE.TXT (renamed from src/Runtime/Source/foundation/linux/LICENSE.TXT)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxAoS.h (renamed from src/Runtime/Source/foundation/linux/Qt3DSLinuxAoS.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxAtomic.cpp (renamed from src/Runtime/Source/foundation/linux/Qt3DSLinuxAtomic.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxFPU.cpp (renamed from src/Runtime/Source/foundation/linux/Qt3DSLinuxFPU.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxFile.h (renamed from src/Runtime/Source/foundation/linux/Qt3DSLinuxFile.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxInlineAoS.h (renamed from src/Runtime/Source/foundation/linux/Qt3DSLinuxInlineAoS.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxIntrinsics.h (renamed from src/Runtime/Source/foundation/linux/Qt3DSLinuxIntrinsics.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxMutex.cpp (renamed from src/Runtime/Source/foundation/linux/Qt3DSLinuxMutex.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxSemaphore.cpp (renamed from src/Runtime/Source/foundation/linux/Qt3DSLinuxSemaphore.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxString.h (renamed from src/Runtime/Source/foundation/linux/Qt3DSLinuxString.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxSync.cpp (renamed from src/Runtime/Source/foundation/linux/Qt3DSLinuxSync.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxThread.cpp (renamed from src/Runtime/Source/foundation/linux/Qt3DSLinuxThread.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxTime.cpp (renamed from src/Runtime/Source/foundation/linux/Qt3DSLinuxTime.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxTrigConstants.h (renamed from src/Runtime/Source/foundation/linux/Qt3DSLinuxTrigConstants.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/SocketImpl.h (renamed from src/Runtime/Source/foundation/linux/SocketImpl.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/linux/qt_attribution.json (renamed from src/Runtime/Source/foundation/linux/qt_attribution.json)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixAtomic.cpp (renamed from src/Runtime/Source/foundation/macos/Qt3DSUnixAtomic.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixFPU.cpp (renamed from src/Runtime/Source/foundation/macos/Qt3DSUnixFPU.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixMutex.cpp (renamed from src/Runtime/Source/foundation/macos/Qt3DSUnixMutex.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixSemaphore.cpp (renamed from src/Runtime/Source/foundation/macos/Qt3DSUnixSemaphore.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixSync.cpp (renamed from src/Runtime/Source/foundation/macos/Qt3DSUnixSync.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixTime.cpp (renamed from src/Runtime/Source/foundation/macos/Qt3DSUnixTime.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/qt_attribution.json (renamed from src/Runtime/Source/foundation/qt_attribution.json)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/LICENSE.TXT (renamed from src/Runtime/Source/foundation/windows/LICENSE.TXT)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsAoS.h (renamed from src/Runtime/Source/foundation/windows/Qt3DSWindowsAoS.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsAtomic.cpp (renamed from src/Runtime/Source/foundation/windows/Qt3DSWindowsAtomic.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsFPU.cpp (renamed from src/Runtime/Source/foundation/windows/Qt3DSWindowsFPU.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsFile.h (renamed from src/Runtime/Source/foundation/windows/Qt3DSWindowsFile.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsInclude.h (renamed from src/Runtime/Source/foundation/windows/Qt3DSWindowsInclude.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsInlineAoS.h (renamed from src/Runtime/Source/foundation/windows/Qt3DSWindowsInlineAoS.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsIntrinsics.h (renamed from src/Runtime/Source/foundation/windows/Qt3DSWindowsIntrinsics.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsMutex.cpp (renamed from src/Runtime/Source/foundation/windows/Qt3DSWindowsMutex.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsSemaphore.cpp (renamed from src/Runtime/Source/foundation/windows/Qt3DSWindowsSemaphore.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsString.h (renamed from src/Runtime/Source/foundation/windows/Qt3DSWindowsString.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsSync.cpp (renamed from src/Runtime/Source/foundation/windows/Qt3DSWindowsSync.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsThread.cpp (renamed from src/Runtime/Source/foundation/windows/Qt3DSWindowsThread.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsTime.cpp (renamed from src/Runtime/Source/foundation/windows/Qt3DSWindowsTime.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsTrigConstants.h (renamed from src/Runtime/Source/foundation/windows/Qt3DSWindowsTrigConstants.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/SocketImpl.h (renamed from src/Runtime/Source/foundation/windows/SocketImpl.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/foundation/windows/qt_attribution.json (renamed from src/Runtime/Source/foundation/windows/qt_attribution.json)0
-rw-r--r--src/Runtime/ogl-runtime/src/hdr/CUDABSDFMipmap.cpp (renamed from src/Runtime/Source/hdr/CUDABSDFMipmap.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/hdr/CUDABSDFMipmap.h (renamed from src/Runtime/Source/hdr/CUDABSDFMipmap.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/hdr/GLComputeMipMap.h (renamed from src/Runtime/Source/hdr/GLComputeMipMap.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/hdr/GLComputeMipmap.cpp (renamed from src/Runtime/Source/hdr/GLComputeMipmap.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/hdr/HDR.cpp (renamed from src/Runtime/Source/hdr/HDR.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/hdr/HDR.h (renamed from src/Runtime/Source/hdr/HDR.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/hdr/MipmapBSDF.cpp (renamed from src/Runtime/Source/hdr/MipmapBSDF.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/hdr/MipmapBSDF.cu (renamed from src/Runtime/Source/hdr/MipmapBSDF.cu)0
-rw-r--r--src/Runtime/ogl-runtime/src/hdr/MipmapBSDF.h (renamed from src/Runtime/Source/hdr/MipmapBSDF.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/importlib/Qt3DSImportContainers.h88
-rw-r--r--src/Runtime/ogl-runtime/src/importlib/Qt3DSImportLibPrecompile.h56
-rw-r--r--src/Runtime/ogl-runtime/src/importlib/Qt3DSImportMesh.cpp829
-rw-r--r--src/Runtime/ogl-runtime/src/importlib/Qt3DSImportMesh.h530
-rw-r--r--src/Runtime/ogl-runtime/src/importlib/Qt3DSImportMeshBuilder.cpp598
-rw-r--r--src/Runtime/ogl-runtime/src/importlib/Qt3DSImportPath.cpp152
-rw-r--r--src/Runtime/ogl-runtime/src/importlib/Qt3DSImportPath.h87
-rw-r--r--src/Runtime/ogl-runtime/src/ogl-runtime-dylib/ogl-runtime-dylib.pro (renamed from src/Runtime/Qt3DSRuntime/Qt3DSRuntime.pro)18
-rw-r--r--src/Runtime/ogl-runtime/src/ogl-runtime-static/ogl-runtime-static.pro656
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/NvVec.h (renamed from src/Runtime/Source/platformspecific/android/jni/libs/nv_math/NvVec.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/misc.h (renamed from src/Runtime/Source/platformspecific/android/jni/libs/nv_math/misc.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_math.cpp (renamed from src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_math.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_math.h (renamed from src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_math.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_matrix.cpp (renamed from src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_matrix.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_matrix.h (renamed from src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_matrix.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_quat.cpp (renamed from src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_quat.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_quat.h (renamed from src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_quat.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/assets/courier+lucida_256.abc (renamed from src/Runtime/Source/platformspecific/linux/assets/courier+lucida_256.abc)bin2048 -> 2048 bytes
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/assets/courier+lucida_256.dds (renamed from src/Runtime/Source/platformspecific/linux/assets/courier+lucida_256.dds)bin87509 -> 87509 bytes
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/assets/courier+lucida_512.abc (renamed from src/Runtime/Source/platformspecific/linux/assets/courier+lucida_512.abc)bin2048 -> 2048 bytes
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/assets/courier+lucida_512.dds (renamed from src/Runtime/Source/platformspecific/linux/assets/courier+lucida_512.dds)bin349653 -> 349653 bytes
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/assets/font.frag (renamed from src/Runtime/Source/platformspecific/linux/assets/font.frag)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/assets/font.vert (renamed from src/Runtime/Source/platformspecific/linux/assets/font.vert)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_color.h (renamed from src/Runtime/Source/platformspecific/linux/libs/nv_color.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_debug.h (renamed from src/Runtime/Source/platformspecific/linux/libs/nv_debug.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_global.h (renamed from src/Runtime/Source/platformspecific/linux/libs/nv_global.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/NvVec.h (renamed from src/Runtime/Source/platformspecific/linux/libs/nv_math/NvVec.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/misc.h (renamed from src/Runtime/Source/platformspecific/linux/libs/nv_math/misc.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_math.cpp (renamed from src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_math.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_math.h (renamed from src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_math.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_matrix.cpp (renamed from src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_matrix.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_matrix.h (renamed from src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_matrix.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_quat.cpp (renamed from src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_quat.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_quat.h (renamed from src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_quat.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_types.h (renamed from src/Runtime/Source/platformspecific/linux/libs/nv_types.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/assets/courier+lucida_256.abc (renamed from src/Runtime/Source/platformspecific/macos/assets/courier+lucida_256.abc)bin2048 -> 2048 bytes
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/assets/courier+lucida_256.dds (renamed from src/Runtime/Source/platformspecific/macos/assets/courier+lucida_256.dds)bin87509 -> 87509 bytes
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/assets/courier+lucida_512.abc (renamed from src/Runtime/Source/platformspecific/macos/assets/courier+lucida_512.abc)bin2048 -> 2048 bytes
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/assets/courier+lucida_512.dds (renamed from src/Runtime/Source/platformspecific/macos/assets/courier+lucida_512.dds)bin349653 -> 349653 bytes
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/assets/font.frag (renamed from src/Runtime/Source/platformspecific/macos/assets/font.frag)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/assets/font.vert (renamed from src/Runtime/Source/platformspecific/macos/assets/font.vert)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_color.h (renamed from src/Runtime/Source/platformspecific/macos/libs/nv_color.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_debug.h (renamed from src/Runtime/Source/platformspecific/macos/libs/nv_debug.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_global.h (renamed from src/Runtime/Source/platformspecific/macos/libs/nv_global.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/NvVec.h (renamed from src/Runtime/Source/platformspecific/macos/libs/nv_math/NvVec.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/misc.h (renamed from src/Runtime/Source/platformspecific/macos/libs/nv_math/misc.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_math.cpp (renamed from src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_math.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_math.h (renamed from src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_math.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_matrix.cpp (renamed from src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_matrix.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_matrix.h (renamed from src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_matrix.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_quat.cpp (renamed from src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_quat.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_quat.h (renamed from src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_quat.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_types.h (renamed from src/Runtime/Source/platformspecific/macos/libs/nv_types.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/assets/courier+lucida_256.abc (renamed from src/Runtime/Source/platformspecific/windows/assets/courier+lucida_256.abc)bin2048 -> 2048 bytes
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/assets/courier+lucida_256.dds (renamed from src/Runtime/Source/platformspecific/windows/assets/courier+lucida_256.dds)bin87509 -> 87509 bytes
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/assets/courier+lucida_512.abc (renamed from src/Runtime/Source/platformspecific/windows/assets/courier+lucida_512.abc)bin2048 -> 2048 bytes
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/assets/courier+lucida_512.dds (renamed from src/Runtime/Source/platformspecific/windows/assets/courier+lucida_512.dds)bin349653 -> 349653 bytes
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/assets/font.frag (renamed from src/Runtime/Source/platformspecific/windows/assets/font.frag)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/assets/font.vert (renamed from src/Runtime/Source/platformspecific/windows/assets/font.vert)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_color.h (renamed from src/Runtime/Source/platformspecific/windows/libs/nv_color.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_config/nv_config.h (renamed from src/Runtime/Source/platformspecific/windows/libs/nv_config/nv_config.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_debug.h (renamed from src/Runtime/Source/platformspecific/windows/libs/nv_debug.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_global.h (renamed from src/Runtime/Source/platformspecific/windows/libs/nv_global.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/NvVec.h (renamed from src/Runtime/Source/platformspecific/windows/libs/nv_math/NvVec.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/misc.h (renamed from src/Runtime/Source/platformspecific/windows/libs/nv_math/misc.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_math.cpp (renamed from src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_math.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_math.h (renamed from src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_math.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_matrix.cpp (renamed from src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_matrix.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_matrix.h (renamed from src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_matrix.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_quat.cpp (renamed from src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_quat.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_quat.h (renamed from src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_quat.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_types.h (renamed from src/Runtime/Source/platformspecific/windows/libs/nv_types.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/platformspecific/windows/viewer/Resource.h (renamed from src/Runtime/Source/platformspecific/windows/viewer/Resource.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsincubationcontroller.h55
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstream.cpp106
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstream.h68
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamer_global.h41
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamerserviceimpl.cpp67
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamerserviceimpl.h52
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproducer.cpp53
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproducer.h61
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproxy.cpp253
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproxy.h79
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamrenderer.cpp483
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamrenderer.h124
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamservice.h80
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlsubpresentationsettings.cpp78
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlsubpresentationsettings.h55
-rw-r--r--src/Runtime/ogl-runtime/src/qmlstreamer/qmlstreamer.pro50
-rw-r--r--src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderClearColorExample.cpp (renamed from src/Runtime/Source/render/Examples/Qt3DSRenderClearColorExample.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderExample.cpp (renamed from src/Runtime/Source/render/Examples/Qt3DSRenderExample.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderExample.h (renamed from src/Runtime/Source/render/Examples/Qt3DSRenderExample.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderExampleTools.cpp (renamed from src/Runtime/Source/render/Examples/Qt3DSRenderExampleTools.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderExampleTools.h (renamed from src/Runtime/Source/render/Examples/Qt3DSRenderExampleTools.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderRenderToTextureExample.cpp (renamed from src/Runtime/Source/render/Examples/Qt3DSRenderRenderToTextureExample.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderSpinningCubeExample.cpp (renamed from src/Runtime/Source/render/Examples/Qt3DSRenderSpinningCubeExample.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderAtomicCounterBuffer.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderAtomicCounterBuffer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderAtomicCounterBuffer.h (renamed from src/Runtime/Source/render/Qt3DSRenderAtomicCounterBuffer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderAttribLayout.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderAttribLayout.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderAttribLayout.h (renamed from src/Runtime/Source/render/Qt3DSRenderAttribLayout.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderBaseTypes.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderBaseTypes.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderBaseTypes.h (renamed from src/Runtime/Source/render/Qt3DSRenderBaseTypes.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderComputeShader.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderComputeShader.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderComputeShader.h (renamed from src/Runtime/Source/render/Qt3DSRenderComputeShader.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderConstantBuffer.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderConstantBuffer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderConstantBuffer.h (renamed from src/Runtime/Source/render/Qt3DSRenderConstantBuffer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderContext.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderContext.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderContext.h (renamed from src/Runtime/Source/render/Qt3DSRenderContext.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderDataBuffer.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderDataBuffer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderDataBuffer.h (renamed from src/Runtime/Source/render/Qt3DSRenderDataBuffer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderDepthStencilState.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderDepthStencilState.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderDepthStencilState.h (renamed from src/Runtime/Source/render/Qt3DSRenderDepthStencilState.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderDrawIndirectBuffer.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderDrawIndirectBuffer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderDrawIndirectBuffer.h (renamed from src/Runtime/Source/render/Qt3DSRenderDrawIndirectBuffer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderDrawable.h (renamed from src/Runtime/Source/render/Qt3DSRenderDrawable.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderFragmentShader.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderFragmentShader.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderFragmentShader.h (renamed from src/Runtime/Source/render/Qt3DSRenderFragmentShader.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderFrameBuffer.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderFrameBuffer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderFrameBuffer.h (renamed from src/Runtime/Source/render/Qt3DSRenderFrameBuffer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderGeometryShader.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderGeometryShader.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderGeometryShader.h (renamed from src/Runtime/Source/render/Qt3DSRenderGeometryShader.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderImageTexture.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderImageTexture.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderImageTexture.h (renamed from src/Runtime/Source/render/Qt3DSRenderImageTexture.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderIndexBuffer.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderIndexBuffer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderIndexBuffer.h (renamed from src/Runtime/Source/render/Qt3DSRenderIndexBuffer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderInputAssembler.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderInputAssembler.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderInputAssembler.h (renamed from src/Runtime/Source/render/Qt3DSRenderInputAssembler.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderOcclusionQuery.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderOcclusionQuery.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderOcclusionQuery.h (renamed from src/Runtime/Source/render/Qt3DSRenderOcclusionQuery.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathFontSpecification.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderPathFontSpecification.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathFontSpecification.h (renamed from src/Runtime/Source/render/Qt3DSRenderPathFontSpecification.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathFontText.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderPathFontText.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathFontText.h (renamed from src/Runtime/Source/render/Qt3DSRenderPathFontText.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathRender.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderPathRender.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathRender.h (renamed from src/Runtime/Source/render/Qt3DSRenderPathRender.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathSpecification.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderPathSpecification.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathSpecification.h (renamed from src/Runtime/Source/render/Qt3DSRenderPathSpecification.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderProgramPipeline.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderProgramPipeline.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderProgramPipeline.h (renamed from src/Runtime/Source/render/Qt3DSRenderProgramPipeline.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderQueryBase.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderQueryBase.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderQueryBase.h (renamed from src/Runtime/Source/render/Qt3DSRenderQueryBase.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderRasterizerState.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderRasterizerState.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderRasterizerState.h (renamed from src/Runtime/Source/render/Qt3DSRenderRasterizerState.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderRenderBuffer.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderRenderBuffer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderRenderBuffer.h (renamed from src/Runtime/Source/render/Qt3DSRenderRenderBuffer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderSampler.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderSampler.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderSampler.h (renamed from src/Runtime/Source/render/Qt3DSRenderSampler.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderShader.h (renamed from src/Runtime/Source/render/Qt3DSRenderShader.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderShaderConstant.h (renamed from src/Runtime/Source/render/Qt3DSRenderShaderConstant.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderShaderProgram.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderShaderProgram.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderShaderProgram.h (renamed from src/Runtime/Source/render/Qt3DSRenderShaderProgram.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderStorageBuffer.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderStorageBuffer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderStorageBuffer.h (renamed from src/Runtime/Source/render/Qt3DSRenderStorageBuffer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderSync.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderSync.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderSync.h (renamed from src/Runtime/Source/render/Qt3DSRenderSync.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderTessellationShader.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderTessellationShader.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderTessellationShader.h (renamed from src/Runtime/Source/render/Qt3DSRenderTessellationShader.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderTexture2D.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderTexture2D.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderTexture2D.h (renamed from src/Runtime/Source/render/Qt3DSRenderTexture2D.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderTexture2DArray.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderTexture2DArray.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderTexture2DArray.h (renamed from src/Runtime/Source/render/Qt3DSRenderTexture2DArray.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderTextureBase.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderTextureBase.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderTextureBase.h (renamed from src/Runtime/Source/render/Qt3DSRenderTextureBase.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderTextureCube.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderTextureCube.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderTextureCube.h (renamed from src/Runtime/Source/render/Qt3DSRenderTextureCube.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderTimerQuery.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderTimerQuery.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderTimerQuery.h (renamed from src/Runtime/Source/render/Qt3DSRenderTimerQuery.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderVertexBuffer.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderVertexBuffer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderVertexBuffer.h (renamed from src/Runtime/Source/render/Qt3DSRenderVertexBuffer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderVertexShader.cpp (renamed from src/Runtime/Source/render/Qt3DSRenderVertexShader.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/Qt3DSRenderVertexShader.h (renamed from src/Runtime/Source/render/Qt3DSRenderVertexShader.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/Qt3DSRenderBackend.h (renamed from src/Runtime/Source/render/backends/Qt3DSRenderBackend.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.cpp (renamed from src/Runtime/Source/render/backends/gl/Q3DSRenderBackendGLES2.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.h (renamed from src/Runtime/Source/render/backends/gl/Q3DSRenderBackendGLES2.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLExtensions.cpp (renamed from src/Runtime/Source/render/backends/gl/Qt3DSOpenGLExtensions.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLExtensions.h (renamed from src/Runtime/Source/render/backends/gl/Qt3DSOpenGLExtensions.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLPrefix.h (renamed from src/Runtime/Source/render/backends/gl/Qt3DSOpenGLPrefix.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLTokens.h (renamed from src/Runtime/Source/render/backends/gl/Qt3DSOpenGLTokens.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLUtil.h (renamed from src/Runtime/Source/render/backends/gl/Qt3DSOpenGLUtil.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.cpp (renamed from src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL3.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.h (renamed from src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL3.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL4.cpp (renamed from src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL4.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL4.h (renamed from src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL4.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGLBase.cpp (renamed from src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGLBase.h (renamed from src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendInputAssemblerGL.h (renamed from src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendInputAssemblerGL.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendRenderStatesGL.h (renamed from src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendRenderStatesGL.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendShaderProgramGL.h (renamed from src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendShaderProgramGL.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderContextGL.cpp (renamed from src/Runtime/Source/render/backends/gl/Qt3DSRenderContextGL.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/software/Qt3DSRenderBackendNULL.cpp (renamed from src/Runtime/Source/render/backends/software/Qt3DSRenderBackendNULL.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/backends/software/Qt3DSRenderBackendNULL.h (renamed from src/Runtime/Source/render/backends/software/Qt3DSRenderBackendNULL.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/render/glg/Qt3DSGLImplObjects.h (renamed from src/Runtime/Source/render/glg/Qt3DSGLImplObjects.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSActivationManager.cpp (renamed from src/Runtime/Source/runtime/Qt3DSActivationManager.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSActivationManager.h (renamed from src/Runtime/Source/runtime/Qt3DSActivationManager.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSAnimationSystem.cpp (renamed from src/Runtime/Source/runtime/Qt3DSAnimationSystem.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSAnimationSystem.h (renamed from src/Runtime/Source/runtime/Qt3DSAnimationSystem.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSApplication.cpp (renamed from src/Runtime/Source/runtime/Qt3DSApplication.cpp)14
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSApplication.h (renamed from src/Runtime/Source/runtime/Qt3DSApplication.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSApplicationValues.h (renamed from src/Runtime/Source/runtime/Qt3DSApplicationValues.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSAttributeHashes.cpp (renamed from src/Runtime/Source/runtime/Qt3DSAttributeHashes.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSAttributeHashes.h (renamed from src/Runtime/Source/runtime/Qt3DSAttributeHashes.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSAttributeHashes.txt (renamed from src/Runtime/Source/runtime/Qt3DSAttributeHashes.txt)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSCommandEventTypes.h (renamed from src/Runtime/Source/runtime/Qt3DSCommandEventTypes.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSCommandHelper.cpp (renamed from src/Runtime/Source/runtime/Qt3DSCommandHelper.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSCommandHelper.h (renamed from src/Runtime/Source/runtime/Qt3DSCommandHelper.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSComponentManager.cpp (renamed from src/Runtime/Source/runtime/Qt3DSComponentManager.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSComponentManager.h (renamed from src/Runtime/Source/runtime/Qt3DSComponentManager.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSElementHelper.cpp (renamed from src/Runtime/Source/runtime/Qt3DSElementHelper.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSElementHelper.h (renamed from src/Runtime/Source/runtime/Qt3DSElementHelper.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSElementSystem.cpp (renamed from src/Runtime/Source/runtime/Qt3DSElementSystem.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSElementSystem.h (renamed from src/Runtime/Source/runtime/Qt3DSElementSystem.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSEvent.h (renamed from src/Runtime/Source/runtime/Qt3DSEvent.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSEventCallbacks.cpp (renamed from src/Runtime/Source/runtime/Qt3DSEventCallbacks.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSEventCallbacks.h (renamed from src/Runtime/Source/runtime/Qt3DSEventCallbacks.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSFrameworkTypes.h (renamed from src/Runtime/Source/runtime/Qt3DSFrameworkTypes.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSIComponentManager.h (renamed from src/Runtime/Source/runtime/Qt3DSIComponentManager.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSIInputSystem.h (renamed from src/Runtime/Source/runtime/Qt3DSIInputSystem.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSIScene.h (renamed from src/Runtime/Source/runtime/Qt3DSIScene.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSIScriptBridge.h (renamed from src/Runtime/Source/runtime/Qt3DSIScriptBridge.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSIStateful.h (renamed from src/Runtime/Source/runtime/Qt3DSIStateful.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSIText.h (renamed from src/Runtime/Source/runtime/Qt3DSIText.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSInputDefs.h (renamed from src/Runtime/Source/runtime/Qt3DSInputDefs.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSInputEngine.cpp (renamed from src/Runtime/Source/runtime/Qt3DSInputEngine.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSInputEngine.h (renamed from src/Runtime/Source/runtime/Qt3DSInputEngine.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSInputEventTypes.h (renamed from src/Runtime/Source/runtime/Qt3DSInputEventTypes.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSInputFrame.h (renamed from src/Runtime/Source/runtime/Qt3DSInputFrame.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSKernelTypes.h (renamed from src/Runtime/Source/runtime/Qt3DSKernelTypes.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSLogicSystem.cpp (renamed from src/Runtime/Source/runtime/Qt3DSLogicSystem.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSLogicSystem.h (renamed from src/Runtime/Source/runtime/Qt3DSLogicSystem.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSOutputMemoryStream.cpp (renamed from src/Runtime/Source/runtime/Qt3DSOutputMemoryStream.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSOutputMemoryStream.h (renamed from src/Runtime/Source/runtime/Qt3DSOutputMemoryStream.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSParametersSystem.cpp (renamed from src/Runtime/Source/runtime/Qt3DSParametersSystem.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSParametersSystem.h (renamed from src/Runtime/Source/runtime/Qt3DSParametersSystem.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSPickFrame.h (renamed from src/Runtime/Source/runtime/Qt3DSPickFrame.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSPresentation.cpp (renamed from src/Runtime/Source/runtime/Qt3DSPresentation.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSPresentation.h (renamed from src/Runtime/Source/runtime/Qt3DSPresentation.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSPresentationFrameData.cpp (renamed from src/Runtime/Source/runtime/Qt3DSPresentationFrameData.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSPresentationFrameData.h (renamed from src/Runtime/Source/runtime/Qt3DSPresentationFrameData.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSQmlElementHelper.cpp (renamed from src/Runtime/Source/runtime/Qt3DSQmlElementHelper.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSQmlElementHelper.h (renamed from src/Runtime/Source/runtime/Qt3DSQmlElementHelper.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSQmlEngine.cpp (renamed from src/Runtime/Source/runtime/Qt3DSQmlEngine.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSQmlEngine.h (renamed from src/Runtime/Source/runtime/Qt3DSQmlEngine.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSRuntimeFactory.h (renamed from src/Runtime/Source/runtime/Qt3DSRuntimeFactory.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSSceneManager.h (renamed from src/Runtime/Source/runtime/Qt3DSSceneManager.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSSlideSystem.cpp (renamed from src/Runtime/Source/runtime/Qt3DSSlideSystem.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSSlideSystem.h (renamed from src/Runtime/Source/runtime/Qt3DSSlideSystem.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSTimePolicy.cpp (renamed from src/Runtime/Source/runtime/Qt3DSTimePolicy.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/Qt3DSTimePolicy.h (renamed from src/Runtime/Source/runtime/Qt3DSTimePolicy.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/RuntimePrefix.h (renamed from src/Runtime/Source/runtime/RuntimePrefix.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/q3dsmaterialdefinitionparser.cpp (renamed from src/Runtime/Source/runtime/q3dsmaterialdefinitionparser.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/q3dsmaterialdefinitionparser.h (renamed from src/Runtime/Source/runtime/q3dsmaterialdefinitionparser.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/q3dsqmlbehavior.cpp (renamed from src/Runtime/Source/runtime/q3dsqmlbehavior.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/q3dsqmlbehavior.h (renamed from src/Runtime/Source/runtime/q3dsqmlbehavior.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/q3dsqmlscript.cpp (renamed from src/Runtime/Source/runtime/q3dsqmlscript.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/q3dsqmlscript.h (renamed from src/Runtime/Source/runtime/q3dsqmlscript.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/q3dsvariantconfig.cpp (renamed from src/Runtime/Source/runtime/q3dsvariantconfig.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtime/q3dsvariantconfig_p.h (renamed from src/Runtime/Source/runtime/q3dsvariantconfig_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldGlyphCache.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSDistanceFieldGlyphCache.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldGlyphCacheManager.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSDistanceFieldGlyphCacheManager.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldGlyphCacheManager_p.h (renamed from src/Runtime/Source/runtimerender/Qt3DSDistanceFieldGlyphCacheManager_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldGlyphCache_p.h (renamed from src/Runtime/Source/runtimerender/Qt3DSDistanceFieldGlyphCache_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldRenderer.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldRenderer.h (renamed from src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSFontDatabase.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSFontDatabase.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSFontDatabase_p.h (renamed from src/Runtime/Source/runtimerender/Qt3DSFontDatabase_p.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOffscreenRenderKey.h (renamed from src/Runtime/Source/runtimerender/Qt3DSOffscreenRenderKey.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOffscreenRenderManager.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSOffscreenRenderManager.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOffscreenRenderManager.h (renamed from src/Runtime/Source/runtimerender/Qt3DSOffscreenRenderManager.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOldNBustedRenderPlugin.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOldNBustedRenderPlugin.h (renamed from src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOnscreenTextRenderer.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSOnscreenTextRenderer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSQtTextRenderer.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSQtTextRenderer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRender.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRender.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderClippingFrustum.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderClippingFrustum.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderClippingFrustum.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderClippingFrustum.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderContextCore.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderContextCore.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderContextCore.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderContextCore.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialRenderContext.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialRenderContext.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialSystem.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialSystem.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDynamicObjectSystem.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderDynamicObjectSystem.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDynamicObjectSystem.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderDynamicObjectSystem.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDynamicObjectSystemCommands.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderDynamicObjectSystemCommands.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDynamicObjectSystemUtil.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderDynamicObjectSystemUtil.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderEffectSystem.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderEffectSystem.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderEffectSystem.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderEffectSystem.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderEulerAngles.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderEulerAngles.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderEulerAngles.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderEulerAngles.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGpuProfiler.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderGpuProfiler.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGraphObjectPickQuery.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderGraphObjectPickQuery.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGraphObjectSerializer.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderGraphObjectSerializer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGraphObjectSerializer.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderGraphObjectSerializer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGraphObjectTypes.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderGraphObjectTypes.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderImageScaler.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderImageScaler.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderImageScaler.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderImageScaler.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderImageTextureData.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderImageTextureData.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderInputStreamFactory.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderInputStreamFactory.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderInputStreamFactory.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderInputStreamFactory.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderLightConstantProperties.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderLightConstantProperties.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderMaterialHelpers.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderMaterialHelpers.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderMaterialShaderGenerator.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderMaterialShaderGenerator.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderMesh.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderMesh.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPathManager.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderPathManager.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPathManager.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderPathManager.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPathMath.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderPathMath.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPathRenderContext.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderPathRenderContext.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPixelGraphicsRenderer.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderPixelGraphicsRenderer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPixelGraphicsRenderer.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderPixelGraphicsRenderer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPixelGraphicsTypes.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderPixelGraphicsTypes.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPixelGraphicsTypes.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderPixelGraphicsTypes.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPlugin.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderPlugin.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPlugin.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderPlugin.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPluginCInterface.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderPluginCInterface.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPluginGraphObject.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderPluginGraphObject.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPluginPropertyValue.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderPluginPropertyValue.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderProfiler.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderProfiler.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRay.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderRay.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRay.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderRay.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRenderList.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderRenderList.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRenderList.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderRenderList.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRotationHelper.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderRotationHelper.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCache.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderShaderCache.cpp)39
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCache.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderShaderCache.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCodeGenerator.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderShaderCodeGenerator.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCodeGenerator.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderShaderCodeGenerator.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCodeGeneratorV2.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderShaderCodeGeneratorV2.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCodeGeneratorV2.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderShaderCodeGeneratorV2.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderKeys.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderShaderKeys.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShadowMap.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderShadowMap.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShadowMap.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderShadowMap.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderSubPresentationHelper.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderSubPresentationHelper.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderSubpresentation.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderSubpresentation.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTaggedPointer.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderTaggedPointer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTessModeValues.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderTessModeValues.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTextureAtlas.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderTextTextureAtlas.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTextureAtlas.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderTextTextureAtlas.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTextureCache.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderTextTextureCache.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTextureCache.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderTextTextureCache.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTypes.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderTextTypes.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextureAtlas.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderTextureAtlas.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextureAtlas.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderTextureAtlas.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderThreadPool.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderThreadPool.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderThreadPool.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderThreadPool.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderUIPLoader.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderUIPLoader.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderUIPLoader.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderUIPLoader.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderUIPSharedTranslation.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderWidgets.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderWidgets.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderWidgets.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderWidgets.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderableImage.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderableImage.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderer.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRenderer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRendererUtil.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSRendererUtil.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRendererUtil.h (renamed from src/Runtime/Source/runtimerender/Qt3DSRendererUtil.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSTextRenderer.cpp (renamed from src/Runtime/Source/runtimerender/Qt3DSTextRenderer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSTextRenderer.h (renamed from src/Runtime/Source/runtimerender/Qt3DSTextRenderer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/android/DynamicLibLoader.h (renamed from src/Runtime/Source/runtimerender/android/DynamicLibLoader.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderCamera.cpp (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderCamera.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderCamera.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderCamera.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderCustomMaterial.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderCustomMaterial.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.cpp (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDynamicObject.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDynamicObject.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderEffect.cpp (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderEffect.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderEffect.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderEffect.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderGraphObject.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderGraphObject.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderImage.cpp (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderImage.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderImage.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderImage.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLayer.cpp (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLayer.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLight.cpp (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLight.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLightmaps.cpp (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLightmaps.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLightmaps.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLightmaps.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderMaterialDirty.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderMaterialDirty.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderModel.cpp (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderModel.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderModel.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderModel.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderNode.cpp (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderNode.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderNode.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderNode.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPath.cpp (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPath.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPath.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPath.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPathSubPath.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPathSubPath.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPresentation.cpp (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPresentation.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPresentation.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPresentation.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderReferencedMaterial.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderReferencedMaterial.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderScene.cpp (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderScene.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderText.cpp (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderText.h (renamed from src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/linux/DynamicLibLoader.h (renamed from src/Runtime/Source/runtimerender/linux/DynamicLibLoader.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/macos/DynamicLibLoader.h (renamed from src/Runtime/Source/runtimerender/macos/DynamicLibLoader.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/q3dsqmlrender.cpp (renamed from src/Runtime/Source/runtimerender/q3dsqmlrender.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/q3dsqmlrender.h (renamed from src/Runtime/Source/runtimerender/q3dsqmlrender.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/qnx/DynamicLibLoader.h (renamed from src/Runtime/Source/runtimerender/qnx/DynamicLibLoader.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp (renamed from src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRenderableObjects.h (renamed from src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp (renamed from src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImpl.h (renamed from src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp (renamed from src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.h (renamed from src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp (renamed from src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.h (renamed from src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp (renamed from src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h (renamed from src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.cpp (renamed from src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplShaders.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.h (renamed from src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplShaders.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSVertexPipelineImpl.h (renamed from src/Runtime/Source/runtimerender/rendererimpl/Qt3DSVertexPipelineImpl.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderBufferLoader.cpp (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferLoader.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderBufferLoader.h (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferLoader.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.h (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferManager.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.cpp (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.h (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.cpp (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.h (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureBMP.cpp (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureBMP.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.cpp (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.h (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureFreeImageCompat.h (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureFreeImageCompat.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureGIF.cpp (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureGIF.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureHDR.cpp (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureHDR.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.cpp (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.h (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.cpp (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.h (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.cpp (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.h (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceManager.cpp (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceManager.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceManager.h (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceManager.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.cpp (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.h (renamed from src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/windows/DynamicLibLoader.h (renamed from src/Runtime/Source/runtimerender/windows/DynamicLibLoader.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/src.pro10
-rw-r--r--src/Runtime/ogl-runtime/src/state/Qt3DSState.h (renamed from src/Runtime/Source/state/Qt3DSState.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/state/Qt3DSStateScriptContext.h (renamed from src/Runtime/Source/state/Qt3DSStateScriptContext.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/state/Qt3DSStateTypes.h (renamed from src/Runtime/Source/state/Qt3DSStateTypes.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/state/Qt3DSStateVisualBindingContextCommands.h (renamed from src/Runtime/Source/state/Qt3DSStateVisualBindingContextCommands.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSArray.h (renamed from src/Runtime/Source/system/Qt3DSArray.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSArray.inl (renamed from src/Runtime/Source/system/Qt3DSArray.inl)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSAssert.cpp (renamed from src/Runtime/Source/system/Qt3DSAssert.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSAssert.h (renamed from src/Runtime/Source/system/Qt3DSAssert.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSAudioPlayer.h (renamed from src/Runtime/Source/system/Qt3DSAudioPlayer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSBasicPluginDLL.h (renamed from src/Runtime/Source/system/Qt3DSBasicPluginDLL.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSBezierEval.h (renamed from src/Runtime/Source/system/Qt3DSBezierEval.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSBoundingBox.cpp (renamed from src/Runtime/Source/system/Qt3DSBoundingBox.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSBoundingBox.h (renamed from src/Runtime/Source/system/Qt3DSBoundingBox.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSCircularArray.h (renamed from src/Runtime/Source/system/Qt3DSCircularArray.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSCircularArray.inl (renamed from src/Runtime/Source/system/Qt3DSCircularArray.inl)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSColor.cpp (renamed from src/Runtime/Source/system/Qt3DSColor.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSColor.h (renamed from src/Runtime/Source/system/Qt3DSColor.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSConfig.h (renamed from src/Runtime/Source/system/Qt3DSConfig.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSCubicRoots.cpp (renamed from src/Runtime/Source/system/Qt3DSCubicRoots.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSCubicRoots.h (renamed from src/Runtime/Source/system/Qt3DSCubicRoots.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSCubicRootsImpl.h (renamed from src/Runtime/Source/system/Qt3DSCubicRootsImpl.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSDLLManager.cpp (renamed from src/Runtime/Source/system/Qt3DSDLLManager.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSDLLManager.h (renamed from src/Runtime/Source/system/Qt3DSDLLManager.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSDataLogger.cpp (renamed from src/Runtime/Source/system/Qt3DSDataLogger.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSDataLogger.h (renamed from src/Runtime/Source/system/Qt3DSDataLogger.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSDataLogger.hpp (renamed from src/Runtime/Source/system/Qt3DSDataLogger.hpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSDataLoggerEnums.h (renamed from src/Runtime/Source/system/Qt3DSDataLoggerEnums.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSDataLoggerViewer.h (renamed from src/Runtime/Source/system/Qt3DSDataLoggerViewer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSEGLTimer.h (renamed from src/Runtime/Source/system/Qt3DSEGLTimer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSEndian.h (renamed from src/Runtime/Source/system/Qt3DSEndian.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSEulerAngles.cpp (renamed from src/Runtime/Source/system/Qt3DSEulerAngles.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSEulerAngles.h (renamed from src/Runtime/Source/system/Qt3DSEulerAngles.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSFNDTimer.h (renamed from src/Runtime/Source/system/Qt3DSFNDTimer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSFile.cpp (renamed from src/Runtime/Source/system/Qt3DSFile.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSFile.h (renamed from src/Runtime/Source/system/Qt3DSFile.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSFileStream.cpp (renamed from src/Runtime/Source/system/Qt3DSFileStream.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSFileStream.h (renamed from src/Runtime/Source/system/Qt3DSFileStream.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSFixedArray.h (renamed from src/Runtime/Source/system/Qt3DSFixedArray.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSFixedArray.inl (renamed from src/Runtime/Source/system/Qt3DSFixedArray.inl)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSFunctionWrappers.cpp (renamed from src/Runtime/Source/system/Qt3DSFunctionWrappers.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSFunctionWrappers.h (renamed from src/Runtime/Source/system/Qt3DSFunctionWrappers.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSHash.h (renamed from src/Runtime/Source/system/Qt3DSHash.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSIFileStream.h (renamed from src/Runtime/Source/system/Qt3DSIFileStream.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSIStream.h (renamed from src/Runtime/Source/system/Qt3DSIStream.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSITimer.h (renamed from src/Runtime/Source/system/Qt3DSITimer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMacros.h (renamed from src/Runtime/Source/system/Qt3DSMacros.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMatrix.cpp (renamed from src/Runtime/Source/system/Qt3DSMatrix.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMatrix.h (renamed from src/Runtime/Source/system/Qt3DSMatrix.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemory.cpp (renamed from src/Runtime/Source/system/Qt3DSMemory.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemory.h (renamed from src/Runtime/Source/system/Qt3DSMemory.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryFilter.cpp (renamed from src/Runtime/Source/system/Qt3DSMemoryFilter.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryFilter.h (renamed from src/Runtime/Source/system/Qt3DSMemoryFilter.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryHeap.cpp (renamed from src/Runtime/Source/system/Qt3DSMemoryHeap.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryHeap.h (renamed from src/Runtime/Source/system/Qt3DSMemoryHeap.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryManager.cpp (renamed from src/Runtime/Source/system/Qt3DSMemoryManager.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryManager.h (renamed from src/Runtime/Source/system/Qt3DSMemoryManager.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryPool.cpp (renamed from src/Runtime/Source/system/Qt3DSMemoryPool.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryPool.h (renamed from src/Runtime/Source/system/Qt3DSMemoryPool.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryProbe.cpp (renamed from src/Runtime/Source/system/Qt3DSMemoryProbe.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryProbe.h (renamed from src/Runtime/Source/system/Qt3DSMemoryProbe.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemorySettings.h (renamed from src/Runtime/Source/system/Qt3DSMemorySettings.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryStatistics.cpp (renamed from src/Runtime/Source/system/Qt3DSMemoryStatistics.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryStatistics.h (renamed from src/Runtime/Source/system/Qt3DSMemoryStatistics.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryTracker.cpp (renamed from src/Runtime/Source/system/Qt3DSMemoryTracker.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSMemoryTracker.h (renamed from src/Runtime/Source/system/Qt3DSMemoryTracker.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSPlatformSpecific.h (renamed from src/Runtime/Source/system/Qt3DSPlatformSpecific.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSTimer.cpp (renamed from src/Runtime/Source/system/Qt3DSTimer.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSTimer.h (renamed from src/Runtime/Source/system/Qt3DSTimer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSTypes.cpp (renamed from src/Runtime/Source/system/Qt3DSTypes.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSTypes.h (renamed from src/Runtime/Source/system/Qt3DSTypes.h)135
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSVector3.cpp (renamed from src/Runtime/Source/system/Qt3DSVector3.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/Qt3DSVector3.h (renamed from src/Runtime/Source/system/Qt3DSVector3.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/system/SystemPrefix.h (renamed from src/Runtime/Source/system/SystemPrefix.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/uipparser/Qt3DSIPresentation.h (renamed from src/Runtime/Source/uipparser/Qt3DSIPresentation.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParser.h (renamed from src/Runtime/Source/uipparser/Qt3DSUIPParser.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserActionHelper.cpp (renamed from src/Runtime/Source/uipparser/Qt3DSUIPParserActionHelper.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserActionHelper.h (renamed from src/Runtime/Source/uipparser/Qt3DSUIPParserActionHelper.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserImpl.cpp (renamed from src/Runtime/Source/uipparser/Qt3DSUIPParserImpl.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserImpl.h (renamed from src/Runtime/Source/uipparser/Qt3DSUIPParserImpl.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserObjectRefHelper.cpp (renamed from src/Runtime/Source/uipparser/Qt3DSUIPParserObjectRefHelper.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserObjectRefHelper.h (renamed from src/Runtime/Source/uipparser/Qt3DSUIPParserObjectRefHelper.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/viewer/Qt3DSAudioPlayerImpl.cpp (renamed from src/Runtime/Source/viewer/Qt3DSAudioPlayerImpl.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/viewer/Qt3DSAudioPlayerImpl.h (renamed from src/Runtime/Source/viewer/Qt3DSAudioPlayerImpl.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/viewer/Qt3DSViewerApp.cpp (renamed from src/Runtime/Source/viewer/Qt3DSViewerApp.cpp)0
-rw-r--r--src/Runtime/ogl-runtime/src/viewer/Qt3DSViewerApp.h (renamed from src/Runtime/Source/viewer/Qt3DSViewerApp.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/viewer/Qt3DSViewerTimer.h (renamed from src/Runtime/Source/viewer/Qt3DSViewerTimer.h)0
-rw-r--r--src/Runtime/ogl-runtime/src/viewer/qt3dsruntimeglobal.h (renamed from src/Runtime/Source/viewer/qt3dsruntimeglobal.h)0
-rw-r--r--src/Runtime/ogl-runtime/testres.qrc (renamed from src/Runtime/testres.qrc)0
-rw-r--r--src/Runtime/ogl-runtime/tools/attributehashes/AttributeHashes.cpp (renamed from src/Runtime/AttributeHashes/AttributeHashes.cpp)2
-rw-r--r--src/Runtime/ogl-runtime/tools/attributehashes/attributehashes.pro (renamed from src/Runtime/AttributeHashes/AttributeHashes.pro)2
-rw-r--r--src/Runtime/ogl-runtime/tools/tools.pro10
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/Viewer.qrc14
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/android/AndroidManifest.xml77
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/main.cpp384
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/qml/StyledButton.qml52
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenu.qml95
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenuButton.qml71
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenuItem.qml159
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenuSeparator.qml47
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/qml/main.qml594
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/remotedeploymentreceiver.cpp202
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/remotedeploymentreceiver.h (renamed from src/Runtime/api/studio3d/q3dswidget_p.h)86
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/resources/images/3D-studio-viewer.icobin0 -> 112324 bytes
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/resources/images/3D-studio-viewer.svg38
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/resources/images/arrow.pngbin0 -> 523 bytes
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/resources/images/arrow@2x.pngbin0 -> 600 bytes
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/resources/images/check.pngbin0 -> 502 bytes
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/resources/images/check@2x.pngbin0 -> 638 bytes
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/resources/images/viewer.icnsbin0 -> 161003 bytes
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/viewer.cpp416
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/viewer.h128
-rw-r--r--src/Runtime/ogl-runtime/tools/viewer/viewer.pro49
-rw-r--r--src/Runtime/ogl-runtime/utils.pri8
990 files changed, 87684 insertions, 1977 deletions
diff --git a/src/Runtime/Qt3DSRuntimeStatic/Qt3DSRuntimeStatic.pro b/src/Runtime/Qt3DSRuntimeStatic/Qt3DSRuntimeStatic.pro
deleted file mode 100644
index 7e446406..00000000
--- a/src/Runtime/Qt3DSRuntimeStatic/Qt3DSRuntimeStatic.pro
+++ /dev/null
@@ -1,656 +0,0 @@
-TEMPLATE = lib
-TARGET = qt3dsruntimestatic
-CONFIG += staticlib
-include(../commoninclude.pri)
-
-!boot2qt:!integrity:!ios {
- RESOURCES += ../res.qrc
-}
-
-linux {
- DEFINES += _POSIX_C_SOURCE=199309L
- QMAKE_LFLAGS += -lrt
-}
-
-DEFINES += QT3DS_BUILDING_LIBRARY DISABLE_MESH_OPTIMIZATION
-
-QT += qml
-QT += quick-private
-
-# Foundation
-SOURCES += \
- ../Source/foundation/ConvertUTF.cpp \
- ../Source/foundation/EASTL_new.cpp \
- ../Source/foundation/FileTools.cpp \
- ../Source/foundation/IOStreams.cpp \
- ../Source/foundation/Qt3DSLogging.cpp \
- ../Source/foundation/Qt3DSFoundation.cpp \
- ../Source/foundation/Qt3DSMathUtils.cpp \
- ../Source/foundation/Qt3DSPerfTimer.cpp \
- ../Source/foundation/Qt3DSSystem.cpp \
- ../Source/foundation/Socket.cpp \
- ../Source/foundation/StringTable.cpp \
- ../Source/foundation/XML.cpp \
- ../Source/foundation/TrackingAllocator.cpp \
- ../Source/runtimerender/q3dsqmlrender.cpp \
- ../Source/engine/Qt3DSRenderRuntimeBinding.cpp \
- ../Source/engine/Qt3DSRenderRuntimeBindingImplRenderer.cpp \
- ../Source/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp \
- ../Source/engine/Qt3DSTegraInputEngine.cpp \
- ../Source/runtime/Qt3DSActivationManager.cpp \
- ../Source/runtime/Qt3DSAnimationSystem.cpp \
- ../Source/runtime/Qt3DSApplication.cpp \
- ../Source/runtime/Qt3DSAttributeHashes.cpp \
- ../Source/runtime/Qt3DSComponentManager.cpp \
- ../Source/runtime/Qt3DSElementSystem.cpp \
- ../Source/runtime/Qt3DSEventCallbacks.cpp \
- ../Source/runtime/Qt3DSInputEngine.cpp \
- ../Source/runtime/Qt3DSLogicSystem.cpp \
- ../Source/runtime/Qt3DSCommandHelper.cpp \
- ../Source/runtime/Qt3DSElementHelper.cpp \
- ../Source/runtime/Qt3DSOutputMemoryStream.cpp \
- ../Source/runtime/Qt3DSParametersSystem.cpp \
- ../Source/runtime/Qt3DSPresentation.cpp \
- ../Source/runtime/Qt3DSPresentationFrameData.cpp \
- ../Source/runtime/Qt3DSQmlElementHelper.cpp \
- ../Source/runtime/Qt3DSQmlEngine.cpp \
- ../Source/runtime/Qt3DSSlideSystem.cpp \
- ../Source/runtime/Qt3DSTimePolicy.cpp \
- ../Source/runtime/q3dsvariantconfig.cpp \
- ../Source/runtime/q3dsmaterialdefinitionparser.cpp \
- ../Source/runtimerender/graphobjects/Qt3DSRenderCamera.cpp \
- ../Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp \
- ../Source/runtimerender/graphobjects/Qt3DSRenderDynamicObject.cpp \
- ../Source/runtimerender/graphobjects/Qt3DSRenderEffect.cpp \
- ../Source/runtimerender/graphobjects/Qt3DSRenderImage.cpp \
- ../Source/runtimerender/graphobjects/Qt3DSRenderLayer.cpp \
- ../Source/runtimerender/graphobjects/Qt3DSRenderLight.cpp \
- ../Source/runtimerender/graphobjects/Qt3DSRenderLightmaps.cpp \
- ../Source/runtimerender/graphobjects/Qt3DSRenderModel.cpp \
- ../Source/runtimerender/graphobjects/Qt3DSRenderNode.cpp \
- ../Source/runtimerender/graphobjects/Qt3DSRenderPath.cpp \
- ../Source/runtimerender/graphobjects/Qt3DSRenderPresentation.cpp \
- ../Source/runtimerender/graphobjects/Qt3DSRenderScene.cpp \
- ../Source/runtimerender/graphobjects/Qt3DSRenderText.cpp \
- ../Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp \
- ../Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp \
- ../Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp \
- ../Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp \
- ../Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp \
- ../Source/runtimerender/rendererimpl/Qt3DSRendererImplShaders.cpp \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderBufferLoader.cpp \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.cpp \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.cpp \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureBMP.cpp \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.cpp \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureGIF.cpp \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureHDR.cpp \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.cpp \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.cpp \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderResourceManager.cpp \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.cpp \
- ../Source/runtimerender/Qt3DSOffscreenRenderManager.cpp \
- ../Source/runtimerender/Qt3DSOldNBustedRenderPlugin.cpp \
- ../Source/runtimerender/Qt3DSOnscreenTextRenderer.cpp \
- ../Source/runtimerender/Qt3DSQtTextRenderer.cpp \
- ../Source/runtimerender/Qt3DSRenderClippingFrustum.cpp \
- ../Source/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp \
- ../Source/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp \
- ../Source/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp \
- ../Source/runtimerender/Qt3DSRenderDynamicObjectSystem.cpp \
- ../Source/runtimerender/Qt3DSRenderEffectSystem.cpp \
- ../Source/runtimerender/Qt3DSRendererUtil.cpp \
- ../Source/runtimerender/Qt3DSRenderEulerAngles.cpp \
- ../Source/runtimerender/Qt3DSRenderGpuProfiler.cpp \
- ../Source/runtimerender/Qt3DSRenderGraphObjectSerializer.cpp \
- ../Source/runtimerender/Qt3DSRenderImageScaler.cpp \
- ../Source/runtimerender/Qt3DSRenderInputStreamFactory.cpp \
- ../Source/runtimerender/Qt3DSRenderPathManager.cpp \
- ../Source/runtimerender/Qt3DSRenderPixelGraphicsRenderer.cpp \
- ../Source/runtimerender/Qt3DSRenderPixelGraphicsTypes.cpp \
- ../Source/runtimerender/Qt3DSRenderPlugin.cpp \
- ../Source/runtimerender/Qt3DSRenderRay.cpp \
- ../Source/runtimerender/Qt3DSRenderRenderList.cpp \
- ../Source/runtimerender/Qt3DSRenderShaderCache.cpp \
- ../Source/runtimerender/Qt3DSRenderShaderCodeGenerator.cpp \
- ../Source/runtimerender/Qt3DSRenderShaderCodeGeneratorV2.cpp \
- ../Source/runtimerender/Qt3DSRenderShadowMap.cpp \
- ../Source/runtimerender/Qt3DSRenderSubpresentation.cpp \
- ../Source/runtimerender/Qt3DSRenderTextTextureAtlas.cpp \
- ../Source/runtimerender/Qt3DSRenderTextTextureCache.cpp \
- ../Source/runtimerender/Qt3DSRenderTextureAtlas.cpp \
- ../Source/runtimerender/Qt3DSRenderThreadPool.cpp \
- ../Source/runtimerender/Qt3DSRenderUIPLoader.cpp \
- ../Source/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp \
- ../Source/runtimerender/Qt3DSRenderWidgets.cpp \
- ../Source/runtimerender/Qt3DSTextRenderer.cpp \
- ../Source/system/Qt3DSAssert.cpp \
- ../Source/system/Qt3DSBoundingBox.cpp \
- ../Source/system/Qt3DSColor.cpp \
- ../Source/system/Qt3DSCubicRoots.cpp \
- ../Source/system/Qt3DSDataLogger.cpp \
- ../Source/system/Qt3DSDLLManager.cpp \
- ../Source/system/Qt3DSEulerAngles.cpp \
- ../Source/system/Qt3DSFile.cpp \
- ../Source/system/Qt3DSFileStream.cpp \
- ../Source/system/Qt3DSFunctionWrappers.cpp \
- ../Source/system/Qt3DSMatrix.cpp \
- ../Source/system/Qt3DSMemory.cpp \
- ../Source/system/Qt3DSMemoryFilter.cpp \
- ../Source/system/Qt3DSMemoryHeap.cpp \
- ../Source/system/Qt3DSMemoryManager.cpp \
- ../Source/system/Qt3DSMemoryPool.cpp \
- ../Source/system/Qt3DSMemoryProbe.cpp \
- ../Source/system/Qt3DSMemoryStatistics.cpp \
- ../Source/system/Qt3DSMemoryTracker.cpp \
- ../Source/system/Qt3DSTimer.cpp \
- ../Source/system/Qt3DSTypes.cpp \
- ../Source/system/Qt3DSVector3.cpp \
- ../Source/uipparser/Qt3DSUIPParserActionHelper.cpp \
- ../Source/uipparser/Qt3DSUIPParserImpl.cpp \
- ../Source/uipparser/Qt3DSUIPParserObjectRefHelper.cpp \
- ../Source/runtimerender/Qt3DSRenderContextCore.cpp \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.cpp \
- ../Source/runtimerender/Qt3DSDistanceFieldRenderer.cpp \
- ../Source/runtimerender/Qt3DSFontDatabase.cpp \
- ../Source/runtimerender/Qt3DSDistanceFieldGlyphCacheManager.cpp \
- ../Source/runtimerender/Qt3DSDistanceFieldGlyphCache.cpp \
- ../Source/engine/Qt3DSRuntimeView.cpp
-
-HEADERS += \
- ../Source/foundation/ConvertUTF.h \
- ../Source/foundation/FileTools.h \
- ../Source/foundation/StringTools.h \
- ../Source/foundation/IOStreams.h \
- ../Source/foundation/Qt3DSLogging.h \
- ../Source/foundation/Qt3DSFoundation.h \
- ../Source/foundation/Qt3DSMathUtils.h \
- ../Source/foundation/Qt3DSPerfTimer.h \
- ../Source/foundation/Qt3DSSystem.h \
- ../Source/foundation/Socket.h \
- ../Source/foundation/StringTable.h \
- ../Source/foundation/XML.h \
- ../Source/foundation/AutoDeallocatorAllocator.h \
- ../Source/foundation/FastAllocator.h \
- ../Source/foundation/PoolingAllocator.h \
- ../Source/foundation/PreAllocatedAllocator.h \
- ../Source/foundation/Qt3DS.h \
- ../Source/foundation/Qt3DSAllocator.h \
- ../Source/foundation/Qt3DSAllocatorCallback.h \
- ../Source/foundation/Qt3DSAssert.h \
- ../Source/foundation/Qt3DSAtomic.h \
- ../Source/foundation/Qt3DSBasicTemplates.h \
- ../Source/foundation/Qt3DSBounds3.h \
- ../Source/foundation/Qt3DSBroadcastingAllocator.h \
- ../Source/foundation/Qt3DSContainers.h \
- ../Source/foundation/Qt3DSDataRef.h \
- ../Source/foundation/Qt3DSDiscriminatedUnion.h \
- ../Source/foundation/Qt3DSFastIPC.h \
- ../Source/foundation/Qt3DSFlags.h \
- ../Source/foundation/Qt3DSFPU.h \
- ../Source/foundation/Qt3DSIndexableLinkedList.h \
- ../Source/foundation/Qt3DSIntrinsics.h \
- ../Source/foundation/Qt3DSInvasiveLinkedList.h \
- ../Source/foundation/Qt3DSInvasiveSet.h \
- ../Source/foundation/Qt3DSIPC.h \
- ../Source/foundation/Qt3DSMat33.h \
- ../Source/foundation/Qt3DSMat44.h \
- ../Source/foundation/Qt3DSMath.h \
- ../Source/foundation/Qt3DSMemoryBuffer.h \
- ../Source/foundation/Qt3DSMutex.h \
- ../Source/foundation/Qt3DSNoCopy.h \
- ../Source/foundation/Qt3DSOption.h \
- ../Source/foundation/Qt3DSPlane.h \
- ../Source/foundation/Qt3DSPool.h \
- ../Source/foundation/Qt3DSPreprocessor.h \
- ../Source/foundation/Qt3DSQuat.h \
- ../Source/foundation/Qt3DSRefCounted.h \
- ../Source/foundation/Qt3DSSemaphore.h \
- ../Source/foundation/Qt3DSSimpleTypes.h \
- ../Source/foundation/Qt3DSStringTokenizer.h \
- ../Source/foundation/Qt3DSSync.h \
- ../Source/foundation/Qt3DSThread.h \
- ../Source/foundation/Qt3DSTime.h \
- ../Source/foundation/Qt3DSTransform.h \
- ../Source/foundation/Qt3DSUnionCast.h \
- ../Source/foundation/Qt3DSUtilities.h \
- ../Source/foundation/Qt3DSVec2.h \
- ../Source/foundation/Qt3DSVec3.h \
- ../Source/foundation/Qt3DSVec4.h \
- ../Source/foundation/Qt3DSVersionNumber.h \
- ../Source/foundation/SerializationTypes.h \
- ../Source/foundation/StrConvertUTF.h \
- ../Source/foundation/StringConversion.h \
- ../Source/foundation/StringConversionImpl.h \
- ../Source/foundation/TaggedPointer.h \
- ../Source/foundation/ThreadSafeQueue.h \
- ../Source/foundation/TrackingAllocator.h \
- ../Source/foundation/Utils.h \
- ../Source/runtimerender/q3dsqmlrender.h \
- ../Source/engine/Qt3DSRenderRuntimeBinding.h \
- ../Source/engine/Qt3DSRenderRuntimeBindingImpl.h \
- ../Source/engine/Qt3DSTegraInputEngine.h \
- ../Source/runtime/Qt3DSActivationManager.h \
- ../Source/runtime/Qt3DSAnimationSystem.h \
- ../Source/runtime/Qt3DSApplication.h \
- ../Source/runtime/Qt3DSAttributeHashes.h \
- ../Source/runtime/Qt3DSComponentManager.h \
- ../Source/runtime/Qt3DSElementSystem.h \
- ../Source/runtime/Qt3DSEventCallbacks.h \
- ../Source/runtime/Qt3DSInputEngine.h \
- ../Source/runtime/Qt3DSLogicSystem.h \
- ../Source/runtime/Qt3DSCommandHelper.h \
- ../Source/runtime/Qt3DSElementHelper.h \
- ../Source/runtime/Qt3DSOutputMemoryStream.h \
- ../Source/runtime/Qt3DSParametersSystem.h \
- ../Source/runtime/Qt3DSPresentation.h \
- ../Source/runtime/Qt3DSPresentationFrameData.h \
- ../Source/runtime/Qt3DSQmlElementHelper.h \
- ../Source/runtime/Qt3DSQmlEngine.h \
- ../Source/runtime/Qt3DSSlideSystem.h \
- ../Source/runtime/Qt3DSTimePolicy.h \
- ../Source/runtime/Qt3DSApplicationValues.h \
- ../Source/runtime/Qt3DSIComponentManager.h \
- ../Source/runtime/Qt3DSIInputSystem.h \
- ../Source/runtime/Qt3DSInputDefs.h \
- ../Source/runtime/Qt3DSInputEventTypes.h \
- ../Source/runtime/Qt3DSIStateful.h \
- ../Source/runtime/Qt3DSIText.h \
- ../Source/runtime/Qt3DSKernelTypes.h \
- ../Source/runtime/q3dsvariantconfig_p.h \
- ../Source/runtime/q3dsmaterialdefinitionparser.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderCamera.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderCustomMaterial.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderDynamicObject.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderEffect.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderGraphObject.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderImage.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderLayer.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderLight.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderLightmaps.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderMaterialDirty.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderModel.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderNode.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderPath.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderPathSubPath.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderPresentation.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderReferencedMaterial.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderScene.h \
- ../Source/runtimerender/graphobjects/Qt3DSRenderText.h \
- ../Source/runtimerender/Qt3DSOffscreenRenderKey.h \
- ../Source/runtimerender/Qt3DSOffscreenRenderManager.h \
- ../Source/runtimerender/Qt3DSOldNBustedRenderPlugin.h \
- ../Source/runtimerender/Qt3DSRender.h \
- ../Source/runtimerender/Qt3DSRenderableImage.h \
- ../Source/runtimerender/Qt3DSRenderClippingFrustum.h \
- ../Source/runtimerender/Qt3DSRenderCustomMaterialRenderContext.h \
- ../Source/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.h \
- ../Source/runtimerender/Qt3DSRenderCustomMaterialSystem.h \
- ../Source/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.h \
- ../Source/runtimerender/Qt3DSRenderDynamicObjectSystem.h \
- ../Source/runtimerender/Qt3DSRenderDynamicObjectSystemCommands.h \
- ../Source/runtimerender/Qt3DSRenderDynamicObjectSystemUtil.h \
- ../Source/runtimerender/Qt3DSRenderEffectSystem.h \
- ../Source/runtimerender/Qt3DSRenderer.h \
- ../Source/runtimerender/Qt3DSRendererUtil.h \
- ../Source/runtimerender/Qt3DSRenderEulerAngles.h \
- ../Source/runtimerender/Qt3DSRenderGraphObjectPickQuery.h \
- ../Source/runtimerender/Qt3DSRenderGraphObjectSerializer.h \
- ../Source/runtimerender/Qt3DSRenderGraphObjectTypes.h \
- ../Source/runtimerender/Qt3DSRenderImageScaler.h \
- ../Source/runtimerender/Qt3DSRenderImageTextureData.h \
- ../Source/runtimerender/Qt3DSRenderInputStreamFactory.h \
- ../Source/runtimerender/Qt3DSRenderMaterialHelpers.h \
- ../Source/runtimerender/Qt3DSRenderMaterialShaderGenerator.h \
- ../Source/runtimerender/Qt3DSRenderMesh.h \
- ../Source/runtimerender/Qt3DSRenderPathManager.h \
- ../Source/runtimerender/Qt3DSRenderPathMath.h \
- ../Source/runtimerender/Qt3DSRenderPathRenderContext.h \
- ../Source/runtimerender/Qt3DSRenderPixelGraphicsRenderer.h \
- ../Source/runtimerender/Qt3DSRenderPixelGraphicsTypes.h \
- ../Source/runtimerender/Qt3DSRenderPlugin.h \
- ../Source/runtimerender/Qt3DSRenderPluginCInterface.h \
- ../Source/runtimerender/Qt3DSRenderPluginGraphObject.h \
- ../Source/runtimerender/Qt3DSRenderPluginPropertyValue.h \
- ../Source/runtimerender/Qt3DSRenderProfiler.h \
- ../Source/runtimerender/Qt3DSRenderRay.h \
- ../Source/runtimerender/Qt3DSRenderRenderList.h \
- ../Source/runtimerender/Qt3DSRenderRotationHelper.h \
- ../Source/runtimerender/Qt3DSRenderShaderCache.h \
- ../Source/runtimerender/Qt3DSRenderShaderCodeGenerator.h \
- ../Source/runtimerender/Qt3DSRenderShaderCodeGeneratorV2.h \
- ../Source/runtimerender/Qt3DSRenderShaderKeys.h \
- ../Source/runtimerender/Qt3DSRenderShadowMap.h \
- ../Source/runtimerender/Qt3DSRenderSubpresentation.h \
- ../Source/runtimerender/Qt3DSRenderSubPresentationHelper.h \
- ../Source/runtimerender/Qt3DSRenderTaggedPointer.h \
- ../Source/runtimerender/Qt3DSRenderTessModeValues.h \
- ../Source/runtimerender/Qt3DSRenderTextTextureAtlas.h \
- ../Source/runtimerender/Qt3DSRenderTextTextureCache.h \
- ../Source/runtimerender/Qt3DSRenderTextTypes.h \
- ../Source/runtimerender/Qt3DSRenderTextureAtlas.h \
- ../Source/runtimerender/Qt3DSRenderThreadPool.h \
- ../Source/runtimerender/Qt3DSRenderUIPLoader.h \
- ../Source/runtimerender/Qt3DSRenderUIPSharedTranslation.h \
- ../Source/runtimerender/Qt3DSRenderWidgets.h \
- ../Source/runtimerender/Qt3DSTextRenderer.h \
- ../Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.h \
- ../Source/runtimerender/rendererimpl/Qt3DSRendererImpl.h \
- ../Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.h \
- ../Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.h \
- ../Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h \
- ../Source/runtimerender/rendererimpl/Qt3DSRendererImplShaders.h \
- ../Source/runtimerender/rendererimpl/Qt3DSVertexPipelineImpl.h \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderBufferLoader.h \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderBufferManager.h \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.h \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.h \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.h \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureFreeImageCompat.h \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.h \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.h \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderResourceManager.h \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.h \
- ../Source/system/Qt3DSArray.h \
- ../Source/system/Qt3DSAssert.h \
- ../Source/system/Qt3DSAudioPlayer.h \
- ../Source/system/Qt3DSBasicPluginDLL.h \
- ../Source/system/Qt3DSBezierEval.h \
- ../Source/system/Qt3DSBoundingBox.h \
- ../Source/system/Qt3DSCircularArray.h \
- ../Source/system/Qt3DSColor.h \
- ../Source/system/Qt3DSConfig.h \
- ../Source/system/Qt3DSCubicRoots.h \
- ../Source/system/Qt3DSCubicRootsImpl.h \
- ../Source/system/Qt3DSDataLogger.h \
- ../Source/system/Qt3DSDataLogger.hpp \
- ../Source/system/Qt3DSDataLoggerEnums.h \
- ../Source/system/Qt3DSDataLoggerViewer.h \
- ../Source/system/Qt3DSDLLManager.h \
- ../Source/system/Qt3DSEGLTimer.h \
- ../Source/system/Qt3DSEndian.h \
- ../Source/system/Qt3DSEulerAngles.h \
- ../Source/system/Qt3DSFile.h \
- ../Source/system/Qt3DSFileStream.h \
- ../Source/system/Qt3DSFixedArray.h \
- ../Source/system/Qt3DSFNDTimer.h \
- ../Source/system/Qt3DSFunctionWrappers.h \
- ../Source/system/Qt3DSHash.h \
- ../Source/system/Qt3DSIFileStream.h \
- ../Source/system/Qt3DSIStream.h \
- ../Source/system/Qt3DSITimer.h \
- ../Source/system/Qt3DSMacros.h \
- ../Source/system/Qt3DSMatrix.h \
- ../Source/system/Qt3DSMemory.h \
- ../Source/system/Qt3DSMemoryFilter.h \
- ../Source/system/Qt3DSMemoryHeap.h \
- ../Source/system/Qt3DSMemoryManager.h \
- ../Source/system/Qt3DSMemoryPool.h \
- ../Source/system/Qt3DSMemoryProbe.h \
- ../Source/system/Qt3DSMemorySettings.h \
- ../Source/system/Qt3DSMemoryStatistics.h \
- ../Source/system/Qt3DSMemoryTracker.h \
- ../Source/system/Qt3DSPlatformSpecific.h \
- ../Source/system/Qt3DSTimer.h \
- ../Source/system/Qt3DSTypes.h \
- ../Source/system/Qt3DSVector3.h \
- ../Source/system/Qt3DSArray.inl \
- ../Source/system/Qt3DSCircularArray.inl \
- ../Source/system/Qt3DSFixedArray.inl \
- ../Source/state/Qt3DSState.h \
- ../Source/state/Qt3DSStateTypes.h \
- ../Source/state/Qt3DSStateScriptContext.h \
- ../Source/state/Qt3DSStateVisualBindingContextCommands.h \
- ../Source/uipparser/Qt3DSIPresentation.h \
- ../Source/uipparser/Qt3DSUIPParser.h \
- ../Source/uipparser/Qt3DSUIPParserActionHelper.h \
- ../Source/uipparser/Qt3DSUIPParserImpl.h \
- ../Source/uipparser/Qt3DSUIPParserObjectRefHelper.h \
- ../Source/runtime/Qt3DSCommandEventTypes.h \
- ../Source/runtime/Qt3DSEvent.h \
- ../Source/runtime/Qt3DSFrameworkTypes.h \
- ../Source/runtime/Qt3DSInputFrame.h \
- ../Source/runtime/Qt3DSIScene.h \
- ../Source/runtime/Qt3DSIScriptBridge.h \
- ../Source/runtime/Qt3DSPickFrame.h \
- ../Source/runtime/Qt3DSRuntimeFactory.h \
- ../Source/runtime/Qt3DSSceneManager.h \
- ../Source/engine/Qt3DSEGLInfo.h \
- ../Source/engine/Qt3DSEGLWindowSystem.h \
- ../Source/engine/Qt3DSPluginDLL.h \
- ../Source/engine/Qt3DSWindowSystem.h \
- ../Source/runtimerender/Qt3DSRenderContextCore.h \
- ../Source/runtimerender/Qt3DSRenderLightConstantProperties.h \
- ../Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.h \
- ../Source/runtimerender/Qt3DSDistanceFieldRenderer.h \
- ../Source/runtimerender/Qt3DSFontDatabase_p.h \
- ../Source/runtimerender/Qt3DSDistanceFieldGlyphCacheManager_p.h \
- ../Source/runtimerender/Qt3DSDistanceFieldGlyphCache_p.h \
- ../Source/engine/Qt3DSRuntimeView.h
-
-win32 {
-SOURCES += \
- ../Source/foundation/windows/Qt3DSWindowsAtomic.cpp \
- ../Source/foundation/windows/Qt3DSWindowsFPU.cpp \
- ../Source/foundation/windows/Qt3DSWindowsMutex.cpp \
- ../Source/foundation/windows/Qt3DSWindowsSemaphore.cpp \
- ../Source/foundation/windows/Qt3DSWindowsSync.cpp \
- ../Source/foundation/windows/Qt3DSWindowsThread.cpp \
- ../Source/foundation/windows/Qt3DSWindowsTime.cpp
-
-HEADERS += \
- ../Source/foundation/windows/Qt3DSWindowsAoS.h \
- ../Source/foundation/windows/Qt3DSWindowsFile.h \
- ../Source/foundation/windows/Qt3DSWindowsInclude.h \
- ../Source/foundation/windows/Qt3DSWindowsInlineAoS.h \
- ../Source/foundation/windows/Qt3DSWindowsIntrinsics.h \
- ../Source/foundation/windows/Qt3DSWindowsString.h \
- ../Source/foundation/windows/Qt3DSWindowsTrigConstants.h
-}
-
-macos: SOURCES += \
- ../Source/foundation/macos/Qt3DSUnixAtomic.cpp \
- ../Source/foundation/macos/Qt3DSUnixFPU.cpp \
- ../Source/foundation/macos/Qt3DSUnixMutex.cpp \
- ../Source/foundation/macos/Qt3DSUnixSemaphore.cpp \
- ../Source/foundation/macos/Qt3DSUnixSync.cpp \
- ../Source/foundation/linux/Qt3DSLinuxThread.cpp \
- ../Source/foundation/macos/Qt3DSUnixTime.cpp
-
-linux|integrity|qnx {
-SOURCES += \
- ../Source/foundation/linux/Qt3DSLinuxAtomic.cpp \
- ../Source/foundation/linux/Qt3DSLinuxFPU.cpp \
- ../Source/foundation/linux/Qt3DSLinuxMutex.cpp \
- ../Source/foundation/linux/Qt3DSLinuxSemaphore.cpp \
- ../Source/foundation/linux/Qt3DSLinuxSync.cpp \
- ../Source/foundation/linux/Qt3DSLinuxThread.cpp \
- ../Source/foundation/linux/Qt3DSLinuxTime.cpp
-
-HEADERS += \
- ../Source/foundation/linux/Qt3DSLinuxAoS.h \
- ../Source/foundation/linux/Qt3DSLinuxFile.h \
- ../Source/foundation/linux/Qt3DSLinuxInlineAoS.h \
- ../Source/foundation/linux/Qt3DSLinuxIntrinsics.h \
- ../Source/foundation/linux/Qt3DSLinuxString.h \
- ../Source/foundation/linux/Qt3DSLinuxTrigConstants.h
-}
-
-# Libs
-SOURCES += \
- ../Source/platformspecific/$$PlatformSpecificDir/libs/nv_math/nv_math.cpp \
- ../Source/platformspecific/$$PlatformSpecificDir/libs/nv_math/nv_matrix.cpp \
- ../Source/platformspecific/$$PlatformSpecificDir/libs/nv_math/nv_quat.cpp
-
-# RenderBase
-SOURCES += \
- ../Source/render/Qt3DSRenderAtomicCounterBuffer.cpp \
- ../Source/render/Qt3DSRenderAttribLayout.cpp \
- ../Source/render/Qt3DSRenderBaseTypes.cpp \
- ../Source/render/Qt3DSRenderComputeShader.cpp \
- ../Source/render/Qt3DSRenderConstantBuffer.cpp \
- ../Source/render/Qt3DSRenderContext.cpp \
- ../Source/render/Qt3DSRenderDataBuffer.cpp \
- ../Source/render/Qt3DSRenderDepthStencilState.cpp \
- ../Source/render/Qt3DSRenderDrawIndirectBuffer.cpp \
- ../Source/render/Qt3DSRenderFragmentShader.cpp \
- ../Source/render/Qt3DSRenderFrameBuffer.cpp \
- ../Source/render/Qt3DSRenderGeometryShader.cpp \
- ../Source/render/Qt3DSRenderImageTexture.cpp \
- ../Source/render/Qt3DSRenderIndexBuffer.cpp \
- ../Source/render/Qt3DSRenderInputAssembler.cpp \
- ../Source/render/Qt3DSRenderOcclusionQuery.cpp \
- ../Source/render/Qt3DSRenderPathFontSpecification.cpp \
- ../Source/render/Qt3DSRenderPathFontText.cpp \
- ../Source/render/Qt3DSRenderPathRender.cpp \
- ../Source/render/Qt3DSRenderPathSpecification.cpp \
- ../Source/render/Qt3DSRenderProgramPipeline.cpp \
- ../Source/render/Qt3DSRenderQueryBase.cpp \
- ../Source/render/Qt3DSRenderRasterizerState.cpp \
- ../Source/render/Qt3DSRenderRenderBuffer.cpp \
- ../Source/render/Qt3DSRenderSampler.cpp \
- ../Source/render/Qt3DSRenderShaderProgram.cpp \
- ../Source/render/Qt3DSRenderStorageBuffer.cpp \
- ../Source/render/Qt3DSRenderSync.cpp \
- ../Source/render/Qt3DSRenderTessellationShader.cpp \
- ../Source/render/Qt3DSRenderTexture2D.cpp \
- ../Source/render/Qt3DSRenderTexture2DArray.cpp \
- ../Source/render/Qt3DSRenderTextureBase.cpp \
- ../Source/render/Qt3DSRenderTextureCube.cpp \
- ../Source/render/Qt3DSRenderTimerQuery.cpp \
- ../Source/render/Qt3DSRenderVertexBuffer.cpp \
- ../Source/render/Qt3DSRenderVertexShader.cpp
-
-HEADERS += \
- ../Source/render/Qt3DSRenderAtomicCounterBuffer.h \
- ../Source/render/Qt3DSRenderAttribLayout.h \
- ../Source/render/Qt3DSRenderBaseTypes.h \
- ../Source/render/Qt3DSRenderComputeShader.h \
- ../Source/render/Qt3DSRenderConstantBuffer.h \
- ../Source/render/Qt3DSRenderContext.h \
- ../Source/render/Qt3DSRenderDataBuffer.h \
- ../Source/render/Qt3DSRenderDepthStencilState.h \
- ../Source/render/Qt3DSRenderDrawable.h \
- ../Source/render/Qt3DSRenderDrawIndirectBuffer.h \
- ../Source/render/Qt3DSRenderFragmentShader.h \
- ../Source/render/Qt3DSRenderFrameBuffer.h \
- ../Source/render/Qt3DSRenderGeometryShader.h \
- ../Source/render/Qt3DSRenderImageTexture.h \
- ../Source/render/Qt3DSRenderIndexBuffer.h \
- ../Source/render/Qt3DSRenderInputAssembler.h \
- ../Source/render/Qt3DSRenderOcclusionQuery.h \
- ../Source/render/Qt3DSRenderPathFontSpecification.h \
- ../Source/render/Qt3DSRenderPathFontText.h \
- ../Source/render/Qt3DSRenderPathRender.h \
- ../Source/render/Qt3DSRenderPathSpecification.h \
- ../Source/render/Qt3DSRenderProgramPipeline.h \
- ../Source/render/Qt3DSRenderQueryBase.h \
- ../Source/render/Qt3DSRenderRasterizerState.h \
- ../Source/render/Qt3DSRenderRenderBuffer.h \
- ../Source/render/Qt3DSRenderSampler.h \
- ../Source/render/Qt3DSRenderShader.h \
- ../Source/render/Qt3DSRenderShaderConstant.h \
- ../Source/render/Qt3DSRenderShaderProgram.h \
- ../Source/render/Qt3DSRenderStorageBuffer.h \
- ../Source/render/Qt3DSRenderSync.h \
- ../Source/render/Qt3DSRenderTessellationShader.h \
- ../Source/render/Qt3DSRenderTexture2D.h \
- ../Source/render/Qt3DSRenderTexture2DArray.h \
- ../Source/render/Qt3DSRenderTextureBase.h \
- ../Source/render/Qt3DSRenderTextureCube.h \
- ../Source/render/Qt3DSRenderTimerQuery.h \
- ../Source/render/Qt3DSRenderVertexBuffer.h \
- ../Source/render/Qt3DSRenderVertexShader.h \
- ../Source/render/glg/Qt3DSGLImplObjects.h
-
-# Render
-SOURCES += \
- ../Source/render/backends/gl/Qt3DSOpenGLExtensions.cpp \
- ../Source/render/backends/gl/Qt3DSRenderBackendGL3.cpp \
- ../Source/render/backends/gl/Qt3DSRenderBackendGL4.cpp \
- ../Source/render/backends/gl/Qt3DSRenderBackendGLBase.cpp \
- ../Source/render/backends/gl/Qt3DSRenderContextGL.cpp \
- ../Source/render/backends/software/Qt3DSRenderBackendNULL.cpp \
- ../Source/render/backends/gl/Q3DSRenderBackendGLES2.cpp
-
-HEADERS += \
- ../Source/render/backends/Qt3DSRenderBackend.h \
- ../Source/render/backends/gl/Qt3DSOpenGLPrefix.h \
- ../Source/render/backends/gl/Qt3DSOpenGLUtil.h \
- ../Source/render/backends/gl/Qt3DSOpenGLExtensions.h \
- ../Source/render/backends/gl/Qt3DSRenderBackendGL3.h \
- ../Source/render/backends/gl/Qt3DSRenderBackendGL4.h \
- ../Source/render/backends/gl/Qt3DSRenderBackendGLBase.h \
- ../Source/render/backends/gl/Qt3DSRenderBackendInputAssemblerGL.h \
- ../Source/render/backends/gl/Qt3DSRenderBackendRenderStatesGL.h \
- ../Source/render/backends/gl/Qt3DSRenderBackendShaderProgramGL.h \
- ../Source/render/backends/software/Qt3DSRenderBackendNULL.h \
- ../Source/render/backends/gl/Q3DSRenderBackendGLES2.h
-
-# DataModel
-SOURCES += \
- ../Source/datamodel/Qt3DSMetadata.cpp \
- ../../Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportMesh.cpp \
- ../../Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportMeshBuilder.cpp \
- ../../Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportPath.cpp \
- ../../Authoring/QT3DSDM/Systems/Qt3DSDMMetaData.cpp \
- ../../Authoring/QT3DSDM/Systems/Qt3DSDMXML.cpp \
- ../../Authoring/QT3DSDM/Systems/Qt3DSDMStringTable.cpp \
- ../../Authoring/QT3DSDM/Systems/Qt3DSDMComposerTypeDefinitions.cpp \
- ../../Authoring/QT3DSDM/Systems/Qt3DSDMValue.cpp \
- ../../Authoring/QT3DSDM/Systems/Cores/SimpleDataCore.cpp
-
-HEADERS += \
- ../Source/datamodel/Qt3DSMetadata.h \
- ../Source/datamodel/DocumentResourceManagerScriptParser.h \
- ../../Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportMesh.h \
- ../../Authoring/QT3DSIMP/Qt3DSImportLib/Qt3DSImportPath.h \
- ../../Authoring/QT3DSDM/Systems/Qt3DSDMMetaData.h \
- ../../Authoring/QT3DSDM/Systems/Qt3DSDMXML.h \
- ../../Authoring/QT3DSDM/Systems/Qt3DSDMStringTable.h \
- ../../Authoring/QT3DSDM/Systems/Qt3DSDMHandles.h \
- ../../Authoring/QT3DSDM/Systems/Qt3DSDMComposerTypeDefinitions.h \
- ../../Authoring/QT3DSDM/Systems/Qt3DSDMValue.h \
- ../../Authoring/QT3DSDM/Systems/Cores/SimpleDataCore.h
-
-# Engine
-HEADERS += \
- ../Source/engine/EnginePrefix.h
-
-# Event
-SOURCES += \
- ../Source/event/EventFactory.cpp \
- ../Source/event/EventPoller.cpp \
- ../Source/event/EventSystemC.cpp
-
-HEADERS += \
- ../Source/event/EventPollingSystem.h \
- ../Source/event/EventSystem.h \
- ../Source/event/EventSystemC.h
-
-# Render
-HEADERS += \
- ../Source/runtimerender/android/DynamicLibLoader.h \
- ../Source/runtimerender/linux/DynamicLibLoader.h \
- ../Source/runtimerender/macos/DynamicLibLoader.h \
- ../Source/runtimerender/qnx/DynamicLibLoader.h \
- ../Source/runtimerender/windows/DynamicLibLoader.h
-
-# Runtime
-HEADERS += \
- ../Source/runtime/RuntimePrefix.h \
- ../Source/runtime/q3dsqmlscript.h \
- ../Source/runtime/q3dsqmlbehavior.h
-
-SOURCES += \
- ../Source/runtime/q3dsqmlscript.cpp \
- ../Source/runtime/q3dsqmlbehavior.cpp
-
-# System
-HEADERS += \
- ../Source/system/SystemPrefix.h
-
-DISTFILES += \
- ../Source/runtime/Qt3DSAttributeHashes.txt
diff --git a/src/Runtime/Runtime.pro b/src/Runtime/Runtime.pro
index aedfb1ee..a23a91a0 100644
--- a/src/Runtime/Runtime.pro
+++ b/src/Runtime/Runtime.pro
@@ -1,14 +1,7 @@
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += \
- Qt3DSRuntimeStatic \
- Qt3DSRuntime \
- api
-
-win32 {
-SUBDIRS += \
- AttributeHashes
-}
+ ogl-runtime \
# Qt3D based runtime needs Qt 5.11 or later
greaterThan(QT_MAJOR_VERSION, 5)|greaterThan(QT_MINOR_VERSION, 10) {
diff --git a/src/Runtime/api/studio3d/q3dsdatainput.cpp b/src/Runtime/api/studio3d/q3dsdatainput.cpp
deleted file mode 100644
index b084ee4d..00000000
--- a/src/Runtime/api/studio3d/q3dsdatainput.cpp
+++ /dev/null
@@ -1,192 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt 3D Studio.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "q3dsdatainput_p.h"
-#include "q3dspresentation_p.h"
-#include "q3dscommandqueue_p.h"
-
-#include <QtCore/qdebug.h>
-
-QT_BEGIN_NAMESPACE
-
-Q3DSDataInput::Q3DSDataInput(QObject *parent)
- : QObject(parent)
- , d_ptr(new Q3DSDataInputPrivate(this))
-{
-}
-
-Q3DSDataInput::Q3DSDataInput(const QString &name, QObject *parent)
- : QObject(parent)
- , d_ptr(new Q3DSDataInputPrivate(this))
-{
- d_ptr->m_name = name;
-}
-
-Q3DSDataInput::Q3DSDataInput(Q3DSPresentation *presentation, const QString &name, QObject *parent)
- : QObject(parent)
- , d_ptr(new Q3DSDataInputPrivate(this))
-{
- d_ptr->m_name = name;
- d_ptr->m_presentation = presentation;
- if (presentation)
- presentation->registerDataInput(this);
-}
-
-Q3DSDataInput::Q3DSDataInput(Q3DSDataInputPrivate *d, Q3DSPresentation *presentation,
- const QString &name, QObject *parent)
- : QObject(parent)
- , d_ptr(d)
-{
- d_ptr->m_name = name;
- d_ptr->m_presentation = presentation;
- if (presentation)
- presentation->registerDataInput(this);
-}
-
-Q3DSDataInput::~Q3DSDataInput()
-{
- delete d_ptr;
-}
-
-QString Q3DSDataInput::name() const
-{
- return d_ptr->m_name;
-}
-
-void Q3DSDataInput::setName(const QString &name)
-{
- if (d_ptr->m_name != name) {
- d_ptr->m_name = name;
- if (d_ptr->m_presentation)
- d_ptr->m_presentation->registerDataInput(this);
- Q_EMIT nameChanged();
- }
-}
-
-QVariant Q3DSDataInput::value() const
-{
- return d_ptr->m_value;
-}
-
-float Q3DSDataInput::min() const
-{
- if (!d_ptr->m_presentation)
- return 0.0f;
-
- return d_ptr->m_presentation->d_ptr->dataInputMin(d_ptr->m_name);
-}
-
-float Q3DSDataInput::max() const
-{
- if (!d_ptr->m_presentation)
- return 0.0f;
-
- return d_ptr->m_presentation->d_ptr->dataInputMax(d_ptr->m_name);
-}
-
-bool Q3DSDataInput::isValid() const
-{
- if (d_ptr->m_presentation)
- return d_ptr->m_presentation->d_ptr->isValidDataInput(this);
- else
- return false;
-}
-
-void Q3DSDataInput::setMin(float min)
-{
- if (!d_ptr->m_presentation)
- return;
-
- d_ptr->m_presentation->setDataInputValue(d_ptr->m_name, min, ValueRole::Min);
- d_ptr->m_min = min;
- emit minChanged();
-}
-
-void Q3DSDataInput::setMax(float max)
-{
- if (!d_ptr->m_presentation)
- return;
-
- d_ptr->m_presentation->setDataInputValue(d_ptr->m_name, max, ValueRole::Max);
- d_ptr->m_max = max;
- emit maxChanged();
-}
-
-void Q3DSDataInput::setValue(const QVariant &value)
-{
- // Since properties controlled by data inputs can change without the current value being
- // reflected on the value of the DataInput element, we allow setting the value to the
- // same one it was previously and still consider it a change.
- // For example, when controlling timeline, the value set to DataInput will only be
- // the current value for one frame if presentation has a running animation.
- // In order to track an element property, see DataOutput API.
- d_ptr->setValue(value, ValueRole::Value);
- Q_EMIT valueChanged();
-}
-
-void Q3DSDataInputPrivate::setPresentation(Q3DSPresentation *presentation)
-{
- m_presentation = presentation;
-}
-
-Q3DSDataInputPrivate::Q3DSDataInputPrivate(Q3DSDataInput *parent)
- : q_ptr(parent)
-{
-}
-
-Q3DSDataInputPrivate::~Q3DSDataInputPrivate()
-{
- if (m_presentation)
- m_presentation->unregisterDataInput(q_ptr);
-}
-
-void Q3DSDataInputPrivate::setValue(const QVariant &value, Q3DSDataInput::ValueRole valueRole)
-{
- m_value = value;
- if (m_presentation)
- m_presentation->setDataInputValue(m_name, m_value, valueRole);
-}
-
-void Q3DSDataInputPrivate::setViewerApp(Q3DSViewer::Q3DSViewerApp *app)
-{
- m_viewerApp = app;
-
- if (m_viewerApp && m_value.isValid())
- setValue(m_value);
-}
-
-void Q3DSDataInputPrivate::setCommandQueue(CommandQueue *queue)
-{
- m_commandQueue = queue;
-
- if (m_commandQueue && m_value.isValid())
- setValue(m_value);
-}
-
-QT_END_NAMESPACE
diff --git a/src/Runtime/api/studio3d/q3dsdataoutput.cpp b/src/Runtime/api/studio3d/q3dsdataoutput.cpp
deleted file mode 100644
index e0db2dd5..00000000
--- a/src/Runtime/api/studio3d/q3dsdataoutput.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt 3D Studio.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "q3dsdataoutput_p.h"
-#include "q3dspresentation_p.h"
-#include "q3dscommandqueue_p.h"
-
-Q3DSDataOutput::Q3DSDataOutput(QObject *parent)
- : QObject(parent)
- , d_ptr(new Q3DSDataOutputPrivate(this))
-{
-
-}
-
-Q3DSDataOutput::Q3DSDataOutput(const QString &name, QObject *parent)
- : QObject(parent)
- , d_ptr(new Q3DSDataOutputPrivate(this))
-{
- d_ptr->m_name = name;
-}
-
-Q3DSDataOutput::~Q3DSDataOutput()
-{
- delete d_ptr;
-}
-
-QString Q3DSDataOutput::name() const
-{
- return d_ptr->m_name;
-}
-
-void Q3DSDataOutput::setName(const QString &name)
-{
- if (d_ptr->m_name != name) {
- d_ptr->m_name = name;
- if (d_ptr->m_presentation)
- d_ptr->m_presentation->registerDataOutput(this);
- Q_EMIT nameChanged(name);
- }
-}
-
-QVariant Q3DSDataOutput::value() const
-{
- return d_ptr->m_value;
-}
-
-void Q3DSDataOutput::setValue(const QVariant &value)
-{
- if (d_ptr->m_value == value)
- return;
-
- d_ptr->m_value = value;
- Q_EMIT valueChanged(value);
-}
-
-void Q3DSDataOutputPrivate::setPresentation(Q3DSPresentation *presentation)
-{
- m_presentation = presentation;
-}
-
-Q3DSDataOutputPrivate::Q3DSDataOutputPrivate(Q3DSDataOutput *parent)
- : q_ptr(parent)
-{
-}
-
-Q3DSDataOutputPrivate::~Q3DSDataOutputPrivate()
-{
- if (m_presentation)
- m_presentation->unregisterDataOutput(q_ptr);
-}
-
-void Q3DSDataOutputPrivate::setValue(const QVariant &value)
-{
- m_value = value;
- Q_EMIT q_ptr->valueChanged(value);
-}
-
-void Q3DSDataOutputPrivate::setViewerApp(Q3DSViewer::Q3DSViewerApp *app)
-{
- m_viewerApp = app;
-
- if (m_viewerApp && m_value.isValid())
- setValue(m_value);
-}
-
-void Q3DSDataOutputPrivate::setCommandQueue(CommandQueue *queue)
-{
- m_commandQueue = queue;
-
- if (m_commandQueue && m_value.isValid())
- setValue(m_value);
-}
diff --git a/src/Runtime/api/studio3d/q3dswidget.cpp b/src/Runtime/api/studio3d/q3dswidget.cpp
deleted file mode 100644
index 23334b5b..00000000
--- a/src/Runtime/api/studio3d/q3dswidget.cpp
+++ /dev/null
@@ -1,332 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 - 2016 NVIDIA Corporation.
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt 3D Studio.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "q3dswidget_p.h"
-#include "Qt3DSAudioPlayerImpl.h"
-#include "viewerqmlstreamproxy_p.h"
-#include "q3dsviewersettings_p.h"
-#include "q3dspresentation_p.h"
-#include "studioutils_p.h"
-#include "q3dsvariantconfig_p.h"
-
-#include <QtGui/qevent.h>
-#include <QtGui/qopenglcontext.h>
-#include <QtGui/QWindow>
-#include <QtCore/qfileinfo.h>
-#include <QtCore/qdebug.h>
-
-using namespace Q3DSViewer;
-
-QT_BEGIN_NAMESPACE
-
-typedef void (QWidget::*QWidgetVoidSlot)();
-
-Q3DSWidget::Q3DSWidget(QWidget *parent)
- : QOpenGLWidget(parent)
- , d_ptr(new Q3DSWidgetPrivate(this))
-{
- // Get keyboard handling
- setFocusPolicy(Qt::StrongFocus);
- setMouseTracking(true);
-}
-
-Q3DSWidget::~Q3DSWidget()
-{
- delete d_ptr;
-}
-
-bool Q3DSWidget::initialize()
-{
- return d_ptr->initialize();
-}
-
-int Q3DSWidget::updateInterval() const
-{
- return d_ptr->m_updateInterval;
-}
-
-bool Q3DSWidget::isRunning() const
-{
- return d_ptr->m_viewerApp != nullptr;
-}
-
-Q3DSViewerSettings *Q3DSWidget::settings() const
-{
- return d_ptr->settings();
-}
-
-Q3DSPresentation *Q3DSWidget::presentation() const
-{
- return d_ptr->presentation();
-}
-
-void Q3DSWidget::initializeGL()
-{
- // Find the native window to determine pixel ratio
- QWidget *widget = this;
- QWindow *window = windowHandle();
- while (widget && window == nullptr) {
- widget = qobject_cast<QWidget *>(widget->parent());
- window = widget->windowHandle();
- }
- if (window)
- d_ptr->m_pixelRatio = window->devicePixelRatio();
-}
-
-void Q3DSWidget::resizeGL(int w, int h)
-{
- if (d_ptr->m_viewerApp)
- d_ptr->m_viewerApp->Resize(int(w * d_ptr->m_pixelRatio), int(h * d_ptr->m_pixelRatio));
-}
-
-void Q3DSWidget::paintGL()
-{
- if (d_ptr->m_viewerApp && d_ptr->m_viewerApp->IsInitialised())
- d_ptr->m_viewerApp->Render();
-}
-
-void Q3DSWidget::setUpdateInterval(int interval)
-{
- d_ptr->setUpdateInterval(interval);
-}
-
-void Q3DSWidget::shutdown()
-{
- d_ptr->shutdown();
-}
-
-void Q3DSWidget::reset()
-{
- d_ptr->reset();
-}
-
-void Q3DSWidget::mousePressEvent(QMouseEvent *event)
-{
- if (d_ptr->m_pixelRatio != 1.0) {
- QMouseEvent scaledEvent(event->type(), event->pos() * d_ptr->m_pixelRatio,
- event->button(), event->buttons(), event->modifiers());
- d_ptr->m_presentation->mousePressEvent(&scaledEvent);
- } else {
- d_ptr->m_presentation->mousePressEvent(event);
- }
-}
-
-void Q3DSWidget::mouseReleaseEvent(QMouseEvent *event)
-{
- if (d_ptr->m_pixelRatio != 1.0) {
- QMouseEvent scaledEvent(event->type(), event->pos() * d_ptr->m_pixelRatio,
- event->button(), event->buttons(), event->modifiers());
- d_ptr->m_presentation->mouseReleaseEvent(&scaledEvent);
- } else {
- d_ptr->m_presentation->mouseReleaseEvent(event);
- }
-}
-
-void Q3DSWidget::mouseMoveEvent(QMouseEvent *event)
-{
- if (d_ptr->m_pixelRatio != 1.0) {
- QMouseEvent scaledEvent(event->type(), event->pos() * d_ptr->m_pixelRatio,
- event->button(), event->buttons(), event->modifiers());
- d_ptr->m_presentation->mouseMoveEvent(&scaledEvent);
- } else {
- d_ptr->m_presentation->mouseMoveEvent(event);
- }
-}
-
-void Q3DSWidget::wheelEvent(QWheelEvent *event)
-{
- d_ptr->m_presentation->wheelEvent(event);
-}
-
-void Q3DSWidget::keyPressEvent(QKeyEvent *event)
-{
- d_ptr->m_presentation->keyPressEvent(event);
-}
-
-void Q3DSWidget::keyReleaseEvent(QKeyEvent *event)
-{
- d_ptr->m_presentation->keyReleaseEvent(event);
-}
-
-Q3DSWidgetPrivate::Q3DSWidgetPrivate(Q3DSWidget *q)
- : QObject(q)
- , q_ptr(q)
- , m_viewerApp(nullptr)
- , m_timer(nullptr)
- , m_updateInterval(-1)
- , m_pixelRatio(1.0)
- , m_settings(new Q3DSViewerSettings(this))
- , m_presentation(new Q3DSPresentation(this))
-{
- m_startupTimer.start();
- connect(m_presentation, &Q3DSPresentation::sourceChanged, this, &Q3DSWidgetPrivate::reset);
-}
-
-Q3DSWidgetPrivate::~Q3DSWidgetPrivate()
-{
- releaseRuntime();
-
- delete m_timer;
-}
-
-void Q3DSWidgetPrivate::reset()
-{
- if (m_viewerApp) {
- releaseRuntime();
- initializeRuntime();
- }
-}
-
-void Q3DSWidgetPrivate::setUpdateInterval(int interval)
-{
- if (m_updateInterval != interval) {
- m_updateInterval = interval;
- resetUpdateTimer();
- Q_EMIT q_ptr->updateIntervalChanged(m_updateInterval);
- }
-}
-
-bool Q3DSWidgetPrivate::initialize()
-{
- Q_ASSERT(q_ptr->context());
-
- if (m_presentation->source().isEmpty()) {
- qWarning("Failed to initialize Q3DSWidget,"
- " presentation source must be set before calling initialize()");
- return false;
- }
-
- QFileInfo info(Q3DSUtils::urlToLocalFileOrQrc(m_presentation->source()));
- if (!info.exists()) {
- qWarning() << "Failed to initialize Q3DSWidget, the presentation doesn't exist:"
- << m_presentation->source().toString();
- return false;
- }
-
- shutdown();
-
- connect(q_ptr->context(), &QOpenGLContext::aboutToBeDestroyed,
- this, &Q3DSWidgetPrivate::shutdown);
-
- bool success = initializeRuntime();
-
- if (success)
- Q_EMIT q_ptr->runningChanged(true);
-
- return success;
-}
-
-Q3DSViewerSettings *Q3DSWidgetPrivate::settings()
-{
- return m_settings;
-}
-
-Q3DSPresentation *Q3DSWidgetPrivate::presentation()
-{
- return m_presentation;
-}
-
-void Q3DSWidgetPrivate::shutdown()
-{
- bool oldInitialized = (m_viewerApp != nullptr);
-
- if (q_ptr->context()) {
- disconnect(q_ptr->context(), &QOpenGLContext::aboutToBeDestroyed,
- this, &Q3DSWidgetPrivate::shutdown);
- }
-
- releaseRuntime();
-
- if (oldInitialized)
- Q_EMIT q_ptr->runningChanged(false);
-}
-
-bool Q3DSWidgetPrivate::initializeRuntime()
-{
- Q_ASSERT(!m_viewerApp);
-
- q_ptr->makeCurrent();
-
- m_viewerApp = &Q3DSViewerApp::Create(q_ptr->context(), new Qt3DSAudioPlayerImpl(),
- &m_startupTimer);
-
- Q_ASSERT(m_viewerApp);
-
- const QString localSource = Q3DSUtils::urlToLocalFileOrQrc(m_presentation->source());
-
- if (!m_viewerApp->InitializeApp(int(q_ptr->width() * m_pixelRatio),
- int(q_ptr->height() * m_pixelRatio),
- q_ptr->context()->format(),
- q_ptr->defaultFramebufferObject(), localSource,
- m_presentation->variantList(),
- m_presentation->delayedLoading(),
- m_presentation->d_ptr->streamProxy())) {
- releaseRuntime();
- qWarning("Failed to initialize runtime");
- return false;
- }
-
- m_settings->d_ptr->setViewerApp(m_viewerApp);
- m_presentation->d_ptr->setViewerApp(m_viewerApp);
-
- resetUpdateTimer();
-
- return true;
-}
-
-void Q3DSWidgetPrivate::releaseRuntime()
-{
- m_settings->d_ptr->setViewerApp(nullptr);
- m_presentation->d_ptr->setViewerApp(nullptr);
-
- if (m_viewerApp) {
- q_ptr->makeCurrent();
- m_viewerApp->Release();
- m_viewerApp = nullptr;
- }
-
- resetUpdateTimer();
-}
-
-void Q3DSWidgetPrivate::resetUpdateTimer()
-{
- if (m_viewerApp && m_updateInterval >= 0) {
- if (!m_timer) {
- m_timer = new QTimer();
- connect(m_timer, &QTimer::timeout,
- q_ptr, static_cast<QWidgetVoidSlot>(&QWidget::update));
- }
- m_timer->start(m_updateInterval);
- } else if (m_timer) {
- m_timer->stop();
- }
-}
-
-QT_END_NAMESPACE
diff --git a/src/Runtime/api/studio3d/q3dswidget.h b/src/Runtime/api/studio3d/q3dswidget.h
deleted file mode 100644
index ad5d823d..00000000
--- a/src/Runtime/api/studio3d/q3dswidget.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 - 2016 NVIDIA Corporation.
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt 3D Studio.
-**
-** $QT_BEGIN_LICENSE:GPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 or (at your option) any later version
-** approved by the KDE Free Qt Foundation. The licenses are as published by
-** the Free Software Foundation and appearing in the file LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef Q3DSWIDGET_H
-#define Q3DSWIDGET_H
-
-#include <QtStudio3D/qstudio3dglobal.h>
-#include <QtWidgets/QOpenGLWidget>
-#include <QtCore/QUrl>
-
-QT_BEGIN_NAMESPACE
-
-class Q3DSWidgetPrivate;
-class Q3DSViewerSettings;
-class Q3DSPresentation;
-
-class Q_STUDIO3D_EXPORT Q3DSWidget : public QOpenGLWidget
-{
- Q_OBJECT
- Q_DECLARE_PRIVATE(Q3DSWidget)
- Q_PROPERTY(int updateInterval READ updateInterval WRITE setUpdateInterval NOTIFY updateIntervalChanged)
- Q_PROPERTY(bool running READ isRunning NOTIFY runningChanged)
-
-public:
- explicit Q3DSWidget(QWidget *parent = nullptr);
- virtual ~Q3DSWidget();
-
- bool initialize();
-
- // Property accessors
- int updateInterval() const;
- bool isRunning() const;
-
- Q3DSViewerSettings *settings() const;
- Q3DSPresentation *presentation() const;
-
-public Q_SLOTS:
- void setUpdateInterval(int interval);
- void shutdown();
- void reset();
-
-Q_SIGNALS:
- void updateIntervalChanged(bool autoUpdate);
- void runningChanged(bool initialized);
-
-protected:
- // Qt event handling
- void mousePressEvent(QMouseEvent *event) override;
- void mouseReleaseEvent(QMouseEvent *event) override;
- void mouseMoveEvent(QMouseEvent *event) override;
- void wheelEvent(QWheelEvent *event) override;
- void keyPressEvent(QKeyEvent *event) override;
- void keyReleaseEvent(QKeyEvent *e) override;
-
- // Qt overrides
- void initializeGL() override;
- void resizeGL(int w, int h) override;
- void paintGL() override;
-
-private:
- Q_DISABLE_COPY(Q3DSWidget)
- Q3DSWidgetPrivate *d_ptr;
-};
-QT_END_NAMESPACE
-#endif // Q3DSWIDGET_H
diff --git a/src/Runtime/commoninclude.pri b/src/Runtime/commoninclude.pri
deleted file mode 100644
index 18e242e9..00000000
--- a/src/Runtime/commoninclude.pri
+++ /dev/null
@@ -1,84 +0,0 @@
-include($$PWD/../commonplatform.pri)
-
-contains(TEMPLATE, lib) {
- load(qt_helper_lib)
- # qt_helper_lib assumes non-qt lib, so it clears qt from config - reset that
- CONFIG += qt exceptions
-}
-QT += core gui openglextensions
-
-DEFINES += COMPILED_FROM_DSP \
- QT3DSDM_USE_NVLOG QT3DSDM_META_DATA_NO_SIGNALS \
- QT3DS_AUTOTESTS_ENABLED
-
-INCLUDEPATH += \
- $$PWD/Source \
- $$PWD/Source/datamodel \
- $$PWD/Source/runtime \
- $$PWD/Source/system \
- $$PWD/Source/engine \
- $$PWD/Source/foundation \
- $$PWD/Source/render \
- $$PWD/Source/render/gl2 \
- $$PWD/Source/render/gl3 \
- $$PWD/Source/render/glg \
- $$PWD/Source/uipparser \
- $$PWD/Source/state \
- $$PWD/Source/event \
- $$PWD/Source/viewer \
- $$PWD/Source/viewer/perflog \
- $$PWD/../Authoring/QT3DSIMP/Qt3DSImportLib \
- $$PWD/../Authoring/QT3DSDM \
- $$PWD/../Authoring/QT3DSDM/Systems \
- $$PWD/../Authoring/QT3DSDM/Systems/Cores \
- $$PWD/../3rdparty/EASTL/UnknownVersion/include \
- $$PWD/../3rdparty/utf8cpp/2.3.2/source \
- $$PWD/../3rdparty/color \
- $$PWD/../3rdparty/RuntimePlatformSpecific/$$PlatformSpecificDir/PlatformLibs \
- $$PWD/../QtExtras/qmlstreamer \
- $$PWD/Source/runtimerender \
- $$PWD/Source/runtimerender/graphobjects \
- $$PWD/Source/runtimerender/resourcemanager \
-
-# TODO: Investigate whether these can be moved to commonplatform
-win32-msvc {
- CONFIG += nostrictstrings
- QMAKE_CXXFLAGS += /EHsc /GA
- QMAKE_CFLAGS += /EHsc /GA
-}
-
-win32 {
-INCLUDEPATH += \
- $$PWD/Source/platformspecific/windows/libs \
- $$PWD/../3rdparty/RuntimePlatformSpecific/Windows/Qt3DSLibs
-}
-
-linux|qnx {
-QMAKE_CXXFLAGS += -fpermissive
-QMAKE_CFLAGS += -fpermissive
-INCLUDEPATH += \
- $$PWD/Source/foundation/linux \
- $$PWD/Source/platformspecific/linux/libs \
- $$PWD/../3rdparty/RuntimePlatformSpecific/Linux/Qt3DSLibs
-}
-
-integrity {
-INCLUDEPATH += \
- $$PWD/Source/foundation/linux \
- $$PWD/Source/platformspecific/linux/libs \
- $$PWD/../3rdparty/RuntimePlatformSpecific/Linux/Qt3DSLibs
-}
-
-macos {
-INCLUDEPATH += \
- $$PWD/../3rdparty/RuntimePlatformSpecific/Macos/Qt3DSLibs \
- $$PWD/Source/platformspecific/macos/libs
-
-}
-
-android {
-INCLUDEPATH += \
- $$PWD/Source/platformspecific/android/jni/libs/nv_thread \
- $$PWD/../3rdparty/RuntimePlatformSpecific/Android/jni/Qt3DSLibs \
- $$PWD/../3rdparty/RuntimePlatformSpecific/Android/jni
-}
diff --git a/src/Runtime/ogl-runtime/commoninclude.pri b/src/Runtime/ogl-runtime/commoninclude.pri
new file mode 100644
index 00000000..3940e4d3
--- /dev/null
+++ b/src/Runtime/ogl-runtime/commoninclude.pri
@@ -0,0 +1,82 @@
+include($$PWD/commonplatform.pri)
+
+contains(TEMPLATE, lib) {
+ load(qt_helper_lib)
+ # qt_helper_lib assumes non-qt lib, so it clears qt from config - reset that
+ CONFIG += qt exceptions
+}
+QT += core gui openglextensions
+
+DEFINES += COMPILED_FROM_DSP \
+ QT3DSDM_USE_NVLOG QT3DSDM_META_DATA_NO_SIGNALS \
+ QT3DS_AUTOTESTS_ENABLED
+
+INCLUDEPATH += \
+ $$PWD/src \
+ $$PWD/src/datamodel \
+ $$PWD/src/runtime \
+ $$PWD/src/system \
+ $$PWD/src/engine \
+ $$PWD/src/foundation \
+ $$PWD/src/render \
+ $$PWD/src/render/gl2 \
+ $$PWD/src/render/gl3 \
+ $$PWD/src/render/glg \
+ $$PWD/src/uipparser \
+ $$PWD/src/state \
+ $$PWD/src/event \
+ $$PWD/src/viewer \
+ $$PWD/src/viewer/perflog \
+ $$PWD/src/importlib \
+ $$PWD/src/dm \
+ $$PWD/src/dm/systems \
+ $$PWD/src/dm/systems/cores \
+ $$PWD/src/3rdparty/EASTL/UnknownVersion/include \
+ $$PWD/src/3rdparty/platformspecific/$$PlatformSpecificDir/PlatformLibs \
+ $$PWD/src/qmlstreamer \
+ $$PWD/src/runtimerender \
+ $$PWD/src/runtimerender/graphobjects \
+ $$PWD/src/runtimerender/resourcemanager \
+
+# TODO: Investigate whether these can be moved to commonplatform
+win32-msvc {
+ CONFIG += nostrictstrings
+ QMAKE_CXXFLAGS += /EHsc /GA
+ QMAKE_CFLAGS += /EHsc /GA
+}
+
+win32 {
+INCLUDEPATH += \
+ $$PWD/src/platformspecific/windows/libs \
+ $$PWD/src/3rdparty/platformspecific/Windows/Qt3DSLibs
+}
+
+linux|qnx {
+QMAKE_CXXFLAGS += -fpermissive
+QMAKE_CFLAGS += -fpermissive
+INCLUDEPATH += \
+ $$PWD/src/foundation/linux \
+ $$PWD/src/platformspecific/linux/libs \
+ $$PWD/src/3rdparty/platformspecific/Linux/Qt3DSLibs
+}
+
+integrity {
+INCLUDEPATH += \
+ $$PWD/src/foundation/linux \
+ $$PWD/src/platformspecific/linux/libs \
+ $$PWD/src/3rdparty/platformspecific/Linux/Qt3DSLibs
+}
+
+macos {
+INCLUDEPATH += \
+ $$PWD/src/3rdparty/platformspecific/Macos/Qt3DSLibs \
+ $$PWD/src/platformspecific/macos/libs
+
+}
+
+android {
+INCLUDEPATH += \
+ $$PWD/src/platformspecific/android/jni/libs/nv_thread \
+ $$PWD/src/3rdparty/platformspecific/Android/jni/Qt3DSLibs \
+ $$PWD/src/3rdparty/platformspecific/Android/jni
+}
diff --git a/src/Runtime/ogl-runtime/commonplatform.pri b/src/Runtime/ogl-runtime/commonplatform.pri
new file mode 100644
index 00000000..f5ff9e08
--- /dev/null
+++ b/src/Runtime/ogl-runtime/commonplatform.pri
@@ -0,0 +1,307 @@
+load(qt_build_config)
+load(qt_build_paths)
+
+# Common defines across platforms that should be checked if/where they are used
+# as we remove dependencies to see where we can reduce
+DEFINES += \
+ QT3DS_FOUNDATION_NO_EXPORTS \
+ _CRT_SECURE_NO_DEPRECATE \
+ _CRT_NONSTDC_NO_DEPRECATE \
+ QT3DS_GRAPHICS_API_GL \
+ QT3DS_NO_SEARCH_PATH \
+ QT3DS_RENDER_ENABLE_LOAD_UIP \
+ FONT_NO_RES_DIR \
+ _TEGRA_NO_LOG_FILE \
+ EA_COMPILER_HAS_INTTYPES \
+ EASTL_ALLOCATOR_COPY_ENABLED \
+ UNICODE \
+ _UNICODE \
+ NO_BOOST
+
+win32: PlatformSpecificDir = windows
+macos: PlatformSpecificDir = macos
+linux|integrity|qnx: PlatformSpecificDir = linux
+android: PlatformSpecificDir = android/jni
+
+integrity: {
+ DEFINES += _LINUX
+ DEFINES += _INTEGRITYPLATFORM
+}
+
+INCLUDEPATH += $$PWD/src/platformspecific/$$PlatformSpecificDir
+
+THIRDPARTY_DIR = $$(QT3DSTUDIO_3RDPARTY_DIR)
+isEmpty(THIRDPARTY_DIR) {
+ THIRDPARTY_DIR = $$PWD/3rdparty
+}
+
+contains(QT_ARCH, x86_64) {
+ DEFINES += QT3DS_PROCESSOR_X64
+}
+
+CONFIG(debug, debug|release) {
+ DEFINES += _DEBUG
+} else {
+ DEFINES += NDEBUG
+}
+
+linux|qnx {
+ CONFIG += egl
+ DEFINES+=_LINUX QT3DS_OS_LINUX _LINUXPLATFORM QT3DS_NO_X11 \
+ QT3DS_VIEWER_EXPORTS WIDE_IS_DIFFERENT_TYPE_THAN_CHAR16_T
+ QMAKE_CXXFLAGS_WARN_ON = -Wall -Wno-unused-local-typedefs
+}
+
+linux-clang {
+ DEFINES += __STRICT_ANSI__
+}
+
+macos {
+ DEFINES += _MACOSX _LINUXPLATFORM WIDE_IS_DIFFERENT_TYPE_THAN_CHAR16_T
+ INCLUDEPATH += /usr/local/include
+
+# macOS builds treat most warnings as errors to prevent slipping more warnings
+# in to the code
+
+# Suppress large number of warnings from the Qt 3D Studio Code.
+# Suppressions have been reported in JIRA with these bugs:
+# QT3DS-2214 -Wno-unused-local-typedefs
+# QT3DS-2216 -Wno-inconsistent-missing-override
+# QT3DS-2222 -Wno-reorder
+# QT3DS-2223 -Wno-format
+# QT3DS-2224 -Wno-unused-function
+# QT3DS-2227 -Wno-unused-value
+# QT3DS-2229 -Wno-delete-non-virtual-dtor
+# QT3DS-2234 -Wno-unused-variable
+# QT3DS-2235 -Wno-overloaded-virtual
+# QT3DS-2237 -Wno-unused-private-field
+# QT3DS-2238 -Wno-comment
+# QT3DS-2240 -Wno-enum-compare
+# QT3DS-2241 -Wno-int-to-pointer-cast
+# QT3DS-2242 -Wno-int-to-void-pointer-cast
+# QT3DS-2244 -Wno-unused-lambda-capture
+# QT3DS-2246 -Wno-deprecated-declarations
+# QT3DS-2247 -Wno-pointer-bool-conversion
+# QT3DS-2248 -Wno-self-assign
+# QT3DS-2249 -Wno-tautological-compare
+# QT3DS-2251 -Wno-tautological-constant-out-of-range-compare
+ QMAKE_CXXFLAGS_WARN_ON = -Wall \
+ -Werror \
+ -Wno-unknown-pragmas \
+ -Wno-unused-local-typedefs \
+ -Wno-inconsistent-missing-override \
+ -Wno-reorder \
+ -Wno-format \
+ -Wno-unused-function \
+ -Wno-unused-value \
+ -Wno-delete-non-virtual-dtor \
+ -Wno-unused-variable \
+ -Wno-overloaded-virtual \
+ -Wno-unused-private-field \
+ -Wno-comment \
+ -Wno-enum-compare \
+ -Wno-int-to-pointer-cast \
+ -Wno-int-to-void-pointer-cast \
+ -Wno-unused-lambda-capture \
+ -Wno-deprecated-declarations \
+ -Wno-pointer-bool-conversion \
+ -Wno-self-assign \
+ -Wno-tautological-compare \
+ -Wno-tautological-constant-out-of-range-compare \
+ -Wno-mismatched-tags \
+ -Wno-pragma-pack \
+ -Wno-error=unused-local-typedefs \
+ -Wno-error=inconsistent-missing-override \
+ -Wno-error=reorder \
+ -Wno-error=format \
+ -Wno-error=unused-function \
+ -Wno-error=unused-value \
+ -Wno-error=delete-non-virtual-dtor \
+ -Wno-error=unused-variable \
+ -Wno-error=overloaded-virtual \
+ -Wno-error=unused-private-field \
+ -Wno-error=comment \
+ -Wno-error=enum-compare \
+ -Wno-error=int-to-pointer-cast \
+ -Wno-error=int-to-void-pointer-cast \
+ -Wno-error=unused-lambda-capture \
+ -Wno-error=deprecated-declarations \
+ -Wno-error=pointer-bool-conversion \
+ -Wno-error=self-assign \
+ -Wno-error=tautological-compare \
+ -Wno-error=tautological-constant-out-of-range-compare \
+ -Wno-error=switch \
+ -Wno-error=mismatched-tags \
+ -Wno-error=logical-op-parentheses \
+ -Wno-error=pragmas \
+ -Wno-error=pragma-pack \
+ -Wno-error=mismatched-tags
+
+ QMAKE_CFLAGS_WARN_ON = -Wall \
+ -Werror \
+ -Wno-unknown-pragmas \
+ -Wno-unused-local-typedefs \
+ -Wno-inconsistent-missing-override \
+ -Wno-reorder \
+ -Wno-format \
+ -Wno-unused-function \
+ -Wno-unused-value \
+ -Wno-delete-non-virtual-dtor \
+ -Wno-unused-variable \
+ -Wno-overloaded-virtual \
+ -Wno-unused-private-field \
+ -Wno-comment \
+ -Wno-enum-compare \
+ -Wno-int-to-pointer-cast \
+ -Wno-int-to-void-pointer-cast \
+ -Wno-unused-lambda-capture \
+ -Wno-deprecated-declarations \
+ -Wno-pointer-bool-conversion \
+ -Wno-self-assign \
+ -Wno-tautological-compare \
+ -Wno-tautological-constant-out-of-range-compare \
+ -Wno-mismatched-tags \
+ -Wno-pragma-pack \
+ -Wno-error=unused-local-typedefs \
+ -Wno-error=inconsistent-missing-override \
+ -Wno-error=reorder \
+ -Wno-error=format \
+ -Wno-error=unused-function \
+ -Wno-error=unused-value \
+ -Wno-error=delete-non-virtual-dtor \
+ -Wno-error=unused-variable \
+ -Wno-error=overloaded-virtual \
+ -Wno-error=unused-private-field \
+ -Wno-error=comment \
+ -Wno-error=enum-compare \
+ -Wno-error=int-to-pointer-cast \
+ -Wno-error=int-to-void-pointer-cast \
+ -Wno-error=unused-lambda-capture \
+ -Wno-error=deprecated-declarations \
+ -Wno-error=pointer-bool-conversion \
+ -Wno-error=self-assign \
+ -Wno-error=tautological-compare \
+ -Wno-error=tautological-constant-out-of-range-compare \
+ -Wno-error=switch \
+ -Wno-error=mismatched-tags \
+ -Wno-error=logical-op-parentheses \
+ -Wno-error=pragmas \
+ -Wno-error=pragma-pack \
+ -Wno-error=mismatched-tags
+
+# Suppress the huge pile of Qt related warnings on "direct access in function
+# from file to global weak symbol". These arise when not using devbuilds of Qt.
+ QMAKE_CXXFLAGS += -fvisibility=hidden
+ QMAKE_CFLAGS += -fvisibility=hidden
+}
+
+clang {
+# Suppress large number of warnings from the Qt 3D Studio Code.
+# Suppressions have been reported in JIRA with bugs
+ QMAKE_CXXFLAGS_WARN_ON = -Wall \
+ -Wno-unknown-pragmas \
+ -Wno-unused-local-typedefs \
+ -Wno-inconsistent-missing-override \
+ -Wno-reorder \
+ -Wno-format \
+ -Wno-unused-function \
+ -Wno-unused-value \
+ -Wno-delete-non-virtual-dtor \
+ -Wno-unused-variable \
+ -Wno-overloaded-virtual \
+ -Wno-unused-private-field \
+ -Wno-comment \
+ -Wno-enum-compare \
+ -Wno-int-to-pointer-cast \
+ -Wno-int-to-void-pointer-cast \
+ -Wno-unused-lambda-capture \
+ -Wno-deprecated-declarations \
+ -Wno-pointer-bool-conversion \
+ -Wno-self-assign \
+ -Wno-tautological-compare \
+ -Wno-tautological-constant-out-of-range-compare \
+ -Wno-mismatched-tags \
+ -Wno-pragma-pack
+
+ QMAKE_CFLAGS_WARN_ON = -Wall \
+ -Wno-unknown-pragmas \
+ -Wno-unused-local-typedefs \
+ -Wno-inconsistent-missing-override \
+ -Wno-reorder \
+ -Wno-format \
+ -Wno-unused-function \
+ -Wno-unused-value \
+ -Wno-delete-non-virtual-dtor \
+ -Wno-unused-variable \
+ -Wno-overloaded-virtual \
+ -Wno-unused-private-field \
+ -Wno-comment \
+ -Wno-enum-compare \
+ -Wno-int-to-pointer-cast \
+ -Wno-int-to-void-pointer-cast \
+ -Wno-unused-lambda-capture \
+ -Wno-deprecated-declarations \
+ -Wno-pointer-bool-conversion \
+ -Wno-self-assign \
+ -Wno-tautological-compare \
+ -Wno-tautological-constant-out-of-range-compare \
+ -Wno-mismatched-tags \
+ -Wno-pragma-pack
+
+# Suppress the huge pile of Qt related warnings on "direct access in function
+# from file to global weak symbol". These arise when not using devbuilds of Qt.
+ QMAKE_CXXFLAGS += -fvisibility=hidden
+ QMAKE_CFLAGS += -fvisibility=hidden
+}
+
+android {
+ QMAKE_CXXFLAGS -= -fstack-protector-strong
+ QMAKE_CFLAGS -= -fstack-protector-strong
+ # TODO: Should be done using this instead of copying the GLES headers, but including this
+ # causes lots of conflicting definitions in signal.h for some reason. Feel free to fix it if
+ # you know how. After this works, GLES3 and GLES2 folders can be deleted from
+ # 3rdparty/RuntimePlatformSpecific/Android/jni
+# INCLUDEPATH += $$(ANDROID_NDK_ROOT)/sysroot/usr/include
+# DEFINES += __BITS_PER_LONG=32
+}
+
+win32 {
+ DEFINES += QT3DS_OS_WINDOWS _WIN32 _PCPLATFORM \
+ WIDE_IS_DIFFERENT_TYPE_THAN_CHAR16_T KDWIN NOMINMAX
+
+ win32-msvc {
+ QMAKE_CXXFLAGS += /MP /d2Zi+
+ QMAKE_CFLAGS += /MP /d2Zi+
+ # Warning C4251 = needs to have dll-interface to be used by clients of class,
+ # it comes from a lot of Qt headers, so disabling it.
+ QMAKE_CXXFLAGS_WARN_ON += -wd4251 #needs to have dll-interface to be used by clients
+ }
+
+ CONFIG(debug, debug|release) {
+ win32-msvc {
+ QMAKE_CXXFLAGS += /Od
+ QMAKE_CFLAGS += /Od
+ }
+ } else {
+ win32-msvc {
+ QMAKE_CXXFLAGS += /Ox
+ QMAKE_CFLAGS += /Ox
+ }
+ }
+
+ contains(QT_ARCH, x86_64) {
+ DEFINES += _WIN64
+ }
+}
+
+BINDIR = $$MODULE_BASE_OUTDIR/bin
+LIBDIR = $$MODULE_BASE_OUTDIR/lib
+LIBS += -L"$$LIBDIR"
+!testcase {
+ contains(TEMPLATE, app) {
+ DESTDIR = $$BINDIR
+ } else {
+ DESTDIR = $$LIBDIR
+ win32: DLLDESTDIR = $$BINDIR
+ }
+}
diff --git a/src/Runtime/ogl-runtime/ogl-runtime.pro b/src/Runtime/ogl-runtime/ogl-runtime.pro
new file mode 100644
index 00000000..6bb3d181
--- /dev/null
+++ b/src/Runtime/ogl-runtime/ogl-runtime.pro
@@ -0,0 +1,6 @@
+TEMPLATE = subdirs
+CONFIG += ordered
+
+SUBDIRS += \
+ src \
+ tools
diff --git a/src/Runtime/platformres.qrc b/src/Runtime/ogl-runtime/platformres.qrc
index af8a564b..af8a564b 100644
--- a/src/Runtime/platformres.qrc
+++ b/src/Runtime/ogl-runtime/platformres.qrc
diff --git a/src/Runtime/res.qrc b/src/Runtime/ogl-runtime/res.qrc
index c5c59b29..c5c59b29 100644
--- a/src/Runtime/res.qrc
+++ b/src/Runtime/ogl-runtime/res.qrc
diff --git a/src/Runtime/res/DataModelMetadata/en-us/MetaData.xml b/src/Runtime/ogl-runtime/res/DataModelMetadata/en-us/MetaData.xml
index 951a2fba..951a2fba 100644
--- a/src/Runtime/res/DataModelMetadata/en-us/MetaData.xml
+++ b/src/Runtime/ogl-runtime/res/DataModelMetadata/en-us/MetaData.xml
diff --git a/src/Runtime/res/Font/TitilliumWeb-Regular.ttf b/src/Runtime/ogl-runtime/res/Font/TitilliumWeb-Regular.ttf
index 6da82193..6da82193 100644
--- a/src/Runtime/res/Font/TitilliumWeb-Regular.ttf
+++ b/src/Runtime/ogl-runtime/res/Font/TitilliumWeb-Regular.ttf
Binary files differ
diff --git a/src/Runtime/res/effectlib/Fxaa3_11.glsllib b/src/Runtime/ogl-runtime/res/effectlib/Fxaa3_11.glsllib
index f5de2089..f5de2089 100644
--- a/src/Runtime/res/effectlib/Fxaa3_11.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/Fxaa3_11.glsllib
diff --git a/src/Runtime/res/effectlib/Fxaa3_8.glsllib b/src/Runtime/ogl-runtime/res/effectlib/Fxaa3_8.glsllib
index 620f5650..620f5650 100644
--- a/src/Runtime/res/effectlib/Fxaa3_8.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/Fxaa3_8.glsllib
diff --git a/src/Runtime/res/effectlib/SMAA.glsllib b/src/Runtime/ogl-runtime/res/effectlib/SMAA.glsllib
index 97e0153a..97e0153a 100644
--- a/src/Runtime/res/effectlib/SMAA.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/SMAA.glsllib
diff --git a/src/Runtime/res/effectlib/SSAOCustomMaterial.glsllib b/src/Runtime/ogl-runtime/res/effectlib/SSAOCustomMaterial.glsllib
index 1d8a1c39..1d8a1c39 100644
--- a/src/Runtime/res/effectlib/SSAOCustomMaterial.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/SSAOCustomMaterial.glsllib
diff --git a/src/Runtime/res/effectlib/abbeNumberIOR.glsllib b/src/Runtime/ogl-runtime/res/effectlib/abbeNumberIOR.glsllib
index 43ed79d8..43ed79d8 100644
--- a/src/Runtime/res/effectlib/abbeNumberIOR.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/abbeNumberIOR.glsllib
diff --git a/src/Runtime/res/effectlib/anisotropyConversion.glsllib b/src/Runtime/ogl-runtime/res/effectlib/anisotropyConversion.glsllib
index b8aae1ed..b8aae1ed 100644
--- a/src/Runtime/res/effectlib/anisotropyConversion.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/anisotropyConversion.glsllib
diff --git a/src/Runtime/res/effectlib/average.glsllib b/src/Runtime/ogl-runtime/res/effectlib/average.glsllib
index 082eec0c..082eec0c 100644
--- a/src/Runtime/res/effectlib/average.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/average.glsllib
diff --git a/src/Runtime/res/effectlib/blendColorLayers.glsllib b/src/Runtime/ogl-runtime/res/effectlib/blendColorLayers.glsllib
index e07fe613..e07fe613 100644
--- a/src/Runtime/res/effectlib/blendColorLayers.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/blendColorLayers.glsllib
diff --git a/src/Runtime/res/effectlib/blur.glsllib b/src/Runtime/ogl-runtime/res/effectlib/blur.glsllib
index 1f3abc86..1f3abc86 100644
--- a/src/Runtime/res/effectlib/blur.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/blur.glsllib
diff --git a/src/Runtime/res/effectlib/calculateRoughness.glsllib b/src/Runtime/ogl-runtime/res/effectlib/calculateRoughness.glsllib
index a14083d6..a14083d6 100644
--- a/src/Runtime/res/effectlib/calculateRoughness.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/calculateRoughness.glsllib
diff --git a/src/Runtime/res/effectlib/coordinateSource.glsllib b/src/Runtime/ogl-runtime/res/effectlib/coordinateSource.glsllib
index bc435d51..bc435d51 100644
--- a/src/Runtime/res/effectlib/coordinateSource.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/coordinateSource.glsllib
diff --git a/src/Runtime/res/effectlib/cube.glsllib b/src/Runtime/ogl-runtime/res/effectlib/cube.glsllib
index 74da8333..74da8333 100644
--- a/src/Runtime/res/effectlib/cube.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/cube.glsllib
diff --git a/src/Runtime/res/effectlib/customCurveLayer.glsllib b/src/Runtime/ogl-runtime/res/effectlib/customCurveLayer.glsllib
index 2bc1780e..2bc1780e 100644
--- a/src/Runtime/res/effectlib/customCurveLayer.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/customCurveLayer.glsllib
diff --git a/src/Runtime/res/effectlib/customMaterial.glsllib b/src/Runtime/ogl-runtime/res/effectlib/customMaterial.glsllib
index 0a4d88b9..0a4d88b9 100644
--- a/src/Runtime/res/effectlib/customMaterial.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/customMaterial.glsllib
diff --git a/src/Runtime/res/effectlib/customMaterialFragBody.glsllib b/src/Runtime/ogl-runtime/res/effectlib/customMaterialFragBody.glsllib
index fccb8e05..fccb8e05 100644
--- a/src/Runtime/res/effectlib/customMaterialFragBody.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/customMaterialFragBody.glsllib
diff --git a/src/Runtime/res/effectlib/customMaterialFragBodyAO.glsllib b/src/Runtime/ogl-runtime/res/effectlib/customMaterialFragBodyAO.glsllib
index d194569e..d194569e 100644
--- a/src/Runtime/res/effectlib/customMaterialFragBodyAO.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/customMaterialFragBodyAO.glsllib
diff --git a/src/Runtime/res/effectlib/defaultMaterialBumpNoLod.glsllib b/src/Runtime/ogl-runtime/res/effectlib/defaultMaterialBumpNoLod.glsllib
index 4144ae2f..4144ae2f 100644
--- a/src/Runtime/res/effectlib/defaultMaterialBumpNoLod.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/defaultMaterialBumpNoLod.glsllib
diff --git a/src/Runtime/res/effectlib/defaultMaterialFileBumpTexture.glsllib b/src/Runtime/ogl-runtime/res/effectlib/defaultMaterialFileBumpTexture.glsllib
index 6901ace0..6901ace0 100644
--- a/src/Runtime/res/effectlib/defaultMaterialFileBumpTexture.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/defaultMaterialFileBumpTexture.glsllib
diff --git a/src/Runtime/res/effectlib/defaultMaterialFileDisplacementTexture.glsllib b/src/Runtime/ogl-runtime/res/effectlib/defaultMaterialFileDisplacementTexture.glsllib
index 4c9af3fc..4c9af3fc 100644
--- a/src/Runtime/res/effectlib/defaultMaterialFileDisplacementTexture.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/defaultMaterialFileDisplacementTexture.glsllib
diff --git a/src/Runtime/res/effectlib/defaultMaterialFileNormalTexture.glsllib b/src/Runtime/ogl-runtime/res/effectlib/defaultMaterialFileNormalTexture.glsllib
index 70ab52bc..70ab52bc 100644
--- a/src/Runtime/res/effectlib/defaultMaterialFileNormalTexture.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/defaultMaterialFileNormalTexture.glsllib
diff --git a/src/Runtime/res/effectlib/defaultMaterialFresnel.glsllib b/src/Runtime/ogl-runtime/res/effectlib/defaultMaterialFresnel.glsllib
index e0eff4ff..e0eff4ff 100644
--- a/src/Runtime/res/effectlib/defaultMaterialFresnel.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/defaultMaterialFresnel.glsllib
diff --git a/src/Runtime/res/effectlib/defaultMaterialLighting.glsllib b/src/Runtime/ogl-runtime/res/effectlib/defaultMaterialLighting.glsllib
index e96a4509..e96a4509 100644
--- a/src/Runtime/res/effectlib/defaultMaterialLighting.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/defaultMaterialLighting.glsllib
diff --git a/src/Runtime/res/effectlib/defaultMaterialPhysGlossyBSDF.glsllib b/src/Runtime/ogl-runtime/res/effectlib/defaultMaterialPhysGlossyBSDF.glsllib
index 1035e436..1035e436 100644
--- a/src/Runtime/res/effectlib/defaultMaterialPhysGlossyBSDF.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/defaultMaterialPhysGlossyBSDF.glsllib
diff --git a/src/Runtime/res/effectlib/depthpass.glsllib b/src/Runtime/ogl-runtime/res/effectlib/depthpass.glsllib
index cbd45c24..cbd45c24 100644
--- a/src/Runtime/res/effectlib/depthpass.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/depthpass.glsllib
diff --git a/src/Runtime/res/effectlib/dfTint.glsllib b/src/Runtime/ogl-runtime/res/effectlib/dfTint.glsllib
index f1f4b7ac..f1f4b7ac 100644
--- a/src/Runtime/res/effectlib/dfTint.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/dfTint.glsllib
diff --git a/src/Runtime/res/effectlib/diffuseReflectionBSDF.glsllib b/src/Runtime/ogl-runtime/res/effectlib/diffuseReflectionBSDF.glsllib
index a98509d9..a98509d9 100644
--- a/src/Runtime/res/effectlib/diffuseReflectionBSDF.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/diffuseReflectionBSDF.glsllib
diff --git a/src/Runtime/res/effectlib/diffuseTransmissionBSDF.glsllib b/src/Runtime/ogl-runtime/res/effectlib/diffuseTransmissionBSDF.glsllib
index f6e5f52b..f6e5f52b 100644
--- a/src/Runtime/res/effectlib/diffuseTransmissionBSDF.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/diffuseTransmissionBSDF.glsllib
diff --git a/src/Runtime/res/effectlib/directionalFactor.glsllib b/src/Runtime/ogl-runtime/res/effectlib/directionalFactor.glsllib
index 78af8839..78af8839 100644
--- a/src/Runtime/res/effectlib/directionalFactor.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/directionalFactor.glsllib
diff --git a/src/Runtime/res/effectlib/distancefieldtext.frag b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext.frag
index 1d834902..1d834902 100644
--- a/src/Runtime/res/effectlib/distancefieldtext.frag
+++ b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext.frag
diff --git a/src/Runtime/res/effectlib/distancefieldtext.vert b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext.vert
index f6b2de41..f6b2de41 100644
--- a/src/Runtime/res/effectlib/distancefieldtext.vert
+++ b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext.vert
diff --git a/src/Runtime/res/effectlib/distancefieldtext_core.frag b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_core.frag
index bf60f874..bf60f874 100644
--- a/src/Runtime/res/effectlib/distancefieldtext_core.frag
+++ b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_core.frag
diff --git a/src/Runtime/res/effectlib/distancefieldtext_core.vert b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_core.vert
index 2dc198f4..2dc198f4 100644
--- a/src/Runtime/res/effectlib/distancefieldtext_core.vert
+++ b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_core.vert
diff --git a/src/Runtime/res/effectlib/distancefieldtext_dropshadow.frag b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_dropshadow.frag
index fdb68bac..fdb68bac 100644
--- a/src/Runtime/res/effectlib/distancefieldtext_dropshadow.frag
+++ b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_dropshadow.frag
diff --git a/src/Runtime/res/effectlib/distancefieldtext_dropshadow.vert b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_dropshadow.vert
index 835d34dd..835d34dd 100644
--- a/src/Runtime/res/effectlib/distancefieldtext_dropshadow.vert
+++ b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_dropshadow.vert
diff --git a/src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.frag b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_dropshadow_core.frag
index 51aae5a7..51aae5a7 100644
--- a/src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.frag
+++ b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_dropshadow_core.frag
diff --git a/src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.vert b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_dropshadow_core.vert
index 7d9736e5..7d9736e5 100644
--- a/src/Runtime/res/effectlib/distancefieldtext_dropshadow_core.vert
+++ b/src/Runtime/ogl-runtime/res/effectlib/distancefieldtext_dropshadow_core.vert
diff --git a/src/Runtime/res/effectlib/effect.glsllib b/src/Runtime/ogl-runtime/res/effectlib/effect.glsllib
index 802a8460..802a8460 100644
--- a/src/Runtime/res/effectlib/effect.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/effect.glsllib
diff --git a/src/Runtime/res/effectlib/evalBakedShadowMap.glsllib b/src/Runtime/ogl-runtime/res/effectlib/evalBakedShadowMap.glsllib
index a283d8a8..a283d8a8 100644
--- a/src/Runtime/res/effectlib/evalBakedShadowMap.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/evalBakedShadowMap.glsllib
diff --git a/src/Runtime/res/effectlib/evalEnvironmentMap.glsllib b/src/Runtime/ogl-runtime/res/effectlib/evalEnvironmentMap.glsllib
index 18431c70..18431c70 100644
--- a/src/Runtime/res/effectlib/evalEnvironmentMap.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/evalEnvironmentMap.glsllib
diff --git a/src/Runtime/res/effectlib/evalLightmaps.glsllib b/src/Runtime/ogl-runtime/res/effectlib/evalLightmaps.glsllib
index 1a9bc997..1a9bc997 100644
--- a/src/Runtime/res/effectlib/evalLightmaps.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/evalLightmaps.glsllib
diff --git a/src/Runtime/res/effectlib/fileBumpTexture.glsllib b/src/Runtime/ogl-runtime/res/effectlib/fileBumpTexture.glsllib
index d0129a81..d0129a81 100644
--- a/src/Runtime/res/effectlib/fileBumpTexture.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/fileBumpTexture.glsllib
diff --git a/src/Runtime/res/effectlib/fileDisplacementTexture.glsllib b/src/Runtime/ogl-runtime/res/effectlib/fileDisplacementTexture.glsllib
index a38d701d..a38d701d 100644
--- a/src/Runtime/res/effectlib/fileDisplacementTexture.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/fileDisplacementTexture.glsllib
diff --git a/src/Runtime/res/effectlib/fileTexture.glsllib b/src/Runtime/ogl-runtime/res/effectlib/fileTexture.glsllib
index 6b9f6ab8..6b9f6ab8 100644
--- a/src/Runtime/res/effectlib/fileTexture.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/fileTexture.glsllib
diff --git a/src/Runtime/res/effectlib/flakeNoiseBumpTexture.glsllib b/src/Runtime/ogl-runtime/res/effectlib/flakeNoiseBumpTexture.glsllib
index e8e427ce..e8e427ce 100644
--- a/src/Runtime/res/effectlib/flakeNoiseBumpTexture.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/flakeNoiseBumpTexture.glsllib
diff --git a/src/Runtime/res/effectlib/flakeNoiseTexture.glsllib b/src/Runtime/ogl-runtime/res/effectlib/flakeNoiseTexture.glsllib
index 92f15d30..92f15d30 100644
--- a/src/Runtime/res/effectlib/flakeNoiseTexture.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/flakeNoiseTexture.glsllib
diff --git a/src/Runtime/res/effectlib/fresnelLayer.glsllib b/src/Runtime/ogl-runtime/res/effectlib/fresnelLayer.glsllib
index 60d71764..60d71764 100644
--- a/src/Runtime/res/effectlib/fresnelLayer.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/fresnelLayer.glsllib
diff --git a/src/Runtime/res/effectlib/funcareaLightVars.glsllib b/src/Runtime/ogl-runtime/res/effectlib/funcareaLightVars.glsllib
index 7505b348..7505b348 100644
--- a/src/Runtime/res/effectlib/funcareaLightVars.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/funcareaLightVars.glsllib
diff --git a/src/Runtime/res/effectlib/funccalculateDiffuseAreaOld.glsllib b/src/Runtime/ogl-runtime/res/effectlib/funccalculateDiffuseAreaOld.glsllib
index fc37390c..fc37390c 100644
--- a/src/Runtime/res/effectlib/funccalculateDiffuseAreaOld.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/funccalculateDiffuseAreaOld.glsllib
diff --git a/src/Runtime/res/effectlib/funccalculatePointLightAttenuation.glsllib b/src/Runtime/ogl-runtime/res/effectlib/funccalculatePointLightAttenuation.glsllib
index 5f421622..5f421622 100644
--- a/src/Runtime/res/effectlib/funccalculatePointLightAttenuation.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/funccalculatePointLightAttenuation.glsllib
diff --git a/src/Runtime/res/effectlib/funccomputeMicroHit.glsllib b/src/Runtime/ogl-runtime/res/effectlib/funccomputeMicroHit.glsllib
index 7c526916..7c526916 100644
--- a/src/Runtime/res/effectlib/funccomputeMicroHit.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/funccomputeMicroHit.glsllib
diff --git a/src/Runtime/res/effectlib/funcdiffuseReflectionBSDF.glsllib b/src/Runtime/ogl-runtime/res/effectlib/funcdiffuseReflectionBSDF.glsllib
index bda0ea60..bda0ea60 100644
--- a/src/Runtime/res/effectlib/funcdiffuseReflectionBSDF.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/funcdiffuseReflectionBSDF.glsllib
diff --git a/src/Runtime/res/effectlib/funcdiffuseReflectionWrapBSDF.glsllib b/src/Runtime/ogl-runtime/res/effectlib/funcdiffuseReflectionWrapBSDF.glsllib
index 9afc58b4..9afc58b4 100644
--- a/src/Runtime/res/effectlib/funcdiffuseReflectionWrapBSDF.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/funcdiffuseReflectionWrapBSDF.glsllib
diff --git a/src/Runtime/res/effectlib/funcgetTransformedUVCoords.glsllib b/src/Runtime/ogl-runtime/res/effectlib/funcgetTransformedUVCoords.glsllib
index 9b14a284..9b14a284 100644
--- a/src/Runtime/res/effectlib/funcgetTransformedUVCoords.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/funcgetTransformedUVCoords.glsllib
diff --git a/src/Runtime/res/effectlib/funcsampleAreaGlossyDefault.glsllib b/src/Runtime/ogl-runtime/res/effectlib/funcsampleAreaGlossyDefault.glsllib
index cb9cba11..cb9cba11 100644
--- a/src/Runtime/res/effectlib/funcsampleAreaGlossyDefault.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/funcsampleAreaGlossyDefault.glsllib
diff --git a/src/Runtime/res/effectlib/funcsampleLightVars.glsllib b/src/Runtime/ogl-runtime/res/effectlib/funcsampleLightVars.glsllib
index 85ca1448..85ca1448 100644
--- a/src/Runtime/res/effectlib/funcsampleLightVars.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/funcsampleLightVars.glsllib
diff --git a/src/Runtime/res/effectlib/funcspecularBSDF.glsllib b/src/Runtime/ogl-runtime/res/effectlib/funcspecularBSDF.glsllib
index e9450bfe..e9450bfe 100644
--- a/src/Runtime/res/effectlib/funcspecularBSDF.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/funcspecularBSDF.glsllib
diff --git a/src/Runtime/res/effectlib/gles2/SSAOCustomMaterial.glsllib b/src/Runtime/ogl-runtime/res/effectlib/gles2/SSAOCustomMaterial.glsllib
index ea8d1642..ea8d1642 100644
--- a/src/Runtime/res/effectlib/gles2/SSAOCustomMaterial.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/gles2/SSAOCustomMaterial.glsllib
diff --git a/src/Runtime/res/effectlib/gles2/defaultMaterialBumpNoLod.glsllib b/src/Runtime/ogl-runtime/res/effectlib/gles2/defaultMaterialBumpNoLod.glsllib
index 2f3bd150..2f3bd150 100644
--- a/src/Runtime/res/effectlib/gles2/defaultMaterialBumpNoLod.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/gles2/defaultMaterialBumpNoLod.glsllib
diff --git a/src/Runtime/res/effectlib/gles2/evalEnvironmentMap.glsllib b/src/Runtime/ogl-runtime/res/effectlib/gles2/evalEnvironmentMap.glsllib
index ac9851e2..ac9851e2 100644
--- a/src/Runtime/res/effectlib/gles2/evalEnvironmentMap.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/gles2/evalEnvironmentMap.glsllib
diff --git a/src/Runtime/res/effectlib/gles2/funcareaLightVars.glsllib b/src/Runtime/ogl-runtime/res/effectlib/gles2/funcareaLightVars.glsllib
index cdb8c92a..cdb8c92a 100644
--- a/src/Runtime/res/effectlib/gles2/funcareaLightVars.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/gles2/funcareaLightVars.glsllib
diff --git a/src/Runtime/res/effectlib/gles2/funcsampleLightVars.glsllib b/src/Runtime/ogl-runtime/res/effectlib/gles2/funcsampleLightVars.glsllib
index 6cb0d831..6cb0d831 100644
--- a/src/Runtime/res/effectlib/gles2/funcsampleLightVars.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/gles2/funcsampleLightVars.glsllib
diff --git a/src/Runtime/res/effectlib/gles2/microfacetBSDF.glsllib b/src/Runtime/ogl-runtime/res/effectlib/gles2/microfacetBSDF.glsllib
index 7173a743..7173a743 100644
--- a/src/Runtime/res/effectlib/gles2/microfacetBSDF.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/gles2/microfacetBSDF.glsllib
diff --git a/src/Runtime/res/effectlib/gles2/monoChannel.glsllib b/src/Runtime/ogl-runtime/res/effectlib/gles2/monoChannel.glsllib
index ca682d67..ca682d67 100644
--- a/src/Runtime/res/effectlib/gles2/monoChannel.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/gles2/monoChannel.glsllib
diff --git a/src/Runtime/res/effectlib/gles2/refraction.glsllib b/src/Runtime/ogl-runtime/res/effectlib/gles2/refraction.glsllib
index 837d7f50..837d7f50 100644
--- a/src/Runtime/res/effectlib/gles2/refraction.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/gles2/refraction.glsllib
diff --git a/src/Runtime/res/effectlib/gles2/sampleProbe.glsllib b/src/Runtime/ogl-runtime/res/effectlib/gles2/sampleProbe.glsllib
index f785918c..f785918c 100644
--- a/src/Runtime/res/effectlib/gles2/sampleProbe.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/gles2/sampleProbe.glsllib
diff --git a/src/Runtime/res/effectlib/gles2/shadowMapping.glsllib b/src/Runtime/ogl-runtime/res/effectlib/gles2/shadowMapping.glsllib
index 183ef974..183ef974 100644
--- a/src/Runtime/res/effectlib/gles2/shadowMapping.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/gles2/shadowMapping.glsllib
diff --git a/src/Runtime/res/effectlib/gles2/tangentSpaceNormalTexture.glsllib b/src/Runtime/ogl-runtime/res/effectlib/gles2/tangentSpaceNormalTexture.glsllib
index daae4014..daae4014 100644
--- a/src/Runtime/res/effectlib/gles2/tangentSpaceNormalTexture.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/gles2/tangentSpaceNormalTexture.glsllib
diff --git a/src/Runtime/res/effectlib/gradient3Recolor.glsllib b/src/Runtime/ogl-runtime/res/effectlib/gradient3Recolor.glsllib
index ba7d5937..ba7d5937 100644
--- a/src/Runtime/res/effectlib/gradient3Recolor.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/gradient3Recolor.glsllib
diff --git a/src/Runtime/res/effectlib/gradient3Texture.glsllib b/src/Runtime/ogl-runtime/res/effectlib/gradient3Texture.glsllib
index 7bd6cec7..7bd6cec7 100644
--- a/src/Runtime/res/effectlib/gradient3Texture.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/gradient3Texture.glsllib
diff --git a/src/Runtime/res/effectlib/gradientGetPosition.glsllib b/src/Runtime/ogl-runtime/res/effectlib/gradientGetPosition.glsllib
index 4ceece04..4ceece04 100644
--- a/src/Runtime/res/effectlib/gradientGetPosition.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/gradientGetPosition.glsllib
diff --git a/src/Runtime/res/effectlib/luminance.glsllib b/src/Runtime/ogl-runtime/res/effectlib/luminance.glsllib
index 067dc184..067dc184 100644
--- a/src/Runtime/res/effectlib/luminance.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/luminance.glsllib
diff --git a/src/Runtime/res/effectlib/miNoise.glsllib b/src/Runtime/ogl-runtime/res/effectlib/miNoise.glsllib
index 5fbff37d..5fbff37d 100644
--- a/src/Runtime/res/effectlib/miNoise.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/miNoise.glsllib
diff --git a/src/Runtime/res/effectlib/microfacetBSDF.glsllib b/src/Runtime/ogl-runtime/res/effectlib/microfacetBSDF.glsllib
index 8e489107..8e489107 100644
--- a/src/Runtime/res/effectlib/microfacetBSDF.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/microfacetBSDF.glsllib
diff --git a/src/Runtime/res/effectlib/monoChannel.glsllib b/src/Runtime/ogl-runtime/res/effectlib/monoChannel.glsllib
index 5c03a971..5c03a971 100644
--- a/src/Runtime/res/effectlib/monoChannel.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/monoChannel.glsllib
diff --git a/src/Runtime/res/effectlib/normalizedMix.glsllib b/src/Runtime/ogl-runtime/res/effectlib/normalizedMix.glsllib
index fc90b46d..fc90b46d 100644
--- a/src/Runtime/res/effectlib/normalizedMix.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/normalizedMix.glsllib
diff --git a/src/Runtime/res/effectlib/perlinNoise.glsllib b/src/Runtime/ogl-runtime/res/effectlib/perlinNoise.glsllib
index 347386c4..347386c4 100644
--- a/src/Runtime/res/effectlib/perlinNoise.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/perlinNoise.glsllib
diff --git a/src/Runtime/res/effectlib/perlinNoiseBumpTexture.glsllib b/src/Runtime/ogl-runtime/res/effectlib/perlinNoiseBumpTexture.glsllib
index 6e0982f3..6e0982f3 100644
--- a/src/Runtime/res/effectlib/perlinNoiseBumpTexture.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/perlinNoiseBumpTexture.glsllib
diff --git a/src/Runtime/res/effectlib/perlinNoiseTexture.glsllib b/src/Runtime/ogl-runtime/res/effectlib/perlinNoiseTexture.glsllib
index d968403e..d968403e 100644
--- a/src/Runtime/res/effectlib/perlinNoiseTexture.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/perlinNoiseTexture.glsllib
diff --git a/src/Runtime/res/effectlib/physGlossyBSDF.glsllib b/src/Runtime/ogl-runtime/res/effectlib/physGlossyBSDF.glsllib
index ece836b5..ece836b5 100644
--- a/src/Runtime/res/effectlib/physGlossyBSDF.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/physGlossyBSDF.glsllib
diff --git a/src/Runtime/res/effectlib/random255.glsllib b/src/Runtime/ogl-runtime/res/effectlib/random255.glsllib
index ef586a78..ef586a78 100644
--- a/src/Runtime/res/effectlib/random255.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/random255.glsllib
diff --git a/src/Runtime/res/effectlib/refraction.glsllib b/src/Runtime/ogl-runtime/res/effectlib/refraction.glsllib
index f961c50e..f961c50e 100644
--- a/src/Runtime/res/effectlib/refraction.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/refraction.glsllib
diff --git a/src/Runtime/res/effectlib/rotationTranslationScale.glsllib b/src/Runtime/ogl-runtime/res/effectlib/rotationTranslationScale.glsllib
index 78bb8dd1..78bb8dd1 100644
--- a/src/Runtime/res/effectlib/rotationTranslationScale.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/rotationTranslationScale.glsllib
diff --git a/src/Runtime/res/effectlib/sampleArea.glsllib b/src/Runtime/ogl-runtime/res/effectlib/sampleArea.glsllib
index 01f3a749..01f3a749 100644
--- a/src/Runtime/res/effectlib/sampleArea.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/sampleArea.glsllib
diff --git a/src/Runtime/res/effectlib/sampleLight.glsllib b/src/Runtime/ogl-runtime/res/effectlib/sampleLight.glsllib
index 05ad5b4b..05ad5b4b 100644
--- a/src/Runtime/res/effectlib/sampleLight.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/sampleLight.glsllib
diff --git a/src/Runtime/res/effectlib/sampleProbe.glsllib b/src/Runtime/ogl-runtime/res/effectlib/sampleProbe.glsllib
index 6556e51c..6556e51c 100644
--- a/src/Runtime/res/effectlib/sampleProbe.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/sampleProbe.glsllib
diff --git a/src/Runtime/res/effectlib/screenSpaceAO.glsllib b/src/Runtime/ogl-runtime/res/effectlib/screenSpaceAO.glsllib
index 54204a1f..54204a1f 100644
--- a/src/Runtime/res/effectlib/screenSpaceAO.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/screenSpaceAO.glsllib
diff --git a/src/Runtime/res/effectlib/screenSpaceDO.glsllib b/src/Runtime/ogl-runtime/res/effectlib/screenSpaceDO.glsllib
index 2ccc69fc..2ccc69fc 100644
--- a/src/Runtime/res/effectlib/screenSpaceDO.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/screenSpaceDO.glsllib
diff --git a/src/Runtime/res/effectlib/shadowMapping.glsllib b/src/Runtime/ogl-runtime/res/effectlib/shadowMapping.glsllib
index df351f9a..df351f9a 100644
--- a/src/Runtime/res/effectlib/shadowMapping.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/shadowMapping.glsllib
diff --git a/src/Runtime/res/effectlib/shadowMappingFragment.glsllib b/src/Runtime/ogl-runtime/res/effectlib/shadowMappingFragment.glsllib
index 660d736a..660d736a 100644
--- a/src/Runtime/res/effectlib/shadowMappingFragment.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/shadowMappingFragment.glsllib
diff --git a/src/Runtime/res/effectlib/simpleGlossyBSDF.glsllib b/src/Runtime/ogl-runtime/res/effectlib/simpleGlossyBSDF.glsllib
index be6024cc..be6024cc 100644
--- a/src/Runtime/res/effectlib/simpleGlossyBSDF.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/simpleGlossyBSDF.glsllib
diff --git a/src/Runtime/res/effectlib/specularBSDF.glsllib b/src/Runtime/ogl-runtime/res/effectlib/specularBSDF.glsllib
index 78e541a5..78e541a5 100644
--- a/src/Runtime/res/effectlib/specularBSDF.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/specularBSDF.glsllib
diff --git a/src/Runtime/res/effectlib/spotEdf.glsllib b/src/Runtime/ogl-runtime/res/effectlib/spotEdf.glsllib
index 2abe194e..2abe194e 100644
--- a/src/Runtime/res/effectlib/spotEdf.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/spotEdf.glsllib
diff --git a/src/Runtime/res/effectlib/square.glsllib b/src/Runtime/ogl-runtime/res/effectlib/square.glsllib
index 96857224..96857224 100644
--- a/src/Runtime/res/effectlib/square.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/square.glsllib
diff --git a/src/Runtime/res/effectlib/tangentSpaceNormalTexture.glsllib b/src/Runtime/ogl-runtime/res/effectlib/tangentSpaceNormalTexture.glsllib
index 1fcc4290..1fcc4290 100644
--- a/src/Runtime/res/effectlib/tangentSpaceNormalTexture.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/tangentSpaceNormalTexture.glsllib
diff --git a/src/Runtime/res/effectlib/tessellationLinear.glsllib b/src/Runtime/ogl-runtime/res/effectlib/tessellationLinear.glsllib
index f854cc15..f854cc15 100644
--- a/src/Runtime/res/effectlib/tessellationLinear.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/tessellationLinear.glsllib
diff --git a/src/Runtime/res/effectlib/tessellationLinearCM.glsllib b/src/Runtime/ogl-runtime/res/effectlib/tessellationLinearCM.glsllib
index d2bb90af..d2bb90af 100644
--- a/src/Runtime/res/effectlib/tessellationLinearCM.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/tessellationLinearCM.glsllib
diff --git a/src/Runtime/res/effectlib/tessellationNPatch.glsllib b/src/Runtime/ogl-runtime/res/effectlib/tessellationNPatch.glsllib
index 62ec2635..62ec2635 100644
--- a/src/Runtime/res/effectlib/tessellationNPatch.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/tessellationNPatch.glsllib
diff --git a/src/Runtime/res/effectlib/tessellationNPatchCM.glsllib b/src/Runtime/ogl-runtime/res/effectlib/tessellationNPatchCM.glsllib
index 4616b583..4616b583 100644
--- a/src/Runtime/res/effectlib/tessellationNPatchCM.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/tessellationNPatchCM.glsllib
diff --git a/src/Runtime/res/effectlib/tessellationPath.glsllib b/src/Runtime/ogl-runtime/res/effectlib/tessellationPath.glsllib
index 17b87b08..17b87b08 100644
--- a/src/Runtime/res/effectlib/tessellationPath.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/tessellationPath.glsllib
diff --git a/src/Runtime/res/effectlib/tessellationPhong.glsllib b/src/Runtime/ogl-runtime/res/effectlib/tessellationPhong.glsllib
index 98a683dc..98a683dc 100644
--- a/src/Runtime/res/effectlib/tessellationPhong.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/tessellationPhong.glsllib
diff --git a/src/Runtime/res/effectlib/tessellationPhongCM.glsllib b/src/Runtime/ogl-runtime/res/effectlib/tessellationPhongCM.glsllib
index 1374a633..1374a633 100644
--- a/src/Runtime/res/effectlib/tessellationPhongCM.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/tessellationPhongCM.glsllib
diff --git a/src/Runtime/res/effectlib/textureCoordinateInfo.glsllib b/src/Runtime/ogl-runtime/res/effectlib/textureCoordinateInfo.glsllib
index a90ffbe9..a90ffbe9 100644
--- a/src/Runtime/res/effectlib/textureCoordinateInfo.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/textureCoordinateInfo.glsllib
diff --git a/src/Runtime/res/effectlib/transformCoordinate.glsllib b/src/Runtime/ogl-runtime/res/effectlib/transformCoordinate.glsllib
index ccdf7d0a..ccdf7d0a 100644
--- a/src/Runtime/res/effectlib/transformCoordinate.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/transformCoordinate.glsllib
diff --git a/src/Runtime/res/effectlib/vertexFragmentBase.glsllib b/src/Runtime/ogl-runtime/res/effectlib/vertexFragmentBase.glsllib
index add11bbc..add11bbc 100644
--- a/src/Runtime/res/effectlib/vertexFragmentBase.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/vertexFragmentBase.glsllib
diff --git a/src/Runtime/res/effectlib/viewProperties.glsllib b/src/Runtime/ogl-runtime/res/effectlib/viewProperties.glsllib
index ef6b01ff..ef6b01ff 100644
--- a/src/Runtime/res/effectlib/viewProperties.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/viewProperties.glsllib
diff --git a/src/Runtime/res/effectlib/weightedLayer.glsllib b/src/Runtime/ogl-runtime/res/effectlib/weightedLayer.glsllib
index 781ffacf..781ffacf 100644
--- a/src/Runtime/res/effectlib/weightedLayer.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/weightedLayer.glsllib
diff --git a/src/Runtime/res/effectlib/wireframeCM.glsllib b/src/Runtime/ogl-runtime/res/effectlib/wireframeCM.glsllib
index fcbf7e9f..fcbf7e9f 100644
--- a/src/Runtime/res/effectlib/wireframeCM.glsllib
+++ b/src/Runtime/ogl-runtime/res/effectlib/wireframeCM.glsllib
diff --git a/src/Runtime/res/primitives/Cone.mesh b/src/Runtime/ogl-runtime/res/primitives/Cone.mesh
index 7ef00f3b..7ef00f3b 100644
--- a/src/Runtime/res/primitives/Cone.mesh
+++ b/src/Runtime/ogl-runtime/res/primitives/Cone.mesh
Binary files differ
diff --git a/src/Runtime/res/primitives/Cube.mesh b/src/Runtime/ogl-runtime/res/primitives/Cube.mesh
index af594b2f..af594b2f 100644
--- a/src/Runtime/res/primitives/Cube.mesh
+++ b/src/Runtime/ogl-runtime/res/primitives/Cube.mesh
Binary files differ
diff --git a/src/Runtime/res/primitives/Cylinder.mesh b/src/Runtime/ogl-runtime/res/primitives/Cylinder.mesh
index 0e9fbfcc..0e9fbfcc 100644
--- a/src/Runtime/res/primitives/Cylinder.mesh
+++ b/src/Runtime/ogl-runtime/res/primitives/Cylinder.mesh
Binary files differ
diff --git a/src/Runtime/res/primitives/Rectangle.mesh b/src/Runtime/ogl-runtime/res/primitives/Rectangle.mesh
index b137cb93..b137cb93 100644
--- a/src/Runtime/res/primitives/Rectangle.mesh
+++ b/src/Runtime/ogl-runtime/res/primitives/Rectangle.mesh
Binary files differ
diff --git a/src/Runtime/res/primitives/Sphere.mesh b/src/Runtime/ogl-runtime/res/primitives/Sphere.mesh
index 4f61d4c6..4f61d4c6 100644
--- a/src/Runtime/res/primitives/Sphere.mesh
+++ b/src/Runtime/ogl-runtime/res/primitives/Sphere.mesh
Binary files differ
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/3rdparty.pro b/src/Runtime/ogl-runtime/src/3rdparty/3rdparty.pro
new file mode 100644
index 00000000..deb754e4
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/3rdparty.pro
@@ -0,0 +1,5 @@
+TEMPLATE = subdirs
+CONFIG += ordered
+
+SUBDIRS += \
+ EASTL
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/EASTL b/src/Runtime/ogl-runtime/src/3rdparty/EASTL
new file mode 160000
+Subproject 1f1468dec7c1e9c168d15a35fadc7a084dfcf9e
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/color/CColor.cpp b/src/Runtime/ogl-runtime/src/3rdparty/color/CColor.cpp
new file mode 100644
index 00000000..d21cc945
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/color/CColor.cpp
@@ -0,0 +1,719 @@
+/****************************************************************************\
+Datei : Color.cpp
+Projekt: Farbverwaltung
+Inhalt : CColor Implementierung
+Datum : 10.01.1999
+Autor : Christian Rodemeyer
+Hinweis: (c) 1999 by Christian Rodemeyer
+ Info �ber HLS Konvertierungsfunktion
+ - Foley and Van Dam: "Fundamentals of Interactive Computer Graphics"
+ - MSDN: 'HLS Color Spaces'
+ - MSDN: 'Converting Colors Between RGB and HLS'
+\****************************************************************************/
+#include "Qt3DSCommonPrecompile.h"
+#include "CColor.h"
+
+float GetMin( float in1, float in2 );
+float GetMin( float in1, float in2 )
+{
+ return ( in1 < in2 ) ? in1 : in2;
+}
+
+float GetMax( float in1, float in2 );
+float GetMax( float in1, float in2 )
+{
+ return ( in1 > in2 ) ? in1 : in2;
+}
+
+/****************************************************************************\
+ CColor: Implementierung
+\****************************************************************************/
+const CColor::DNamedColor CColor::m_namedColor[CColor::numNamedColors] =
+{
+ {aliceblue , "aliceblue"},
+ {antiquewhite , "antiquewhite"},
+ {aqua , "aqua"},
+ {aquamarine , "aquamarine"},
+ {azure , "azure"},
+ {beige , "beige"},
+ {bisque , "bisque"},
+ {black , "black"},
+ {blanchedalmond , "blanchedalmond"},
+ {blue , "blue"},
+ {blueviolet , "blueviolet"},
+ {brown , "brown"},
+ {burlywood , "burlywood"},
+ {cadetblue , "cadetblue"},
+ {chartreuse , "chartreuse"},
+ {chocolate , "chocolate"},
+ {coral , "coral"},
+ {cornflower , "cornflower"},
+ {cornsilk , "cornsilk"},
+ {crimson , "crimson"},
+ {cyan , "cyan"},
+ {darkblue , "darkblue"},
+ {darkcyan , "darkcyan"},
+ {darkgoldenrod , "darkgoldenrod"},
+ {darkgray , "darkgray"},
+ {darkgreen , "darkgreen"},
+ {darkkhaki , "darkkhaki"},
+ {darkmagenta , "darkmagenta"},
+ {darkolivegreen , "darkolivegreen"},
+ {darkorange , "darkorange"},
+ {darkorchid , "darkorchid"},
+ {darkred , "darkred"},
+ {darksalmon , "darksalmon"},
+ {darkseagreen , "darkseagreen"},
+ {darkslateblue , "darkslateblue"},
+ {darkslategray , "darkslategray"},
+ {darkturquoise , "darkturquoise"},
+ {darkviolet , "darkviolet"},
+ {deeppink , "deeppink"},
+ {deepskyblue , "deepskyblue"},
+ {dimgray , "dimgray"},
+ {dodgerblue , "dodgerblue"},
+ {firebrick , "firebrick"},
+ {floralwhite , "floralwhite"},
+ {forestgreen , "forestgreen"},
+ {fuchsia , "fuchsia"},
+ {gainsboro , "gainsboro"},
+ {ghostwhite , "ghostwhite"},
+ {gold , "gold"},
+ {goldenrod , "goldenrod"},
+ {gray , "gray"},
+ {green , "green"},
+ {greenyellow , "greenyellow"},
+ {honeydew , "honeydew"},
+ {hotpink , "hotpink"},
+ {indianred , "indianred"},
+ {indigo , "indigo"},
+ {ivory , "ivory"},
+ {khaki , "khaki"},
+ {lavender , "lavender"},
+ {lavenderblush , "lavenderblush"},
+ {lawngreen , "lawngreen"},
+ {lemonchiffon , "lemonchiffon"},
+ {lightblue , "lightblue"},
+ {lightcoral , "lightcoral"},
+ {lightcyan , "lightcyan"},
+ {lightgoldenrodyellow , "lightgoldenrodyellow"},
+ {lightgreen , "lightgreen"},
+ {lightgrey , "lightgrey"},
+ {lightpink , "lightpink"},
+ {lightsalmon , "lightsalmon"},
+ {lightseagreen , "lightseagreen"},
+ {lightskyblue , "lightskyblue"},
+ {lightslategray , "lightslategray"},
+ {lightsteelblue , "lightsteelblue"},
+ {lightyellow , "lightyellow"},
+ {lime , "lime"},
+ {limegreen , "limegreen"},
+ {linen , "linen"},
+ {magenta , "magenta"},
+ {maroon , "maroon"},
+ {mediumaquamarine , "mediumaquamarine"},
+ {mediumblue , "mediumblue"},
+ {mediumorchid , "mediumorchid"},
+ {mediumpurple , "mediumpurple"},
+ {mediumseagreen , "mediumseagreen"},
+ {mediumslateblue , "mediumslateblue"},
+ {mediumspringgreen , "mediumspringgreen"},
+ {mediumturquoise , "mediumturquoise"},
+ {mediumvioletred , "mediumvioletred"},
+ {midnightblue , "midnightblue"},
+ {mintcream , "mintcream"},
+ {mistyrose , "mistyrose"},
+ {moccasin , "moccasin"},
+ {navajowhite , "navajowhite"},
+ {navy , "navy"},
+ {oldlace , "oldlace"},
+ {olive , "olive"},
+ {olivedrab , "olivedrab"},
+ {orange , "orange"},
+ {orangered , "orangered"},
+ {orchid , "orchid"},
+ {palegoldenrod , "palegoldenrod"},
+ {palegreen , "palegreen"},
+ {paleturquoise , "paleturquoise"},
+ {palevioletred , "palevioletred"},
+ {papayawhip , "papayawhip"},
+ {peachpuff , "peachpuff"},
+ {peru , "peru"},
+ {pink , "pink"},
+ {plum , "plum"},
+ {powderblue , "powderblue"},
+ {purple , "purple"},
+ {red , "red"},
+ {rosybrown , "rosybrown"},
+ {royalblue , "royalblue"},
+ {saddlebrown , "saddlebrown"},
+ {salmon , "salmon"},
+ {sandybrown , "sandybrown"},
+ {seagreen , "seagreen"},
+ {seashell , "seashell"},
+ {sienna , "sienna"},
+ {silver , "silver"},
+ {skyblue , "skyblue"},
+ {slateblue , "slateblue"},
+ {slategray , "slategray"},
+ {snow , "snow"},
+ {springgreen , "springgreen"},
+ {steelblue , "steelblue"},
+ {tan , "tan"},
+ {teal , "teal"},
+ {thistle , "thistle"},
+ {tomato , "tomato"},
+ {turquoise , "turquoise"},
+ {violet , "violet"},
+ {wheat , "wheat"},
+ {white , "white"},
+ {whitesmoke , "whitesmoke"},
+ {yellow , "yellow"},
+ {yellowgreen , "yellowgreen"}
+};
+
+const char* CColor::GetNameFromIndex(int i)
+{
+ assert(0 <= i && i < numNamedColors);
+
+ return m_namedColor[i].name;
+}
+
+CColor CColor::GetColorFromIndex(int i)
+{
+ if ( i < 0 ) i = 0;
+ else if ( i >= numNamedColors ) i = numNamedColors - 1;
+
+ return m_namedColor[i].color;
+}
+
+CColor CColor::FromString(const char* pcColor)
+{
+ CColor t( 0, 0, 0) ;
+ t.SetString(pcColor);
+
+ return t;
+}
+
+CColor::CColor(COLORTYPE cr) :
+ m_colorref(cr),
+ m_hue( 0.0 ),
+ m_saturation( 0.0 ),
+ m_luminance( 0.0 ),
+ m_bIsRGB(true),
+ m_bIsHLS(false)
+{
+}
+
+CColor::CColor(const QColor &c) :
+ CColor(c.red(), c.green(), c.blue())
+{
+}
+
+CColor::operator COLORTYPE() const
+{
+ return RGB( GetRed( ), GetGreen( ), GetBlue( ) );
+}
+
+CColor::operator QColor() const
+{
+ return QColor( GetRed( ), GetGreen( ), GetBlue( ) );
+}
+
+// RGB
+
+void CColor::SetColor(COLORTYPE color)
+{
+ this->SetRGB(GetRValue(color), GetGValue(color), GetBValue(color));
+}
+
+CColor::CColor( int red, int green, int blue ):
+ m_hue( 0.0 ),
+ m_saturation( 0.0 ),
+ m_luminance( 0.0 ),
+ m_bIsRGB( true ),
+ m_bIsHLS( false )
+{
+ this->SetRGB( red, green, blue );
+}
+
+void CColor::SetRed(int red)
+{
+ red &= 0xFF;
+
+ ToRGB();
+ m_color[c_red] = static_cast<unsigned char>(red);
+ m_bIsHLS = false;
+}
+
+void CColor::SetGreen(int green)
+{
+ green &= 0xFF;
+
+ ToRGB();
+ m_color[c_green] = static_cast<unsigned char>(green);
+ m_bIsHLS = false;
+}
+
+void CColor::SetBlue(int blue)
+{
+ blue &= 0xFF;
+
+ ToRGB();
+ m_color[c_blue] = static_cast<unsigned char>(blue);
+ m_bIsHLS = false;
+}
+
+void CColor::SetRGB(int red, int green, int blue)
+{
+ red &= 0xFF;
+ blue &= 0xFF;
+ green &= 0xFF;
+
+ m_color[c_red] = static_cast<unsigned char>(red);
+ m_color[c_green] = static_cast<unsigned char>(green);
+ m_color[c_blue] = static_cast<unsigned char>(blue);
+ m_bIsHLS = false;
+ m_bIsRGB = true;
+}
+
+unsigned int CColor::GetRed() const
+{
+ const_cast<CColor*>(this)->ToRGB();
+
+ return m_color[c_red];
+}
+
+unsigned int CColor::GetGreen() const
+{
+ const_cast<CColor*>(this)->ToRGB();
+
+ return m_color[c_green];
+}
+
+unsigned int CColor::GetBlue() const
+{
+ const_cast<CColor*>(this)->ToRGB();
+
+ return m_color[c_blue];
+}
+
+COLORTYPE CColor::GetRGBColor()
+{
+ const_cast<CColor*>(this)->ToRGB();
+
+ return (RGB(m_color[c_red], m_color[c_green], m_color[c_blue])) ;
+}
+
+// HSL
+
+void CColor::SetHue(float hue)
+{
+ if ( hue < 0 ) hue = 0;
+ else if ( hue > 360 ) hue = 360;
+
+ ToHLS();
+ m_hue = hue;
+ m_bIsRGB = false;
+}
+
+void CColor::SetSaturation(float saturation)
+{
+ if ( saturation < 0 ) saturation = 0;
+ else if ( saturation > 1 ) saturation = 1;
+
+ ToHLS();
+ m_saturation = saturation;
+ m_bIsRGB = false;
+}
+
+void CColor::SetLuminance(float luminance)
+{
+ if ( luminance < 0 ) luminance = 0;
+ else if ( luminance > 1 ) luminance = 1;
+
+ ToHLS();
+ m_luminance = luminance;
+ m_bIsRGB = false;
+}
+
+void CColor::SetHLS(float hue, float luminance, float saturation)
+{
+ if ( hue < 0 ) hue = 0;
+ else if ( hue > 360 ) hue = 360;
+ if ( saturation < 0 ) saturation = 0;
+ else if ( saturation > 1 ) saturation = 1;
+ if ( luminance < 0 ) luminance = 0;
+ else if ( luminance > 1 ) luminance = 1;
+
+ m_hue = hue;
+ m_luminance = luminance;
+ m_saturation = saturation;
+ m_bIsRGB = false;
+ m_bIsHLS = true;
+}
+
+float CColor::GetHue() const
+{
+ const_cast<CColor*>(this)->ToHLS();
+
+ return m_hue;
+}
+
+float CColor::GetSaturation() const
+{
+ const_cast<CColor*>(this)->ToHLS();
+
+ return m_saturation;
+}
+
+float CColor::GetLuminance() const
+{
+ const_cast<CColor*>(this)->ToHLS();
+
+ return m_luminance;
+}
+
+// Konvertierung
+
+void CColor::ToHLS()
+{
+ if (!m_bIsHLS)
+ {
+ // Konvertierung
+ unsigned char minval = static_cast<unsigned char>( GetMin(m_color[c_red], GetMin(m_color[c_green], m_color[c_blue])) );
+ unsigned char maxval = static_cast<unsigned char>( GetMax(m_color[c_red], GetMax(m_color[c_green], m_color[c_blue])) );
+ float mdiff = float(maxval) - float(minval);
+ float msum = float(maxval) + float(minval);
+
+ m_luminance = msum / 510.0f;
+
+ if (maxval == minval)
+ {
+ m_saturation = 0.0f;
+ m_hue = 0.0f;
+ }
+ else
+ {
+ float rnorm = (maxval - m_color[c_red] ) / mdiff;
+ float gnorm = (maxval - m_color[c_green]) / mdiff;
+ float bnorm = (maxval - m_color[c_blue] ) / mdiff;
+
+ m_saturation = (m_luminance <= 0.5f) ? (mdiff / msum) : (mdiff / (510.0f - msum));
+
+ if (m_color[c_red] == maxval)
+ m_hue = 60.0f * (6.0f + bnorm - gnorm);
+
+ if (m_color[c_green] == maxval)
+ m_hue = 60.0f * (2.0f + rnorm - bnorm);
+
+ if (m_color[c_blue] == maxval)
+ m_hue = 60.0f * (4.0f + gnorm - rnorm);
+
+ if (m_hue > 360.0f)
+ m_hue = m_hue - 360.0f;
+ }
+
+ m_bIsHLS = true;
+ }
+}
+
+void CColor::ToRGB()
+{
+ if (!m_bIsRGB)
+ {
+ if (m_saturation == 0.0) // Grauton, einfacher Fall
+ {
+ m_color[c_red] = m_color[c_green] = m_color[c_blue] = (unsigned char)(m_luminance * 255.0);
+ }
+ else
+ {
+ float rm1, rm2;
+
+ if (m_luminance <= 0.5f)
+ rm2 = m_luminance + m_luminance * m_saturation;
+ else
+ rm2 = m_luminance + m_saturation - m_luminance * m_saturation;
+
+ rm1 = 2.0f * m_luminance - rm2;
+ m_color[c_red] = ToRGB1(rm1, rm2, m_hue + 120.0f);
+ m_color[c_green] = ToRGB1(rm1, rm2, m_hue);
+ m_color[c_blue] = ToRGB1(rm1, rm2, m_hue - 120.0f);
+ }
+
+ m_bIsRGB = true;
+ }
+}
+
+unsigned char CColor::ToRGB1(float rm1, float rm2, float rh)
+{
+ if (rh > 360.0f)
+ rh -= 360.0f;
+ else
+ if (rh < 0.0f)
+ rh += 360.0f;
+
+ if (rh < 60.0f)
+ rm1 = rm1 + (rm2 - rm1) * rh / 60.0f;
+ else
+ if (rh < 180.0f)
+ rm1 = rm2;
+ else
+ if (rh < 240.0f)
+ rm1 = rm1 + (rm2 - rm1) * (240.0f - rh) / 60.0f;
+
+ return static_cast<unsigned char>(rm1 * 255);
+}
+
+// Stringkonvertierung im Format RRGGBB
+
+Q3DStudio::CString CColor::GetString() const
+{
+ Q3DStudio::CString color;
+ color.Format( _LSTR( "%02X%02X%02X" ), GetRed(), GetGreen(), GetBlue());
+
+ return color;
+}
+
+bool CColor::SetString( const char* pcColor)
+{
+ int r, g, b;
+ bool bRet = false;
+
+ if (sscanf(pcColor, "%2x%2x%2x", &r, &g, &b) != 3)
+ {
+ m_color[c_red] = m_color[c_green] = m_color[c_blue] = 0;
+ }
+ else
+ {
+ m_color[c_red] = static_cast<unsigned char>(r);
+ m_color[c_green] = static_cast<unsigned char>(g);
+ m_color[c_blue] = static_cast<unsigned char>(b);
+ m_bIsRGB = true;
+ m_bIsHLS = false;
+ bRet = true;
+ }
+
+ return (bRet) ;
+}
+
+Q3DStudio::CString CColor::GetName() const
+{
+ Q3DStudio::CString theRetStr;
+
+ const_cast<CColor*>(this)->ToRGB();
+ int i = numNamedColors;
+ while (i-- && m_colorref != m_namedColor[i].color) { }
+ if (i < 0)
+ {
+ theRetStr = L"#" + GetString();
+ }
+ else
+ theRetStr = m_namedColor[i].name;
+
+ return (theRetStr);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// global functions
+/////////////////////////////////////////////////////////////////////////////
+
+COLORTYPE GetHueColor(int iHue)
+{
+ COLORTYPE theHueColor ;
+ unsigned char r, g, b;
+
+ HSVToRGB( r, g, b, (float) iHue, 1.0f, 1.0f );
+
+ theHueColor = RGB( r, g, b );
+
+ return (theHueColor) ;
+}
+
+// r,g,b values are from 0 to 1
+// h = [0,360], s = [0,1], v = [0,1]
+// if s == 0, then h = -1 (undefined)
+
+void RGBtoHSV( float r, float g, float b, float *h, float *s, float *v )
+{
+ float min, max, delta;
+
+ min = GetMin( GetMin( r, g ), b );
+ max = GetMax( GetMax( r, g ), b );
+ *v = max; // v
+ delta = max - min;
+ if ( max != 0 )
+ *s = delta / max; // s
+ else
+ {
+ // r = g = b = 0 // s = 0, v is undefined
+ *s = 0;
+ *h = -1;
+ return;
+ }
+ if ( r == max )
+ *h = ( g - b ) / delta; // between yellow & magenta
+ else
+ if( g == max )
+ *h = 2 + ( b - r ) / delta; // between cyan & yellow
+ else
+ *h = 4 + ( r - g ) / delta; // between magenta & cyan
+ *h *= 60; // degrees
+ if ( *h < 0 )
+ *h += 360;
+}
+
+void RGBToHSV( unsigned char r, unsigned char g, unsigned char b, float* h, float* s, float* v )
+{
+ // Convert an RGB to HSV
+
+ float fRed, fGreen, fBlue;
+
+ // convert 0-255 values to 0-1 range
+ fRed = ( ( float ) r ) / 255.0f;
+ fGreen = ( ( float ) g ) / 255.0f;
+ fBlue = ( ( float ) b ) / 255.0f;
+
+ RGBtoHSV( fRed, fGreen, fBlue, h, s, v );
+}
+
+void HSVtoRGB( float *r, float *g, float *b, float h, float s, float v )
+{
+ int i;
+ float f, p, q, t;
+
+ if ( s == 0 )
+ {
+ // achromatic (grey)
+ *r = *g = *b = v;
+ return;
+ }
+
+ h /= 60; // sector 0 to 5
+ i = ( int ) floor( h );
+ f = h - i; // factorial part of h
+ p = v * ( 1 - s );
+ q = v * ( 1 - s * f );
+ t = v * ( 1 - s * ( 1 - f ) );
+
+ switch( i )
+ {
+ case 0:
+ *r = v;
+ *g = t;
+ *b = p;
+ break;
+
+ case 1:
+ *r = q;
+ *g = v;
+ *b = p;
+ break;
+
+ case 2:
+ *r = p;
+ *g = v;
+ *b = t;
+ break;
+
+ case 3:
+ *r = p;
+ *g = q;
+ *b = v;
+ break;
+
+ case 4:
+ *r = t;
+ *g = p;
+ *b = v;
+ break;
+
+ default: // case 5:
+ *r = v;
+ *g = p;
+ *b = q;
+ break;
+ }
+}
+
+void HSVToRGB( unsigned char& r, unsigned char& g, unsigned char& b, float h, float s, float v )
+{
+ // Convert an HSV to RGB
+
+ float fRed, fGreen, fBlue;
+
+ HSVtoRGB( &fRed, &fGreen, &fBlue, h, s, v );
+
+ r = ( unsigned char ) ( fRed * 255.0f );
+ g = ( unsigned char ) ( fGreen * 255.0f );
+ b = ( unsigned char ) ( fBlue * 255.0f );
+}
+
+short GetHueValue( COLORTYPE inColor )
+{
+ float theHue, theSaturation, theBright;
+ short theHueValue;
+
+ RGBToHSV( GetRValue( inColor ), GetGValue( inColor ), GetBValue( inColor ), &theHue, &theSaturation, &theBright );
+
+ theHueValue = ( short ) theHue;
+
+ return theHueValue;
+}
+
+short GetSaturationValue( COLORTYPE inColor )
+{
+ float theHue, theSaturation, theBright;
+ short theSaturationValue;
+
+ RGBToHSV( GetRValue( inColor ), GetGValue( inColor ), GetBValue( inColor ), &theHue, &theSaturation, &theBright );
+
+ theSaturationValue = ( short ) ( theSaturation * 255.0f );
+
+ return theSaturationValue;
+}
+
+short GetBrightnessValue( COLORTYPE inColor )
+{
+ float theHue, theSaturation, theBright;
+ short theBrightnessValue;
+
+ RGBToHSV( GetRValue( inColor ), GetGValue( inColor ), GetBValue( inColor ), &theHue, &theSaturation, &theBright );
+
+ theBrightnessValue = ( short ) ( theBright * 255.0f );
+
+ return theBrightnessValue;
+}
+
+CColor CColor::GetFractionalColor( long inIndex, long inCount )
+{
+ double theE = .2;
+ double theRCenter = 1.0 / 6;
+ double theGCenter = 3.0 / 6;
+ double theBCenter = 5.0 / 6;
+ double theRCenter2 = 7.0 / 6;
+ double theBCenter2 = -1.0 / 6;
+
+ double theInv2eSquare = -1.0 / ( 2 * theE * theE );
+ double theMag = 60 / theE;
+
+ double thePos = (double)inIndex / inCount;
+ double theR = theMag * exp( ( thePos - theRCenter ) * ( thePos - theRCenter ) * theInv2eSquare );
+ double theG = theMag * exp( ( thePos - theGCenter ) * ( thePos - theGCenter ) * theInv2eSquare );
+ double theB = theMag * exp( ( thePos - theBCenter ) * ( thePos - theBCenter ) * theInv2eSquare );
+
+ double theR2 = theMag * exp( ( thePos - theRCenter2 ) * ( thePos - theRCenter2 ) * theInv2eSquare );
+ double theB2 = theMag * exp( ( thePos - theBCenter2 ) * ( thePos - theBCenter2 ) * theInv2eSquare );
+
+ theR += theR2;
+ theB += theB2;
+
+ return CColor( (char)( theR + .5 ), (char)( theG + .5 ), (char)( theB + .5 ) );
+}
+
+QColor CColor::getQColor() const
+{
+ const_cast<CColor *>(this)->ToRGB();
+
+ return QColor(m_color[c_red], m_color[c_green], m_color[c_blue]);
+}
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/color/CColor.h b/src/Runtime/ogl-runtime/src/3rdparty/color/CColor.h
new file mode 100644
index 00000000..e6f487b5
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/color/CColor.h
@@ -0,0 +1,298 @@
+/****************************************************************************\
+Datei : Color.h
+Projekt: Farbverwaltung
+Inhalt : CColor Deklaration
+Datum : 10.01.1999
+Autor : Christian Rodemeyer
+Hinweis: (c) 1999 by Christian Rodemeyer
+\****************************************************************************/
+#pragma once
+
+#ifndef INCLUDED_COLOR_H
+#define INCLUDED_COLOR_H
+
+/****************************************************************************\
+ CColor: Repr�sentiert einen Farbwert
+\****************************************************************************/
+
+typedef unsigned long COLORTYPE;
+
+#include "Qt3DSString.h"
+#include <QColor>
+
+class CColor
+{
+public:
+
+ // COLORREF Konvertierung
+ // ----------------------
+ CColor( COLORTYPE cr = 0 );
+ CColor( int red, int green, int blue );
+ CColor( const QColor& c );
+ operator COLORTYPE() const;
+
+ operator QColor() const;
+
+ // RGB - Routinen
+ // --------------
+ void SetRed(int red); // 0..255
+ void SetGreen(int green); // 0..255
+ void SetBlue(int blue); // 0..255
+ void SetRGB(int red, int green, int blue);
+ void SetColor(COLORTYPE color);
+
+ unsigned int GetRed() const; // 0..255
+ unsigned int GetGreen() const; // 0..255
+ unsigned int GetBlue() const; // 0..255
+ COLORTYPE GetRGBColor();
+
+ // HLS - Routinen
+ // --------------
+ void SetHue(float hue); // 0.0 .. 360.0
+ void SetLuminance(float luminance); // 0.0 .. 1.0
+ void SetSaturation(float saturation); // 0.0 .. 1.0
+ void SetHLS(float hue, float luminance, float saturation);
+
+ float GetHue() const; // 0.0 .. 360.0
+ float GetLuminance() const; // 0.0 .. 1.0
+ float GetSaturation() const; // 0.0 .. 1.0
+
+ // String Konvertierung
+ // ---------------------
+ Q3DStudio::CString GetString() const; // Liefert String im Format RRGGBB
+ bool SetString( const char* pcColor); // Erwartet String im Format RRGGBB
+ QColor getQColor() const;
+
+ // Benannte Web Farben
+ // -------------------
+ Q3DStudio::CString GetName() const; // Liefert String mit benannter Farbe oder #RRGGBB falls kein Name bekannt
+
+ static CColor FromString( const char* pcColor);
+ static const char* GetNameFromIndex(int i);
+ static CColor GetColorFromIndex(int i);
+ static int GetNumNames() {return numNamedColors;}
+ static CColor GetFractionalColor( long inIndex, long inCount );
+
+ enum ENamedColor // Named Colors, could be used as COLORREF
+ {
+ none = 0x7FFFFFFF, // keine Farbe
+ aliceblue = 0x00FFF8F0, // RGB(0xF0, 0xF8, 0xFF)
+ antiquewhite = 0x00D7EBFA, // RGB(0xFA, 0xEB, 0xD7)
+ aqua = 0x00FFFF00, // RGB(0x00, 0xFF, 0xFF)
+ aquamarine = 0x00D4FF7F, // RGB(0x7F, 0xFF, 0xD4)
+ azure = 0x00FFFFF0, // RGB(0xF0, 0xFF, 0xFF)
+ beige = 0x00DCF5F5, // RGB(0xF5, 0xF5, 0xDC)
+ bisque = 0x00C4E4FF, // RGB(0xFF, 0xE4, 0xC4)
+ black = 0x00000000, // RGB(0x00, 0x00, 0x00)
+ blanchedalmond = 0x00CDEBFF, // RGB(0xFF, 0xEB, 0xCD)
+ blue = 0x00FF0000, // RGB(0x00, 0x00, 0xFF)
+ blueviolet = 0x00E22B8A, // RGB(0x8A, 0x2B, 0xE2)
+ brown = 0x002A2AA5, // RGB(0xA5, 0x2A, 0x2A)
+ burlywood = 0x0087B8DE, // RGB(0xDE, 0xB8, 0x87)
+ cadetblue = 0x00A09E5F, // RGB(0x5F, 0x9E, 0xA0)
+ chartreuse = 0x0000FF7F, // RGB(0x7F, 0xFF, 0x00)
+ chocolate = 0x001E69D2, // RGB(0xD2, 0x69, 0x1E)
+ coral = 0x00507FFF, // RGB(0xFF, 0x7F, 0x50)
+ cornflower = 0x00ED9564, // RGB(0x64, 0x95, 0xED)
+ cornsilk = 0x00DCF8FF, // RGB(0xFF, 0xF8, 0xDC)
+ crimson = 0x003C14DC, // RGB(0xDC, 0x14, 0x3C)
+ cyan = 0x00FFFF00, // RGB(0x00, 0xFF, 0xFF)
+ darkblue = 0x008B0000, // RGB(0x00, 0x00, 0x8B)
+ darkcyan = 0x008B8B00, // RGB(0x00, 0x8B, 0x8B)
+ darkgoldenrod = 0x000B86B8, // RGB(0xB8, 0x86, 0x0B)
+ darkgray = 0x00A9A9A9, // RGB(0xA9, 0xA9, 0xA9)
+ darkgreen = 0x00006400, // RGB(0x00, 0x64, 0x00)
+ darkkhaki = 0x006BB7BD, // RGB(0xBD, 0xB7, 0x6B)
+ darkmagenta = 0x008B008B, // RGB(0x8B, 0x00, 0x8B)
+ darkolivegreen = 0x002F6B55, // RGB(0x55, 0x6B, 0x2F)
+ darkorange = 0x00008CFF, // RGB(0xFF, 0x8C, 0x00)
+ darkorchid = 0x00CC3299, // RGB(0x99, 0x32, 0xCC)
+ darkred = 0x0000008B, // RGB(0x8B, 0x00, 0x00)
+ darksalmon = 0x007A96E9, // RGB(0xE9, 0x96, 0x7A)
+ darkseagreen = 0x008BBC8F, // RGB(0x8F, 0xBC, 0x8B)
+ darkslateblue = 0x008B3D48, // RGB(0x48, 0x3D, 0x8B)
+ darkslategray = 0x004F4F2F, // RGB(0x2F, 0x4F, 0x4F)
+ darkturquoise = 0x00D1CE00, // RGB(0x00, 0xCE, 0xD1)
+ darkviolet = 0x00D30094, // RGB(0x94, 0x00, 0xD3)
+ deeppink = 0x009314FF, // RGB(0xFF, 0x14, 0x93)
+ deepskyblue = 0x00FFBF00, // RGB(0x00, 0xBF, 0xFF)
+ dimgray = 0x00696969, // RGB(0x69, 0x69, 0x69)
+ dodgerblue = 0x00FF901E, // RGB(0x1E, 0x90, 0xFF)
+ firebrick = 0x002222B2, // RGB(0xB2, 0x22, 0x22)
+ floralwhite = 0x00F0FAFF, // RGB(0xFF, 0xFA, 0xF0)
+ forestgreen = 0x00228B22, // RGB(0x22, 0x8B, 0x22)
+ fuchsia = 0x00FF00FF, // RGB(0xFF, 0x00, 0xFF)
+ gainsboro = 0x00DCDCDC, // RGB(0xDC, 0xDC, 0xDC)
+ ghostwhite = 0x00FFF8F8, // RGB(0xF8, 0xF8, 0xFF)
+ gold = 0x0000D7FF, // RGB(0xFF, 0xD7, 0x00)
+ goldenrod = 0x0020A5DA, // RGB(0xDA, 0xA5, 0x20)
+ gray = 0x00808080, // RGB(0x80, 0x80, 0x80)
+ green = 0x00008000, // RGB(0x00, 0x80, 0x00)
+ greenyellow = 0x002FFFAD, // RGB(0xAD, 0xFF, 0x2F)
+ honeydew = 0x00F0FFF0, // RGB(0xF0, 0xFF, 0xF0)
+ hotpink = 0x00B469FF, // RGB(0xFF, 0x69, 0xB4)
+ indianred = 0x005C5CCD, // RGB(0xCD, 0x5C, 0x5C)
+ indigo = 0x0082004B, // RGB(0x4B, 0x00, 0x82)
+ ivory = 0x00F0FFFF, // RGB(0xFF, 0xFF, 0xF0)
+ khaki = 0x008CE6F0, // RGB(0xF0, 0xE6, 0x8C)
+ lavender = 0x00FAE6E6, // RGB(0xE6, 0xE6, 0xFA)
+ lavenderblush = 0x00F5F0FF, // RGB(0xFF, 0xF0, 0xF5)
+ lawngreen = 0x0000FC7C, // RGB(0x7C, 0xFC, 0x00)
+ lemonchiffon = 0x00CDFAFF, // RGB(0xFF, 0xFA, 0xCD)
+ lightblue = 0x00E6D8AD, // RGB(0xAD, 0xD8, 0xE6)
+ lightcoral = 0x008080F0, // RGB(0xF0, 0x80, 0x80)
+ lightcyan = 0x00FFFFE0, // RGB(0xE0, 0xFF, 0xFF)
+ lightgoldenrodyellow = 0x00D2FAFA, // RGB(0xFA, 0xFA, 0xD2)
+ lightgreen = 0x0090EE90, // RGB(0x90, 0xEE, 0x90)
+ lightgrey = 0x00D3D3D3, // RGB(0xD3, 0xD3, 0xD3)
+ lightpink = 0x00C1B6FF, // RGB(0xFF, 0xB6, 0xC1)
+ lightsalmon = 0x007AA0FF, // RGB(0xFF, 0xA0, 0x7A)
+ lightseagreen = 0x00AAB220, // RGB(0x20, 0xB2, 0xAA)
+ lightskyblue = 0x00FACE87, // RGB(0x87, 0xCE, 0xFA)
+ lightslategray = 0x00998877, // RGB(0x77, 0x88, 0x99)
+ lightsteelblue = 0x00DEC4B0, // RGB(0xB0, 0xC4, 0xDE)
+ lightyellow = 0x00E0FFFF, // RGB(0xFF, 0xFF, 0xE0)
+ lime = 0x0000FF00, // RGB(0x00, 0xFF, 0x00)
+ limegreen = 0x0032CD32, // RGB(0x32, 0xCD, 0x32)
+ linen = 0x00E6F0FA, // RGB(0xFA, 0xF0, 0xE6)
+ magenta = 0x00FF00FF, // RGB(0xFF, 0x00, 0xFF)
+ maroon = 0x00000080, // RGB(0x80, 0x00, 0x00)
+ mediumaquamarine = 0x00AACD66, // RGB(0x66, 0xCD, 0xAA)
+ mediumblue = 0x00CD0000, // RGB(0x00, 0x00, 0xCD)
+ mediumorchid = 0x00D355BA, // RGB(0xBA, 0x55, 0xD3)
+ mediumpurple = 0x00DB7093, // RGB(0x93, 0x70, 0xDB)
+ mediumseagreen = 0x0071B33C, // RGB(0x3C, 0xB3, 0x71)
+ mediumslateblue = 0x00EE687B, // RGB(0x7B, 0x68, 0xEE)
+ mediumspringgreen = 0x009AFA00, // RGB(0x00, 0xFA, 0x9A)
+ mediumturquoise = 0x00CCD148, // RGB(0x48, 0xD1, 0xCC)
+ mediumvioletred = 0x008515C7, // RGB(0xC7, 0x15, 0x85)
+ midnightblue = 0x00701919, // RGB(0x19, 0x19, 0x70)
+ mintcream = 0x00FAFFF5, // RGB(0xF5, 0xFF, 0xFA)
+ mistyrose = 0x00E1E4FF, // RGB(0xFF, 0xE4, 0xE1)
+ moccasin = 0x00B5E4FF, // RGB(0xFF, 0xE4, 0xB5)
+ navajowhite = 0x00ADDEFF, // RGB(0xFF, 0xDE, 0xAD)
+ navy = 0x00800000, // RGB(0x00, 0x00, 0x80)
+ oldlace = 0x00E6F5FD, // RGB(0xFD, 0xF5, 0xE6)
+ olive = 0x00008080, // RGB(0x80, 0x80, 0x00)
+ olivedrab = 0x00238E6B, // RGB(0x6B, 0x8E, 0x23)
+ orange = 0x0000A5FF, // RGB(0xFF, 0xA5, 0x00)
+ orangered = 0x000045FF, // RGB(0xFF, 0x45, 0x00)
+ orchid = 0x00D670DA, // RGB(0xDA, 0x70, 0xD6)
+ palegoldenrod = 0x00AAE8EE, // RGB(0xEE, 0xE8, 0xAA)
+ palegreen = 0x0098FB98, // RGB(0x98, 0xFB, 0x98)
+ paleturquoise = 0x00EEEEAF, // RGB(0xAF, 0xEE, 0xEE)
+ palevioletred = 0x009370DB, // RGB(0xDB, 0x70, 0x93)
+ papayawhip = 0x00D5EFFF, // RGB(0xFF, 0xEF, 0xD5)
+ peachpuff = 0x00B9DAFF, // RGB(0xFF, 0xDA, 0xB9)
+ peru = 0x003F85CD, // RGB(0xCD, 0x85, 0x3F)
+ pink = 0x00CBC0FF, // RGB(0xFF, 0xC0, 0xCB)
+ plum = 0x00DDA0DD, // RGB(0xDD, 0xA0, 0xDD)
+ powderblue = 0x00E6E0B0, // RGB(0xB0, 0xE0, 0xE6)
+ purple = 0x00800080, // RGB(0x80, 0x00, 0x80)
+ red = 0x000000FF, // RGB(0xFF, 0x00, 0x00)
+ rosybrown = 0x008F8FBC, // RGB(0xBC, 0x8F, 0x8F)
+ royalblue = 0x00E16941, // RGB(0x41, 0x69, 0xE1)
+ saddlebrown = 0x0013458B, // RGB(0x8B, 0x45, 0x13)
+ salmon = 0x007280FA, // RGB(0xFA, 0x80, 0x72)
+ sandybrown = 0x0060A4F4, // RGB(0xF4, 0xA4, 0x60)
+ seagreen = 0x00578B2E, // RGB(0x2E, 0x8B, 0x57)
+ seashell = 0x00EEF5FF, // RGB(0xFF, 0xF5, 0xEE)
+ sienna = 0x002D52A0, // RGB(0xA0, 0x52, 0x2D)
+ silver = 0x00C0C0C0, // RGB(0xC0, 0xC0, 0xC0)
+ skyblue = 0x00EBCE87, // RGB(0x87, 0xCE, 0xEB)
+ slateblue = 0x00CD5A6A, // RGB(0x6A, 0x5A, 0xCD)
+ slategray = 0x00908070, // RGB(0x70, 0x80, 0x90)
+ snow = 0x00FAFAFF, // RGB(0xFF, 0xFA, 0xFA)
+ springgreen = 0x007FFF00, // RGB(0x00, 0xFF, 0x7F)
+ steelblue = 0x00B48246, // RGB(0x46, 0x82, 0xB4)
+ tan = 0x008CB4D2, // RGB(0xD2, 0xB4, 0x8C)
+ teal = 0x00808000, // RGB(0x00, 0x80, 0x80)
+ thistle = 0x00D8BFD8, // RGB(0xD8, 0xBF, 0xD8)
+ tomato = 0x004763FF, // RGB(0xFF, 0x63, 0x47)
+ turquoise = 0x00D0E040, // RGB(0x40, 0xE0, 0xD0)
+ violet = 0x00EE82EE, // RGB(0xEE, 0x82, 0xEE)
+ wheat = 0x00B3DEF5, // RGB(0xF5, 0xDE, 0xB3)
+ white = 0x00FFFFFF, // RGB(0xFF, 0xFF, 0xFF)
+ whitesmoke = 0x00F5F5F5, // RGB(0xF5, 0xF5, 0xF5)
+ yellow = 0x0000FFFF, // RGB(0xFF, 0xFF, 0x00)
+ yellowgreen = 0x0032CD9A, // RGB(0x9A, 0xCD, 0x32)
+ };
+
+ enum ENamedColorIndex
+ {
+ i_aliceblue, i_antiquewhite, i_aqua, i_aquamarine, i_azure, i_beige, i_bisque, i_black,
+ i_blanchedalmond, i_blue, i_blueviolet, i_brown, i_burlywood, i_cadetblue, i_chartreuse,
+ i_chocolate, i_coral, i_cornflower, i_cornsilk, i_crimson, i_cyan, i_darkblue, i_darkcyan,
+ i_darkgoldenrod, i_darkgray, i_darkgreen, i_darkkhaki, i_darkmagenta, i_darkolivegreen,
+ i_darkorange, i_darkorchid, i_darkred, i_darksalmon, i_darkseagreen, i_darkslateblue,
+ i_darkslategray, i_darkturquoise, i_darkviolet, i_deeppink, i_deepskyblue, i_dimgray,
+ i_dodgerblue, i_firebrick, i_floralwhite, i_forestgreen, i_fuchsia, i_gainsboro,
+ i_ghostwhite, i_gold, i_goldenrod, i_gray, i_green, i_greenyellow, i_honeydew, i_hotpink,
+ i_indianred, i_indigo, i_ivory, i_khaki, i_lavender, i_lavenderblush, i_lawngreen,
+ i_lemonchiffon, i_lightblue, i_lightcoral, i_lightcyan, i_lightgoldenrodyellow,
+ i_lightgreen, i_lightgrey, i_lightpink, i_lightsalmon, i_lightseagreen, i_lightskyblue,
+ i_lightslategray, i_lightsteelblue, i_lightyellow, i_lime, i_limegreen, i_linen,
+ i_magenta, i_maroon, i_mediumaquamarine, i_mediumblue, i_mediumorchid, i_mediumpurple,
+ i_mediumseagreen, i_mediumslateblue, i_mediumspringgreen, i_mediumturquoise,
+ i_mediumvioletred, i_midnightblue, i_mintcream, i_mistyrose, i_moccasin, i_navajowhite,
+ i_navy, i_oldlace, i_olive, i_olivedrab, i_orange, i_orangered, i_orchid, i_palegoldenrod,
+ i_palegreen, i_paleturquoise, i_palevioletred, i_papayawhip, i_peachpuff, i_peru, i_pink,
+ i_plum, i_powderblue, i_purple, i_red, i_rosybrown, i_royalblue, i_saddlebrown, i_salmon,
+ i_sandybrown, i_seagreen, i_seashell, i_sienna, i_silver, i_skyblue, i_slateblue,
+ i_slategray, i_snow, i_springgreen, i_steelblue, i_tan, i_teal, i_thistle, i_tomato,
+ i_turquoise, i_violet, i_wheat, i_white, i_whitesmoke, i_yellow, i_yellowgreen,
+ numNamedColors
+ };
+
+private:
+
+ // Konvertierung
+ // -------------
+ void ToRGB(); // logisch konstant, nicht physikalisch
+ void ToHLS(); // logisch konstant, nicht physikalisch
+ static unsigned char ToRGB1(float rm1, float rm2, float rh);
+
+ // Daten
+ // -----
+ union // Byteweiser Zugriff auf die COLORREF Struktur
+ {
+ COLORTYPE m_colorref;
+ unsigned char m_color[4];
+ };
+ enum {c_red = 0, c_green = 1, c_blue = 2, c_null = 3}; // enum Hack f�r colorbyte-Index
+
+ float m_hue; // 0.0 .. 360.0 // Winkel
+ float m_saturation; // 0.0 .. 1.0 // Prozent
+ float m_luminance; // 0.0 .. 1.0 // Prozent
+
+ // Flag f�r Lazy Evaluation
+ bool m_bIsRGB;
+ bool m_bIsHLS;
+
+ // statische Konstanten f�r benannte Farben
+ struct DNamedColor
+ {
+ COLORTYPE color;
+ const char* name;
+ };
+ static const DNamedColor m_namedColor[numNamedColors];
+};
+
+/////////////////////////////////////////////////////////////////////////////
+// global functions
+/////////////////////////////////////////////////////////////////////////////
+
+COLORTYPE GetHueColor(int iHue) ;
+
+void RGBtoHSV( float r, float g, float b, float *h, float *s, float *v );
+void RGBToHSV( unsigned char r, unsigned char g, unsigned char b, float* h, float *s, float* v );
+
+void HSVtoRGB( float *r, float *g, float *b, float h, float s, float v );
+void HSVToRGB( unsigned char& r, unsigned char& g, unsigned char& b, float h, float s, float v );
+
+short GetHueValue( COLORTYPE inColor );
+short GetSaturationValue( COLORTYPE inColor );
+short GetBrightnessValue( COLORTYPE inColor );
+
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES2/gl2.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES2/gl2.h
new file mode 100644
index 00000000..f64ec00b
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES2/gl2.h
@@ -0,0 +1,677 @@
+#ifndef __gl2_h_
+#define __gl2_h_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2013-2015 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+/*
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+** http://www.opengl.org/registry/
+**
+** Khronos $Revision: 32120 $ on $Date: 2015-10-15 04:27:13 -0700 (Thu, 15 Oct 2015) $
+*/
+
+#include <GLES2/gl2platform.h>
+
+#ifndef GL_APIENTRYP
+#define GL_APIENTRYP GL_APIENTRY*
+#endif
+
+#if !defined(GL_GLES_PROTOTYPES)
+#define GL_GLES_PROTOTYPES 1
+#endif
+
+/* Generated on date 20151015 */
+
+/* Generated C header for:
+ * API: gles2
+ * Profile: common
+ * Versions considered: 2\.[0-9]
+ * Versions emitted: .*
+ * Default extensions included: None
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
+
+#ifndef GL_ES_VERSION_2_0
+#define GL_ES_VERSION_2_0 1
+#include <KHR/khrplatform.h>
+typedef khronos_int8_t GLbyte;
+typedef khronos_float_t GLclampf;
+typedef khronos_int32_t GLfixed;
+typedef short GLshort;
+typedef unsigned short GLushort;
+typedef void GLvoid;
+typedef struct __GLsync *GLsync;
+typedef khronos_int64_t GLint64;
+typedef khronos_uint64_t GLuint64;
+typedef unsigned int GLenum;
+typedef unsigned int GLuint;
+typedef char GLchar;
+typedef khronos_float_t GLfloat;
+typedef khronos_ssize_t GLsizeiptr;
+typedef khronos_intptr_t GLintptr;
+typedef unsigned int GLbitfield;
+typedef int GLint;
+typedef unsigned char GLboolean;
+typedef int GLsizei;
+typedef khronos_uint8_t GLubyte;
+#define GL_DEPTH_BUFFER_BIT 0x00000100
+#define GL_STENCIL_BUFFER_BIT 0x00000400
+#define GL_COLOR_BUFFER_BIT 0x00004000
+#define GL_FALSE 0
+#define GL_TRUE 1
+#define GL_POINTS 0x0000
+#define GL_LINES 0x0001
+#define GL_LINE_LOOP 0x0002
+#define GL_LINE_STRIP 0x0003
+#define GL_TRIANGLES 0x0004
+#define GL_TRIANGLE_STRIP 0x0005
+#define GL_TRIANGLE_FAN 0x0006
+#define GL_ZERO 0
+#define GL_ONE 1
+#define GL_SRC_COLOR 0x0300
+#define GL_ONE_MINUS_SRC_COLOR 0x0301
+#define GL_SRC_ALPHA 0x0302
+#define GL_ONE_MINUS_SRC_ALPHA 0x0303
+#define GL_DST_ALPHA 0x0304
+#define GL_ONE_MINUS_DST_ALPHA 0x0305
+#define GL_DST_COLOR 0x0306
+#define GL_ONE_MINUS_DST_COLOR 0x0307
+#define GL_SRC_ALPHA_SATURATE 0x0308
+#define GL_FUNC_ADD 0x8006
+#define GL_BLEND_EQUATION 0x8009
+#define GL_BLEND_EQUATION_RGB 0x8009
+#define GL_BLEND_EQUATION_ALPHA 0x883D
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_BLEND_DST_RGB 0x80C8
+#define GL_BLEND_SRC_RGB 0x80C9
+#define GL_BLEND_DST_ALPHA 0x80CA
+#define GL_BLEND_SRC_ALPHA 0x80CB
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_BLEND_COLOR 0x8005
+#define GL_ARRAY_BUFFER 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER 0x8893
+#define GL_ARRAY_BUFFER_BINDING 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
+#define GL_STREAM_DRAW 0x88E0
+#define GL_STATIC_DRAW 0x88E4
+#define GL_DYNAMIC_DRAW 0x88E8
+#define GL_BUFFER_SIZE 0x8764
+#define GL_BUFFER_USAGE 0x8765
+#define GL_CURRENT_VERTEX_ATTRIB 0x8626
+#define GL_FRONT 0x0404
+#define GL_BACK 0x0405
+#define GL_FRONT_AND_BACK 0x0408
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_CULL_FACE 0x0B44
+#define GL_BLEND 0x0BE2
+#define GL_DITHER 0x0BD0
+#define GL_STENCIL_TEST 0x0B90
+#define GL_DEPTH_TEST 0x0B71
+#define GL_SCISSOR_TEST 0x0C11
+#define GL_POLYGON_OFFSET_FILL 0x8037
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_NO_ERROR 0
+#define GL_INVALID_ENUM 0x0500
+#define GL_INVALID_VALUE 0x0501
+#define GL_INVALID_OPERATION 0x0502
+#define GL_OUT_OF_MEMORY 0x0505
+#define GL_CW 0x0900
+#define GL_CCW 0x0901
+#define GL_LINE_WIDTH 0x0B21
+#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+#define GL_CULL_FACE_MODE 0x0B45
+#define GL_FRONT_FACE 0x0B46
+#define GL_DEPTH_RANGE 0x0B70
+#define GL_DEPTH_WRITEMASK 0x0B72
+#define GL_DEPTH_CLEAR_VALUE 0x0B73
+#define GL_DEPTH_FUNC 0x0B74
+#define GL_STENCIL_CLEAR_VALUE 0x0B91
+#define GL_STENCIL_FUNC 0x0B92
+#define GL_STENCIL_FAIL 0x0B94
+#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
+#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
+#define GL_STENCIL_REF 0x0B97
+#define GL_STENCIL_VALUE_MASK 0x0B93
+#define GL_STENCIL_WRITEMASK 0x0B98
+#define GL_STENCIL_BACK_FUNC 0x8800
+#define GL_STENCIL_BACK_FAIL 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
+#define GL_STENCIL_BACK_REF 0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
+#define GL_VIEWPORT 0x0BA2
+#define GL_SCISSOR_BOX 0x0C10
+#define GL_COLOR_CLEAR_VALUE 0x0C22
+#define GL_COLOR_WRITEMASK 0x0C23
+#define GL_UNPACK_ALIGNMENT 0x0CF5
+#define GL_PACK_ALIGNMENT 0x0D05
+#define GL_MAX_TEXTURE_SIZE 0x0D33
+#define GL_MAX_VIEWPORT_DIMS 0x0D3A
+#define GL_SUBPIXEL_BITS 0x0D50
+#define GL_RED_BITS 0x0D52
+#define GL_GREEN_BITS 0x0D53
+#define GL_BLUE_BITS 0x0D54
+#define GL_ALPHA_BITS 0x0D55
+#define GL_DEPTH_BITS 0x0D56
+#define GL_STENCIL_BITS 0x0D57
+#define GL_POLYGON_OFFSET_UNITS 0x2A00
+#define GL_POLYGON_OFFSET_FACTOR 0x8038
+#define GL_TEXTURE_BINDING_2D 0x8069
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+#define GL_DONT_CARE 0x1100
+#define GL_FASTEST 0x1101
+#define GL_NICEST 0x1102
+#define GL_GENERATE_MIPMAP_HINT 0x8192
+#define GL_BYTE 0x1400
+#define GL_UNSIGNED_BYTE 0x1401
+#define GL_SHORT 0x1402
+#define GL_UNSIGNED_SHORT 0x1403
+#define GL_INT 0x1404
+#define GL_UNSIGNED_INT 0x1405
+#define GL_FLOAT 0x1406
+#define GL_FIXED 0x140C
+#define GL_DEPTH_COMPONENT 0x1902
+#define GL_ALPHA 0x1906
+#define GL_RGB 0x1907
+#define GL_RGBA 0x1908
+#define GL_LUMINANCE 0x1909
+#define GL_LUMINANCE_ALPHA 0x190A
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_FRAGMENT_SHADER 0x8B30
+#define GL_VERTEX_SHADER 0x8B31
+#define GL_MAX_VERTEX_ATTRIBS 0x8869
+#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
+#define GL_MAX_VARYING_VECTORS 0x8DFC
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
+#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
+#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD
+#define GL_SHADER_TYPE 0x8B4F
+#define GL_DELETE_STATUS 0x8B80
+#define GL_LINK_STATUS 0x8B82
+#define GL_VALIDATE_STATUS 0x8B83
+#define GL_ATTACHED_SHADERS 0x8B85
+#define GL_ACTIVE_UNIFORMS 0x8B86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
+#define GL_ACTIVE_ATTRIBUTES 0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
+#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
+#define GL_CURRENT_PROGRAM 0x8B8D
+#define GL_NEVER 0x0200
+#define GL_LESS 0x0201
+#define GL_EQUAL 0x0202
+#define GL_LEQUAL 0x0203
+#define GL_GREATER 0x0204
+#define GL_NOTEQUAL 0x0205
+#define GL_GEQUAL 0x0206
+#define GL_ALWAYS 0x0207
+#define GL_KEEP 0x1E00
+#define GL_REPLACE 0x1E01
+#define GL_INCR 0x1E02
+#define GL_DECR 0x1E03
+#define GL_INVERT 0x150A
+#define GL_INCR_WRAP 0x8507
+#define GL_DECR_WRAP 0x8508
+#define GL_VENDOR 0x1F00
+#define GL_RENDERER 0x1F01
+#define GL_VERSION 0x1F02
+#define GL_EXTENSIONS 0x1F03
+#define GL_NEAREST 0x2600
+#define GL_LINEAR 0x2601
+#define GL_NEAREST_MIPMAP_NEAREST 0x2700
+#define GL_LINEAR_MIPMAP_NEAREST 0x2701
+#define GL_NEAREST_MIPMAP_LINEAR 0x2702
+#define GL_LINEAR_MIPMAP_LINEAR 0x2703
+#define GL_TEXTURE_MAG_FILTER 0x2800
+#define GL_TEXTURE_MIN_FILTER 0x2801
+#define GL_TEXTURE_WRAP_S 0x2802
+#define GL_TEXTURE_WRAP_T 0x2803
+#define GL_TEXTURE 0x1702
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_REPEAT 0x2901
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_MIRRORED_REPEAT 0x8370
+#define GL_FLOAT_VEC2 0x8B50
+#define GL_FLOAT_VEC3 0x8B51
+#define GL_FLOAT_VEC4 0x8B52
+#define GL_INT_VEC2 0x8B53
+#define GL_INT_VEC3 0x8B54
+#define GL_INT_VEC4 0x8B55
+#define GL_BOOL 0x8B56
+#define GL_BOOL_VEC2 0x8B57
+#define GL_BOOL_VEC3 0x8B58
+#define GL_BOOL_VEC4 0x8B59
+#define GL_FLOAT_MAT2 0x8B5A
+#define GL_FLOAT_MAT3 0x8B5B
+#define GL_FLOAT_MAT4 0x8B5C
+#define GL_SAMPLER_2D 0x8B5E
+#define GL_SAMPLER_CUBE 0x8B60
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
+#define GL_COMPILE_STATUS 0x8B81
+#define GL_INFO_LOG_LENGTH 0x8B84
+#define GL_SHADER_SOURCE_LENGTH 0x8B88
+#define GL_SHADER_COMPILER 0x8DFA
+#define GL_SHADER_BINARY_FORMATS 0x8DF8
+#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9
+#define GL_LOW_FLOAT 0x8DF0
+#define GL_MEDIUM_FLOAT 0x8DF1
+#define GL_HIGH_FLOAT 0x8DF2
+#define GL_LOW_INT 0x8DF3
+#define GL_MEDIUM_INT 0x8DF4
+#define GL_HIGH_INT 0x8DF5
+#define GL_FRAMEBUFFER 0x8D40
+#define GL_RENDERBUFFER 0x8D41
+#define GL_RGBA4 0x8056
+#define GL_RGB5_A1 0x8057
+#define GL_RGB565 0x8D62
+#define GL_DEPTH_COMPONENT16 0x81A5
+#define GL_STENCIL_INDEX8 0x8D48
+#define GL_RENDERBUFFER_WIDTH 0x8D42
+#define GL_RENDERBUFFER_HEIGHT 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44
+#define GL_RENDERBUFFER_RED_SIZE 0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
+#define GL_COLOR_ATTACHMENT0 0x8CE0
+#define GL_DEPTH_ATTACHMENT 0x8D00
+#define GL_STENCIL_ATTACHMENT 0x8D20
+#define GL_NONE 0
+#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9
+#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
+#define GL_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_RENDERBUFFER_BINDING 0x8CA7
+#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
+#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+typedef void (GL_APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (GL_APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
+typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
+typedef void (GL_APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (GL_APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (GL_APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
+typedef void (GL_APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);
+typedef void (GL_APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+typedef void (GL_APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef GLuint (GL_APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (GL_APIENTRYP PFNGLCULLFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func);
+typedef void (GL_APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f);
+typedef void (GL_APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLENABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLFINISHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFLUSHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GL_APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+typedef GLint (GL_APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLenum (GL_APIENTRYP PFNGLGETERRORPROC) (void);
+typedef void (GL_APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+typedef void (GL_APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer);
+typedef void (GL_APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode);
+typedef GLboolean (GL_APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDPROC) (GLenum cap);
+typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
+typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture);
+typedef void (GL_APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width);
+typedef void (GL_APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units);
+typedef void (GL_APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+typedef void (GL_APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
+typedef void (GL_APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture);
+GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader);
+GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
+GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer);
+GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);
+GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);
+GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture);
+GL_APICALL void GL_APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GL_APICALL void GL_APIENTRY glBlendEquation (GLenum mode);
+GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
+GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
+GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target);
+GL_APICALL void GL_APIENTRY glClear (GLbitfield mask);
+GL_APICALL void GL_APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GL_APICALL void GL_APIENTRY glClearDepthf (GLfloat d);
+GL_APICALL void GL_APIENTRY glClearStencil (GLint s);
+GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader);
+GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL GLuint GL_APIENTRY glCreateProgram (void);
+GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type);
+GL_APICALL void GL_APIENTRY glCullFace (GLenum mode);
+GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);
+GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers);
+GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers);
+GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader);
+GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures);
+GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func);
+GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag);
+GL_APICALL void GL_APIENTRY glDepthRangef (GLfloat n, GLfloat f);
+GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader);
+GL_APICALL void GL_APIENTRY glDisable (GLenum cap);
+GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index);
+GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count);
+GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices);
+GL_APICALL void GL_APIENTRY glEnable (GLenum cap);
+GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index);
+GL_APICALL void GL_APIENTRY glFinish (void);
+GL_APICALL void GL_APIENTRY glFlush (void);
+GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode);
+GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
+GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target);
+GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers);
+GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers);
+GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint *textures);
+GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean *data);
+GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL GLenum GL_APIENTRY glGetError (void);
+GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat *data);
+GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint *data);
+GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+GL_APICALL const GLubyte *GL_APIENTRY glGetString (GLenum name);
+GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params);
+GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer);
+GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode);
+GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer);
+GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap);
+GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer);
+GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program);
+GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer);
+GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader);
+GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture);
+GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width);
+GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units);
+GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void);
+GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glSampleCoverage (GLfloat value, GLboolean invert);
+GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
+GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
+GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
+GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat v0);
+GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint v0);
+GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1);
+GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint v0, GLint v1);
+GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2);
+GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUseProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint index, GLfloat x);
+GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y);
+GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_ES_VERSION_2_0 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES2/gl2ext.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES2/gl2ext.h
new file mode 100644
index 00000000..2d055961
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES2/gl2ext.h
@@ -0,0 +1,2946 @@
+#ifndef __gl2ext_h_
+#define __gl2ext_h_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2013-2015 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+/*
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+** http://www.opengl.org/registry/
+**
+** Khronos $Revision: 32120 $ on $Date: 2015-10-15 04:27:13 -0700 (Thu, 15 Oct 2015) $
+*/
+
+#ifndef GL_APIENTRYP
+#define GL_APIENTRYP GL_APIENTRY*
+#endif
+
+/* Generated on date 20151015 */
+
+/* Generated C header for:
+ * API: gles2
+ * Profile: common
+ * Versions considered: 2\.[0-9]
+ * Versions emitted: _nomatch_^
+ * Default extensions included: gles2
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
+
+#ifndef GL_KHR_blend_equation_advanced
+#define GL_KHR_blend_equation_advanced 1
+#define GL_MULTIPLY_KHR 0x9294
+#define GL_SCREEN_KHR 0x9295
+#define GL_OVERLAY_KHR 0x9296
+#define GL_DARKEN_KHR 0x9297
+#define GL_LIGHTEN_KHR 0x9298
+#define GL_COLORDODGE_KHR 0x9299
+#define GL_COLORBURN_KHR 0x929A
+#define GL_HARDLIGHT_KHR 0x929B
+#define GL_SOFTLIGHT_KHR 0x929C
+#define GL_DIFFERENCE_KHR 0x929E
+#define GL_EXCLUSION_KHR 0x92A0
+#define GL_HSL_HUE_KHR 0x92AD
+#define GL_HSL_SATURATION_KHR 0x92AE
+#define GL_HSL_COLOR_KHR 0x92AF
+#define GL_HSL_LUMINOSITY_KHR 0x92B0
+typedef void (GL_APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBlendBarrierKHR (void);
+#endif
+#endif /* GL_KHR_blend_equation_advanced */
+
+#ifndef GL_KHR_blend_equation_advanced_coherent
+#define GL_KHR_blend_equation_advanced_coherent 1
+#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285
+#endif /* GL_KHR_blend_equation_advanced_coherent */
+
+#ifndef GL_KHR_context_flush_control
+#define GL_KHR_context_flush_control 1
+#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x82FB
+#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x82FC
+#endif /* GL_KHR_context_flush_control */
+
+#ifndef GL_KHR_debug
+#define GL_KHR_debug 1
+typedef void (GL_APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+#define GL_SAMPLER 0x82E6
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM_KHR 0x8245
+#define GL_DEBUG_SOURCE_API_KHR 0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY_KHR 0x8249
+#define GL_DEBUG_SOURCE_APPLICATION_KHR 0x824A
+#define GL_DEBUG_SOURCE_OTHER_KHR 0x824B
+#define GL_DEBUG_TYPE_ERROR_KHR 0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E
+#define GL_DEBUG_TYPE_PORTABILITY_KHR 0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE_KHR 0x8250
+#define GL_DEBUG_TYPE_OTHER_KHR 0x8251
+#define GL_DEBUG_TYPE_MARKER_KHR 0x8268
+#define GL_DEBUG_TYPE_PUSH_GROUP_KHR 0x8269
+#define GL_DEBUG_TYPE_POP_GROUP_KHR 0x826A
+#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B
+#define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C
+#define GL_DEBUG_GROUP_STACK_DEPTH_KHR 0x826D
+#define GL_BUFFER_KHR 0x82E0
+#define GL_SHADER_KHR 0x82E1
+#define GL_PROGRAM_KHR 0x82E2
+#define GL_VERTEX_ARRAY_KHR 0x8074
+#define GL_QUERY_KHR 0x82E3
+#define GL_PROGRAM_PIPELINE_KHR 0x82E4
+#define GL_SAMPLER_KHR 0x82E6
+#define GL_MAX_LABEL_LENGTH_KHR 0x82E8
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR 0x9144
+#define GL_DEBUG_LOGGED_MESSAGES_KHR 0x9145
+#define GL_DEBUG_SEVERITY_HIGH_KHR 0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM_KHR 0x9147
+#define GL_DEBUG_SEVERITY_LOW_KHR 0x9148
+#define GL_DEBUG_OUTPUT_KHR 0x92E0
+#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002
+#define GL_STACK_OVERFLOW_KHR 0x0503
+#define GL_STACK_UNDERFLOW_KHR 0x0504
+typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKKHRPROC) (GLDEBUGPROCKHR callback, const void *userParam);
+typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPKHRPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPKHRPROC) (void);
+typedef void (GL_APIENTRYP PFNGLOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei length, const GLchar *label);
+typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+typedef void (GL_APIENTRYP PFNGLGETPOINTERVKHRPROC) (GLenum pname, void **params);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDebugMessageControlKHR (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GL_APICALL void GL_APIENTRY glDebugMessageInsertKHR (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+GL_APICALL void GL_APIENTRY glDebugMessageCallbackKHR (GLDEBUGPROCKHR callback, const void *userParam);
+GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLogKHR (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+GL_APICALL void GL_APIENTRY glPushDebugGroupKHR (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+GL_APICALL void GL_APIENTRY glPopDebugGroupKHR (void);
+GL_APICALL void GL_APIENTRY glObjectLabelKHR (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+GL_APICALL void GL_APIENTRY glGetObjectLabelKHR (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+GL_APICALL void GL_APIENTRY glObjectPtrLabelKHR (const void *ptr, GLsizei length, const GLchar *label);
+GL_APICALL void GL_APIENTRY glGetObjectPtrLabelKHR (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+GL_APICALL void GL_APIENTRY glGetPointervKHR (GLenum pname, void **params);
+#endif
+#endif /* GL_KHR_debug */
+
+#ifndef GL_KHR_no_error
+#define GL_KHR_no_error 1
+#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008
+#endif /* GL_KHR_no_error */
+
+#ifndef GL_KHR_robust_buffer_access_behavior
+#define GL_KHR_robust_buffer_access_behavior 1
+#endif /* GL_KHR_robust_buffer_access_behavior */
+
+#ifndef GL_KHR_robustness
+#define GL_KHR_robustness 1
+#define GL_CONTEXT_ROBUST_ACCESS_KHR 0x90F3
+#define GL_LOSE_CONTEXT_ON_RESET_KHR 0x8252
+#define GL_GUILTY_CONTEXT_RESET_KHR 0x8253
+#define GL_INNOCENT_CONTEXT_RESET_KHR 0x8254
+#define GL_UNKNOWN_CONTEXT_RESET_KHR 0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY_KHR 0x8256
+#define GL_NO_RESET_NOTIFICATION_KHR 0x8261
+#define GL_CONTEXT_LOST_KHR 0x0507
+typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSKHRPROC) (void);
+typedef void (GL_APIENTRYP PFNGLREADNPIXELSKHRPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMUIVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusKHR (void);
+GL_APICALL void GL_APIENTRY glReadnPixelsKHR (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+GL_APICALL void GL_APIENTRY glGetnUniformfvKHR (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetnUniformivKHR (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+GL_APICALL void GL_APIENTRY glGetnUniformuivKHR (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+#endif
+#endif /* GL_KHR_robustness */
+
+#ifndef GL_KHR_texture_compression_astc_hdr
+#define GL_KHR_texture_compression_astc_hdr 1
+#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0
+#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1
+#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2
+#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3
+#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4
+#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5
+#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6
+#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7
+#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8
+#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9
+#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA
+#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB
+#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC
+#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD
+#endif /* GL_KHR_texture_compression_astc_hdr */
+
+#ifndef GL_KHR_texture_compression_astc_ldr
+#define GL_KHR_texture_compression_astc_ldr 1
+#endif /* GL_KHR_texture_compression_astc_ldr */
+
+#ifndef GL_KHR_texture_compression_astc_sliced_3d
+#define GL_KHR_texture_compression_astc_sliced_3d 1
+#endif /* GL_KHR_texture_compression_astc_sliced_3d */
+
+#ifndef GL_OES_EGL_image
+#define GL_OES_EGL_image 1
+typedef void *GLeglImageOES;
+typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image);
+typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image);
+GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image);
+#endif
+#endif /* GL_OES_EGL_image */
+
+#ifndef GL_OES_EGL_image_external
+#define GL_OES_EGL_image_external 1
+#define GL_TEXTURE_EXTERNAL_OES 0x8D65
+#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67
+#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68
+#define GL_SAMPLER_EXTERNAL_OES 0x8D66
+#endif /* GL_OES_EGL_image_external */
+
+#ifndef GL_OES_EGL_image_external_essl3
+#define GL_OES_EGL_image_external_essl3 1
+#endif /* GL_OES_EGL_image_external_essl3 */
+
+#ifndef GL_OES_compressed_ETC1_RGB8_sub_texture
+#define GL_OES_compressed_ETC1_RGB8_sub_texture 1
+#endif /* GL_OES_compressed_ETC1_RGB8_sub_texture */
+
+#ifndef GL_OES_compressed_ETC1_RGB8_texture
+#define GL_OES_compressed_ETC1_RGB8_texture 1
+#define GL_ETC1_RGB8_OES 0x8D64
+#endif /* GL_OES_compressed_ETC1_RGB8_texture */
+
+#ifndef GL_OES_compressed_paletted_texture
+#define GL_OES_compressed_paletted_texture 1
+#define GL_PALETTE4_RGB8_OES 0x8B90
+#define GL_PALETTE4_RGBA8_OES 0x8B91
+#define GL_PALETTE4_R5_G6_B5_OES 0x8B92
+#define GL_PALETTE4_RGBA4_OES 0x8B93
+#define GL_PALETTE4_RGB5_A1_OES 0x8B94
+#define GL_PALETTE8_RGB8_OES 0x8B95
+#define GL_PALETTE8_RGBA8_OES 0x8B96
+#define GL_PALETTE8_R5_G6_B5_OES 0x8B97
+#define GL_PALETTE8_RGBA4_OES 0x8B98
+#define GL_PALETTE8_RGB5_A1_OES 0x8B99
+#endif /* GL_OES_compressed_paletted_texture */
+
+#ifndef GL_OES_copy_image
+#define GL_OES_copy_image 1
+typedef void (GL_APIENTRYP PFNGLCOPYIMAGESUBDATAOESPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glCopyImageSubDataOES (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+#endif
+#endif /* GL_OES_copy_image */
+
+#ifndef GL_OES_depth24
+#define GL_OES_depth24 1
+#define GL_DEPTH_COMPONENT24_OES 0x81A6
+#endif /* GL_OES_depth24 */
+
+#ifndef GL_OES_depth32
+#define GL_OES_depth32 1
+#define GL_DEPTH_COMPONENT32_OES 0x81A7
+#endif /* GL_OES_depth32 */
+
+#ifndef GL_OES_depth_texture
+#define GL_OES_depth_texture 1
+#endif /* GL_OES_depth_texture */
+
+#ifndef GL_OES_draw_buffers_indexed
+#define GL_OES_draw_buffers_indexed 1
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+typedef void (GL_APIENTRYP PFNGLENABLEIOESPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLDISABLEIOESPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONIOESPROC) (GLuint buf, GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEIOESPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCIOESPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEIOESPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKIOESPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDIOESPROC) (GLenum target, GLuint index);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glEnableiOES (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glDisableiOES (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glBlendEquationiOES (GLuint buf, GLenum mode);
+GL_APICALL void GL_APIENTRY glBlendEquationSeparateiOES (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GL_APICALL void GL_APIENTRY glBlendFunciOES (GLuint buf, GLenum src, GLenum dst);
+GL_APICALL void GL_APIENTRY glBlendFuncSeparateiOES (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GL_APICALL void GL_APIENTRY glColorMaskiOES (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+GL_APICALL GLboolean GL_APIENTRY glIsEnablediOES (GLenum target, GLuint index);
+#endif
+#endif /* GL_OES_draw_buffers_indexed */
+
+#ifndef GL_OES_draw_elements_base_vertex
+#define GL_OES_draw_elements_base_vertex 1
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXOESPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXOESPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDrawElementsBaseVertexOES (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GL_APICALL void GL_APIENTRY glDrawRangeElementsBaseVertexOES (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexOES (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+GL_APICALL void GL_APIENTRY glMultiDrawElementsBaseVertexOES (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex);
+#endif
+#endif /* GL_OES_draw_elements_base_vertex */
+
+#ifndef GL_OES_element_index_uint
+#define GL_OES_element_index_uint 1
+#endif /* GL_OES_element_index_uint */
+
+#ifndef GL_OES_fbo_render_mipmap
+#define GL_OES_fbo_render_mipmap 1
+#endif /* GL_OES_fbo_render_mipmap */
+
+#ifndef GL_OES_fragment_precision_high
+#define GL_OES_fragment_precision_high 1
+#endif /* GL_OES_fragment_precision_high */
+
+#ifndef GL_OES_geometry_point_size
+#define GL_OES_geometry_point_size 1
+#endif /* GL_OES_geometry_point_size */
+
+#ifndef GL_OES_geometry_shader
+#define GL_OES_geometry_shader 1
+#define GL_GEOMETRY_SHADER_OES 0x8DD9
+#define GL_GEOMETRY_SHADER_BIT_OES 0x00000004
+#define GL_GEOMETRY_LINKED_VERTICES_OUT_OES 0x8916
+#define GL_GEOMETRY_LINKED_INPUT_TYPE_OES 0x8917
+#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_OES 0x8918
+#define GL_GEOMETRY_SHADER_INVOCATIONS_OES 0x887F
+#define GL_LAYER_PROVOKING_VERTEX_OES 0x825E
+#define GL_LINES_ADJACENCY_OES 0x000A
+#define GL_LINE_STRIP_ADJACENCY_OES 0x000B
+#define GL_TRIANGLES_ADJACENCY_OES 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_OES 0x000D
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8DDF
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_OES 0x8A2C
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8A32
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_OES 0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_OES 0x9124
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_OES 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_OES 0x8DE1
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_OES 0x8E5A
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_OES 0x8C29
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_OES 0x92CF
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_OES 0x92D5
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_OES 0x90CD
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_OES 0x90D7
+#define GL_FIRST_VERTEX_CONVENTION_OES 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION_OES 0x8E4E
+#define GL_UNDEFINED_VERTEX_OES 0x8260
+#define GL_PRIMITIVES_GENERATED_OES 0x8C87
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS_OES 0x9312
+#define GL_MAX_FRAMEBUFFER_LAYERS_OES 0x9317
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_OES 0x8DA8
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_OES 0x8DA7
+#define GL_REFERENCED_BY_GEOMETRY_SHADER_OES 0x9309
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREOESPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferTextureOES (GLenum target, GLenum attachment, GLuint texture, GLint level);
+#endif
+#endif /* GL_OES_geometry_shader */
+
+#ifndef GL_OES_get_program_binary
+#define GL_OES_get_program_binary 1
+#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741
+#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE
+#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLint length);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const void *binary, GLint length);
+#endif
+#endif /* GL_OES_get_program_binary */
+
+#ifndef GL_OES_gpu_shader5
+#define GL_OES_gpu_shader5 1
+#endif /* GL_OES_gpu_shader5 */
+
+#ifndef GL_OES_mapbuffer
+#define GL_OES_mapbuffer 1
+#define GL_WRITE_ONLY_OES 0x88B9
+#define GL_BUFFER_ACCESS_OES 0x88BB
+#define GL_BUFFER_MAPPED_OES 0x88BC
+#define GL_BUFFER_MAP_POINTER_OES 0x88BD
+typedef void *(GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access);
+typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, void **params);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void *GL_APIENTRY glMapBufferOES (GLenum target, GLenum access);
+GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target);
+GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, void **params);
+#endif
+#endif /* GL_OES_mapbuffer */
+
+#ifndef GL_OES_packed_depth_stencil
+#define GL_OES_packed_depth_stencil 1
+#define GL_DEPTH_STENCIL_OES 0x84F9
+#define GL_UNSIGNED_INT_24_8_OES 0x84FA
+#define GL_DEPTH24_STENCIL8_OES 0x88F0
+#endif /* GL_OES_packed_depth_stencil */
+
+#ifndef GL_OES_primitive_bounding_box
+#define GL_OES_primitive_bounding_box 1
+#define GL_PRIMITIVE_BOUNDING_BOX_OES 0x92BE
+typedef void (GL_APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXOESPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glPrimitiveBoundingBoxOES (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+#endif
+#endif /* GL_OES_primitive_bounding_box */
+
+#ifndef GL_OES_required_internalformat
+#define GL_OES_required_internalformat 1
+#define GL_ALPHA8_OES 0x803C
+#define GL_DEPTH_COMPONENT16_OES 0x81A5
+#define GL_LUMINANCE4_ALPHA4_OES 0x8043
+#define GL_LUMINANCE8_ALPHA8_OES 0x8045
+#define GL_LUMINANCE8_OES 0x8040
+#define GL_RGBA4_OES 0x8056
+#define GL_RGB5_A1_OES 0x8057
+#define GL_RGB565_OES 0x8D62
+#define GL_RGB8_OES 0x8051
+#define GL_RGBA8_OES 0x8058
+#define GL_RGB10_EXT 0x8052
+#define GL_RGB10_A2_EXT 0x8059
+#endif /* GL_OES_required_internalformat */
+
+#ifndef GL_OES_rgb8_rgba8
+#define GL_OES_rgb8_rgba8 1
+#endif /* GL_OES_rgb8_rgba8 */
+
+#ifndef GL_OES_sample_shading
+#define GL_OES_sample_shading 1
+#define GL_SAMPLE_SHADING_OES 0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE_OES 0x8C37
+typedef void (GL_APIENTRYP PFNGLMINSAMPLESHADINGOESPROC) (GLfloat value);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glMinSampleShadingOES (GLfloat value);
+#endif
+#endif /* GL_OES_sample_shading */
+
+#ifndef GL_OES_sample_variables
+#define GL_OES_sample_variables 1
+#endif /* GL_OES_sample_variables */
+
+#ifndef GL_OES_shader_image_atomic
+#define GL_OES_shader_image_atomic 1
+#endif /* GL_OES_shader_image_atomic */
+
+#ifndef GL_OES_shader_io_blocks
+#define GL_OES_shader_io_blocks 1
+#endif /* GL_OES_shader_io_blocks */
+
+#ifndef GL_OES_shader_multisample_interpolation
+#define GL_OES_shader_multisample_interpolation 1
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5C
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES 0x8E5D
+#endif /* GL_OES_shader_multisample_interpolation */
+
+#ifndef GL_OES_standard_derivatives
+#define GL_OES_standard_derivatives 1
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B
+#endif /* GL_OES_standard_derivatives */
+
+#ifndef GL_OES_stencil1
+#define GL_OES_stencil1 1
+#define GL_STENCIL_INDEX1_OES 0x8D46
+#endif /* GL_OES_stencil1 */
+
+#ifndef GL_OES_stencil4
+#define GL_OES_stencil4 1
+#define GL_STENCIL_INDEX4_OES 0x8D47
+#endif /* GL_OES_stencil4 */
+
+#ifndef GL_OES_surfaceless_context
+#define GL_OES_surfaceless_context 1
+#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219
+#endif /* GL_OES_surfaceless_context */
+
+#ifndef GL_OES_tessellation_point_size
+#define GL_OES_tessellation_point_size 1
+#endif /* GL_OES_tessellation_point_size */
+
+#ifndef GL_OES_tessellation_shader
+#define GL_OES_tessellation_shader 1
+#define GL_PATCHES_OES 0x000E
+#define GL_PATCH_VERTICES_OES 0x8E72
+#define GL_TESS_CONTROL_OUTPUT_VERTICES_OES 0x8E75
+#define GL_TESS_GEN_MODE_OES 0x8E76
+#define GL_TESS_GEN_SPACING_OES 0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER_OES 0x8E78
+#define GL_TESS_GEN_POINT_MODE_OES 0x8E79
+#define GL_ISOLINES_OES 0x8E7A
+#define GL_QUADS_OES 0x0007
+#define GL_FRACTIONAL_ODD_OES 0x8E7B
+#define GL_FRACTIONAL_EVEN_OES 0x8E7C
+#define GL_MAX_PATCH_VERTICES_OES 0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL_OES 0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_OES 0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_OES 0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_OES 0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS_OES 0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_OES 0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_OES 0x8E86
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_OES 0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_OES 0x8E8A
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_OES 0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_OES 0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E1F
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_OES 0x92CD
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_OES 0x92CE
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_OES 0x92D3
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_OES 0x92D4
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_OES 0x90CB
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_OES 0x90CC
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_OES 0x90D8
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_OES 0x90D9
+#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED_OES 0x8221
+#define GL_IS_PER_PATCH_OES 0x92E7
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_OES 0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_OES 0x9308
+#define GL_TESS_CONTROL_SHADER_OES 0x8E88
+#define GL_TESS_EVALUATION_SHADER_OES 0x8E87
+#define GL_TESS_CONTROL_SHADER_BIT_OES 0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT_OES 0x00000010
+typedef void (GL_APIENTRYP PFNGLPATCHPARAMETERIOESPROC) (GLenum pname, GLint value);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glPatchParameteriOES (GLenum pname, GLint value);
+#endif
+#endif /* GL_OES_tessellation_shader */
+
+#ifndef GL_OES_texture_3D
+#define GL_OES_texture_3D 1
+#define GL_TEXTURE_WRAP_R_OES 0x8072
+#define GL_TEXTURE_3D_OES 0x806F
+#define GL_TEXTURE_BINDING_3D_OES 0x806A
+#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073
+#define GL_SAMPLER_3D_OES 0x8B5F
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+#endif
+#endif /* GL_OES_texture_3D */
+
+#ifndef GL_OES_texture_border_clamp
+#define GL_OES_texture_border_clamp 1
+#define GL_TEXTURE_BORDER_COLOR_OES 0x1004
+#define GL_CLAMP_TO_BORDER_OES 0x812D
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVOESPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVOESPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVOESPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVOESPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVOESPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVOESPROC) (GLuint sampler, GLenum pname, const GLuint *param);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVOESPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVOESPROC) (GLuint sampler, GLenum pname, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTexParameterIivOES (GLenum target, GLenum pname, const GLint *params);
+GL_APICALL void GL_APIENTRY glTexParameterIuivOES (GLenum target, GLenum pname, const GLuint *params);
+GL_APICALL void GL_APIENTRY glGetTexParameterIivOES (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetTexParameterIuivOES (GLenum target, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glSamplerParameterIivOES (GLuint sampler, GLenum pname, const GLint *param);
+GL_APICALL void GL_APIENTRY glSamplerParameterIuivOES (GLuint sampler, GLenum pname, const GLuint *param);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterIivOES (GLuint sampler, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivOES (GLuint sampler, GLenum pname, GLuint *params);
+#endif
+#endif /* GL_OES_texture_border_clamp */
+
+#ifndef GL_OES_texture_buffer
+#define GL_OES_texture_buffer 1
+#define GL_TEXTURE_BUFFER_OES 0x8C2A
+#define GL_TEXTURE_BUFFER_BINDING_OES 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_OES 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_OES 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_OES 0x8C2D
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES 0x919F
+#define GL_SAMPLER_BUFFER_OES 0x8DC2
+#define GL_INT_SAMPLER_BUFFER_OES 0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_OES 0x8DD8
+#define GL_IMAGE_BUFFER_OES 0x9051
+#define GL_INT_IMAGE_BUFFER_OES 0x905C
+#define GL_UNSIGNED_INT_IMAGE_BUFFER_OES 0x9067
+#define GL_TEXTURE_BUFFER_OFFSET_OES 0x919D
+#define GL_TEXTURE_BUFFER_SIZE_OES 0x919E
+typedef void (GL_APIENTRYP PFNGLTEXBUFFEROESPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLTEXBUFFERRANGEOESPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTexBufferOES (GLenum target, GLenum internalformat, GLuint buffer);
+GL_APICALL void GL_APIENTRY glTexBufferRangeOES (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+#endif
+#endif /* GL_OES_texture_buffer */
+
+#ifndef GL_OES_texture_compression_astc
+#define GL_OES_texture_compression_astc 1
+#define GL_COMPRESSED_RGBA_ASTC_3x3x3_OES 0x93C0
+#define GL_COMPRESSED_RGBA_ASTC_4x3x3_OES 0x93C1
+#define GL_COMPRESSED_RGBA_ASTC_4x4x3_OES 0x93C2
+#define GL_COMPRESSED_RGBA_ASTC_4x4x4_OES 0x93C3
+#define GL_COMPRESSED_RGBA_ASTC_5x4x4_OES 0x93C4
+#define GL_COMPRESSED_RGBA_ASTC_5x5x4_OES 0x93C5
+#define GL_COMPRESSED_RGBA_ASTC_5x5x5_OES 0x93C6
+#define GL_COMPRESSED_RGBA_ASTC_6x5x5_OES 0x93C7
+#define GL_COMPRESSED_RGBA_ASTC_6x6x5_OES 0x93C8
+#define GL_COMPRESSED_RGBA_ASTC_6x6x6_OES 0x93C9
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES 0x93E0
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES 0x93E1
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES 0x93E2
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES 0x93E3
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES 0x93E4
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES 0x93E5
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES 0x93E6
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES 0x93E7
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES 0x93E8
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES 0x93E9
+#endif /* GL_OES_texture_compression_astc */
+
+#ifndef GL_OES_texture_cube_map_array
+#define GL_OES_texture_cube_map_array 1
+#define GL_TEXTURE_CUBE_MAP_ARRAY_OES 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_OES 0x900A
+#define GL_SAMPLER_CUBE_MAP_ARRAY_OES 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_OES 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900F
+#define GL_IMAGE_CUBE_MAP_ARRAY_OES 0x9054
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x905F
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x906A
+#endif /* GL_OES_texture_cube_map_array */
+
+#ifndef GL_OES_texture_float
+#define GL_OES_texture_float 1
+#endif /* GL_OES_texture_float */
+
+#ifndef GL_OES_texture_float_linear
+#define GL_OES_texture_float_linear 1
+#endif /* GL_OES_texture_float_linear */
+
+#ifndef GL_OES_texture_half_float
+#define GL_OES_texture_half_float 1
+#define GL_HALF_FLOAT_OES 0x8D61
+#endif /* GL_OES_texture_half_float */
+
+#ifndef GL_OES_texture_half_float_linear
+#define GL_OES_texture_half_float_linear 1
+#endif /* GL_OES_texture_half_float_linear */
+
+#ifndef GL_OES_texture_npot
+#define GL_OES_texture_npot 1
+#endif /* GL_OES_texture_npot */
+
+#ifndef GL_OES_texture_stencil8
+#define GL_OES_texture_stencil8 1
+#define GL_STENCIL_INDEX_OES 0x1901
+#define GL_STENCIL_INDEX8_OES 0x8D48
+#endif /* GL_OES_texture_stencil8 */
+
+#ifndef GL_OES_texture_storage_multisample_2d_array
+#define GL_OES_texture_storage_multisample_2d_array 1
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES 0x9102
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES 0x9105
+#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910B
+#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910C
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910D
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTexStorage3DMultisampleOES (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+#endif
+#endif /* GL_OES_texture_storage_multisample_2d_array */
+
+#ifndef GL_OES_texture_view
+#define GL_OES_texture_view 1
+#define GL_TEXTURE_VIEW_MIN_LEVEL_OES 0x82DB
+#define GL_TEXTURE_VIEW_NUM_LEVELS_OES 0x82DC
+#define GL_TEXTURE_VIEW_MIN_LAYER_OES 0x82DD
+#define GL_TEXTURE_VIEW_NUM_LAYERS_OES 0x82DE
+#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
+typedef void (GL_APIENTRYP PFNGLTEXTUREVIEWOESPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTextureViewOES (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+#endif
+#endif /* GL_OES_texture_view */
+
+#ifndef GL_OES_vertex_array_object
+#define GL_OES_vertex_array_object 1
+#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5
+typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array);
+typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays);
+typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array);
+GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays);
+GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays);
+GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array);
+#endif
+#endif /* GL_OES_vertex_array_object */
+
+#ifndef GL_OES_vertex_half_float
+#define GL_OES_vertex_half_float 1
+#endif /* GL_OES_vertex_half_float */
+
+#ifndef GL_OES_vertex_type_10_10_10_2
+#define GL_OES_vertex_type_10_10_10_2 1
+#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6
+#define GL_INT_10_10_10_2_OES 0x8DF7
+#endif /* GL_OES_vertex_type_10_10_10_2 */
+
+#ifndef GL_AMD_compressed_3DC_texture
+#define GL_AMD_compressed_3DC_texture 1
+#define GL_3DC_X_AMD 0x87F9
+#define GL_3DC_XY_AMD 0x87FA
+#endif /* GL_AMD_compressed_3DC_texture */
+
+#ifndef GL_AMD_compressed_ATC_texture
+#define GL_AMD_compressed_ATC_texture 1
+#define GL_ATC_RGB_AMD 0x8C92
+#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93
+#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE
+#endif /* GL_AMD_compressed_ATC_texture */
+
+#ifndef GL_AMD_performance_monitor
+#define GL_AMD_performance_monitor 1
+#define GL_COUNTER_TYPE_AMD 0x8BC0
+#define GL_COUNTER_RANGE_AMD 0x8BC1
+#define GL_UNSIGNED_INT64_AMD 0x8BC2
+#define GL_PERCENTAGE_AMD 0x8BC3
+#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4
+#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5
+#define GL_PERFMON_RESULT_AMD 0x8BC6
+typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
+typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
+typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
+typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
+typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data);
+typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
+typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
+typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);
+typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor);
+typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor);
+typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
+GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
+GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
+GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
+GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data);
+GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors);
+GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors);
+GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);
+GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor);
+GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor);
+GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
+#endif
+#endif /* GL_AMD_performance_monitor */
+
+#ifndef GL_AMD_program_binary_Z400
+#define GL_AMD_program_binary_Z400 1
+#define GL_Z400_BINARY_AMD 0x8740
+#endif /* GL_AMD_program_binary_Z400 */
+
+#ifndef GL_ANDROID_extension_pack_es31a
+#define GL_ANDROID_extension_pack_es31a 1
+#endif /* GL_ANDROID_extension_pack_es31a */
+
+#ifndef GL_ANGLE_depth_texture
+#define GL_ANGLE_depth_texture 1
+#endif /* GL_ANGLE_depth_texture */
+
+#ifndef GL_ANGLE_framebuffer_blit
+#define GL_ANGLE_framebuffer_blit 1
+#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8
+#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9
+#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6
+#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA
+typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif
+#endif /* GL_ANGLE_framebuffer_blit */
+
+#ifndef GL_ANGLE_framebuffer_multisample
+#define GL_ANGLE_framebuffer_multisample 1
+#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56
+#define GL_MAX_SAMPLES_ANGLE 0x8D57
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_ANGLE_framebuffer_multisample */
+
+#ifndef GL_ANGLE_instanced_arrays
+#define GL_ANGLE_instanced_arrays 1
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor);
+#endif
+#endif /* GL_ANGLE_instanced_arrays */
+
+#ifndef GL_ANGLE_pack_reverse_row_order
+#define GL_ANGLE_pack_reverse_row_order 1
+#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4
+#endif /* GL_ANGLE_pack_reverse_row_order */
+
+#ifndef GL_ANGLE_program_binary
+#define GL_ANGLE_program_binary 1
+#define GL_PROGRAM_BINARY_ANGLE 0x93A6
+#endif /* GL_ANGLE_program_binary */
+
+#ifndef GL_ANGLE_texture_compression_dxt3
+#define GL_ANGLE_texture_compression_dxt3 1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2
+#endif /* GL_ANGLE_texture_compression_dxt3 */
+
+#ifndef GL_ANGLE_texture_compression_dxt5
+#define GL_ANGLE_texture_compression_dxt5 1
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3
+#endif /* GL_ANGLE_texture_compression_dxt5 */
+
+#ifndef GL_ANGLE_texture_usage
+#define GL_ANGLE_texture_usage 1
+#define GL_TEXTURE_USAGE_ANGLE 0x93A2
+#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3
+#endif /* GL_ANGLE_texture_usage */
+
+#ifndef GL_ANGLE_translated_shader_source
+#define GL_ANGLE_translated_shader_source 1
+#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0
+typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source);
+#endif
+#endif /* GL_ANGLE_translated_shader_source */
+
+#ifndef GL_APPLE_clip_distance
+#define GL_APPLE_clip_distance 1
+#define GL_MAX_CLIP_DISTANCES_APPLE 0x0D32
+#define GL_CLIP_DISTANCE0_APPLE 0x3000
+#define GL_CLIP_DISTANCE1_APPLE 0x3001
+#define GL_CLIP_DISTANCE2_APPLE 0x3002
+#define GL_CLIP_DISTANCE3_APPLE 0x3003
+#define GL_CLIP_DISTANCE4_APPLE 0x3004
+#define GL_CLIP_DISTANCE5_APPLE 0x3005
+#define GL_CLIP_DISTANCE6_APPLE 0x3006
+#define GL_CLIP_DISTANCE7_APPLE 0x3007
+#endif /* GL_APPLE_clip_distance */
+
+#ifndef GL_APPLE_color_buffer_packed_float
+#define GL_APPLE_color_buffer_packed_float 1
+#endif /* GL_APPLE_color_buffer_packed_float */
+
+#ifndef GL_APPLE_copy_texture_levels
+#define GL_APPLE_copy_texture_levels 1
+typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount);
+#endif
+#endif /* GL_APPLE_copy_texture_levels */
+
+#ifndef GL_APPLE_framebuffer_multisample
+#define GL_APPLE_framebuffer_multisample 1
+#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56
+#define GL_MAX_SAMPLES_APPLE 0x8D57
+#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8
+#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9
+#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6
+#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void);
+#endif
+#endif /* GL_APPLE_framebuffer_multisample */
+
+#ifndef GL_APPLE_rgb_422
+#define GL_APPLE_rgb_422 1
+#define GL_RGB_422_APPLE 0x8A1F
+#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB
+#define GL_RGB_RAW_422_APPLE 0x8A51
+#endif /* GL_APPLE_rgb_422 */
+
+#ifndef GL_APPLE_sync
+#define GL_APPLE_sync 1
+#define GL_SYNC_OBJECT_APPLE 0x8A53
+#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111
+#define GL_OBJECT_TYPE_APPLE 0x9112
+#define GL_SYNC_CONDITION_APPLE 0x9113
+#define GL_SYNC_STATUS_APPLE 0x9114
+#define GL_SYNC_FLAGS_APPLE 0x9115
+#define GL_SYNC_FENCE_APPLE 0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117
+#define GL_UNSIGNALED_APPLE 0x9118
+#define GL_SIGNALED_APPLE 0x9119
+#define GL_ALREADY_SIGNALED_APPLE 0x911A
+#define GL_TIMEOUT_EXPIRED_APPLE 0x911B
+#define GL_CONDITION_SATISFIED_APPLE 0x911C
+#define GL_WAIT_FAILED_APPLE 0x911D
+#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001
+#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull
+typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags);
+typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync);
+typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync);
+typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params);
+typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags);
+GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync);
+GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync);
+GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params);
+GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+#endif
+#endif /* GL_APPLE_sync */
+
+#ifndef GL_APPLE_texture_format_BGRA8888
+#define GL_APPLE_texture_format_BGRA8888 1
+#define GL_BGRA_EXT 0x80E1
+#define GL_BGRA8_EXT 0x93A1
+#endif /* GL_APPLE_texture_format_BGRA8888 */
+
+#ifndef GL_APPLE_texture_max_level
+#define GL_APPLE_texture_max_level 1
+#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D
+#endif /* GL_APPLE_texture_max_level */
+
+#ifndef GL_APPLE_texture_packed_float
+#define GL_APPLE_texture_packed_float 1
+#define GL_UNSIGNED_INT_10F_11F_11F_REV_APPLE 0x8C3B
+#define GL_UNSIGNED_INT_5_9_9_9_REV_APPLE 0x8C3E
+#define GL_R11F_G11F_B10F_APPLE 0x8C3A
+#define GL_RGB9_E5_APPLE 0x8C3D
+#endif /* GL_APPLE_texture_packed_float */
+
+#ifndef GL_ARM_mali_program_binary
+#define GL_ARM_mali_program_binary 1
+#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61
+#endif /* GL_ARM_mali_program_binary */
+
+#ifndef GL_ARM_mali_shader_binary
+#define GL_ARM_mali_shader_binary 1
+#define GL_MALI_SHADER_BINARY_ARM 0x8F60
+#endif /* GL_ARM_mali_shader_binary */
+
+#ifndef GL_ARM_rgba8
+#define GL_ARM_rgba8 1
+#endif /* GL_ARM_rgba8 */
+
+#ifndef GL_ARM_shader_framebuffer_fetch
+#define GL_ARM_shader_framebuffer_fetch 1
+#define GL_FETCH_PER_SAMPLE_ARM 0x8F65
+#define GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM 0x8F66
+#endif /* GL_ARM_shader_framebuffer_fetch */
+
+#ifndef GL_ARM_shader_framebuffer_fetch_depth_stencil
+#define GL_ARM_shader_framebuffer_fetch_depth_stencil 1
+#endif /* GL_ARM_shader_framebuffer_fetch_depth_stencil */
+
+#ifndef GL_DMP_program_binary
+#define GL_DMP_program_binary 1
+#define GL_SMAPHS30_PROGRAM_BINARY_DMP 0x9251
+#define GL_SMAPHS_PROGRAM_BINARY_DMP 0x9252
+#define GL_DMP_PROGRAM_BINARY_DMP 0x9253
+#endif /* GL_DMP_program_binary */
+
+#ifndef GL_DMP_shader_binary
+#define GL_DMP_shader_binary 1
+#define GL_SHADER_BINARY_DMP 0x9250
+#endif /* GL_DMP_shader_binary */
+
+#ifndef GL_EXT_YUV_target
+#define GL_EXT_YUV_target 1
+#define GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT 0x8BE7
+#endif /* GL_EXT_YUV_target */
+
+#ifndef GL_EXT_base_instance
+#define GL_EXT_base_instance 1
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDrawArraysInstancedBaseInstanceEXT (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
+GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseInstanceEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
+GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexBaseInstanceEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
+#endif
+#endif /* GL_EXT_base_instance */
+
+#ifndef GL_EXT_blend_func_extended
+#define GL_EXT_blend_func_extended 1
+#define GL_SRC1_COLOR_EXT 0x88F9
+#define GL_SRC1_ALPHA_EXT 0x8589
+#define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA
+#define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB
+#define GL_SRC_ALPHA_SATURATE_EXT 0x0308
+#define GL_LOCATION_INDEX_EXT 0x930F
+#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC
+typedef void (GL_APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name);
+typedef GLint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef GLint (GL_APIENTRYP PFNGLGETFRAGDATAINDEXEXTPROC) (GLuint program, const GLchar *name);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBindFragDataLocationIndexedEXT (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+GL_APICALL void GL_APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name);
+GL_APICALL GLint GL_APIENTRY glGetProgramResourceLocationIndexEXT (GLuint program, GLenum programInterface, const GLchar *name);
+GL_APICALL GLint GL_APIENTRY glGetFragDataIndexEXT (GLuint program, const GLchar *name);
+#endif
+#endif /* GL_EXT_blend_func_extended */
+
+#ifndef GL_EXT_blend_minmax
+#define GL_EXT_blend_minmax 1
+#define GL_MIN_EXT 0x8007
+#define GL_MAX_EXT 0x8008
+#endif /* GL_EXT_blend_minmax */
+
+#ifndef GL_EXT_buffer_storage
+#define GL_EXT_buffer_storage 1
+#define GL_MAP_READ_BIT 0x0001
+#define GL_MAP_WRITE_BIT 0x0002
+#define GL_MAP_PERSISTENT_BIT_EXT 0x0040
+#define GL_MAP_COHERENT_BIT_EXT 0x0080
+#define GL_DYNAMIC_STORAGE_BIT_EXT 0x0100
+#define GL_CLIENT_STORAGE_BIT_EXT 0x0200
+#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT_EXT 0x00004000
+#define GL_BUFFER_IMMUTABLE_STORAGE_EXT 0x821F
+#define GL_BUFFER_STORAGE_FLAGS_EXT 0x8220
+typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEEXTPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBufferStorageEXT (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags);
+#endif
+#endif /* GL_EXT_buffer_storage */
+
+#ifndef GL_EXT_color_buffer_float
+#define GL_EXT_color_buffer_float 1
+#endif /* GL_EXT_color_buffer_float */
+
+#ifndef GL_EXT_color_buffer_half_float
+#define GL_EXT_color_buffer_half_float 1
+#define GL_RGBA16F_EXT 0x881A
+#define GL_RGB16F_EXT 0x881B
+#define GL_RG16F_EXT 0x822F
+#define GL_R16F_EXT 0x822D
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211
+#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17
+#endif /* GL_EXT_color_buffer_half_float */
+
+#ifndef GL_EXT_copy_image
+#define GL_EXT_copy_image 1
+typedef void (GL_APIENTRYP PFNGLCOPYIMAGESUBDATAEXTPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glCopyImageSubDataEXT (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+#endif
+#endif /* GL_EXT_copy_image */
+
+#ifndef GL_EXT_debug_label
+#define GL_EXT_debug_label 1
+#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F
+#define GL_PROGRAM_OBJECT_EXT 0x8B40
+#define GL_SHADER_OBJECT_EXT 0x8B48
+#define GL_BUFFER_OBJECT_EXT 0x9151
+#define GL_QUERY_OBJECT_EXT 0x9153
+#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154
+#define GL_TRANSFORM_FEEDBACK 0x8E22
+typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label);
+typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label);
+GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
+#endif
+#endif /* GL_EXT_debug_label */
+
+#ifndef GL_EXT_debug_marker
+#define GL_EXT_debug_marker 1
+typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker);
+typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker);
+typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker);
+GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker);
+GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void);
+#endif
+#endif /* GL_EXT_debug_marker */
+
+#ifndef GL_EXT_discard_framebuffer
+#define GL_EXT_discard_framebuffer 1
+#define GL_COLOR_EXT 0x1800
+#define GL_DEPTH_EXT 0x1801
+#define GL_STENCIL_EXT 0x1802
+typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+#endif
+#endif /* GL_EXT_discard_framebuffer */
+
+#ifndef GL_EXT_disjoint_timer_query
+#define GL_EXT_disjoint_timer_query 1
+#define GL_QUERY_COUNTER_BITS_EXT 0x8864
+#define GL_CURRENT_QUERY_EXT 0x8865
+#define GL_QUERY_RESULT_EXT 0x8866
+#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867
+#define GL_TIME_ELAPSED_EXT 0x88BF
+#define GL_TIMESTAMP_EXT 0x8E28
+#define GL_GPU_DISJOINT_EXT 0x8FBB
+typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id);
+typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLQUERYCOUNTEREXTPROC) (GLuint id, GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVEXTPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids);
+GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids);
+GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id);
+GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id);
+GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target);
+GL_APICALL void GL_APIENTRY glQueryCounterEXT (GLuint id, GLenum target);
+GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetQueryObjectivEXT (GLuint id, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params);
+GL_APICALL void GL_APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params);
+#endif
+#endif /* GL_EXT_disjoint_timer_query */
+
+#ifndef GL_EXT_draw_buffers
+#define GL_EXT_draw_buffers 1
+#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF
+#define GL_MAX_DRAW_BUFFERS_EXT 0x8824
+#define GL_DRAW_BUFFER0_EXT 0x8825
+#define GL_DRAW_BUFFER1_EXT 0x8826
+#define GL_DRAW_BUFFER2_EXT 0x8827
+#define GL_DRAW_BUFFER3_EXT 0x8828
+#define GL_DRAW_BUFFER4_EXT 0x8829
+#define GL_DRAW_BUFFER5_EXT 0x882A
+#define GL_DRAW_BUFFER6_EXT 0x882B
+#define GL_DRAW_BUFFER7_EXT 0x882C
+#define GL_DRAW_BUFFER8_EXT 0x882D
+#define GL_DRAW_BUFFER9_EXT 0x882E
+#define GL_DRAW_BUFFER10_EXT 0x882F
+#define GL_DRAW_BUFFER11_EXT 0x8830
+#define GL_DRAW_BUFFER12_EXT 0x8831
+#define GL_DRAW_BUFFER13_EXT 0x8832
+#define GL_DRAW_BUFFER14_EXT 0x8833
+#define GL_DRAW_BUFFER15_EXT 0x8834
+#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
+#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1
+#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2
+#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3
+#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4
+#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5
+#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6
+#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7
+#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8
+#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9
+#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA
+#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB
+#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC
+#define GL_COLOR_ATTACHMENT13_EXT 0x8CED
+#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE
+#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF
+typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTPROC) (GLsizei n, const GLenum *bufs);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei n, const GLenum *bufs);
+#endif
+#endif /* GL_EXT_draw_buffers */
+
+#ifndef GL_EXT_draw_buffers_indexed
+#define GL_EXT_draw_buffers_indexed 1
+typedef void (GL_APIENTRYP PFNGLENABLEIEXTPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLDISABLEIEXTPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONIEXTPROC) (GLuint buf, GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEIEXTPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCIEXTPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEIEXTPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKIEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDIEXTPROC) (GLenum target, GLuint index);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glEnableiEXT (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glDisableiEXT (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glBlendEquationiEXT (GLuint buf, GLenum mode);
+GL_APICALL void GL_APIENTRY glBlendEquationSeparateiEXT (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GL_APICALL void GL_APIENTRY glBlendFunciEXT (GLuint buf, GLenum src, GLenum dst);
+GL_APICALL void GL_APIENTRY glBlendFuncSeparateiEXT (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GL_APICALL void GL_APIENTRY glColorMaskiEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+GL_APICALL GLboolean GL_APIENTRY glIsEnablediEXT (GLenum target, GLuint index);
+#endif
+#endif /* GL_EXT_draw_buffers_indexed */
+
+#ifndef GL_EXT_draw_elements_base_vertex
+#define GL_EXT_draw_elements_base_vertex 1
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDrawElementsBaseVertexEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GL_APICALL void GL_APIENTRY glDrawRangeElementsBaseVertexEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+GL_APICALL void GL_APIENTRY glMultiDrawElementsBaseVertexEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex);
+#endif
+#endif /* GL_EXT_draw_elements_base_vertex */
+
+#ifndef GL_EXT_draw_instanced
+#define GL_EXT_draw_instanced 1
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
+GL_APICALL void GL_APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#endif
+#endif /* GL_EXT_draw_instanced */
+
+#ifndef GL_EXT_float_blend
+#define GL_EXT_float_blend 1
+#endif /* GL_EXT_float_blend */
+
+#ifndef GL_EXT_geometry_point_size
+#define GL_EXT_geometry_point_size 1
+#endif /* GL_EXT_geometry_point_size */
+
+#ifndef GL_EXT_geometry_shader
+#define GL_EXT_geometry_shader 1
+#define GL_GEOMETRY_SHADER_EXT 0x8DD9
+#define GL_GEOMETRY_SHADER_BIT_EXT 0x00000004
+#define GL_GEOMETRY_LINKED_VERTICES_OUT_EXT 0x8916
+#define GL_GEOMETRY_LINKED_INPUT_TYPE_EXT 0x8917
+#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT 0x8918
+#define GL_GEOMETRY_SHADER_INVOCATIONS_EXT 0x887F
+#define GL_LAYER_PROVOKING_VERTEX_EXT 0x825E
+#define GL_LINES_ADJACENCY_EXT 0x000A
+#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B
+#define GL_TRIANGLES_ADJACENCY_EXT 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT 0x8A2C
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8A32
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT 0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT 0x9124
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT 0x8E5A
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT 0x92CF
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT 0x92D5
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT 0x90CD
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT 0x90D7
+#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E
+#define GL_UNDEFINED_VERTEX_EXT 0x8260
+#define GL_PRIMITIVES_GENERATED_EXT 0x8C87
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT 0x9312
+#define GL_MAX_FRAMEBUFFER_LAYERS_EXT 0x9317
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7
+#define GL_REFERENCED_BY_GEOMETRY_SHADER_EXT 0x9309
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level);
+#endif
+#endif /* GL_EXT_geometry_shader */
+
+#ifndef GL_EXT_gpu_shader5
+#define GL_EXT_gpu_shader5 1
+#endif /* GL_EXT_gpu_shader5 */
+
+#ifndef GL_EXT_instanced_arrays
+#define GL_EXT_instanced_arrays 1
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT 0x88FE
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISOREXTPROC) (GLuint index, GLuint divisor);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glVertexAttribDivisorEXT (GLuint index, GLuint divisor);
+#endif
+#endif /* GL_EXT_instanced_arrays */
+
+#ifndef GL_EXT_map_buffer_range
+#define GL_EXT_map_buffer_range 1
+#define GL_MAP_READ_BIT_EXT 0x0001
+#define GL_MAP_WRITE_BIT_EXT 0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020
+typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void *GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length);
+#endif
+#endif /* GL_EXT_map_buffer_range */
+
+#ifndef GL_EXT_multi_draw_arrays
+#define GL_EXT_multi_draw_arrays 1
+typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount);
+#endif
+#endif /* GL_EXT_multi_draw_arrays */
+
+#ifndef GL_EXT_multi_draw_indirect
+#define GL_EXT_multi_draw_indirect 1
+typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
+typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glMultiDrawArraysIndirectEXT (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
+GL_APICALL void GL_APIENTRY glMultiDrawElementsIndirectEXT (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
+#endif
+#endif /* GL_EXT_multi_draw_indirect */
+
+#ifndef GL_EXT_multisampled_compatibility
+#define GL_EXT_multisampled_compatibility 1
+#define GL_MULTISAMPLE_EXT 0x809D
+#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F
+#endif /* GL_EXT_multisampled_compatibility */
+
+#ifndef GL_EXT_multisampled_render_to_texture
+#define GL_EXT_multisampled_render_to_texture 1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C
+#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56
+#define GL_MAX_SAMPLES_EXT 0x8D57
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
+#endif
+#endif /* GL_EXT_multisampled_render_to_texture */
+
+#ifndef GL_EXT_multiview_draw_buffers
+#define GL_EXT_multiview_draw_buffers 1
+#define GL_COLOR_ATTACHMENT_EXT 0x90F0
+#define GL_MULTIVIEW_EXT 0x90F1
+#define GL_DRAW_BUFFER_EXT 0x0C01
+#define GL_READ_BUFFER_EXT 0x0C02
+#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2
+typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index);
+typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index);
+GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices);
+GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data);
+#endif
+#endif /* GL_EXT_multiview_draw_buffers */
+
+#ifndef GL_EXT_occlusion_query_boolean
+#define GL_EXT_occlusion_query_boolean 1
+#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A
+#endif /* GL_EXT_occlusion_query_boolean */
+
+#ifndef GL_EXT_post_depth_coverage
+#define GL_EXT_post_depth_coverage 1
+#endif /* GL_EXT_post_depth_coverage */
+
+#ifndef GL_EXT_primitive_bounding_box
+#define GL_EXT_primitive_bounding_box 1
+#define GL_PRIMITIVE_BOUNDING_BOX_EXT 0x92BE
+typedef void (GL_APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXEXTPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glPrimitiveBoundingBoxEXT (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+#endif
+#endif /* GL_EXT_primitive_bounding_box */
+
+#ifndef GL_EXT_pvrtc_sRGB
+#define GL_EXT_pvrtc_sRGB 1
+#define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT 0x8A54
+#define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT 0x8A55
+#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT 0x8A56
+#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT 0x8A57
+#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG 0x93F0
+#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG 0x93F1
+#endif /* GL_EXT_pvrtc_sRGB */
+
+#ifndef GL_EXT_raster_multisample
+#define GL_EXT_raster_multisample 1
+#define GL_RASTER_MULTISAMPLE_EXT 0x9327
+#define GL_RASTER_SAMPLES_EXT 0x9328
+#define GL_MAX_RASTER_SAMPLES_EXT 0x9329
+#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A
+#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B
+#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C
+typedef void (GL_APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations);
+#endif
+#endif /* GL_EXT_raster_multisample */
+
+#ifndef GL_EXT_read_format_bgra
+#define GL_EXT_read_format_bgra 1
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366
+#endif /* GL_EXT_read_format_bgra */
+
+#ifndef GL_EXT_render_snorm
+#define GL_EXT_render_snorm 1
+#define GL_R8_SNORM 0x8F94
+#define GL_RG8_SNORM 0x8F95
+#define GL_RGBA8_SNORM 0x8F97
+#define GL_R16_SNORM_EXT 0x8F98
+#define GL_RG16_SNORM_EXT 0x8F99
+#define GL_RGBA16_SNORM_EXT 0x8F9B
+#endif /* GL_EXT_render_snorm */
+
+#ifndef GL_EXT_robustness
+#define GL_EXT_robustness 1
+#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253
+#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254
+#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255
+#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3
+#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256
+#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252
+#define GL_NO_RESET_NOTIFICATION_EXT 0x8261
+typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void);
+typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void);
+GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+#endif
+#endif /* GL_EXT_robustness */
+
+#ifndef GL_EXT_sRGB
+#define GL_EXT_sRGB 1
+#define GL_SRGB_EXT 0x8C40
+#define GL_SRGB_ALPHA_EXT 0x8C42
+#define GL_SRGB8_ALPHA8_EXT 0x8C43
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210
+#endif /* GL_EXT_sRGB */
+
+#ifndef GL_EXT_sRGB_write_control
+#define GL_EXT_sRGB_write_control 1
+#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
+#endif /* GL_EXT_sRGB_write_control */
+
+#ifndef GL_EXT_separate_shader_objects
+#define GL_EXT_separate_shader_objects 1
+#define GL_ACTIVE_PROGRAM_EXT 0x8259
+#define GL_VERTEX_SHADER_BIT_EXT 0x00000001
+#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002
+#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF
+#define GL_PROGRAM_SEPARABLE_EXT 0x8258
+#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A
+typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program);
+typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines);
+typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program);
+GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline);
+GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings);
+GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines);
+GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines);
+GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params);
+GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline);
+GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value);
+GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0);
+GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0);
+GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1);
+GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program);
+GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline);
+GL_APICALL void GL_APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0);
+GL_APICALL void GL_APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1);
+GL_APICALL void GL_APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GL_APICALL void GL_APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GL_APICALL void GL_APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#endif
+#endif /* GL_EXT_separate_shader_objects */
+
+#ifndef GL_EXT_shader_framebuffer_fetch
+#define GL_EXT_shader_framebuffer_fetch 1
+#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52
+#endif /* GL_EXT_shader_framebuffer_fetch */
+
+#ifndef GL_EXT_shader_implicit_conversions
+#define GL_EXT_shader_implicit_conversions 1
+#endif /* GL_EXT_shader_implicit_conversions */
+
+#ifndef GL_EXT_shader_integer_mix
+#define GL_EXT_shader_integer_mix 1
+#endif /* GL_EXT_shader_integer_mix */
+
+#ifndef GL_EXT_shader_io_blocks
+#define GL_EXT_shader_io_blocks 1
+#endif /* GL_EXT_shader_io_blocks */
+
+#ifndef GL_EXT_shader_pixel_local_storage
+#define GL_EXT_shader_pixel_local_storage 1
+#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT 0x8F63
+#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT 0x8F67
+#define GL_SHADER_PIXEL_LOCAL_STORAGE_EXT 0x8F64
+#endif /* GL_EXT_shader_pixel_local_storage */
+
+#ifndef GL_EXT_shader_texture_lod
+#define GL_EXT_shader_texture_lod 1
+#endif /* GL_EXT_shader_texture_lod */
+
+#ifndef GL_EXT_shadow_samplers
+#define GL_EXT_shadow_samplers 1
+#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C
+#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D
+#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E
+#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62
+#endif /* GL_EXT_shadow_samplers */
+
+#ifndef GL_EXT_sparse_texture
+#define GL_EXT_sparse_texture 1
+#define GL_TEXTURE_SPARSE_EXT 0x91A6
+#define GL_VIRTUAL_PAGE_SIZE_INDEX_EXT 0x91A7
+#define GL_NUM_SPARSE_LEVELS_EXT 0x91AA
+#define GL_NUM_VIRTUAL_PAGE_SIZES_EXT 0x91A8
+#define GL_VIRTUAL_PAGE_SIZE_X_EXT 0x9195
+#define GL_VIRTUAL_PAGE_SIZE_Y_EXT 0x9196
+#define GL_VIRTUAL_PAGE_SIZE_Z_EXT 0x9197
+#define GL_TEXTURE_2D_ARRAY 0x8C1A
+#define GL_TEXTURE_3D 0x806F
+#define GL_MAX_SPARSE_TEXTURE_SIZE_EXT 0x9198
+#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_EXT 0x9199
+#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_EXT 0x919A
+#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_EXT 0x91A9
+typedef void (GL_APIENTRYP PFNGLTEXPAGECOMMITMENTEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTexPageCommitmentEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit);
+#endif
+#endif /* GL_EXT_sparse_texture */
+
+#ifndef GL_EXT_tessellation_point_size
+#define GL_EXT_tessellation_point_size 1
+#endif /* GL_EXT_tessellation_point_size */
+
+#ifndef GL_EXT_tessellation_shader
+#define GL_EXT_tessellation_shader 1
+#define GL_PATCHES_EXT 0x000E
+#define GL_PATCH_VERTICES_EXT 0x8E72
+#define GL_TESS_CONTROL_OUTPUT_VERTICES_EXT 0x8E75
+#define GL_TESS_GEN_MODE_EXT 0x8E76
+#define GL_TESS_GEN_SPACING_EXT 0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER_EXT 0x8E78
+#define GL_TESS_GEN_POINT_MODE_EXT 0x8E79
+#define GL_ISOLINES_EXT 0x8E7A
+#define GL_QUADS_EXT 0x0007
+#define GL_FRACTIONAL_ODD_EXT 0x8E7B
+#define GL_FRACTIONAL_EVEN_EXT 0x8E7C
+#define GL_MAX_PATCH_VERTICES_EXT 0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL_EXT 0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT 0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT 0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT 0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS_EXT 0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT 0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT 0x8E86
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT 0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT 0x8E8A
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT 0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT 0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E1F
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT 0x92CD
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT 0x92CE
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT 0x92D3
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT 0x92D4
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT 0x90CB
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT 0x90CC
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT 0x90D8
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT 0x90D9
+#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221
+#define GL_IS_PER_PATCH_EXT 0x92E7
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT 0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT 0x9308
+#define GL_TESS_CONTROL_SHADER_EXT 0x8E88
+#define GL_TESS_EVALUATION_SHADER_EXT 0x8E87
+#define GL_TESS_CONTROL_SHADER_BIT_EXT 0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT_EXT 0x00000010
+typedef void (GL_APIENTRYP PFNGLPATCHPARAMETERIEXTPROC) (GLenum pname, GLint value);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glPatchParameteriEXT (GLenum pname, GLint value);
+#endif
+#endif /* GL_EXT_tessellation_shader */
+
+#ifndef GL_EXT_texture_border_clamp
+#define GL_EXT_texture_border_clamp 1
+#define GL_TEXTURE_BORDER_COLOR_EXT 0x1004
+#define GL_CLAMP_TO_BORDER_EXT 0x812D
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVEXTPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVEXTPROC) (GLuint sampler, GLenum pname, const GLuint *param);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVEXTPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVEXTPROC) (GLuint sampler, GLenum pname, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params);
+GL_APICALL void GL_APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params);
+GL_APICALL void GL_APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glSamplerParameterIivEXT (GLuint sampler, GLenum pname, const GLint *param);
+GL_APICALL void GL_APIENTRY glSamplerParameterIuivEXT (GLuint sampler, GLenum pname, const GLuint *param);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterIivEXT (GLuint sampler, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivEXT (GLuint sampler, GLenum pname, GLuint *params);
+#endif
+#endif /* GL_EXT_texture_border_clamp */
+
+#ifndef GL_EXT_texture_buffer
+#define GL_EXT_texture_buffer 1
+#define GL_TEXTURE_BUFFER_EXT 0x8C2A
+#define GL_TEXTURE_BUFFER_BINDING_EXT 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT 0x919F
+#define GL_SAMPLER_BUFFER_EXT 0x8DC2
+#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8
+#define GL_IMAGE_BUFFER_EXT 0x9051
+#define GL_INT_IMAGE_BUFFER_EXT 0x905C
+#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067
+#define GL_TEXTURE_BUFFER_OFFSET_EXT 0x919D
+#define GL_TEXTURE_BUFFER_SIZE_EXT 0x919E
+typedef void (GL_APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLTEXBUFFERRANGEEXTPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer);
+GL_APICALL void GL_APIENTRY glTexBufferRangeEXT (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+#endif
+#endif /* GL_EXT_texture_buffer */
+
+#ifndef GL_EXT_texture_compression_dxt1
+#define GL_EXT_texture_compression_dxt1 1
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
+#endif /* GL_EXT_texture_compression_dxt1 */
+
+#ifndef GL_EXT_texture_compression_s3tc
+#define GL_EXT_texture_compression_s3tc 1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
+#endif /* GL_EXT_texture_compression_s3tc */
+
+#ifndef GL_EXT_texture_cube_map_array
+#define GL_EXT_texture_cube_map_array 1
+#define GL_TEXTURE_CUBE_MAP_ARRAY_EXT 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT 0x900A
+#define GL_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900F
+#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A
+#endif /* GL_EXT_texture_cube_map_array */
+
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_EXT_texture_filter_anisotropic 1
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
+#endif /* GL_EXT_texture_filter_anisotropic */
+
+#ifndef GL_EXT_texture_filter_minmax
+#define GL_EXT_texture_filter_minmax 1
+#endif /* GL_EXT_texture_filter_minmax */
+
+#ifndef GL_EXT_texture_format_BGRA8888
+#define GL_EXT_texture_format_BGRA8888 1
+#endif /* GL_EXT_texture_format_BGRA8888 */
+
+#ifndef GL_EXT_texture_norm16
+#define GL_EXT_texture_norm16 1
+#define GL_R16_EXT 0x822A
+#define GL_RG16_EXT 0x822C
+#define GL_RGBA16_EXT 0x805B
+#define GL_RGB16_EXT 0x8054
+#define GL_RGB16_SNORM_EXT 0x8F9A
+#endif /* GL_EXT_texture_norm16 */
+
+#ifndef GL_EXT_texture_rg
+#define GL_EXT_texture_rg 1
+#define GL_RED_EXT 0x1903
+#define GL_RG_EXT 0x8227
+#define GL_R8_EXT 0x8229
+#define GL_RG8_EXT 0x822B
+#endif /* GL_EXT_texture_rg */
+
+#ifndef GL_EXT_texture_sRGB_R8
+#define GL_EXT_texture_sRGB_R8 1
+#define GL_SR8_EXT 0x8FBD
+#endif /* GL_EXT_texture_sRGB_R8 */
+
+#ifndef GL_EXT_texture_sRGB_RG8
+#define GL_EXT_texture_sRGB_RG8 1
+#define GL_SRG8_EXT 0x8FBE
+#endif /* GL_EXT_texture_sRGB_RG8 */
+
+#ifndef GL_EXT_texture_sRGB_decode
+#define GL_EXT_texture_sRGB_decode 1
+#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48
+#define GL_DECODE_EXT 0x8A49
+#define GL_SKIP_DECODE_EXT 0x8A4A
+#endif /* GL_EXT_texture_sRGB_decode */
+
+#ifndef GL_EXT_texture_storage
+#define GL_EXT_texture_storage 1
+#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F
+#define GL_ALPHA8_EXT 0x803C
+#define GL_LUMINANCE8_EXT 0x8040
+#define GL_LUMINANCE8_ALPHA8_EXT 0x8045
+#define GL_RGBA32F_EXT 0x8814
+#define GL_RGB32F_EXT 0x8815
+#define GL_ALPHA32F_EXT 0x8816
+#define GL_LUMINANCE32F_EXT 0x8818
+#define GL_LUMINANCE_ALPHA32F_EXT 0x8819
+#define GL_ALPHA16F_EXT 0x881C
+#define GL_LUMINANCE16F_EXT 0x881E
+#define GL_LUMINANCE_ALPHA16F_EXT 0x881F
+#define GL_R32F_EXT 0x822E
+#define GL_RG32F_EXT 0x8230
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+#endif /* GL_EXT_texture_storage */
+
+#ifndef GL_EXT_texture_type_2_10_10_10_REV
+#define GL_EXT_texture_type_2_10_10_10_REV 1
+#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368
+#endif /* GL_EXT_texture_type_2_10_10_10_REV */
+
+#ifndef GL_EXT_texture_view
+#define GL_EXT_texture_view 1
+#define GL_TEXTURE_VIEW_MIN_LEVEL_EXT 0x82DB
+#define GL_TEXTURE_VIEW_NUM_LEVELS_EXT 0x82DC
+#define GL_TEXTURE_VIEW_MIN_LAYER_EXT 0x82DD
+#define GL_TEXTURE_VIEW_NUM_LAYERS_EXT 0x82DE
+typedef void (GL_APIENTRYP PFNGLTEXTUREVIEWEXTPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glTextureViewEXT (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+#endif
+#endif /* GL_EXT_texture_view */
+
+#ifndef GL_EXT_unpack_subimage
+#define GL_EXT_unpack_subimage 1
+#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2
+#define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3
+#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4
+#endif /* GL_EXT_unpack_subimage */
+
+#ifndef GL_FJ_shader_binary_GCCSO
+#define GL_FJ_shader_binary_GCCSO 1
+#define GL_GCCSO_SHADER_BINARY_FJ 0x9260
+#endif /* GL_FJ_shader_binary_GCCSO */
+
+#ifndef GL_IMG_multisampled_render_to_texture
+#define GL_IMG_multisampled_render_to_texture 1
+#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134
+#define GL_MAX_SAMPLES_IMG 0x9135
+#define GL_TEXTURE_SAMPLES_IMG 0x9136
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
+#endif
+#endif /* GL_IMG_multisampled_render_to_texture */
+
+#ifndef GL_IMG_program_binary
+#define GL_IMG_program_binary 1
+#define GL_SGX_PROGRAM_BINARY_IMG 0x9130
+#endif /* GL_IMG_program_binary */
+
+#ifndef GL_IMG_read_format
+#define GL_IMG_read_format 1
+#define GL_BGRA_IMG 0x80E1
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365
+#endif /* GL_IMG_read_format */
+
+#ifndef GL_IMG_shader_binary
+#define GL_IMG_shader_binary 1
+#define GL_SGX_BINARY_IMG 0x8C0A
+#endif /* GL_IMG_shader_binary */
+
+#ifndef GL_IMG_texture_compression_pvrtc
+#define GL_IMG_texture_compression_pvrtc 1
+#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00
+#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01
+#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02
+#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03
+#endif /* GL_IMG_texture_compression_pvrtc */
+
+#ifndef GL_IMG_texture_compression_pvrtc2
+#define GL_IMG_texture_compression_pvrtc2 1
+#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137
+#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138
+#endif /* GL_IMG_texture_compression_pvrtc2 */
+
+#ifndef GL_IMG_texture_filter_cubic
+#define GL_IMG_texture_filter_cubic 1
+#define GL_CUBIC_IMG 0x9139
+#define GL_CUBIC_MIPMAP_NEAREST_IMG 0x913A
+#define GL_CUBIC_MIPMAP_LINEAR_IMG 0x913B
+#endif /* GL_IMG_texture_filter_cubic */
+
+#ifndef GL_INTEL_framebuffer_CMAA
+#define GL_INTEL_framebuffer_CMAA 1
+typedef void (GL_APIENTRYP PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glApplyFramebufferAttachmentCMAAINTEL (void);
+#endif
+#endif /* GL_INTEL_framebuffer_CMAA */
+
+#ifndef GL_INTEL_performance_query
+#define GL_INTEL_performance_query 1
+#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000
+#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001
+#define GL_PERFQUERY_WAIT_INTEL 0x83FB
+#define GL_PERFQUERY_FLUSH_INTEL 0x83FA
+#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9
+#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0
+#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1
+#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2
+#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3
+#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4
+#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5
+#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8
+#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9
+#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA
+#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB
+#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC
+#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD
+#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE
+#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF
+#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500
+typedef void (GL_APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (GL_APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle);
+typedef void (GL_APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (GL_APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (GL_APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId);
+typedef void (GL_APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId);
+typedef void (GL_APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
+typedef void (GL_APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten);
+typedef void (GL_APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId);
+typedef void (GL_APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle);
+GL_APICALL void GL_APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle);
+GL_APICALL void GL_APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle);
+GL_APICALL void GL_APIENTRY glEndPerfQueryINTEL (GLuint queryHandle);
+GL_APICALL void GL_APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId);
+GL_APICALL void GL_APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId);
+GL_APICALL void GL_APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
+GL_APICALL void GL_APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten);
+GL_APICALL void GL_APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId);
+GL_APICALL void GL_APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask);
+#endif
+#endif /* GL_INTEL_performance_query */
+
+#ifndef GL_NV_bindless_texture
+#define GL_NV_bindless_texture 1
+typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture);
+typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);
+typedef void (GL_APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle);
+typedef GLuint64 (GL_APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+typedef void (GL_APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access);
+typedef void (GL_APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle);
+typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);
+typedef GLboolean (GL_APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL GLuint64 GL_APIENTRY glGetTextureHandleNV (GLuint texture);
+GL_APICALL GLuint64 GL_APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler);
+GL_APICALL void GL_APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle);
+GL_APICALL void GL_APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle);
+GL_APICALL GLuint64 GL_APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+GL_APICALL void GL_APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access);
+GL_APICALL void GL_APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle);
+GL_APICALL void GL_APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value);
+GL_APICALL void GL_APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value);
+GL_APICALL void GL_APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value);
+GL_APICALL void GL_APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+GL_APICALL GLboolean GL_APIENTRY glIsTextureHandleResidentNV (GLuint64 handle);
+GL_APICALL GLboolean GL_APIENTRY glIsImageHandleResidentNV (GLuint64 handle);
+#endif
+#endif /* GL_NV_bindless_texture */
+
+#ifndef GL_NV_blend_equation_advanced
+#define GL_NV_blend_equation_advanced 1
+#define GL_BLEND_OVERLAP_NV 0x9281
+#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280
+#define GL_BLUE_NV 0x1905
+#define GL_COLORBURN_NV 0x929A
+#define GL_COLORDODGE_NV 0x9299
+#define GL_CONJOINT_NV 0x9284
+#define GL_CONTRAST_NV 0x92A1
+#define GL_DARKEN_NV 0x9297
+#define GL_DIFFERENCE_NV 0x929E
+#define GL_DISJOINT_NV 0x9283
+#define GL_DST_ATOP_NV 0x928F
+#define GL_DST_IN_NV 0x928B
+#define GL_DST_NV 0x9287
+#define GL_DST_OUT_NV 0x928D
+#define GL_DST_OVER_NV 0x9289
+#define GL_EXCLUSION_NV 0x92A0
+#define GL_GREEN_NV 0x1904
+#define GL_HARDLIGHT_NV 0x929B
+#define GL_HARDMIX_NV 0x92A9
+#define GL_HSL_COLOR_NV 0x92AF
+#define GL_HSL_HUE_NV 0x92AD
+#define GL_HSL_LUMINOSITY_NV 0x92B0
+#define GL_HSL_SATURATION_NV 0x92AE
+#define GL_INVERT_OVG_NV 0x92B4
+#define GL_INVERT_RGB_NV 0x92A3
+#define GL_LIGHTEN_NV 0x9298
+#define GL_LINEARBURN_NV 0x92A5
+#define GL_LINEARDODGE_NV 0x92A4
+#define GL_LINEARLIGHT_NV 0x92A7
+#define GL_MINUS_CLAMPED_NV 0x92B3
+#define GL_MINUS_NV 0x929F
+#define GL_MULTIPLY_NV 0x9294
+#define GL_OVERLAY_NV 0x9296
+#define GL_PINLIGHT_NV 0x92A8
+#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2
+#define GL_PLUS_CLAMPED_NV 0x92B1
+#define GL_PLUS_DARKER_NV 0x9292
+#define GL_PLUS_NV 0x9291
+#define GL_RED_NV 0x1903
+#define GL_SCREEN_NV 0x9295
+#define GL_SOFTLIGHT_NV 0x929C
+#define GL_SRC_ATOP_NV 0x928E
+#define GL_SRC_IN_NV 0x928A
+#define GL_SRC_NV 0x9286
+#define GL_SRC_OUT_NV 0x928C
+#define GL_SRC_OVER_NV 0x9288
+#define GL_UNCORRELATED_NV 0x9282
+#define GL_VIVIDLIGHT_NV 0x92A6
+#define GL_XOR_NV 0x1506
+typedef void (GL_APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value);
+typedef void (GL_APIENTRYP PFNGLBLENDBARRIERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBlendParameteriNV (GLenum pname, GLint value);
+GL_APICALL void GL_APIENTRY glBlendBarrierNV (void);
+#endif
+#endif /* GL_NV_blend_equation_advanced */
+
+#ifndef GL_NV_blend_equation_advanced_coherent
+#define GL_NV_blend_equation_advanced_coherent 1
+#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285
+#endif /* GL_NV_blend_equation_advanced_coherent */
+
+#ifndef GL_NV_conditional_render
+#define GL_NV_conditional_render 1
+#define GL_QUERY_WAIT_NV 0x8E13
+#define GL_QUERY_NO_WAIT_NV 0x8E14
+#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16
+typedef void (GL_APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode);
+typedef void (GL_APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode);
+GL_APICALL void GL_APIENTRY glEndConditionalRenderNV (void);
+#endif
+#endif /* GL_NV_conditional_render */
+
+#ifndef GL_NV_conservative_raster
+#define GL_NV_conservative_raster 1
+#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346
+#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347
+#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348
+#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349
+typedef void (GL_APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits);
+#endif
+#endif /* GL_NV_conservative_raster */
+
+#ifndef GL_NV_copy_buffer
+#define GL_NV_copy_buffer 1
+#define GL_COPY_READ_BUFFER_NV 0x8F36
+#define GL_COPY_WRITE_BUFFER_NV 0x8F37
+typedef void (GL_APIENTRYP PFNGLCOPYBUFFERSUBDATANVPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glCopyBufferSubDataNV (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+#endif
+#endif /* GL_NV_copy_buffer */
+
+#ifndef GL_NV_coverage_sample
+#define GL_NV_coverage_sample 1
+#define GL_COVERAGE_COMPONENT_NV 0x8ED0
+#define GL_COVERAGE_COMPONENT4_NV 0x8ED1
+#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2
+#define GL_COVERAGE_BUFFERS_NV 0x8ED3
+#define GL_COVERAGE_SAMPLES_NV 0x8ED4
+#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5
+#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6
+#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7
+#define GL_COVERAGE_BUFFER_BIT_NV 0x00008000
+typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask);
+typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask);
+GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation);
+#endif
+#endif /* GL_NV_coverage_sample */
+
+#ifndef GL_NV_depth_nonlinear
+#define GL_NV_depth_nonlinear 1
+#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C
+#endif /* GL_NV_depth_nonlinear */
+
+#ifndef GL_NV_draw_buffers
+#define GL_NV_draw_buffers 1
+#define GL_MAX_DRAW_BUFFERS_NV 0x8824
+#define GL_DRAW_BUFFER0_NV 0x8825
+#define GL_DRAW_BUFFER1_NV 0x8826
+#define GL_DRAW_BUFFER2_NV 0x8827
+#define GL_DRAW_BUFFER3_NV 0x8828
+#define GL_DRAW_BUFFER4_NV 0x8829
+#define GL_DRAW_BUFFER5_NV 0x882A
+#define GL_DRAW_BUFFER6_NV 0x882B
+#define GL_DRAW_BUFFER7_NV 0x882C
+#define GL_DRAW_BUFFER8_NV 0x882D
+#define GL_DRAW_BUFFER9_NV 0x882E
+#define GL_DRAW_BUFFER10_NV 0x882F
+#define GL_DRAW_BUFFER11_NV 0x8830
+#define GL_DRAW_BUFFER12_NV 0x8831
+#define GL_DRAW_BUFFER13_NV 0x8832
+#define GL_DRAW_BUFFER14_NV 0x8833
+#define GL_DRAW_BUFFER15_NV 0x8834
+#define GL_COLOR_ATTACHMENT0_NV 0x8CE0
+#define GL_COLOR_ATTACHMENT1_NV 0x8CE1
+#define GL_COLOR_ATTACHMENT2_NV 0x8CE2
+#define GL_COLOR_ATTACHMENT3_NV 0x8CE3
+#define GL_COLOR_ATTACHMENT4_NV 0x8CE4
+#define GL_COLOR_ATTACHMENT5_NV 0x8CE5
+#define GL_COLOR_ATTACHMENT6_NV 0x8CE6
+#define GL_COLOR_ATTACHMENT7_NV 0x8CE7
+#define GL_COLOR_ATTACHMENT8_NV 0x8CE8
+#define GL_COLOR_ATTACHMENT9_NV 0x8CE9
+#define GL_COLOR_ATTACHMENT10_NV 0x8CEA
+#define GL_COLOR_ATTACHMENT11_NV 0x8CEB
+#define GL_COLOR_ATTACHMENT12_NV 0x8CEC
+#define GL_COLOR_ATTACHMENT13_NV 0x8CED
+#define GL_COLOR_ATTACHMENT14_NV 0x8CEE
+#define GL_COLOR_ATTACHMENT15_NV 0x8CEF
+typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs);
+#endif
+#endif /* GL_NV_draw_buffers */
+
+#ifndef GL_NV_draw_instanced
+#define GL_NV_draw_instanced 1
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDNVPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDNVPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDrawArraysInstancedNV (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#endif
+#endif /* GL_NV_draw_instanced */
+
+#ifndef GL_NV_explicit_attrib_location
+#define GL_NV_explicit_attrib_location 1
+#endif /* GL_NV_explicit_attrib_location */
+
+#ifndef GL_NV_fbo_color_attachments
+#define GL_NV_fbo_color_attachments 1
+#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF
+#endif /* GL_NV_fbo_color_attachments */
+
+#ifndef GL_NV_fence
+#define GL_NV_fence 1
+#define GL_ALL_COMPLETED_NV 0x84F2
+#define GL_FENCE_STATUS_NV 0x84F3
+#define GL_FENCE_CONDITION_NV 0x84F4
+typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);
+typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);
+typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence);
+typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence);
+typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence);
+typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences);
+GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei n, GLuint *fences);
+GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint fence);
+GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint fence);
+GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint fence);
+GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint fence, GLenum condition);
+#endif
+#endif /* GL_NV_fence */
+
+#ifndef GL_NV_fill_rectangle
+#define GL_NV_fill_rectangle 1
+#define GL_FILL_RECTANGLE_NV 0x933C
+#endif /* GL_NV_fill_rectangle */
+
+#ifndef GL_NV_fragment_coverage_to_color
+#define GL_NV_fragment_coverage_to_color 1
+#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD
+#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE
+typedef void (GL_APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFragmentCoverageColorNV (GLuint color);
+#endif
+#endif /* GL_NV_fragment_coverage_to_color */
+
+#ifndef GL_NV_fragment_shader_interlock
+#define GL_NV_fragment_shader_interlock 1
+#endif /* GL_NV_fragment_shader_interlock */
+
+#ifndef GL_NV_framebuffer_blit
+#define GL_NV_framebuffer_blit 1
+#define GL_READ_FRAMEBUFFER_NV 0x8CA8
+#define GL_DRAW_FRAMEBUFFER_NV 0x8CA9
+#define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6
+#define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA
+typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBlitFramebufferNV (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif
+#endif /* GL_NV_framebuffer_blit */
+
+#ifndef GL_NV_framebuffer_mixed_samples
+#define GL_NV_framebuffer_mixed_samples 1
+#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331
+#define GL_COLOR_SAMPLES_NV 0x8E20
+#define GL_DEPTH_SAMPLES_NV 0x932D
+#define GL_STENCIL_SAMPLES_NV 0x932E
+#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F
+#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330
+#define GL_COVERAGE_MODULATION_NV 0x9332
+#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333
+typedef void (GL_APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufsize, GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glGetCoverageModulationTableNV (GLsizei bufsize, GLfloat *v);
+GL_APICALL void GL_APIENTRY glCoverageModulationNV (GLenum components);
+#endif
+#endif /* GL_NV_framebuffer_mixed_samples */
+
+#ifndef GL_NV_framebuffer_multisample
+#define GL_NV_framebuffer_multisample 1
+#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56
+#define GL_MAX_SAMPLES_NV 0x8D57
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleNV (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_NV_framebuffer_multisample */
+
+#ifndef GL_NV_generate_mipmap_sRGB
+#define GL_NV_generate_mipmap_sRGB 1
+#endif /* GL_NV_generate_mipmap_sRGB */
+
+#ifndef GL_NV_geometry_shader_passthrough
+#define GL_NV_geometry_shader_passthrough 1
+#endif /* GL_NV_geometry_shader_passthrough */
+
+#ifndef GL_NV_image_formats
+#define GL_NV_image_formats 1
+#endif /* GL_NV_image_formats */
+
+#ifndef GL_NV_instanced_arrays
+#define GL_NV_instanced_arrays 1
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORNVPROC) (GLuint index, GLuint divisor);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV (GLuint index, GLuint divisor);
+#endif
+#endif /* GL_NV_instanced_arrays */
+
+#ifndef GL_NV_internalformat_sample_query
+#define GL_NV_internalformat_sample_query 1
+#define GL_TEXTURE_2D_MULTISAMPLE 0x9100
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102
+#define GL_MULTISAMPLES_NV 0x9371
+#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372
+#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373
+#define GL_CONFORMANT_NV 0x9374
+typedef void (GL_APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params);
+#endif
+#endif /* GL_NV_internalformat_sample_query */
+
+#ifndef GL_NV_non_square_matrices
+#define GL_NV_non_square_matrices 1
+#define GL_FLOAT_MAT2x3_NV 0x8B65
+#define GL_FLOAT_MAT2x4_NV 0x8B66
+#define GL_FLOAT_MAT3x2_NV 0x8B67
+#define GL_FLOAT_MAT3x4_NV 0x8B68
+#define GL_FLOAT_MAT4x2_NV 0x8B69
+#define GL_FLOAT_MAT4x3_NV 0x8B6A
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X3FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X2FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X4FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X2FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X4FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X3FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glUniformMatrix2x3fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3x2fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix2x4fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4x2fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3x4fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4x3fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#endif
+#endif /* GL_NV_non_square_matrices */
+
+#ifndef GL_NV_path_rendering
+#define GL_NV_path_rendering 1
+#define GL_PATH_FORMAT_SVG_NV 0x9070
+#define GL_PATH_FORMAT_PS_NV 0x9071
+#define GL_STANDARD_FONT_NAME_NV 0x9072
+#define GL_SYSTEM_FONT_NAME_NV 0x9073
+#define GL_FILE_NAME_NV 0x9074
+#define GL_PATH_STROKE_WIDTH_NV 0x9075
+#define GL_PATH_END_CAPS_NV 0x9076
+#define GL_PATH_INITIAL_END_CAP_NV 0x9077
+#define GL_PATH_TERMINAL_END_CAP_NV 0x9078
+#define GL_PATH_JOIN_STYLE_NV 0x9079
+#define GL_PATH_MITER_LIMIT_NV 0x907A
+#define GL_PATH_DASH_CAPS_NV 0x907B
+#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C
+#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D
+#define GL_PATH_DASH_OFFSET_NV 0x907E
+#define GL_PATH_CLIENT_LENGTH_NV 0x907F
+#define GL_PATH_FILL_MODE_NV 0x9080
+#define GL_PATH_FILL_MASK_NV 0x9081
+#define GL_PATH_FILL_COVER_MODE_NV 0x9082
+#define GL_PATH_STROKE_COVER_MODE_NV 0x9083
+#define GL_PATH_STROKE_MASK_NV 0x9084
+#define GL_COUNT_UP_NV 0x9088
+#define GL_COUNT_DOWN_NV 0x9089
+#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A
+#define GL_CONVEX_HULL_NV 0x908B
+#define GL_BOUNDING_BOX_NV 0x908D
+#define GL_TRANSLATE_X_NV 0x908E
+#define GL_TRANSLATE_Y_NV 0x908F
+#define GL_TRANSLATE_2D_NV 0x9090
+#define GL_TRANSLATE_3D_NV 0x9091
+#define GL_AFFINE_2D_NV 0x9092
+#define GL_AFFINE_3D_NV 0x9094
+#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096
+#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098
+#define GL_UTF8_NV 0x909A
+#define GL_UTF16_NV 0x909B
+#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C
+#define GL_PATH_COMMAND_COUNT_NV 0x909D
+#define GL_PATH_COORD_COUNT_NV 0x909E
+#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F
+#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0
+#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1
+#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2
+#define GL_SQUARE_NV 0x90A3
+#define GL_ROUND_NV 0x90A4
+#define GL_TRIANGULAR_NV 0x90A5
+#define GL_BEVEL_NV 0x90A6
+#define GL_MITER_REVERT_NV 0x90A7
+#define GL_MITER_TRUNCATE_NV 0x90A8
+#define GL_SKIP_MISSING_GLYPH_NV 0x90A9
+#define GL_USE_MISSING_GLYPH_NV 0x90AA
+#define GL_PATH_ERROR_POSITION_NV 0x90AB
+#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD
+#define GL_ADJACENT_PAIRS_NV 0x90AE
+#define GL_FIRST_TO_REST_NV 0x90AF
+#define GL_PATH_GEN_MODE_NV 0x90B0
+#define GL_PATH_GEN_COEFF_NV 0x90B1
+#define GL_PATH_GEN_COMPONENTS_NV 0x90B3
+#define GL_PATH_STENCIL_FUNC_NV 0x90B7
+#define GL_PATH_STENCIL_REF_NV 0x90B8
+#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9
+#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD
+#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE
+#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF
+#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4
+#define GL_MOVE_TO_RESETS_NV 0x90B5
+#define GL_MOVE_TO_CONTINUES_NV 0x90B6
+#define GL_CLOSE_PATH_NV 0x00
+#define GL_MOVE_TO_NV 0x02
+#define GL_RELATIVE_MOVE_TO_NV 0x03
+#define GL_LINE_TO_NV 0x04
+#define GL_RELATIVE_LINE_TO_NV 0x05
+#define GL_HORIZONTAL_LINE_TO_NV 0x06
+#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07
+#define GL_VERTICAL_LINE_TO_NV 0x08
+#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09
+#define GL_QUADRATIC_CURVE_TO_NV 0x0A
+#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B
+#define GL_CUBIC_CURVE_TO_NV 0x0C
+#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D
+#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E
+#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F
+#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10
+#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11
+#define GL_SMALL_CCW_ARC_TO_NV 0x12
+#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13
+#define GL_SMALL_CW_ARC_TO_NV 0x14
+#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15
+#define GL_LARGE_CCW_ARC_TO_NV 0x16
+#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17
+#define GL_LARGE_CW_ARC_TO_NV 0x18
+#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19
+#define GL_RESTART_PATH_NV 0xF0
+#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2
+#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4
+#define GL_RECT_NV 0xF6
+#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8
+#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA
+#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC
+#define GL_ARC_TO_NV 0xFE
+#define GL_RELATIVE_ARC_TO_NV 0xFF
+#define GL_BOLD_BIT_NV 0x01
+#define GL_ITALIC_BIT_NV 0x02
+#define GL_GLYPH_WIDTH_BIT_NV 0x01
+#define GL_GLYPH_HEIGHT_BIT_NV 0x02
+#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04
+#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08
+#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10
+#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20
+#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40
+#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80
+#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100
+#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000
+#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000
+#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000
+#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000
+#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000
+#define GL_FONT_ASCENDER_BIT_NV 0x00200000
+#define GL_FONT_DESCENDER_BIT_NV 0x00400000
+#define GL_FONT_HEIGHT_BIT_NV 0x00800000
+#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000
+#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000
+#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000
+#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000
+#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000
+#define GL_ROUNDED_RECT_NV 0xE8
+#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9
+#define GL_ROUNDED_RECT2_NV 0xEA
+#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB
+#define GL_ROUNDED_RECT4_NV 0xEC
+#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED
+#define GL_ROUNDED_RECT8_NV 0xEE
+#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF
+#define GL_RELATIVE_RECT_NV 0xF7
+#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368
+#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369
+#define GL_FONT_UNAVAILABLE_NV 0x936A
+#define GL_FONT_UNINTELLIGIBLE_NV 0x936B
+#define GL_CONIC_CURVE_TO_NV 0x1A
+#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B
+#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000
+#define GL_STANDARD_FONT_FORMAT_NV 0x936C
+#define GL_PATH_PROJECTION_NV 0x1701
+#define GL_PATH_MODELVIEW_NV 0x1700
+#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3
+#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6
+#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36
+#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3
+#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4
+#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7
+#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38
+#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4
+#define GL_FRAGMENT_INPUT_NV 0x936D
+typedef GLuint (GL_APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range);
+typedef void (GL_APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range);
+typedef GLboolean (GL_APIENTRYP PFNGLISPATHNVPROC) (GLuint path);
+typedef void (GL_APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (GL_APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (GL_APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (GL_APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (GL_APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString);
+typedef void (GL_APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (GL_APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (GL_APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+typedef void (GL_APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath);
+typedef void (GL_APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+typedef void (GL_APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+typedef void (GL_APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value);
+typedef void (GL_APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value);
+typedef void (GL_APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+typedef void (GL_APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units);
+typedef void (GL_APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (GL_APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (GL_APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func);
+typedef void (GL_APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (GL_APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (GL_APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (GL_APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (GL_APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value);
+typedef void (GL_APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands);
+typedef void (GL_APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords);
+typedef void (GL_APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray);
+typedef void (GL_APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+typedef void (GL_APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+typedef void (GL_APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+typedef GLboolean (GL_APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+typedef GLboolean (GL_APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y);
+typedef GLfloat (GL_APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments);
+typedef GLboolean (GL_APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+typedef void (GL_APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef GLenum (GL_APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]);
+typedef GLenum (GL_APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef GLenum (GL_APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (GL_APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL GLuint GL_APIENTRY glGenPathsNV (GLsizei range);
+GL_APICALL void GL_APIENTRY glDeletePathsNV (GLuint path, GLsizei range);
+GL_APICALL GLboolean GL_APIENTRY glIsPathNV (GLuint path);
+GL_APICALL void GL_APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+GL_APICALL void GL_APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords);
+GL_APICALL void GL_APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+GL_APICALL void GL_APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords);
+GL_APICALL void GL_APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString);
+GL_APICALL void GL_APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GL_APICALL void GL_APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GL_APICALL void GL_APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+GL_APICALL void GL_APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath);
+GL_APICALL void GL_APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+GL_APICALL void GL_APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value);
+GL_APICALL void GL_APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value);
+GL_APICALL void GL_APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value);
+GL_APICALL void GL_APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+GL_APICALL void GL_APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units);
+GL_APICALL void GL_APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glPathCoverDepthFuncNV (GLenum func);
+GL_APICALL void GL_APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value);
+GL_APICALL void GL_APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value);
+GL_APICALL void GL_APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands);
+GL_APICALL void GL_APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords);
+GL_APICALL void GL_APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray);
+GL_APICALL void GL_APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+GL_APICALL void GL_APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+GL_APICALL void GL_APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+GL_APICALL GLboolean GL_APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+GL_APICALL GLboolean GL_APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y);
+GL_APICALL GLfloat GL_APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments);
+GL_APICALL GLboolean GL_APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+GL_APICALL void GL_APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL GLenum GL_APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]);
+GL_APICALL GLenum GL_APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GL_APICALL GLenum GL_APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GL_APICALL void GL_APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs);
+GL_APICALL void GL_APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params);
+#endif
+#endif /* GL_NV_path_rendering */
+
+#ifndef GL_NV_path_rendering_shared_edge
+#define GL_NV_path_rendering_shared_edge 1
+#define GL_SHARED_EDGE_NV 0xC0
+#endif /* GL_NV_path_rendering_shared_edge */
+
+#ifndef GL_NV_polygon_mode
+#define GL_NV_polygon_mode 1
+#define GL_POLYGON_MODE_NV 0x0B40
+#define GL_POLYGON_OFFSET_POINT_NV 0x2A01
+#define GL_POLYGON_OFFSET_LINE_NV 0x2A02
+#define GL_POINT_NV 0x1B00
+#define GL_LINE_NV 0x1B01
+#define GL_FILL_NV 0x1B02
+typedef void (GL_APIENTRYP PFNGLPOLYGONMODENVPROC) (GLenum face, GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glPolygonModeNV (GLenum face, GLenum mode);
+#endif
+#endif /* GL_NV_polygon_mode */
+
+#ifndef GL_NV_read_buffer
+#define GL_NV_read_buffer 1
+#define GL_READ_BUFFER_NV 0x0C02
+typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode);
+#endif
+#endif /* GL_NV_read_buffer */
+
+#ifndef GL_NV_read_buffer_front
+#define GL_NV_read_buffer_front 1
+#endif /* GL_NV_read_buffer_front */
+
+#ifndef GL_NV_read_depth
+#define GL_NV_read_depth 1
+#endif /* GL_NV_read_depth */
+
+#ifndef GL_NV_read_depth_stencil
+#define GL_NV_read_depth_stencil 1
+#endif /* GL_NV_read_depth_stencil */
+
+#ifndef GL_NV_read_stencil
+#define GL_NV_read_stencil 1
+#endif /* GL_NV_read_stencil */
+
+#ifndef GL_NV_sRGB_formats
+#define GL_NV_sRGB_formats 1
+#define GL_SLUMINANCE_NV 0x8C46
+#define GL_SLUMINANCE_ALPHA_NV 0x8C44
+#define GL_SRGB8_NV 0x8C41
+#define GL_SLUMINANCE8_NV 0x8C47
+#define GL_SLUMINANCE8_ALPHA8_NV 0x8C45
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F
+#define GL_ETC1_SRGB8_NV 0x88EE
+#endif /* GL_NV_sRGB_formats */
+
+#ifndef GL_NV_sample_locations
+#define GL_NV_sample_locations 1
+#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D
+#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E
+#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F
+#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340
+#define GL_SAMPLE_LOCATION_NV 0x8E50
+#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341
+#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342
+#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glResolveDepthValuesNV (void);
+#endif
+#endif /* GL_NV_sample_locations */
+
+#ifndef GL_NV_sample_mask_override_coverage
+#define GL_NV_sample_mask_override_coverage 1
+#endif /* GL_NV_sample_mask_override_coverage */
+
+#ifndef GL_NV_shader_noperspective_interpolation
+#define GL_NV_shader_noperspective_interpolation 1
+#endif /* GL_NV_shader_noperspective_interpolation */
+
+#ifndef GL_NV_shadow_samplers_array
+#define GL_NV_shadow_samplers_array 1
+#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4
+#endif /* GL_NV_shadow_samplers_array */
+
+#ifndef GL_NV_shadow_samplers_cube
+#define GL_NV_shadow_samplers_cube 1
+#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5
+#endif /* GL_NV_shadow_samplers_cube */
+
+#ifndef GL_NV_texture_border_clamp
+#define GL_NV_texture_border_clamp 1
+#define GL_TEXTURE_BORDER_COLOR_NV 0x1004
+#define GL_CLAMP_TO_BORDER_NV 0x812D
+#endif /* GL_NV_texture_border_clamp */
+
+#ifndef GL_NV_texture_compression_s3tc_update
+#define GL_NV_texture_compression_s3tc_update 1
+#endif /* GL_NV_texture_compression_s3tc_update */
+
+#ifndef GL_NV_texture_npot_2D_mipmap
+#define GL_NV_texture_npot_2D_mipmap 1
+#endif /* GL_NV_texture_npot_2D_mipmap */
+
+#ifndef GL_NV_viewport_array
+#define GL_NV_viewport_array 1
+#define GL_MAX_VIEWPORTS_NV 0x825B
+#define GL_VIEWPORT_SUBPIXEL_BITS_NV 0x825C
+#define GL_VIEWPORT_BOUNDS_RANGE_NV 0x825D
+#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV 0x825F
+typedef void (GL_APIENTRYP PFNGLVIEWPORTARRAYVNVPROC) (GLuint first, GLsizei count, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLSCISSORARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v);
+typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDNVPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDVNVPROC) (GLuint index, const GLint *v);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEARRAYFVNVPROC) (GLuint first, GLsizei count, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEINDEXEDFNVPROC) (GLuint index, GLfloat n, GLfloat f);
+typedef void (GL_APIENTRYP PFNGLGETFLOATI_VNVPROC) (GLenum target, GLuint index, GLfloat *data);
+typedef void (GL_APIENTRYP PFNGLENABLEINVPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLDISABLEINVPROC) (GLenum target, GLuint index);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDINVPROC) (GLenum target, GLuint index);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glViewportArrayvNV (GLuint first, GLsizei count, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glViewportIndexedfNV (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+GL_APICALL void GL_APIENTRY glViewportIndexedfvNV (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glScissorArrayvNV (GLuint first, GLsizei count, const GLint *v);
+GL_APICALL void GL_APIENTRY glScissorIndexedNV (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glScissorIndexedvNV (GLuint index, const GLint *v);
+GL_APICALL void GL_APIENTRY glDepthRangeArrayfvNV (GLuint first, GLsizei count, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glDepthRangeIndexedfNV (GLuint index, GLfloat n, GLfloat f);
+GL_APICALL void GL_APIENTRY glGetFloati_vNV (GLenum target, GLuint index, GLfloat *data);
+GL_APICALL void GL_APIENTRY glEnableiNV (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glDisableiNV (GLenum target, GLuint index);
+GL_APICALL GLboolean GL_APIENTRY glIsEnablediNV (GLenum target, GLuint index);
+#endif
+#endif /* GL_NV_viewport_array */
+
+#ifndef GL_NV_viewport_array2
+#define GL_NV_viewport_array2 1
+#endif /* GL_NV_viewport_array2 */
+
+#ifndef GL_OVR_multiview
+#define GL_OVR_multiview 1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632
+#define GL_MAX_VIEWS_OVR 0x9631
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
+#endif
+#endif /* GL_OVR_multiview */
+
+#ifndef GL_OVR_multiview2
+#define GL_OVR_multiview2 1
+#endif /* GL_OVR_multiview2 */
+
+#ifndef GL_OVR_multiview_multisampled_render_to_texture
+#define GL_OVR_multiview_multisampled_render_to_texture 1
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glFramebufferTextureMultisampleMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews);
+#endif
+#endif /* GL_OVR_multiview_multisampled_render_to_texture */
+
+#ifndef GL_QCOM_alpha_test
+#define GL_QCOM_alpha_test 1
+#define GL_ALPHA_TEST_QCOM 0x0BC0
+#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1
+#define GL_ALPHA_TEST_REF_QCOM 0x0BC2
+typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref);
+#endif
+#endif /* GL_QCOM_alpha_test */
+
+#ifndef GL_QCOM_binning_control
+#define GL_QCOM_binning_control 1
+#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0
+#define GL_CPU_OPTIMIZED_QCOM 0x8FB1
+#define GL_GPU_OPTIMIZED_QCOM 0x8FB2
+#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3
+#endif /* GL_QCOM_binning_control */
+
+#ifndef GL_QCOM_driver_control
+#define GL_QCOM_driver_control 1
+typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls);
+typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString);
+typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl);
+typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls);
+GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString);
+GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl);
+GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl);
+#endif
+#endif /* GL_QCOM_driver_control */
+
+#ifndef GL_QCOM_extended_get
+#define GL_QCOM_extended_get 1
+#define GL_TEXTURE_WIDTH_QCOM 0x8BD2
+#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3
+#define GL_TEXTURE_DEPTH_QCOM 0x8BD4
+#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5
+#define GL_TEXTURE_FORMAT_QCOM 0x8BD6
+#define GL_TEXTURE_TYPE_QCOM 0x8BD7
+#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8
+#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9
+#define GL_TEXTURE_TARGET_QCOM 0x8BDA
+#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB
+#define GL_STATE_RESTORE 0x8BDC
+typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures);
+typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers);
+typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers);
+typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers);
+typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels);
+typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, void **params);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures);
+GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers);
+GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers);
+GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers);
+GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels);
+GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, void **params);
+#endif
+#endif /* GL_QCOM_extended_get */
+
+#ifndef GL_QCOM_extended_get2
+#define GL_QCOM_extended_get2 1
+typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders);
+typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms);
+typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders);
+GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms);
+GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program);
+GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length);
+#endif
+#endif /* GL_QCOM_extended_get2 */
+
+#ifndef GL_QCOM_perfmon_global_mode
+#define GL_QCOM_perfmon_global_mode 1
+#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0
+#endif /* GL_QCOM_perfmon_global_mode */
+
+#ifndef GL_QCOM_tiled_rendering
+#define GL_QCOM_tiled_rendering 1
+#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001
+#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002
+#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004
+#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008
+#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010
+#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020
+#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040
+#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080
+#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100
+#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200
+#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400
+#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800
+#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000
+#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000
+#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000
+#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000
+#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000
+#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000
+#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000
+#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000
+#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000
+#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000
+#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000
+#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000
+#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000
+#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000
+#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000
+#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000
+#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000
+#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000
+#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000
+#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000
+typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);
+typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask);
+#ifdef GL_GLEXT_PROTOTYPES
+GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);
+GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask);
+#endif
+#endif /* GL_QCOM_tiled_rendering */
+
+#ifndef GL_QCOM_writeonly_rendering
+#define GL_QCOM_writeonly_rendering 1
+#define GL_WRITEONLY_RENDERING_QCOM 0x8823
+#endif /* GL_QCOM_writeonly_rendering */
+
+#ifndef GL_VIV_shader_binary
+#define GL_VIV_shader_binary 1
+#define GL_SHADER_BINARY_VIV 0x8FC4
+#endif /* GL_VIV_shader_binary */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES2/gl2platform.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES2/gl2platform.h
new file mode 100644
index 00000000..89d4d44d
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES2/gl2platform.h
@@ -0,0 +1,30 @@
+#ifndef __gl2platform_h_
+#define __gl2platform_h_
+
+/* $Revision: 23328 $ on $Date:: 2013-10-02 02:28:28 -0700 #$ */
+
+/*
+ * This document is licensed under the SGI Free Software B License Version
+ * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
+ */
+
+/* Platform-specific types and definitions for OpenGL ES 2.X gl2.h
+ *
+ * Adopters may modify khrplatform.h and this file to suit their platform.
+ * You are encouraged to submit all modifications to the Khronos group so that
+ * they can be included in future versions of this file. Please submit changes
+ * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla)
+ * by filing a bug against product "OpenGL-ES" component "Registry".
+ */
+
+#include <KHR/khrplatform.h>
+
+#ifndef GL_APICALL
+#define GL_APICALL KHRONOS_APICALL
+#endif
+
+#ifndef GL_APIENTRY
+#define GL_APIENTRY KHRONOS_APIENTRY
+#endif
+
+#endif /* __gl2platform_h_ */
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl3.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl3.h
new file mode 100644
index 00000000..d51d2e65
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl3.h
@@ -0,0 +1,1213 @@
+#ifndef __gl3_h_
+#define __gl3_h_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2013-2015 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+/*
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+** http://www.opengl.org/registry/
+**
+** Khronos $Revision: 32120 $ on $Date: 2015-10-15 04:27:13 -0700 (Thu, 15 Oct 2015) $
+*/
+
+#include <GLES3/gl3platform.h>
+
+#ifndef GL_APIENTRYP
+#define GL_APIENTRYP GL_APIENTRY*
+#endif
+
+#if !defined(GL_GLES_PROTOTYPES)
+#define GL_GLES_PROTOTYPES 1
+#endif
+
+/* Generated on date 20151015 */
+
+/* Generated C header for:
+ * API: gles2
+ * Profile: common
+ * Versions considered: 2\.[0-9]|3\.0
+ * Versions emitted: .*
+ * Default extensions included: None
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
+
+#ifndef GL_ES_VERSION_2_0
+#define GL_ES_VERSION_2_0 1
+#include <KHR/khrplatform.h>
+typedef khronos_int8_t GLbyte;
+typedef khronos_float_t GLclampf;
+typedef khronos_int32_t GLfixed;
+typedef short GLshort;
+typedef unsigned short GLushort;
+typedef void GLvoid;
+typedef struct __GLsync *GLsync;
+typedef khronos_int64_t GLint64;
+typedef khronos_uint64_t GLuint64;
+typedef unsigned int GLenum;
+typedef unsigned int GLuint;
+typedef char GLchar;
+typedef khronos_float_t GLfloat;
+typedef khronos_ssize_t GLsizeiptr;
+typedef khronos_intptr_t GLintptr;
+typedef unsigned int GLbitfield;
+typedef int GLint;
+typedef unsigned char GLboolean;
+typedef int GLsizei;
+typedef khronos_uint8_t GLubyte;
+#define GL_DEPTH_BUFFER_BIT 0x00000100
+#define GL_STENCIL_BUFFER_BIT 0x00000400
+#define GL_COLOR_BUFFER_BIT 0x00004000
+#define GL_FALSE 0
+#define GL_TRUE 1
+#define GL_POINTS 0x0000
+#define GL_LINES 0x0001
+#define GL_LINE_LOOP 0x0002
+#define GL_LINE_STRIP 0x0003
+#define GL_TRIANGLES 0x0004
+#define GL_TRIANGLE_STRIP 0x0005
+#define GL_TRIANGLE_FAN 0x0006
+#define GL_ZERO 0
+#define GL_ONE 1
+#define GL_SRC_COLOR 0x0300
+#define GL_ONE_MINUS_SRC_COLOR 0x0301
+#define GL_SRC_ALPHA 0x0302
+#define GL_ONE_MINUS_SRC_ALPHA 0x0303
+#define GL_DST_ALPHA 0x0304
+#define GL_ONE_MINUS_DST_ALPHA 0x0305
+#define GL_DST_COLOR 0x0306
+#define GL_ONE_MINUS_DST_COLOR 0x0307
+#define GL_SRC_ALPHA_SATURATE 0x0308
+#define GL_FUNC_ADD 0x8006
+#define GL_BLEND_EQUATION 0x8009
+#define GL_BLEND_EQUATION_RGB 0x8009
+#define GL_BLEND_EQUATION_ALPHA 0x883D
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_BLEND_DST_RGB 0x80C8
+#define GL_BLEND_SRC_RGB 0x80C9
+#define GL_BLEND_DST_ALPHA 0x80CA
+#define GL_BLEND_SRC_ALPHA 0x80CB
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_BLEND_COLOR 0x8005
+#define GL_ARRAY_BUFFER 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER 0x8893
+#define GL_ARRAY_BUFFER_BINDING 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
+#define GL_STREAM_DRAW 0x88E0
+#define GL_STATIC_DRAW 0x88E4
+#define GL_DYNAMIC_DRAW 0x88E8
+#define GL_BUFFER_SIZE 0x8764
+#define GL_BUFFER_USAGE 0x8765
+#define GL_CURRENT_VERTEX_ATTRIB 0x8626
+#define GL_FRONT 0x0404
+#define GL_BACK 0x0405
+#define GL_FRONT_AND_BACK 0x0408
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_CULL_FACE 0x0B44
+#define GL_BLEND 0x0BE2
+#define GL_DITHER 0x0BD0
+#define GL_STENCIL_TEST 0x0B90
+#define GL_DEPTH_TEST 0x0B71
+#define GL_SCISSOR_TEST 0x0C11
+#define GL_POLYGON_OFFSET_FILL 0x8037
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_NO_ERROR 0
+#define GL_INVALID_ENUM 0x0500
+#define GL_INVALID_VALUE 0x0501
+#define GL_INVALID_OPERATION 0x0502
+#define GL_OUT_OF_MEMORY 0x0505
+#define GL_CW 0x0900
+#define GL_CCW 0x0901
+#define GL_LINE_WIDTH 0x0B21
+#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+#define GL_CULL_FACE_MODE 0x0B45
+#define GL_FRONT_FACE 0x0B46
+#define GL_DEPTH_RANGE 0x0B70
+#define GL_DEPTH_WRITEMASK 0x0B72
+#define GL_DEPTH_CLEAR_VALUE 0x0B73
+#define GL_DEPTH_FUNC 0x0B74
+#define GL_STENCIL_CLEAR_VALUE 0x0B91
+#define GL_STENCIL_FUNC 0x0B92
+#define GL_STENCIL_FAIL 0x0B94
+#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
+#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
+#define GL_STENCIL_REF 0x0B97
+#define GL_STENCIL_VALUE_MASK 0x0B93
+#define GL_STENCIL_WRITEMASK 0x0B98
+#define GL_STENCIL_BACK_FUNC 0x8800
+#define GL_STENCIL_BACK_FAIL 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
+#define GL_STENCIL_BACK_REF 0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
+#define GL_VIEWPORT 0x0BA2
+#define GL_SCISSOR_BOX 0x0C10
+#define GL_COLOR_CLEAR_VALUE 0x0C22
+#define GL_COLOR_WRITEMASK 0x0C23
+#define GL_UNPACK_ALIGNMENT 0x0CF5
+#define GL_PACK_ALIGNMENT 0x0D05
+#define GL_MAX_TEXTURE_SIZE 0x0D33
+#define GL_MAX_VIEWPORT_DIMS 0x0D3A
+#define GL_SUBPIXEL_BITS 0x0D50
+#define GL_RED_BITS 0x0D52
+#define GL_GREEN_BITS 0x0D53
+#define GL_BLUE_BITS 0x0D54
+#define GL_ALPHA_BITS 0x0D55
+#define GL_DEPTH_BITS 0x0D56
+#define GL_STENCIL_BITS 0x0D57
+#define GL_POLYGON_OFFSET_UNITS 0x2A00
+#define GL_POLYGON_OFFSET_FACTOR 0x8038
+#define GL_TEXTURE_BINDING_2D 0x8069
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+#define GL_DONT_CARE 0x1100
+#define GL_FASTEST 0x1101
+#define GL_NICEST 0x1102
+#define GL_GENERATE_MIPMAP_HINT 0x8192
+#define GL_BYTE 0x1400
+#define GL_UNSIGNED_BYTE 0x1401
+#define GL_SHORT 0x1402
+#define GL_UNSIGNED_SHORT 0x1403
+#define GL_INT 0x1404
+#define GL_UNSIGNED_INT 0x1405
+#define GL_FLOAT 0x1406
+#define GL_FIXED 0x140C
+#define GL_DEPTH_COMPONENT 0x1902
+#define GL_ALPHA 0x1906
+#define GL_RGB 0x1907
+#define GL_RGBA 0x1908
+#define GL_LUMINANCE 0x1909
+#define GL_LUMINANCE_ALPHA 0x190A
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_FRAGMENT_SHADER 0x8B30
+#define GL_VERTEX_SHADER 0x8B31
+#define GL_MAX_VERTEX_ATTRIBS 0x8869
+#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
+#define GL_MAX_VARYING_VECTORS 0x8DFC
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
+#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
+#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD
+#define GL_SHADER_TYPE 0x8B4F
+#define GL_DELETE_STATUS 0x8B80
+#define GL_LINK_STATUS 0x8B82
+#define GL_VALIDATE_STATUS 0x8B83
+#define GL_ATTACHED_SHADERS 0x8B85
+#define GL_ACTIVE_UNIFORMS 0x8B86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
+#define GL_ACTIVE_ATTRIBUTES 0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
+#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
+#define GL_CURRENT_PROGRAM 0x8B8D
+#define GL_NEVER 0x0200
+#define GL_LESS 0x0201
+#define GL_EQUAL 0x0202
+#define GL_LEQUAL 0x0203
+#define GL_GREATER 0x0204
+#define GL_NOTEQUAL 0x0205
+#define GL_GEQUAL 0x0206
+#define GL_ALWAYS 0x0207
+#define GL_KEEP 0x1E00
+#define GL_REPLACE 0x1E01
+#define GL_INCR 0x1E02
+#define GL_DECR 0x1E03
+#define GL_INVERT 0x150A
+#define GL_INCR_WRAP 0x8507
+#define GL_DECR_WRAP 0x8508
+#define GL_VENDOR 0x1F00
+#define GL_RENDERER 0x1F01
+#define GL_VERSION 0x1F02
+#define GL_EXTENSIONS 0x1F03
+#define GL_NEAREST 0x2600
+#define GL_LINEAR 0x2601
+#define GL_NEAREST_MIPMAP_NEAREST 0x2700
+#define GL_LINEAR_MIPMAP_NEAREST 0x2701
+#define GL_NEAREST_MIPMAP_LINEAR 0x2702
+#define GL_LINEAR_MIPMAP_LINEAR 0x2703
+#define GL_TEXTURE_MAG_FILTER 0x2800
+#define GL_TEXTURE_MIN_FILTER 0x2801
+#define GL_TEXTURE_WRAP_S 0x2802
+#define GL_TEXTURE_WRAP_T 0x2803
+#define GL_TEXTURE 0x1702
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_REPEAT 0x2901
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_MIRRORED_REPEAT 0x8370
+#define GL_FLOAT_VEC2 0x8B50
+#define GL_FLOAT_VEC3 0x8B51
+#define GL_FLOAT_VEC4 0x8B52
+#define GL_INT_VEC2 0x8B53
+#define GL_INT_VEC3 0x8B54
+#define GL_INT_VEC4 0x8B55
+#define GL_BOOL 0x8B56
+#define GL_BOOL_VEC2 0x8B57
+#define GL_BOOL_VEC3 0x8B58
+#define GL_BOOL_VEC4 0x8B59
+#define GL_FLOAT_MAT2 0x8B5A
+#define GL_FLOAT_MAT3 0x8B5B
+#define GL_FLOAT_MAT4 0x8B5C
+#define GL_SAMPLER_2D 0x8B5E
+#define GL_SAMPLER_CUBE 0x8B60
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
+#define GL_COMPILE_STATUS 0x8B81
+#define GL_INFO_LOG_LENGTH 0x8B84
+#define GL_SHADER_SOURCE_LENGTH 0x8B88
+#define GL_SHADER_COMPILER 0x8DFA
+#define GL_SHADER_BINARY_FORMATS 0x8DF8
+#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9
+#define GL_LOW_FLOAT 0x8DF0
+#define GL_MEDIUM_FLOAT 0x8DF1
+#define GL_HIGH_FLOAT 0x8DF2
+#define GL_LOW_INT 0x8DF3
+#define GL_MEDIUM_INT 0x8DF4
+#define GL_HIGH_INT 0x8DF5
+#define GL_FRAMEBUFFER 0x8D40
+#define GL_RENDERBUFFER 0x8D41
+#define GL_RGBA4 0x8056
+#define GL_RGB5_A1 0x8057
+#define GL_RGB565 0x8D62
+#define GL_DEPTH_COMPONENT16 0x81A5
+#define GL_STENCIL_INDEX8 0x8D48
+#define GL_RENDERBUFFER_WIDTH 0x8D42
+#define GL_RENDERBUFFER_HEIGHT 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44
+#define GL_RENDERBUFFER_RED_SIZE 0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
+#define GL_COLOR_ATTACHMENT0 0x8CE0
+#define GL_DEPTH_ATTACHMENT 0x8D00
+#define GL_STENCIL_ATTACHMENT 0x8D20
+#define GL_NONE 0
+#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9
+#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
+#define GL_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_RENDERBUFFER_BINDING 0x8CA7
+#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
+#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+typedef void (GL_APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (GL_APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
+typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
+typedef void (GL_APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (GL_APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (GL_APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
+typedef void (GL_APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);
+typedef void (GL_APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+typedef void (GL_APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef GLuint (GL_APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (GL_APIENTRYP PFNGLCULLFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func);
+typedef void (GL_APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f);
+typedef void (GL_APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLENABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLFINISHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFLUSHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GL_APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+typedef GLint (GL_APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLenum (GL_APIENTRYP PFNGLGETERRORPROC) (void);
+typedef void (GL_APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+typedef void (GL_APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer);
+typedef void (GL_APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode);
+typedef GLboolean (GL_APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDPROC) (GLenum cap);
+typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
+typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture);
+typedef void (GL_APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width);
+typedef void (GL_APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units);
+typedef void (GL_APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+typedef void (GL_APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
+typedef void (GL_APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture);
+GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader);
+GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
+GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer);
+GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);
+GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);
+GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture);
+GL_APICALL void GL_APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GL_APICALL void GL_APIENTRY glBlendEquation (GLenum mode);
+GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
+GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
+GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target);
+GL_APICALL void GL_APIENTRY glClear (GLbitfield mask);
+GL_APICALL void GL_APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GL_APICALL void GL_APIENTRY glClearDepthf (GLfloat d);
+GL_APICALL void GL_APIENTRY glClearStencil (GLint s);
+GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader);
+GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL GLuint GL_APIENTRY glCreateProgram (void);
+GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type);
+GL_APICALL void GL_APIENTRY glCullFace (GLenum mode);
+GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);
+GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers);
+GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers);
+GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader);
+GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures);
+GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func);
+GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag);
+GL_APICALL void GL_APIENTRY glDepthRangef (GLfloat n, GLfloat f);
+GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader);
+GL_APICALL void GL_APIENTRY glDisable (GLenum cap);
+GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index);
+GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count);
+GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices);
+GL_APICALL void GL_APIENTRY glEnable (GLenum cap);
+GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index);
+GL_APICALL void GL_APIENTRY glFinish (void);
+GL_APICALL void GL_APIENTRY glFlush (void);
+GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode);
+GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
+GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target);
+GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers);
+GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers);
+GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint *textures);
+GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean *data);
+GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL GLenum GL_APIENTRY glGetError (void);
+GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat *data);
+GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint *data);
+GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+GL_APICALL const GLubyte *GL_APIENTRY glGetString (GLenum name);
+GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params);
+GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer);
+GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode);
+GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer);
+GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap);
+GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer);
+GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program);
+GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer);
+GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader);
+GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture);
+GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width);
+GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units);
+GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void);
+GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glSampleCoverage (GLfloat value, GLboolean invert);
+GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
+GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
+GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
+GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat v0);
+GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint v0);
+GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1);
+GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint v0, GLint v1);
+GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2);
+GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUseProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint index, GLfloat x);
+GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y);
+GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_ES_VERSION_2_0 */
+
+#ifndef GL_ES_VERSION_3_0
+#define GL_ES_VERSION_3_0 1
+typedef unsigned short GLhalf;
+#define GL_READ_BUFFER 0x0C02
+#define GL_UNPACK_ROW_LENGTH 0x0CF2
+#define GL_UNPACK_SKIP_ROWS 0x0CF3
+#define GL_UNPACK_SKIP_PIXELS 0x0CF4
+#define GL_PACK_ROW_LENGTH 0x0D02
+#define GL_PACK_SKIP_ROWS 0x0D03
+#define GL_PACK_SKIP_PIXELS 0x0D04
+#define GL_COLOR 0x1800
+#define GL_DEPTH 0x1801
+#define GL_STENCIL 0x1802
+#define GL_RED 0x1903
+#define GL_RGB8 0x8051
+#define GL_RGBA8 0x8058
+#define GL_RGB10_A2 0x8059
+#define GL_TEXTURE_BINDING_3D 0x806A
+#define GL_UNPACK_SKIP_IMAGES 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT 0x806E
+#define GL_TEXTURE_3D 0x806F
+#define GL_TEXTURE_WRAP_R 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE 0x8073
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+#define GL_TEXTURE_MIN_LOD 0x813A
+#define GL_TEXTURE_MAX_LOD 0x813B
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+#define GL_DEPTH_COMPONENT24 0x81A6
+#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
+#define GL_TEXTURE_COMPARE_MODE 0x884C
+#define GL_TEXTURE_COMPARE_FUNC 0x884D
+#define GL_CURRENT_QUERY 0x8865
+#define GL_QUERY_RESULT 0x8866
+#define GL_QUERY_RESULT_AVAILABLE 0x8867
+#define GL_BUFFER_MAPPED 0x88BC
+#define GL_BUFFER_MAP_POINTER 0x88BD
+#define GL_STREAM_READ 0x88E1
+#define GL_STREAM_COPY 0x88E2
+#define GL_STATIC_READ 0x88E5
+#define GL_STATIC_COPY 0x88E6
+#define GL_DYNAMIC_READ 0x88E9
+#define GL_DYNAMIC_COPY 0x88EA
+#define GL_MAX_DRAW_BUFFERS 0x8824
+#define GL_DRAW_BUFFER0 0x8825
+#define GL_DRAW_BUFFER1 0x8826
+#define GL_DRAW_BUFFER2 0x8827
+#define GL_DRAW_BUFFER3 0x8828
+#define GL_DRAW_BUFFER4 0x8829
+#define GL_DRAW_BUFFER5 0x882A
+#define GL_DRAW_BUFFER6 0x882B
+#define GL_DRAW_BUFFER7 0x882C
+#define GL_DRAW_BUFFER8 0x882D
+#define GL_DRAW_BUFFER9 0x882E
+#define GL_DRAW_BUFFER10 0x882F
+#define GL_DRAW_BUFFER11 0x8830
+#define GL_DRAW_BUFFER12 0x8831
+#define GL_DRAW_BUFFER13 0x8832
+#define GL_DRAW_BUFFER14 0x8833
+#define GL_DRAW_BUFFER15 0x8834
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
+#define GL_SAMPLER_3D 0x8B5F
+#define GL_SAMPLER_2D_SHADOW 0x8B62
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
+#define GL_PIXEL_PACK_BUFFER 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
+#define GL_FLOAT_MAT2x3 0x8B65
+#define GL_FLOAT_MAT2x4 0x8B66
+#define GL_FLOAT_MAT3x2 0x8B67
+#define GL_FLOAT_MAT3x4 0x8B68
+#define GL_FLOAT_MAT4x2 0x8B69
+#define GL_FLOAT_MAT4x3 0x8B6A
+#define GL_SRGB 0x8C40
+#define GL_SRGB8 0x8C41
+#define GL_SRGB8_ALPHA8 0x8C43
+#define GL_COMPARE_REF_TO_TEXTURE 0x884E
+#define GL_MAJOR_VERSION 0x821B
+#define GL_MINOR_VERSION 0x821C
+#define GL_NUM_EXTENSIONS 0x821D
+#define GL_RGBA32F 0x8814
+#define GL_RGB32F 0x8815
+#define GL_RGBA16F 0x881A
+#define GL_RGB16F 0x881B
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD
+#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF
+#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905
+#define GL_MAX_VARYING_COMPONENTS 0x8B4B
+#define GL_TEXTURE_2D_ARRAY 0x8C1A
+#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D
+#define GL_R11F_G11F_B10F 0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B
+#define GL_RGB9_E5 0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88
+#define GL_RASTERIZER_DISCARD 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS 0x8C8C
+#define GL_SEPARATE_ATTRIBS 0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F
+#define GL_RGBA32UI 0x8D70
+#define GL_RGB32UI 0x8D71
+#define GL_RGBA16UI 0x8D76
+#define GL_RGB16UI 0x8D77
+#define GL_RGBA8UI 0x8D7C
+#define GL_RGB8UI 0x8D7D
+#define GL_RGBA32I 0x8D82
+#define GL_RGB32I 0x8D83
+#define GL_RGBA16I 0x8D88
+#define GL_RGB16I 0x8D89
+#define GL_RGBA8I 0x8D8E
+#define GL_RGB8I 0x8D8F
+#define GL_RED_INTEGER 0x8D94
+#define GL_RGB_INTEGER 0x8D98
+#define GL_RGBA_INTEGER 0x8D99
+#define GL_SAMPLER_2D_ARRAY 0x8DC1
+#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW 0x8DC5
+#define GL_UNSIGNED_INT_VEC2 0x8DC6
+#define GL_UNSIGNED_INT_VEC3 0x8DC7
+#define GL_UNSIGNED_INT_VEC4 0x8DC8
+#define GL_INT_SAMPLER_2D 0x8DCA
+#define GL_INT_SAMPLER_3D 0x8DCB
+#define GL_INT_SAMPLER_CUBE 0x8DCC
+#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF
+#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7
+#define GL_BUFFER_ACCESS_FLAGS 0x911F
+#define GL_BUFFER_MAP_LENGTH 0x9120
+#define GL_BUFFER_MAP_OFFSET 0x9121
+#define GL_DEPTH_COMPONENT32F 0x8CAC
+#define GL_DEPTH32F_STENCIL8 0x8CAD
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
+#define GL_FRAMEBUFFER_DEFAULT 0x8218
+#define GL_FRAMEBUFFER_UNDEFINED 0x8219
+#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A
+#define GL_DEPTH_STENCIL 0x84F9
+#define GL_UNSIGNED_INT_24_8 0x84FA
+#define GL_DEPTH24_STENCIL8 0x88F0
+#define GL_UNSIGNED_NORMALIZED 0x8C17
+#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_READ_FRAMEBUFFER 0x8CA8
+#define GL_DRAW_FRAMEBUFFER 0x8CA9
+#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA
+#define GL_RENDERBUFFER_SAMPLES 0x8CAB
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
+#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF
+#define GL_COLOR_ATTACHMENT1 0x8CE1
+#define GL_COLOR_ATTACHMENT2 0x8CE2
+#define GL_COLOR_ATTACHMENT3 0x8CE3
+#define GL_COLOR_ATTACHMENT4 0x8CE4
+#define GL_COLOR_ATTACHMENT5 0x8CE5
+#define GL_COLOR_ATTACHMENT6 0x8CE6
+#define GL_COLOR_ATTACHMENT7 0x8CE7
+#define GL_COLOR_ATTACHMENT8 0x8CE8
+#define GL_COLOR_ATTACHMENT9 0x8CE9
+#define GL_COLOR_ATTACHMENT10 0x8CEA
+#define GL_COLOR_ATTACHMENT11 0x8CEB
+#define GL_COLOR_ATTACHMENT12 0x8CEC
+#define GL_COLOR_ATTACHMENT13 0x8CED
+#define GL_COLOR_ATTACHMENT14 0x8CEE
+#define GL_COLOR_ATTACHMENT15 0x8CEF
+#define GL_COLOR_ATTACHMENT16 0x8CF0
+#define GL_COLOR_ATTACHMENT17 0x8CF1
+#define GL_COLOR_ATTACHMENT18 0x8CF2
+#define GL_COLOR_ATTACHMENT19 0x8CF3
+#define GL_COLOR_ATTACHMENT20 0x8CF4
+#define GL_COLOR_ATTACHMENT21 0x8CF5
+#define GL_COLOR_ATTACHMENT22 0x8CF6
+#define GL_COLOR_ATTACHMENT23 0x8CF7
+#define GL_COLOR_ATTACHMENT24 0x8CF8
+#define GL_COLOR_ATTACHMENT25 0x8CF9
+#define GL_COLOR_ATTACHMENT26 0x8CFA
+#define GL_COLOR_ATTACHMENT27 0x8CFB
+#define GL_COLOR_ATTACHMENT28 0x8CFC
+#define GL_COLOR_ATTACHMENT29 0x8CFD
+#define GL_COLOR_ATTACHMENT30 0x8CFE
+#define GL_COLOR_ATTACHMENT31 0x8CFF
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
+#define GL_MAX_SAMPLES 0x8D57
+#define GL_HALF_FLOAT 0x140B
+#define GL_MAP_READ_BIT 0x0001
+#define GL_MAP_WRITE_BIT 0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
+#define GL_RG 0x8227
+#define GL_RG_INTEGER 0x8228
+#define GL_R8 0x8229
+#define GL_RG8 0x822B
+#define GL_R16F 0x822D
+#define GL_R32F 0x822E
+#define GL_RG16F 0x822F
+#define GL_RG32F 0x8230
+#define GL_R8I 0x8231
+#define GL_R8UI 0x8232
+#define GL_R16I 0x8233
+#define GL_R16UI 0x8234
+#define GL_R32I 0x8235
+#define GL_R32UI 0x8236
+#define GL_RG8I 0x8237
+#define GL_RG8UI 0x8238
+#define GL_RG16I 0x8239
+#define GL_RG16UI 0x823A
+#define GL_RG32I 0x823B
+#define GL_RG32UI 0x823C
+#define GL_VERTEX_ARRAY_BINDING 0x85B5
+#define GL_R8_SNORM 0x8F94
+#define GL_RG8_SNORM 0x8F95
+#define GL_RGB8_SNORM 0x8F96
+#define GL_RGBA8_SNORM 0x8F97
+#define GL_SIGNED_NORMALIZED 0x8F9C
+#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69
+#define GL_COPY_READ_BUFFER 0x8F36
+#define GL_COPY_WRITE_BUFFER 0x8F37
+#define GL_COPY_READ_BUFFER_BINDING 0x8F36
+#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37
+#define GL_UNIFORM_BUFFER 0x8A11
+#define GL_UNIFORM_BUFFER_BINDING 0x8A28
+#define GL_UNIFORM_BUFFER_START 0x8A29
+#define GL_UNIFORM_BUFFER_SIZE 0x8A2A
+#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B
+#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D
+#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E
+#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F
+#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30
+#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
+#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
+#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
+#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
+#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36
+#define GL_UNIFORM_TYPE 0x8A37
+#define GL_UNIFORM_SIZE 0x8A38
+#define GL_UNIFORM_NAME_LENGTH 0x8A39
+#define GL_UNIFORM_BLOCK_INDEX 0x8A3A
+#define GL_UNIFORM_OFFSET 0x8A3B
+#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C
+#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D
+#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E
+#define GL_UNIFORM_BLOCK_BINDING 0x8A3F
+#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40
+#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
+#define GL_INVALID_INDEX 0xFFFFFFFFu
+#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122
+#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125
+#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
+#define GL_OBJECT_TYPE 0x9112
+#define GL_SYNC_CONDITION 0x9113
+#define GL_SYNC_STATUS 0x9114
+#define GL_SYNC_FLAGS 0x9115
+#define GL_SYNC_FENCE 0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
+#define GL_UNSIGNALED 0x9118
+#define GL_SIGNALED 0x9119
+#define GL_ALREADY_SIGNALED 0x911A
+#define GL_TIMEOUT_EXPIRED 0x911B
+#define GL_CONDITION_SATISFIED 0x911C
+#define GL_WAIT_FAILED 0x911D
+#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
+#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE
+#define GL_ANY_SAMPLES_PASSED 0x8C2F
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A
+#define GL_SAMPLER_BINDING 0x8919
+#define GL_RGB10_A2UI 0x906F
+#define GL_TEXTURE_SWIZZLE_R 0x8E42
+#define GL_TEXTURE_SWIZZLE_G 0x8E43
+#define GL_TEXTURE_SWIZZLE_B 0x8E44
+#define GL_TEXTURE_SWIZZLE_A 0x8E45
+#define GL_GREEN 0x1904
+#define GL_BLUE 0x1905
+#define GL_INT_2_10_10_10_REV 0x8D9F
+#define GL_TRANSFORM_FEEDBACK 0x8E22
+#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23
+#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25
+#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
+#define GL_PROGRAM_BINARY_LENGTH 0x8741
+#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
+#define GL_PROGRAM_BINARY_FORMATS 0x87FF
+#define GL_COMPRESSED_R11_EAC 0x9270
+#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271
+#define GL_COMPRESSED_RG11_EAC 0x9272
+#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273
+#define GL_COMPRESSED_RGB8_ETC2 0x9274
+#define GL_COMPRESSED_SRGB8_ETC2 0x9275
+#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
+#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277
+#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278
+#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279
+#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F
+#define GL_MAX_ELEMENT_INDEX 0x8D6B
+#define GL_NUM_SAMPLE_COUNTS 0x9380
+#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
+typedef void (GL_APIENTRYP PFNGLREADBUFFERPROC) (GLenum src);
+typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (GL_APIENTRYP PFNGLISQUERYPROC) (GLuint id);
+typedef void (GL_APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLENDQUERYPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);
+typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params);
+typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
+typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
+typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays);
+typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (GL_APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode);
+typedef void (GL_APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+typedef void (GL_APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
+typedef void (GL_APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+typedef GLuint (GL_APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+typedef void (GL_APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
+typedef GLboolean (GL_APIENTRYP PFNGLISSYNCPROC) (GLsync sync);
+typedef void (GL_APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync);
+typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data);
+typedef void (GL_APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params);
+typedef void (GL_APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers);
+typedef void (GL_APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers);
+typedef GLboolean (GL_APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor);
+typedef void (GL_APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (GL_APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id);
+typedef void (GL_APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (GL_APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+typedef void (GL_APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (GL_APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glReadBuffer (GLenum src);
+GL_APICALL void GL_APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+GL_APICALL void GL_APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glGenQueries (GLsizei n, GLuint *ids);
+GL_APICALL void GL_APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids);
+GL_APICALL GLboolean GL_APIENTRY glIsQuery (GLuint id);
+GL_APICALL void GL_APIENTRY glBeginQuery (GLenum target, GLuint id);
+GL_APICALL void GL_APIENTRY glEndQuery (GLenum target);
+GL_APICALL void GL_APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params);
+GL_APICALL GLboolean GL_APIENTRY glUnmapBuffer (GLenum target);
+GL_APICALL void GL_APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params);
+GL_APICALL void GL_APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs);
+GL_APICALL void GL_APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GL_APICALL void *GL_APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GL_APICALL void GL_APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length);
+GL_APICALL void GL_APIENTRY glBindVertexArray (GLuint array);
+GL_APICALL void GL_APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays);
+GL_APICALL void GL_APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays);
+GL_APICALL GLboolean GL_APIENTRY glIsVertexArray (GLuint array);
+GL_APICALL void GL_APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data);
+GL_APICALL void GL_APIENTRY glBeginTransformFeedback (GLenum primitiveMode);
+GL_APICALL void GL_APIENTRY glEndTransformFeedback (void);
+GL_APICALL void GL_APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GL_APICALL void GL_APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer);
+GL_APICALL void GL_APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+GL_APICALL void GL_APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GL_APICALL void GL_APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w);
+GL_APICALL void GL_APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GL_APICALL void GL_APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v);
+GL_APICALL void GL_APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v);
+GL_APICALL void GL_APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params);
+GL_APICALL GLint GL_APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glUniform1ui (GLint location, GLuint v0);
+GL_APICALL void GL_APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1);
+GL_APICALL void GL_APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2);
+GL_APICALL void GL_APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GL_APICALL void GL_APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value);
+GL_APICALL void GL_APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value);
+GL_APICALL void GL_APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+GL_APICALL const GLubyte *GL_APIENTRY glGetStringi (GLenum name, GLuint index);
+GL_APICALL void GL_APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GL_APICALL void GL_APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+GL_APICALL void GL_APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+GL_APICALL GLuint GL_APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName);
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+GL_APICALL void GL_APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+GL_APICALL void GL_APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+GL_APICALL void GL_APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+GL_APICALL GLsync GL_APIENTRY glFenceSync (GLenum condition, GLbitfield flags);
+GL_APICALL GLboolean GL_APIENTRY glIsSync (GLsync sync);
+GL_APICALL void GL_APIENTRY glDeleteSync (GLsync sync);
+GL_APICALL GLenum GL_APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GL_APICALL void GL_APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GL_APICALL void GL_APIENTRY glGetInteger64v (GLenum pname, GLint64 *data);
+GL_APICALL void GL_APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+GL_APICALL void GL_APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data);
+GL_APICALL void GL_APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params);
+GL_APICALL void GL_APIENTRY glGenSamplers (GLsizei count, GLuint *samplers);
+GL_APICALL void GL_APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers);
+GL_APICALL GLboolean GL_APIENTRY glIsSampler (GLuint sampler);
+GL_APICALL void GL_APIENTRY glBindSampler (GLuint unit, GLuint sampler);
+GL_APICALL void GL_APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param);
+GL_APICALL void GL_APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param);
+GL_APICALL void GL_APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param);
+GL_APICALL void GL_APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor);
+GL_APICALL void GL_APIENTRY glBindTransformFeedback (GLenum target, GLuint id);
+GL_APICALL void GL_APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids);
+GL_APICALL void GL_APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids);
+GL_APICALL GLboolean GL_APIENTRY glIsTransformFeedback (GLuint id);
+GL_APICALL void GL_APIENTRY glPauseTransformFeedback (void);
+GL_APICALL void GL_APIENTRY glResumeTransformFeedback (void);
+GL_APICALL void GL_APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+GL_APICALL void GL_APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+GL_APICALL void GL_APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value);
+GL_APICALL void GL_APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+GL_APICALL void GL_APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GL_APICALL void GL_APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#endif
+#endif /* GL_ES_VERSION_3_0 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl31.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl31.h
new file mode 100644
index 00000000..9b89a0ac
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl31.h
@@ -0,0 +1,1528 @@
+#ifndef __gl31_h_
+#define __gl31_h_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2013-2015 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+/*
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+** http://www.opengl.org/registry/
+**
+** Khronos $Revision$ on $Date$
+*/
+
+#include <GLES3/gl3platform.h>
+
+#ifndef GL_APIENTRYP
+#define GL_APIENTRYP GL_APIENTRY*
+#endif
+
+#if !defined(GL_GLES_PROTOTYPES)
+#define GL_GLES_PROTOTYPES 1
+#endif
+
+/* Generated on date 20151015 */
+
+/* Generated C header for:
+ * API: gles2
+ * Profile: common
+ * Versions considered: 2\.[0-9]|3\.[01]
+ * Versions emitted: .*
+ * Default extensions included: None
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
+
+#ifndef GL_ES_VERSION_2_0
+#define GL_ES_VERSION_2_0 1
+#include <KHR/khrplatform.h>
+typedef khronos_int8_t GLbyte;
+typedef khronos_float_t GLclampf;
+typedef khronos_int32_t GLfixed;
+typedef short GLshort;
+typedef unsigned short GLushort;
+typedef void GLvoid;
+typedef struct __GLsync *GLsync;
+typedef khronos_int64_t GLint64;
+typedef khronos_uint64_t GLuint64;
+typedef unsigned int GLenum;
+typedef unsigned int GLuint;
+typedef char GLchar;
+typedef khronos_float_t GLfloat;
+typedef khronos_ssize_t GLsizeiptr;
+typedef khronos_intptr_t GLintptr;
+typedef unsigned int GLbitfield;
+typedef int GLint;
+typedef unsigned char GLboolean;
+typedef int GLsizei;
+typedef khronos_uint8_t GLubyte;
+#define GL_DEPTH_BUFFER_BIT 0x00000100
+#define GL_STENCIL_BUFFER_BIT 0x00000400
+#define GL_COLOR_BUFFER_BIT 0x00004000
+#define GL_FALSE 0
+#define GL_TRUE 1
+#define GL_POINTS 0x0000
+#define GL_LINES 0x0001
+#define GL_LINE_LOOP 0x0002
+#define GL_LINE_STRIP 0x0003
+#define GL_TRIANGLES 0x0004
+#define GL_TRIANGLE_STRIP 0x0005
+#define GL_TRIANGLE_FAN 0x0006
+#define GL_ZERO 0
+#define GL_ONE 1
+#define GL_SRC_COLOR 0x0300
+#define GL_ONE_MINUS_SRC_COLOR 0x0301
+#define GL_SRC_ALPHA 0x0302
+#define GL_ONE_MINUS_SRC_ALPHA 0x0303
+#define GL_DST_ALPHA 0x0304
+#define GL_ONE_MINUS_DST_ALPHA 0x0305
+#define GL_DST_COLOR 0x0306
+#define GL_ONE_MINUS_DST_COLOR 0x0307
+#define GL_SRC_ALPHA_SATURATE 0x0308
+#define GL_FUNC_ADD 0x8006
+#define GL_BLEND_EQUATION 0x8009
+#define GL_BLEND_EQUATION_RGB 0x8009
+#define GL_BLEND_EQUATION_ALPHA 0x883D
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_BLEND_DST_RGB 0x80C8
+#define GL_BLEND_SRC_RGB 0x80C9
+#define GL_BLEND_DST_ALPHA 0x80CA
+#define GL_BLEND_SRC_ALPHA 0x80CB
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_BLEND_COLOR 0x8005
+#define GL_ARRAY_BUFFER 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER 0x8893
+#define GL_ARRAY_BUFFER_BINDING 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
+#define GL_STREAM_DRAW 0x88E0
+#define GL_STATIC_DRAW 0x88E4
+#define GL_DYNAMIC_DRAW 0x88E8
+#define GL_BUFFER_SIZE 0x8764
+#define GL_BUFFER_USAGE 0x8765
+#define GL_CURRENT_VERTEX_ATTRIB 0x8626
+#define GL_FRONT 0x0404
+#define GL_BACK 0x0405
+#define GL_FRONT_AND_BACK 0x0408
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_CULL_FACE 0x0B44
+#define GL_BLEND 0x0BE2
+#define GL_DITHER 0x0BD0
+#define GL_STENCIL_TEST 0x0B90
+#define GL_DEPTH_TEST 0x0B71
+#define GL_SCISSOR_TEST 0x0C11
+#define GL_POLYGON_OFFSET_FILL 0x8037
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_NO_ERROR 0
+#define GL_INVALID_ENUM 0x0500
+#define GL_INVALID_VALUE 0x0501
+#define GL_INVALID_OPERATION 0x0502
+#define GL_OUT_OF_MEMORY 0x0505
+#define GL_CW 0x0900
+#define GL_CCW 0x0901
+#define GL_LINE_WIDTH 0x0B21
+#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+#define GL_CULL_FACE_MODE 0x0B45
+#define GL_FRONT_FACE 0x0B46
+#define GL_DEPTH_RANGE 0x0B70
+#define GL_DEPTH_WRITEMASK 0x0B72
+#define GL_DEPTH_CLEAR_VALUE 0x0B73
+#define GL_DEPTH_FUNC 0x0B74
+#define GL_STENCIL_CLEAR_VALUE 0x0B91
+#define GL_STENCIL_FUNC 0x0B92
+#define GL_STENCIL_FAIL 0x0B94
+#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
+#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
+#define GL_STENCIL_REF 0x0B97
+#define GL_STENCIL_VALUE_MASK 0x0B93
+#define GL_STENCIL_WRITEMASK 0x0B98
+#define GL_STENCIL_BACK_FUNC 0x8800
+#define GL_STENCIL_BACK_FAIL 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
+#define GL_STENCIL_BACK_REF 0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
+#define GL_VIEWPORT 0x0BA2
+#define GL_SCISSOR_BOX 0x0C10
+#define GL_COLOR_CLEAR_VALUE 0x0C22
+#define GL_COLOR_WRITEMASK 0x0C23
+#define GL_UNPACK_ALIGNMENT 0x0CF5
+#define GL_PACK_ALIGNMENT 0x0D05
+#define GL_MAX_TEXTURE_SIZE 0x0D33
+#define GL_MAX_VIEWPORT_DIMS 0x0D3A
+#define GL_SUBPIXEL_BITS 0x0D50
+#define GL_RED_BITS 0x0D52
+#define GL_GREEN_BITS 0x0D53
+#define GL_BLUE_BITS 0x0D54
+#define GL_ALPHA_BITS 0x0D55
+#define GL_DEPTH_BITS 0x0D56
+#define GL_STENCIL_BITS 0x0D57
+#define GL_POLYGON_OFFSET_UNITS 0x2A00
+#define GL_POLYGON_OFFSET_FACTOR 0x8038
+#define GL_TEXTURE_BINDING_2D 0x8069
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+#define GL_DONT_CARE 0x1100
+#define GL_FASTEST 0x1101
+#define GL_NICEST 0x1102
+#define GL_GENERATE_MIPMAP_HINT 0x8192
+#define GL_BYTE 0x1400
+#define GL_UNSIGNED_BYTE 0x1401
+#define GL_SHORT 0x1402
+#define GL_UNSIGNED_SHORT 0x1403
+#define GL_INT 0x1404
+#define GL_UNSIGNED_INT 0x1405
+#define GL_FLOAT 0x1406
+#define GL_FIXED 0x140C
+#define GL_DEPTH_COMPONENT 0x1902
+#define GL_ALPHA 0x1906
+#define GL_RGB 0x1907
+#define GL_RGBA 0x1908
+#define GL_LUMINANCE 0x1909
+#define GL_LUMINANCE_ALPHA 0x190A
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_FRAGMENT_SHADER 0x8B30
+#define GL_VERTEX_SHADER 0x8B31
+#define GL_MAX_VERTEX_ATTRIBS 0x8869
+#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
+#define GL_MAX_VARYING_VECTORS 0x8DFC
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
+#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
+#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD
+#define GL_SHADER_TYPE 0x8B4F
+#define GL_DELETE_STATUS 0x8B80
+#define GL_LINK_STATUS 0x8B82
+#define GL_VALIDATE_STATUS 0x8B83
+#define GL_ATTACHED_SHADERS 0x8B85
+#define GL_ACTIVE_UNIFORMS 0x8B86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
+#define GL_ACTIVE_ATTRIBUTES 0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
+#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
+#define GL_CURRENT_PROGRAM 0x8B8D
+#define GL_NEVER 0x0200
+#define GL_LESS 0x0201
+#define GL_EQUAL 0x0202
+#define GL_LEQUAL 0x0203
+#define GL_GREATER 0x0204
+#define GL_NOTEQUAL 0x0205
+#define GL_GEQUAL 0x0206
+#define GL_ALWAYS 0x0207
+#define GL_KEEP 0x1E00
+#define GL_REPLACE 0x1E01
+#define GL_INCR 0x1E02
+#define GL_DECR 0x1E03
+#define GL_INVERT 0x150A
+#define GL_INCR_WRAP 0x8507
+#define GL_DECR_WRAP 0x8508
+#define GL_VENDOR 0x1F00
+#define GL_RENDERER 0x1F01
+#define GL_VERSION 0x1F02
+#define GL_EXTENSIONS 0x1F03
+#define GL_NEAREST 0x2600
+#define GL_LINEAR 0x2601
+#define GL_NEAREST_MIPMAP_NEAREST 0x2700
+#define GL_LINEAR_MIPMAP_NEAREST 0x2701
+#define GL_NEAREST_MIPMAP_LINEAR 0x2702
+#define GL_LINEAR_MIPMAP_LINEAR 0x2703
+#define GL_TEXTURE_MAG_FILTER 0x2800
+#define GL_TEXTURE_MIN_FILTER 0x2801
+#define GL_TEXTURE_WRAP_S 0x2802
+#define GL_TEXTURE_WRAP_T 0x2803
+#define GL_TEXTURE 0x1702
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_REPEAT 0x2901
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_MIRRORED_REPEAT 0x8370
+#define GL_FLOAT_VEC2 0x8B50
+#define GL_FLOAT_VEC3 0x8B51
+#define GL_FLOAT_VEC4 0x8B52
+#define GL_INT_VEC2 0x8B53
+#define GL_INT_VEC3 0x8B54
+#define GL_INT_VEC4 0x8B55
+#define GL_BOOL 0x8B56
+#define GL_BOOL_VEC2 0x8B57
+#define GL_BOOL_VEC3 0x8B58
+#define GL_BOOL_VEC4 0x8B59
+#define GL_FLOAT_MAT2 0x8B5A
+#define GL_FLOAT_MAT3 0x8B5B
+#define GL_FLOAT_MAT4 0x8B5C
+#define GL_SAMPLER_2D 0x8B5E
+#define GL_SAMPLER_CUBE 0x8B60
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
+#define GL_COMPILE_STATUS 0x8B81
+#define GL_INFO_LOG_LENGTH 0x8B84
+#define GL_SHADER_SOURCE_LENGTH 0x8B88
+#define GL_SHADER_COMPILER 0x8DFA
+#define GL_SHADER_BINARY_FORMATS 0x8DF8
+#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9
+#define GL_LOW_FLOAT 0x8DF0
+#define GL_MEDIUM_FLOAT 0x8DF1
+#define GL_HIGH_FLOAT 0x8DF2
+#define GL_LOW_INT 0x8DF3
+#define GL_MEDIUM_INT 0x8DF4
+#define GL_HIGH_INT 0x8DF5
+#define GL_FRAMEBUFFER 0x8D40
+#define GL_RENDERBUFFER 0x8D41
+#define GL_RGBA4 0x8056
+#define GL_RGB5_A1 0x8057
+#define GL_RGB565 0x8D62
+#define GL_DEPTH_COMPONENT16 0x81A5
+#define GL_STENCIL_INDEX8 0x8D48
+#define GL_RENDERBUFFER_WIDTH 0x8D42
+#define GL_RENDERBUFFER_HEIGHT 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44
+#define GL_RENDERBUFFER_RED_SIZE 0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
+#define GL_COLOR_ATTACHMENT0 0x8CE0
+#define GL_DEPTH_ATTACHMENT 0x8D00
+#define GL_STENCIL_ATTACHMENT 0x8D20
+#define GL_NONE 0
+#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9
+#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
+#define GL_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_RENDERBUFFER_BINDING 0x8CA7
+#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
+#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+typedef void (GL_APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (GL_APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
+typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
+typedef void (GL_APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (GL_APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (GL_APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
+typedef void (GL_APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);
+typedef void (GL_APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+typedef void (GL_APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef GLuint (GL_APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (GL_APIENTRYP PFNGLCULLFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func);
+typedef void (GL_APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f);
+typedef void (GL_APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLENABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLFINISHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFLUSHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GL_APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+typedef GLint (GL_APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLenum (GL_APIENTRYP PFNGLGETERRORPROC) (void);
+typedef void (GL_APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+typedef void (GL_APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer);
+typedef void (GL_APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode);
+typedef GLboolean (GL_APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDPROC) (GLenum cap);
+typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
+typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture);
+typedef void (GL_APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width);
+typedef void (GL_APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units);
+typedef void (GL_APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+typedef void (GL_APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
+typedef void (GL_APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture);
+GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader);
+GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
+GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer);
+GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);
+GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);
+GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture);
+GL_APICALL void GL_APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GL_APICALL void GL_APIENTRY glBlendEquation (GLenum mode);
+GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
+GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
+GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target);
+GL_APICALL void GL_APIENTRY glClear (GLbitfield mask);
+GL_APICALL void GL_APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GL_APICALL void GL_APIENTRY glClearDepthf (GLfloat d);
+GL_APICALL void GL_APIENTRY glClearStencil (GLint s);
+GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader);
+GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL GLuint GL_APIENTRY glCreateProgram (void);
+GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type);
+GL_APICALL void GL_APIENTRY glCullFace (GLenum mode);
+GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);
+GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers);
+GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers);
+GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader);
+GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures);
+GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func);
+GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag);
+GL_APICALL void GL_APIENTRY glDepthRangef (GLfloat n, GLfloat f);
+GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader);
+GL_APICALL void GL_APIENTRY glDisable (GLenum cap);
+GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index);
+GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count);
+GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices);
+GL_APICALL void GL_APIENTRY glEnable (GLenum cap);
+GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index);
+GL_APICALL void GL_APIENTRY glFinish (void);
+GL_APICALL void GL_APIENTRY glFlush (void);
+GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode);
+GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
+GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target);
+GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers);
+GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers);
+GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint *textures);
+GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean *data);
+GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL GLenum GL_APIENTRY glGetError (void);
+GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat *data);
+GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint *data);
+GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+GL_APICALL const GLubyte *GL_APIENTRY glGetString (GLenum name);
+GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params);
+GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer);
+GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode);
+GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer);
+GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap);
+GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer);
+GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program);
+GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer);
+GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader);
+GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture);
+GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width);
+GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units);
+GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void);
+GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glSampleCoverage (GLfloat value, GLboolean invert);
+GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
+GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
+GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
+GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat v0);
+GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint v0);
+GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1);
+GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint v0, GLint v1);
+GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2);
+GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUseProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint index, GLfloat x);
+GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y);
+GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_ES_VERSION_2_0 */
+
+#ifndef GL_ES_VERSION_3_0
+#define GL_ES_VERSION_3_0 1
+typedef unsigned short GLhalf;
+#define GL_READ_BUFFER 0x0C02
+#define GL_UNPACK_ROW_LENGTH 0x0CF2
+#define GL_UNPACK_SKIP_ROWS 0x0CF3
+#define GL_UNPACK_SKIP_PIXELS 0x0CF4
+#define GL_PACK_ROW_LENGTH 0x0D02
+#define GL_PACK_SKIP_ROWS 0x0D03
+#define GL_PACK_SKIP_PIXELS 0x0D04
+#define GL_COLOR 0x1800
+#define GL_DEPTH 0x1801
+#define GL_STENCIL 0x1802
+#define GL_RED 0x1903
+#define GL_RGB8 0x8051
+#define GL_RGBA8 0x8058
+#define GL_RGB10_A2 0x8059
+#define GL_TEXTURE_BINDING_3D 0x806A
+#define GL_UNPACK_SKIP_IMAGES 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT 0x806E
+#define GL_TEXTURE_3D 0x806F
+#define GL_TEXTURE_WRAP_R 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE 0x8073
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+#define GL_TEXTURE_MIN_LOD 0x813A
+#define GL_TEXTURE_MAX_LOD 0x813B
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+#define GL_DEPTH_COMPONENT24 0x81A6
+#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
+#define GL_TEXTURE_COMPARE_MODE 0x884C
+#define GL_TEXTURE_COMPARE_FUNC 0x884D
+#define GL_CURRENT_QUERY 0x8865
+#define GL_QUERY_RESULT 0x8866
+#define GL_QUERY_RESULT_AVAILABLE 0x8867
+#define GL_BUFFER_MAPPED 0x88BC
+#define GL_BUFFER_MAP_POINTER 0x88BD
+#define GL_STREAM_READ 0x88E1
+#define GL_STREAM_COPY 0x88E2
+#define GL_STATIC_READ 0x88E5
+#define GL_STATIC_COPY 0x88E6
+#define GL_DYNAMIC_READ 0x88E9
+#define GL_DYNAMIC_COPY 0x88EA
+#define GL_MAX_DRAW_BUFFERS 0x8824
+#define GL_DRAW_BUFFER0 0x8825
+#define GL_DRAW_BUFFER1 0x8826
+#define GL_DRAW_BUFFER2 0x8827
+#define GL_DRAW_BUFFER3 0x8828
+#define GL_DRAW_BUFFER4 0x8829
+#define GL_DRAW_BUFFER5 0x882A
+#define GL_DRAW_BUFFER6 0x882B
+#define GL_DRAW_BUFFER7 0x882C
+#define GL_DRAW_BUFFER8 0x882D
+#define GL_DRAW_BUFFER9 0x882E
+#define GL_DRAW_BUFFER10 0x882F
+#define GL_DRAW_BUFFER11 0x8830
+#define GL_DRAW_BUFFER12 0x8831
+#define GL_DRAW_BUFFER13 0x8832
+#define GL_DRAW_BUFFER14 0x8833
+#define GL_DRAW_BUFFER15 0x8834
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
+#define GL_SAMPLER_3D 0x8B5F
+#define GL_SAMPLER_2D_SHADOW 0x8B62
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
+#define GL_PIXEL_PACK_BUFFER 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
+#define GL_FLOAT_MAT2x3 0x8B65
+#define GL_FLOAT_MAT2x4 0x8B66
+#define GL_FLOAT_MAT3x2 0x8B67
+#define GL_FLOAT_MAT3x4 0x8B68
+#define GL_FLOAT_MAT4x2 0x8B69
+#define GL_FLOAT_MAT4x3 0x8B6A
+#define GL_SRGB 0x8C40
+#define GL_SRGB8 0x8C41
+#define GL_SRGB8_ALPHA8 0x8C43
+#define GL_COMPARE_REF_TO_TEXTURE 0x884E
+#define GL_MAJOR_VERSION 0x821B
+#define GL_MINOR_VERSION 0x821C
+#define GL_NUM_EXTENSIONS 0x821D
+#define GL_RGBA32F 0x8814
+#define GL_RGB32F 0x8815
+#define GL_RGBA16F 0x881A
+#define GL_RGB16F 0x881B
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD
+#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF
+#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905
+#define GL_MAX_VARYING_COMPONENTS 0x8B4B
+#define GL_TEXTURE_2D_ARRAY 0x8C1A
+#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D
+#define GL_R11F_G11F_B10F 0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B
+#define GL_RGB9_E5 0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88
+#define GL_RASTERIZER_DISCARD 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS 0x8C8C
+#define GL_SEPARATE_ATTRIBS 0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F
+#define GL_RGBA32UI 0x8D70
+#define GL_RGB32UI 0x8D71
+#define GL_RGBA16UI 0x8D76
+#define GL_RGB16UI 0x8D77
+#define GL_RGBA8UI 0x8D7C
+#define GL_RGB8UI 0x8D7D
+#define GL_RGBA32I 0x8D82
+#define GL_RGB32I 0x8D83
+#define GL_RGBA16I 0x8D88
+#define GL_RGB16I 0x8D89
+#define GL_RGBA8I 0x8D8E
+#define GL_RGB8I 0x8D8F
+#define GL_RED_INTEGER 0x8D94
+#define GL_RGB_INTEGER 0x8D98
+#define GL_RGBA_INTEGER 0x8D99
+#define GL_SAMPLER_2D_ARRAY 0x8DC1
+#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW 0x8DC5
+#define GL_UNSIGNED_INT_VEC2 0x8DC6
+#define GL_UNSIGNED_INT_VEC3 0x8DC7
+#define GL_UNSIGNED_INT_VEC4 0x8DC8
+#define GL_INT_SAMPLER_2D 0x8DCA
+#define GL_INT_SAMPLER_3D 0x8DCB
+#define GL_INT_SAMPLER_CUBE 0x8DCC
+#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF
+#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7
+#define GL_BUFFER_ACCESS_FLAGS 0x911F
+#define GL_BUFFER_MAP_LENGTH 0x9120
+#define GL_BUFFER_MAP_OFFSET 0x9121
+#define GL_DEPTH_COMPONENT32F 0x8CAC
+#define GL_DEPTH32F_STENCIL8 0x8CAD
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
+#define GL_FRAMEBUFFER_DEFAULT 0x8218
+#define GL_FRAMEBUFFER_UNDEFINED 0x8219
+#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A
+#define GL_DEPTH_STENCIL 0x84F9
+#define GL_UNSIGNED_INT_24_8 0x84FA
+#define GL_DEPTH24_STENCIL8 0x88F0
+#define GL_UNSIGNED_NORMALIZED 0x8C17
+#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_READ_FRAMEBUFFER 0x8CA8
+#define GL_DRAW_FRAMEBUFFER 0x8CA9
+#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA
+#define GL_RENDERBUFFER_SAMPLES 0x8CAB
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
+#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF
+#define GL_COLOR_ATTACHMENT1 0x8CE1
+#define GL_COLOR_ATTACHMENT2 0x8CE2
+#define GL_COLOR_ATTACHMENT3 0x8CE3
+#define GL_COLOR_ATTACHMENT4 0x8CE4
+#define GL_COLOR_ATTACHMENT5 0x8CE5
+#define GL_COLOR_ATTACHMENT6 0x8CE6
+#define GL_COLOR_ATTACHMENT7 0x8CE7
+#define GL_COLOR_ATTACHMENT8 0x8CE8
+#define GL_COLOR_ATTACHMENT9 0x8CE9
+#define GL_COLOR_ATTACHMENT10 0x8CEA
+#define GL_COLOR_ATTACHMENT11 0x8CEB
+#define GL_COLOR_ATTACHMENT12 0x8CEC
+#define GL_COLOR_ATTACHMENT13 0x8CED
+#define GL_COLOR_ATTACHMENT14 0x8CEE
+#define GL_COLOR_ATTACHMENT15 0x8CEF
+#define GL_COLOR_ATTACHMENT16 0x8CF0
+#define GL_COLOR_ATTACHMENT17 0x8CF1
+#define GL_COLOR_ATTACHMENT18 0x8CF2
+#define GL_COLOR_ATTACHMENT19 0x8CF3
+#define GL_COLOR_ATTACHMENT20 0x8CF4
+#define GL_COLOR_ATTACHMENT21 0x8CF5
+#define GL_COLOR_ATTACHMENT22 0x8CF6
+#define GL_COLOR_ATTACHMENT23 0x8CF7
+#define GL_COLOR_ATTACHMENT24 0x8CF8
+#define GL_COLOR_ATTACHMENT25 0x8CF9
+#define GL_COLOR_ATTACHMENT26 0x8CFA
+#define GL_COLOR_ATTACHMENT27 0x8CFB
+#define GL_COLOR_ATTACHMENT28 0x8CFC
+#define GL_COLOR_ATTACHMENT29 0x8CFD
+#define GL_COLOR_ATTACHMENT30 0x8CFE
+#define GL_COLOR_ATTACHMENT31 0x8CFF
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
+#define GL_MAX_SAMPLES 0x8D57
+#define GL_HALF_FLOAT 0x140B
+#define GL_MAP_READ_BIT 0x0001
+#define GL_MAP_WRITE_BIT 0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
+#define GL_RG 0x8227
+#define GL_RG_INTEGER 0x8228
+#define GL_R8 0x8229
+#define GL_RG8 0x822B
+#define GL_R16F 0x822D
+#define GL_R32F 0x822E
+#define GL_RG16F 0x822F
+#define GL_RG32F 0x8230
+#define GL_R8I 0x8231
+#define GL_R8UI 0x8232
+#define GL_R16I 0x8233
+#define GL_R16UI 0x8234
+#define GL_R32I 0x8235
+#define GL_R32UI 0x8236
+#define GL_RG8I 0x8237
+#define GL_RG8UI 0x8238
+#define GL_RG16I 0x8239
+#define GL_RG16UI 0x823A
+#define GL_RG32I 0x823B
+#define GL_RG32UI 0x823C
+#define GL_VERTEX_ARRAY_BINDING 0x85B5
+#define GL_R8_SNORM 0x8F94
+#define GL_RG8_SNORM 0x8F95
+#define GL_RGB8_SNORM 0x8F96
+#define GL_RGBA8_SNORM 0x8F97
+#define GL_SIGNED_NORMALIZED 0x8F9C
+#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69
+#define GL_COPY_READ_BUFFER 0x8F36
+#define GL_COPY_WRITE_BUFFER 0x8F37
+#define GL_COPY_READ_BUFFER_BINDING 0x8F36
+#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37
+#define GL_UNIFORM_BUFFER 0x8A11
+#define GL_UNIFORM_BUFFER_BINDING 0x8A28
+#define GL_UNIFORM_BUFFER_START 0x8A29
+#define GL_UNIFORM_BUFFER_SIZE 0x8A2A
+#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B
+#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D
+#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E
+#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F
+#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30
+#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
+#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
+#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
+#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
+#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36
+#define GL_UNIFORM_TYPE 0x8A37
+#define GL_UNIFORM_SIZE 0x8A38
+#define GL_UNIFORM_NAME_LENGTH 0x8A39
+#define GL_UNIFORM_BLOCK_INDEX 0x8A3A
+#define GL_UNIFORM_OFFSET 0x8A3B
+#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C
+#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D
+#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E
+#define GL_UNIFORM_BLOCK_BINDING 0x8A3F
+#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40
+#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
+#define GL_INVALID_INDEX 0xFFFFFFFFu
+#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122
+#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125
+#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
+#define GL_OBJECT_TYPE 0x9112
+#define GL_SYNC_CONDITION 0x9113
+#define GL_SYNC_STATUS 0x9114
+#define GL_SYNC_FLAGS 0x9115
+#define GL_SYNC_FENCE 0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
+#define GL_UNSIGNALED 0x9118
+#define GL_SIGNALED 0x9119
+#define GL_ALREADY_SIGNALED 0x911A
+#define GL_TIMEOUT_EXPIRED 0x911B
+#define GL_CONDITION_SATISFIED 0x911C
+#define GL_WAIT_FAILED 0x911D
+#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
+#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE
+#define GL_ANY_SAMPLES_PASSED 0x8C2F
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A
+#define GL_SAMPLER_BINDING 0x8919
+#define GL_RGB10_A2UI 0x906F
+#define GL_TEXTURE_SWIZZLE_R 0x8E42
+#define GL_TEXTURE_SWIZZLE_G 0x8E43
+#define GL_TEXTURE_SWIZZLE_B 0x8E44
+#define GL_TEXTURE_SWIZZLE_A 0x8E45
+#define GL_GREEN 0x1904
+#define GL_BLUE 0x1905
+#define GL_INT_2_10_10_10_REV 0x8D9F
+#define GL_TRANSFORM_FEEDBACK 0x8E22
+#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23
+#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25
+#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
+#define GL_PROGRAM_BINARY_LENGTH 0x8741
+#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
+#define GL_PROGRAM_BINARY_FORMATS 0x87FF
+#define GL_COMPRESSED_R11_EAC 0x9270
+#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271
+#define GL_COMPRESSED_RG11_EAC 0x9272
+#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273
+#define GL_COMPRESSED_RGB8_ETC2 0x9274
+#define GL_COMPRESSED_SRGB8_ETC2 0x9275
+#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
+#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277
+#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278
+#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279
+#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F
+#define GL_MAX_ELEMENT_INDEX 0x8D6B
+#define GL_NUM_SAMPLE_COUNTS 0x9380
+#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
+typedef void (GL_APIENTRYP PFNGLREADBUFFERPROC) (GLenum src);
+typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (GL_APIENTRYP PFNGLISQUERYPROC) (GLuint id);
+typedef void (GL_APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLENDQUERYPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);
+typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params);
+typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
+typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
+typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays);
+typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (GL_APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode);
+typedef void (GL_APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+typedef void (GL_APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
+typedef void (GL_APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+typedef GLuint (GL_APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+typedef void (GL_APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
+typedef GLboolean (GL_APIENTRYP PFNGLISSYNCPROC) (GLsync sync);
+typedef void (GL_APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync);
+typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data);
+typedef void (GL_APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params);
+typedef void (GL_APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers);
+typedef void (GL_APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers);
+typedef GLboolean (GL_APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor);
+typedef void (GL_APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (GL_APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id);
+typedef void (GL_APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (GL_APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+typedef void (GL_APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (GL_APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glReadBuffer (GLenum src);
+GL_APICALL void GL_APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+GL_APICALL void GL_APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glGenQueries (GLsizei n, GLuint *ids);
+GL_APICALL void GL_APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids);
+GL_APICALL GLboolean GL_APIENTRY glIsQuery (GLuint id);
+GL_APICALL void GL_APIENTRY glBeginQuery (GLenum target, GLuint id);
+GL_APICALL void GL_APIENTRY glEndQuery (GLenum target);
+GL_APICALL void GL_APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params);
+GL_APICALL GLboolean GL_APIENTRY glUnmapBuffer (GLenum target);
+GL_APICALL void GL_APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params);
+GL_APICALL void GL_APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs);
+GL_APICALL void GL_APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GL_APICALL void *GL_APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GL_APICALL void GL_APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length);
+GL_APICALL void GL_APIENTRY glBindVertexArray (GLuint array);
+GL_APICALL void GL_APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays);
+GL_APICALL void GL_APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays);
+GL_APICALL GLboolean GL_APIENTRY glIsVertexArray (GLuint array);
+GL_APICALL void GL_APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data);
+GL_APICALL void GL_APIENTRY glBeginTransformFeedback (GLenum primitiveMode);
+GL_APICALL void GL_APIENTRY glEndTransformFeedback (void);
+GL_APICALL void GL_APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GL_APICALL void GL_APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer);
+GL_APICALL void GL_APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+GL_APICALL void GL_APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GL_APICALL void GL_APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w);
+GL_APICALL void GL_APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GL_APICALL void GL_APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v);
+GL_APICALL void GL_APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v);
+GL_APICALL void GL_APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params);
+GL_APICALL GLint GL_APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glUniform1ui (GLint location, GLuint v0);
+GL_APICALL void GL_APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1);
+GL_APICALL void GL_APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2);
+GL_APICALL void GL_APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GL_APICALL void GL_APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value);
+GL_APICALL void GL_APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value);
+GL_APICALL void GL_APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+GL_APICALL const GLubyte *GL_APIENTRY glGetStringi (GLenum name, GLuint index);
+GL_APICALL void GL_APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GL_APICALL void GL_APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+GL_APICALL void GL_APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+GL_APICALL GLuint GL_APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName);
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+GL_APICALL void GL_APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+GL_APICALL void GL_APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+GL_APICALL void GL_APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+GL_APICALL GLsync GL_APIENTRY glFenceSync (GLenum condition, GLbitfield flags);
+GL_APICALL GLboolean GL_APIENTRY glIsSync (GLsync sync);
+GL_APICALL void GL_APIENTRY glDeleteSync (GLsync sync);
+GL_APICALL GLenum GL_APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GL_APICALL void GL_APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GL_APICALL void GL_APIENTRY glGetInteger64v (GLenum pname, GLint64 *data);
+GL_APICALL void GL_APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+GL_APICALL void GL_APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data);
+GL_APICALL void GL_APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params);
+GL_APICALL void GL_APIENTRY glGenSamplers (GLsizei count, GLuint *samplers);
+GL_APICALL void GL_APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers);
+GL_APICALL GLboolean GL_APIENTRY glIsSampler (GLuint sampler);
+GL_APICALL void GL_APIENTRY glBindSampler (GLuint unit, GLuint sampler);
+GL_APICALL void GL_APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param);
+GL_APICALL void GL_APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param);
+GL_APICALL void GL_APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param);
+GL_APICALL void GL_APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor);
+GL_APICALL void GL_APIENTRY glBindTransformFeedback (GLenum target, GLuint id);
+GL_APICALL void GL_APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids);
+GL_APICALL void GL_APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids);
+GL_APICALL GLboolean GL_APIENTRY glIsTransformFeedback (GLuint id);
+GL_APICALL void GL_APIENTRY glPauseTransformFeedback (void);
+GL_APICALL void GL_APIENTRY glResumeTransformFeedback (void);
+GL_APICALL void GL_APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+GL_APICALL void GL_APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+GL_APICALL void GL_APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value);
+GL_APICALL void GL_APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+GL_APICALL void GL_APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GL_APICALL void GL_APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#endif
+#endif /* GL_ES_VERSION_3_0 */
+
+#ifndef GL_ES_VERSION_3_1
+#define GL_ES_VERSION_3_1 1
+#define GL_COMPUTE_SHADER 0x91B9
+#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB
+#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC
+#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD
+#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262
+#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263
+#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264
+#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265
+#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266
+#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB
+#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE
+#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF
+#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267
+#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE
+#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF
+#define GL_COMPUTE_SHADER_BIT 0x00000020
+#define GL_DRAW_INDIRECT_BUFFER 0x8F3F
+#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43
+#define GL_MAX_UNIFORM_LOCATIONS 0x826E
+#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310
+#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311
+#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313
+#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314
+#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315
+#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316
+#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318
+#define GL_UNIFORM 0x92E1
+#define GL_UNIFORM_BLOCK 0x92E2
+#define GL_PROGRAM_INPUT 0x92E3
+#define GL_PROGRAM_OUTPUT 0x92E4
+#define GL_BUFFER_VARIABLE 0x92E5
+#define GL_SHADER_STORAGE_BLOCK 0x92E6
+#define GL_ATOMIC_COUNTER_BUFFER 0x92C0
+#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4
+#define GL_ACTIVE_RESOURCES 0x92F5
+#define GL_MAX_NAME_LENGTH 0x92F6
+#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7
+#define GL_NAME_LENGTH 0x92F9
+#define GL_TYPE 0x92FA
+#define GL_ARRAY_SIZE 0x92FB
+#define GL_OFFSET 0x92FC
+#define GL_BLOCK_INDEX 0x92FD
+#define GL_ARRAY_STRIDE 0x92FE
+#define GL_MATRIX_STRIDE 0x92FF
+#define GL_IS_ROW_MAJOR 0x9300
+#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301
+#define GL_BUFFER_BINDING 0x9302
+#define GL_BUFFER_DATA_SIZE 0x9303
+#define GL_NUM_ACTIVE_VARIABLES 0x9304
+#define GL_ACTIVE_VARIABLES 0x9305
+#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306
+#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A
+#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B
+#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C
+#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D
+#define GL_LOCATION 0x930E
+#define GL_VERTEX_SHADER_BIT 0x00000001
+#define GL_FRAGMENT_SHADER_BIT 0x00000002
+#define GL_ALL_SHADER_BITS 0xFFFFFFFF
+#define GL_PROGRAM_SEPARABLE 0x8258
+#define GL_ACTIVE_PROGRAM 0x8259
+#define GL_PROGRAM_PIPELINE_BINDING 0x825A
+#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1
+#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2
+#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3
+#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0
+#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1
+#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6
+#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC
+#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9
+#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB
+#define GL_MAX_IMAGE_UNITS 0x8F38
+#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA
+#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE
+#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF
+#define GL_IMAGE_BINDING_NAME 0x8F3A
+#define GL_IMAGE_BINDING_LEVEL 0x8F3B
+#define GL_IMAGE_BINDING_LAYERED 0x8F3C
+#define GL_IMAGE_BINDING_LAYER 0x8F3D
+#define GL_IMAGE_BINDING_ACCESS 0x8F3E
+#define GL_IMAGE_BINDING_FORMAT 0x906E
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001
+#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002
+#define GL_UNIFORM_BARRIER_BIT 0x00000004
+#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020
+#define GL_COMMAND_BARRIER_BIT 0x00000040
+#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080
+#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100
+#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200
+#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800
+#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000
+#define GL_ALL_BARRIER_BITS 0xFFFFFFFF
+#define GL_IMAGE_2D 0x904D
+#define GL_IMAGE_3D 0x904E
+#define GL_IMAGE_CUBE 0x9050
+#define GL_IMAGE_2D_ARRAY 0x9053
+#define GL_INT_IMAGE_2D 0x9058
+#define GL_INT_IMAGE_3D 0x9059
+#define GL_INT_IMAGE_CUBE 0x905B
+#define GL_INT_IMAGE_2D_ARRAY 0x905E
+#define GL_UNSIGNED_INT_IMAGE_2D 0x9063
+#define GL_UNSIGNED_INT_IMAGE_3D 0x9064
+#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069
+#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9
+#define GL_READ_ONLY 0x88B8
+#define GL_WRITE_ONLY 0x88B9
+#define GL_READ_WRITE 0x88BA
+#define GL_SHADER_STORAGE_BUFFER 0x90D2
+#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3
+#define GL_SHADER_STORAGE_BUFFER_START 0x90D4
+#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5
+#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6
+#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA
+#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB
+#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC
+#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD
+#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE
+#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF
+#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000
+#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39
+#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA
+#define GL_STENCIL_INDEX 0x1901
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F
+#define GL_SAMPLE_POSITION 0x8E50
+#define GL_SAMPLE_MASK 0x8E51
+#define GL_SAMPLE_MASK_VALUE 0x8E52
+#define GL_TEXTURE_2D_MULTISAMPLE 0x9100
+#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59
+#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E
+#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F
+#define GL_MAX_INTEGER_SAMPLES 0x9110
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104
+#define GL_TEXTURE_SAMPLES 0x9106
+#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107
+#define GL_TEXTURE_WIDTH 0x1000
+#define GL_TEXTURE_HEIGHT 0x1001
+#define GL_TEXTURE_DEPTH 0x8071
+#define GL_TEXTURE_INTERNAL_FORMAT 0x1003
+#define GL_TEXTURE_RED_SIZE 0x805C
+#define GL_TEXTURE_GREEN_SIZE 0x805D
+#define GL_TEXTURE_BLUE_SIZE 0x805E
+#define GL_TEXTURE_ALPHA_SIZE 0x805F
+#define GL_TEXTURE_DEPTH_SIZE 0x884A
+#define GL_TEXTURE_STENCIL_SIZE 0x88F1
+#define GL_TEXTURE_SHARED_SIZE 0x8C3F
+#define GL_TEXTURE_RED_TYPE 0x8C10
+#define GL_TEXTURE_GREEN_TYPE 0x8C11
+#define GL_TEXTURE_BLUE_TYPE 0x8C12
+#define GL_TEXTURE_ALPHA_TYPE 0x8C13
+#define GL_TEXTURE_DEPTH_TYPE 0x8C16
+#define GL_TEXTURE_COMPRESSED 0x86A1
+#define GL_SAMPLER_2D_MULTISAMPLE 0x9108
+#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A
+#define GL_VERTEX_ATTRIB_BINDING 0x82D4
+#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5
+#define GL_VERTEX_BINDING_DIVISOR 0x82D6
+#define GL_VERTEX_BINDING_OFFSET 0x82D7
+#define GL_VERTEX_BINDING_STRIDE 0x82D8
+#define GL_VERTEX_BINDING_BUFFER 0x8F4F
+#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9
+#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA
+#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5
+typedef void (GL_APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+typedef void (GL_APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+typedef GLuint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program);
+typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings);
+typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines);
+typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data);
+typedef void (GL_APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers);
+typedef void (GL_APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC) (GLbitfield barriers);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (GL_APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val);
+typedef void (GL_APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask);
+typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC) (GLenum target, GLint level, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC) (GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex);
+typedef void (GL_APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+GL_APICALL void GL_APIENTRY glDispatchComputeIndirect (GLintptr indirect);
+GL_APICALL void GL_APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect);
+GL_APICALL void GL_APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect);
+GL_APICALL void GL_APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+GL_APICALL GLuint GL_APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+GL_APICALL GLint GL_APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name);
+GL_APICALL void GL_APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program);
+GL_APICALL void GL_APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program);
+GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings);
+GL_APICALL void GL_APIENTRY glBindProgramPipeline (GLuint pipeline);
+GL_APICALL void GL_APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines);
+GL_APICALL void GL_APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines);
+GL_APICALL GLboolean GL_APIENTRY glIsProgramPipeline (GLuint pipeline);
+GL_APICALL void GL_APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0);
+GL_APICALL void GL_APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1);
+GL_APICALL void GL_APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GL_APICALL void GL_APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GL_APICALL void GL_APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0);
+GL_APICALL void GL_APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1);
+GL_APICALL void GL_APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GL_APICALL void GL_APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GL_APICALL void GL_APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0);
+GL_APICALL void GL_APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GL_APICALL void GL_APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GL_APICALL void GL_APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GL_APICALL void GL_APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glValidateProgramPipeline (GLuint pipeline);
+GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+GL_APICALL void GL_APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data);
+GL_APICALL void GL_APIENTRY glMemoryBarrier (GLbitfield barriers);
+GL_APICALL void GL_APIENTRY glMemoryBarrierByRegion (GLbitfield barriers);
+GL_APICALL void GL_APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GL_APICALL void GL_APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val);
+GL_APICALL void GL_APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask);
+GL_APICALL void GL_APIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GL_APICALL void GL_APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GL_APICALL void GL_APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GL_APICALL void GL_APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex);
+GL_APICALL void GL_APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor);
+#endif
+#endif /* GL_ES_VERSION_3_1 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl32.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl32.h
new file mode 100644
index 00000000..a2c36119
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl32.h
@@ -0,0 +1,1829 @@
+#ifndef __gl32_h_
+#define __gl32_h_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2013-2015 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+/*
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+** http://www.opengl.org/registry/
+**
+** Khronos $Revision$ on $Date$
+*/
+
+#include <GLES3/gl3platform.h>
+
+#ifndef GL_APIENTRYP
+#define GL_APIENTRYP GL_APIENTRY*
+#endif
+
+#if !defined(GL_GLES_PROTOTYPES)
+#define GL_GLES_PROTOTYPES 1
+#endif
+
+/* Generated on date 20151015 */
+
+/* Generated C header for:
+ * API: gles2
+ * Profile: common
+ * Versions considered: 2\.[0-9]|3\.[012]
+ * Versions emitted: .*
+ * Default extensions included: None
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
+
+#ifndef GL_ES_VERSION_2_0
+#define GL_ES_VERSION_2_0 1
+#include <KHR/khrplatform.h>
+typedef khronos_int8_t GLbyte;
+typedef khronos_float_t GLclampf;
+typedef khronos_int32_t GLfixed;
+typedef short GLshort;
+typedef unsigned short GLushort;
+typedef void GLvoid;
+typedef struct __GLsync *GLsync;
+typedef khronos_int64_t GLint64;
+typedef khronos_uint64_t GLuint64;
+typedef unsigned int GLenum;
+typedef unsigned int GLuint;
+typedef char GLchar;
+typedef khronos_float_t GLfloat;
+typedef khronos_ssize_t GLsizeiptr;
+typedef khronos_intptr_t GLintptr;
+typedef unsigned int GLbitfield;
+typedef int GLint;
+typedef unsigned char GLboolean;
+typedef int GLsizei;
+typedef khronos_uint8_t GLubyte;
+#define GL_DEPTH_BUFFER_BIT 0x00000100
+#define GL_STENCIL_BUFFER_BIT 0x00000400
+#define GL_COLOR_BUFFER_BIT 0x00004000
+#define GL_FALSE 0
+#define GL_TRUE 1
+#define GL_POINTS 0x0000
+#define GL_LINES 0x0001
+#define GL_LINE_LOOP 0x0002
+#define GL_LINE_STRIP 0x0003
+#define GL_TRIANGLES 0x0004
+#define GL_TRIANGLE_STRIP 0x0005
+#define GL_TRIANGLE_FAN 0x0006
+#define GL_ZERO 0
+#define GL_ONE 1
+#define GL_SRC_COLOR 0x0300
+#define GL_ONE_MINUS_SRC_COLOR 0x0301
+#define GL_SRC_ALPHA 0x0302
+#define GL_ONE_MINUS_SRC_ALPHA 0x0303
+#define GL_DST_ALPHA 0x0304
+#define GL_ONE_MINUS_DST_ALPHA 0x0305
+#define GL_DST_COLOR 0x0306
+#define GL_ONE_MINUS_DST_COLOR 0x0307
+#define GL_SRC_ALPHA_SATURATE 0x0308
+#define GL_FUNC_ADD 0x8006
+#define GL_BLEND_EQUATION 0x8009
+#define GL_BLEND_EQUATION_RGB 0x8009
+#define GL_BLEND_EQUATION_ALPHA 0x883D
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_BLEND_DST_RGB 0x80C8
+#define GL_BLEND_SRC_RGB 0x80C9
+#define GL_BLEND_DST_ALPHA 0x80CA
+#define GL_BLEND_SRC_ALPHA 0x80CB
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_BLEND_COLOR 0x8005
+#define GL_ARRAY_BUFFER 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER 0x8893
+#define GL_ARRAY_BUFFER_BINDING 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
+#define GL_STREAM_DRAW 0x88E0
+#define GL_STATIC_DRAW 0x88E4
+#define GL_DYNAMIC_DRAW 0x88E8
+#define GL_BUFFER_SIZE 0x8764
+#define GL_BUFFER_USAGE 0x8765
+#define GL_CURRENT_VERTEX_ATTRIB 0x8626
+#define GL_FRONT 0x0404
+#define GL_BACK 0x0405
+#define GL_FRONT_AND_BACK 0x0408
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_CULL_FACE 0x0B44
+#define GL_BLEND 0x0BE2
+#define GL_DITHER 0x0BD0
+#define GL_STENCIL_TEST 0x0B90
+#define GL_DEPTH_TEST 0x0B71
+#define GL_SCISSOR_TEST 0x0C11
+#define GL_POLYGON_OFFSET_FILL 0x8037
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_NO_ERROR 0
+#define GL_INVALID_ENUM 0x0500
+#define GL_INVALID_VALUE 0x0501
+#define GL_INVALID_OPERATION 0x0502
+#define GL_OUT_OF_MEMORY 0x0505
+#define GL_CW 0x0900
+#define GL_CCW 0x0901
+#define GL_LINE_WIDTH 0x0B21
+#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+#define GL_CULL_FACE_MODE 0x0B45
+#define GL_FRONT_FACE 0x0B46
+#define GL_DEPTH_RANGE 0x0B70
+#define GL_DEPTH_WRITEMASK 0x0B72
+#define GL_DEPTH_CLEAR_VALUE 0x0B73
+#define GL_DEPTH_FUNC 0x0B74
+#define GL_STENCIL_CLEAR_VALUE 0x0B91
+#define GL_STENCIL_FUNC 0x0B92
+#define GL_STENCIL_FAIL 0x0B94
+#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
+#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
+#define GL_STENCIL_REF 0x0B97
+#define GL_STENCIL_VALUE_MASK 0x0B93
+#define GL_STENCIL_WRITEMASK 0x0B98
+#define GL_STENCIL_BACK_FUNC 0x8800
+#define GL_STENCIL_BACK_FAIL 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
+#define GL_STENCIL_BACK_REF 0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
+#define GL_VIEWPORT 0x0BA2
+#define GL_SCISSOR_BOX 0x0C10
+#define GL_COLOR_CLEAR_VALUE 0x0C22
+#define GL_COLOR_WRITEMASK 0x0C23
+#define GL_UNPACK_ALIGNMENT 0x0CF5
+#define GL_PACK_ALIGNMENT 0x0D05
+#define GL_MAX_TEXTURE_SIZE 0x0D33
+#define GL_MAX_VIEWPORT_DIMS 0x0D3A
+#define GL_SUBPIXEL_BITS 0x0D50
+#define GL_RED_BITS 0x0D52
+#define GL_GREEN_BITS 0x0D53
+#define GL_BLUE_BITS 0x0D54
+#define GL_ALPHA_BITS 0x0D55
+#define GL_DEPTH_BITS 0x0D56
+#define GL_STENCIL_BITS 0x0D57
+#define GL_POLYGON_OFFSET_UNITS 0x2A00
+#define GL_POLYGON_OFFSET_FACTOR 0x8038
+#define GL_TEXTURE_BINDING_2D 0x8069
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+#define GL_DONT_CARE 0x1100
+#define GL_FASTEST 0x1101
+#define GL_NICEST 0x1102
+#define GL_GENERATE_MIPMAP_HINT 0x8192
+#define GL_BYTE 0x1400
+#define GL_UNSIGNED_BYTE 0x1401
+#define GL_SHORT 0x1402
+#define GL_UNSIGNED_SHORT 0x1403
+#define GL_INT 0x1404
+#define GL_UNSIGNED_INT 0x1405
+#define GL_FLOAT 0x1406
+#define GL_FIXED 0x140C
+#define GL_DEPTH_COMPONENT 0x1902
+#define GL_ALPHA 0x1906
+#define GL_RGB 0x1907
+#define GL_RGBA 0x1908
+#define GL_LUMINANCE 0x1909
+#define GL_LUMINANCE_ALPHA 0x190A
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_FRAGMENT_SHADER 0x8B30
+#define GL_VERTEX_SHADER 0x8B31
+#define GL_MAX_VERTEX_ATTRIBS 0x8869
+#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
+#define GL_MAX_VARYING_VECTORS 0x8DFC
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
+#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
+#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD
+#define GL_SHADER_TYPE 0x8B4F
+#define GL_DELETE_STATUS 0x8B80
+#define GL_LINK_STATUS 0x8B82
+#define GL_VALIDATE_STATUS 0x8B83
+#define GL_ATTACHED_SHADERS 0x8B85
+#define GL_ACTIVE_UNIFORMS 0x8B86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
+#define GL_ACTIVE_ATTRIBUTES 0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
+#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
+#define GL_CURRENT_PROGRAM 0x8B8D
+#define GL_NEVER 0x0200
+#define GL_LESS 0x0201
+#define GL_EQUAL 0x0202
+#define GL_LEQUAL 0x0203
+#define GL_GREATER 0x0204
+#define GL_NOTEQUAL 0x0205
+#define GL_GEQUAL 0x0206
+#define GL_ALWAYS 0x0207
+#define GL_KEEP 0x1E00
+#define GL_REPLACE 0x1E01
+#define GL_INCR 0x1E02
+#define GL_DECR 0x1E03
+#define GL_INVERT 0x150A
+#define GL_INCR_WRAP 0x8507
+#define GL_DECR_WRAP 0x8508
+#define GL_VENDOR 0x1F00
+#define GL_RENDERER 0x1F01
+#define GL_VERSION 0x1F02
+#define GL_EXTENSIONS 0x1F03
+#define GL_NEAREST 0x2600
+#define GL_LINEAR 0x2601
+#define GL_NEAREST_MIPMAP_NEAREST 0x2700
+#define GL_LINEAR_MIPMAP_NEAREST 0x2701
+#define GL_NEAREST_MIPMAP_LINEAR 0x2702
+#define GL_LINEAR_MIPMAP_LINEAR 0x2703
+#define GL_TEXTURE_MAG_FILTER 0x2800
+#define GL_TEXTURE_MIN_FILTER 0x2801
+#define GL_TEXTURE_WRAP_S 0x2802
+#define GL_TEXTURE_WRAP_T 0x2803
+#define GL_TEXTURE 0x1702
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_REPEAT 0x2901
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_MIRRORED_REPEAT 0x8370
+#define GL_FLOAT_VEC2 0x8B50
+#define GL_FLOAT_VEC3 0x8B51
+#define GL_FLOAT_VEC4 0x8B52
+#define GL_INT_VEC2 0x8B53
+#define GL_INT_VEC3 0x8B54
+#define GL_INT_VEC4 0x8B55
+#define GL_BOOL 0x8B56
+#define GL_BOOL_VEC2 0x8B57
+#define GL_BOOL_VEC3 0x8B58
+#define GL_BOOL_VEC4 0x8B59
+#define GL_FLOAT_MAT2 0x8B5A
+#define GL_FLOAT_MAT3 0x8B5B
+#define GL_FLOAT_MAT4 0x8B5C
+#define GL_SAMPLER_2D 0x8B5E
+#define GL_SAMPLER_CUBE 0x8B60
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
+#define GL_COMPILE_STATUS 0x8B81
+#define GL_INFO_LOG_LENGTH 0x8B84
+#define GL_SHADER_SOURCE_LENGTH 0x8B88
+#define GL_SHADER_COMPILER 0x8DFA
+#define GL_SHADER_BINARY_FORMATS 0x8DF8
+#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9
+#define GL_LOW_FLOAT 0x8DF0
+#define GL_MEDIUM_FLOAT 0x8DF1
+#define GL_HIGH_FLOAT 0x8DF2
+#define GL_LOW_INT 0x8DF3
+#define GL_MEDIUM_INT 0x8DF4
+#define GL_HIGH_INT 0x8DF5
+#define GL_FRAMEBUFFER 0x8D40
+#define GL_RENDERBUFFER 0x8D41
+#define GL_RGBA4 0x8056
+#define GL_RGB5_A1 0x8057
+#define GL_RGB565 0x8D62
+#define GL_DEPTH_COMPONENT16 0x81A5
+#define GL_STENCIL_INDEX8 0x8D48
+#define GL_RENDERBUFFER_WIDTH 0x8D42
+#define GL_RENDERBUFFER_HEIGHT 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44
+#define GL_RENDERBUFFER_RED_SIZE 0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
+#define GL_COLOR_ATTACHMENT0 0x8CE0
+#define GL_DEPTH_ATTACHMENT 0x8D00
+#define GL_STENCIL_ATTACHMENT 0x8D20
+#define GL_NONE 0
+#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9
+#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
+#define GL_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_RENDERBUFFER_BINDING 0x8CA7
+#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
+#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+typedef void (GL_APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (GL_APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
+typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
+typedef void (GL_APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (GL_APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (GL_APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
+typedef void (GL_APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);
+typedef void (GL_APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+typedef void (GL_APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef GLuint (GL_APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (GL_APIENTRYP PFNGLCULLFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func);
+typedef void (GL_APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag);
+typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f);
+typedef void (GL_APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GL_APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLENABLEPROC) (GLenum cap);
+typedef void (GL_APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (GL_APIENTRYP PFNGLFINISHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFLUSHPROC) (void);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GL_APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode);
+typedef void (GL_APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (GL_APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+typedef GLint (GL_APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLenum (GL_APIENTRYP PFNGLGETERRORPROC) (void);
+typedef void (GL_APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+typedef void (GL_APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer);
+typedef void (GL_APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode);
+typedef GLboolean (GL_APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDPROC) (GLenum cap);
+typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);
+typedef GLboolean (GL_APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
+typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture);
+typedef void (GL_APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width);
+typedef void (GL_APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units);
+typedef void (GL_APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+typedef void (GL_APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
+typedef void (GL_APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass);
+typedef void (GL_APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture);
+GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader);
+GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
+GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer);
+GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);
+GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);
+GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture);
+GL_APICALL void GL_APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GL_APICALL void GL_APIENTRY glBlendEquation (GLenum mode);
+GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
+GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
+GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target);
+GL_APICALL void GL_APIENTRY glClear (GLbitfield mask);
+GL_APICALL void GL_APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GL_APICALL void GL_APIENTRY glClearDepthf (GLfloat d);
+GL_APICALL void GL_APIENTRY glClearStencil (GLint s);
+GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader);
+GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL GLuint GL_APIENTRY glCreateProgram (void);
+GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type);
+GL_APICALL void GL_APIENTRY glCullFace (GLenum mode);
+GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);
+GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers);
+GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers);
+GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader);
+GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures);
+GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func);
+GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag);
+GL_APICALL void GL_APIENTRY glDepthRangef (GLfloat n, GLfloat f);
+GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader);
+GL_APICALL void GL_APIENTRY glDisable (GLenum cap);
+GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index);
+GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count);
+GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices);
+GL_APICALL void GL_APIENTRY glEnable (GLenum cap);
+GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index);
+GL_APICALL void GL_APIENTRY glFinish (void);
+GL_APICALL void GL_APIENTRY glFlush (void);
+GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode);
+GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
+GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target);
+GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers);
+GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers);
+GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint *textures);
+GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean *data);
+GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL GLenum GL_APIENTRY glGetError (void);
+GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat *data);
+GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint *data);
+GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+GL_APICALL const GLubyte *GL_APIENTRY glGetString (GLenum name);
+GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params);
+GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer);
+GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode);
+GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer);
+GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap);
+GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer);
+GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program);
+GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer);
+GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader);
+GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture);
+GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width);
+GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units);
+GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels);
+GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void);
+GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glSampleCoverage (GLfloat value, GLboolean invert);
+GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
+GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
+GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
+GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat v0);
+GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint v0);
+GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1);
+GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint v0, GLint v1);
+GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2);
+GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUseProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint index, GLfloat x);
+GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y);
+GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
+GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_ES_VERSION_2_0 */
+
+#ifndef GL_ES_VERSION_3_0
+#define GL_ES_VERSION_3_0 1
+typedef unsigned short GLhalf;
+#define GL_READ_BUFFER 0x0C02
+#define GL_UNPACK_ROW_LENGTH 0x0CF2
+#define GL_UNPACK_SKIP_ROWS 0x0CF3
+#define GL_UNPACK_SKIP_PIXELS 0x0CF4
+#define GL_PACK_ROW_LENGTH 0x0D02
+#define GL_PACK_SKIP_ROWS 0x0D03
+#define GL_PACK_SKIP_PIXELS 0x0D04
+#define GL_COLOR 0x1800
+#define GL_DEPTH 0x1801
+#define GL_STENCIL 0x1802
+#define GL_RED 0x1903
+#define GL_RGB8 0x8051
+#define GL_RGBA8 0x8058
+#define GL_RGB10_A2 0x8059
+#define GL_TEXTURE_BINDING_3D 0x806A
+#define GL_UNPACK_SKIP_IMAGES 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT 0x806E
+#define GL_TEXTURE_3D 0x806F
+#define GL_TEXTURE_WRAP_R 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE 0x8073
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+#define GL_TEXTURE_MIN_LOD 0x813A
+#define GL_TEXTURE_MAX_LOD 0x813B
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+#define GL_DEPTH_COMPONENT24 0x81A6
+#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
+#define GL_TEXTURE_COMPARE_MODE 0x884C
+#define GL_TEXTURE_COMPARE_FUNC 0x884D
+#define GL_CURRENT_QUERY 0x8865
+#define GL_QUERY_RESULT 0x8866
+#define GL_QUERY_RESULT_AVAILABLE 0x8867
+#define GL_BUFFER_MAPPED 0x88BC
+#define GL_BUFFER_MAP_POINTER 0x88BD
+#define GL_STREAM_READ 0x88E1
+#define GL_STREAM_COPY 0x88E2
+#define GL_STATIC_READ 0x88E5
+#define GL_STATIC_COPY 0x88E6
+#define GL_DYNAMIC_READ 0x88E9
+#define GL_DYNAMIC_COPY 0x88EA
+#define GL_MAX_DRAW_BUFFERS 0x8824
+#define GL_DRAW_BUFFER0 0x8825
+#define GL_DRAW_BUFFER1 0x8826
+#define GL_DRAW_BUFFER2 0x8827
+#define GL_DRAW_BUFFER3 0x8828
+#define GL_DRAW_BUFFER4 0x8829
+#define GL_DRAW_BUFFER5 0x882A
+#define GL_DRAW_BUFFER6 0x882B
+#define GL_DRAW_BUFFER7 0x882C
+#define GL_DRAW_BUFFER8 0x882D
+#define GL_DRAW_BUFFER9 0x882E
+#define GL_DRAW_BUFFER10 0x882F
+#define GL_DRAW_BUFFER11 0x8830
+#define GL_DRAW_BUFFER12 0x8831
+#define GL_DRAW_BUFFER13 0x8832
+#define GL_DRAW_BUFFER14 0x8833
+#define GL_DRAW_BUFFER15 0x8834
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
+#define GL_SAMPLER_3D 0x8B5F
+#define GL_SAMPLER_2D_SHADOW 0x8B62
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
+#define GL_PIXEL_PACK_BUFFER 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
+#define GL_FLOAT_MAT2x3 0x8B65
+#define GL_FLOAT_MAT2x4 0x8B66
+#define GL_FLOAT_MAT3x2 0x8B67
+#define GL_FLOAT_MAT3x4 0x8B68
+#define GL_FLOAT_MAT4x2 0x8B69
+#define GL_FLOAT_MAT4x3 0x8B6A
+#define GL_SRGB 0x8C40
+#define GL_SRGB8 0x8C41
+#define GL_SRGB8_ALPHA8 0x8C43
+#define GL_COMPARE_REF_TO_TEXTURE 0x884E
+#define GL_MAJOR_VERSION 0x821B
+#define GL_MINOR_VERSION 0x821C
+#define GL_NUM_EXTENSIONS 0x821D
+#define GL_RGBA32F 0x8814
+#define GL_RGB32F 0x8815
+#define GL_RGBA16F 0x881A
+#define GL_RGB16F 0x881B
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD
+#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF
+#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905
+#define GL_MAX_VARYING_COMPONENTS 0x8B4B
+#define GL_TEXTURE_2D_ARRAY 0x8C1A
+#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D
+#define GL_R11F_G11F_B10F 0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B
+#define GL_RGB9_E5 0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88
+#define GL_RASTERIZER_DISCARD 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS 0x8C8C
+#define GL_SEPARATE_ATTRIBS 0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F
+#define GL_RGBA32UI 0x8D70
+#define GL_RGB32UI 0x8D71
+#define GL_RGBA16UI 0x8D76
+#define GL_RGB16UI 0x8D77
+#define GL_RGBA8UI 0x8D7C
+#define GL_RGB8UI 0x8D7D
+#define GL_RGBA32I 0x8D82
+#define GL_RGB32I 0x8D83
+#define GL_RGBA16I 0x8D88
+#define GL_RGB16I 0x8D89
+#define GL_RGBA8I 0x8D8E
+#define GL_RGB8I 0x8D8F
+#define GL_RED_INTEGER 0x8D94
+#define GL_RGB_INTEGER 0x8D98
+#define GL_RGBA_INTEGER 0x8D99
+#define GL_SAMPLER_2D_ARRAY 0x8DC1
+#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW 0x8DC5
+#define GL_UNSIGNED_INT_VEC2 0x8DC6
+#define GL_UNSIGNED_INT_VEC3 0x8DC7
+#define GL_UNSIGNED_INT_VEC4 0x8DC8
+#define GL_INT_SAMPLER_2D 0x8DCA
+#define GL_INT_SAMPLER_3D 0x8DCB
+#define GL_INT_SAMPLER_CUBE 0x8DCC
+#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF
+#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7
+#define GL_BUFFER_ACCESS_FLAGS 0x911F
+#define GL_BUFFER_MAP_LENGTH 0x9120
+#define GL_BUFFER_MAP_OFFSET 0x9121
+#define GL_DEPTH_COMPONENT32F 0x8CAC
+#define GL_DEPTH32F_STENCIL8 0x8CAD
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
+#define GL_FRAMEBUFFER_DEFAULT 0x8218
+#define GL_FRAMEBUFFER_UNDEFINED 0x8219
+#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A
+#define GL_DEPTH_STENCIL 0x84F9
+#define GL_UNSIGNED_INT_24_8 0x84FA
+#define GL_DEPTH24_STENCIL8 0x88F0
+#define GL_UNSIGNED_NORMALIZED 0x8C17
+#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_READ_FRAMEBUFFER 0x8CA8
+#define GL_DRAW_FRAMEBUFFER 0x8CA9
+#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA
+#define GL_RENDERBUFFER_SAMPLES 0x8CAB
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
+#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF
+#define GL_COLOR_ATTACHMENT1 0x8CE1
+#define GL_COLOR_ATTACHMENT2 0x8CE2
+#define GL_COLOR_ATTACHMENT3 0x8CE3
+#define GL_COLOR_ATTACHMENT4 0x8CE4
+#define GL_COLOR_ATTACHMENT5 0x8CE5
+#define GL_COLOR_ATTACHMENT6 0x8CE6
+#define GL_COLOR_ATTACHMENT7 0x8CE7
+#define GL_COLOR_ATTACHMENT8 0x8CE8
+#define GL_COLOR_ATTACHMENT9 0x8CE9
+#define GL_COLOR_ATTACHMENT10 0x8CEA
+#define GL_COLOR_ATTACHMENT11 0x8CEB
+#define GL_COLOR_ATTACHMENT12 0x8CEC
+#define GL_COLOR_ATTACHMENT13 0x8CED
+#define GL_COLOR_ATTACHMENT14 0x8CEE
+#define GL_COLOR_ATTACHMENT15 0x8CEF
+#define GL_COLOR_ATTACHMENT16 0x8CF0
+#define GL_COLOR_ATTACHMENT17 0x8CF1
+#define GL_COLOR_ATTACHMENT18 0x8CF2
+#define GL_COLOR_ATTACHMENT19 0x8CF3
+#define GL_COLOR_ATTACHMENT20 0x8CF4
+#define GL_COLOR_ATTACHMENT21 0x8CF5
+#define GL_COLOR_ATTACHMENT22 0x8CF6
+#define GL_COLOR_ATTACHMENT23 0x8CF7
+#define GL_COLOR_ATTACHMENT24 0x8CF8
+#define GL_COLOR_ATTACHMENT25 0x8CF9
+#define GL_COLOR_ATTACHMENT26 0x8CFA
+#define GL_COLOR_ATTACHMENT27 0x8CFB
+#define GL_COLOR_ATTACHMENT28 0x8CFC
+#define GL_COLOR_ATTACHMENT29 0x8CFD
+#define GL_COLOR_ATTACHMENT30 0x8CFE
+#define GL_COLOR_ATTACHMENT31 0x8CFF
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
+#define GL_MAX_SAMPLES 0x8D57
+#define GL_HALF_FLOAT 0x140B
+#define GL_MAP_READ_BIT 0x0001
+#define GL_MAP_WRITE_BIT 0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
+#define GL_RG 0x8227
+#define GL_RG_INTEGER 0x8228
+#define GL_R8 0x8229
+#define GL_RG8 0x822B
+#define GL_R16F 0x822D
+#define GL_R32F 0x822E
+#define GL_RG16F 0x822F
+#define GL_RG32F 0x8230
+#define GL_R8I 0x8231
+#define GL_R8UI 0x8232
+#define GL_R16I 0x8233
+#define GL_R16UI 0x8234
+#define GL_R32I 0x8235
+#define GL_R32UI 0x8236
+#define GL_RG8I 0x8237
+#define GL_RG8UI 0x8238
+#define GL_RG16I 0x8239
+#define GL_RG16UI 0x823A
+#define GL_RG32I 0x823B
+#define GL_RG32UI 0x823C
+#define GL_VERTEX_ARRAY_BINDING 0x85B5
+#define GL_R8_SNORM 0x8F94
+#define GL_RG8_SNORM 0x8F95
+#define GL_RGB8_SNORM 0x8F96
+#define GL_RGBA8_SNORM 0x8F97
+#define GL_SIGNED_NORMALIZED 0x8F9C
+#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69
+#define GL_COPY_READ_BUFFER 0x8F36
+#define GL_COPY_WRITE_BUFFER 0x8F37
+#define GL_COPY_READ_BUFFER_BINDING 0x8F36
+#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37
+#define GL_UNIFORM_BUFFER 0x8A11
+#define GL_UNIFORM_BUFFER_BINDING 0x8A28
+#define GL_UNIFORM_BUFFER_START 0x8A29
+#define GL_UNIFORM_BUFFER_SIZE 0x8A2A
+#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B
+#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D
+#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E
+#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F
+#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30
+#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
+#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
+#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
+#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
+#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36
+#define GL_UNIFORM_TYPE 0x8A37
+#define GL_UNIFORM_SIZE 0x8A38
+#define GL_UNIFORM_NAME_LENGTH 0x8A39
+#define GL_UNIFORM_BLOCK_INDEX 0x8A3A
+#define GL_UNIFORM_OFFSET 0x8A3B
+#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C
+#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D
+#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E
+#define GL_UNIFORM_BLOCK_BINDING 0x8A3F
+#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40
+#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
+#define GL_INVALID_INDEX 0xFFFFFFFFu
+#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122
+#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125
+#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
+#define GL_OBJECT_TYPE 0x9112
+#define GL_SYNC_CONDITION 0x9113
+#define GL_SYNC_STATUS 0x9114
+#define GL_SYNC_FLAGS 0x9115
+#define GL_SYNC_FENCE 0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
+#define GL_UNSIGNALED 0x9118
+#define GL_SIGNALED 0x9119
+#define GL_ALREADY_SIGNALED 0x911A
+#define GL_TIMEOUT_EXPIRED 0x911B
+#define GL_CONDITION_SATISFIED 0x911C
+#define GL_WAIT_FAILED 0x911D
+#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
+#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE
+#define GL_ANY_SAMPLES_PASSED 0x8C2F
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A
+#define GL_SAMPLER_BINDING 0x8919
+#define GL_RGB10_A2UI 0x906F
+#define GL_TEXTURE_SWIZZLE_R 0x8E42
+#define GL_TEXTURE_SWIZZLE_G 0x8E43
+#define GL_TEXTURE_SWIZZLE_B 0x8E44
+#define GL_TEXTURE_SWIZZLE_A 0x8E45
+#define GL_GREEN 0x1904
+#define GL_BLUE 0x1905
+#define GL_INT_2_10_10_10_REV 0x8D9F
+#define GL_TRANSFORM_FEEDBACK 0x8E22
+#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23
+#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25
+#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
+#define GL_PROGRAM_BINARY_LENGTH 0x8741
+#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
+#define GL_PROGRAM_BINARY_FORMATS 0x87FF
+#define GL_COMPRESSED_R11_EAC 0x9270
+#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271
+#define GL_COMPRESSED_RG11_EAC 0x9272
+#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273
+#define GL_COMPRESSED_RGB8_ETC2 0x9274
+#define GL_COMPRESSED_SRGB8_ETC2 0x9275
+#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
+#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277
+#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278
+#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279
+#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F
+#define GL_MAX_ELEMENT_INDEX 0x8D6B
+#define GL_NUM_SAMPLE_COUNTS 0x9380
+#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
+typedef void (GL_APIENTRYP PFNGLREADBUFFERPROC) (GLenum src);
+typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (GL_APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (GL_APIENTRYP PFNGLISQUERYPROC) (GLuint id);
+typedef void (GL_APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLENDQUERYPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);
+typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params);
+typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
+typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
+typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays);
+typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array);
+typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (GL_APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode);
+typedef void (GL_APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+typedef void (GL_APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GL_APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
+typedef void (GL_APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+typedef GLuint (GL_APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+typedef void (GL_APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
+typedef GLboolean (GL_APIENTRYP PFNGLISSYNCPROC) (GLsync sync);
+typedef void (GL_APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync);
+typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data);
+typedef void (GL_APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+typedef void (GL_APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);
+typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params);
+typedef void (GL_APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers);
+typedef void (GL_APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers);
+typedef GLboolean (GL_APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor);
+typedef void (GL_APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id);
+typedef void (GL_APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids);
+typedef void (GL_APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (GL_APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id);
+typedef void (GL_APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (GL_APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+typedef void (GL_APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (GL_APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glReadBuffer (GLenum src);
+GL_APICALL void GL_APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+GL_APICALL void GL_APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GL_APICALL void GL_APIENTRY glGenQueries (GLsizei n, GLuint *ids);
+GL_APICALL void GL_APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids);
+GL_APICALL GLboolean GL_APIENTRY glIsQuery (GLuint id);
+GL_APICALL void GL_APIENTRY glBeginQuery (GLenum target, GLuint id);
+GL_APICALL void GL_APIENTRY glEndQuery (GLenum target);
+GL_APICALL void GL_APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params);
+GL_APICALL GLboolean GL_APIENTRY glUnmapBuffer (GLenum target);
+GL_APICALL void GL_APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params);
+GL_APICALL void GL_APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs);
+GL_APICALL void GL_APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GL_APICALL void *GL_APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GL_APICALL void GL_APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length);
+GL_APICALL void GL_APIENTRY glBindVertexArray (GLuint array);
+GL_APICALL void GL_APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays);
+GL_APICALL void GL_APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays);
+GL_APICALL GLboolean GL_APIENTRY glIsVertexArray (GLuint array);
+GL_APICALL void GL_APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data);
+GL_APICALL void GL_APIENTRY glBeginTransformFeedback (GLenum primitiveMode);
+GL_APICALL void GL_APIENTRY glEndTransformFeedback (void);
+GL_APICALL void GL_APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GL_APICALL void GL_APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer);
+GL_APICALL void GL_APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+GL_APICALL void GL_APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GL_APICALL void GL_APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GL_APICALL void GL_APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w);
+GL_APICALL void GL_APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GL_APICALL void GL_APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v);
+GL_APICALL void GL_APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v);
+GL_APICALL void GL_APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params);
+GL_APICALL GLint GL_APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name);
+GL_APICALL void GL_APIENTRY glUniform1ui (GLint location, GLuint v0);
+GL_APICALL void GL_APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1);
+GL_APICALL void GL_APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2);
+GL_APICALL void GL_APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GL_APICALL void GL_APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value);
+GL_APICALL void GL_APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value);
+GL_APICALL void GL_APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+GL_APICALL const GLubyte *GL_APIENTRY glGetStringi (GLenum name, GLuint index);
+GL_APICALL void GL_APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GL_APICALL void GL_APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+GL_APICALL void GL_APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+GL_APICALL GLuint GL_APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName);
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+GL_APICALL void GL_APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+GL_APICALL void GL_APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+GL_APICALL void GL_APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+GL_APICALL GLsync GL_APIENTRY glFenceSync (GLenum condition, GLbitfield flags);
+GL_APICALL GLboolean GL_APIENTRY glIsSync (GLsync sync);
+GL_APICALL void GL_APIENTRY glDeleteSync (GLsync sync);
+GL_APICALL GLenum GL_APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GL_APICALL void GL_APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GL_APICALL void GL_APIENTRY glGetInteger64v (GLenum pname, GLint64 *data);
+GL_APICALL void GL_APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+GL_APICALL void GL_APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data);
+GL_APICALL void GL_APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params);
+GL_APICALL void GL_APIENTRY glGenSamplers (GLsizei count, GLuint *samplers);
+GL_APICALL void GL_APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers);
+GL_APICALL GLboolean GL_APIENTRY glIsSampler (GLuint sampler);
+GL_APICALL void GL_APIENTRY glBindSampler (GLuint unit, GLuint sampler);
+GL_APICALL void GL_APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param);
+GL_APICALL void GL_APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param);
+GL_APICALL void GL_APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param);
+GL_APICALL void GL_APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor);
+GL_APICALL void GL_APIENTRY glBindTransformFeedback (GLenum target, GLuint id);
+GL_APICALL void GL_APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids);
+GL_APICALL void GL_APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids);
+GL_APICALL GLboolean GL_APIENTRY glIsTransformFeedback (GLuint id);
+GL_APICALL void GL_APIENTRY glPauseTransformFeedback (void);
+GL_APICALL void GL_APIENTRY glResumeTransformFeedback (void);
+GL_APICALL void GL_APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+GL_APICALL void GL_APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+GL_APICALL void GL_APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value);
+GL_APICALL void GL_APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+GL_APICALL void GL_APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GL_APICALL void GL_APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#endif
+#endif /* GL_ES_VERSION_3_0 */
+
+#ifndef GL_ES_VERSION_3_1
+#define GL_ES_VERSION_3_1 1
+#define GL_COMPUTE_SHADER 0x91B9
+#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB
+#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC
+#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD
+#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262
+#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263
+#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264
+#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265
+#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266
+#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB
+#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE
+#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF
+#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267
+#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE
+#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF
+#define GL_COMPUTE_SHADER_BIT 0x00000020
+#define GL_DRAW_INDIRECT_BUFFER 0x8F3F
+#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43
+#define GL_MAX_UNIFORM_LOCATIONS 0x826E
+#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310
+#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311
+#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313
+#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314
+#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315
+#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316
+#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318
+#define GL_UNIFORM 0x92E1
+#define GL_UNIFORM_BLOCK 0x92E2
+#define GL_PROGRAM_INPUT 0x92E3
+#define GL_PROGRAM_OUTPUT 0x92E4
+#define GL_BUFFER_VARIABLE 0x92E5
+#define GL_SHADER_STORAGE_BLOCK 0x92E6
+#define GL_ATOMIC_COUNTER_BUFFER 0x92C0
+#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4
+#define GL_ACTIVE_RESOURCES 0x92F5
+#define GL_MAX_NAME_LENGTH 0x92F6
+#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7
+#define GL_NAME_LENGTH 0x92F9
+#define GL_TYPE 0x92FA
+#define GL_ARRAY_SIZE 0x92FB
+#define GL_OFFSET 0x92FC
+#define GL_BLOCK_INDEX 0x92FD
+#define GL_ARRAY_STRIDE 0x92FE
+#define GL_MATRIX_STRIDE 0x92FF
+#define GL_IS_ROW_MAJOR 0x9300
+#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301
+#define GL_BUFFER_BINDING 0x9302
+#define GL_BUFFER_DATA_SIZE 0x9303
+#define GL_NUM_ACTIVE_VARIABLES 0x9304
+#define GL_ACTIVE_VARIABLES 0x9305
+#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306
+#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A
+#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B
+#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C
+#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D
+#define GL_LOCATION 0x930E
+#define GL_VERTEX_SHADER_BIT 0x00000001
+#define GL_FRAGMENT_SHADER_BIT 0x00000002
+#define GL_ALL_SHADER_BITS 0xFFFFFFFF
+#define GL_PROGRAM_SEPARABLE 0x8258
+#define GL_ACTIVE_PROGRAM 0x8259
+#define GL_PROGRAM_PIPELINE_BINDING 0x825A
+#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1
+#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2
+#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3
+#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0
+#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1
+#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6
+#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC
+#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9
+#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB
+#define GL_MAX_IMAGE_UNITS 0x8F38
+#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA
+#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE
+#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF
+#define GL_IMAGE_BINDING_NAME 0x8F3A
+#define GL_IMAGE_BINDING_LEVEL 0x8F3B
+#define GL_IMAGE_BINDING_LAYERED 0x8F3C
+#define GL_IMAGE_BINDING_LAYER 0x8F3D
+#define GL_IMAGE_BINDING_ACCESS 0x8F3E
+#define GL_IMAGE_BINDING_FORMAT 0x906E
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001
+#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002
+#define GL_UNIFORM_BARRIER_BIT 0x00000004
+#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020
+#define GL_COMMAND_BARRIER_BIT 0x00000040
+#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080
+#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100
+#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200
+#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800
+#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000
+#define GL_ALL_BARRIER_BITS 0xFFFFFFFF
+#define GL_IMAGE_2D 0x904D
+#define GL_IMAGE_3D 0x904E
+#define GL_IMAGE_CUBE 0x9050
+#define GL_IMAGE_2D_ARRAY 0x9053
+#define GL_INT_IMAGE_2D 0x9058
+#define GL_INT_IMAGE_3D 0x9059
+#define GL_INT_IMAGE_CUBE 0x905B
+#define GL_INT_IMAGE_2D_ARRAY 0x905E
+#define GL_UNSIGNED_INT_IMAGE_2D 0x9063
+#define GL_UNSIGNED_INT_IMAGE_3D 0x9064
+#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069
+#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9
+#define GL_READ_ONLY 0x88B8
+#define GL_WRITE_ONLY 0x88B9
+#define GL_READ_WRITE 0x88BA
+#define GL_SHADER_STORAGE_BUFFER 0x90D2
+#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3
+#define GL_SHADER_STORAGE_BUFFER_START 0x90D4
+#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5
+#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6
+#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA
+#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB
+#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC
+#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD
+#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE
+#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF
+#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000
+#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39
+#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA
+#define GL_STENCIL_INDEX 0x1901
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F
+#define GL_SAMPLE_POSITION 0x8E50
+#define GL_SAMPLE_MASK 0x8E51
+#define GL_SAMPLE_MASK_VALUE 0x8E52
+#define GL_TEXTURE_2D_MULTISAMPLE 0x9100
+#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59
+#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E
+#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F
+#define GL_MAX_INTEGER_SAMPLES 0x9110
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104
+#define GL_TEXTURE_SAMPLES 0x9106
+#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107
+#define GL_TEXTURE_WIDTH 0x1000
+#define GL_TEXTURE_HEIGHT 0x1001
+#define GL_TEXTURE_DEPTH 0x8071
+#define GL_TEXTURE_INTERNAL_FORMAT 0x1003
+#define GL_TEXTURE_RED_SIZE 0x805C
+#define GL_TEXTURE_GREEN_SIZE 0x805D
+#define GL_TEXTURE_BLUE_SIZE 0x805E
+#define GL_TEXTURE_ALPHA_SIZE 0x805F
+#define GL_TEXTURE_DEPTH_SIZE 0x884A
+#define GL_TEXTURE_STENCIL_SIZE 0x88F1
+#define GL_TEXTURE_SHARED_SIZE 0x8C3F
+#define GL_TEXTURE_RED_TYPE 0x8C10
+#define GL_TEXTURE_GREEN_TYPE 0x8C11
+#define GL_TEXTURE_BLUE_TYPE 0x8C12
+#define GL_TEXTURE_ALPHA_TYPE 0x8C13
+#define GL_TEXTURE_DEPTH_TYPE 0x8C16
+#define GL_TEXTURE_COMPRESSED 0x86A1
+#define GL_SAMPLER_2D_MULTISAMPLE 0x9108
+#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A
+#define GL_VERTEX_ATTRIB_BINDING 0x82D4
+#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5
+#define GL_VERTEX_BINDING_DIVISOR 0x82D6
+#define GL_VERTEX_BINDING_OFFSET 0x82D7
+#define GL_VERTEX_BINDING_STRIDE 0x82D8
+#define GL_VERTEX_BINDING_BUFFER 0x8F4F
+#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9
+#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA
+#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5
+typedef void (GL_APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+typedef void (GL_APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect);
+typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+typedef GLuint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+typedef GLint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program);
+typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program);
+typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings);
+typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines);
+typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines);
+typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (GL_APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+typedef void (GL_APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data);
+typedef void (GL_APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers);
+typedef void (GL_APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC) (GLbitfield barriers);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (GL_APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val);
+typedef void (GL_APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask);
+typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC) (GLenum target, GLint level, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC) (GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex);
+typedef void (GL_APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+GL_APICALL void GL_APIENTRY glDispatchComputeIndirect (GLintptr indirect);
+GL_APICALL void GL_APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect);
+GL_APICALL void GL_APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect);
+GL_APICALL void GL_APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param);
+GL_APICALL void GL_APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+GL_APICALL GLuint GL_APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+GL_APICALL void GL_APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+GL_APICALL GLint GL_APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name);
+GL_APICALL void GL_APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program);
+GL_APICALL void GL_APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program);
+GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings);
+GL_APICALL void GL_APIENTRY glBindProgramPipeline (GLuint pipeline);
+GL_APICALL void GL_APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines);
+GL_APICALL void GL_APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines);
+GL_APICALL GLboolean GL_APIENTRY glIsProgramPipeline (GLuint pipeline);
+GL_APICALL void GL_APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0);
+GL_APICALL void GL_APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1);
+GL_APICALL void GL_APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GL_APICALL void GL_APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GL_APICALL void GL_APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0);
+GL_APICALL void GL_APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1);
+GL_APICALL void GL_APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GL_APICALL void GL_APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GL_APICALL void GL_APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0);
+GL_APICALL void GL_APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GL_APICALL void GL_APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GL_APICALL void GL_APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GL_APICALL void GL_APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glValidateProgramPipeline (GLuint pipeline);
+GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+GL_APICALL void GL_APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data);
+GL_APICALL void GL_APIENTRY glMemoryBarrier (GLbitfield barriers);
+GL_APICALL void GL_APIENTRY glMemoryBarrierByRegion (GLbitfield barriers);
+GL_APICALL void GL_APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GL_APICALL void GL_APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val);
+GL_APICALL void GL_APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask);
+GL_APICALL void GL_APIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params);
+GL_APICALL void GL_APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GL_APICALL void GL_APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GL_APICALL void GL_APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GL_APICALL void GL_APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex);
+GL_APICALL void GL_APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor);
+#endif
+#endif /* GL_ES_VERSION_3_1 */
+
+#ifndef GL_ES_VERSION_3_2
+#define GL_ES_VERSION_3_2 1
+typedef void (GL_APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+#define GL_MULTISAMPLE_LINE_WIDTH_RANGE 0x9381
+#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY 0x9382
+#define GL_MULTIPLY 0x9294
+#define GL_SCREEN 0x9295
+#define GL_OVERLAY 0x9296
+#define GL_DARKEN 0x9297
+#define GL_LIGHTEN 0x9298
+#define GL_COLORDODGE 0x9299
+#define GL_COLORBURN 0x929A
+#define GL_HARDLIGHT 0x929B
+#define GL_SOFTLIGHT 0x929C
+#define GL_DIFFERENCE 0x929E
+#define GL_EXCLUSION 0x92A0
+#define GL_HSL_HUE 0x92AD
+#define GL_HSL_SATURATION 0x92AE
+#define GL_HSL_COLOR 0x92AF
+#define GL_HSL_LUMINOSITY 0x92B0
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION 0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245
+#define GL_DEBUG_SOURCE_API 0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249
+#define GL_DEBUG_SOURCE_APPLICATION 0x824A
+#define GL_DEBUG_SOURCE_OTHER 0x824B
+#define GL_DEBUG_TYPE_ERROR 0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E
+#define GL_DEBUG_TYPE_PORTABILITY 0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE 0x8250
+#define GL_DEBUG_TYPE_OTHER 0x8251
+#define GL_DEBUG_TYPE_MARKER 0x8268
+#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269
+#define GL_DEBUG_TYPE_POP_GROUP 0x826A
+#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B
+#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C
+#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D
+#define GL_BUFFER 0x82E0
+#define GL_SHADER 0x82E1
+#define GL_PROGRAM 0x82E2
+#define GL_VERTEX_ARRAY 0x8074
+#define GL_QUERY 0x82E3
+#define GL_PROGRAM_PIPELINE 0x82E4
+#define GL_SAMPLER 0x82E6
+#define GL_MAX_LABEL_LENGTH 0x82E8
+#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144
+#define GL_DEBUG_LOGGED_MESSAGES 0x9145
+#define GL_DEBUG_SEVERITY_HIGH 0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM 0x9147
+#define GL_DEBUG_SEVERITY_LOW 0x9148
+#define GL_DEBUG_OUTPUT 0x92E0
+#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002
+#define GL_STACK_OVERFLOW 0x0503
+#define GL_STACK_UNDERFLOW 0x0504
+#define GL_GEOMETRY_SHADER 0x8DD9
+#define GL_GEOMETRY_SHADER_BIT 0x00000004
+#define GL_GEOMETRY_VERTICES_OUT 0x8916
+#define GL_GEOMETRY_INPUT_TYPE 0x8917
+#define GL_GEOMETRY_OUTPUT_TYPE 0x8918
+#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F
+#define GL_LAYER_PROVOKING_VERTEX 0x825E
+#define GL_LINES_ADJACENCY 0x000A
+#define GL_LINE_STRIP_ADJACENCY 0x000B
+#define GL_TRIANGLES_ADJACENCY 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7
+#define GL_FIRST_VERTEX_CONVENTION 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION 0x8E4E
+#define GL_UNDEFINED_VERTEX 0x8260
+#define GL_PRIMITIVES_GENERATED 0x8C87
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312
+#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7
+#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309
+#define GL_PRIMITIVE_BOUNDING_BOX 0x92BE
+#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004
+#define GL_CONTEXT_FLAGS 0x821E
+#define GL_LOSE_CONTEXT_ON_RESET 0x8252
+#define GL_GUILTY_CONTEXT_RESET 0x8253
+#define GL_INNOCENT_CONTEXT_RESET 0x8254
+#define GL_UNKNOWN_CONTEXT_RESET 0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY 0x8256
+#define GL_NO_RESET_NOTIFICATION 0x8261
+#define GL_CONTEXT_LOST 0x0507
+#define GL_SAMPLE_SHADING 0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D
+#define GL_PATCHES 0x000E
+#define GL_PATCH_VERTICES 0x8E72
+#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75
+#define GL_TESS_GEN_MODE 0x8E76
+#define GL_TESS_GEN_SPACING 0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER 0x8E78
+#define GL_TESS_GEN_POINT_MODE 0x8E79
+#define GL_ISOLINES 0x8E7A
+#define GL_QUADS 0x0007
+#define GL_FRACTIONAL_ODD 0x8E7B
+#define GL_FRACTIONAL_EVEN 0x8E7C
+#define GL_MAX_PATCH_VERTICES 0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL 0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9
+#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221
+#define GL_IS_PER_PATCH 0x92E7
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308
+#define GL_TESS_CONTROL_SHADER 0x8E88
+#define GL_TESS_EVALUATION_SHADER 0x8E87
+#define GL_TESS_CONTROL_SHADER_BIT 0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010
+#define GL_TEXTURE_BORDER_COLOR 0x1004
+#define GL_CLAMP_TO_BORDER 0x812D
+#define GL_TEXTURE_BUFFER 0x8C2A
+#define GL_TEXTURE_BUFFER_BINDING 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F
+#define GL_SAMPLER_BUFFER 0x8DC2
+#define GL_INT_SAMPLER_BUFFER 0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8
+#define GL_IMAGE_BUFFER 0x9051
+#define GL_INT_IMAGE_BUFFER 0x905C
+#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067
+#define GL_TEXTURE_BUFFER_OFFSET 0x919D
+#define GL_TEXTURE_BUFFER_SIZE 0x919E
+#define GL_COMPRESSED_RGBA_ASTC_4x4 0x93B0
+#define GL_COMPRESSED_RGBA_ASTC_5x4 0x93B1
+#define GL_COMPRESSED_RGBA_ASTC_5x5 0x93B2
+#define GL_COMPRESSED_RGBA_ASTC_6x5 0x93B3
+#define GL_COMPRESSED_RGBA_ASTC_6x6 0x93B4
+#define GL_COMPRESSED_RGBA_ASTC_8x5 0x93B5
+#define GL_COMPRESSED_RGBA_ASTC_8x6 0x93B6
+#define GL_COMPRESSED_RGBA_ASTC_8x8 0x93B7
+#define GL_COMPRESSED_RGBA_ASTC_10x5 0x93B8
+#define GL_COMPRESSED_RGBA_ASTC_10x6 0x93B9
+#define GL_COMPRESSED_RGBA_ASTC_10x8 0x93BA
+#define GL_COMPRESSED_RGBA_ASTC_10x10 0x93BB
+#define GL_COMPRESSED_RGBA_ASTC_12x10 0x93BC
+#define GL_COMPRESSED_RGBA_ASTC_12x12 0x93BD
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4 0x93D0
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4 0x93D1
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5 0x93D2
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5 0x93D3
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6 0x93D4
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5 0x93D5
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6 0x93D6
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8 0x93D7
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5 0x93D8
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6 0x93D9
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8 0x93DA
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10 0x93DB
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10 0x93DC
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12 0x93DD
+#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A
+#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F
+#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105
+#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B
+#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D
+typedef void (GL_APIENTRYP PFNGLBLENDBARRIERPROC) (void);
+typedef void (GL_APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam);
+typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void);
+typedef void (GL_APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label);
+typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+typedef void (GL_APIENTRYP PFNGLGETPOINTERVPROC) (GLenum pname, void **params);
+typedef void (GL_APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode);
+typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (GL_APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (GL_APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC) (void);
+typedef void (GL_APIENTRYP PFNGLREADNPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETNUNIFORMUIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value);
+typedef void (GL_APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params);
+typedef void (GL_APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (GL_APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+#if GL_GLES_PROTOTYPES
+GL_APICALL void GL_APIENTRY glBlendBarrier (void);
+GL_APICALL void GL_APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+GL_APICALL void GL_APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GL_APICALL void GL_APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+GL_APICALL void GL_APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam);
+GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+GL_APICALL void GL_APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+GL_APICALL void GL_APIENTRY glPopDebugGroup (void);
+GL_APICALL void GL_APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+GL_APICALL void GL_APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+GL_APICALL void GL_APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label);
+GL_APICALL void GL_APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+GL_APICALL void GL_APIENTRY glGetPointerv (GLenum pname, void **params);
+GL_APICALL void GL_APIENTRY glEnablei (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glDisablei (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glBlendEquationi (GLuint buf, GLenum mode);
+GL_APICALL void GL_APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GL_APICALL void GL_APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst);
+GL_APICALL void GL_APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GL_APICALL void GL_APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+GL_APICALL GLboolean GL_APIENTRY glIsEnabledi (GLenum target, GLuint index);
+GL_APICALL void GL_APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GL_APICALL void GL_APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+GL_APICALL void GL_APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level);
+GL_APICALL void GL_APIENTRY glPrimitiveBoundingBox (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatus (void);
+GL_APICALL void GL_APIENTRY glReadnPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+GL_APICALL void GL_APIENTRY glGetnUniformfv (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+GL_APICALL void GL_APIENTRY glGetnUniformiv (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+GL_APICALL void GL_APIENTRY glGetnUniformuiv (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+GL_APICALL void GL_APIENTRY glMinSampleShading (GLfloat value);
+GL_APICALL void GL_APIENTRY glPatchParameteri (GLenum pname, GLint value);
+GL_APICALL void GL_APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params);
+GL_APICALL void GL_APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params);
+GL_APICALL void GL_APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param);
+GL_APICALL void GL_APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer);
+GL_APICALL void GL_APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GL_APICALL void GL_APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+#endif
+#endif /* GL_ES_VERSION_3_2 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl3ext.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl3ext.h
new file mode 100644
index 00000000..4d4ea96c
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl3ext.h
@@ -0,0 +1,24 @@
+#ifndef __gl3ext_h_
+#define __gl3ext_h_
+
+/* $Revision: 17809 $ on $Date:: 2012-05-14 08:03:36 -0700 #$ */
+
+/*
+ * This document is licensed under the SGI Free Software B License Version
+ * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
+ */
+
+/* OpenGL ES 3 Extensions
+ *
+ * After an OES extension's interactions with OpenGl ES 3.0 have been documented,
+ * its tokens and function definitions should be added to this file in a manner
+ * that does not conflict with gl2ext.h or gl3.h.
+ *
+ * Tokens and function definitions for extensions that have become standard
+ * features in OpenGL ES 3.0 will not be added to this file.
+ *
+ * Applications using OpenGL-ES-2-only extensions should include gl2ext.h
+ */
+
+#endif /* __gl3ext_h_ */
+
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl3platform.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl3platform.h
new file mode 100644
index 00000000..b1e869dd
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Android/jni/GLES3/gl3platform.h
@@ -0,0 +1,30 @@
+#ifndef __gl3platform_h_
+#define __gl3platform_h_
+
+/* $Revision: 23328 $ on $Date:: 2013-10-02 02:28:28 -0700 #$ */
+
+/*
+ * This document is licensed under the SGI Free Software B License Version
+ * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
+ */
+
+/* Platform-specific types and definitions for OpenGL ES 3.X gl3.h
+ *
+ * Adopters may modify khrplatform.h and this file to suit their platform.
+ * You are encouraged to submit all modifications to the Khronos group so that
+ * they can be included in future versions of this file. Please submit changes
+ * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla)
+ * by filing a bug against product "OpenGL-ES" component "Registry".
+ */
+
+#include <KHR/khrplatform.h>
+
+#ifndef GL_APICALL
+#define GL_APICALL KHRONOS_APICALL
+#endif
+
+#ifndef GL_APIENTRY
+#define GL_APIENTRY KHRONOS_APIENTRY
+#endif
+
+#endif /* __gl3platform_h_ */
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/gl.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/gl.h
new file mode 100644
index 00000000..1d2cd0ad
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/gl.h
@@ -0,0 +1,1543 @@
+/*
+** NOTE: This is a version of gl.h extracted from Visual C++ 7.1 checked in
+** to the source tree so Linux and Windows builds can use the same headers.
+** The only modification to the file is to define "WINGDIAPI" and "APIENTRY"
+** for non-Win32 builds.
+*/
+
+/*++ BUILD Version: 0004 // Increment this if a change has global effects
+
+Copyright (c) 1985-96, Microsoft Corporation
+
+Module Name:
+
+ gl.h
+
+Abstract:
+
+ Procedure declarations, constant definitions and macros for the OpenGL
+ component.
+
+--*/
+
+#ifndef __gl_h_
+#ifndef __GL_H__
+
+#define __gl_h_
+#define __GL_H__
+
+#if !defined (_WIN32)
+#define WINGDIAPI
+#define APIENTRY
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright 1996 Silicon Graphics, Inc.
+** All Rights Reserved.
+**
+** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
+** the contents of this file may not be disclosed to third parties, copied or
+** duplicated in any form, in whole or in part, without the prior written
+** permission of Silicon Graphics, Inc.
+**
+** RESTRICTED RIGHTS LEGEND:
+** Use, duplication or disclosure by the Government is subject to restrictions
+** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
+** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
+** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
+** rights reserved under the Copyright Laws of the United States.
+*/
+
+typedef unsigned int GLenum;
+typedef unsigned char GLboolean;
+typedef unsigned int GLbitfield;
+typedef signed char GLbyte;
+typedef short GLshort;
+typedef int GLint;
+typedef int GLsizei;
+typedef unsigned char GLubyte;
+typedef unsigned short GLushort;
+typedef unsigned int GLuint;
+typedef float GLfloat;
+typedef float GLclampf;
+typedef double GLdouble;
+typedef double GLclampd;
+typedef void GLvoid;
+
+/*************************************************************/
+
+/* Version */
+#define GL_VERSION_1_1 1
+
+/* AccumOp */
+#define GL_ACCUM 0x0100
+#define GL_LOAD 0x0101
+#define GL_RETURN 0x0102
+#define GL_MULT 0x0103
+#define GL_ADD 0x0104
+
+/* AlphaFunction */
+#define GL_NEVER 0x0200
+#define GL_LESS 0x0201
+#define GL_EQUAL 0x0202
+#define GL_LEQUAL 0x0203
+#define GL_GREATER 0x0204
+#define GL_NOTEQUAL 0x0205
+#define GL_GEQUAL 0x0206
+#define GL_ALWAYS 0x0207
+
+/* AttribMask */
+#define GL_CURRENT_BIT 0x00000001
+#define GL_POINT_BIT 0x00000002
+#define GL_LINE_BIT 0x00000004
+#define GL_POLYGON_BIT 0x00000008
+#define GL_POLYGON_STIPPLE_BIT 0x00000010
+#define GL_PIXEL_MODE_BIT 0x00000020
+#define GL_LIGHTING_BIT 0x00000040
+#define GL_FOG_BIT 0x00000080
+#define GL_DEPTH_BUFFER_BIT 0x00000100
+#define GL_ACCUM_BUFFER_BIT 0x00000200
+#define GL_STENCIL_BUFFER_BIT 0x00000400
+#define GL_VIEWPORT_BIT 0x00000800
+#define GL_TRANSFORM_BIT 0x00001000
+#define GL_ENABLE_BIT 0x00002000
+#define GL_COLOR_BUFFER_BIT 0x00004000
+#define GL_HINT_BIT 0x00008000
+#define GL_EVAL_BIT 0x00010000
+#define GL_LIST_BIT 0x00020000
+#define GL_TEXTURE_BIT 0x00040000
+#define GL_SCISSOR_BIT 0x00080000
+#define GL_ALL_ATTRIB_BITS 0x000fffff
+
+/* BeginMode */
+#define GL_POINTS 0x0000
+#define GL_LINES 0x0001
+#define GL_LINE_LOOP 0x0002
+#define GL_LINE_STRIP 0x0003
+#define GL_TRIANGLES 0x0004
+#define GL_TRIANGLE_STRIP 0x0005
+#define GL_TRIANGLE_FAN 0x0006
+#define GL_QUADS 0x0007
+#define GL_QUAD_STRIP 0x0008
+#define GL_POLYGON 0x0009
+
+/* BlendingFactorDest */
+#define GL_ZERO 0
+#define GL_ONE 1
+#define GL_SRC_COLOR 0x0300
+#define GL_ONE_MINUS_SRC_COLOR 0x0301
+#define GL_SRC_ALPHA 0x0302
+#define GL_ONE_MINUS_SRC_ALPHA 0x0303
+#define GL_DST_ALPHA 0x0304
+#define GL_ONE_MINUS_DST_ALPHA 0x0305
+
+/* BlendingFactorSrc */
+/* GL_ZERO */
+/* GL_ONE */
+#define GL_DST_COLOR 0x0306
+#define GL_ONE_MINUS_DST_COLOR 0x0307
+#define GL_SRC_ALPHA_SATURATE 0x0308
+/* GL_SRC_ALPHA */
+/* GL_ONE_MINUS_SRC_ALPHA */
+/* GL_DST_ALPHA */
+/* GL_ONE_MINUS_DST_ALPHA */
+
+/* Boolean */
+#define GL_TRUE 1
+#define GL_FALSE 0
+
+/* ClearBufferMask */
+/* GL_COLOR_BUFFER_BIT */
+/* GL_ACCUM_BUFFER_BIT */
+/* GL_STENCIL_BUFFER_BIT */
+/* GL_DEPTH_BUFFER_BIT */
+
+/* ClientArrayType */
+/* GL_VERTEX_ARRAY */
+/* GL_NORMAL_ARRAY */
+/* GL_COLOR_ARRAY */
+/* GL_INDEX_ARRAY */
+/* GL_TEXTURE_COORD_ARRAY */
+/* GL_EDGE_FLAG_ARRAY */
+
+/* ClipPlaneName */
+#define GL_CLIP_PLANE0 0x3000
+#define GL_CLIP_PLANE1 0x3001
+#define GL_CLIP_PLANE2 0x3002
+#define GL_CLIP_PLANE3 0x3003
+#define GL_CLIP_PLANE4 0x3004
+#define GL_CLIP_PLANE5 0x3005
+
+/* ColorMaterialFace */
+/* GL_FRONT */
+/* GL_BACK */
+/* GL_FRONT_AND_BACK */
+
+/* ColorMaterialParameter */
+/* GL_AMBIENT */
+/* GL_DIFFUSE */
+/* GL_SPECULAR */
+/* GL_EMISSION */
+/* GL_AMBIENT_AND_DIFFUSE */
+
+/* ColorPointerType */
+/* GL_BYTE */
+/* GL_UNSIGNED_BYTE */
+/* GL_SHORT */
+/* GL_UNSIGNED_SHORT */
+/* GL_INT */
+/* GL_UNSIGNED_INT */
+/* GL_FLOAT */
+/* GL_DOUBLE */
+
+/* CullFaceMode */
+/* GL_FRONT */
+/* GL_BACK */
+/* GL_FRONT_AND_BACK */
+
+/* DataType */
+#define GL_BYTE 0x1400
+#define GL_UNSIGNED_BYTE 0x1401
+#define GL_SHORT 0x1402
+#define GL_UNSIGNED_SHORT 0x1403
+#define GL_INT 0x1404
+#define GL_UNSIGNED_INT 0x1405
+#define GL_FLOAT 0x1406
+#define GL_2_BYTES 0x1407
+#define GL_3_BYTES 0x1408
+#define GL_4_BYTES 0x1409
+#define GL_DOUBLE 0x140A
+
+/* DepthFunction */
+/* GL_NEVER */
+/* GL_LESS */
+/* GL_EQUAL */
+/* GL_LEQUAL */
+/* GL_GREATER */
+/* GL_NOTEQUAL */
+/* GL_GEQUAL */
+/* GL_ALWAYS */
+
+/* DrawBufferMode */
+#define GL_NONE 0
+#define GL_FRONT_LEFT 0x0400
+#define GL_FRONT_RIGHT 0x0401
+#define GL_BACK_LEFT 0x0402
+#define GL_BACK_RIGHT 0x0403
+#define GL_FRONT 0x0404
+#define GL_BACK 0x0405
+#define GL_LEFT 0x0406
+#define GL_RIGHT 0x0407
+#define GL_FRONT_AND_BACK 0x0408
+#define GL_AUX0 0x0409
+#define GL_AUX1 0x040A
+#define GL_AUX2 0x040B
+#define GL_AUX3 0x040C
+
+/* Enable */
+/* GL_FOG */
+/* GL_LIGHTING */
+/* GL_TEXTURE_1D */
+/* GL_TEXTURE_2D */
+/* GL_LINE_STIPPLE */
+/* GL_POLYGON_STIPPLE */
+/* GL_CULL_FACE */
+/* GL_ALPHA_TEST */
+/* GL_BLEND */
+/* GL_INDEX_LOGIC_OP */
+/* GL_COLOR_LOGIC_OP */
+/* GL_DITHER */
+/* GL_STENCIL_TEST */
+/* GL_DEPTH_TEST */
+/* GL_CLIP_PLANE0 */
+/* GL_CLIP_PLANE1 */
+/* GL_CLIP_PLANE2 */
+/* GL_CLIP_PLANE3 */
+/* GL_CLIP_PLANE4 */
+/* GL_CLIP_PLANE5 */
+/* GL_LIGHT0 */
+/* GL_LIGHT1 */
+/* GL_LIGHT2 */
+/* GL_LIGHT3 */
+/* GL_LIGHT4 */
+/* GL_LIGHT5 */
+/* GL_LIGHT6 */
+/* GL_LIGHT7 */
+/* GL_TEXTURE_GEN_S */
+/* GL_TEXTURE_GEN_T */
+/* GL_TEXTURE_GEN_R */
+/* GL_TEXTURE_GEN_Q */
+/* GL_MAP1_VERTEX_3 */
+/* GL_MAP1_VERTEX_4 */
+/* GL_MAP1_COLOR_4 */
+/* GL_MAP1_INDEX */
+/* GL_MAP1_NORMAL */
+/* GL_MAP1_TEXTURE_COORD_1 */
+/* GL_MAP1_TEXTURE_COORD_2 */
+/* GL_MAP1_TEXTURE_COORD_3 */
+/* GL_MAP1_TEXTURE_COORD_4 */
+/* GL_MAP2_VERTEX_3 */
+/* GL_MAP2_VERTEX_4 */
+/* GL_MAP2_COLOR_4 */
+/* GL_MAP2_INDEX */
+/* GL_MAP2_NORMAL */
+/* GL_MAP2_TEXTURE_COORD_1 */
+/* GL_MAP2_TEXTURE_COORD_2 */
+/* GL_MAP2_TEXTURE_COORD_3 */
+/* GL_MAP2_TEXTURE_COORD_4 */
+/* GL_POINT_SMOOTH */
+/* GL_LINE_SMOOTH */
+/* GL_POLYGON_SMOOTH */
+/* GL_SCISSOR_TEST */
+/* GL_COLOR_MATERIAL */
+/* GL_NORMALIZE */
+/* GL_AUTO_NORMAL */
+/* GL_VERTEX_ARRAY */
+/* GL_NORMAL_ARRAY */
+/* GL_COLOR_ARRAY */
+/* GL_INDEX_ARRAY */
+/* GL_TEXTURE_COORD_ARRAY */
+/* GL_EDGE_FLAG_ARRAY */
+/* GL_POLYGON_OFFSET_POINT */
+/* GL_POLYGON_OFFSET_LINE */
+/* GL_POLYGON_OFFSET_FILL */
+
+/* ErrorCode */
+#define GL_NO_ERROR 0
+#define GL_INVALID_ENUM 0x0500
+#define GL_INVALID_VALUE 0x0501
+#define GL_INVALID_OPERATION 0x0502
+#define GL_STACK_OVERFLOW 0x0503
+#define GL_STACK_UNDERFLOW 0x0504
+#define GL_OUT_OF_MEMORY 0x0505
+
+/* FeedBackMode */
+#define GL_2D 0x0600
+#define GL_3D 0x0601
+#define GL_3D_COLOR 0x0602
+#define GL_3D_COLOR_TEXTURE 0x0603
+#define GL_4D_COLOR_TEXTURE 0x0604
+
+/* FeedBackToken */
+#define GL_PASS_THROUGH_TOKEN 0x0700
+#define GL_POINT_TOKEN 0x0701
+#define GL_LINE_TOKEN 0x0702
+#define GL_POLYGON_TOKEN 0x0703
+#define GL_BITMAP_TOKEN 0x0704
+#define GL_DRAW_PIXEL_TOKEN 0x0705
+#define GL_COPY_PIXEL_TOKEN 0x0706
+#define GL_LINE_RESET_TOKEN 0x0707
+
+/* FogMode */
+/* GL_LINEAR */
+#define GL_EXP 0x0800
+#define GL_EXP2 0x0801
+
+
+/* FogParameter */
+/* GL_FOG_COLOR */
+/* GL_FOG_DENSITY */
+/* GL_FOG_END */
+/* GL_FOG_INDEX */
+/* GL_FOG_MODE */
+/* GL_FOG_START */
+
+/* FrontFaceDirection */
+#define GL_CW 0x0900
+#define GL_CCW 0x0901
+
+/* GetMapTarget */
+#define GL_COEFF 0x0A00
+#define GL_ORDER 0x0A01
+#define GL_DOMAIN 0x0A02
+
+/* GetPixelMap */
+/* GL_PIXEL_MAP_I_TO_I */
+/* GL_PIXEL_MAP_S_TO_S */
+/* GL_PIXEL_MAP_I_TO_R */
+/* GL_PIXEL_MAP_I_TO_G */
+/* GL_PIXEL_MAP_I_TO_B */
+/* GL_PIXEL_MAP_I_TO_A */
+/* GL_PIXEL_MAP_R_TO_R */
+/* GL_PIXEL_MAP_G_TO_G */
+/* GL_PIXEL_MAP_B_TO_B */
+/* GL_PIXEL_MAP_A_TO_A */
+
+/* GetPointerTarget */
+/* GL_VERTEX_ARRAY_POINTER */
+/* GL_NORMAL_ARRAY_POINTER */
+/* GL_COLOR_ARRAY_POINTER */
+/* GL_INDEX_ARRAY_POINTER */
+/* GL_TEXTURE_COORD_ARRAY_POINTER */
+/* GL_EDGE_FLAG_ARRAY_POINTER */
+
+/* GetTarget */
+#define GL_CURRENT_COLOR 0x0B00
+#define GL_CURRENT_INDEX 0x0B01
+#define GL_CURRENT_NORMAL 0x0B02
+#define GL_CURRENT_TEXTURE_COORDS 0x0B03
+#define GL_CURRENT_RASTER_COLOR 0x0B04
+#define GL_CURRENT_RASTER_INDEX 0x0B05
+#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06
+#define GL_CURRENT_RASTER_POSITION 0x0B07
+#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08
+#define GL_CURRENT_RASTER_DISTANCE 0x0B09
+#define GL_POINT_SMOOTH 0x0B10
+#define GL_POINT_SIZE 0x0B11
+#define GL_POINT_SIZE_RANGE 0x0B12
+#define GL_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_LINE_SMOOTH 0x0B20
+#define GL_LINE_WIDTH 0x0B21
+#define GL_LINE_WIDTH_RANGE 0x0B22
+#define GL_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_LINE_STIPPLE 0x0B24
+#define GL_LINE_STIPPLE_PATTERN 0x0B25
+#define GL_LINE_STIPPLE_REPEAT 0x0B26
+#define GL_LIST_MODE 0x0B30
+#define GL_MAX_LIST_NESTING 0x0B31
+#define GL_LIST_BASE 0x0B32
+#define GL_LIST_INDEX 0x0B33
+#define GL_POLYGON_MODE 0x0B40
+#define GL_POLYGON_SMOOTH 0x0B41
+#define GL_POLYGON_STIPPLE 0x0B42
+#define GL_EDGE_FLAG 0x0B43
+#define GL_CULL_FACE 0x0B44
+#define GL_CULL_FACE_MODE 0x0B45
+#define GL_FRONT_FACE 0x0B46
+#define GL_LIGHTING 0x0B50
+#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51
+#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52
+#define GL_LIGHT_MODEL_AMBIENT 0x0B53
+#define GL_SHADE_MODEL 0x0B54
+#define GL_COLOR_MATERIAL_FACE 0x0B55
+#define GL_COLOR_MATERIAL_PARAMETER 0x0B56
+#define GL_COLOR_MATERIAL 0x0B57
+#define GL_FOG 0x0B60
+#define GL_FOG_INDEX 0x0B61
+#define GL_FOG_DENSITY 0x0B62
+#define GL_FOG_START 0x0B63
+#define GL_FOG_END 0x0B64
+#define GL_FOG_MODE 0x0B65
+#define GL_FOG_COLOR 0x0B66
+#define GL_DEPTH_RANGE 0x0B70
+#define GL_DEPTH_TEST 0x0B71
+#define GL_DEPTH_WRITEMASK 0x0B72
+#define GL_DEPTH_CLEAR_VALUE 0x0B73
+#define GL_DEPTH_FUNC 0x0B74
+#define GL_ACCUM_CLEAR_VALUE 0x0B80
+#define GL_STENCIL_TEST 0x0B90
+#define GL_STENCIL_CLEAR_VALUE 0x0B91
+#define GL_STENCIL_FUNC 0x0B92
+#define GL_STENCIL_VALUE_MASK 0x0B93
+#define GL_STENCIL_FAIL 0x0B94
+#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
+#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
+#define GL_STENCIL_REF 0x0B97
+#define GL_STENCIL_WRITEMASK 0x0B98
+#define GL_MATRIX_MODE 0x0BA0
+#define GL_NORMALIZE 0x0BA1
+#define GL_VIEWPORT 0x0BA2
+#define GL_MODELVIEW_STACK_DEPTH 0x0BA3
+#define GL_PROJECTION_STACK_DEPTH 0x0BA4
+#define GL_TEXTURE_STACK_DEPTH 0x0BA5
+#define GL_MODELVIEW_MATRIX 0x0BA6
+#define GL_PROJECTION_MATRIX 0x0BA7
+#define GL_TEXTURE_MATRIX 0x0BA8
+#define GL_ATTRIB_STACK_DEPTH 0x0BB0
+#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1
+#define GL_ALPHA_TEST 0x0BC0
+#define GL_ALPHA_TEST_FUNC 0x0BC1
+#define GL_ALPHA_TEST_REF 0x0BC2
+#define GL_DITHER 0x0BD0
+#define GL_BLEND_DST 0x0BE0
+#define GL_BLEND_SRC 0x0BE1
+#define GL_BLEND 0x0BE2
+#define GL_LOGIC_OP_MODE 0x0BF0
+#define GL_INDEX_LOGIC_OP 0x0BF1
+#define GL_COLOR_LOGIC_OP 0x0BF2
+#define GL_AUX_BUFFERS 0x0C00
+#define GL_DRAW_BUFFER 0x0C01
+#define GL_READ_BUFFER 0x0C02
+#define GL_SCISSOR_BOX 0x0C10
+#define GL_SCISSOR_TEST 0x0C11
+#define GL_INDEX_CLEAR_VALUE 0x0C20
+#define GL_INDEX_WRITEMASK 0x0C21
+#define GL_COLOR_CLEAR_VALUE 0x0C22
+#define GL_COLOR_WRITEMASK 0x0C23
+#define GL_INDEX_MODE 0x0C30
+#define GL_RGBA_MODE 0x0C31
+#define GL_DOUBLEBUFFER 0x0C32
+#define GL_STEREO 0x0C33
+#define GL_RENDER_MODE 0x0C40
+#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50
+#define GL_POINT_SMOOTH_HINT 0x0C51
+#define GL_LINE_SMOOTH_HINT 0x0C52
+#define GL_POLYGON_SMOOTH_HINT 0x0C53
+#define GL_FOG_HINT 0x0C54
+#define GL_TEXTURE_GEN_S 0x0C60
+#define GL_TEXTURE_GEN_T 0x0C61
+#define GL_TEXTURE_GEN_R 0x0C62
+#define GL_TEXTURE_GEN_Q 0x0C63
+#define GL_PIXEL_MAP_I_TO_I 0x0C70
+#define GL_PIXEL_MAP_S_TO_S 0x0C71
+#define GL_PIXEL_MAP_I_TO_R 0x0C72
+#define GL_PIXEL_MAP_I_TO_G 0x0C73
+#define GL_PIXEL_MAP_I_TO_B 0x0C74
+#define GL_PIXEL_MAP_I_TO_A 0x0C75
+#define GL_PIXEL_MAP_R_TO_R 0x0C76
+#define GL_PIXEL_MAP_G_TO_G 0x0C77
+#define GL_PIXEL_MAP_B_TO_B 0x0C78
+#define GL_PIXEL_MAP_A_TO_A 0x0C79
+#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0
+#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1
+#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2
+#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3
+#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4
+#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5
+#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6
+#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7
+#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8
+#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9
+#define GL_UNPACK_SWAP_BYTES 0x0CF0
+#define GL_UNPACK_LSB_FIRST 0x0CF1
+#define GL_UNPACK_ROW_LENGTH 0x0CF2
+#define GL_UNPACK_SKIP_ROWS 0x0CF3
+#define GL_UNPACK_SKIP_PIXELS 0x0CF4
+#define GL_UNPACK_ALIGNMENT 0x0CF5
+#define GL_PACK_SWAP_BYTES 0x0D00
+#define GL_PACK_LSB_FIRST 0x0D01
+#define GL_PACK_ROW_LENGTH 0x0D02
+#define GL_PACK_SKIP_ROWS 0x0D03
+#define GL_PACK_SKIP_PIXELS 0x0D04
+#define GL_PACK_ALIGNMENT 0x0D05
+#define GL_MAP_COLOR 0x0D10
+#define GL_MAP_STENCIL 0x0D11
+#define GL_INDEX_SHIFT 0x0D12
+#define GL_INDEX_OFFSET 0x0D13
+#define GL_RED_SCALE 0x0D14
+#define GL_RED_BIAS 0x0D15
+#define GL_ZOOM_X 0x0D16
+#define GL_ZOOM_Y 0x0D17
+#define GL_GREEN_SCALE 0x0D18
+#define GL_GREEN_BIAS 0x0D19
+#define GL_BLUE_SCALE 0x0D1A
+#define GL_BLUE_BIAS 0x0D1B
+#define GL_ALPHA_SCALE 0x0D1C
+#define GL_ALPHA_BIAS 0x0D1D
+#define GL_DEPTH_SCALE 0x0D1E
+#define GL_DEPTH_BIAS 0x0D1F
+#define GL_MAX_EVAL_ORDER 0x0D30
+#define GL_MAX_LIGHTS 0x0D31
+#define GL_MAX_CLIP_PLANES 0x0D32
+#define GL_MAX_TEXTURE_SIZE 0x0D33
+#define GL_MAX_PIXEL_MAP_TABLE 0x0D34
+#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35
+#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36
+#define GL_MAX_NAME_STACK_DEPTH 0x0D37
+#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38
+#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39
+#define GL_MAX_VIEWPORT_DIMS 0x0D3A
+#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B
+#define GL_SUBPIXEL_BITS 0x0D50
+#define GL_INDEX_BITS 0x0D51
+#define GL_RED_BITS 0x0D52
+#define GL_GREEN_BITS 0x0D53
+#define GL_BLUE_BITS 0x0D54
+#define GL_ALPHA_BITS 0x0D55
+#define GL_DEPTH_BITS 0x0D56
+#define GL_STENCIL_BITS 0x0D57
+#define GL_ACCUM_RED_BITS 0x0D58
+#define GL_ACCUM_GREEN_BITS 0x0D59
+#define GL_ACCUM_BLUE_BITS 0x0D5A
+#define GL_ACCUM_ALPHA_BITS 0x0D5B
+#define GL_NAME_STACK_DEPTH 0x0D70
+#define GL_AUTO_NORMAL 0x0D80
+#define GL_MAP1_COLOR_4 0x0D90
+#define GL_MAP1_INDEX 0x0D91
+#define GL_MAP1_NORMAL 0x0D92
+#define GL_MAP1_TEXTURE_COORD_1 0x0D93
+#define GL_MAP1_TEXTURE_COORD_2 0x0D94
+#define GL_MAP1_TEXTURE_COORD_3 0x0D95
+#define GL_MAP1_TEXTURE_COORD_4 0x0D96
+#define GL_MAP1_VERTEX_3 0x0D97
+#define GL_MAP1_VERTEX_4 0x0D98
+#define GL_MAP2_COLOR_4 0x0DB0
+#define GL_MAP2_INDEX 0x0DB1
+#define GL_MAP2_NORMAL 0x0DB2
+#define GL_MAP2_TEXTURE_COORD_1 0x0DB3
+#define GL_MAP2_TEXTURE_COORD_2 0x0DB4
+#define GL_MAP2_TEXTURE_COORD_3 0x0DB5
+#define GL_MAP2_TEXTURE_COORD_4 0x0DB6
+#define GL_MAP2_VERTEX_3 0x0DB7
+#define GL_MAP2_VERTEX_4 0x0DB8
+#define GL_MAP1_GRID_DOMAIN 0x0DD0
+#define GL_MAP1_GRID_SEGMENTS 0x0DD1
+#define GL_MAP2_GRID_DOMAIN 0x0DD2
+#define GL_MAP2_GRID_SEGMENTS 0x0DD3
+#define GL_TEXTURE_1D 0x0DE0
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0
+#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1
+#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2
+#define GL_SELECTION_BUFFER_POINTER 0x0DF3
+#define GL_SELECTION_BUFFER_SIZE 0x0DF4
+/* GL_TEXTURE_BINDING_1D */
+/* GL_TEXTURE_BINDING_2D */
+/* GL_VERTEX_ARRAY */
+/* GL_NORMAL_ARRAY */
+/* GL_COLOR_ARRAY */
+/* GL_INDEX_ARRAY */
+/* GL_TEXTURE_COORD_ARRAY */
+/* GL_EDGE_FLAG_ARRAY */
+/* GL_VERTEX_ARRAY_SIZE */
+/* GL_VERTEX_ARRAY_TYPE */
+/* GL_VERTEX_ARRAY_STRIDE */
+/* GL_NORMAL_ARRAY_TYPE */
+/* GL_NORMAL_ARRAY_STRIDE */
+/* GL_COLOR_ARRAY_SIZE */
+/* GL_COLOR_ARRAY_TYPE */
+/* GL_COLOR_ARRAY_STRIDE */
+/* GL_INDEX_ARRAY_TYPE */
+/* GL_INDEX_ARRAY_STRIDE */
+/* GL_TEXTURE_COORD_ARRAY_SIZE */
+/* GL_TEXTURE_COORD_ARRAY_TYPE */
+/* GL_TEXTURE_COORD_ARRAY_STRIDE */
+/* GL_EDGE_FLAG_ARRAY_STRIDE */
+/* GL_POLYGON_OFFSET_FACTOR */
+/* GL_POLYGON_OFFSET_UNITS */
+
+/* GetTextureParameter */
+/* GL_TEXTURE_MAG_FILTER */
+/* GL_TEXTURE_MIN_FILTER */
+/* GL_TEXTURE_WRAP_S */
+/* GL_TEXTURE_WRAP_T */
+#define GL_TEXTURE_WIDTH 0x1000
+#define GL_TEXTURE_HEIGHT 0x1001
+#define GL_TEXTURE_INTERNAL_FORMAT 0x1003
+#define GL_TEXTURE_BORDER_COLOR 0x1004
+#define GL_TEXTURE_BORDER 0x1005
+/* GL_TEXTURE_RED_SIZE */
+/* GL_TEXTURE_GREEN_SIZE */
+/* GL_TEXTURE_BLUE_SIZE */
+/* GL_TEXTURE_ALPHA_SIZE */
+/* GL_TEXTURE_LUMINANCE_SIZE */
+/* GL_TEXTURE_INTENSITY_SIZE */
+/* GL_TEXTURE_PRIORITY */
+/* GL_TEXTURE_RESIDENT */
+
+/* HintMode */
+#define GL_DONT_CARE 0x1100
+#define GL_FASTEST 0x1101
+#define GL_NICEST 0x1102
+
+/* HintTarget */
+/* GL_PERSPECTIVE_CORRECTION_HINT */
+/* GL_POINT_SMOOTH_HINT */
+/* GL_LINE_SMOOTH_HINT */
+/* GL_POLYGON_SMOOTH_HINT */
+/* GL_FOG_HINT */
+/* GL_PHONG_HINT */
+
+/* IndexPointerType */
+/* GL_SHORT */
+/* GL_INT */
+/* GL_FLOAT */
+/* GL_DOUBLE */
+
+/* LightModelParameter */
+/* GL_LIGHT_MODEL_AMBIENT */
+/* GL_LIGHT_MODEL_LOCAL_VIEWER */
+/* GL_LIGHT_MODEL_TWO_SIDE */
+
+/* LightName */
+#define GL_LIGHT0 0x4000
+#define GL_LIGHT1 0x4001
+#define GL_LIGHT2 0x4002
+#define GL_LIGHT3 0x4003
+#define GL_LIGHT4 0x4004
+#define GL_LIGHT5 0x4005
+#define GL_LIGHT6 0x4006
+#define GL_LIGHT7 0x4007
+
+/* LightParameter */
+#define GL_AMBIENT 0x1200
+#define GL_DIFFUSE 0x1201
+#define GL_SPECULAR 0x1202
+#define GL_POSITION 0x1203
+#define GL_SPOT_DIRECTION 0x1204
+#define GL_SPOT_EXPONENT 0x1205
+#define GL_SPOT_CUTOFF 0x1206
+#define GL_CONSTANT_ATTENUATION 0x1207
+#define GL_LINEAR_ATTENUATION 0x1208
+#define GL_QUADRATIC_ATTENUATION 0x1209
+
+/* InterleavedArrays */
+/* GL_V2F */
+/* GL_V3F */
+/* GL_C4UB_V2F */
+/* GL_C4UB_V3F */
+/* GL_C3F_V3F */
+/* GL_N3F_V3F */
+/* GL_C4F_N3F_V3F */
+/* GL_T2F_V3F */
+/* GL_T4F_V4F */
+/* GL_T2F_C4UB_V3F */
+/* GL_T2F_C3F_V3F */
+/* GL_T2F_N3F_V3F */
+/* GL_T2F_C4F_N3F_V3F */
+/* GL_T4F_C4F_N3F_V4F */
+
+/* ListMode */
+#define GL_COMPILE 0x1300
+#define GL_COMPILE_AND_EXECUTE 0x1301
+
+/* ListNameType */
+/* GL_BYTE */
+/* GL_UNSIGNED_BYTE */
+/* GL_SHORT */
+/* GL_UNSIGNED_SHORT */
+/* GL_INT */
+/* GL_UNSIGNED_INT */
+/* GL_FLOAT */
+/* GL_2_BYTES */
+/* GL_3_BYTES */
+/* GL_4_BYTES */
+
+/* LogicOp */
+#define GL_CLEAR 0x1500
+#define GL_AND 0x1501
+#define GL_AND_REVERSE 0x1502
+#define GL_COPY 0x1503
+#define GL_AND_INVERTED 0x1504
+#define GL_NOOP 0x1505
+#define GL_XOR 0x1506
+#define GL_OR 0x1507
+#define GL_NOR 0x1508
+#define GL_EQUIV 0x1509
+#define GL_INVERT 0x150A
+#define GL_OR_REVERSE 0x150B
+#define GL_COPY_INVERTED 0x150C
+#define GL_OR_INVERTED 0x150D
+#define GL_NAND 0x150E
+#define GL_SET 0x150F
+
+/* MapTarget */
+/* GL_MAP1_COLOR_4 */
+/* GL_MAP1_INDEX */
+/* GL_MAP1_NORMAL */
+/* GL_MAP1_TEXTURE_COORD_1 */
+/* GL_MAP1_TEXTURE_COORD_2 */
+/* GL_MAP1_TEXTURE_COORD_3 */
+/* GL_MAP1_TEXTURE_COORD_4 */
+/* GL_MAP1_VERTEX_3 */
+/* GL_MAP1_VERTEX_4 */
+/* GL_MAP2_COLOR_4 */
+/* GL_MAP2_INDEX */
+/* GL_MAP2_NORMAL */
+/* GL_MAP2_TEXTURE_COORD_1 */
+/* GL_MAP2_TEXTURE_COORD_2 */
+/* GL_MAP2_TEXTURE_COORD_3 */
+/* GL_MAP2_TEXTURE_COORD_4 */
+/* GL_MAP2_VERTEX_3 */
+/* GL_MAP2_VERTEX_4 */
+
+/* MaterialFace */
+/* GL_FRONT */
+/* GL_BACK */
+/* GL_FRONT_AND_BACK */
+
+/* MaterialParameter */
+#define GL_EMISSION 0x1600
+#define GL_SHININESS 0x1601
+#define GL_AMBIENT_AND_DIFFUSE 0x1602
+#define GL_COLOR_INDEXES 0x1603
+/* GL_AMBIENT */
+/* GL_DIFFUSE */
+/* GL_SPECULAR */
+
+/* MatrixMode */
+#define GL_MODELVIEW 0x1700
+#define GL_PROJECTION 0x1701
+#define GL_TEXTURE 0x1702
+
+/* MeshMode1 */
+/* GL_POINT */
+/* GL_LINE */
+
+/* MeshMode2 */
+/* GL_POINT */
+/* GL_LINE */
+/* GL_FILL */
+
+/* NormalPointerType */
+/* GL_BYTE */
+/* GL_SHORT */
+/* GL_INT */
+/* GL_FLOAT */
+/* GL_DOUBLE */
+
+/* PixelCopyType */
+#define GL_COLOR 0x1800
+#define GL_DEPTH 0x1801
+#define GL_STENCIL 0x1802
+
+/* PixelFormat */
+#define GL_COLOR_INDEX 0x1900
+#define GL_STENCIL_INDEX 0x1901
+#define GL_DEPTH_COMPONENT 0x1902
+#define GL_RED 0x1903
+#define GL_GREEN 0x1904
+#define GL_BLUE 0x1905
+#define GL_ALPHA 0x1906
+#define GL_RGB 0x1907
+#define GL_RGBA 0x1908
+#define GL_LUMINANCE 0x1909
+#define GL_LUMINANCE_ALPHA 0x190A
+
+/* PixelMap */
+/* GL_PIXEL_MAP_I_TO_I */
+/* GL_PIXEL_MAP_S_TO_S */
+/* GL_PIXEL_MAP_I_TO_R */
+/* GL_PIXEL_MAP_I_TO_G */
+/* GL_PIXEL_MAP_I_TO_B */
+/* GL_PIXEL_MAP_I_TO_A */
+/* GL_PIXEL_MAP_R_TO_R */
+/* GL_PIXEL_MAP_G_TO_G */
+/* GL_PIXEL_MAP_B_TO_B */
+/* GL_PIXEL_MAP_A_TO_A */
+
+/* PixelStore */
+/* GL_UNPACK_SWAP_BYTES */
+/* GL_UNPACK_LSB_FIRST */
+/* GL_UNPACK_ROW_LENGTH */
+/* GL_UNPACK_SKIP_ROWS */
+/* GL_UNPACK_SKIP_PIXELS */
+/* GL_UNPACK_ALIGNMENT */
+/* GL_PACK_SWAP_BYTES */
+/* GL_PACK_LSB_FIRST */
+/* GL_PACK_ROW_LENGTH */
+/* GL_PACK_SKIP_ROWS */
+/* GL_PACK_SKIP_PIXELS */
+/* GL_PACK_ALIGNMENT */
+
+/* PixelTransfer */
+/* GL_MAP_COLOR */
+/* GL_MAP_STENCIL */
+/* GL_INDEX_SHIFT */
+/* GL_INDEX_OFFSET */
+/* GL_RED_SCALE */
+/* GL_RED_BIAS */
+/* GL_GREEN_SCALE */
+/* GL_GREEN_BIAS */
+/* GL_BLUE_SCALE */
+/* GL_BLUE_BIAS */
+/* GL_ALPHA_SCALE */
+/* GL_ALPHA_BIAS */
+/* GL_DEPTH_SCALE */
+/* GL_DEPTH_BIAS */
+
+/* PixelType */
+#define GL_BITMAP 0x1A00
+/* GL_BYTE */
+/* GL_UNSIGNED_BYTE */
+/* GL_SHORT */
+/* GL_UNSIGNED_SHORT */
+/* GL_INT */
+/* GL_UNSIGNED_INT */
+/* GL_FLOAT */
+
+/* PolygonMode */
+#define GL_POINT 0x1B00
+#define GL_LINE 0x1B01
+#define GL_FILL 0x1B02
+
+/* ReadBufferMode */
+/* GL_FRONT_LEFT */
+/* GL_FRONT_RIGHT */
+/* GL_BACK_LEFT */
+/* GL_BACK_RIGHT */
+/* GL_FRONT */
+/* GL_BACK */
+/* GL_LEFT */
+/* GL_RIGHT */
+/* GL_AUX0 */
+/* GL_AUX1 */
+/* GL_AUX2 */
+/* GL_AUX3 */
+
+/* RenderingMode */
+#define GL_RENDER 0x1C00
+#define GL_FEEDBACK 0x1C01
+#define GL_SELECT 0x1C02
+
+/* ShadingModel */
+#define GL_FLAT 0x1D00
+#define GL_SMOOTH 0x1D01
+
+
+/* StencilFunction */
+/* GL_NEVER */
+/* GL_LESS */
+/* GL_EQUAL */
+/* GL_LEQUAL */
+/* GL_GREATER */
+/* GL_NOTEQUAL */
+/* GL_GEQUAL */
+/* GL_ALWAYS */
+
+/* StencilOp */
+/* GL_ZERO */
+#define GL_KEEP 0x1E00
+#define GL_REPLACE 0x1E01
+#define GL_INCR 0x1E02
+#define GL_DECR 0x1E03
+/* GL_INVERT */
+
+/* StringName */
+#define GL_VENDOR 0x1F00
+#define GL_RENDERER 0x1F01
+#define GL_VERSION 0x1F02
+#define GL_EXTENSIONS 0x1F03
+
+/* TextureCoordName */
+#define GL_S 0x2000
+#define GL_T 0x2001
+#define GL_R 0x2002
+#define GL_Q 0x2003
+
+/* TexCoordPointerType */
+/* GL_SHORT */
+/* GL_INT */
+/* GL_FLOAT */
+/* GL_DOUBLE */
+
+/* TextureEnvMode */
+#define GL_MODULATE 0x2100
+#define GL_DECAL 0x2101
+/* GL_BLEND */
+/* GL_REPLACE */
+
+/* TextureEnvParameter */
+#define GL_TEXTURE_ENV_MODE 0x2200
+#define GL_TEXTURE_ENV_COLOR 0x2201
+
+/* TextureEnvTarget */
+#define GL_TEXTURE_ENV 0x2300
+
+/* TextureGenMode */
+#define GL_EYE_LINEAR 0x2400
+#define GL_OBJECT_LINEAR 0x2401
+#define GL_SPHERE_MAP 0x2402
+
+/* TextureGenParameter */
+#define GL_TEXTURE_GEN_MODE 0x2500
+#define GL_OBJECT_PLANE 0x2501
+#define GL_EYE_PLANE 0x2502
+
+/* TextureMagFilter */
+#define GL_NEAREST 0x2600
+#define GL_LINEAR 0x2601
+
+/* TextureMinFilter */
+/* GL_NEAREST */
+/* GL_LINEAR */
+#define GL_NEAREST_MIPMAP_NEAREST 0x2700
+#define GL_LINEAR_MIPMAP_NEAREST 0x2701
+#define GL_NEAREST_MIPMAP_LINEAR 0x2702
+#define GL_LINEAR_MIPMAP_LINEAR 0x2703
+
+/* TextureParameterName */
+#define GL_TEXTURE_MAG_FILTER 0x2800
+#define GL_TEXTURE_MIN_FILTER 0x2801
+#define GL_TEXTURE_WRAP_S 0x2802
+#define GL_TEXTURE_WRAP_T 0x2803
+/* GL_TEXTURE_BORDER_COLOR */
+/* GL_TEXTURE_PRIORITY */
+
+/* TextureTarget */
+/* GL_TEXTURE_1D */
+/* GL_TEXTURE_2D */
+/* GL_PROXY_TEXTURE_1D */
+/* GL_PROXY_TEXTURE_2D */
+
+/* TextureWrapMode */
+#define GL_CLAMP 0x2900
+#define GL_REPEAT 0x2901
+
+/* VertexPointerType */
+/* GL_SHORT */
+/* GL_INT */
+/* GL_FLOAT */
+/* GL_DOUBLE */
+
+/* ClientAttribMask */
+#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001
+#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002
+#define GL_CLIENT_ALL_ATTRIB_BITS 0xffffffff
+
+/* polygon_offset */
+#define GL_POLYGON_OFFSET_FACTOR 0x8038
+#define GL_POLYGON_OFFSET_UNITS 0x2A00
+#define GL_POLYGON_OFFSET_POINT 0x2A01
+#define GL_POLYGON_OFFSET_LINE 0x2A02
+#define GL_POLYGON_OFFSET_FILL 0x8037
+
+/* texture */
+#define GL_ALPHA4 0x803B
+#define GL_ALPHA8 0x803C
+#define GL_ALPHA12 0x803D
+#define GL_ALPHA16 0x803E
+#define GL_LUMINANCE4 0x803F
+#define GL_LUMINANCE8 0x8040
+#define GL_LUMINANCE12 0x8041
+#define GL_LUMINANCE16 0x8042
+#define GL_LUMINANCE4_ALPHA4 0x8043
+#define GL_LUMINANCE6_ALPHA2 0x8044
+#define GL_LUMINANCE8_ALPHA8 0x8045
+#define GL_LUMINANCE12_ALPHA4 0x8046
+#define GL_LUMINANCE12_ALPHA12 0x8047
+#define GL_LUMINANCE16_ALPHA16 0x8048
+#define GL_INTENSITY 0x8049
+#define GL_INTENSITY4 0x804A
+#define GL_INTENSITY8 0x804B
+#define GL_INTENSITY12 0x804C
+#define GL_INTENSITY16 0x804D
+#define GL_R3_G3_B2 0x2A10
+#define GL_RGB4 0x804F
+#define GL_RGB5 0x8050
+#define GL_RGB8 0x8051
+#define GL_RGB10 0x8052
+#define GL_RGB12 0x8053
+#define GL_RGB16 0x8054
+#define GL_RGBA2 0x8055
+#define GL_RGBA4 0x8056
+#define GL_RGB5_A1 0x8057
+#define GL_RGBA8 0x8058
+#define GL_RGB10_A2 0x8059
+#define GL_RGBA12 0x805A
+#define GL_RGBA16 0x805B
+#define GL_TEXTURE_RED_SIZE 0x805C
+#define GL_TEXTURE_GREEN_SIZE 0x805D
+#define GL_TEXTURE_BLUE_SIZE 0x805E
+#define GL_TEXTURE_ALPHA_SIZE 0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE 0x8060
+#define GL_TEXTURE_INTENSITY_SIZE 0x8061
+#define GL_PROXY_TEXTURE_1D 0x8063
+#define GL_PROXY_TEXTURE_2D 0x8064
+
+/* texture_object */
+#define GL_TEXTURE_PRIORITY 0x8066
+#define GL_TEXTURE_RESIDENT 0x8067
+#define GL_TEXTURE_BINDING_1D 0x8068
+#define GL_TEXTURE_BINDING_2D 0x8069
+
+/* vertex_array */
+#define GL_VERTEX_ARRAY 0x8074
+#define GL_NORMAL_ARRAY 0x8075
+#define GL_COLOR_ARRAY 0x8076
+#define GL_INDEX_ARRAY 0x8077
+#define GL_TEXTURE_COORD_ARRAY 0x8078
+#define GL_EDGE_FLAG_ARRAY 0x8079
+#define GL_VERTEX_ARRAY_SIZE 0x807A
+#define GL_VERTEX_ARRAY_TYPE 0x807B
+#define GL_VERTEX_ARRAY_STRIDE 0x807C
+#define GL_NORMAL_ARRAY_TYPE 0x807E
+#define GL_NORMAL_ARRAY_STRIDE 0x807F
+#define GL_COLOR_ARRAY_SIZE 0x8081
+#define GL_COLOR_ARRAY_TYPE 0x8082
+#define GL_COLOR_ARRAY_STRIDE 0x8083
+#define GL_INDEX_ARRAY_TYPE 0x8085
+#define GL_INDEX_ARRAY_STRIDE 0x8086
+#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A
+#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C
+#define GL_VERTEX_ARRAY_POINTER 0x808E
+#define GL_NORMAL_ARRAY_POINTER 0x808F
+#define GL_COLOR_ARRAY_POINTER 0x8090
+#define GL_INDEX_ARRAY_POINTER 0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093
+#define GL_V2F 0x2A20
+#define GL_V3F 0x2A21
+#define GL_C4UB_V2F 0x2A22
+#define GL_C4UB_V3F 0x2A23
+#define GL_C3F_V3F 0x2A24
+#define GL_N3F_V3F 0x2A25
+#define GL_C4F_N3F_V3F 0x2A26
+#define GL_T2F_V3F 0x2A27
+#define GL_T4F_V4F 0x2A28
+#define GL_T2F_C4UB_V3F 0x2A29
+#define GL_T2F_C3F_V3F 0x2A2A
+#define GL_T2F_N3F_V3F 0x2A2B
+#define GL_T2F_C4F_N3F_V3F 0x2A2C
+#define GL_T4F_C4F_N3F_V4F 0x2A2D
+
+/* Extensions */
+#define GL_EXT_vertex_array 1
+#define GL_EXT_bgra 1
+#define GL_EXT_paletted_texture 1
+#define GL_WIN_swap_hint 1
+#define GL_WIN_draw_range_elements 1
+// #define GL_WIN_phong_shading 1
+// #define GL_WIN_specular_fog 1
+
+/* EXT_vertex_array */
+#define GL_VERTEX_ARRAY_EXT 0x8074
+#define GL_NORMAL_ARRAY_EXT 0x8075
+#define GL_COLOR_ARRAY_EXT 0x8076
+#define GL_INDEX_ARRAY_EXT 0x8077
+#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078
+#define GL_EDGE_FLAG_ARRAY_EXT 0x8079
+#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A
+#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B
+#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C
+#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D
+#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E
+#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F
+#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080
+#define GL_COLOR_ARRAY_SIZE_EXT 0x8081
+#define GL_COLOR_ARRAY_TYPE_EXT 0x8082
+#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083
+#define GL_COLOR_ARRAY_COUNT_EXT 0x8084
+#define GL_INDEX_ARRAY_TYPE_EXT 0x8085
+#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086
+#define GL_INDEX_ARRAY_COUNT_EXT 0x8087
+#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A
+#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B
+#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C
+#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D
+#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E
+#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F
+#define GL_COLOR_ARRAY_POINTER_EXT 0x8090
+#define GL_INDEX_ARRAY_POINTER_EXT 0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093
+#define GL_DOUBLE_EXT GL_DOUBLE
+
+/* EXT_bgra */
+#define GL_BGR_EXT 0x80E0
+#define GL_BGRA_EXT 0x80E1
+
+/* EXT_paletted_texture */
+
+/* These must match the GL_COLOR_TABLE_*_SGI enumerants */
+#define GL_COLOR_TABLE_FORMAT_EXT 0x80D8
+#define GL_COLOR_TABLE_WIDTH_EXT 0x80D9
+#define GL_COLOR_TABLE_RED_SIZE_EXT 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE_EXT 0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE_EXT 0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE_EXT 0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE_EXT 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE_EXT 0x80DF
+
+#define GL_COLOR_INDEX1_EXT 0x80E2
+#define GL_COLOR_INDEX2_EXT 0x80E3
+#define GL_COLOR_INDEX4_EXT 0x80E4
+#define GL_COLOR_INDEX8_EXT 0x80E5
+#define GL_COLOR_INDEX12_EXT 0x80E6
+#define GL_COLOR_INDEX16_EXT 0x80E7
+
+/* WIN_draw_range_elements */
+#define GL_MAX_ELEMENTS_VERTICES_WIN 0x80E8
+#define GL_MAX_ELEMENTS_INDICES_WIN 0x80E9
+
+/* WIN_phong_shading */
+#define GL_PHONG_WIN 0x80EA
+#define GL_PHONG_HINT_WIN 0x80EB
+
+/* WIN_specular_fog */
+#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC
+
+/* For compatibility with OpenGL v1.0 */
+#define GL_LOGIC_OP GL_INDEX_LOGIC_OP
+#define GL_TEXTURE_COMPONENTS GL_TEXTURE_INTERNAL_FORMAT
+
+/*************************************************************/
+
+WINGDIAPI void APIENTRY glAccum (GLenum op, GLfloat value);
+WINGDIAPI void APIENTRY glAlphaFunc (GLenum func, GLclampf ref);
+WINGDIAPI GLboolean APIENTRY glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences);
+WINGDIAPI void APIENTRY glArrayElement (GLint i);
+WINGDIAPI void APIENTRY glBegin (GLenum mode);
+WINGDIAPI void APIENTRY glBindTexture (GLenum target, GLuint texture);
+WINGDIAPI void APIENTRY glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap);
+WINGDIAPI void APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
+WINGDIAPI void APIENTRY glCallList (GLuint list);
+WINGDIAPI void APIENTRY glCallLists (GLsizei n, GLenum type, const GLvoid *lists);
+WINGDIAPI void APIENTRY glClear (GLbitfield mask);
+WINGDIAPI void APIENTRY glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+WINGDIAPI void APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+WINGDIAPI void APIENTRY glClearDepth (GLclampd depth);
+WINGDIAPI void APIENTRY glClearIndex (GLfloat c);
+WINGDIAPI void APIENTRY glClearStencil (GLint s);
+WINGDIAPI void APIENTRY glClipPlane (GLenum plane, const GLdouble *equation);
+WINGDIAPI void APIENTRY glColor3b (GLbyte red, GLbyte green, GLbyte blue);
+WINGDIAPI void APIENTRY glColor3bv (const GLbyte *v);
+WINGDIAPI void APIENTRY glColor3d (GLdouble red, GLdouble green, GLdouble blue);
+WINGDIAPI void APIENTRY glColor3dv (const GLdouble *v);
+WINGDIAPI void APIENTRY glColor3f (GLfloat red, GLfloat green, GLfloat blue);
+WINGDIAPI void APIENTRY glColor3fv (const GLfloat *v);
+WINGDIAPI void APIENTRY glColor3i (GLint red, GLint green, GLint blue);
+WINGDIAPI void APIENTRY glColor3iv (const GLint *v);
+WINGDIAPI void APIENTRY glColor3s (GLshort red, GLshort green, GLshort blue);
+WINGDIAPI void APIENTRY glColor3sv (const GLshort *v);
+WINGDIAPI void APIENTRY glColor3ub (GLubyte red, GLubyte green, GLubyte blue);
+WINGDIAPI void APIENTRY glColor3ubv (const GLubyte *v);
+WINGDIAPI void APIENTRY glColor3ui (GLuint red, GLuint green, GLuint blue);
+WINGDIAPI void APIENTRY glColor3uiv (const GLuint *v);
+WINGDIAPI void APIENTRY glColor3us (GLushort red, GLushort green, GLushort blue);
+WINGDIAPI void APIENTRY glColor3usv (const GLushort *v);
+WINGDIAPI void APIENTRY glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha);
+WINGDIAPI void APIENTRY glColor4bv (const GLbyte *v);
+WINGDIAPI void APIENTRY glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
+WINGDIAPI void APIENTRY glColor4dv (const GLdouble *v);
+WINGDIAPI void APIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+WINGDIAPI void APIENTRY glColor4fv (const GLfloat *v);
+WINGDIAPI void APIENTRY glColor4i (GLint red, GLint green, GLint blue, GLint alpha);
+WINGDIAPI void APIENTRY glColor4iv (const GLint *v);
+WINGDIAPI void APIENTRY glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha);
+WINGDIAPI void APIENTRY glColor4sv (const GLshort *v);
+WINGDIAPI void APIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
+WINGDIAPI void APIENTRY glColor4ubv (const GLubyte *v);
+WINGDIAPI void APIENTRY glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha);
+WINGDIAPI void APIENTRY glColor4uiv (const GLuint *v);
+WINGDIAPI void APIENTRY glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha);
+WINGDIAPI void APIENTRY glColor4usv (const GLushort *v);
+WINGDIAPI void APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+WINGDIAPI void APIENTRY glColorMaterial (GLenum face, GLenum mode);
+WINGDIAPI void APIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+WINGDIAPI void APIENTRY glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
+WINGDIAPI void APIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border);
+WINGDIAPI void APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+WINGDIAPI void APIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+WINGDIAPI void APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+WINGDIAPI void APIENTRY glCullFace (GLenum mode);
+WINGDIAPI void APIENTRY glDeleteLists (GLuint list, GLsizei range);
+WINGDIAPI void APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures);
+WINGDIAPI void APIENTRY glDepthFunc (GLenum func);
+WINGDIAPI void APIENTRY glDepthMask (GLboolean flag);
+WINGDIAPI void APIENTRY glDepthRange (GLclampd zNear, GLclampd zFar);
+WINGDIAPI void APIENTRY glDisable (GLenum cap);
+WINGDIAPI void APIENTRY glDisableClientState (GLenum array);
+WINGDIAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count);
+WINGDIAPI void APIENTRY glDrawBuffer (GLenum mode);
+WINGDIAPI void APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
+WINGDIAPI void APIENTRY glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+WINGDIAPI void APIENTRY glEdgeFlag (GLboolean flag);
+WINGDIAPI void APIENTRY glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer);
+WINGDIAPI void APIENTRY glEdgeFlagv (const GLboolean *flag);
+WINGDIAPI void APIENTRY glEnable (GLenum cap);
+WINGDIAPI void APIENTRY glEnableClientState (GLenum array);
+WINGDIAPI void APIENTRY glEnd (void);
+WINGDIAPI void APIENTRY glEndList (void);
+WINGDIAPI void APIENTRY glEvalCoord1d (GLdouble u);
+WINGDIAPI void APIENTRY glEvalCoord1dv (const GLdouble *u);
+WINGDIAPI void APIENTRY glEvalCoord1f (GLfloat u);
+WINGDIAPI void APIENTRY glEvalCoord1fv (const GLfloat *u);
+WINGDIAPI void APIENTRY glEvalCoord2d (GLdouble u, GLdouble v);
+WINGDIAPI void APIENTRY glEvalCoord2dv (const GLdouble *u);
+WINGDIAPI void APIENTRY glEvalCoord2f (GLfloat u, GLfloat v);
+WINGDIAPI void APIENTRY glEvalCoord2fv (const GLfloat *u);
+WINGDIAPI void APIENTRY glEvalMesh1 (GLenum mode, GLint i1, GLint i2);
+WINGDIAPI void APIENTRY glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2);
+WINGDIAPI void APIENTRY glEvalPoint1 (GLint i);
+WINGDIAPI void APIENTRY glEvalPoint2 (GLint i, GLint j);
+WINGDIAPI void APIENTRY glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer);
+WINGDIAPI void APIENTRY glFinish (void);
+WINGDIAPI void APIENTRY glFlush (void);
+WINGDIAPI void APIENTRY glFogf (GLenum pname, GLfloat param);
+WINGDIAPI void APIENTRY glFogfv (GLenum pname, const GLfloat *params);
+WINGDIAPI void APIENTRY glFogi (GLenum pname, GLint param);
+WINGDIAPI void APIENTRY glFogiv (GLenum pname, const GLint *params);
+WINGDIAPI void APIENTRY glFrontFace (GLenum mode);
+WINGDIAPI void APIENTRY glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+WINGDIAPI GLuint APIENTRY glGenLists (GLsizei range);
+WINGDIAPI void APIENTRY glGenTextures (GLsizei n, GLuint *textures);
+WINGDIAPI void APIENTRY glGetBooleanv (GLenum pname, GLboolean *params);
+WINGDIAPI void APIENTRY glGetClipPlane (GLenum plane, GLdouble *equation);
+WINGDIAPI void APIENTRY glGetDoublev (GLenum pname, GLdouble *params);
+WINGDIAPI GLenum APIENTRY glGetError (void);
+WINGDIAPI void APIENTRY glGetFloatv (GLenum pname, GLfloat *params);
+WINGDIAPI void APIENTRY glGetIntegerv (GLenum pname, GLint *params);
+WINGDIAPI void APIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params);
+WINGDIAPI void APIENTRY glGetLightiv (GLenum light, GLenum pname, GLint *params);
+WINGDIAPI void APIENTRY glGetMapdv (GLenum target, GLenum query, GLdouble *v);
+WINGDIAPI void APIENTRY glGetMapfv (GLenum target, GLenum query, GLfloat *v);
+WINGDIAPI void APIENTRY glGetMapiv (GLenum target, GLenum query, GLint *v);
+WINGDIAPI void APIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params);
+WINGDIAPI void APIENTRY glGetMaterialiv (GLenum face, GLenum pname, GLint *params);
+WINGDIAPI void APIENTRY glGetPixelMapfv (GLenum map, GLfloat *values);
+WINGDIAPI void APIENTRY glGetPixelMapuiv (GLenum map, GLuint *values);
+WINGDIAPI void APIENTRY glGetPixelMapusv (GLenum map, GLushort *values);
+WINGDIAPI void APIENTRY glGetPointerv (GLenum pname, GLvoid* *params);
+WINGDIAPI void APIENTRY glGetPolygonStipple (GLubyte *mask);
+WINGDIAPI const GLubyte * APIENTRY glGetString (GLenum name);
+WINGDIAPI void APIENTRY glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params);
+WINGDIAPI void APIENTRY glGetTexEnviv (GLenum target, GLenum pname, GLint *params);
+WINGDIAPI void APIENTRY glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params);
+WINGDIAPI void APIENTRY glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params);
+WINGDIAPI void APIENTRY glGetTexGeniv (GLenum coord, GLenum pname, GLint *params);
+WINGDIAPI void APIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);
+WINGDIAPI void APIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params);
+WINGDIAPI void APIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params);
+WINGDIAPI void APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
+WINGDIAPI void APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
+WINGDIAPI void APIENTRY glHint (GLenum target, GLenum mode);
+WINGDIAPI void APIENTRY glIndexMask (GLuint mask);
+WINGDIAPI void APIENTRY glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer);
+WINGDIAPI void APIENTRY glIndexd (GLdouble c);
+WINGDIAPI void APIENTRY glIndexdv (const GLdouble *c);
+WINGDIAPI void APIENTRY glIndexf (GLfloat c);
+WINGDIAPI void APIENTRY glIndexfv (const GLfloat *c);
+WINGDIAPI void APIENTRY glIndexi (GLint c);
+WINGDIAPI void APIENTRY glIndexiv (const GLint *c);
+WINGDIAPI void APIENTRY glIndexs (GLshort c);
+WINGDIAPI void APIENTRY glIndexsv (const GLshort *c);
+WINGDIAPI void APIENTRY glIndexub (GLubyte c);
+WINGDIAPI void APIENTRY glIndexubv (const GLubyte *c);
+WINGDIAPI void APIENTRY glInitNames (void);
+WINGDIAPI void APIENTRY glInterleavedArrays (GLenum format, GLsizei stride, const GLvoid *pointer);
+WINGDIAPI GLboolean APIENTRY glIsEnabled (GLenum cap);
+WINGDIAPI GLboolean APIENTRY glIsList (GLuint list);
+WINGDIAPI GLboolean APIENTRY glIsTexture (GLuint texture);
+WINGDIAPI void APIENTRY glLightModelf (GLenum pname, GLfloat param);
+WINGDIAPI void APIENTRY glLightModelfv (GLenum pname, const GLfloat *params);
+WINGDIAPI void APIENTRY glLightModeli (GLenum pname, GLint param);
+WINGDIAPI void APIENTRY glLightModeliv (GLenum pname, const GLint *params);
+WINGDIAPI void APIENTRY glLightf (GLenum light, GLenum pname, GLfloat param);
+WINGDIAPI void APIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params);
+WINGDIAPI void APIENTRY glLighti (GLenum light, GLenum pname, GLint param);
+WINGDIAPI void APIENTRY glLightiv (GLenum light, GLenum pname, const GLint *params);
+WINGDIAPI void APIENTRY glLineStipple (GLint factor, GLushort pattern);
+WINGDIAPI void APIENTRY glLineWidth (GLfloat width);
+WINGDIAPI void APIENTRY glListBase (GLuint base);
+WINGDIAPI void APIENTRY glLoadIdentity (void);
+WINGDIAPI void APIENTRY glLoadMatrixd (const GLdouble *m);
+WINGDIAPI void APIENTRY glLoadMatrixf (const GLfloat *m);
+WINGDIAPI void APIENTRY glLoadName (GLuint name);
+WINGDIAPI void APIENTRY glLogicOp (GLenum opcode);
+WINGDIAPI void APIENTRY glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
+WINGDIAPI void APIENTRY glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
+WINGDIAPI void APIENTRY glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
+WINGDIAPI void APIENTRY glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
+WINGDIAPI void APIENTRY glMapGrid1d (GLint un, GLdouble u1, GLdouble u2);
+WINGDIAPI void APIENTRY glMapGrid1f (GLint un, GLfloat u1, GLfloat u2);
+WINGDIAPI void APIENTRY glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2);
+WINGDIAPI void APIENTRY glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2);
+WINGDIAPI void APIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param);
+WINGDIAPI void APIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params);
+WINGDIAPI void APIENTRY glMateriali (GLenum face, GLenum pname, GLint param);
+WINGDIAPI void APIENTRY glMaterialiv (GLenum face, GLenum pname, const GLint *params);
+WINGDIAPI void APIENTRY glMatrixMode (GLenum mode);
+WINGDIAPI void APIENTRY glMultMatrixd (const GLdouble *m);
+WINGDIAPI void APIENTRY glMultMatrixf (const GLfloat *m);
+WINGDIAPI void APIENTRY glNewList (GLuint list, GLenum mode);
+WINGDIAPI void APIENTRY glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz);
+WINGDIAPI void APIENTRY glNormal3bv (const GLbyte *v);
+WINGDIAPI void APIENTRY glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz);
+WINGDIAPI void APIENTRY glNormal3dv (const GLdouble *v);
+WINGDIAPI void APIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz);
+WINGDIAPI void APIENTRY glNormal3fv (const GLfloat *v);
+WINGDIAPI void APIENTRY glNormal3i (GLint nx, GLint ny, GLint nz);
+WINGDIAPI void APIENTRY glNormal3iv (const GLint *v);
+WINGDIAPI void APIENTRY glNormal3s (GLshort nx, GLshort ny, GLshort nz);
+WINGDIAPI void APIENTRY glNormal3sv (const GLshort *v);
+WINGDIAPI void APIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer);
+WINGDIAPI void APIENTRY glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+WINGDIAPI void APIENTRY glPassThrough (GLfloat token);
+WINGDIAPI void APIENTRY glPixelMapfv (GLenum map, GLsizei mapsize, const GLfloat *values);
+WINGDIAPI void APIENTRY glPixelMapuiv (GLenum map, GLsizei mapsize, const GLuint *values);
+WINGDIAPI void APIENTRY glPixelMapusv (GLenum map, GLsizei mapsize, const GLushort *values);
+WINGDIAPI void APIENTRY glPixelStoref (GLenum pname, GLfloat param);
+WINGDIAPI void APIENTRY glPixelStorei (GLenum pname, GLint param);
+WINGDIAPI void APIENTRY glPixelTransferf (GLenum pname, GLfloat param);
+WINGDIAPI void APIENTRY glPixelTransferi (GLenum pname, GLint param);
+WINGDIAPI void APIENTRY glPixelZoom (GLfloat xfactor, GLfloat yfactor);
+WINGDIAPI void APIENTRY glPointSize (GLfloat size);
+WINGDIAPI void APIENTRY glPolygonMode (GLenum face, GLenum mode);
+WINGDIAPI void APIENTRY glPolygonOffset (GLfloat factor, GLfloat units);
+WINGDIAPI void APIENTRY glPolygonStipple (const GLubyte *mask);
+WINGDIAPI void APIENTRY glPopAttrib (void);
+WINGDIAPI void APIENTRY glPopClientAttrib (void);
+WINGDIAPI void APIENTRY glPopMatrix (void);
+WINGDIAPI void APIENTRY glPopName (void);
+WINGDIAPI void APIENTRY glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities);
+WINGDIAPI void APIENTRY glPushAttrib (GLbitfield mask);
+WINGDIAPI void APIENTRY glPushClientAttrib (GLbitfield mask);
+WINGDIAPI void APIENTRY glPushMatrix (void);
+WINGDIAPI void APIENTRY glPushName (GLuint name);
+WINGDIAPI void APIENTRY glRasterPos2d (GLdouble x, GLdouble y);
+WINGDIAPI void APIENTRY glRasterPos2dv (const GLdouble *v);
+WINGDIAPI void APIENTRY glRasterPos2f (GLfloat x, GLfloat y);
+WINGDIAPI void APIENTRY glRasterPos2fv (const GLfloat *v);
+WINGDIAPI void APIENTRY glRasterPos2i (GLint x, GLint y);
+WINGDIAPI void APIENTRY glRasterPos2iv (const GLint *v);
+WINGDIAPI void APIENTRY glRasterPos2s (GLshort x, GLshort y);
+WINGDIAPI void APIENTRY glRasterPos2sv (const GLshort *v);
+WINGDIAPI void APIENTRY glRasterPos3d (GLdouble x, GLdouble y, GLdouble z);
+WINGDIAPI void APIENTRY glRasterPos3dv (const GLdouble *v);
+WINGDIAPI void APIENTRY glRasterPos3f (GLfloat x, GLfloat y, GLfloat z);
+WINGDIAPI void APIENTRY glRasterPos3fv (const GLfloat *v);
+WINGDIAPI void APIENTRY glRasterPos3i (GLint x, GLint y, GLint z);
+WINGDIAPI void APIENTRY glRasterPos3iv (const GLint *v);
+WINGDIAPI void APIENTRY glRasterPos3s (GLshort x, GLshort y, GLshort z);
+WINGDIAPI void APIENTRY glRasterPos3sv (const GLshort *v);
+WINGDIAPI void APIENTRY glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+WINGDIAPI void APIENTRY glRasterPos4dv (const GLdouble *v);
+WINGDIAPI void APIENTRY glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+WINGDIAPI void APIENTRY glRasterPos4fv (const GLfloat *v);
+WINGDIAPI void APIENTRY glRasterPos4i (GLint x, GLint y, GLint z, GLint w);
+WINGDIAPI void APIENTRY glRasterPos4iv (const GLint *v);
+WINGDIAPI void APIENTRY glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w);
+WINGDIAPI void APIENTRY glRasterPos4sv (const GLshort *v);
+WINGDIAPI void APIENTRY glReadBuffer (GLenum mode);
+WINGDIAPI void APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
+WINGDIAPI void APIENTRY glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
+WINGDIAPI void APIENTRY glRectdv (const GLdouble *v1, const GLdouble *v2);
+WINGDIAPI void APIENTRY glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
+WINGDIAPI void APIENTRY glRectfv (const GLfloat *v1, const GLfloat *v2);
+WINGDIAPI void APIENTRY glRecti (GLint x1, GLint y1, GLint x2, GLint y2);
+WINGDIAPI void APIENTRY glRectiv (const GLint *v1, const GLint *v2);
+WINGDIAPI void APIENTRY glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2);
+WINGDIAPI void APIENTRY glRectsv (const GLshort *v1, const GLshort *v2);
+WINGDIAPI GLint APIENTRY glRenderMode (GLenum mode);
+WINGDIAPI void APIENTRY glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+WINGDIAPI void APIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+WINGDIAPI void APIENTRY glScaled (GLdouble x, GLdouble y, GLdouble z);
+WINGDIAPI void APIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z);
+WINGDIAPI void APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
+WINGDIAPI void APIENTRY glSelectBuffer (GLsizei size, GLuint *buffer);
+WINGDIAPI void APIENTRY glShadeModel (GLenum mode);
+WINGDIAPI void APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
+WINGDIAPI void APIENTRY glStencilMask (GLuint mask);
+WINGDIAPI void APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
+WINGDIAPI void APIENTRY glTexCoord1d (GLdouble s);
+WINGDIAPI void APIENTRY glTexCoord1dv (const GLdouble *v);
+WINGDIAPI void APIENTRY glTexCoord1f (GLfloat s);
+WINGDIAPI void APIENTRY glTexCoord1fv (const GLfloat *v);
+WINGDIAPI void APIENTRY glTexCoord1i (GLint s);
+WINGDIAPI void APIENTRY glTexCoord1iv (const GLint *v);
+WINGDIAPI void APIENTRY glTexCoord1s (GLshort s);
+WINGDIAPI void APIENTRY glTexCoord1sv (const GLshort *v);
+WINGDIAPI void APIENTRY glTexCoord2d (GLdouble s, GLdouble t);
+WINGDIAPI void APIENTRY glTexCoord2dv (const GLdouble *v);
+WINGDIAPI void APIENTRY glTexCoord2f (GLfloat s, GLfloat t);
+WINGDIAPI void APIENTRY glTexCoord2fv (const GLfloat *v);
+WINGDIAPI void APIENTRY glTexCoord2i (GLint s, GLint t);
+WINGDIAPI void APIENTRY glTexCoord2iv (const GLint *v);
+WINGDIAPI void APIENTRY glTexCoord2s (GLshort s, GLshort t);
+WINGDIAPI void APIENTRY glTexCoord2sv (const GLshort *v);
+WINGDIAPI void APIENTRY glTexCoord3d (GLdouble s, GLdouble t, GLdouble r);
+WINGDIAPI void APIENTRY glTexCoord3dv (const GLdouble *v);
+WINGDIAPI void APIENTRY glTexCoord3f (GLfloat s, GLfloat t, GLfloat r);
+WINGDIAPI void APIENTRY glTexCoord3fv (const GLfloat *v);
+WINGDIAPI void APIENTRY glTexCoord3i (GLint s, GLint t, GLint r);
+WINGDIAPI void APIENTRY glTexCoord3iv (const GLint *v);
+WINGDIAPI void APIENTRY glTexCoord3s (GLshort s, GLshort t, GLshort r);
+WINGDIAPI void APIENTRY glTexCoord3sv (const GLshort *v);
+WINGDIAPI void APIENTRY glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+WINGDIAPI void APIENTRY glTexCoord4dv (const GLdouble *v);
+WINGDIAPI void APIENTRY glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+WINGDIAPI void APIENTRY glTexCoord4fv (const GLfloat *v);
+WINGDIAPI void APIENTRY glTexCoord4i (GLint s, GLint t, GLint r, GLint q);
+WINGDIAPI void APIENTRY glTexCoord4iv (const GLint *v);
+WINGDIAPI void APIENTRY glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q);
+WINGDIAPI void APIENTRY glTexCoord4sv (const GLshort *v);
+WINGDIAPI void APIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+WINGDIAPI void APIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param);
+WINGDIAPI void APIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params);
+WINGDIAPI void APIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param);
+WINGDIAPI void APIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params);
+WINGDIAPI void APIENTRY glTexGend (GLenum coord, GLenum pname, GLdouble param);
+WINGDIAPI void APIENTRY glTexGendv (GLenum coord, GLenum pname, const GLdouble *params);
+WINGDIAPI void APIENTRY glTexGenf (GLenum coord, GLenum pname, GLfloat param);
+WINGDIAPI void APIENTRY glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params);
+WINGDIAPI void APIENTRY glTexGeni (GLenum coord, GLenum pname, GLint param);
+WINGDIAPI void APIENTRY glTexGeniv (GLenum coord, GLenum pname, const GLint *params);
+WINGDIAPI void APIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+WINGDIAPI void APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+WINGDIAPI void APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
+WINGDIAPI void APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+WINGDIAPI void APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
+WINGDIAPI void APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
+WINGDIAPI void APIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
+WINGDIAPI void APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+WINGDIAPI void APIENTRY glTranslated (GLdouble x, GLdouble y, GLdouble z);
+WINGDIAPI void APIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z);
+WINGDIAPI void APIENTRY glVertex2d (GLdouble x, GLdouble y);
+WINGDIAPI void APIENTRY glVertex2dv (const GLdouble *v);
+WINGDIAPI void APIENTRY glVertex2f (GLfloat x, GLfloat y);
+WINGDIAPI void APIENTRY glVertex2fv (const GLfloat *v);
+WINGDIAPI void APIENTRY glVertex2i (GLint x, GLint y);
+WINGDIAPI void APIENTRY glVertex2iv (const GLint *v);
+WINGDIAPI void APIENTRY glVertex2s (GLshort x, GLshort y);
+WINGDIAPI void APIENTRY glVertex2sv (const GLshort *v);
+WINGDIAPI void APIENTRY glVertex3d (GLdouble x, GLdouble y, GLdouble z);
+WINGDIAPI void APIENTRY glVertex3dv (const GLdouble *v);
+WINGDIAPI void APIENTRY glVertex3f (GLfloat x, GLfloat y, GLfloat z);
+WINGDIAPI void APIENTRY glVertex3fv (const GLfloat *v);
+WINGDIAPI void APIENTRY glVertex3i (GLint x, GLint y, GLint z);
+WINGDIAPI void APIENTRY glVertex3iv (const GLint *v);
+WINGDIAPI void APIENTRY glVertex3s (GLshort x, GLshort y, GLshort z);
+WINGDIAPI void APIENTRY glVertex3sv (const GLshort *v);
+WINGDIAPI void APIENTRY glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+WINGDIAPI void APIENTRY glVertex4dv (const GLdouble *v);
+WINGDIAPI void APIENTRY glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+WINGDIAPI void APIENTRY glVertex4fv (const GLfloat *v);
+WINGDIAPI void APIENTRY glVertex4i (GLint x, GLint y, GLint z, GLint w);
+WINGDIAPI void APIENTRY glVertex4iv (const GLint *v);
+WINGDIAPI void APIENTRY glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w);
+WINGDIAPI void APIENTRY glVertex4sv (const GLshort *v);
+WINGDIAPI void APIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+WINGDIAPI void APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
+
+/* EXT_vertex_array */
+typedef void (APIENTRY * PFNGLARRAYELEMENTEXTPROC) (GLint i);
+typedef void (APIENTRY * PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (APIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer);
+typedef void (APIENTRY * PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params);
+typedef void (APIENTRY * PFNGLARRAYELEMENTARRAYEXTPROC)(GLenum mode, GLsizei count, const GLvoid* pi);
+
+/* WIN_draw_range_elements */
+typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTSWINPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+
+/* WIN_swap_hint */
+typedef void (APIENTRY * PFNGLADDSWAPHINTRECTWINPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+
+/* EXT_paletted_texture */
+typedef void (APIENTRY * PFNGLCOLORTABLEEXTPROC)
+ (GLenum target, GLenum internalFormat, GLsizei width, GLenum format,
+ GLenum type, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOLORSUBTABLEEXTPROC)
+ (GLenum target, GLsizei start, GLsizei count, GLenum format,
+ GLenum type, const GLvoid *data);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEEXTPROC)
+ (GLenum target, GLenum format, GLenum type, GLvoid *data);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)
+ (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)
+ (GLenum target, GLenum pname, GLfloat *params);
+
+#ifdef __cplusplus
+}
+#endif
+
+#if !defined (_WIN32)
+#undef WINGDIAPI
+#undef APIENTRY
+#endif
+
+#endif /* __GL_H__ */
+#endif /* __gl_h_ */
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glcorearb.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glcorearb.h
new file mode 100644
index 00000000..07cb03e1
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glcorearb.h
@@ -0,0 +1,4533 @@
+#ifndef __glcorearb_h_
+#define __glcorearb_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2007-2012 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+/* glcorearb.h replaces gl3.h. It is for use with OpenGL core
+ * profile implementations.
+ *
+ * glcorearb.h last updated on $Date: 2012-09-19 19:02:24 -0700 (Wed, 19 Sep 2012) $
+ *
+ * RELEASE NOTES - 2012/09/19
+ *
+ * glcorearb.h should be placed in the same directory as gl.h and
+ * included as
+ * '<GL/glcorearb.h>'.
+ *
+ * glcorearb.h includes only APIs in the latest OpenGL core profile
+ * implementation together with APIs in newer ARB extensions which can be
+ * can be supported by the core profile. It does not, and never will
+ * include functionality removed from the core profile, such as
+ * fixed-function vertex and fragment processing.
+ *
+ * It is not possible to #include both <GL/glcorearb.h> and either of
+ * <GL/gl.h> or <GL/glext.h> in the same source file.
+ *
+ * Feedback can be given by registering for the Khronos Bugzilla
+ * (www.khronos.org/bugzilla) and filing issues there under product
+ * "OpenGL", category "Registry".
+ */
+
+/* Function declaration macros - to move into glplatform.h */
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#define WIN32_LEAN_AND_MEAN 1
+#include <windows.h>
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+/* Base GL types */
+
+typedef unsigned int GLenum;
+typedef unsigned char GLboolean;
+typedef unsigned int GLbitfield;
+typedef signed char GLbyte;
+typedef short GLshort;
+typedef int GLint;
+typedef int GLsizei;
+typedef unsigned char GLubyte;
+typedef unsigned short GLushort;
+typedef unsigned int GLuint;
+typedef unsigned short GLhalf;
+typedef float GLfloat;
+typedef float GLclampf;
+typedef double GLdouble;
+typedef double GLclampd;
+typedef void GLvoid;
+
+/*************************************************************/
+
+#ifndef GL_VERSION_1_1
+/* AttribMask */
+#define GL_DEPTH_BUFFER_BIT 0x00000100
+#define GL_STENCIL_BUFFER_BIT 0x00000400
+#define GL_COLOR_BUFFER_BIT 0x00004000
+/* Boolean */
+#define GL_FALSE 0
+#define GL_TRUE 1
+/* BeginMode */
+#define GL_POINTS 0x0000
+#define GL_LINES 0x0001
+#define GL_LINE_LOOP 0x0002
+#define GL_LINE_STRIP 0x0003
+#define GL_TRIANGLES 0x0004
+#define GL_TRIANGLE_STRIP 0x0005
+#define GL_TRIANGLE_FAN 0x0006
+#define GL_QUADS 0x0007
+/* AlphaFunction */
+#define GL_NEVER 0x0200
+#define GL_LESS 0x0201
+#define GL_EQUAL 0x0202
+#define GL_LEQUAL 0x0203
+#define GL_GREATER 0x0204
+#define GL_NOTEQUAL 0x0205
+#define GL_GEQUAL 0x0206
+#define GL_ALWAYS 0x0207
+/* BlendingFactorDest */
+#define GL_ZERO 0
+#define GL_ONE 1
+#define GL_SRC_COLOR 0x0300
+#define GL_ONE_MINUS_SRC_COLOR 0x0301
+#define GL_SRC_ALPHA 0x0302
+#define GL_ONE_MINUS_SRC_ALPHA 0x0303
+#define GL_DST_ALPHA 0x0304
+#define GL_ONE_MINUS_DST_ALPHA 0x0305
+/* BlendingFactorSrc */
+#define GL_DST_COLOR 0x0306
+#define GL_ONE_MINUS_DST_COLOR 0x0307
+#define GL_SRC_ALPHA_SATURATE 0x0308
+/* DrawBufferMode */
+#define GL_NONE 0
+#define GL_FRONT_LEFT 0x0400
+#define GL_FRONT_RIGHT 0x0401
+#define GL_BACK_LEFT 0x0402
+#define GL_BACK_RIGHT 0x0403
+#define GL_FRONT 0x0404
+#define GL_BACK 0x0405
+#define GL_LEFT 0x0406
+#define GL_RIGHT 0x0407
+#define GL_FRONT_AND_BACK 0x0408
+/* ErrorCode */
+#define GL_NO_ERROR 0
+#define GL_INVALID_ENUM 0x0500
+#define GL_INVALID_VALUE 0x0501
+#define GL_INVALID_OPERATION 0x0502
+#define GL_OUT_OF_MEMORY 0x0505
+/* FrontFaceDirection */
+#define GL_CW 0x0900
+#define GL_CCW 0x0901
+/* GetPName */
+#define GL_POINT_SIZE 0x0B11
+#define GL_POINT_SIZE_RANGE 0x0B12
+#define GL_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_LINE_SMOOTH 0x0B20
+#define GL_LINE_WIDTH 0x0B21
+#define GL_LINE_WIDTH_RANGE 0x0B22
+#define GL_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_POLYGON_MODE 0x0B40
+#define GL_POLYGON_SMOOTH 0x0B41
+#define GL_CULL_FACE 0x0B44
+#define GL_CULL_FACE_MODE 0x0B45
+#define GL_FRONT_FACE 0x0B46
+#define GL_DEPTH_RANGE 0x0B70
+#define GL_DEPTH_TEST 0x0B71
+#define GL_DEPTH_WRITEMASK 0x0B72
+#define GL_DEPTH_CLEAR_VALUE 0x0B73
+#define GL_DEPTH_FUNC 0x0B74
+#define GL_STENCIL_TEST 0x0B90
+#define GL_STENCIL_CLEAR_VALUE 0x0B91
+#define GL_STENCIL_FUNC 0x0B92
+#define GL_STENCIL_VALUE_MASK 0x0B93
+#define GL_STENCIL_FAIL 0x0B94
+#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
+#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
+#define GL_STENCIL_REF 0x0B97
+#define GL_STENCIL_WRITEMASK 0x0B98
+#define GL_VIEWPORT 0x0BA2
+#define GL_DITHER 0x0BD0
+#define GL_BLEND_DST 0x0BE0
+#define GL_BLEND_SRC 0x0BE1
+#define GL_BLEND 0x0BE2
+#define GL_LOGIC_OP_MODE 0x0BF0
+#define GL_COLOR_LOGIC_OP 0x0BF2
+#define GL_DRAW_BUFFER 0x0C01
+#define GL_READ_BUFFER 0x0C02
+#define GL_SCISSOR_BOX 0x0C10
+#define GL_SCISSOR_TEST 0x0C11
+#define GL_COLOR_CLEAR_VALUE 0x0C22
+#define GL_COLOR_WRITEMASK 0x0C23
+#define GL_DOUBLEBUFFER 0x0C32
+#define GL_STEREO 0x0C33
+#define GL_LINE_SMOOTH_HINT 0x0C52
+#define GL_POLYGON_SMOOTH_HINT 0x0C53
+#define GL_UNPACK_SWAP_BYTES 0x0CF0
+#define GL_UNPACK_LSB_FIRST 0x0CF1
+#define GL_UNPACK_ROW_LENGTH 0x0CF2
+#define GL_UNPACK_SKIP_ROWS 0x0CF3
+#define GL_UNPACK_SKIP_PIXELS 0x0CF4
+#define GL_UNPACK_ALIGNMENT 0x0CF5
+#define GL_PACK_SWAP_BYTES 0x0D00
+#define GL_PACK_LSB_FIRST 0x0D01
+#define GL_PACK_ROW_LENGTH 0x0D02
+#define GL_PACK_SKIP_ROWS 0x0D03
+#define GL_PACK_SKIP_PIXELS 0x0D04
+#define GL_PACK_ALIGNMENT 0x0D05
+#define GL_MAX_TEXTURE_SIZE 0x0D33
+#define GL_MAX_VIEWPORT_DIMS 0x0D3A
+#define GL_SUBPIXEL_BITS 0x0D50
+#define GL_TEXTURE_1D 0x0DE0
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_POLYGON_OFFSET_UNITS 0x2A00
+#define GL_POLYGON_OFFSET_POINT 0x2A01
+#define GL_POLYGON_OFFSET_LINE 0x2A02
+#define GL_POLYGON_OFFSET_FILL 0x8037
+#define GL_POLYGON_OFFSET_FACTOR 0x8038
+#define GL_TEXTURE_BINDING_1D 0x8068
+#define GL_TEXTURE_BINDING_2D 0x8069
+/* GetTextureParameter */
+#define GL_TEXTURE_WIDTH 0x1000
+#define GL_TEXTURE_HEIGHT 0x1001
+#define GL_TEXTURE_INTERNAL_FORMAT 0x1003
+#define GL_TEXTURE_BORDER_COLOR 0x1004
+#define GL_TEXTURE_RED_SIZE 0x805C
+#define GL_TEXTURE_GREEN_SIZE 0x805D
+#define GL_TEXTURE_BLUE_SIZE 0x805E
+#define GL_TEXTURE_ALPHA_SIZE 0x805F
+/* HintMode */
+#define GL_DONT_CARE 0x1100
+#define GL_FASTEST 0x1101
+#define GL_NICEST 0x1102
+/* DataType */
+#define GL_BYTE 0x1400
+#define GL_UNSIGNED_BYTE 0x1401
+#define GL_SHORT 0x1402
+#define GL_UNSIGNED_SHORT 0x1403
+#define GL_INT 0x1404
+#define GL_UNSIGNED_INT 0x1405
+#define GL_FLOAT 0x1406
+#define GL_DOUBLE 0x140A
+/* ErrorCode */
+#define GL_STACK_OVERFLOW 0x0503
+#define GL_STACK_UNDERFLOW 0x0504
+/* LogicOp */
+#define GL_CLEAR 0x1500
+#define GL_AND 0x1501
+#define GL_AND_REVERSE 0x1502
+#define GL_COPY 0x1503
+#define GL_AND_INVERTED 0x1504
+#define GL_NOOP 0x1505
+#define GL_XOR 0x1506
+#define GL_OR 0x1507
+#define GL_NOR 0x1508
+#define GL_EQUIV 0x1509
+#define GL_INVERT 0x150A
+#define GL_OR_REVERSE 0x150B
+#define GL_COPY_INVERTED 0x150C
+#define GL_OR_INVERTED 0x150D
+#define GL_NAND 0x150E
+#define GL_SET 0x150F
+/* MatrixMode (for gl3.h, FBO attachment type) */
+#define GL_TEXTURE 0x1702
+/* PixelCopyType */
+#define GL_COLOR 0x1800
+#define GL_DEPTH 0x1801
+#define GL_STENCIL 0x1802
+/* PixelFormat */
+#define GL_STENCIL_INDEX 0x1901
+#define GL_DEPTH_COMPONENT 0x1902
+#define GL_RED 0x1903
+#define GL_GREEN 0x1904
+#define GL_BLUE 0x1905
+#define GL_ALPHA 0x1906
+#define GL_RGB 0x1907
+#define GL_RGBA 0x1908
+/* PolygonMode */
+#define GL_POINT 0x1B00
+#define GL_LINE 0x1B01
+#define GL_FILL 0x1B02
+/* StencilOp */
+#define GL_KEEP 0x1E00
+#define GL_REPLACE 0x1E01
+#define GL_INCR 0x1E02
+#define GL_DECR 0x1E03
+/* StringName */
+#define GL_VENDOR 0x1F00
+#define GL_RENDERER 0x1F01
+#define GL_VERSION 0x1F02
+#define GL_EXTENSIONS 0x1F03
+/* TextureMagFilter */
+#define GL_NEAREST 0x2600
+#define GL_LINEAR 0x2601
+/* TextureMinFilter */
+#define GL_NEAREST_MIPMAP_NEAREST 0x2700
+#define GL_LINEAR_MIPMAP_NEAREST 0x2701
+#define GL_NEAREST_MIPMAP_LINEAR 0x2702
+#define GL_LINEAR_MIPMAP_LINEAR 0x2703
+/* TextureParameterName */
+#define GL_TEXTURE_MAG_FILTER 0x2800
+#define GL_TEXTURE_MIN_FILTER 0x2801
+#define GL_TEXTURE_WRAP_S 0x2802
+#define GL_TEXTURE_WRAP_T 0x2803
+/* TextureTarget */
+#define GL_PROXY_TEXTURE_1D 0x8063
+#define GL_PROXY_TEXTURE_2D 0x8064
+/* TextureWrapMode */
+#define GL_REPEAT 0x2901
+/* PixelInternalFormat */
+#define GL_R3_G3_B2 0x2A10
+#define GL_RGB4 0x804F
+#define GL_RGB5 0x8050
+#define GL_RGB8 0x8051
+#define GL_RGB10 0x8052
+#define GL_RGB12 0x8053
+#define GL_RGB16 0x8054
+#define GL_RGBA2 0x8055
+#define GL_RGBA4 0x8056
+#define GL_RGB5_A1 0x8057
+#define GL_RGBA8 0x8058
+#define GL_RGB10_A2 0x8059
+#define GL_RGBA12 0x805A
+#define GL_RGBA16 0x805B
+#endif
+
+#ifndef GL_VERSION_1_2
+#define GL_UNSIGNED_BYTE_3_3_2 0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_INT_8_8_8_8 0x8035
+#define GL_UNSIGNED_INT_10_10_10_2 0x8036
+#define GL_TEXTURE_BINDING_3D 0x806A
+#define GL_PACK_SKIP_IMAGES 0x806B
+#define GL_PACK_IMAGE_HEIGHT 0x806C
+#define GL_UNPACK_SKIP_IMAGES 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT 0x806E
+#define GL_TEXTURE_3D 0x806F
+#define GL_PROXY_TEXTURE_3D 0x8070
+#define GL_TEXTURE_DEPTH 0x8071
+#define GL_TEXTURE_WRAP_R 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE 0x8073
+#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
+#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_BGR 0x80E0
+#define GL_BGRA 0x80E1
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_TEXTURE_MIN_LOD 0x813A
+#define GL_TEXTURE_MAX_LOD 0x813B
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+#endif
+
+#ifndef GL_ARB_imaging
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_BLEND_COLOR 0x8005
+#define GL_FUNC_ADD 0x8006
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+#define GL_BLEND_EQUATION 0x8009
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#endif
+
+#ifndef GL_VERSION_1_3
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_MULTISAMPLE 0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE 0x809F
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+#define GL_COMPRESSED_RGB 0x84ED
+#define GL_COMPRESSED_RGBA 0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT 0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0
+#define GL_TEXTURE_COMPRESSED 0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+#define GL_CLAMP_TO_BORDER 0x812D
+#endif
+
+#ifndef GL_VERSION_1_4
+#define GL_BLEND_DST_RGB 0x80C8
+#define GL_BLEND_SRC_RGB 0x80C9
+#define GL_BLEND_DST_ALPHA 0x80CA
+#define GL_BLEND_SRC_ALPHA 0x80CB
+#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128
+#define GL_DEPTH_COMPONENT16 0x81A5
+#define GL_DEPTH_COMPONENT24 0x81A6
+#define GL_DEPTH_COMPONENT32 0x81A7
+#define GL_MIRRORED_REPEAT 0x8370
+#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
+#define GL_TEXTURE_LOD_BIAS 0x8501
+#define GL_INCR_WRAP 0x8507
+#define GL_DECR_WRAP 0x8508
+#define GL_TEXTURE_DEPTH_SIZE 0x884A
+#define GL_TEXTURE_COMPARE_MODE 0x884C
+#define GL_TEXTURE_COMPARE_FUNC 0x884D
+#endif
+
+#ifndef GL_VERSION_1_5
+#define GL_BUFFER_SIZE 0x8764
+#define GL_BUFFER_USAGE 0x8765
+#define GL_QUERY_COUNTER_BITS 0x8864
+#define GL_CURRENT_QUERY 0x8865
+#define GL_QUERY_RESULT 0x8866
+#define GL_QUERY_RESULT_AVAILABLE 0x8867
+#define GL_ARRAY_BUFFER 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER 0x8893
+#define GL_ARRAY_BUFFER_BINDING 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
+#define GL_READ_ONLY 0x88B8
+#define GL_WRITE_ONLY 0x88B9
+#define GL_READ_WRITE 0x88BA
+#define GL_BUFFER_ACCESS 0x88BB
+#define GL_BUFFER_MAPPED 0x88BC
+#define GL_BUFFER_MAP_POINTER 0x88BD
+#define GL_STREAM_DRAW 0x88E0
+#define GL_STREAM_READ 0x88E1
+#define GL_STREAM_COPY 0x88E2
+#define GL_STATIC_DRAW 0x88E4
+#define GL_STATIC_READ 0x88E5
+#define GL_STATIC_COPY 0x88E6
+#define GL_DYNAMIC_DRAW 0x88E8
+#define GL_DYNAMIC_READ 0x88E9
+#define GL_DYNAMIC_COPY 0x88EA
+#define GL_SAMPLES_PASSED 0x8914
+#define GL_SRC1_ALPHA 0x8589
+#endif
+
+#ifndef GL_VERSION_2_0
+#define GL_BLEND_EQUATION_RGB 0x8009
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
+#define GL_CURRENT_VERTEX_ATTRIB 0x8626
+#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
+#define GL_STENCIL_BACK_FUNC 0x8800
+#define GL_STENCIL_BACK_FAIL 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
+#define GL_MAX_DRAW_BUFFERS 0x8824
+#define GL_DRAW_BUFFER0 0x8825
+#define GL_DRAW_BUFFER1 0x8826
+#define GL_DRAW_BUFFER2 0x8827
+#define GL_DRAW_BUFFER3 0x8828
+#define GL_DRAW_BUFFER4 0x8829
+#define GL_DRAW_BUFFER5 0x882A
+#define GL_DRAW_BUFFER6 0x882B
+#define GL_DRAW_BUFFER7 0x882C
+#define GL_DRAW_BUFFER8 0x882D
+#define GL_DRAW_BUFFER9 0x882E
+#define GL_DRAW_BUFFER10 0x882F
+#define GL_DRAW_BUFFER11 0x8830
+#define GL_DRAW_BUFFER12 0x8831
+#define GL_DRAW_BUFFER13 0x8832
+#define GL_DRAW_BUFFER14 0x8833
+#define GL_DRAW_BUFFER15 0x8834
+#define GL_BLEND_EQUATION_ALPHA 0x883D
+#define GL_MAX_VERTEX_ATTRIBS 0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
+#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
+#define GL_FRAGMENT_SHADER 0x8B30
+#define GL_VERTEX_SHADER 0x8B31
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
+#define GL_MAX_VARYING_FLOATS 0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
+#define GL_SHADER_TYPE 0x8B4F
+#define GL_FLOAT_VEC2 0x8B50
+#define GL_FLOAT_VEC3 0x8B51
+#define GL_FLOAT_VEC4 0x8B52
+#define GL_INT_VEC2 0x8B53
+#define GL_INT_VEC3 0x8B54
+#define GL_INT_VEC4 0x8B55
+#define GL_BOOL 0x8B56
+#define GL_BOOL_VEC2 0x8B57
+#define GL_BOOL_VEC3 0x8B58
+#define GL_BOOL_VEC4 0x8B59
+#define GL_FLOAT_MAT2 0x8B5A
+#define GL_FLOAT_MAT3 0x8B5B
+#define GL_FLOAT_MAT4 0x8B5C
+#define GL_SAMPLER_1D 0x8B5D
+#define GL_SAMPLER_2D 0x8B5E
+#define GL_SAMPLER_3D 0x8B5F
+#define GL_SAMPLER_CUBE 0x8B60
+#define GL_SAMPLER_1D_SHADOW 0x8B61
+#define GL_SAMPLER_2D_SHADOW 0x8B62
+#define GL_DELETE_STATUS 0x8B80
+#define GL_COMPILE_STATUS 0x8B81
+#define GL_LINK_STATUS 0x8B82
+#define GL_VALIDATE_STATUS 0x8B83
+#define GL_INFO_LOG_LENGTH 0x8B84
+#define GL_ATTACHED_SHADERS 0x8B85
+#define GL_ACTIVE_UNIFORMS 0x8B86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
+#define GL_SHADER_SOURCE_LENGTH 0x8B88
+#define GL_ACTIVE_ATTRIBUTES 0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
+#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
+#define GL_CURRENT_PROGRAM 0x8B8D
+#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0
+#define GL_LOWER_LEFT 0x8CA1
+#define GL_UPPER_LEFT 0x8CA2
+#define GL_STENCIL_BACK_REF 0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
+#endif
+
+#ifndef GL_VERSION_2_1
+#define GL_PIXEL_PACK_BUFFER 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
+#define GL_FLOAT_MAT2x3 0x8B65
+#define GL_FLOAT_MAT2x4 0x8B66
+#define GL_FLOAT_MAT3x2 0x8B67
+#define GL_FLOAT_MAT3x4 0x8B68
+#define GL_FLOAT_MAT4x2 0x8B69
+#define GL_FLOAT_MAT4x3 0x8B6A
+#define GL_SRGB 0x8C40
+#define GL_SRGB8 0x8C41
+#define GL_SRGB_ALPHA 0x8C42
+#define GL_SRGB8_ALPHA8 0x8C43
+#define GL_COMPRESSED_SRGB 0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA 0x8C49
+#endif
+
+#ifndef GL_VERSION_3_0
+#define GL_COMPARE_REF_TO_TEXTURE 0x884E
+#define GL_CLIP_DISTANCE0 0x3000
+#define GL_CLIP_DISTANCE1 0x3001
+#define GL_CLIP_DISTANCE2 0x3002
+#define GL_CLIP_DISTANCE3 0x3003
+#define GL_CLIP_DISTANCE4 0x3004
+#define GL_CLIP_DISTANCE5 0x3005
+#define GL_CLIP_DISTANCE6 0x3006
+#define GL_CLIP_DISTANCE7 0x3007
+#define GL_MAX_CLIP_DISTANCES 0x0D32
+#define GL_MAJOR_VERSION 0x821B
+#define GL_MINOR_VERSION 0x821C
+#define GL_NUM_EXTENSIONS 0x821D
+#define GL_CONTEXT_FLAGS 0x821E
+#define GL_COMPRESSED_RED 0x8225
+#define GL_COMPRESSED_RG 0x8226
+#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001
+#define GL_RGBA32F 0x8814
+#define GL_RGB32F 0x8815
+#define GL_RGBA16F 0x881A
+#define GL_RGB16F 0x881B
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD
+#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF
+#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905
+#define GL_CLAMP_READ_COLOR 0x891C
+#define GL_FIXED_ONLY 0x891D
+#define GL_MAX_VARYING_COMPONENTS 0x8B4B
+#define GL_TEXTURE_1D_ARRAY 0x8C18
+#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19
+#define GL_TEXTURE_2D_ARRAY 0x8C1A
+#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B
+#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C
+#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D
+#define GL_R11F_G11F_B10F 0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B
+#define GL_RGB9_E5 0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E
+#define GL_TEXTURE_SHARED_SIZE 0x8C3F
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85
+#define GL_PRIMITIVES_GENERATED 0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88
+#define GL_RASTERIZER_DISCARD 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS 0x8C8C
+#define GL_SEPARATE_ATTRIBS 0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F
+#define GL_RGBA32UI 0x8D70
+#define GL_RGB32UI 0x8D71
+#define GL_RGBA16UI 0x8D76
+#define GL_RGB16UI 0x8D77
+#define GL_RGBA8UI 0x8D7C
+#define GL_RGB8UI 0x8D7D
+#define GL_RGBA32I 0x8D82
+#define GL_RGB32I 0x8D83
+#define GL_RGBA16I 0x8D88
+#define GL_RGB16I 0x8D89
+#define GL_RGBA8I 0x8D8E
+#define GL_RGB8I 0x8D8F
+#define GL_RED_INTEGER 0x8D94
+#define GL_GREEN_INTEGER 0x8D95
+#define GL_BLUE_INTEGER 0x8D96
+#define GL_RGB_INTEGER 0x8D98
+#define GL_RGBA_INTEGER 0x8D99
+#define GL_BGR_INTEGER 0x8D9A
+#define GL_BGRA_INTEGER 0x8D9B
+#define GL_SAMPLER_1D_ARRAY 0x8DC0
+#define GL_SAMPLER_2D_ARRAY 0x8DC1
+#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3
+#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW 0x8DC5
+#define GL_UNSIGNED_INT_VEC2 0x8DC6
+#define GL_UNSIGNED_INT_VEC3 0x8DC7
+#define GL_UNSIGNED_INT_VEC4 0x8DC8
+#define GL_INT_SAMPLER_1D 0x8DC9
+#define GL_INT_SAMPLER_2D 0x8DCA
+#define GL_INT_SAMPLER_3D 0x8DCB
+#define GL_INT_SAMPLER_CUBE 0x8DCC
+#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE
+#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF
+#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7
+#define GL_QUERY_WAIT 0x8E13
+#define GL_QUERY_NO_WAIT 0x8E14
+#define GL_QUERY_BY_REGION_WAIT 0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16
+#define GL_BUFFER_ACCESS_FLAGS 0x911F
+#define GL_BUFFER_MAP_LENGTH 0x9120
+#define GL_BUFFER_MAP_OFFSET 0x9121
+/* Reuse tokens from ARB_depth_buffer_float */
+/* reuse GL_DEPTH_COMPONENT32F */
+/* reuse GL_DEPTH32F_STENCIL8 */
+/* reuse GL_FLOAT_32_UNSIGNED_INT_24_8_REV */
+/* Reuse tokens from ARB_framebuffer_object */
+/* reuse GL_INVALID_FRAMEBUFFER_OPERATION */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */
+/* reuse GL_FRAMEBUFFER_DEFAULT */
+/* reuse GL_FRAMEBUFFER_UNDEFINED */
+/* reuse GL_DEPTH_STENCIL_ATTACHMENT */
+/* reuse GL_INDEX */
+/* reuse GL_MAX_RENDERBUFFER_SIZE */
+/* reuse GL_DEPTH_STENCIL */
+/* reuse GL_UNSIGNED_INT_24_8 */
+/* reuse GL_DEPTH24_STENCIL8 */
+/* reuse GL_TEXTURE_STENCIL_SIZE */
+/* reuse GL_TEXTURE_RED_TYPE */
+/* reuse GL_TEXTURE_GREEN_TYPE */
+/* reuse GL_TEXTURE_BLUE_TYPE */
+/* reuse GL_TEXTURE_ALPHA_TYPE */
+/* reuse GL_TEXTURE_DEPTH_TYPE */
+/* reuse GL_UNSIGNED_NORMALIZED */
+/* reuse GL_FRAMEBUFFER_BINDING */
+/* reuse GL_DRAW_FRAMEBUFFER_BINDING */
+/* reuse GL_RENDERBUFFER_BINDING */
+/* reuse GL_READ_FRAMEBUFFER */
+/* reuse GL_DRAW_FRAMEBUFFER */
+/* reuse GL_READ_FRAMEBUFFER_BINDING */
+/* reuse GL_RENDERBUFFER_SAMPLES */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
+/* reuse GL_FRAMEBUFFER_COMPLETE */
+/* reuse GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */
+/* reuse GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */
+/* reuse GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */
+/* reuse GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */
+/* reuse GL_FRAMEBUFFER_UNSUPPORTED */
+/* reuse GL_MAX_COLOR_ATTACHMENTS */
+/* reuse GL_COLOR_ATTACHMENT0 */
+/* reuse GL_COLOR_ATTACHMENT1 */
+/* reuse GL_COLOR_ATTACHMENT2 */
+/* reuse GL_COLOR_ATTACHMENT3 */
+/* reuse GL_COLOR_ATTACHMENT4 */
+/* reuse GL_COLOR_ATTACHMENT5 */
+/* reuse GL_COLOR_ATTACHMENT6 */
+/* reuse GL_COLOR_ATTACHMENT7 */
+/* reuse GL_COLOR_ATTACHMENT8 */
+/* reuse GL_COLOR_ATTACHMENT9 */
+/* reuse GL_COLOR_ATTACHMENT10 */
+/* reuse GL_COLOR_ATTACHMENT11 */
+/* reuse GL_COLOR_ATTACHMENT12 */
+/* reuse GL_COLOR_ATTACHMENT13 */
+/* reuse GL_COLOR_ATTACHMENT14 */
+/* reuse GL_COLOR_ATTACHMENT15 */
+/* reuse GL_DEPTH_ATTACHMENT */
+/* reuse GL_STENCIL_ATTACHMENT */
+/* reuse GL_FRAMEBUFFER */
+/* reuse GL_RENDERBUFFER */
+/* reuse GL_RENDERBUFFER_WIDTH */
+/* reuse GL_RENDERBUFFER_HEIGHT */
+/* reuse GL_RENDERBUFFER_INTERNAL_FORMAT */
+/* reuse GL_STENCIL_INDEX1 */
+/* reuse GL_STENCIL_INDEX4 */
+/* reuse GL_STENCIL_INDEX8 */
+/* reuse GL_STENCIL_INDEX16 */
+/* reuse GL_RENDERBUFFER_RED_SIZE */
+/* reuse GL_RENDERBUFFER_GREEN_SIZE */
+/* reuse GL_RENDERBUFFER_BLUE_SIZE */
+/* reuse GL_RENDERBUFFER_ALPHA_SIZE */
+/* reuse GL_RENDERBUFFER_DEPTH_SIZE */
+/* reuse GL_RENDERBUFFER_STENCIL_SIZE */
+/* reuse GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */
+/* reuse GL_MAX_SAMPLES */
+/* Reuse tokens from ARB_framebuffer_sRGB */
+/* reuse GL_FRAMEBUFFER_SRGB */
+/* Reuse tokens from ARB_half_float_vertex */
+/* reuse GL_HALF_FLOAT */
+/* Reuse tokens from ARB_map_buffer_range */
+/* reuse GL_MAP_READ_BIT */
+/* reuse GL_MAP_WRITE_BIT */
+/* reuse GL_MAP_INVALIDATE_RANGE_BIT */
+/* reuse GL_MAP_INVALIDATE_BUFFER_BIT */
+/* reuse GL_MAP_FLUSH_EXPLICIT_BIT */
+/* reuse GL_MAP_UNSYNCHRONIZED_BIT */
+/* Reuse tokens from ARB_texture_compression_rgtc */
+/* reuse GL_COMPRESSED_RED_RGTC1 */
+/* reuse GL_COMPRESSED_SIGNED_RED_RGTC1 */
+/* reuse GL_COMPRESSED_RG_RGTC2 */
+/* reuse GL_COMPRESSED_SIGNED_RG_RGTC2 */
+/* Reuse tokens from ARB_texture_rg */
+/* reuse GL_RG */
+/* reuse GL_RG_INTEGER */
+/* reuse GL_R8 */
+/* reuse GL_R16 */
+/* reuse GL_RG8 */
+/* reuse GL_RG16 */
+/* reuse GL_R16F */
+/* reuse GL_R32F */
+/* reuse GL_RG16F */
+/* reuse GL_RG32F */
+/* reuse GL_R8I */
+/* reuse GL_R8UI */
+/* reuse GL_R16I */
+/* reuse GL_R16UI */
+/* reuse GL_R32I */
+/* reuse GL_R32UI */
+/* reuse GL_RG8I */
+/* reuse GL_RG8UI */
+/* reuse GL_RG16I */
+/* reuse GL_RG16UI */
+/* reuse GL_RG32I */
+/* reuse GL_RG32UI */
+/* Reuse tokens from ARB_vertex_array_object */
+/* reuse GL_VERTEX_ARRAY_BINDING */
+#endif
+
+#ifndef GL_VERSION_3_1
+#define GL_SAMPLER_2D_RECT 0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64
+#define GL_SAMPLER_BUFFER 0x8DC2
+#define GL_INT_SAMPLER_2D_RECT 0x8DCD
+#define GL_INT_SAMPLER_BUFFER 0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8
+#define GL_TEXTURE_BUFFER 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D
+#define GL_TEXTURE_RECTANGLE 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8
+#define GL_RED_SNORM 0x8F90
+#define GL_RG_SNORM 0x8F91
+#define GL_RGB_SNORM 0x8F92
+#define GL_RGBA_SNORM 0x8F93
+#define GL_R8_SNORM 0x8F94
+#define GL_RG8_SNORM 0x8F95
+#define GL_RGB8_SNORM 0x8F96
+#define GL_RGBA8_SNORM 0x8F97
+#define GL_R16_SNORM 0x8F98
+#define GL_RG16_SNORM 0x8F99
+#define GL_RGB16_SNORM 0x8F9A
+#define GL_RGBA16_SNORM 0x8F9B
+#define GL_SIGNED_NORMALIZED 0x8F9C
+#define GL_PRIMITIVE_RESTART 0x8F9D
+#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E
+/* Reuse tokens from ARB_copy_buffer */
+/* reuse GL_COPY_READ_BUFFER */
+/* reuse GL_COPY_WRITE_BUFFER */
+/* Reuse tokens from ARB_draw_instanced (none) */
+/* Reuse tokens from ARB_uniform_buffer_object */
+/* reuse GL_UNIFORM_BUFFER */
+/* reuse GL_UNIFORM_BUFFER_BINDING */
+/* reuse GL_UNIFORM_BUFFER_START */
+/* reuse GL_UNIFORM_BUFFER_SIZE */
+/* reuse GL_MAX_VERTEX_UNIFORM_BLOCKS */
+/* reuse GL_MAX_FRAGMENT_UNIFORM_BLOCKS */
+/* reuse GL_MAX_COMBINED_UNIFORM_BLOCKS */
+/* reuse GL_MAX_UNIFORM_BUFFER_BINDINGS */
+/* reuse GL_MAX_UNIFORM_BLOCK_SIZE */
+/* reuse GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS */
+/* reuse GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS */
+/* reuse GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT */
+/* reuse GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH */
+/* reuse GL_ACTIVE_UNIFORM_BLOCKS */
+/* reuse GL_UNIFORM_TYPE */
+/* reuse GL_UNIFORM_SIZE */
+/* reuse GL_UNIFORM_NAME_LENGTH */
+/* reuse GL_UNIFORM_BLOCK_INDEX */
+/* reuse GL_UNIFORM_OFFSET */
+/* reuse GL_UNIFORM_ARRAY_STRIDE */
+/* reuse GL_UNIFORM_MATRIX_STRIDE */
+/* reuse GL_UNIFORM_IS_ROW_MAJOR */
+/* reuse GL_UNIFORM_BLOCK_BINDING */
+/* reuse GL_UNIFORM_BLOCK_DATA_SIZE */
+/* reuse GL_UNIFORM_BLOCK_NAME_LENGTH */
+/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS */
+/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES */
+/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER */
+/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER */
+/* reuse GL_INVALID_INDEX */
+#endif
+
+#ifndef GL_VERSION_3_2
+#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001
+#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002
+#define GL_LINES_ADJACENCY 0x000A
+#define GL_LINE_STRIP_ADJACENCY 0x000B
+#define GL_TRIANGLES_ADJACENCY 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D
+#define GL_PROGRAM_POINT_SIZE 0x8642
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8
+#define GL_GEOMETRY_SHADER 0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT 0x8916
+#define GL_GEOMETRY_INPUT_TYPE 0x8917
+#define GL_GEOMETRY_OUTPUT_TYPE 0x8918
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1
+#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124
+#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125
+#define GL_CONTEXT_PROFILE_MASK 0x9126
+/* reuse GL_MAX_VARYING_COMPONENTS */
+/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
+/* Reuse tokens from ARB_depth_clamp */
+/* reuse GL_DEPTH_CLAMP */
+/* Reuse tokens from ARB_draw_elements_base_vertex (none) */
+/* Reuse tokens from ARB_fragment_coord_conventions (none) */
+/* Reuse tokens from ARB_provoking_vertex */
+/* reuse GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */
+/* reuse GL_FIRST_VERTEX_CONVENTION */
+/* reuse GL_LAST_VERTEX_CONVENTION */
+/* reuse GL_PROVOKING_VERTEX */
+/* Reuse tokens from ARB_seamless_cube_map */
+/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS */
+/* Reuse tokens from ARB_sync */
+/* reuse GL_MAX_SERVER_WAIT_TIMEOUT */
+/* reuse GL_OBJECT_TYPE */
+/* reuse GL_SYNC_CONDITION */
+/* reuse GL_SYNC_STATUS */
+/* reuse GL_SYNC_FLAGS */
+/* reuse GL_SYNC_FENCE */
+/* reuse GL_SYNC_GPU_COMMANDS_COMPLETE */
+/* reuse GL_UNSIGNALED */
+/* reuse GL_SIGNALED */
+/* reuse GL_ALREADY_SIGNALED */
+/* reuse GL_TIMEOUT_EXPIRED */
+/* reuse GL_CONDITION_SATISFIED */
+/* reuse GL_WAIT_FAILED */
+/* reuse GL_TIMEOUT_IGNORED */
+/* reuse GL_SYNC_FLUSH_COMMANDS_BIT */
+/* reuse GL_TIMEOUT_IGNORED */
+/* Reuse tokens from ARB_texture_multisample */
+/* reuse GL_SAMPLE_POSITION */
+/* reuse GL_SAMPLE_MASK */
+/* reuse GL_SAMPLE_MASK_VALUE */
+/* reuse GL_MAX_SAMPLE_MASK_WORDS */
+/* reuse GL_TEXTURE_2D_MULTISAMPLE */
+/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE */
+/* reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE */
+/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_TEXTURE_SAMPLES */
+/* reuse GL_TEXTURE_FIXED_SAMPLE_LOCATIONS */
+/* reuse GL_SAMPLER_2D_MULTISAMPLE */
+/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE */
+/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE */
+/* reuse GL_SAMPLER_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_MAX_COLOR_TEXTURE_SAMPLES */
+/* reuse GL_MAX_DEPTH_TEXTURE_SAMPLES */
+/* reuse GL_MAX_INTEGER_SAMPLES */
+/* Don't need to reuse tokens from ARB_vertex_array_bgra since they're already in 1.2 core */
+#endif
+
+#ifndef GL_VERSION_3_3
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE
+/* Reuse tokens from ARB_blend_func_extended */
+/* reuse GL_SRC1_COLOR */
+/* reuse GL_ONE_MINUS_SRC1_COLOR */
+/* reuse GL_ONE_MINUS_SRC1_ALPHA */
+/* reuse GL_MAX_DUAL_SOURCE_DRAW_BUFFERS */
+/* Reuse tokens from ARB_explicit_attrib_location (none) */
+/* Reuse tokens from ARB_occlusion_query2 */
+/* reuse GL_ANY_SAMPLES_PASSED */
+/* Reuse tokens from ARB_sampler_objects */
+/* reuse GL_SAMPLER_BINDING */
+/* Reuse tokens from ARB_shader_bit_encoding (none) */
+/* Reuse tokens from ARB_texture_rgb10_a2ui */
+/* reuse GL_RGB10_A2UI */
+/* Reuse tokens from ARB_texture_swizzle */
+/* reuse GL_TEXTURE_SWIZZLE_R */
+/* reuse GL_TEXTURE_SWIZZLE_G */
+/* reuse GL_TEXTURE_SWIZZLE_B */
+/* reuse GL_TEXTURE_SWIZZLE_A */
+/* reuse GL_TEXTURE_SWIZZLE_RGBA */
+/* Reuse tokens from ARB_timer_query */
+/* reuse GL_TIME_ELAPSED */
+/* reuse GL_TIMESTAMP */
+/* Reuse tokens from ARB_vertex_type_2_10_10_10_rev */
+/* reuse GL_INT_2_10_10_10_REV */
+#endif
+
+#ifndef GL_VERSION_4_0
+#define GL_SAMPLE_SHADING 0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F
+#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B
+#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F
+/* Reuse tokens from ARB_texture_query_lod (none) */
+/* Reuse tokens from ARB_draw_buffers_blend (none) */
+/* Reuse tokens from ARB_draw_indirect */
+/* reuse GL_DRAW_INDIRECT_BUFFER */
+/* reuse GL_DRAW_INDIRECT_BUFFER_BINDING */
+/* Reuse tokens from ARB_gpu_shader5 */
+/* reuse GL_GEOMETRY_SHADER_INVOCATIONS */
+/* reuse GL_MAX_GEOMETRY_SHADER_INVOCATIONS */
+/* reuse GL_MIN_FRAGMENT_INTERPOLATION_OFFSET */
+/* reuse GL_MAX_FRAGMENT_INTERPOLATION_OFFSET */
+/* reuse GL_FRAGMENT_INTERPOLATION_OFFSET_BITS */
+/* reuse GL_MAX_VERTEX_STREAMS */
+/* Reuse tokens from ARB_gpu_shader_fp64 */
+/* reuse GL_DOUBLE_VEC2 */
+/* reuse GL_DOUBLE_VEC3 */
+/* reuse GL_DOUBLE_VEC4 */
+/* reuse GL_DOUBLE_MAT2 */
+/* reuse GL_DOUBLE_MAT3 */
+/* reuse GL_DOUBLE_MAT4 */
+/* reuse GL_DOUBLE_MAT2x3 */
+/* reuse GL_DOUBLE_MAT2x4 */
+/* reuse GL_DOUBLE_MAT3x2 */
+/* reuse GL_DOUBLE_MAT3x4 */
+/* reuse GL_DOUBLE_MAT4x2 */
+/* reuse GL_DOUBLE_MAT4x3 */
+/* Reuse tokens from ARB_shader_subroutine */
+/* reuse GL_ACTIVE_SUBROUTINES */
+/* reuse GL_ACTIVE_SUBROUTINE_UNIFORMS */
+/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS */
+/* reuse GL_ACTIVE_SUBROUTINE_MAX_LENGTH */
+/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH */
+/* reuse GL_MAX_SUBROUTINES */
+/* reuse GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS */
+/* reuse GL_NUM_COMPATIBLE_SUBROUTINES */
+/* reuse GL_COMPATIBLE_SUBROUTINES */
+/* Reuse tokens from ARB_tessellation_shader */
+/* reuse GL_PATCHES */
+/* reuse GL_PATCH_VERTICES */
+/* reuse GL_PATCH_DEFAULT_INNER_LEVEL */
+/* reuse GL_PATCH_DEFAULT_OUTER_LEVEL */
+/* reuse GL_TESS_CONTROL_OUTPUT_VERTICES */
+/* reuse GL_TESS_GEN_MODE */
+/* reuse GL_TESS_GEN_SPACING */
+/* reuse GL_TESS_GEN_VERTEX_ORDER */
+/* reuse GL_TESS_GEN_POINT_MODE */
+/* reuse GL_ISOLINES */
+/* reuse GL_FRACTIONAL_ODD */
+/* reuse GL_FRACTIONAL_EVEN */
+/* reuse GL_MAX_PATCH_VERTICES */
+/* reuse GL_MAX_TESS_GEN_LEVEL */
+/* reuse GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS */
+/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS */
+/* reuse GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS */
+/* reuse GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS */
+/* reuse GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS */
+/* reuse GL_MAX_TESS_PATCH_COMPONENTS */
+/* reuse GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS */
+/* reuse GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS */
+/* reuse GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS */
+/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS */
+/* reuse GL_MAX_TESS_CONTROL_INPUT_COMPONENTS */
+/* reuse GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS */
+/* reuse GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS */
+/* reuse GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS */
+/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER */
+/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER */
+/* reuse GL_TESS_EVALUATION_SHADER */
+/* reuse GL_TESS_CONTROL_SHADER */
+/* Reuse tokens from ARB_texture_buffer_object_rgb32 (none) */
+/* Reuse tokens from ARB_transform_feedback2 */
+/* reuse GL_TRANSFORM_FEEDBACK */
+/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */
+/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */
+/* reuse GL_TRANSFORM_FEEDBACK_BINDING */
+/* Reuse tokens from ARB_transform_feedback3 */
+/* reuse GL_MAX_TRANSFORM_FEEDBACK_BUFFERS */
+/* reuse GL_MAX_VERTEX_STREAMS */
+#endif
+
+#ifndef GL_VERSION_4_1
+/* Reuse tokens from ARB_ES2_compatibility */
+/* reuse GL_FIXED */
+/* reuse GL_IMPLEMENTATION_COLOR_READ_TYPE */
+/* reuse GL_IMPLEMENTATION_COLOR_READ_FORMAT */
+/* reuse GL_LOW_FLOAT */
+/* reuse GL_MEDIUM_FLOAT */
+/* reuse GL_HIGH_FLOAT */
+/* reuse GL_LOW_INT */
+/* reuse GL_MEDIUM_INT */
+/* reuse GL_HIGH_INT */
+/* reuse GL_SHADER_COMPILER */
+/* reuse GL_SHADER_BINARY_FORMATS */
+/* reuse GL_NUM_SHADER_BINARY_FORMATS */
+/* reuse GL_MAX_VERTEX_UNIFORM_VECTORS */
+/* reuse GL_MAX_VARYING_VECTORS */
+/* reuse GL_MAX_FRAGMENT_UNIFORM_VECTORS */
+/* reuse GL_RGB565 */
+/* Reuse tokens from ARB_get_program_binary */
+/* reuse GL_PROGRAM_BINARY_RETRIEVABLE_HINT */
+/* reuse GL_PROGRAM_BINARY_LENGTH */
+/* reuse GL_NUM_PROGRAM_BINARY_FORMATS */
+/* reuse GL_PROGRAM_BINARY_FORMATS */
+/* Reuse tokens from ARB_separate_shader_objects */
+/* reuse GL_VERTEX_SHADER_BIT */
+/* reuse GL_FRAGMENT_SHADER_BIT */
+/* reuse GL_GEOMETRY_SHADER_BIT */
+/* reuse GL_TESS_CONTROL_SHADER_BIT */
+/* reuse GL_TESS_EVALUATION_SHADER_BIT */
+/* reuse GL_ALL_SHADER_BITS */
+/* reuse GL_PROGRAM_SEPARABLE */
+/* reuse GL_ACTIVE_PROGRAM */
+/* reuse GL_PROGRAM_PIPELINE_BINDING */
+/* Reuse tokens from ARB_shader_precision (none) */
+/* Reuse tokens from ARB_vertex_attrib_64bit - all are in GL 3.0 and 4.0 already */
+/* Reuse tokens from ARB_viewport_array - some are in GL 1.1 and ARB_provoking_vertex already */
+/* reuse GL_MAX_VIEWPORTS */
+/* reuse GL_VIEWPORT_SUBPIXEL_BITS */
+/* reuse GL_VIEWPORT_BOUNDS_RANGE */
+/* reuse GL_LAYER_PROVOKING_VERTEX */
+/* reuse GL_VIEWPORT_INDEX_PROVOKING_VERTEX */
+/* reuse GL_UNDEFINED_VERTEX */
+#endif
+
+#ifndef GL_VERSION_4_2
+/* Reuse tokens from ARB_base_instance (none) */
+/* Reuse tokens from ARB_shading_language_420pack (none) */
+/* Reuse tokens from ARB_transform_feedback_instanced (none) */
+/* Reuse tokens from ARB_compressed_texture_pixel_storage */
+/* reuse GL_UNPACK_COMPRESSED_BLOCK_WIDTH */
+/* reuse GL_UNPACK_COMPRESSED_BLOCK_HEIGHT */
+/* reuse GL_UNPACK_COMPRESSED_BLOCK_DEPTH */
+/* reuse GL_UNPACK_COMPRESSED_BLOCK_SIZE */
+/* reuse GL_PACK_COMPRESSED_BLOCK_WIDTH */
+/* reuse GL_PACK_COMPRESSED_BLOCK_HEIGHT */
+/* reuse GL_PACK_COMPRESSED_BLOCK_DEPTH */
+/* reuse GL_PACK_COMPRESSED_BLOCK_SIZE */
+/* Reuse tokens from ARB_conservative_depth (none) */
+/* Reuse tokens from ARB_internalformat_query */
+/* reuse GL_NUM_SAMPLE_COUNTS */
+/* Reuse tokens from ARB_map_buffer_alignment */
+/* reuse GL_MIN_MAP_BUFFER_ALIGNMENT */
+/* Reuse tokens from ARB_shader_atomic_counters */
+/* reuse GL_ATOMIC_COUNTER_BUFFER */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_BINDING */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_START */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_SIZE */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER */
+/* reuse GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_MAX_VERTEX_ATOMIC_COUNTERS */
+/* reuse GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS */
+/* reuse GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS */
+/* reuse GL_MAX_GEOMETRY_ATOMIC_COUNTERS */
+/* reuse GL_MAX_FRAGMENT_ATOMIC_COUNTERS */
+/* reuse GL_MAX_COMBINED_ATOMIC_COUNTERS */
+/* reuse GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE */
+/* reuse GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS */
+/* reuse GL_ACTIVE_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX */
+/* reuse GL_UNSIGNED_INT_ATOMIC_COUNTER */
+/* Reuse tokens from ARB_shader_image_load_store */
+/* reuse GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT */
+/* reuse GL_ELEMENT_ARRAY_BARRIER_BIT */
+/* reuse GL_UNIFORM_BARRIER_BIT */
+/* reuse GL_TEXTURE_FETCH_BARRIER_BIT */
+/* reuse GL_SHADER_IMAGE_ACCESS_BARRIER_BIT */
+/* reuse GL_COMMAND_BARRIER_BIT */
+/* reuse GL_PIXEL_BUFFER_BARRIER_BIT */
+/* reuse GL_TEXTURE_UPDATE_BARRIER_BIT */
+/* reuse GL_BUFFER_UPDATE_BARRIER_BIT */
+/* reuse GL_FRAMEBUFFER_BARRIER_BIT */
+/* reuse GL_TRANSFORM_FEEDBACK_BARRIER_BIT */
+/* reuse GL_ATOMIC_COUNTER_BARRIER_BIT */
+/* reuse GL_ALL_BARRIER_BITS */
+/* reuse GL_MAX_IMAGE_UNITS */
+/* reuse GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS */
+/* reuse GL_IMAGE_BINDING_NAME */
+/* reuse GL_IMAGE_BINDING_LEVEL */
+/* reuse GL_IMAGE_BINDING_LAYERED */
+/* reuse GL_IMAGE_BINDING_LAYER */
+/* reuse GL_IMAGE_BINDING_ACCESS */
+/* reuse GL_IMAGE_1D */
+/* reuse GL_IMAGE_2D */
+/* reuse GL_IMAGE_3D */
+/* reuse GL_IMAGE_2D_RECT */
+/* reuse GL_IMAGE_CUBE */
+/* reuse GL_IMAGE_BUFFER */
+/* reuse GL_IMAGE_1D_ARRAY */
+/* reuse GL_IMAGE_2D_ARRAY */
+/* reuse GL_IMAGE_CUBE_MAP_ARRAY */
+/* reuse GL_IMAGE_2D_MULTISAMPLE */
+/* reuse GL_IMAGE_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_INT_IMAGE_1D */
+/* reuse GL_INT_IMAGE_2D */
+/* reuse GL_INT_IMAGE_3D */
+/* reuse GL_INT_IMAGE_2D_RECT */
+/* reuse GL_INT_IMAGE_CUBE */
+/* reuse GL_INT_IMAGE_BUFFER */
+/* reuse GL_INT_IMAGE_1D_ARRAY */
+/* reuse GL_INT_IMAGE_2D_ARRAY */
+/* reuse GL_INT_IMAGE_CUBE_MAP_ARRAY */
+/* reuse GL_INT_IMAGE_2D_MULTISAMPLE */
+/* reuse GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_UNSIGNED_INT_IMAGE_1D */
+/* reuse GL_UNSIGNED_INT_IMAGE_2D */
+/* reuse GL_UNSIGNED_INT_IMAGE_3D */
+/* reuse GL_UNSIGNED_INT_IMAGE_2D_RECT */
+/* reuse GL_UNSIGNED_INT_IMAGE_CUBE */
+/* reuse GL_UNSIGNED_INT_IMAGE_BUFFER */
+/* reuse GL_UNSIGNED_INT_IMAGE_1D_ARRAY */
+/* reuse GL_UNSIGNED_INT_IMAGE_2D_ARRAY */
+/* reuse GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY */
+/* reuse GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE */
+/* reuse GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_MAX_IMAGE_SAMPLES */
+/* reuse GL_IMAGE_BINDING_FORMAT */
+/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_TYPE */
+/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE */
+/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS */
+/* reuse GL_MAX_VERTEX_IMAGE_UNIFORMS */
+/* reuse GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS */
+/* reuse GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS */
+/* reuse GL_MAX_GEOMETRY_IMAGE_UNIFORMS */
+/* reuse GL_MAX_FRAGMENT_IMAGE_UNIFORMS */
+/* reuse GL_MAX_COMBINED_IMAGE_UNIFORMS */
+/* Reuse tokens from ARB_shading_language_packing (none) */
+/* Reuse tokens from ARB_texture_storage */
+/* reuse GL_TEXTURE_IMMUTABLE_FORMAT */
+#endif
+
+#ifndef GL_VERSION_4_3
+#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9
+#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E
+/* Reuse tokens from ARB_arrays_of_arrays (none, GLSL only) */
+/* Reuse tokens from ARB_fragment_layer_viewport (none, GLSL only) */
+/* Reuse tokens from ARB_shader_image_size (none, GLSL only) */
+/* Reuse tokens from ARB_ES3_compatibility */
+/* reuse GL_COMPRESSED_RGB8_ETC2 */
+/* reuse GL_COMPRESSED_SRGB8_ETC2 */
+/* reuse GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 */
+/* reuse GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 */
+/* reuse GL_COMPRESSED_RGBA8_ETC2_EAC */
+/* reuse GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC */
+/* reuse GL_COMPRESSED_R11_EAC */
+/* reuse GL_COMPRESSED_SIGNED_R11_EAC */
+/* reuse GL_COMPRESSED_RG11_EAC */
+/* reuse GL_COMPRESSED_SIGNED_RG11_EAC */
+/* reuse GL_PRIMITIVE_RESTART_FIXED_INDEX */
+/* reuse GL_ANY_SAMPLES_PASSED_CONSERVATIVE */
+/* reuse GL_MAX_ELEMENT_INDEX */
+/* Reuse tokens from ARB_clear_buffer_object (none) */
+/* Reuse tokens from ARB_compute_shader */
+/* reuse GL_COMPUTE_SHADER */
+/* reuse GL_MAX_COMPUTE_UNIFORM_BLOCKS */
+/* reuse GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS */
+/* reuse GL_MAX_COMPUTE_IMAGE_UNIFORMS */
+/* reuse GL_MAX_COMPUTE_SHARED_MEMORY_SIZE */
+/* reuse GL_MAX_COMPUTE_UNIFORM_COMPONENTS */
+/* reuse GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS */
+/* reuse GL_MAX_COMPUTE_ATOMIC_COUNTERS */
+/* reuse GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS */
+/* reuse GL_MAX_COMPUTE_LOCAL_INVOCATIONS */
+/* reuse GL_MAX_COMPUTE_WORK_GROUP_COUNT */
+/* reuse GL_MAX_COMPUTE_WORK_GROUP_SIZE */
+/* reuse GL_COMPUTE_LOCAL_WORK_SIZE */
+/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER */
+/* reuse GL_DISPATCH_INDIRECT_BUFFER */
+/* reuse GL_DISPATCH_INDIRECT_BUFFER_BINDING */
+/* Reuse tokens from ARB_copy_image (none) */
+/* Reuse tokens from KHR_debug */
+/* reuse GL_DEBUG_OUTPUT_SYNCHRONOUS */
+/* reuse GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH */
+/* reuse GL_DEBUG_CALLBACK_FUNCTION */
+/* reuse GL_DEBUG_CALLBACK_USER_PARAM */
+/* reuse GL_DEBUG_SOURCE_API */
+/* reuse GL_DEBUG_SOURCE_WINDOW_SYSTEM */
+/* reuse GL_DEBUG_SOURCE_SHADER_COMPILER */
+/* reuse GL_DEBUG_SOURCE_THIRD_PARTY */
+/* reuse GL_DEBUG_SOURCE_APPLICATION */
+/* reuse GL_DEBUG_SOURCE_OTHER */
+/* reuse GL_DEBUG_TYPE_ERROR */
+/* reuse GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR */
+/* reuse GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR */
+/* reuse GL_DEBUG_TYPE_PORTABILITY */
+/* reuse GL_DEBUG_TYPE_PERFORMANCE */
+/* reuse GL_DEBUG_TYPE_OTHER */
+/* reuse GL_MAX_DEBUG_MESSAGE_LENGTH */
+/* reuse GL_MAX_DEBUG_LOGGED_MESSAGES */
+/* reuse GL_DEBUG_LOGGED_MESSAGES */
+/* reuse GL_DEBUG_SEVERITY_HIGH */
+/* reuse GL_DEBUG_SEVERITY_MEDIUM */
+/* reuse GL_DEBUG_SEVERITY_LOW */
+/* reuse GL_DEBUG_TYPE_MARKER */
+/* reuse GL_DEBUG_TYPE_PUSH_GROUP */
+/* reuse GL_DEBUG_TYPE_POP_GROUP */
+/* reuse GL_DEBUG_SEVERITY_NOTIFICATION */
+/* reuse GL_MAX_DEBUG_GROUP_STACK_DEPTH */
+/* reuse GL_DEBUG_GROUP_STACK_DEPTH */
+/* reuse GL_BUFFER */
+/* reuse GL_SHADER */
+/* reuse GL_PROGRAM */
+/* reuse GL_QUERY */
+/* reuse GL_PROGRAM_PIPELINE */
+/* reuse GL_SAMPLER */
+/* reuse GL_DISPLAY_LIST */
+/* reuse GL_MAX_LABEL_LENGTH */
+/* reuse GL_DEBUG_OUTPUT */
+/* reuse GL_CONTEXT_FLAG_DEBUG_BIT */
+/* reuse GL_STACK_UNDERFLOW */
+/* reuse GL_STACK_OVERFLOW */
+/* Reuse tokens from ARB_explicit_uniform_location */
+/* reuse GL_MAX_UNIFORM_LOCATIONS */
+/* Reuse tokens from ARB_framebuffer_no_attachments */
+/* reuse GL_FRAMEBUFFER_DEFAULT_WIDTH */
+/* reuse GL_FRAMEBUFFER_DEFAULT_HEIGHT */
+/* reuse GL_FRAMEBUFFER_DEFAULT_LAYERS */
+/* reuse GL_FRAMEBUFFER_DEFAULT_SAMPLES */
+/* reuse GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS */
+/* reuse GL_MAX_FRAMEBUFFER_WIDTH */
+/* reuse GL_MAX_FRAMEBUFFER_HEIGHT */
+/* reuse GL_MAX_FRAMEBUFFER_LAYERS */
+/* reuse GL_MAX_FRAMEBUFFER_SAMPLES */
+/* Reuse tokens from ARB_internalformat_query2 */
+/* reuse GL_INTERNALFORMAT_SUPPORTED */
+/* reuse GL_INTERNALFORMAT_PREFERRED */
+/* reuse GL_INTERNALFORMAT_RED_SIZE */
+/* reuse GL_INTERNALFORMAT_GREEN_SIZE */
+/* reuse GL_INTERNALFORMAT_BLUE_SIZE */
+/* reuse GL_INTERNALFORMAT_ALPHA_SIZE */
+/* reuse GL_INTERNALFORMAT_DEPTH_SIZE */
+/* reuse GL_INTERNALFORMAT_STENCIL_SIZE */
+/* reuse GL_INTERNALFORMAT_SHARED_SIZE */
+/* reuse GL_INTERNALFORMAT_RED_TYPE */
+/* reuse GL_INTERNALFORMAT_GREEN_TYPE */
+/* reuse GL_INTERNALFORMAT_BLUE_TYPE */
+/* reuse GL_INTERNALFORMAT_ALPHA_TYPE */
+/* reuse GL_INTERNALFORMAT_DEPTH_TYPE */
+/* reuse GL_INTERNALFORMAT_STENCIL_TYPE */
+/* reuse GL_MAX_WIDTH */
+/* reuse GL_MAX_HEIGHT */
+/* reuse GL_MAX_DEPTH */
+/* reuse GL_MAX_LAYERS */
+/* reuse GL_MAX_COMBINED_DIMENSIONS */
+/* reuse GL_COLOR_COMPONENTS */
+/* reuse GL_DEPTH_COMPONENTS */
+/* reuse GL_STENCIL_COMPONENTS */
+/* reuse GL_COLOR_RENDERABLE */
+/* reuse GL_DEPTH_RENDERABLE */
+/* reuse GL_STENCIL_RENDERABLE */
+/* reuse GL_FRAMEBUFFER_RENDERABLE */
+/* reuse GL_FRAMEBUFFER_RENDERABLE_LAYERED */
+/* reuse GL_FRAMEBUFFER_BLEND */
+/* reuse GL_READ_PIXELS */
+/* reuse GL_READ_PIXELS_FORMAT */
+/* reuse GL_READ_PIXELS_TYPE */
+/* reuse GL_TEXTURE_IMAGE_FORMAT */
+/* reuse GL_TEXTURE_IMAGE_TYPE */
+/* reuse GL_GET_TEXTURE_IMAGE_FORMAT */
+/* reuse GL_GET_TEXTURE_IMAGE_TYPE */
+/* reuse GL_MIPMAP */
+/* reuse GL_MANUAL_GENERATE_MIPMAP */
+/* reuse GL_AUTO_GENERATE_MIPMAP */
+/* reuse GL_COLOR_ENCODING */
+/* reuse GL_SRGB_READ */
+/* reuse GL_SRGB_WRITE */
+/* reuse GL_FILTER */
+/* reuse GL_VERTEX_TEXTURE */
+/* reuse GL_TESS_CONTROL_TEXTURE */
+/* reuse GL_TESS_EVALUATION_TEXTURE */
+/* reuse GL_GEOMETRY_TEXTURE */
+/* reuse GL_FRAGMENT_TEXTURE */
+/* reuse GL_COMPUTE_TEXTURE */
+/* reuse GL_TEXTURE_SHADOW */
+/* reuse GL_TEXTURE_GATHER */
+/* reuse GL_TEXTURE_GATHER_SHADOW */
+/* reuse GL_SHADER_IMAGE_LOAD */
+/* reuse GL_SHADER_IMAGE_STORE */
+/* reuse GL_SHADER_IMAGE_ATOMIC */
+/* reuse GL_IMAGE_TEXEL_SIZE */
+/* reuse GL_IMAGE_COMPATIBILITY_CLASS */
+/* reuse GL_IMAGE_PIXEL_FORMAT */
+/* reuse GL_IMAGE_PIXEL_TYPE */
+/* reuse GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST */
+/* reuse GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST */
+/* reuse GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE */
+/* reuse GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE */
+/* reuse GL_TEXTURE_COMPRESSED_BLOCK_WIDTH */
+/* reuse GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT */
+/* reuse GL_TEXTURE_COMPRESSED_BLOCK_SIZE */
+/* reuse GL_CLEAR_BUFFER */
+/* reuse GL_TEXTURE_VIEW */
+/* reuse GL_VIEW_COMPATIBILITY_CLASS */
+/* reuse GL_FULL_SUPPORT */
+/* reuse GL_CAVEAT_SUPPORT */
+/* reuse GL_IMAGE_CLASS_4_X_32 */
+/* reuse GL_IMAGE_CLASS_2_X_32 */
+/* reuse GL_IMAGE_CLASS_1_X_32 */
+/* reuse GL_IMAGE_CLASS_4_X_16 */
+/* reuse GL_IMAGE_CLASS_2_X_16 */
+/* reuse GL_IMAGE_CLASS_1_X_16 */
+/* reuse GL_IMAGE_CLASS_4_X_8 */
+/* reuse GL_IMAGE_CLASS_2_X_8 */
+/* reuse GL_IMAGE_CLASS_1_X_8 */
+/* reuse GL_IMAGE_CLASS_11_11_10 */
+/* reuse GL_IMAGE_CLASS_10_10_10_2 */
+/* reuse GL_VIEW_CLASS_128_BITS */
+/* reuse GL_VIEW_CLASS_96_BITS */
+/* reuse GL_VIEW_CLASS_64_BITS */
+/* reuse GL_VIEW_CLASS_48_BITS */
+/* reuse GL_VIEW_CLASS_32_BITS */
+/* reuse GL_VIEW_CLASS_24_BITS */
+/* reuse GL_VIEW_CLASS_16_BITS */
+/* reuse GL_VIEW_CLASS_8_BITS */
+/* reuse GL_VIEW_CLASS_S3TC_DXT1_RGB */
+/* reuse GL_VIEW_CLASS_S3TC_DXT1_RGBA */
+/* reuse GL_VIEW_CLASS_S3TC_DXT3_RGBA */
+/* reuse GL_VIEW_CLASS_S3TC_DXT5_RGBA */
+/* reuse GL_VIEW_CLASS_RGTC1_RED */
+/* reuse GL_VIEW_CLASS_RGTC2_RG */
+/* reuse GL_VIEW_CLASS_BPTC_UNORM */
+/* reuse GL_VIEW_CLASS_BPTC_FLOAT */
+/* Reuse tokens from ARB_invalidate_subdata (none) */
+/* Reuse tokens from ARB_multi_draw_indirect (none) */
+/* Reuse tokens from ARB_program_interface_query */
+/* reuse GL_UNIFORM */
+/* reuse GL_UNIFORM_BLOCK */
+/* reuse GL_PROGRAM_INPUT */
+/* reuse GL_PROGRAM_OUTPUT */
+/* reuse GL_BUFFER_VARIABLE */
+/* reuse GL_SHADER_STORAGE_BLOCK */
+/* reuse GL_VERTEX_SUBROUTINE */
+/* reuse GL_TESS_CONTROL_SUBROUTINE */
+/* reuse GL_TESS_EVALUATION_SUBROUTINE */
+/* reuse GL_GEOMETRY_SUBROUTINE */
+/* reuse GL_FRAGMENT_SUBROUTINE */
+/* reuse GL_COMPUTE_SUBROUTINE */
+/* reuse GL_VERTEX_SUBROUTINE_UNIFORM */
+/* reuse GL_TESS_CONTROL_SUBROUTINE_UNIFORM */
+/* reuse GL_TESS_EVALUATION_SUBROUTINE_UNIFORM */
+/* reuse GL_GEOMETRY_SUBROUTINE_UNIFORM */
+/* reuse GL_FRAGMENT_SUBROUTINE_UNIFORM */
+/* reuse GL_COMPUTE_SUBROUTINE_UNIFORM */
+/* reuse GL_TRANSFORM_FEEDBACK_VARYING */
+/* reuse GL_ACTIVE_RESOURCES */
+/* reuse GL_MAX_NAME_LENGTH */
+/* reuse GL_MAX_NUM_ACTIVE_VARIABLES */
+/* reuse GL_MAX_NUM_COMPATIBLE_SUBROUTINES */
+/* reuse GL_NAME_LENGTH */
+/* reuse GL_TYPE */
+/* reuse GL_ARRAY_SIZE */
+/* reuse GL_OFFSET */
+/* reuse GL_BLOCK_INDEX */
+/* reuse GL_ARRAY_STRIDE */
+/* reuse GL_MATRIX_STRIDE */
+/* reuse GL_IS_ROW_MAJOR */
+/* reuse GL_ATOMIC_COUNTER_BUFFER_INDEX */
+/* reuse GL_BUFFER_BINDING */
+/* reuse GL_BUFFER_DATA_SIZE */
+/* reuse GL_NUM_ACTIVE_VARIABLES */
+/* reuse GL_ACTIVE_VARIABLES */
+/* reuse GL_REFERENCED_BY_VERTEX_SHADER */
+/* reuse GL_REFERENCED_BY_TESS_CONTROL_SHADER */
+/* reuse GL_REFERENCED_BY_TESS_EVALUATION_SHADER */
+/* reuse GL_REFERENCED_BY_GEOMETRY_SHADER */
+/* reuse GL_REFERENCED_BY_FRAGMENT_SHADER */
+/* reuse GL_REFERENCED_BY_COMPUTE_SHADER */
+/* reuse GL_TOP_LEVEL_ARRAY_SIZE */
+/* reuse GL_TOP_LEVEL_ARRAY_STRIDE */
+/* reuse GL_LOCATION */
+/* reuse GL_LOCATION_INDEX */
+/* reuse GL_IS_PER_PATCH */
+/* Reuse tokens from ARB_robust_buffer_access_behavior (none) */
+/* Reuse tokens from ARB_shader_storage_buffer_object */
+/* reuse GL_SHADER_STORAGE_BUFFER */
+/* reuse GL_SHADER_STORAGE_BUFFER_BINDING */
+/* reuse GL_SHADER_STORAGE_BUFFER_START */
+/* reuse GL_SHADER_STORAGE_BUFFER_SIZE */
+/* reuse GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS */
+/* reuse GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS */
+/* reuse GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS */
+/* reuse GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS */
+/* reuse GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS */
+/* reuse GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS */
+/* reuse GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS */
+/* reuse GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS */
+/* reuse GL_MAX_SHADER_STORAGE_BLOCK_SIZE */
+/* reuse GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT */
+/* reuse GL_SHADER_STORAGE_BARRIER_BIT */
+/* reuse GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES */
+/* Reuse tokens from ARB_stencil_texturing */
+/* reuse GL_DEPTH_STENCIL_TEXTURE_MODE */
+/* Reuse tokens from ARB_texture_buffer_range */
+/* reuse GL_TEXTURE_BUFFER_OFFSET */
+/* reuse GL_TEXTURE_BUFFER_SIZE */
+/* reuse GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT */
+/* Reuse tokens from ARB_texture_query_levels (none) */
+/* Reuse tokens from ARB_texture_storage_multisample (none) */
+/* Reuse tokens from ARB_texture_view */
+/* reuse GL_TEXTURE_VIEW_MIN_LEVEL */
+/* reuse GL_TEXTURE_VIEW_NUM_LEVELS */
+/* reuse GL_TEXTURE_VIEW_MIN_LAYER */
+/* reuse GL_TEXTURE_VIEW_NUM_LAYERS */
+/* reuse GL_TEXTURE_IMMUTABLE_LEVELS */
+/* Reuse tokens from ARB_vertex_attrib_binding */
+/* reuse GL_VERTEX_ATTRIB_BINDING */
+/* reuse GL_VERTEX_ATTRIB_RELATIVE_OFFSET */
+/* reuse GL_VERTEX_BINDING_DIVISOR */
+/* reuse GL_VERTEX_BINDING_OFFSET */
+/* reuse GL_VERTEX_BINDING_STRIDE */
+/* reuse GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET */
+/* reuse GL_MAX_VERTEX_ATTRIB_BINDINGS */
+#endif
+
+#ifndef GL_ARB_depth_buffer_float
+#define GL_DEPTH_COMPONENT32F 0x8CAC
+#define GL_DEPTH32F_STENCIL8 0x8CAD
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
+#endif
+
+#ifndef GL_ARB_framebuffer_object
+#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
+#define GL_FRAMEBUFFER_DEFAULT 0x8218
+#define GL_FRAMEBUFFER_UNDEFINED 0x8219
+#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A
+#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
+#define GL_DEPTH_STENCIL 0x84F9
+#define GL_UNSIGNED_INT_24_8 0x84FA
+#define GL_DEPTH24_STENCIL8 0x88F0
+#define GL_TEXTURE_STENCIL_SIZE 0x88F1
+#define GL_TEXTURE_RED_TYPE 0x8C10
+#define GL_TEXTURE_GREEN_TYPE 0x8C11
+#define GL_TEXTURE_BLUE_TYPE 0x8C12
+#define GL_TEXTURE_ALPHA_TYPE 0x8C13
+#define GL_TEXTURE_DEPTH_TYPE 0x8C16
+#define GL_UNSIGNED_NORMALIZED 0x8C17
+#define GL_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_DRAW_FRAMEBUFFER_BINDING GL_FRAMEBUFFER_BINDING
+#define GL_RENDERBUFFER_BINDING 0x8CA7
+#define GL_READ_FRAMEBUFFER 0x8CA8
+#define GL_DRAW_FRAMEBUFFER 0x8CA9
+#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA
+#define GL_RENDERBUFFER_SAMPLES 0x8CAB
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
+#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC
+#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
+#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF
+#define GL_COLOR_ATTACHMENT0 0x8CE0
+#define GL_COLOR_ATTACHMENT1 0x8CE1
+#define GL_COLOR_ATTACHMENT2 0x8CE2
+#define GL_COLOR_ATTACHMENT3 0x8CE3
+#define GL_COLOR_ATTACHMENT4 0x8CE4
+#define GL_COLOR_ATTACHMENT5 0x8CE5
+#define GL_COLOR_ATTACHMENT6 0x8CE6
+#define GL_COLOR_ATTACHMENT7 0x8CE7
+#define GL_COLOR_ATTACHMENT8 0x8CE8
+#define GL_COLOR_ATTACHMENT9 0x8CE9
+#define GL_COLOR_ATTACHMENT10 0x8CEA
+#define GL_COLOR_ATTACHMENT11 0x8CEB
+#define GL_COLOR_ATTACHMENT12 0x8CEC
+#define GL_COLOR_ATTACHMENT13 0x8CED
+#define GL_COLOR_ATTACHMENT14 0x8CEE
+#define GL_COLOR_ATTACHMENT15 0x8CEF
+#define GL_DEPTH_ATTACHMENT 0x8D00
+#define GL_STENCIL_ATTACHMENT 0x8D20
+#define GL_FRAMEBUFFER 0x8D40
+#define GL_RENDERBUFFER 0x8D41
+#define GL_RENDERBUFFER_WIDTH 0x8D42
+#define GL_RENDERBUFFER_HEIGHT 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44
+#define GL_STENCIL_INDEX1 0x8D46
+#define GL_STENCIL_INDEX4 0x8D47
+#define GL_STENCIL_INDEX8 0x8D48
+#define GL_STENCIL_INDEX16 0x8D49
+#define GL_RENDERBUFFER_RED_SIZE 0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
+#define GL_MAX_SAMPLES 0x8D57
+#endif
+
+#ifndef GL_ARB_framebuffer_sRGB
+#define GL_FRAMEBUFFER_SRGB 0x8DB9
+#endif
+
+#ifndef GL_ARB_half_float_vertex
+#define GL_HALF_FLOAT 0x140B
+#endif
+
+#ifndef GL_ARB_map_buffer_range
+#define GL_MAP_READ_BIT 0x0001
+#define GL_MAP_WRITE_BIT 0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
+#endif
+
+#ifndef GL_ARB_texture_compression_rgtc
+#define GL_COMPRESSED_RED_RGTC1 0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC
+#define GL_COMPRESSED_RG_RGTC2 0x8DBD
+#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE
+#endif
+
+#ifndef GL_ARB_texture_rg
+#define GL_RG 0x8227
+#define GL_RG_INTEGER 0x8228
+#define GL_R8 0x8229
+#define GL_R16 0x822A
+#define GL_RG8 0x822B
+#define GL_RG16 0x822C
+#define GL_R16F 0x822D
+#define GL_R32F 0x822E
+#define GL_RG16F 0x822F
+#define GL_RG32F 0x8230
+#define GL_R8I 0x8231
+#define GL_R8UI 0x8232
+#define GL_R16I 0x8233
+#define GL_R16UI 0x8234
+#define GL_R32I 0x8235
+#define GL_R32UI 0x8236
+#define GL_RG8I 0x8237
+#define GL_RG8UI 0x8238
+#define GL_RG16I 0x8239
+#define GL_RG16UI 0x823A
+#define GL_RG32I 0x823B
+#define GL_RG32UI 0x823C
+#endif
+
+#ifndef GL_ARB_vertex_array_object
+#define GL_VERTEX_ARRAY_BINDING 0x85B5
+#endif
+
+#ifndef GL_ARB_uniform_buffer_object
+#define GL_UNIFORM_BUFFER 0x8A11
+#define GL_UNIFORM_BUFFER_BINDING 0x8A28
+#define GL_UNIFORM_BUFFER_START 0x8A29
+#define GL_UNIFORM_BUFFER_SIZE 0x8A2A
+#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C
+#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D
+#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E
+#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F
+#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30
+#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32
+#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
+#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
+#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
+#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36
+#define GL_UNIFORM_TYPE 0x8A37
+#define GL_UNIFORM_SIZE 0x8A38
+#define GL_UNIFORM_NAME_LENGTH 0x8A39
+#define GL_UNIFORM_BLOCK_INDEX 0x8A3A
+#define GL_UNIFORM_OFFSET 0x8A3B
+#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C
+#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D
+#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E
+#define GL_UNIFORM_BLOCK_BINDING 0x8A3F
+#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40
+#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
+#define GL_INVALID_INDEX 0xFFFFFFFFu
+#endif
+
+#ifndef GL_ARB_copy_buffer
+#define GL_COPY_READ_BUFFER_BINDING 0x8F36
+#define GL_COPY_READ_BUFFER GL_COPY_READ_BUFFER_BINDING
+#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37
+#define GL_COPY_WRITE_BUFFER GL_COPY_WRITE_BUFFER_BINDING
+#endif
+
+#ifndef GL_ARB_depth_clamp
+#define GL_DEPTH_CLAMP 0x864F
+#endif
+
+#ifndef GL_ARB_draw_elements_base_vertex
+#endif
+
+#ifndef GL_ARB_fragment_coord_conventions
+#endif
+
+#ifndef GL_ARB_provoking_vertex
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C
+#define GL_FIRST_VERTEX_CONVENTION 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION 0x8E4E
+#define GL_PROVOKING_VERTEX 0x8E4F
+#endif
+
+#ifndef GL_ARB_seamless_cube_map
+#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F
+#endif
+
+#ifndef GL_ARB_sync
+#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
+#define GL_OBJECT_TYPE 0x9112
+#define GL_SYNC_CONDITION 0x9113
+#define GL_SYNC_STATUS 0x9114
+#define GL_SYNC_FLAGS 0x9115
+#define GL_SYNC_FENCE 0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
+#define GL_UNSIGNALED 0x9118
+#define GL_SIGNALED 0x9119
+#define GL_ALREADY_SIGNALED 0x911A
+#define GL_TIMEOUT_EXPIRED 0x911B
+#define GL_CONDITION_SATISFIED 0x911C
+#define GL_WAIT_FAILED 0x911D
+#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
+#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
+#endif
+
+#ifndef GL_ARB_texture_multisample
+#define GL_SAMPLE_POSITION 0x8E50
+#define GL_SAMPLE_MASK 0x8E51
+#define GL_SAMPLE_MASK_VALUE 0x8E52
+#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59
+#define GL_TEXTURE_2D_MULTISAMPLE 0x9100
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105
+#define GL_TEXTURE_SAMPLES 0x9106
+#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107
+#define GL_SAMPLER_2D_MULTISAMPLE 0x9108
+#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A
+#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B
+#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D
+#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E
+#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F
+#define GL_MAX_INTEGER_SAMPLES 0x9110
+#endif
+
+#ifndef GL_ARB_vertex_array_bgra
+/* reuse GL_BGRA */
+#endif
+
+#ifndef GL_ARB_draw_buffers_blend
+#endif
+
+#ifndef GL_ARB_sample_shading
+#define GL_SAMPLE_SHADING_ARB 0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37
+#endif
+
+#ifndef GL_ARB_texture_cube_map_array
+#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B
+#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F
+#endif
+
+#ifndef GL_ARB_texture_gather
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F
+#endif
+
+#ifndef GL_ARB_texture_query_lod
+#endif
+
+#ifndef GL_ARB_shading_language_include
+#define GL_SHADER_INCLUDE_ARB 0x8DAE
+#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9
+#define GL_NAMED_STRING_TYPE_ARB 0x8DEA
+#endif
+
+#ifndef GL_ARB_texture_compression_bptc
+#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C
+#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D
+#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E
+#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F
+#endif
+
+#ifndef GL_ARB_blend_func_extended
+#define GL_SRC1_COLOR 0x88F9
+/* reuse GL_SRC1_ALPHA */
+#define GL_ONE_MINUS_SRC1_COLOR 0x88FA
+#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB
+#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC
+#endif
+
+#ifndef GL_ARB_explicit_attrib_location
+#endif
+
+#ifndef GL_ARB_occlusion_query2
+#define GL_ANY_SAMPLES_PASSED 0x8C2F
+#endif
+
+#ifndef GL_ARB_sampler_objects
+#define GL_SAMPLER_BINDING 0x8919
+#endif
+
+#ifndef GL_ARB_shader_bit_encoding
+#endif
+
+#ifndef GL_ARB_texture_rgb10_a2ui
+#define GL_RGB10_A2UI 0x906F
+#endif
+
+#ifndef GL_ARB_texture_swizzle
+#define GL_TEXTURE_SWIZZLE_R 0x8E42
+#define GL_TEXTURE_SWIZZLE_G 0x8E43
+#define GL_TEXTURE_SWIZZLE_B 0x8E44
+#define GL_TEXTURE_SWIZZLE_A 0x8E45
+#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46
+#endif
+
+#ifndef GL_ARB_timer_query
+#define GL_TIME_ELAPSED 0x88BF
+#define GL_TIMESTAMP 0x8E28
+#endif
+
+#ifndef GL_ARB_vertex_type_2_10_10_10_rev
+/* reuse GL_UNSIGNED_INT_2_10_10_10_REV */
+#define GL_INT_2_10_10_10_REV 0x8D9F
+#endif
+
+#ifndef GL_ARB_draw_indirect
+#define GL_DRAW_INDIRECT_BUFFER 0x8F3F
+#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43
+#endif
+
+#ifndef GL_ARB_gpu_shader5
+#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D
+/* reuse GL_MAX_VERTEX_STREAMS */
+#endif
+
+#ifndef GL_ARB_gpu_shader_fp64
+/* reuse GL_DOUBLE */
+#define GL_DOUBLE_VEC2 0x8FFC
+#define GL_DOUBLE_VEC3 0x8FFD
+#define GL_DOUBLE_VEC4 0x8FFE
+#define GL_DOUBLE_MAT2 0x8F46
+#define GL_DOUBLE_MAT3 0x8F47
+#define GL_DOUBLE_MAT4 0x8F48
+#define GL_DOUBLE_MAT2x3 0x8F49
+#define GL_DOUBLE_MAT2x4 0x8F4A
+#define GL_DOUBLE_MAT3x2 0x8F4B
+#define GL_DOUBLE_MAT3x4 0x8F4C
+#define GL_DOUBLE_MAT4x2 0x8F4D
+#define GL_DOUBLE_MAT4x3 0x8F4E
+#endif
+
+#ifndef GL_ARB_shader_subroutine
+#define GL_ACTIVE_SUBROUTINES 0x8DE5
+#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47
+#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49
+#define GL_MAX_SUBROUTINES 0x8DE7
+#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8
+#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A
+#define GL_COMPATIBLE_SUBROUTINES 0x8E4B
+/* reuse GL_UNIFORM_SIZE */
+/* reuse GL_UNIFORM_NAME_LENGTH */
+#endif
+
+#ifndef GL_ARB_tessellation_shader
+#define GL_PATCHES 0x000E
+#define GL_PATCH_VERTICES 0x8E72
+#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73
+#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74
+#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75
+#define GL_TESS_GEN_MODE 0x8E76
+#define GL_TESS_GEN_SPACING 0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER 0x8E78
+#define GL_TESS_GEN_POINT_MODE 0x8E79
+/* reuse GL_TRIANGLES */
+/* reuse GL_QUADS */
+#define GL_ISOLINES 0x8E7A
+/* reuse GL_EQUAL */
+#define GL_FRACTIONAL_ODD 0x8E7B
+#define GL_FRACTIONAL_EVEN 0x8E7C
+/* reuse GL_CCW */
+/* reuse GL_CW */
+#define GL_MAX_PATCH_VERTICES 0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL 0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1
+#define GL_TESS_EVALUATION_SHADER 0x8E87
+#define GL_TESS_CONTROL_SHADER 0x8E88
+#endif
+
+#ifndef GL_ARB_texture_buffer_object_rgb32
+/* reuse GL_RGB32F */
+/* reuse GL_RGB32UI */
+/* reuse GL_RGB32I */
+#endif
+
+#ifndef GL_ARB_transform_feedback2
+#define GL_TRANSFORM_FEEDBACK 0x8E22
+#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED GL_TRANSFORM_FEEDBACK_PAUSED
+#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE GL_TRANSFORM_FEEDBACK_ACTIVE
+#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25
+#endif
+
+#ifndef GL_ARB_transform_feedback3
+#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70
+#define GL_MAX_VERTEX_STREAMS 0x8E71
+#endif
+
+#ifndef GL_ARB_ES2_compatibility
+#define GL_FIXED 0x140C
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
+#define GL_LOW_FLOAT 0x8DF0
+#define GL_MEDIUM_FLOAT 0x8DF1
+#define GL_HIGH_FLOAT 0x8DF2
+#define GL_LOW_INT 0x8DF3
+#define GL_MEDIUM_INT 0x8DF4
+#define GL_HIGH_INT 0x8DF5
+#define GL_SHADER_COMPILER 0x8DFA
+#define GL_SHADER_BINARY_FORMATS 0x8DF8
+#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9
+#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
+#define GL_MAX_VARYING_VECTORS 0x8DFC
+#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD
+#define GL_RGB565 0x8D62
+#endif
+
+#ifndef GL_ARB_get_program_binary
+#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
+#define GL_PROGRAM_BINARY_LENGTH 0x8741
+#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
+#define GL_PROGRAM_BINARY_FORMATS 0x87FF
+#endif
+
+#ifndef GL_ARB_separate_shader_objects
+#define GL_VERTEX_SHADER_BIT 0x00000001
+#define GL_FRAGMENT_SHADER_BIT 0x00000002
+#define GL_GEOMETRY_SHADER_BIT 0x00000004
+#define GL_TESS_CONTROL_SHADER_BIT 0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010
+#define GL_ALL_SHADER_BITS 0xFFFFFFFF
+#define GL_PROGRAM_SEPARABLE 0x8258
+#define GL_ACTIVE_PROGRAM 0x8259
+#define GL_PROGRAM_PIPELINE_BINDING 0x825A
+#endif
+
+#ifndef GL_ARB_shader_precision
+#endif
+
+#ifndef GL_ARB_vertex_attrib_64bit
+/* reuse GL_RGB32I */
+/* reuse GL_DOUBLE_VEC2 */
+/* reuse GL_DOUBLE_VEC3 */
+/* reuse GL_DOUBLE_VEC4 */
+/* reuse GL_DOUBLE_MAT2 */
+/* reuse GL_DOUBLE_MAT3 */
+/* reuse GL_DOUBLE_MAT4 */
+/* reuse GL_DOUBLE_MAT2x3 */
+/* reuse GL_DOUBLE_MAT2x4 */
+/* reuse GL_DOUBLE_MAT3x2 */
+/* reuse GL_DOUBLE_MAT3x4 */
+/* reuse GL_DOUBLE_MAT4x2 */
+/* reuse GL_DOUBLE_MAT4x3 */
+#endif
+
+#ifndef GL_ARB_viewport_array
+/* reuse GL_SCISSOR_BOX */
+/* reuse GL_VIEWPORT */
+/* reuse GL_DEPTH_RANGE */
+/* reuse GL_SCISSOR_TEST */
+#define GL_MAX_VIEWPORTS 0x825B
+#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C
+#define GL_VIEWPORT_BOUNDS_RANGE 0x825D
+#define GL_LAYER_PROVOKING_VERTEX 0x825E
+#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F
+#define GL_UNDEFINED_VERTEX 0x8260
+/* reuse GL_FIRST_VERTEX_CONVENTION */
+/* reuse GL_LAST_VERTEX_CONVENTION */
+/* reuse GL_PROVOKING_VERTEX */
+#endif
+
+#ifndef GL_ARB_cl_event
+#define GL_SYNC_CL_EVENT_ARB 0x8240
+#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241
+#endif
+
+#ifndef GL_ARB_debug_output
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245
+#define GL_DEBUG_SOURCE_API_ARB 0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249
+#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A
+#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B
+#define GL_DEBUG_TYPE_ERROR_ARB 0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E
+#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250
+#define GL_DEBUG_TYPE_OTHER_ARB 0x8251
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144
+#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145
+#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147
+#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148
+#endif
+
+#ifndef GL_ARB_robustness
+/* reuse GL_NO_ERROR */
+#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004
+#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252
+#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253
+#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254
+#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define GL_NO_RESET_NOTIFICATION_ARB 0x8261
+#endif
+
+#ifndef GL_ARB_shader_stencil_export
+#endif
+
+#ifndef GL_ARB_base_instance
+#endif
+
+#ifndef GL_ARB_shading_language_420pack
+#endif
+
+#ifndef GL_ARB_transform_feedback_instanced
+#endif
+
+#ifndef GL_ARB_compressed_texture_pixel_storage
+#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127
+#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128
+#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129
+#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A
+#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B
+#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C
+#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D
+#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E
+#endif
+
+#ifndef GL_ARB_conservative_depth
+#endif
+
+#ifndef GL_ARB_internalformat_query
+#define GL_NUM_SAMPLE_COUNTS 0x9380
+#endif
+
+#ifndef GL_ARB_map_buffer_alignment
+#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC
+#endif
+
+#ifndef GL_ARB_shader_atomic_counters
+#define GL_ATOMIC_COUNTER_BUFFER 0x92C0
+#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1
+#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2
+#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3
+#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB
+#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0
+#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1
+#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6
+#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC
+#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9
+#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA
+#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB
+#endif
+
+#ifndef GL_ARB_shader_image_load_store
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001
+#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002
+#define GL_UNIFORM_BARRIER_BIT 0x00000004
+#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020
+#define GL_COMMAND_BARRIER_BIT 0x00000040
+#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080
+#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100
+#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200
+#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800
+#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000
+#define GL_ALL_BARRIER_BITS 0xFFFFFFFF
+#define GL_MAX_IMAGE_UNITS 0x8F38
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39
+#define GL_IMAGE_BINDING_NAME 0x8F3A
+#define GL_IMAGE_BINDING_LEVEL 0x8F3B
+#define GL_IMAGE_BINDING_LAYERED 0x8F3C
+#define GL_IMAGE_BINDING_LAYER 0x8F3D
+#define GL_IMAGE_BINDING_ACCESS 0x8F3E
+#define GL_IMAGE_1D 0x904C
+#define GL_IMAGE_2D 0x904D
+#define GL_IMAGE_3D 0x904E
+#define GL_IMAGE_2D_RECT 0x904F
+#define GL_IMAGE_CUBE 0x9050
+#define GL_IMAGE_BUFFER 0x9051
+#define GL_IMAGE_1D_ARRAY 0x9052
+#define GL_IMAGE_2D_ARRAY 0x9053
+#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054
+#define GL_IMAGE_2D_MULTISAMPLE 0x9055
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056
+#define GL_INT_IMAGE_1D 0x9057
+#define GL_INT_IMAGE_2D 0x9058
+#define GL_INT_IMAGE_3D 0x9059
+#define GL_INT_IMAGE_2D_RECT 0x905A
+#define GL_INT_IMAGE_CUBE 0x905B
+#define GL_INT_IMAGE_BUFFER 0x905C
+#define GL_INT_IMAGE_1D_ARRAY 0x905D
+#define GL_INT_IMAGE_2D_ARRAY 0x905E
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F
+#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061
+#define GL_UNSIGNED_INT_IMAGE_1D 0x9062
+#define GL_UNSIGNED_INT_IMAGE_2D 0x9063
+#define GL_UNSIGNED_INT_IMAGE_3D 0x9064
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065
+#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066
+#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C
+#define GL_MAX_IMAGE_SAMPLES 0x906D
+#define GL_IMAGE_BINDING_FORMAT 0x906E
+#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9
+#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD
+#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE
+#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF
+#endif
+
+#ifndef GL_ARB_shading_language_packing
+#endif
+
+#ifndef GL_ARB_texture_storage
+#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F
+#endif
+
+#ifndef GL_KHR_texture_compression_astc_ldr
+#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0
+#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1
+#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2
+#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3
+#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4
+#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5
+#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6
+#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7
+#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8
+#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9
+#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA
+#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB
+#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC
+#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD
+#endif
+
+#ifndef GL_KHR_debug
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION 0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245
+#define GL_DEBUG_SOURCE_API 0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249
+#define GL_DEBUG_SOURCE_APPLICATION 0x824A
+#define GL_DEBUG_SOURCE_OTHER 0x824B
+#define GL_DEBUG_TYPE_ERROR 0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E
+#define GL_DEBUG_TYPE_PORTABILITY 0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE 0x8250
+#define GL_DEBUG_TYPE_OTHER 0x8251
+#define GL_DEBUG_TYPE_MARKER 0x8268
+#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269
+#define GL_DEBUG_TYPE_POP_GROUP 0x826A
+#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B
+#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C
+#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D
+#define GL_BUFFER 0x82E0
+#define GL_SHADER 0x82E1
+#define GL_PROGRAM 0x82E2
+#define GL_QUERY 0x82E3
+#define GL_PROGRAM_PIPELINE 0x82E4
+#define GL_SAMPLER 0x82E6
+#define GL_DISPLAY_LIST 0x82E7
+/* DISPLAY_LIST used in compatibility profile only */
+#define GL_MAX_LABEL_LENGTH 0x82E8
+#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144
+#define GL_DEBUG_LOGGED_MESSAGES 0x9145
+#define GL_DEBUG_SEVERITY_HIGH 0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM 0x9147
+#define GL_DEBUG_SEVERITY_LOW 0x9148
+#define GL_DEBUG_OUTPUT 0x92E0
+#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002
+/* reuse GL_STACK_UNDERFLOW */
+/* reuse GL_STACK_OVERFLOW */
+#endif
+
+#ifndef GL_ARB_arrays_of_arrays
+#endif
+
+#ifndef GL_ARB_clear_buffer_object
+#endif
+
+#ifndef GL_ARB_compute_shader
+#define GL_COMPUTE_SHADER 0x91B9
+#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB
+#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC
+#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD
+#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262
+#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263
+#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264
+#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265
+#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266
+#define GL_MAX_COMPUTE_LOCAL_INVOCATIONS 0x90EB
+#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE
+#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF
+#define GL_COMPUTE_LOCAL_WORK_SIZE 0x8267
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED
+#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE
+#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF
+#define GL_COMPUTE_SHADER_BIT 0x00000020
+#endif
+
+#ifndef GL_ARB_copy_image
+#endif
+
+#ifndef GL_ARB_texture_view
+#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB
+#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC
+#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD
+#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE
+#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
+#endif
+
+#ifndef GL_ARB_vertex_attrib_binding
+#define GL_VERTEX_ATTRIB_BINDING 0x82D4
+#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5
+#define GL_VERTEX_BINDING_DIVISOR 0x82D6
+#define GL_VERTEX_BINDING_OFFSET 0x82D7
+#define GL_VERTEX_BINDING_STRIDE 0x82D8
+#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9
+#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA
+#endif
+
+#ifndef GL_ARB_robustness_isolation
+#endif
+
+#ifndef GL_ARB_ES3_compatibility
+#define GL_COMPRESSED_RGB8_ETC2 0x9274
+#define GL_COMPRESSED_SRGB8_ETC2 0x9275
+#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
+#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277
+#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278
+#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279
+#define GL_COMPRESSED_R11_EAC 0x9270
+#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271
+#define GL_COMPRESSED_RG11_EAC 0x9272
+#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273
+#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A
+#define GL_MAX_ELEMENT_INDEX 0x8D6B
+#endif
+
+#ifndef GL_ARB_explicit_uniform_location
+#define GL_MAX_UNIFORM_LOCATIONS 0x826E
+#endif
+
+#ifndef GL_ARB_fragment_layer_viewport
+#endif
+
+#ifndef GL_ARB_framebuffer_no_attachments
+#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310
+#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312
+#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313
+#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314
+#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315
+#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316
+#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317
+#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318
+#endif
+
+#ifndef GL_ARB_internalformat_query2
+/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_TYPE */
+/* reuse GL_NUM_SAMPLE_COUNTS */
+/* reuse GL_RENDERBUFFER */
+/* reuse GL_SAMPLES */
+/* reuse GL_TEXTURE_1D */
+/* reuse GL_TEXTURE_1D_ARRAY */
+/* reuse GL_TEXTURE_2D */
+/* reuse GL_TEXTURE_2D_ARRAY */
+/* reuse GL_TEXTURE_3D */
+/* reuse GL_TEXTURE_CUBE_MAP */
+/* reuse GL_TEXTURE_CUBE_MAP_ARRAY */
+/* reuse GL_TEXTURE_RECTANGLE */
+/* reuse GL_TEXTURE_BUFFER */
+/* reuse GL_TEXTURE_2D_MULTISAMPLE */
+/* reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY */
+/* reuse GL_TEXTURE_COMPRESSED */
+#define GL_INTERNALFORMAT_SUPPORTED 0x826F
+#define GL_INTERNALFORMAT_PREFERRED 0x8270
+#define GL_INTERNALFORMAT_RED_SIZE 0x8271
+#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272
+#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273
+#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274
+#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275
+#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276
+#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277
+#define GL_INTERNALFORMAT_RED_TYPE 0x8278
+#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279
+#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A
+#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B
+#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C
+#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D
+#define GL_MAX_WIDTH 0x827E
+#define GL_MAX_HEIGHT 0x827F
+#define GL_MAX_DEPTH 0x8280
+#define GL_MAX_LAYERS 0x8281
+#define GL_MAX_COMBINED_DIMENSIONS 0x8282
+#define GL_COLOR_COMPONENTS 0x8283
+#define GL_DEPTH_COMPONENTS 0x8284
+#define GL_STENCIL_COMPONENTS 0x8285
+#define GL_COLOR_RENDERABLE 0x8286
+#define GL_DEPTH_RENDERABLE 0x8287
+#define GL_STENCIL_RENDERABLE 0x8288
+#define GL_FRAMEBUFFER_RENDERABLE 0x8289
+#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A
+#define GL_FRAMEBUFFER_BLEND 0x828B
+#define GL_READ_PIXELS 0x828C
+#define GL_READ_PIXELS_FORMAT 0x828D
+#define GL_READ_PIXELS_TYPE 0x828E
+#define GL_TEXTURE_IMAGE_FORMAT 0x828F
+#define GL_TEXTURE_IMAGE_TYPE 0x8290
+#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291
+#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292
+#define GL_MIPMAP 0x8293
+#define GL_MANUAL_GENERATE_MIPMAP 0x8294
+#define GL_AUTO_GENERATE_MIPMAP 0x8295
+#define GL_COLOR_ENCODING 0x8296
+#define GL_SRGB_READ 0x8297
+#define GL_SRGB_WRITE 0x8298
+#define GL_SRGB_DECODE_ARB 0x8299
+#define GL_FILTER 0x829A
+#define GL_VERTEX_TEXTURE 0x829B
+#define GL_TESS_CONTROL_TEXTURE 0x829C
+#define GL_TESS_EVALUATION_TEXTURE 0x829D
+#define GL_GEOMETRY_TEXTURE 0x829E
+#define GL_FRAGMENT_TEXTURE 0x829F
+#define GL_COMPUTE_TEXTURE 0x82A0
+#define GL_TEXTURE_SHADOW 0x82A1
+#define GL_TEXTURE_GATHER 0x82A2
+#define GL_TEXTURE_GATHER_SHADOW 0x82A3
+#define GL_SHADER_IMAGE_LOAD 0x82A4
+#define GL_SHADER_IMAGE_STORE 0x82A5
+#define GL_SHADER_IMAGE_ATOMIC 0x82A6
+#define GL_IMAGE_TEXEL_SIZE 0x82A7
+#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8
+#define GL_IMAGE_PIXEL_FORMAT 0x82A9
+#define GL_IMAGE_PIXEL_TYPE 0x82AA
+#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC
+#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD
+#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE
+#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF
+#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1
+#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2
+#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3
+#define GL_CLEAR_BUFFER 0x82B4
+#define GL_TEXTURE_VIEW 0x82B5
+#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6
+#define GL_FULL_SUPPORT 0x82B7
+#define GL_CAVEAT_SUPPORT 0x82B8
+#define GL_IMAGE_CLASS_4_X_32 0x82B9
+#define GL_IMAGE_CLASS_2_X_32 0x82BA
+#define GL_IMAGE_CLASS_1_X_32 0x82BB
+#define GL_IMAGE_CLASS_4_X_16 0x82BC
+#define GL_IMAGE_CLASS_2_X_16 0x82BD
+#define GL_IMAGE_CLASS_1_X_16 0x82BE
+#define GL_IMAGE_CLASS_4_X_8 0x82BF
+#define GL_IMAGE_CLASS_2_X_8 0x82C0
+#define GL_IMAGE_CLASS_1_X_8 0x82C1
+#define GL_IMAGE_CLASS_11_11_10 0x82C2
+#define GL_IMAGE_CLASS_10_10_10_2 0x82C3
+#define GL_VIEW_CLASS_128_BITS 0x82C4
+#define GL_VIEW_CLASS_96_BITS 0x82C5
+#define GL_VIEW_CLASS_64_BITS 0x82C6
+#define GL_VIEW_CLASS_48_BITS 0x82C7
+#define GL_VIEW_CLASS_32_BITS 0x82C8
+#define GL_VIEW_CLASS_24_BITS 0x82C9
+#define GL_VIEW_CLASS_16_BITS 0x82CA
+#define GL_VIEW_CLASS_8_BITS 0x82CB
+#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC
+#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD
+#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE
+#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF
+#define GL_VIEW_CLASS_RGTC1_RED 0x82D0
+#define GL_VIEW_CLASS_RGTC2_RG 0x82D1
+#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2
+#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3
+#endif
+
+#ifndef GL_ARB_invalidate_subdata
+#endif
+
+#ifndef GL_ARB_multi_draw_indirect
+#endif
+
+#ifndef GL_ARB_program_interface_query
+#define GL_UNIFORM 0x92E1
+#define GL_UNIFORM_BLOCK 0x92E2
+#define GL_PROGRAM_INPUT 0x92E3
+#define GL_PROGRAM_OUTPUT 0x92E4
+#define GL_BUFFER_VARIABLE 0x92E5
+#define GL_SHADER_STORAGE_BLOCK 0x92E6
+/* reuse GL_ATOMIC_COUNTER_BUFFER */
+#define GL_VERTEX_SUBROUTINE 0x92E8
+#define GL_TESS_CONTROL_SUBROUTINE 0x92E9
+#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA
+#define GL_GEOMETRY_SUBROUTINE 0x92EB
+#define GL_FRAGMENT_SUBROUTINE 0x92EC
+#define GL_COMPUTE_SUBROUTINE 0x92ED
+#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE
+#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF
+#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0
+#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1
+#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2
+#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3
+#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4
+#define GL_ACTIVE_RESOURCES 0x92F5
+#define GL_MAX_NAME_LENGTH 0x92F6
+#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7
+#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8
+#define GL_NAME_LENGTH 0x92F9
+#define GL_TYPE 0x92FA
+#define GL_ARRAY_SIZE 0x92FB
+#define GL_OFFSET 0x92FC
+#define GL_BLOCK_INDEX 0x92FD
+#define GL_ARRAY_STRIDE 0x92FE
+#define GL_MATRIX_STRIDE 0x92FF
+#define GL_IS_ROW_MAJOR 0x9300
+#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301
+#define GL_BUFFER_BINDING 0x9302
+#define GL_BUFFER_DATA_SIZE 0x9303
+#define GL_NUM_ACTIVE_VARIABLES 0x9304
+#define GL_ACTIVE_VARIABLES 0x9305
+#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308
+#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309
+#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A
+#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B
+#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C
+#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D
+#define GL_LOCATION 0x930E
+#define GL_LOCATION_INDEX 0x930F
+#define GL_IS_PER_PATCH 0x92E7
+/* reuse GL_NUM_COMPATIBLE_SUBROUTINES */
+/* reuse GL_COMPATIBLE_SUBROUTINES */
+#endif
+
+#ifndef GL_ARB_robust_buffer_access_behavior
+#endif
+
+#ifndef GL_ARB_shader_image_size
+#endif
+
+#ifndef GL_ARB_shader_storage_buffer_object
+#define GL_SHADER_STORAGE_BUFFER 0x90D2
+#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3
+#define GL_SHADER_STORAGE_BUFFER_START 0x90D4
+#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5
+#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9
+#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA
+#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB
+#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC
+#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD
+#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE
+#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF
+#define GL_SHADER_STORAGE_BARRIER_BIT 0x2000
+#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS
+/* reuse GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS */
+#endif
+
+#ifndef GL_ARB_stencil_texturing
+#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA
+#endif
+
+#ifndef GL_ARB_texture_buffer_range
+#define GL_TEXTURE_BUFFER_OFFSET 0x919D
+#define GL_TEXTURE_BUFFER_SIZE 0x919E
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F
+#endif
+
+#ifndef GL_ARB_texture_query_levels
+#endif
+
+#ifndef GL_ARB_texture_storage_multisample
+#endif
+
+
+/*************************************************************/
+
+#include <stddef.h>
+#ifndef GL_VERSION_2_0
+/* GL type for program/shader text */
+typedef char GLchar;
+#endif
+
+#ifndef GL_VERSION_1_5
+/* GL types for handling large vertex buffer objects */
+typedef ptrdiff_t GLintptr;
+typedef ptrdiff_t GLsizeiptr;
+#endif
+
+#ifndef GL_ARB_vertex_buffer_object
+/* GL types for handling large vertex buffer objects */
+typedef ptrdiff_t GLintptrARB;
+typedef ptrdiff_t GLsizeiptrARB;
+#endif
+
+#ifndef GL_ARB_shader_objects
+/* GL types for program/shader text and shader object handles */
+typedef char GLcharARB;
+typedef unsigned int GLhandleARB;
+#endif
+
+/* GL type for "half" precision (s10e5) float data in host memory */
+#ifndef GL_ARB_half_float_pixel
+typedef unsigned short GLhalfARB;
+#endif
+
+#ifndef GL_NV_half_float
+typedef unsigned short GLhalfNV;
+#endif
+
+#ifndef GLEXT_64_TYPES_DEFINED
+/* This code block is duplicated in glxext.h, so must be protected */
+#define GLEXT_64_TYPES_DEFINED
+/* Define int32_t, int64_t, and uint64_t types for UST/MSC */
+/* (as used in the GL_EXT_timer_query extension). */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <inttypes.h>
+#elif defined(__sun__) || defined(__digital__)
+#include <inttypes.h>
+#if defined(__STDC__)
+#if defined(__arch64__) || defined(_LP64)
+typedef long int int64_t;
+typedef unsigned long int uint64_t;
+#else
+typedef long long int int64_t;
+typedef unsigned long long int uint64_t;
+#endif /* __arch64__ */
+#endif /* __STDC__ */
+#elif defined( __VMS ) || defined(__sgi)
+#include <inttypes.h>
+#elif defined(__SCO__) || defined(__USLC__)
+#include <stdint.h>
+#elif defined(__UNIXOS2__) || defined(__SOL64__)
+typedef long int int32_t;
+typedef long long int int64_t;
+typedef unsigned long long int uint64_t;
+#elif defined(_WIN32) && defined(__GNUC__)
+#include <stdint.h>
+#elif defined(_WIN32)
+typedef __int32 int32_t;
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+#else
+/* Fallback if nothing above works */
+#include <inttypes.h>
+#endif
+#endif
+
+#ifndef GL_EXT_timer_query
+typedef int64_t GLint64EXT;
+typedef uint64_t GLuint64EXT;
+#endif
+
+#ifndef GL_ARB_sync
+typedef int64_t GLint64;
+typedef uint64_t GLuint64;
+typedef struct __GLsync *GLsync;
+#endif
+
+#ifndef GL_ARB_cl_event
+/* These incomplete types let us declare types compatible with OpenCL's cl_context and cl_event */
+struct _cl_context;
+struct _cl_event;
+#endif
+
+#ifndef GL_ARB_debug_output
+typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);
+#endif
+
+#ifndef GL_AMD_debug_output
+typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);
+#endif
+
+#ifndef GL_KHR_debug
+typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);
+#endif
+
+#ifndef GL_NV_vdpau_interop
+typedef GLintptr GLvdpauSurfaceNV;
+#endif
+
+#ifndef GL_VERSION_1_0
+#define GL_VERSION_1_0 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glCullFace (GLenum mode);
+GLAPI void APIENTRY glFrontFace (GLenum mode);
+GLAPI void APIENTRY glHint (GLenum target, GLenum mode);
+GLAPI void APIENTRY glLineWidth (GLfloat width);
+GLAPI void APIENTRY glPointSize (GLfloat size);
+GLAPI void APIENTRY glPolygonMode (GLenum face, GLenum mode);
+GLAPI void APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glDrawBuffer (GLenum mode);
+GLAPI void APIENTRY glClear (GLbitfield mask);
+GLAPI void APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI void APIENTRY glClearStencil (GLint s);
+GLAPI void APIENTRY glClearDepth (GLdouble depth);
+GLAPI void APIENTRY glStencilMask (GLuint mask);
+GLAPI void APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+GLAPI void APIENTRY glDepthMask (GLboolean flag);
+GLAPI void APIENTRY glDisable (GLenum cap);
+GLAPI void APIENTRY glEnable (GLenum cap);
+GLAPI void APIENTRY glFinish (void);
+GLAPI void APIENTRY glFlush (void);
+GLAPI void APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
+GLAPI void APIENTRY glLogicOp (GLenum opcode);
+GLAPI void APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
+GLAPI void APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
+GLAPI void APIENTRY glDepthFunc (GLenum func);
+GLAPI void APIENTRY glPixelStoref (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPixelStorei (GLenum pname, GLint param);
+GLAPI void APIENTRY glReadBuffer (GLenum mode);
+GLAPI void APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
+GLAPI void APIENTRY glGetBooleanv (GLenum pname, GLboolean *params);
+GLAPI void APIENTRY glGetDoublev (GLenum pname, GLdouble *params);
+GLAPI GLenum APIENTRY glGetError (void);
+GLAPI void APIENTRY glGetFloatv (GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetIntegerv (GLenum pname, GLint *params);
+GLAPI const GLubyte * APIENTRY glGetString (GLenum name);
+GLAPI void APIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);
+GLAPI void APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params);
+GLAPI GLboolean APIENTRY glIsEnabled (GLenum cap);
+GLAPI void APIENTRY glDepthRange (GLdouble near, GLdouble far);
+GLAPI void APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCULLFACEPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode);
+typedef void (APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width);
+typedef void (APIENTRYP PFNGLPOINTSIZEPROC) (GLfloat size);
+typedef void (APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode);
+typedef void (APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXIMAGE1DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLDRAWBUFFERPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s);
+typedef void (APIENTRYP PFNGLCLEARDEPTHPROC) (GLdouble depth);
+typedef void (APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask);
+typedef void (APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+typedef void (APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag);
+typedef void (APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
+typedef void (APIENTRYP PFNGLENABLEPROC) (GLenum cap);
+typedef void (APIENTRYP PFNGLFINISHPROC) (void);
+typedef void (APIENTRYP PFNGLFLUSHPROC) (void);
+typedef void (APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
+typedef void (APIENTRYP PFNGLLOGICOPPROC) (GLenum opcode);
+typedef void (APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass);
+typedef void (APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func);
+typedef void (APIENTRYP PFNGLPIXELSTOREFPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLREADBUFFERPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
+typedef void (APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *params);
+typedef void (APIENTRYP PFNGLGETDOUBLEVPROC) (GLenum pname, GLdouble *params);
+typedef GLenum (APIENTRYP PFNGLGETERRORPROC) (void);
+typedef void (APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *params);
+typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
+typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC) (GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC) (GLenum target, GLint level, GLenum pname, GLint *params);
+typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC) (GLenum cap);
+typedef void (APIENTRYP PFNGLDEPTHRANGEPROC) (GLdouble near, GLdouble far);
+typedef void (APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_VERSION_1_1
+#define GL_VERSION_1_1 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count);
+GLAPI void APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
+GLAPI void APIENTRY glGetPointerv (GLenum pname, GLvoid* *params);
+GLAPI void APIENTRY glPolygonOffset (GLfloat factor, GLfloat units);
+GLAPI void APIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void APIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glBindTexture (GLenum target, GLuint texture);
+GLAPI void APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures);
+GLAPI void APIENTRY glGenTextures (GLsizei n, GLuint *textures);
+GLAPI GLboolean APIENTRY glIsTexture (GLuint texture);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
+typedef void (APIENTRYP PFNGLGETPOINTERVPROC) (GLenum pname, GLvoid* *params);
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units);
+typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
+typedef void (APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
+typedef void (APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture);
+#endif
+
+#ifndef GL_VERSION_1_2
+#define GL_VERSION_1_2 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI void APIENTRY glBlendEquation (GLenum mode);
+GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_VERSION_1_3
+#define GL_VERSION_1_3 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glActiveTexture (GLenum texture);
+GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert);
+GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, GLvoid *img);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img);
+#endif
+
+#ifndef GL_VERSION_1_4
+#define GL_VERSION_1_4 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
+GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount);
+GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param);
+GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params);
+#endif
+
+#ifndef GL_VERSION_1_5
+#define GL_VERSION_1_5 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids);
+GLAPI GLboolean APIENTRY glIsQuery (GLuint id);
+GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id);
+GLAPI void APIENTRY glEndQuery (GLenum target);
+GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer);
+GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);
+GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
+GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer);
+GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
+GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
+GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
+GLAPI GLvoid* APIENTRY glMapBuffer (GLenum target, GLenum access);
+GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target);
+GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, GLvoid* *params);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
+typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
+typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
+typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
+typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params);
+#endif
+
+#ifndef GL_VERSION_2_0
+#define GL_VERSION_2_0 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs);
+GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
+GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);
+GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader);
+GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
+GLAPI void APIENTRY glCompileShader (GLuint shader);
+GLAPI GLuint APIENTRY glCreateProgram (void);
+GLAPI GLuint APIENTRY glCreateShader (GLenum type);
+GLAPI void APIENTRY glDeleteProgram (GLuint program);
+GLAPI void APIENTRY glDeleteShader (GLuint shader);
+GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader);
+GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index);
+GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index);
+GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);
+GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params);
+GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid* *pointer);
+GLAPI GLboolean APIENTRY glIsProgram (GLuint program);
+GLAPI GLboolean APIENTRY glIsShader (GLuint shader);
+GLAPI void APIENTRY glLinkProgram (GLuint program);
+GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length);
+GLAPI void APIENTRY glUseProgram (GLuint program);
+GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0);
+GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glUniform1i (GLint location, GLint v0);
+GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glValidateProgram (GLuint program);
+GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x);
+GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x);
+GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);
+typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
+typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
+typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);
+typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
+typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length);
+typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_VERSION_2_1
+#define GL_VERSION_2_1 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#endif
+
+#ifndef GL_VERSION_3_0
+#define GL_VERSION_3_0 1
+/* OpenGL 3.0 also reuses entry points from these extensions: */
+/* ARB_framebuffer_object */
+/* ARB_map_buffer_range */
+/* ARB_vertex_array_object */
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data);
+GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data);
+GLAPI void APIENTRY glEnablei (GLenum target, GLuint index);
+GLAPI void APIENTRY glDisablei (GLenum target, GLuint index);
+GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index);
+GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode);
+GLAPI void APIENTRY glEndTransformFeedback (void);
+GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar* const *varyings, GLenum bufferMode);
+GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp);
+GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode);
+GLAPI void APIENTRY glEndConditionalRender (void);
+GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x);
+GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y);
+GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x);
+GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y);
+GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z);
+GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params);
+GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name);
+GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0);
+GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value);
+GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value);
+GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+GLAPI const GLubyte * APIENTRY glGetStringi (GLenum name, GLuint index);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index);
+typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode);
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar* const *varyings, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp);
+typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode);
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
+#endif
+
+#ifndef GL_VERSION_3_1
+#define GL_VERSION_3_1 1
+/* OpenGL 3.1 also reuses entry points from these extensions: */
+/* ARB_copy_buffer */
+/* ARB_uniform_buffer_object */
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount);
+GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index);
+#endif
+
+#ifndef GL_VERSION_3_2
+#define GL_VERSION_3_2 1
+/* OpenGL 3.2 also reuses entry points from these extensions: */
+/* ARB_draw_elements_base_vertex */
+/* ARB_provoking_vertex */
+/* ARB_sync */
+/* ARB_texture_multisample */
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data);
+GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+#endif
+
+#ifndef GL_VERSION_3_3
+#define GL_VERSION_3_3 1
+/* OpenGL 3.3 also reuses entry points from these extensions: */
+/* ARB_blend_func_extended */
+/* ARB_sampler_objects */
+/* ARB_explicit_attrib_location, but it has none */
+/* ARB_occlusion_query2 (no entry points) */
+/* ARB_shader_bit_encoding (no entry points) */
+/* ARB_texture_rgb10_a2ui (no entry points) */
+/* ARB_texture_swizzle (no entry points) */
+/* ARB_timer_query */
+/* ARB_vertex_type_2_10_10_10_rev */
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor);
+#endif
+
+#ifndef GL_VERSION_4_0
+#define GL_VERSION_4_0 1
+/* OpenGL 4.0 also reuses entry points from these extensions: */
+/* ARB_texture_query_lod (no entry points) */
+/* ARB_draw_indirect */
+/* ARB_gpu_shader5 (no entry points) */
+/* ARB_gpu_shader_fp64 */
+/* ARB_shader_subroutine */
+/* ARB_tessellation_shader */
+/* ARB_texture_buffer_object_rgb32 (no entry points) */
+/* ARB_texture_cube_map_array (no entry points) */
+/* ARB_texture_gather (no entry points) */
+/* ARB_transform_feedback2 */
+/* ARB_transform_feedback3 */
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glMinSampleShading (GLfloat value);
+GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode);
+GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+#endif
+
+#ifndef GL_VERSION_4_1
+#define GL_VERSION_4_1 1
+/* OpenGL 4.1 reuses entry points from these extensions: */
+/* ARB_ES2_compatibility */
+/* ARB_get_program_binary */
+/* ARB_separate_shader_objects */
+/* ARB_shader_precision (no entry points) */
+/* ARB_vertex_attrib_64bit */
+/* ARB_viewport_array */
+#endif
+
+#ifndef GL_VERSION_4_2
+#define GL_VERSION_4_2 1
+/* OpenGL 4.2 reuses entry points from these extensions: */
+/* ARB_base_instance */
+/* ARB_shading_language_420pack (no entry points) */
+/* ARB_transform_feedback_instanced */
+/* ARB_compressed_texture_pixel_storage (no entry points) */
+/* ARB_conservative_depth (no entry points) */
+/* ARB_internalformat_query */
+/* ARB_map_buffer_alignment (no entry points) */
+/* ARB_shader_atomic_counters */
+/* ARB_shader_image_load_store */
+/* ARB_shading_language_packing (no entry points) */
+/* ARB_texture_storage */
+#endif
+
+#ifndef GL_VERSION_4_3
+#define GL_VERSION_4_3 1
+/* OpenGL 4.3 reuses entry points from these extensions: */
+/* ARB_arrays_of_arrays (no entry points, GLSL only) */
+/* ARB_fragment_layer_viewport (no entry points, GLSL only) */
+/* ARB_shader_image_size (no entry points, GLSL only) */
+/* ARB_ES3_compatibility (no entry points) */
+/* ARB_clear_buffer_object */
+/* ARB_compute_shader */
+/* ARB_copy_image */
+/* KHR_debug (includes ARB_debug_output commands promoted to KHR without suffixes) */
+/* ARB_explicit_uniform_location (no entry points) */
+/* ARB_framebuffer_no_attachments */
+/* ARB_internalformat_query2 */
+/* ARB_invalidate_subdata */
+/* ARB_multi_draw_indirect */
+/* ARB_program_interface_query */
+/* ARB_robust_buffer_access_behavior (no entry points) */
+/* ARB_shader_storage_buffer_object */
+/* ARB_stencil_texturing (no entry points) */
+/* ARB_texture_buffer_range */
+/* ARB_texture_query_levels (no entry points) */
+/* ARB_texture_storage_multisample */
+/* ARB_texture_view */
+/* ARB_vertex_attrib_binding */
+#endif
+
+#ifndef GL_ARB_depth_buffer_float
+#define GL_ARB_depth_buffer_float 1
+#endif
+
+#ifndef GL_ARB_framebuffer_object
+#define GL_ARB_framebuffer_object 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer);
+GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers);
+GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers);
+GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer);
+GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);
+GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers);
+GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers);
+GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target);
+GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGenerateMipmap (GLenum target);
+GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);
+typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
+typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+#endif
+
+#ifndef GL_ARB_framebuffer_sRGB
+#define GL_ARB_framebuffer_sRGB 1
+#endif
+
+#ifndef GL_ARB_half_float_vertex
+#define GL_ARB_half_float_vertex 1
+#endif
+
+#ifndef GL_ARB_map_buffer_range
+#define GL_ARB_map_buffer_range 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI GLvoid* APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
+#endif
+
+#ifndef GL_ARB_texture_compression_rgtc
+#define GL_ARB_texture_compression_rgtc 1
+#endif
+
+#ifndef GL_ARB_texture_rg
+#define GL_ARB_texture_rg 1
+#endif
+
+#ifndef GL_ARB_vertex_array_object
+#define GL_ARB_vertex_array_object 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glBindVertexArray (GLuint array);
+GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays);
+GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays);
+GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
+typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays);
+typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array);
+#endif
+
+#ifndef GL_ARB_uniform_buffer_object
+#define GL_ARB_uniform_buffer_object 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar* const *uniformNames, GLuint *uniformIndices);
+GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName);
+GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar* const *uniformNames, GLuint *uniformIndices);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+#endif
+
+#ifndef GL_ARB_copy_buffer
+#define GL_ARB_copy_buffer 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+#endif
+
+#ifndef GL_ARB_depth_clamp
+#define GL_ARB_depth_clamp 1
+#endif
+
+#ifndef GL_ARB_draw_elements_base_vertex
+#define GL_ARB_draw_elements_base_vertex 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex);
+GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex);
+GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount, GLint basevertex);
+GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount, const GLint *basevertex);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount, GLint basevertex);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount, const GLint *basevertex);
+#endif
+
+#ifndef GL_ARB_fragment_coord_conventions
+#define GL_ARB_fragment_coord_conventions 1
+#endif
+
+#ifndef GL_ARB_provoking_vertex
+#define GL_ARB_provoking_vertex 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glProvokingVertex (GLenum mode);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode);
+#endif
+
+#ifndef GL_ARB_seamless_cube_map
+#define GL_ARB_seamless_cube_map 1
+#endif
+
+#ifndef GL_ARB_sync
+#define GL_ARB_sync 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags);
+GLAPI GLboolean APIENTRY glIsSync (GLsync sync);
+GLAPI void APIENTRY glDeleteSync (GLsync sync);
+GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
+typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync);
+typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync);
+typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+#endif
+
+#ifndef GL_ARB_texture_multisample
+#define GL_ARB_texture_multisample 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val);
+GLAPI void APIENTRY glSampleMaski (GLuint index, GLbitfield mask);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val);
+typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint index, GLbitfield mask);
+#endif
+
+#ifndef GL_ARB_vertex_array_bgra
+#define GL_ARB_vertex_array_bgra 1
+#endif
+
+#ifndef GL_ARB_draw_buffers_blend
+#define GL_ARB_draw_buffers_blend 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode);
+GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+#endif
+
+#ifndef GL_ARB_sample_shading
+#define GL_ARB_sample_shading 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value);
+#endif
+
+#ifndef GL_ARB_texture_cube_map_array
+#define GL_ARB_texture_cube_map_array 1
+#endif
+
+#ifndef GL_ARB_texture_gather
+#define GL_ARB_texture_gather 1
+#endif
+
+#ifndef GL_ARB_texture_query_lod
+#define GL_ARB_texture_query_lod 1
+#endif
+
+#ifndef GL_ARB_shading_language_include
+#define GL_ARB_shading_language_include 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string);
+GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name);
+GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length);
+GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name);
+GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string);
+GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string);
+typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name);
+typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length);
+typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string);
+typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_ARB_texture_compression_bptc
+#define GL_ARB_texture_compression_bptc 1
+#endif
+
+#ifndef GL_ARB_blend_func_extended
+#define GL_ARB_blend_func_extended 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name);
+#endif
+
+#ifndef GL_ARB_explicit_attrib_location
+#define GL_ARB_explicit_attrib_location 1
+#endif
+
+#ifndef GL_ARB_occlusion_query2
+#define GL_ARB_occlusion_query2 1
+#endif
+
+#ifndef GL_ARB_sampler_objects
+#define GL_ARB_sampler_objects 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers);
+GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers);
+GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler);
+GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler);
+GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param);
+GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param);
+GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param);
+GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param);
+GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param);
+GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers);
+typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers);
+typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler);
+typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params);
+#endif
+
+#ifndef GL_ARB_shader_bit_encoding
+#define GL_ARB_shader_bit_encoding 1
+#endif
+
+#ifndef GL_ARB_texture_rgb10_a2ui
+#define GL_ARB_texture_rgb10_a2ui 1
+#endif
+
+#ifndef GL_ARB_texture_swizzle
+#define GL_ARB_texture_swizzle 1
+#endif
+
+#ifndef GL_ARB_timer_query
+#define GL_ARB_timer_query 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target);
+GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params);
+#endif
+
+#ifndef GL_ARB_vertex_type_2_10_10_10_rev
+#define GL_ARB_vertex_type_2_10_10_10_rev 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color);
+GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color);
+GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color);
+GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color);
+typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+#endif
+
+#ifndef GL_ARB_draw_indirect
+#define GL_ARB_draw_indirect 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const GLvoid *indirect);
+GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid *indirect);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect);
+#endif
+
+#ifndef GL_ARB_gpu_shader5
+#define GL_ARB_gpu_shader5 1
+#endif
+
+#ifndef GL_ARB_gpu_shader_fp64
+#define GL_ARB_gpu_shader_fp64 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x);
+GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x);
+typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params);
+#endif
+
+#ifndef GL_ARB_shader_subroutine
+#define GL_ARB_shader_subroutine 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name);
+GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name);
+GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices);
+GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params);
+GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name);
+typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices);
+typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+#endif
+
+#ifndef GL_ARB_tessellation_shader
+#define GL_ARB_tessellation_shader 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value);
+GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values);
+#endif
+
+#ifndef GL_ARB_texture_buffer_object_rgb32
+#define GL_ARB_texture_buffer_object_rgb32 1
+#endif
+
+#ifndef GL_ARB_transform_feedback2
+#define GL_ARB_transform_feedback2 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id);
+GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids);
+GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids);
+GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id);
+GLAPI void APIENTRY glPauseTransformFeedback (void);
+GLAPI void APIENTRY glResumeTransformFeedback (void);
+GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids);
+typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id);
+#endif
+
+#ifndef GL_ARB_transform_feedback3
+#define GL_ARB_transform_feedback3 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream);
+GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id);
+GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index);
+GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream);
+typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_ARB_ES2_compatibility
+#define GL_ARB_ES2_compatibility 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glReleaseShaderCompiler (void);
+GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length);
+GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f);
+GLAPI void APIENTRY glClearDepthf (GLfloat d);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void);
+typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length);
+typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f);
+typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);
+#endif
+
+#ifndef GL_ARB_get_program_binary
+#define GL_ARB_get_program_binary 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);
+GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length);
+GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);
+typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value);
+#endif
+
+#ifndef GL_ARB_separate_shader_objects
+#define GL_ARB_separate_shader_objects 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program);
+GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program);
+GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar* const *strings);
+GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines);
+GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines);
+GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params);
+GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0);
+GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0);
+GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0);
+GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0);
+GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1);
+GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);
+GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program);
+typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar* const *strings);
+typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines);
+typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+#endif
+
+#ifndef GL_ARB_vertex_attrib_64bit
+#define GL_ARB_vertex_attrib_64bit 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params);
+#endif
+
+#ifndef GL_ARB_viewport_array
+#define GL_ARB_viewport_array 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v);
+GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f);
+GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data);
+GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v);
+typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f);
+typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data);
+#endif
+
+#ifndef GL_ARB_cl_event
+#define GL_ARB_cl_event 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context * context, struct _cl_event * event, GLbitfield flags);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context * context, struct _cl_event * event, GLbitfield flags);
+#endif
+
+#ifndef GL_ARB_debug_output
+#define GL_ARB_debug_output 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const GLvoid *userParam);
+GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid *userParam);
+typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+#endif
+
+#ifndef GL_ARB_robustness
+#define GL_ARB_robustness 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void);
+GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img);
+GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data);
+GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img);
+GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void);
+typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img);
+typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data);
+typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img);
+typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+#endif
+
+#ifndef GL_ARB_shader_stencil_export
+#define GL_ARB_shader_stencil_export 1
+#endif
+
+#ifndef GL_ARB_base_instance
+#define GL_ARB_base_instance 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
+GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
+GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
+#endif
+
+#ifndef GL_ARB_shading_language_420pack
+#define GL_ARB_shading_language_420pack 1
+#endif
+
+#ifndef GL_ARB_transform_feedback_instanced
+#define GL_ARB_transform_feedback_instanced 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount);
+GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);
+#endif
+
+#ifndef GL_ARB_compressed_texture_pixel_storage
+#define GL_ARB_compressed_texture_pixel_storage 1
+#endif
+
+#ifndef GL_ARB_conservative_depth
+#define GL_ARB_conservative_depth 1
+#endif
+
+#ifndef GL_ARB_internalformat_query
+#define GL_ARB_internalformat_query 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+#endif
+
+#ifndef GL_ARB_map_buffer_alignment
+#define GL_ARB_map_buffer_alignment 1
+#endif
+
+#ifndef GL_ARB_shader_atomic_counters
+#define GL_ARB_shader_atomic_counters 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_ARB_shader_image_load_store
+#define GL_ARB_shader_image_load_store 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers);
+#endif
+
+#ifndef GL_ARB_shading_language_packing
+#define GL_ARB_shading_language_packing 1
+#endif
+
+#ifndef GL_ARB_texture_storage
+#define GL_ARB_texture_storage 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+
+#ifndef GL_KHR_texture_compression_astc_ldr
+#define GL_KHR_texture_compression_astc_ldr 1
+#endif
+
+#ifndef GL_KHR_debug
+#define GL_KHR_debug 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam);
+GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+GLAPI void APIENTRY glPopDebugGroup (void);
+GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label);
+GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam);
+typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void);
+typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label);
+typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+#endif
+
+#ifndef GL_ARB_arrays_of_arrays
+#define GL_ARB_arrays_of_arrays 1
+#endif
+
+#ifndef GL_ARB_clear_buffer_object
+#define GL_ARB_clear_buffer_object 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, GLsizeiptr offset, GLsizeiptr size, const void *data);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, GLsizeiptr offset, GLsizeiptr size, const void *data);
+#endif
+
+#ifndef GL_ARB_compute_shader
+#define GL_ARB_compute_shader 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect);
+#endif
+
+#ifndef GL_ARB_copy_image
+#define GL_ARB_copy_image 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+#endif
+
+#ifndef GL_ARB_texture_view
+#define GL_ARB_texture_view 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+#endif
+
+#ifndef GL_ARB_vertex_attrib_binding
+#define GL_ARB_vertex_attrib_binding 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex);
+GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor);
+GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex);
+typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor);
+typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+#endif
+
+#ifndef GL_ARB_robustness_isolation
+#define GL_ARB_robustness_isolation 1
+#endif
+
+#ifndef GL_ARB_ES3_compatibility
+#define GL_ARB_ES3_compatibility 1
+#endif
+
+#ifndef GL_ARB_explicit_uniform_location
+#define GL_ARB_explicit_uniform_location 1
+#endif
+
+#ifndef GL_ARB_fragment_layer_viewport
+#define GL_ARB_fragment_layer_viewport 1
+#endif
+
+#ifndef GL_ARB_framebuffer_no_attachments
+#define GL_ARB_framebuffer_no_attachments 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param);
+GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_ARB_internalformat_query2
+#define GL_ARB_internalformat_query2 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params);
+#endif
+
+#ifndef GL_ARB_invalidate_subdata
+#define GL_ARB_invalidate_subdata 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level);
+GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length);
+GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer);
+GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_ARB_multi_draw_indirect
+#define GL_ARB_multi_draw_indirect 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
+#endif
+
+#ifndef GL_ARB_program_interface_query
+#define GL_ARB_program_interface_query 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name);
+GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name);
+GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+#endif
+
+#ifndef GL_ARB_robust_buffer_access_behavior
+#define GL_ARB_robust_buffer_access_behavior 1
+#endif
+
+#ifndef GL_ARB_shader_image_size
+#define GL_ARB_shader_image_size 1
+#endif
+
+#ifndef GL_ARB_shader_storage_buffer_object
+#define GL_ARB_shader_storage_buffer_object 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding);
+#endif
+
+#ifndef GL_ARB_stencil_texturing
+#define GL_ARB_stencil_texturing 1
+#endif
+
+#ifndef GL_ARB_texture_buffer_range
+#define GL_ARB_texture_buffer_range 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+#endif
+
+#ifndef GL_ARB_texture_query_levels
+#define GL_ARB_texture_query_levels 1
+#endif
+
+#ifndef GL_ARB_texture_storage_multisample
+#define GL_ARB_texture_storage_multisample 1
+#ifdef GLCOREARB_PROTOTYPES
+GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+#endif /* GLCOREARB_PROTOTYPES */
+typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glew.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glew.h
new file mode 100644
index 00000000..0cd6ae3a
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glew.h
@@ -0,0 +1,16126 @@
+/*
+** The OpenGL Extension Wrangler Library
+** Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
+** Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
+** Copyright (C) 2002, Lev Povalahev
+** All rights reserved.
+**
+** Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are met:
+**
+** * Redistributions of source code must retain the above copyright notice,
+** this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright notice,
+** this list of conditions and the following disclaimer in the documentation
+** and/or other materials provided with the distribution.
+** * The name of the author may be used to endorse or promote products
+** derived from this software without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+** THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+ * Mesa 3-D graphics library
+ * Version: 7.0
+ *
+ * Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+** Copyright (c) 2007 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+#ifndef __glew_h__
+#define __glew_h__
+#define __GLEW_H__
+
+#if defined(__gl_h_) || defined(__GL_H__) || defined(__X_GL_H)
+#error gl.h included before glew.h
+#endif
+#if defined(__glext_h_) || defined(__GLEXT_H_)
+#error glext.h included before glew.h
+#endif
+#if defined(__gl_ATI_h_)
+#error glATI.h included before glew.h
+#endif
+
+#define __gl_h_
+#define __GL_H__
+#define __X_GL_H
+#define __glext_h_
+#define __GLEXT_H_
+#define __gl_ATI_h_
+
+#if defined(_WIN32)
+
+/*
+ * GLEW does not include <windows.h> to avoid name space pollution.
+ * GL needs GLAPI and GLAPIENTRY, GLU needs APIENTRY, CALLBACK, and wchar_t
+ * defined properly.
+ */
+/* <windef.h> */
+#ifndef APIENTRY
+#define GLEW_APIENTRY_DEFINED
+# if defined(__MINGW32__) || defined(__CYGWIN__)
+# define APIENTRY __stdcall
+# elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__)
+# define APIENTRY __stdcall
+# else
+# define APIENTRY
+# endif
+#endif
+#ifndef GLAPI
+# if defined(__MINGW32__) || defined(__CYGWIN__)
+# define GLAPI extern
+# endif
+#endif
+/* <winnt.h> */
+#ifndef CALLBACK
+#define GLEW_CALLBACK_DEFINED
+# if defined(__MINGW32__) || defined(__CYGWIN__)
+# define CALLBACK __attribute__ ((__stdcall__))
+# elif (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS)
+# define CALLBACK __stdcall
+# else
+# define CALLBACK
+# endif
+#endif
+/* <wingdi.h> and <winnt.h> */
+#ifndef WINGDIAPI
+#define GLEW_WINGDIAPI_DEFINED
+#define WINGDIAPI __declspec(dllimport)
+#endif
+/* <ctype.h> */
+#if (defined(_MSC_VER) || defined(__BORLANDC__)) && !defined(_WCHAR_T_DEFINED)
+typedef unsigned short wchar_t;
+# define _WCHAR_T_DEFINED
+#endif
+/* <stddef.h> */
+#if !defined(_W64)
+# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && defined(_MSC_VER) && _MSC_VER >= 1300
+# define _W64 __w64
+# else
+# define _W64
+# endif
+#endif
+#if !defined(_PTRDIFF_T_DEFINED) && !defined(_PTRDIFF_T_) && !defined(__MINGW64__)
+# ifdef _WIN64
+typedef __int64 ptrdiff_t;
+# else
+typedef _W64 int ptrdiff_t;
+# endif
+# define _PTRDIFF_T_DEFINED
+# define _PTRDIFF_T_
+#endif
+
+#ifndef GLAPI
+# if defined(__MINGW32__) || defined(__CYGWIN__)
+# define GLAPI extern
+# else
+# define GLAPI WINGDIAPI
+# endif
+#endif
+
+#ifndef GLAPIENTRY
+#define GLAPIENTRY APIENTRY
+#endif
+
+/*
+ * GLEW_STATIC is defined for static library.
+ * GLEW_BUILD is defined for building the DLL library.
+ */
+
+#ifdef GLEW_STATIC
+# define GLEWAPI extern
+#else
+# ifdef GLEW_BUILD
+# define GLEWAPI extern __declspec(dllexport)
+# else
+# define GLEWAPI extern __declspec(dllimport)
+# endif
+#endif
+
+#else /* _UNIX */
+
+/*
+ * Needed for ptrdiff_t in turn needed by VBO. This is defined by ISO
+ * C. On my system, this amounts to _3 lines_ of included code, all of
+ * them pretty much harmless. If you know of a way of detecting 32 vs
+ * 64 _targets_ at compile time you are free to replace this with
+ * something that's portable. For now, _this_ is the portable solution.
+ * (mem, 2004-01-04)
+ */
+
+#include <stddef.h>
+
+/* SGI MIPSPro doesn't like stdint.h in C++ mode */
+/* ID: 3376260 Solaris 9 has inttypes.h, but not stdint.h */
+
+#if (defined(__sgi) || defined(__sun)) && !defined(__GNUC__)
+#include <inttypes.h>
+#else
+#include <stdint.h>
+#endif
+
+#define GLEW_APIENTRY_DEFINED
+#define APIENTRY
+
+/*
+ * GLEW_STATIC is defined for static library.
+ */
+
+#ifdef GLEW_STATIC
+# define GLEWAPI extern
+#else
+# if defined(__GNUC__) && __GNUC__>=4
+# define GLEWAPI extern __attribute__ ((visibility("default")))
+# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+# define GLEWAPI extern __global
+# else
+# define GLEWAPI extern
+# endif
+#endif
+
+/* <glu.h> */
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+#ifndef GLAPIENTRY
+#define GLAPIENTRY
+#endif
+
+#endif /* _WIN32 */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ----------------------------- GL_VERSION_1_1 ---------------------------- */
+
+#ifndef GL_VERSION_1_1
+#define GL_VERSION_1_1 1
+
+typedef unsigned int GLenum;
+typedef unsigned int GLbitfield;
+typedef unsigned int GLuint;
+typedef int GLint;
+typedef int GLsizei;
+typedef unsigned char GLboolean;
+typedef signed char GLbyte;
+typedef short GLshort;
+typedef unsigned char GLubyte;
+typedef unsigned short GLushort;
+typedef unsigned long GLulong;
+typedef float GLfloat;
+typedef float GLclampf;
+typedef double GLdouble;
+typedef double GLclampd;
+typedef void GLvoid;
+#if defined(_MSC_VER) && _MSC_VER < 1400
+typedef __int64 GLint64EXT;
+typedef unsigned __int64 GLuint64EXT;
+#elif defined(_MSC_VER) || defined(__BORLANDC__)
+typedef signed long long GLint64EXT;
+typedef unsigned long long GLuint64EXT;
+#else
+# if defined(__MINGW32__) || defined(__CYGWIN__)
+#include <inttypes.h>
+# endif
+typedef int64_t GLint64EXT;
+typedef uint64_t GLuint64EXT;
+#endif
+typedef GLint64EXT GLint64;
+typedef GLuint64EXT GLuint64;
+typedef struct __GLsync *GLsync;
+
+typedef char GLchar;
+
+#define GL_ZERO 0
+#define GL_FALSE 0
+#define GL_LOGIC_OP 0x0BF1
+#define GL_NONE 0
+#define GL_TEXTURE_COMPONENTS 0x1003
+#define GL_NO_ERROR 0
+#define GL_POINTS 0x0000
+#define GL_CURRENT_BIT 0x00000001
+#define GL_TRUE 1
+#define GL_ONE 1
+#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001
+#define GL_LINES 0x0001
+#define GL_LINE_LOOP 0x0002
+#define GL_POINT_BIT 0x00000002
+#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002
+#define GL_LINE_STRIP 0x0003
+#define GL_LINE_BIT 0x00000004
+#define GL_TRIANGLES 0x0004
+#define GL_TRIANGLE_STRIP 0x0005
+#define GL_TRIANGLE_FAN 0x0006
+#define GL_QUADS 0x0007
+#define GL_QUAD_STRIP 0x0008
+#define GL_POLYGON_BIT 0x00000008
+#define GL_POLYGON 0x0009
+#define GL_POLYGON_STIPPLE_BIT 0x00000010
+#define GL_PIXEL_MODE_BIT 0x00000020
+#define GL_LIGHTING_BIT 0x00000040
+#define GL_FOG_BIT 0x00000080
+#define GL_DEPTH_BUFFER_BIT 0x00000100
+#define GL_ACCUM 0x0100
+#define GL_LOAD 0x0101
+#define GL_RETURN 0x0102
+#define GL_MULT 0x0103
+#define GL_ADD 0x0104
+#define GL_NEVER 0x0200
+#define GL_ACCUM_BUFFER_BIT 0x00000200
+#define GL_LESS 0x0201
+#define GL_EQUAL 0x0202
+#define GL_LEQUAL 0x0203
+#define GL_GREATER 0x0204
+#define GL_NOTEQUAL 0x0205
+#define GL_GEQUAL 0x0206
+#define GL_ALWAYS 0x0207
+#define GL_SRC_COLOR 0x0300
+#define GL_ONE_MINUS_SRC_COLOR 0x0301
+#define GL_SRC_ALPHA 0x0302
+#define GL_ONE_MINUS_SRC_ALPHA 0x0303
+#define GL_DST_ALPHA 0x0304
+#define GL_ONE_MINUS_DST_ALPHA 0x0305
+#define GL_DST_COLOR 0x0306
+#define GL_ONE_MINUS_DST_COLOR 0x0307
+#define GL_SRC_ALPHA_SATURATE 0x0308
+#define GL_STENCIL_BUFFER_BIT 0x00000400
+#define GL_FRONT_LEFT 0x0400
+#define GL_FRONT_RIGHT 0x0401
+#define GL_BACK_LEFT 0x0402
+#define GL_BACK_RIGHT 0x0403
+#define GL_FRONT 0x0404
+#define GL_BACK 0x0405
+#define GL_LEFT 0x0406
+#define GL_RIGHT 0x0407
+#define GL_FRONT_AND_BACK 0x0408
+#define GL_AUX0 0x0409
+#define GL_AUX1 0x040A
+#define GL_AUX2 0x040B
+#define GL_AUX3 0x040C
+#define GL_INVALID_ENUM 0x0500
+#define GL_INVALID_VALUE 0x0501
+#define GL_INVALID_OPERATION 0x0502
+#define GL_STACK_OVERFLOW 0x0503
+#define GL_STACK_UNDERFLOW 0x0504
+#define GL_OUT_OF_MEMORY 0x0505
+#define GL_2D 0x0600
+#define GL_3D 0x0601
+#define GL_3D_COLOR 0x0602
+#define GL_3D_COLOR_TEXTURE 0x0603
+#define GL_4D_COLOR_TEXTURE 0x0604
+#define GL_PASS_THROUGH_TOKEN 0x0700
+#define GL_POINT_TOKEN 0x0701
+#define GL_LINE_TOKEN 0x0702
+#define GL_POLYGON_TOKEN 0x0703
+#define GL_BITMAP_TOKEN 0x0704
+#define GL_DRAW_PIXEL_TOKEN 0x0705
+#define GL_COPY_PIXEL_TOKEN 0x0706
+#define GL_LINE_RESET_TOKEN 0x0707
+#define GL_EXP 0x0800
+#define GL_VIEWPORT_BIT 0x00000800
+#define GL_EXP2 0x0801
+#define GL_CW 0x0900
+#define GL_CCW 0x0901
+#define GL_COEFF 0x0A00
+#define GL_ORDER 0x0A01
+#define GL_DOMAIN 0x0A02
+#define GL_CURRENT_COLOR 0x0B00
+#define GL_CURRENT_INDEX 0x0B01
+#define GL_CURRENT_NORMAL 0x0B02
+#define GL_CURRENT_TEXTURE_COORDS 0x0B03
+#define GL_CURRENT_RASTER_COLOR 0x0B04
+#define GL_CURRENT_RASTER_INDEX 0x0B05
+#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06
+#define GL_CURRENT_RASTER_POSITION 0x0B07
+#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08
+#define GL_CURRENT_RASTER_DISTANCE 0x0B09
+#define GL_POINT_SMOOTH 0x0B10
+#define GL_POINT_SIZE 0x0B11
+#define GL_POINT_SIZE_RANGE 0x0B12
+#define GL_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_LINE_SMOOTH 0x0B20
+#define GL_LINE_WIDTH 0x0B21
+#define GL_LINE_WIDTH_RANGE 0x0B22
+#define GL_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_LINE_STIPPLE 0x0B24
+#define GL_LINE_STIPPLE_PATTERN 0x0B25
+#define GL_LINE_STIPPLE_REPEAT 0x0B26
+#define GL_LIST_MODE 0x0B30
+#define GL_MAX_LIST_NESTING 0x0B31
+#define GL_LIST_BASE 0x0B32
+#define GL_LIST_INDEX 0x0B33
+#define GL_POLYGON_MODE 0x0B40
+#define GL_POLYGON_SMOOTH 0x0B41
+#define GL_POLYGON_STIPPLE 0x0B42
+#define GL_EDGE_FLAG 0x0B43
+#define GL_CULL_FACE 0x0B44
+#define GL_CULL_FACE_MODE 0x0B45
+#define GL_FRONT_FACE 0x0B46
+#define GL_LIGHTING 0x0B50
+#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51
+#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52
+#define GL_LIGHT_MODEL_AMBIENT 0x0B53
+#define GL_SHADE_MODEL 0x0B54
+#define GL_COLOR_MATERIAL_FACE 0x0B55
+#define GL_COLOR_MATERIAL_PARAMETER 0x0B56
+#define GL_COLOR_MATERIAL 0x0B57
+#define GL_FOG 0x0B60
+#define GL_FOG_INDEX 0x0B61
+#define GL_FOG_DENSITY 0x0B62
+#define GL_FOG_START 0x0B63
+#define GL_FOG_END 0x0B64
+#define GL_FOG_MODE 0x0B65
+#define GL_FOG_COLOR 0x0B66
+#define GL_DEPTH_RANGE 0x0B70
+#define GL_DEPTH_TEST 0x0B71
+#define GL_DEPTH_WRITEMASK 0x0B72
+#define GL_DEPTH_CLEAR_VALUE 0x0B73
+#define GL_DEPTH_FUNC 0x0B74
+#define GL_ACCUM_CLEAR_VALUE 0x0B80
+#define GL_STENCIL_TEST 0x0B90
+#define GL_STENCIL_CLEAR_VALUE 0x0B91
+#define GL_STENCIL_FUNC 0x0B92
+#define GL_STENCIL_VALUE_MASK 0x0B93
+#define GL_STENCIL_FAIL 0x0B94
+#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
+#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
+#define GL_STENCIL_REF 0x0B97
+#define GL_STENCIL_WRITEMASK 0x0B98
+#define GL_MATRIX_MODE 0x0BA0
+#define GL_NORMALIZE 0x0BA1
+#define GL_VIEWPORT 0x0BA2
+#define GL_MODELVIEW_STACK_DEPTH 0x0BA3
+#define GL_PROJECTION_STACK_DEPTH 0x0BA4
+#define GL_TEXTURE_STACK_DEPTH 0x0BA5
+#define GL_MODELVIEW_MATRIX 0x0BA6
+#define GL_PROJECTION_MATRIX 0x0BA7
+#define GL_TEXTURE_MATRIX 0x0BA8
+#define GL_ATTRIB_STACK_DEPTH 0x0BB0
+#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1
+#define GL_ALPHA_TEST 0x0BC0
+#define GL_ALPHA_TEST_FUNC 0x0BC1
+#define GL_ALPHA_TEST_REF 0x0BC2
+#define GL_DITHER 0x0BD0
+#define GL_BLEND_DST 0x0BE0
+#define GL_BLEND_SRC 0x0BE1
+#define GL_BLEND 0x0BE2
+#define GL_LOGIC_OP_MODE 0x0BF0
+#define GL_INDEX_LOGIC_OP 0x0BF1
+#define GL_COLOR_LOGIC_OP 0x0BF2
+#define GL_AUX_BUFFERS 0x0C00
+#define GL_DRAW_BUFFER 0x0C01
+#define GL_READ_BUFFER 0x0C02
+#define GL_SCISSOR_BOX 0x0C10
+#define GL_SCISSOR_TEST 0x0C11
+#define GL_INDEX_CLEAR_VALUE 0x0C20
+#define GL_INDEX_WRITEMASK 0x0C21
+#define GL_COLOR_CLEAR_VALUE 0x0C22
+#define GL_COLOR_WRITEMASK 0x0C23
+#define GL_INDEX_MODE 0x0C30
+#define GL_RGBA_MODE 0x0C31
+#define GL_DOUBLEBUFFER 0x0C32
+#define GL_STEREO 0x0C33
+#define GL_RENDER_MODE 0x0C40
+#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50
+#define GL_POINT_SMOOTH_HINT 0x0C51
+#define GL_LINE_SMOOTH_HINT 0x0C52
+#define GL_POLYGON_SMOOTH_HINT 0x0C53
+#define GL_FOG_HINT 0x0C54
+#define GL_TEXTURE_GEN_S 0x0C60
+#define GL_TEXTURE_GEN_T 0x0C61
+#define GL_TEXTURE_GEN_R 0x0C62
+#define GL_TEXTURE_GEN_Q 0x0C63
+#define GL_PIXEL_MAP_I_TO_I 0x0C70
+#define GL_PIXEL_MAP_S_TO_S 0x0C71
+#define GL_PIXEL_MAP_I_TO_R 0x0C72
+#define GL_PIXEL_MAP_I_TO_G 0x0C73
+#define GL_PIXEL_MAP_I_TO_B 0x0C74
+#define GL_PIXEL_MAP_I_TO_A 0x0C75
+#define GL_PIXEL_MAP_R_TO_R 0x0C76
+#define GL_PIXEL_MAP_G_TO_G 0x0C77
+#define GL_PIXEL_MAP_B_TO_B 0x0C78
+#define GL_PIXEL_MAP_A_TO_A 0x0C79
+#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0
+#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1
+#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2
+#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3
+#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4
+#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5
+#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6
+#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7
+#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8
+#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9
+#define GL_UNPACK_SWAP_BYTES 0x0CF0
+#define GL_UNPACK_LSB_FIRST 0x0CF1
+#define GL_UNPACK_ROW_LENGTH 0x0CF2
+#define GL_UNPACK_SKIP_ROWS 0x0CF3
+#define GL_UNPACK_SKIP_PIXELS 0x0CF4
+#define GL_UNPACK_ALIGNMENT 0x0CF5
+#define GL_PACK_SWAP_BYTES 0x0D00
+#define GL_PACK_LSB_FIRST 0x0D01
+#define GL_PACK_ROW_LENGTH 0x0D02
+#define GL_PACK_SKIP_ROWS 0x0D03
+#define GL_PACK_SKIP_PIXELS 0x0D04
+#define GL_PACK_ALIGNMENT 0x0D05
+#define GL_MAP_COLOR 0x0D10
+#define GL_MAP_STENCIL 0x0D11
+#define GL_INDEX_SHIFT 0x0D12
+#define GL_INDEX_OFFSET 0x0D13
+#define GL_RED_SCALE 0x0D14
+#define GL_RED_BIAS 0x0D15
+#define GL_ZOOM_X 0x0D16
+#define GL_ZOOM_Y 0x0D17
+#define GL_GREEN_SCALE 0x0D18
+#define GL_GREEN_BIAS 0x0D19
+#define GL_BLUE_SCALE 0x0D1A
+#define GL_BLUE_BIAS 0x0D1B
+#define GL_ALPHA_SCALE 0x0D1C
+#define GL_ALPHA_BIAS 0x0D1D
+#define GL_DEPTH_SCALE 0x0D1E
+#define GL_DEPTH_BIAS 0x0D1F
+#define GL_MAX_EVAL_ORDER 0x0D30
+#define GL_MAX_LIGHTS 0x0D31
+#define GL_MAX_CLIP_PLANES 0x0D32
+#define GL_MAX_TEXTURE_SIZE 0x0D33
+#define GL_MAX_PIXEL_MAP_TABLE 0x0D34
+#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35
+#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36
+#define GL_MAX_NAME_STACK_DEPTH 0x0D37
+#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38
+#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39
+#define GL_MAX_VIEWPORT_DIMS 0x0D3A
+#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B
+#define GL_SUBPIXEL_BITS 0x0D50
+#define GL_INDEX_BITS 0x0D51
+#define GL_RED_BITS 0x0D52
+#define GL_GREEN_BITS 0x0D53
+#define GL_BLUE_BITS 0x0D54
+#define GL_ALPHA_BITS 0x0D55
+#define GL_DEPTH_BITS 0x0D56
+#define GL_STENCIL_BITS 0x0D57
+#define GL_ACCUM_RED_BITS 0x0D58
+#define GL_ACCUM_GREEN_BITS 0x0D59
+#define GL_ACCUM_BLUE_BITS 0x0D5A
+#define GL_ACCUM_ALPHA_BITS 0x0D5B
+#define GL_NAME_STACK_DEPTH 0x0D70
+#define GL_AUTO_NORMAL 0x0D80
+#define GL_MAP1_COLOR_4 0x0D90
+#define GL_MAP1_INDEX 0x0D91
+#define GL_MAP1_NORMAL 0x0D92
+#define GL_MAP1_TEXTURE_COORD_1 0x0D93
+#define GL_MAP1_TEXTURE_COORD_2 0x0D94
+#define GL_MAP1_TEXTURE_COORD_3 0x0D95
+#define GL_MAP1_TEXTURE_COORD_4 0x0D96
+#define GL_MAP1_VERTEX_3 0x0D97
+#define GL_MAP1_VERTEX_4 0x0D98
+#define GL_MAP2_COLOR_4 0x0DB0
+#define GL_MAP2_INDEX 0x0DB1
+#define GL_MAP2_NORMAL 0x0DB2
+#define GL_MAP2_TEXTURE_COORD_1 0x0DB3
+#define GL_MAP2_TEXTURE_COORD_2 0x0DB4
+#define GL_MAP2_TEXTURE_COORD_3 0x0DB5
+#define GL_MAP2_TEXTURE_COORD_4 0x0DB6
+#define GL_MAP2_VERTEX_3 0x0DB7
+#define GL_MAP2_VERTEX_4 0x0DB8
+#define GL_MAP1_GRID_DOMAIN 0x0DD0
+#define GL_MAP1_GRID_SEGMENTS 0x0DD1
+#define GL_MAP2_GRID_DOMAIN 0x0DD2
+#define GL_MAP2_GRID_SEGMENTS 0x0DD3
+#define GL_TEXTURE_1D 0x0DE0
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0
+#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1
+#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2
+#define GL_SELECTION_BUFFER_POINTER 0x0DF3
+#define GL_SELECTION_BUFFER_SIZE 0x0DF4
+#define GL_TEXTURE_WIDTH 0x1000
+#define GL_TRANSFORM_BIT 0x00001000
+#define GL_TEXTURE_HEIGHT 0x1001
+#define GL_TEXTURE_INTERNAL_FORMAT 0x1003
+#define GL_TEXTURE_BORDER_COLOR 0x1004
+#define GL_TEXTURE_BORDER 0x1005
+#define GL_DONT_CARE 0x1100
+#define GL_FASTEST 0x1101
+#define GL_NICEST 0x1102
+#define GL_AMBIENT 0x1200
+#define GL_DIFFUSE 0x1201
+#define GL_SPECULAR 0x1202
+#define GL_POSITION 0x1203
+#define GL_SPOT_DIRECTION 0x1204
+#define GL_SPOT_EXPONENT 0x1205
+#define GL_SPOT_CUTOFF 0x1206
+#define GL_CONSTANT_ATTENUATION 0x1207
+#define GL_LINEAR_ATTENUATION 0x1208
+#define GL_QUADRATIC_ATTENUATION 0x1209
+#define GL_COMPILE 0x1300
+#define GL_COMPILE_AND_EXECUTE 0x1301
+#define GL_BYTE 0x1400
+#define GL_UNSIGNED_BYTE 0x1401
+#define GL_SHORT 0x1402
+#define GL_UNSIGNED_SHORT 0x1403
+#define GL_INT 0x1404
+#define GL_UNSIGNED_INT 0x1405
+#define GL_FLOAT 0x1406
+#define GL_2_BYTES 0x1407
+#define GL_3_BYTES 0x1408
+#define GL_4_BYTES 0x1409
+#define GL_DOUBLE 0x140A
+#define GL_CLEAR 0x1500
+#define GL_AND 0x1501
+#define GL_AND_REVERSE 0x1502
+#define GL_COPY 0x1503
+#define GL_AND_INVERTED 0x1504
+#define GL_NOOP 0x1505
+#define GL_XOR 0x1506
+#define GL_OR 0x1507
+#define GL_NOR 0x1508
+#define GL_EQUIV 0x1509
+#define GL_INVERT 0x150A
+#define GL_OR_REVERSE 0x150B
+#define GL_COPY_INVERTED 0x150C
+#define GL_OR_INVERTED 0x150D
+#define GL_NAND 0x150E
+#define GL_SET 0x150F
+#define GL_EMISSION 0x1600
+#define GL_SHININESS 0x1601
+#define GL_AMBIENT_AND_DIFFUSE 0x1602
+#define GL_COLOR_INDEXES 0x1603
+#define GL_MODELVIEW 0x1700
+#define GL_PROJECTION 0x1701
+#define GL_TEXTURE 0x1702
+#define GL_COLOR 0x1800
+#define GL_DEPTH 0x1801
+#define GL_STENCIL 0x1802
+#define GL_COLOR_INDEX 0x1900
+#define GL_STENCIL_INDEX 0x1901
+#define GL_DEPTH_COMPONENT 0x1902
+#define GL_RED 0x1903
+#define GL_GREEN 0x1904
+#define GL_BLUE 0x1905
+#define GL_ALPHA 0x1906
+#define GL_RGB 0x1907
+#define GL_RGBA 0x1908
+#define GL_LUMINANCE 0x1909
+#define GL_LUMINANCE_ALPHA 0x190A
+#define GL_BITMAP 0x1A00
+#define GL_POINT 0x1B00
+#define GL_LINE 0x1B01
+#define GL_FILL 0x1B02
+#define GL_RENDER 0x1C00
+#define GL_FEEDBACK 0x1C01
+#define GL_SELECT 0x1C02
+#define GL_FLAT 0x1D00
+#define GL_SMOOTH 0x1D01
+#define GL_KEEP 0x1E00
+#define GL_REPLACE 0x1E01
+#define GL_INCR 0x1E02
+#define GL_DECR 0x1E03
+#define GL_VENDOR 0x1F00
+#define GL_RENDERER 0x1F01
+#define GL_VERSION 0x1F02
+#define GL_EXTENSIONS 0x1F03
+#define GL_S 0x2000
+#define GL_ENABLE_BIT 0x00002000
+#define GL_T 0x2001
+#define GL_R 0x2002
+#define GL_Q 0x2003
+#define GL_MODULATE 0x2100
+#define GL_DECAL 0x2101
+#define GL_TEXTURE_ENV_MODE 0x2200
+#define GL_TEXTURE_ENV_COLOR 0x2201
+#define GL_TEXTURE_ENV 0x2300
+#define GL_EYE_LINEAR 0x2400
+#define GL_OBJECT_LINEAR 0x2401
+#define GL_SPHERE_MAP 0x2402
+#define GL_TEXTURE_GEN_MODE 0x2500
+#define GL_OBJECT_PLANE 0x2501
+#define GL_EYE_PLANE 0x2502
+#define GL_NEAREST 0x2600
+#define GL_LINEAR 0x2601
+#define GL_NEAREST_MIPMAP_NEAREST 0x2700
+#define GL_LINEAR_MIPMAP_NEAREST 0x2701
+#define GL_NEAREST_MIPMAP_LINEAR 0x2702
+#define GL_LINEAR_MIPMAP_LINEAR 0x2703
+#define GL_TEXTURE_MAG_FILTER 0x2800
+#define GL_TEXTURE_MIN_FILTER 0x2801
+#define GL_TEXTURE_WRAP_S 0x2802
+#define GL_TEXTURE_WRAP_T 0x2803
+#define GL_CLAMP 0x2900
+#define GL_REPEAT 0x2901
+#define GL_POLYGON_OFFSET_UNITS 0x2A00
+#define GL_POLYGON_OFFSET_POINT 0x2A01
+#define GL_POLYGON_OFFSET_LINE 0x2A02
+#define GL_R3_G3_B2 0x2A10
+#define GL_V2F 0x2A20
+#define GL_V3F 0x2A21
+#define GL_C4UB_V2F 0x2A22
+#define GL_C4UB_V3F 0x2A23
+#define GL_C3F_V3F 0x2A24
+#define GL_N3F_V3F 0x2A25
+#define GL_C4F_N3F_V3F 0x2A26
+#define GL_T2F_V3F 0x2A27
+#define GL_T4F_V4F 0x2A28
+#define GL_T2F_C4UB_V3F 0x2A29
+#define GL_T2F_C3F_V3F 0x2A2A
+#define GL_T2F_N3F_V3F 0x2A2B
+#define GL_T2F_C4F_N3F_V3F 0x2A2C
+#define GL_T4F_C4F_N3F_V4F 0x2A2D
+#define GL_CLIP_PLANE0 0x3000
+#define GL_CLIP_PLANE1 0x3001
+#define GL_CLIP_PLANE2 0x3002
+#define GL_CLIP_PLANE3 0x3003
+#define GL_CLIP_PLANE4 0x3004
+#define GL_CLIP_PLANE5 0x3005
+#define GL_LIGHT0 0x4000
+#define GL_COLOR_BUFFER_BIT 0x00004000
+#define GL_LIGHT1 0x4001
+#define GL_LIGHT2 0x4002
+#define GL_LIGHT3 0x4003
+#define GL_LIGHT4 0x4004
+#define GL_LIGHT5 0x4005
+#define GL_LIGHT6 0x4006
+#define GL_LIGHT7 0x4007
+#define GL_HINT_BIT 0x00008000
+#define GL_POLYGON_OFFSET_FILL 0x8037
+#define GL_POLYGON_OFFSET_FACTOR 0x8038
+#define GL_ALPHA4 0x803B
+#define GL_ALPHA8 0x803C
+#define GL_ALPHA12 0x803D
+#define GL_ALPHA16 0x803E
+#define GL_LUMINANCE4 0x803F
+#define GL_LUMINANCE8 0x8040
+#define GL_LUMINANCE12 0x8041
+#define GL_LUMINANCE16 0x8042
+#define GL_LUMINANCE4_ALPHA4 0x8043
+#define GL_LUMINANCE6_ALPHA2 0x8044
+#define GL_LUMINANCE8_ALPHA8 0x8045
+#define GL_LUMINANCE12_ALPHA4 0x8046
+#define GL_LUMINANCE12_ALPHA12 0x8047
+#define GL_LUMINANCE16_ALPHA16 0x8048
+#define GL_INTENSITY 0x8049
+#define GL_INTENSITY4 0x804A
+#define GL_INTENSITY8 0x804B
+#define GL_INTENSITY12 0x804C
+#define GL_INTENSITY16 0x804D
+#define GL_RGB4 0x804F
+#define GL_RGB5 0x8050
+#define GL_RGB8 0x8051
+#define GL_RGB10 0x8052
+#define GL_RGB12 0x8053
+#define GL_RGB16 0x8054
+#define GL_RGBA2 0x8055
+#define GL_RGBA4 0x8056
+#define GL_RGB5_A1 0x8057
+#define GL_RGBA8 0x8058
+#define GL_RGB10_A2 0x8059
+#define GL_RGBA12 0x805A
+#define GL_RGBA16 0x805B
+#define GL_TEXTURE_RED_SIZE 0x805C
+#define GL_TEXTURE_GREEN_SIZE 0x805D
+#define GL_TEXTURE_BLUE_SIZE 0x805E
+#define GL_TEXTURE_ALPHA_SIZE 0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE 0x8060
+#define GL_TEXTURE_INTENSITY_SIZE 0x8061
+#define GL_PROXY_TEXTURE_1D 0x8063
+#define GL_PROXY_TEXTURE_2D 0x8064
+#define GL_TEXTURE_PRIORITY 0x8066
+#define GL_TEXTURE_RESIDENT 0x8067
+#define GL_TEXTURE_BINDING_1D 0x8068
+#define GL_TEXTURE_BINDING_2D 0x8069
+#define GL_VERTEX_ARRAY 0x8074
+#define GL_NORMAL_ARRAY 0x8075
+#define GL_COLOR_ARRAY 0x8076
+#define GL_INDEX_ARRAY 0x8077
+#define GL_TEXTURE_COORD_ARRAY 0x8078
+#define GL_EDGE_FLAG_ARRAY 0x8079
+#define GL_VERTEX_ARRAY_SIZE 0x807A
+#define GL_VERTEX_ARRAY_TYPE 0x807B
+#define GL_VERTEX_ARRAY_STRIDE 0x807C
+#define GL_NORMAL_ARRAY_TYPE 0x807E
+#define GL_NORMAL_ARRAY_STRIDE 0x807F
+#define GL_COLOR_ARRAY_SIZE 0x8081
+#define GL_COLOR_ARRAY_TYPE 0x8082
+#define GL_COLOR_ARRAY_STRIDE 0x8083
+#define GL_INDEX_ARRAY_TYPE 0x8085
+#define GL_INDEX_ARRAY_STRIDE 0x8086
+#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A
+#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C
+#define GL_VERTEX_ARRAY_POINTER 0x808E
+#define GL_NORMAL_ARRAY_POINTER 0x808F
+#define GL_COLOR_ARRAY_POINTER 0x8090
+#define GL_INDEX_ARRAY_POINTER 0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093
+#define GL_COLOR_INDEX1_EXT 0x80E2
+#define GL_COLOR_INDEX2_EXT 0x80E3
+#define GL_COLOR_INDEX4_EXT 0x80E4
+#define GL_COLOR_INDEX8_EXT 0x80E5
+#define GL_COLOR_INDEX12_EXT 0x80E6
+#define GL_COLOR_INDEX16_EXT 0x80E7
+#define GL_EVAL_BIT 0x00010000
+#define GL_LIST_BIT 0x00020000
+#define GL_TEXTURE_BIT 0x00040000
+#define GL_SCISSOR_BIT 0x00080000
+#define GL_ALL_ATTRIB_BITS 0x000fffff
+#define GL_CLIENT_ALL_ATTRIB_BITS 0xffffffff
+
+GLAPI void GLAPIENTRY glAccum (GLenum op, GLfloat value);
+GLAPI void GLAPIENTRY glAlphaFunc (GLenum func, GLclampf ref);
+GLAPI GLboolean GLAPIENTRY glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences);
+GLAPI void GLAPIENTRY glArrayElement (GLint i);
+GLAPI void GLAPIENTRY glBegin (GLenum mode);
+GLAPI void GLAPIENTRY glBindTexture (GLenum target, GLuint texture);
+GLAPI void GLAPIENTRY glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap);
+GLAPI void GLAPIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
+GLAPI void GLAPIENTRY glCallList (GLuint list);
+GLAPI void GLAPIENTRY glCallLists (GLsizei n, GLenum type, const GLvoid *lists);
+GLAPI void GLAPIENTRY glClear (GLbitfield mask);
+GLAPI void GLAPIENTRY glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI void GLAPIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+GLAPI void GLAPIENTRY glClearDepth (GLclampd depth);
+GLAPI void GLAPIENTRY glClearIndex (GLfloat c);
+GLAPI void GLAPIENTRY glClearStencil (GLint s);
+GLAPI void GLAPIENTRY glClipPlane (GLenum plane, const GLdouble *equation);
+GLAPI void GLAPIENTRY glColor3b (GLbyte red, GLbyte green, GLbyte blue);
+GLAPI void GLAPIENTRY glColor3bv (const GLbyte *v);
+GLAPI void GLAPIENTRY glColor3d (GLdouble red, GLdouble green, GLdouble blue);
+GLAPI void GLAPIENTRY glColor3dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glColor3f (GLfloat red, GLfloat green, GLfloat blue);
+GLAPI void GLAPIENTRY glColor3fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glColor3i (GLint red, GLint green, GLint blue);
+GLAPI void GLAPIENTRY glColor3iv (const GLint *v);
+GLAPI void GLAPIENTRY glColor3s (GLshort red, GLshort green, GLshort blue);
+GLAPI void GLAPIENTRY glColor3sv (const GLshort *v);
+GLAPI void GLAPIENTRY glColor3ub (GLubyte red, GLubyte green, GLubyte blue);
+GLAPI void GLAPIENTRY glColor3ubv (const GLubyte *v);
+GLAPI void GLAPIENTRY glColor3ui (GLuint red, GLuint green, GLuint blue);
+GLAPI void GLAPIENTRY glColor3uiv (const GLuint *v);
+GLAPI void GLAPIENTRY glColor3us (GLushort red, GLushort green, GLushort blue);
+GLAPI void GLAPIENTRY glColor3usv (const GLushort *v);
+GLAPI void GLAPIENTRY glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha);
+GLAPI void GLAPIENTRY glColor4bv (const GLbyte *v);
+GLAPI void GLAPIENTRY glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
+GLAPI void GLAPIENTRY glColor4dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI void GLAPIENTRY glColor4fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glColor4i (GLint red, GLint green, GLint blue, GLint alpha);
+GLAPI void GLAPIENTRY glColor4iv (const GLint *v);
+GLAPI void GLAPIENTRY glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha);
+GLAPI void GLAPIENTRY glColor4sv (const GLshort *v);
+GLAPI void GLAPIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
+GLAPI void GLAPIENTRY glColor4ubv (const GLubyte *v);
+GLAPI void GLAPIENTRY glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha);
+GLAPI void GLAPIENTRY glColor4uiv (const GLuint *v);
+GLAPI void GLAPIENTRY glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha);
+GLAPI void GLAPIENTRY glColor4usv (const GLushort *v);
+GLAPI void GLAPIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+GLAPI void GLAPIENTRY glColorMaterial (GLenum face, GLenum mode);
+GLAPI void GLAPIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void GLAPIENTRY glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
+GLAPI void GLAPIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void GLAPIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void GLAPIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void GLAPIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void GLAPIENTRY glCullFace (GLenum mode);
+GLAPI void GLAPIENTRY glDeleteLists (GLuint list, GLsizei range);
+GLAPI void GLAPIENTRY glDeleteTextures (GLsizei n, const GLuint *textures);
+GLAPI void GLAPIENTRY glDepthFunc (GLenum func);
+GLAPI void GLAPIENTRY glDepthMask (GLboolean flag);
+GLAPI void GLAPIENTRY glDepthRange (GLclampd zNear, GLclampd zFar);
+GLAPI void GLAPIENTRY glDisable (GLenum cap);
+GLAPI void GLAPIENTRY glDisableClientState (GLenum array);
+GLAPI void GLAPIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count);
+GLAPI void GLAPIENTRY glDrawBuffer (GLenum mode);
+GLAPI void GLAPIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
+GLAPI void GLAPIENTRY glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void GLAPIENTRY glEdgeFlag (GLboolean flag);
+GLAPI void GLAPIENTRY glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer);
+GLAPI void GLAPIENTRY glEdgeFlagv (const GLboolean *flag);
+GLAPI void GLAPIENTRY glEnable (GLenum cap);
+GLAPI void GLAPIENTRY glEnableClientState (GLenum array);
+GLAPI void GLAPIENTRY glEnd (void);
+GLAPI void GLAPIENTRY glEndList (void);
+GLAPI void GLAPIENTRY glEvalCoord1d (GLdouble u);
+GLAPI void GLAPIENTRY glEvalCoord1dv (const GLdouble *u);
+GLAPI void GLAPIENTRY glEvalCoord1f (GLfloat u);
+GLAPI void GLAPIENTRY glEvalCoord1fv (const GLfloat *u);
+GLAPI void GLAPIENTRY glEvalCoord2d (GLdouble u, GLdouble v);
+GLAPI void GLAPIENTRY glEvalCoord2dv (const GLdouble *u);
+GLAPI void GLAPIENTRY glEvalCoord2f (GLfloat u, GLfloat v);
+GLAPI void GLAPIENTRY glEvalCoord2fv (const GLfloat *u);
+GLAPI void GLAPIENTRY glEvalMesh1 (GLenum mode, GLint i1, GLint i2);
+GLAPI void GLAPIENTRY glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2);
+GLAPI void GLAPIENTRY glEvalPoint1 (GLint i);
+GLAPI void GLAPIENTRY glEvalPoint2 (GLint i, GLint j);
+GLAPI void GLAPIENTRY glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer);
+GLAPI void GLAPIENTRY glFinish (void);
+GLAPI void GLAPIENTRY glFlush (void);
+GLAPI void GLAPIENTRY glFogf (GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glFogfv (GLenum pname, const GLfloat *params);
+GLAPI void GLAPIENTRY glFogi (GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glFogiv (GLenum pname, const GLint *params);
+GLAPI void GLAPIENTRY glFrontFace (GLenum mode);
+GLAPI void GLAPIENTRY glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI GLuint GLAPIENTRY glGenLists (GLsizei range);
+GLAPI void GLAPIENTRY glGenTextures (GLsizei n, GLuint *textures);
+GLAPI void GLAPIENTRY glGetBooleanv (GLenum pname, GLboolean *params);
+GLAPI void GLAPIENTRY glGetClipPlane (GLenum plane, GLdouble *equation);
+GLAPI void GLAPIENTRY glGetDoublev (GLenum pname, GLdouble *params);
+GLAPI GLenum GLAPIENTRY glGetError (void);
+GLAPI void GLAPIENTRY glGetFloatv (GLenum pname, GLfloat *params);
+GLAPI void GLAPIENTRY glGetIntegerv (GLenum pname, GLint *params);
+GLAPI void GLAPIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params);
+GLAPI void GLAPIENTRY glGetLightiv (GLenum light, GLenum pname, GLint *params);
+GLAPI void GLAPIENTRY glGetMapdv (GLenum target, GLenum query, GLdouble *v);
+GLAPI void GLAPIENTRY glGetMapfv (GLenum target, GLenum query, GLfloat *v);
+GLAPI void GLAPIENTRY glGetMapiv (GLenum target, GLenum query, GLint *v);
+GLAPI void GLAPIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params);
+GLAPI void GLAPIENTRY glGetMaterialiv (GLenum face, GLenum pname, GLint *params);
+GLAPI void GLAPIENTRY glGetPixelMapfv (GLenum map, GLfloat *values);
+GLAPI void GLAPIENTRY glGetPixelMapuiv (GLenum map, GLuint *values);
+GLAPI void GLAPIENTRY glGetPixelMapusv (GLenum map, GLushort *values);
+GLAPI void GLAPIENTRY glGetPointerv (GLenum pname, GLvoid* *params);
+GLAPI void GLAPIENTRY glGetPolygonStipple (GLubyte *mask);
+GLAPI const GLubyte * GLAPIENTRY glGetString (GLenum name);
+GLAPI void GLAPIENTRY glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void GLAPIENTRY glGetTexEnviv (GLenum target, GLenum pname, GLint *params);
+GLAPI void GLAPIENTRY glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params);
+GLAPI void GLAPIENTRY glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params);
+GLAPI void GLAPIENTRY glGetTexGeniv (GLenum coord, GLenum pname, GLint *params);
+GLAPI void GLAPIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);
+GLAPI void GLAPIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params);
+GLAPI void GLAPIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params);
+GLAPI void GLAPIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void GLAPIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void GLAPIENTRY glHint (GLenum target, GLenum mode);
+GLAPI void GLAPIENTRY glIndexMask (GLuint mask);
+GLAPI void GLAPIENTRY glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void GLAPIENTRY glIndexd (GLdouble c);
+GLAPI void GLAPIENTRY glIndexdv (const GLdouble *c);
+GLAPI void GLAPIENTRY glIndexf (GLfloat c);
+GLAPI void GLAPIENTRY glIndexfv (const GLfloat *c);
+GLAPI void GLAPIENTRY glIndexi (GLint c);
+GLAPI void GLAPIENTRY glIndexiv (const GLint *c);
+GLAPI void GLAPIENTRY glIndexs (GLshort c);
+GLAPI void GLAPIENTRY glIndexsv (const GLshort *c);
+GLAPI void GLAPIENTRY glIndexub (GLubyte c);
+GLAPI void GLAPIENTRY glIndexubv (const GLubyte *c);
+GLAPI void GLAPIENTRY glInitNames (void);
+GLAPI void GLAPIENTRY glInterleavedArrays (GLenum format, GLsizei stride, const GLvoid *pointer);
+GLAPI GLboolean GLAPIENTRY glIsEnabled (GLenum cap);
+GLAPI GLboolean GLAPIENTRY glIsList (GLuint list);
+GLAPI GLboolean GLAPIENTRY glIsTexture (GLuint texture);
+GLAPI void GLAPIENTRY glLightModelf (GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glLightModelfv (GLenum pname, const GLfloat *params);
+GLAPI void GLAPIENTRY glLightModeli (GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glLightModeliv (GLenum pname, const GLint *params);
+GLAPI void GLAPIENTRY glLightf (GLenum light, GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params);
+GLAPI void GLAPIENTRY glLighti (GLenum light, GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glLightiv (GLenum light, GLenum pname, const GLint *params);
+GLAPI void GLAPIENTRY glLineStipple (GLint factor, GLushort pattern);
+GLAPI void GLAPIENTRY glLineWidth (GLfloat width);
+GLAPI void GLAPIENTRY glListBase (GLuint base);
+GLAPI void GLAPIENTRY glLoadIdentity (void);
+GLAPI void GLAPIENTRY glLoadMatrixd (const GLdouble *m);
+GLAPI void GLAPIENTRY glLoadMatrixf (const GLfloat *m);
+GLAPI void GLAPIENTRY glLoadName (GLuint name);
+GLAPI void GLAPIENTRY glLogicOp (GLenum opcode);
+GLAPI void GLAPIENTRY glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
+GLAPI void GLAPIENTRY glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
+GLAPI void GLAPIENTRY glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
+GLAPI void GLAPIENTRY glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
+GLAPI void GLAPIENTRY glMapGrid1d (GLint un, GLdouble u1, GLdouble u2);
+GLAPI void GLAPIENTRY glMapGrid1f (GLint un, GLfloat u1, GLfloat u2);
+GLAPI void GLAPIENTRY glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2);
+GLAPI void GLAPIENTRY glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2);
+GLAPI void GLAPIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params);
+GLAPI void GLAPIENTRY glMateriali (GLenum face, GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glMaterialiv (GLenum face, GLenum pname, const GLint *params);
+GLAPI void GLAPIENTRY glMatrixMode (GLenum mode);
+GLAPI void GLAPIENTRY glMultMatrixd (const GLdouble *m);
+GLAPI void GLAPIENTRY glMultMatrixf (const GLfloat *m);
+GLAPI void GLAPIENTRY glNewList (GLuint list, GLenum mode);
+GLAPI void GLAPIENTRY glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz);
+GLAPI void GLAPIENTRY glNormal3bv (const GLbyte *v);
+GLAPI void GLAPIENTRY glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz);
+GLAPI void GLAPIENTRY glNormal3dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz);
+GLAPI void GLAPIENTRY glNormal3fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glNormal3i (GLint nx, GLint ny, GLint nz);
+GLAPI void GLAPIENTRY glNormal3iv (const GLint *v);
+GLAPI void GLAPIENTRY glNormal3s (GLshort nx, GLshort ny, GLshort nz);
+GLAPI void GLAPIENTRY glNormal3sv (const GLshort *v);
+GLAPI void GLAPIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void GLAPIENTRY glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI void GLAPIENTRY glPassThrough (GLfloat token);
+GLAPI void GLAPIENTRY glPixelMapfv (GLenum map, GLsizei mapsize, const GLfloat *values);
+GLAPI void GLAPIENTRY glPixelMapuiv (GLenum map, GLsizei mapsize, const GLuint *values);
+GLAPI void GLAPIENTRY glPixelMapusv (GLenum map, GLsizei mapsize, const GLushort *values);
+GLAPI void GLAPIENTRY glPixelStoref (GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glPixelStorei (GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glPixelTransferf (GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glPixelTransferi (GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glPixelZoom (GLfloat xfactor, GLfloat yfactor);
+GLAPI void GLAPIENTRY glPointSize (GLfloat size);
+GLAPI void GLAPIENTRY glPolygonMode (GLenum face, GLenum mode);
+GLAPI void GLAPIENTRY glPolygonOffset (GLfloat factor, GLfloat units);
+GLAPI void GLAPIENTRY glPolygonStipple (const GLubyte *mask);
+GLAPI void GLAPIENTRY glPopAttrib (void);
+GLAPI void GLAPIENTRY glPopClientAttrib (void);
+GLAPI void GLAPIENTRY glPopMatrix (void);
+GLAPI void GLAPIENTRY glPopName (void);
+GLAPI void GLAPIENTRY glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities);
+GLAPI void GLAPIENTRY glPushAttrib (GLbitfield mask);
+GLAPI void GLAPIENTRY glPushClientAttrib (GLbitfield mask);
+GLAPI void GLAPIENTRY glPushMatrix (void);
+GLAPI void GLAPIENTRY glPushName (GLuint name);
+GLAPI void GLAPIENTRY glRasterPos2d (GLdouble x, GLdouble y);
+GLAPI void GLAPIENTRY glRasterPos2dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glRasterPos2f (GLfloat x, GLfloat y);
+GLAPI void GLAPIENTRY glRasterPos2fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glRasterPos2i (GLint x, GLint y);
+GLAPI void GLAPIENTRY glRasterPos2iv (const GLint *v);
+GLAPI void GLAPIENTRY glRasterPos2s (GLshort x, GLshort y);
+GLAPI void GLAPIENTRY glRasterPos2sv (const GLshort *v);
+GLAPI void GLAPIENTRY glRasterPos3d (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void GLAPIENTRY glRasterPos3dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glRasterPos3f (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void GLAPIENTRY glRasterPos3fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glRasterPos3i (GLint x, GLint y, GLint z);
+GLAPI void GLAPIENTRY glRasterPos3iv (const GLint *v);
+GLAPI void GLAPIENTRY glRasterPos3s (GLshort x, GLshort y, GLshort z);
+GLAPI void GLAPIENTRY glRasterPos3sv (const GLshort *v);
+GLAPI void GLAPIENTRY glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void GLAPIENTRY glRasterPos4dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void GLAPIENTRY glRasterPos4fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glRasterPos4i (GLint x, GLint y, GLint z, GLint w);
+GLAPI void GLAPIENTRY glRasterPos4iv (const GLint *v);
+GLAPI void GLAPIENTRY glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void GLAPIENTRY glRasterPos4sv (const GLshort *v);
+GLAPI void GLAPIENTRY glReadBuffer (GLenum mode);
+GLAPI void GLAPIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
+GLAPI void GLAPIENTRY glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
+GLAPI void GLAPIENTRY glRectdv (const GLdouble *v1, const GLdouble *v2);
+GLAPI void GLAPIENTRY glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
+GLAPI void GLAPIENTRY glRectfv (const GLfloat *v1, const GLfloat *v2);
+GLAPI void GLAPIENTRY glRecti (GLint x1, GLint y1, GLint x2, GLint y2);
+GLAPI void GLAPIENTRY glRectiv (const GLint *v1, const GLint *v2);
+GLAPI void GLAPIENTRY glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2);
+GLAPI void GLAPIENTRY glRectsv (const GLshort *v1, const GLshort *v2);
+GLAPI GLint GLAPIENTRY glRenderMode (GLenum mode);
+GLAPI void GLAPIENTRY glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void GLAPIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void GLAPIENTRY glScaled (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void GLAPIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void GLAPIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void GLAPIENTRY glSelectBuffer (GLsizei size, GLuint *buffer);
+GLAPI void GLAPIENTRY glShadeModel (GLenum mode);
+GLAPI void GLAPIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
+GLAPI void GLAPIENTRY glStencilMask (GLuint mask);
+GLAPI void GLAPIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
+GLAPI void GLAPIENTRY glTexCoord1d (GLdouble s);
+GLAPI void GLAPIENTRY glTexCoord1dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glTexCoord1f (GLfloat s);
+GLAPI void GLAPIENTRY glTexCoord1fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glTexCoord1i (GLint s);
+GLAPI void GLAPIENTRY glTexCoord1iv (const GLint *v);
+GLAPI void GLAPIENTRY glTexCoord1s (GLshort s);
+GLAPI void GLAPIENTRY glTexCoord1sv (const GLshort *v);
+GLAPI void GLAPIENTRY glTexCoord2d (GLdouble s, GLdouble t);
+GLAPI void GLAPIENTRY glTexCoord2dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glTexCoord2f (GLfloat s, GLfloat t);
+GLAPI void GLAPIENTRY glTexCoord2fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glTexCoord2i (GLint s, GLint t);
+GLAPI void GLAPIENTRY glTexCoord2iv (const GLint *v);
+GLAPI void GLAPIENTRY glTexCoord2s (GLshort s, GLshort t);
+GLAPI void GLAPIENTRY glTexCoord2sv (const GLshort *v);
+GLAPI void GLAPIENTRY glTexCoord3d (GLdouble s, GLdouble t, GLdouble r);
+GLAPI void GLAPIENTRY glTexCoord3dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glTexCoord3f (GLfloat s, GLfloat t, GLfloat r);
+GLAPI void GLAPIENTRY glTexCoord3fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glTexCoord3i (GLint s, GLint t, GLint r);
+GLAPI void GLAPIENTRY glTexCoord3iv (const GLint *v);
+GLAPI void GLAPIENTRY glTexCoord3s (GLshort s, GLshort t, GLshort r);
+GLAPI void GLAPIENTRY glTexCoord3sv (const GLshort *v);
+GLAPI void GLAPIENTRY glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+GLAPI void GLAPIENTRY glTexCoord4dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+GLAPI void GLAPIENTRY glTexCoord4fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glTexCoord4i (GLint s, GLint t, GLint r, GLint q);
+GLAPI void GLAPIENTRY glTexCoord4iv (const GLint *v);
+GLAPI void GLAPIENTRY glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q);
+GLAPI void GLAPIENTRY glTexCoord4sv (const GLshort *v);
+GLAPI void GLAPIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void GLAPIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void GLAPIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void GLAPIENTRY glTexGend (GLenum coord, GLenum pname, GLdouble param);
+GLAPI void GLAPIENTRY glTexGendv (GLenum coord, GLenum pname, const GLdouble *params);
+GLAPI void GLAPIENTRY glTexGenf (GLenum coord, GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params);
+GLAPI void GLAPIENTRY glTexGeni (GLenum coord, GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glTexGeniv (GLenum coord, GLenum pname, const GLint *params);
+GLAPI void GLAPIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void GLAPIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void GLAPIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
+GLAPI void GLAPIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void GLAPIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
+GLAPI void GLAPIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void GLAPIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void GLAPIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void GLAPIENTRY glTranslated (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void GLAPIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void GLAPIENTRY glVertex2d (GLdouble x, GLdouble y);
+GLAPI void GLAPIENTRY glVertex2dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glVertex2f (GLfloat x, GLfloat y);
+GLAPI void GLAPIENTRY glVertex2fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glVertex2i (GLint x, GLint y);
+GLAPI void GLAPIENTRY glVertex2iv (const GLint *v);
+GLAPI void GLAPIENTRY glVertex2s (GLshort x, GLshort y);
+GLAPI void GLAPIENTRY glVertex2sv (const GLshort *v);
+GLAPI void GLAPIENTRY glVertex3d (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void GLAPIENTRY glVertex3dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glVertex3f (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void GLAPIENTRY glVertex3fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glVertex3i (GLint x, GLint y, GLint z);
+GLAPI void GLAPIENTRY glVertex3iv (const GLint *v);
+GLAPI void GLAPIENTRY glVertex3s (GLshort x, GLshort y, GLshort z);
+GLAPI void GLAPIENTRY glVertex3sv (const GLshort *v);
+GLAPI void GLAPIENTRY glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void GLAPIENTRY glVertex4dv (const GLdouble *v);
+GLAPI void GLAPIENTRY glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void GLAPIENTRY glVertex4fv (const GLfloat *v);
+GLAPI void GLAPIENTRY glVertex4i (GLint x, GLint y, GLint z, GLint w);
+GLAPI void GLAPIENTRY glVertex4iv (const GLint *v);
+GLAPI void GLAPIENTRY glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void GLAPIENTRY glVertex4sv (const GLshort *v);
+GLAPI void GLAPIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+GLAPI void GLAPIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
+
+#define GLEW_VERSION_1_1 GLEW_GET_VAR(__GLEW_VERSION_1_1)
+
+#endif /* GL_VERSION_1_1 */
+
+/* ---------------------------------- GLU ---------------------------------- */
+
+#ifndef GLEW_NO_GLU
+/* this is where we can safely include GLU */
+# if defined(__APPLE__) && defined(__MACH__)
+# include <OpenGL/glu.h>
+# else
+# include <GL/glu.h>
+# endif
+#endif
+
+/* ----------------------------- GL_VERSION_1_2 ---------------------------- */
+
+#ifndef GL_VERSION_1_2
+#define GL_VERSION_1_2 1
+
+#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_UNSIGNED_BYTE_3_3_2 0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_INT_8_8_8_8 0x8035
+#define GL_UNSIGNED_INT_10_10_10_2 0x8036
+#define GL_RESCALE_NORMAL 0x803A
+#define GL_TEXTURE_BINDING_3D 0x806A
+#define GL_PACK_SKIP_IMAGES 0x806B
+#define GL_PACK_IMAGE_HEIGHT 0x806C
+#define GL_UNPACK_SKIP_IMAGES 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT 0x806E
+#define GL_TEXTURE_3D 0x806F
+#define GL_PROXY_TEXTURE_3D 0x8070
+#define GL_TEXTURE_DEPTH 0x8071
+#define GL_TEXTURE_WRAP_R 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE 0x8073
+#define GL_BGR 0x80E0
+#define GL_BGRA 0x80E1
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_TEXTURE_MIN_LOD 0x813A
+#define GL_TEXTURE_MAX_LOD 0x813B
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8
+#define GL_SINGLE_COLOR 0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR 0x81FA
+#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
+#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+
+typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+
+#define glCopyTexSubImage3D GLEW_GET_FUN(__glewCopyTexSubImage3D)
+#define glDrawRangeElements GLEW_GET_FUN(__glewDrawRangeElements)
+#define glTexImage3D GLEW_GET_FUN(__glewTexImage3D)
+#define glTexSubImage3D GLEW_GET_FUN(__glewTexSubImage3D)
+
+#define GLEW_VERSION_1_2 GLEW_GET_VAR(__GLEW_VERSION_1_2)
+
+#endif /* GL_VERSION_1_2 */
+
+/* ---------------------------- GL_VERSION_1_2_1 --------------------------- */
+
+#ifndef GL_VERSION_1_2_1
+#define GL_VERSION_1_2_1 1
+
+#define GLEW_VERSION_1_2_1 GLEW_GET_VAR(__GLEW_VERSION_1_2_1)
+
+#endif /* GL_VERSION_1_2_1 */
+
+/* ----------------------------- GL_VERSION_1_3 ---------------------------- */
+
+#ifndef GL_VERSION_1_3
+#define GL_VERSION_1_3 1
+
+#define GL_MULTISAMPLE 0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE 0x809F
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_CLAMP_TO_BORDER 0x812D
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1
+#define GL_MAX_TEXTURE_UNITS 0x84E2
+#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6
+#define GL_SUBTRACT 0x84E7
+#define GL_COMPRESSED_ALPHA 0x84E9
+#define GL_COMPRESSED_LUMINANCE 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB
+#define GL_COMPRESSED_INTENSITY 0x84EC
+#define GL_COMPRESSED_RGB 0x84ED
+#define GL_COMPRESSED_RGBA 0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT 0x84EF
+#define GL_NORMAL_MAP 0x8511
+#define GL_REFLECTION_MAP 0x8512
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+#define GL_COMBINE 0x8570
+#define GL_COMBINE_RGB 0x8571
+#define GL_COMBINE_ALPHA 0x8572
+#define GL_RGB_SCALE 0x8573
+#define GL_ADD_SIGNED 0x8574
+#define GL_INTERPOLATE 0x8575
+#define GL_CONSTANT 0x8576
+#define GL_PRIMARY_COLOR 0x8577
+#define GL_PREVIOUS 0x8578
+#define GL_SOURCE0_RGB 0x8580
+#define GL_SOURCE1_RGB 0x8581
+#define GL_SOURCE2_RGB 0x8582
+#define GL_SOURCE0_ALPHA 0x8588
+#define GL_SOURCE1_ALPHA 0x8589
+#define GL_SOURCE2_ALPHA 0x858A
+#define GL_OPERAND0_RGB 0x8590
+#define GL_OPERAND1_RGB 0x8591
+#define GL_OPERAND2_RGB 0x8592
+#define GL_OPERAND0_ALPHA 0x8598
+#define GL_OPERAND1_ALPHA 0x8599
+#define GL_OPERAND2_ALPHA 0x859A
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0
+#define GL_TEXTURE_COMPRESSED 0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+#define GL_DOT3_RGB 0x86AE
+#define GL_DOT3_RGBA 0x86AF
+#define GL_MULTISAMPLE_BIT 0x20000000
+
+typedef void (GLAPIENTRY * PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (GLAPIENTRY * PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLvoid *img);
+typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble m[16]);
+typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat m[16]);
+typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble m[16]);
+typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat m[16]);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert);
+
+#define glActiveTexture GLEW_GET_FUN(__glewActiveTexture)
+#define glClientActiveTexture GLEW_GET_FUN(__glewClientActiveTexture)
+#define glCompressedTexImage1D GLEW_GET_FUN(__glewCompressedTexImage1D)
+#define glCompressedTexImage2D GLEW_GET_FUN(__glewCompressedTexImage2D)
+#define glCompressedTexImage3D GLEW_GET_FUN(__glewCompressedTexImage3D)
+#define glCompressedTexSubImage1D GLEW_GET_FUN(__glewCompressedTexSubImage1D)
+#define glCompressedTexSubImage2D GLEW_GET_FUN(__glewCompressedTexSubImage2D)
+#define glCompressedTexSubImage3D GLEW_GET_FUN(__glewCompressedTexSubImage3D)
+#define glGetCompressedTexImage GLEW_GET_FUN(__glewGetCompressedTexImage)
+#define glLoadTransposeMatrixd GLEW_GET_FUN(__glewLoadTransposeMatrixd)
+#define glLoadTransposeMatrixf GLEW_GET_FUN(__glewLoadTransposeMatrixf)
+#define glMultTransposeMatrixd GLEW_GET_FUN(__glewMultTransposeMatrixd)
+#define glMultTransposeMatrixf GLEW_GET_FUN(__glewMultTransposeMatrixf)
+#define glMultiTexCoord1d GLEW_GET_FUN(__glewMultiTexCoord1d)
+#define glMultiTexCoord1dv GLEW_GET_FUN(__glewMultiTexCoord1dv)
+#define glMultiTexCoord1f GLEW_GET_FUN(__glewMultiTexCoord1f)
+#define glMultiTexCoord1fv GLEW_GET_FUN(__glewMultiTexCoord1fv)
+#define glMultiTexCoord1i GLEW_GET_FUN(__glewMultiTexCoord1i)
+#define glMultiTexCoord1iv GLEW_GET_FUN(__glewMultiTexCoord1iv)
+#define glMultiTexCoord1s GLEW_GET_FUN(__glewMultiTexCoord1s)
+#define glMultiTexCoord1sv GLEW_GET_FUN(__glewMultiTexCoord1sv)
+#define glMultiTexCoord2d GLEW_GET_FUN(__glewMultiTexCoord2d)
+#define glMultiTexCoord2dv GLEW_GET_FUN(__glewMultiTexCoord2dv)
+#define glMultiTexCoord2f GLEW_GET_FUN(__glewMultiTexCoord2f)
+#define glMultiTexCoord2fv GLEW_GET_FUN(__glewMultiTexCoord2fv)
+#define glMultiTexCoord2i GLEW_GET_FUN(__glewMultiTexCoord2i)
+#define glMultiTexCoord2iv GLEW_GET_FUN(__glewMultiTexCoord2iv)
+#define glMultiTexCoord2s GLEW_GET_FUN(__glewMultiTexCoord2s)
+#define glMultiTexCoord2sv GLEW_GET_FUN(__glewMultiTexCoord2sv)
+#define glMultiTexCoord3d GLEW_GET_FUN(__glewMultiTexCoord3d)
+#define glMultiTexCoord3dv GLEW_GET_FUN(__glewMultiTexCoord3dv)
+#define glMultiTexCoord3f GLEW_GET_FUN(__glewMultiTexCoord3f)
+#define glMultiTexCoord3fv GLEW_GET_FUN(__glewMultiTexCoord3fv)
+#define glMultiTexCoord3i GLEW_GET_FUN(__glewMultiTexCoord3i)
+#define glMultiTexCoord3iv GLEW_GET_FUN(__glewMultiTexCoord3iv)
+#define glMultiTexCoord3s GLEW_GET_FUN(__glewMultiTexCoord3s)
+#define glMultiTexCoord3sv GLEW_GET_FUN(__glewMultiTexCoord3sv)
+#define glMultiTexCoord4d GLEW_GET_FUN(__glewMultiTexCoord4d)
+#define glMultiTexCoord4dv GLEW_GET_FUN(__glewMultiTexCoord4dv)
+#define glMultiTexCoord4f GLEW_GET_FUN(__glewMultiTexCoord4f)
+#define glMultiTexCoord4fv GLEW_GET_FUN(__glewMultiTexCoord4fv)
+#define glMultiTexCoord4i GLEW_GET_FUN(__glewMultiTexCoord4i)
+#define glMultiTexCoord4iv GLEW_GET_FUN(__glewMultiTexCoord4iv)
+#define glMultiTexCoord4s GLEW_GET_FUN(__glewMultiTexCoord4s)
+#define glMultiTexCoord4sv GLEW_GET_FUN(__glewMultiTexCoord4sv)
+#define glSampleCoverage GLEW_GET_FUN(__glewSampleCoverage)
+
+#define GLEW_VERSION_1_3 GLEW_GET_VAR(__GLEW_VERSION_1_3)
+
+#endif /* GL_VERSION_1_3 */
+
+/* ----------------------------- GL_VERSION_1_4 ---------------------------- */
+
+#ifndef GL_VERSION_1_4
+#define GL_VERSION_1_4 1
+
+#define GL_BLEND_DST_RGB 0x80C8
+#define GL_BLEND_SRC_RGB 0x80C9
+#define GL_BLEND_DST_ALPHA 0x80CA
+#define GL_BLEND_SRC_ALPHA 0x80CB
+#define GL_POINT_SIZE_MIN 0x8126
+#define GL_POINT_SIZE_MAX 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128
+#define GL_POINT_DISTANCE_ATTENUATION 0x8129
+#define GL_GENERATE_MIPMAP 0x8191
+#define GL_GENERATE_MIPMAP_HINT 0x8192
+#define GL_DEPTH_COMPONENT16 0x81A5
+#define GL_DEPTH_COMPONENT24 0x81A6
+#define GL_DEPTH_COMPONENT32 0x81A7
+#define GL_MIRRORED_REPEAT 0x8370
+#define GL_FOG_COORDINATE_SOURCE 0x8450
+#define GL_FOG_COORDINATE 0x8451
+#define GL_FRAGMENT_DEPTH 0x8452
+#define GL_CURRENT_FOG_COORDINATE 0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456
+#define GL_FOG_COORDINATE_ARRAY 0x8457
+#define GL_COLOR_SUM 0x8458
+#define GL_CURRENT_SECONDARY_COLOR 0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D
+#define GL_SECONDARY_COLOR_ARRAY 0x845E
+#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
+#define GL_TEXTURE_FILTER_CONTROL 0x8500
+#define GL_TEXTURE_LOD_BIAS 0x8501
+#define GL_INCR_WRAP 0x8507
+#define GL_DECR_WRAP 0x8508
+#define GL_TEXTURE_DEPTH_SIZE 0x884A
+#define GL_DEPTH_TEXTURE_MODE 0x884B
+#define GL_TEXTURE_COMPARE_MODE 0x884C
+#define GL_TEXTURE_COMPARE_FUNC 0x884D
+#define GL_COMPARE_R_TO_TEXTURE 0x884E
+
+typedef void (GLAPIENTRY * PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDDPROC) (GLdouble coord);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDDVPROC) (const GLdouble *coord);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDFPROC) (GLfloat coord);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDFVPROC) (const GLfloat *coord);
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount);
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVPROC) (const GLdouble *p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVPROC) (const GLfloat *p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IPROC) (GLint x, GLint y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVPROC) (const GLint *p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVPROC) (const GLshort *p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVPROC) (const GLdouble *p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVPROC) (const GLfloat *p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVPROC) (const GLint *p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVPROC) (const GLshort *p);
+
+#define glBlendColor GLEW_GET_FUN(__glewBlendColor)
+#define glBlendEquation GLEW_GET_FUN(__glewBlendEquation)
+#define glBlendFuncSeparate GLEW_GET_FUN(__glewBlendFuncSeparate)
+#define glFogCoordPointer GLEW_GET_FUN(__glewFogCoordPointer)
+#define glFogCoordd GLEW_GET_FUN(__glewFogCoordd)
+#define glFogCoorddv GLEW_GET_FUN(__glewFogCoorddv)
+#define glFogCoordf GLEW_GET_FUN(__glewFogCoordf)
+#define glFogCoordfv GLEW_GET_FUN(__glewFogCoordfv)
+#define glMultiDrawArrays GLEW_GET_FUN(__glewMultiDrawArrays)
+#define glMultiDrawElements GLEW_GET_FUN(__glewMultiDrawElements)
+#define glPointParameterf GLEW_GET_FUN(__glewPointParameterf)
+#define glPointParameterfv GLEW_GET_FUN(__glewPointParameterfv)
+#define glPointParameteri GLEW_GET_FUN(__glewPointParameteri)
+#define glPointParameteriv GLEW_GET_FUN(__glewPointParameteriv)
+#define glSecondaryColor3b GLEW_GET_FUN(__glewSecondaryColor3b)
+#define glSecondaryColor3bv GLEW_GET_FUN(__glewSecondaryColor3bv)
+#define glSecondaryColor3d GLEW_GET_FUN(__glewSecondaryColor3d)
+#define glSecondaryColor3dv GLEW_GET_FUN(__glewSecondaryColor3dv)
+#define glSecondaryColor3f GLEW_GET_FUN(__glewSecondaryColor3f)
+#define glSecondaryColor3fv GLEW_GET_FUN(__glewSecondaryColor3fv)
+#define glSecondaryColor3i GLEW_GET_FUN(__glewSecondaryColor3i)
+#define glSecondaryColor3iv GLEW_GET_FUN(__glewSecondaryColor3iv)
+#define glSecondaryColor3s GLEW_GET_FUN(__glewSecondaryColor3s)
+#define glSecondaryColor3sv GLEW_GET_FUN(__glewSecondaryColor3sv)
+#define glSecondaryColor3ub GLEW_GET_FUN(__glewSecondaryColor3ub)
+#define glSecondaryColor3ubv GLEW_GET_FUN(__glewSecondaryColor3ubv)
+#define glSecondaryColor3ui GLEW_GET_FUN(__glewSecondaryColor3ui)
+#define glSecondaryColor3uiv GLEW_GET_FUN(__glewSecondaryColor3uiv)
+#define glSecondaryColor3us GLEW_GET_FUN(__glewSecondaryColor3us)
+#define glSecondaryColor3usv GLEW_GET_FUN(__glewSecondaryColor3usv)
+#define glSecondaryColorPointer GLEW_GET_FUN(__glewSecondaryColorPointer)
+#define glWindowPos2d GLEW_GET_FUN(__glewWindowPos2d)
+#define glWindowPos2dv GLEW_GET_FUN(__glewWindowPos2dv)
+#define glWindowPos2f GLEW_GET_FUN(__glewWindowPos2f)
+#define glWindowPos2fv GLEW_GET_FUN(__glewWindowPos2fv)
+#define glWindowPos2i GLEW_GET_FUN(__glewWindowPos2i)
+#define glWindowPos2iv GLEW_GET_FUN(__glewWindowPos2iv)
+#define glWindowPos2s GLEW_GET_FUN(__glewWindowPos2s)
+#define glWindowPos2sv GLEW_GET_FUN(__glewWindowPos2sv)
+#define glWindowPos3d GLEW_GET_FUN(__glewWindowPos3d)
+#define glWindowPos3dv GLEW_GET_FUN(__glewWindowPos3dv)
+#define glWindowPos3f GLEW_GET_FUN(__glewWindowPos3f)
+#define glWindowPos3fv GLEW_GET_FUN(__glewWindowPos3fv)
+#define glWindowPos3i GLEW_GET_FUN(__glewWindowPos3i)
+#define glWindowPos3iv GLEW_GET_FUN(__glewWindowPos3iv)
+#define glWindowPos3s GLEW_GET_FUN(__glewWindowPos3s)
+#define glWindowPos3sv GLEW_GET_FUN(__glewWindowPos3sv)
+
+#define GLEW_VERSION_1_4 GLEW_GET_VAR(__GLEW_VERSION_1_4)
+
+#endif /* GL_VERSION_1_4 */
+
+/* ----------------------------- GL_VERSION_1_5 ---------------------------- */
+
+#ifndef GL_VERSION_1_5
+#define GL_VERSION_1_5 1
+
+#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE
+#define GL_FOG_COORD GL_FOG_COORDINATE
+#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY
+#define GL_SRC0_RGB GL_SOURCE0_RGB
+#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER
+#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE
+#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA
+#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE
+#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE
+#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA
+#define GL_SRC1_RGB GL_SOURCE1_RGB
+#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA
+#define GL_SRC2_RGB GL_SOURCE2_RGB
+#define GL_BUFFER_SIZE 0x8764
+#define GL_BUFFER_USAGE 0x8765
+#define GL_QUERY_COUNTER_BITS 0x8864
+#define GL_CURRENT_QUERY 0x8865
+#define GL_QUERY_RESULT 0x8866
+#define GL_QUERY_RESULT_AVAILABLE 0x8867
+#define GL_ARRAY_BUFFER 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER 0x8893
+#define GL_ARRAY_BUFFER_BINDING 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
+#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
+#define GL_READ_ONLY 0x88B8
+#define GL_WRITE_ONLY 0x88B9
+#define GL_READ_WRITE 0x88BA
+#define GL_BUFFER_ACCESS 0x88BB
+#define GL_BUFFER_MAPPED 0x88BC
+#define GL_BUFFER_MAP_POINTER 0x88BD
+#define GL_STREAM_DRAW 0x88E0
+#define GL_STREAM_READ 0x88E1
+#define GL_STREAM_COPY 0x88E2
+#define GL_STATIC_DRAW 0x88E4
+#define GL_STATIC_READ 0x88E5
+#define GL_STATIC_COPY 0x88E6
+#define GL_DYNAMIC_DRAW 0x88E8
+#define GL_DYNAMIC_READ 0x88E9
+#define GL_DYNAMIC_COPY 0x88EA
+#define GL_SAMPLES_PASSED 0x8914
+
+typedef ptrdiff_t GLintptr;
+typedef ptrdiff_t GLsizeiptr;
+
+typedef void (GLAPIENTRY * PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
+typedef void (GLAPIENTRY * PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
+typedef void (GLAPIENTRY * PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
+typedef void (GLAPIENTRY * PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint* buffers);
+typedef void (GLAPIENTRY * PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLENDQUERYPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLGENBUFFERSPROC) (GLsizei n, GLuint* buffers);
+typedef void (GLAPIENTRY * PFNGLGENQUERIESPROC) (GLsizei n, GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid** params);
+typedef void (GLAPIENTRY * PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data);
+typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint* params);
+typedef void (GLAPIENTRY * PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERPROC) (GLuint buffer);
+typedef GLboolean (GLAPIENTRY * PFNGLISQUERYPROC) (GLuint id);
+typedef GLvoid* (GLAPIENTRY * PFNGLMAPBUFFERPROC) (GLenum target, GLenum access);
+typedef GLboolean (GLAPIENTRY * PFNGLUNMAPBUFFERPROC) (GLenum target);
+
+#define glBeginQuery GLEW_GET_FUN(__glewBeginQuery)
+#define glBindBuffer GLEW_GET_FUN(__glewBindBuffer)
+#define glBufferData GLEW_GET_FUN(__glewBufferData)
+#define glBufferSubData GLEW_GET_FUN(__glewBufferSubData)
+#define glDeleteBuffers GLEW_GET_FUN(__glewDeleteBuffers)
+#define glDeleteQueries GLEW_GET_FUN(__glewDeleteQueries)
+#define glEndQuery GLEW_GET_FUN(__glewEndQuery)
+#define glGenBuffers GLEW_GET_FUN(__glewGenBuffers)
+#define glGenQueries GLEW_GET_FUN(__glewGenQueries)
+#define glGetBufferParameteriv GLEW_GET_FUN(__glewGetBufferParameteriv)
+#define glGetBufferPointerv GLEW_GET_FUN(__glewGetBufferPointerv)
+#define glGetBufferSubData GLEW_GET_FUN(__glewGetBufferSubData)
+#define glGetQueryObjectiv GLEW_GET_FUN(__glewGetQueryObjectiv)
+#define glGetQueryObjectuiv GLEW_GET_FUN(__glewGetQueryObjectuiv)
+#define glGetQueryiv GLEW_GET_FUN(__glewGetQueryiv)
+#define glIsBuffer GLEW_GET_FUN(__glewIsBuffer)
+#define glIsQuery GLEW_GET_FUN(__glewIsQuery)
+#define glMapBuffer GLEW_GET_FUN(__glewMapBuffer)
+#define glUnmapBuffer GLEW_GET_FUN(__glewUnmapBuffer)
+
+#define GLEW_VERSION_1_5 GLEW_GET_VAR(__GLEW_VERSION_1_5)
+
+#endif /* GL_VERSION_1_5 */
+
+/* ----------------------------- GL_VERSION_2_0 ---------------------------- */
+
+#ifndef GL_VERSION_2_0
+#define GL_VERSION_2_0 1
+
+#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
+#define GL_CURRENT_VERTEX_ATTRIB 0x8626
+#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
+#define GL_STENCIL_BACK_FUNC 0x8800
+#define GL_STENCIL_BACK_FAIL 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
+#define GL_MAX_DRAW_BUFFERS 0x8824
+#define GL_DRAW_BUFFER0 0x8825
+#define GL_DRAW_BUFFER1 0x8826
+#define GL_DRAW_BUFFER2 0x8827
+#define GL_DRAW_BUFFER3 0x8828
+#define GL_DRAW_BUFFER4 0x8829
+#define GL_DRAW_BUFFER5 0x882A
+#define GL_DRAW_BUFFER6 0x882B
+#define GL_DRAW_BUFFER7 0x882C
+#define GL_DRAW_BUFFER8 0x882D
+#define GL_DRAW_BUFFER9 0x882E
+#define GL_DRAW_BUFFER10 0x882F
+#define GL_DRAW_BUFFER11 0x8830
+#define GL_DRAW_BUFFER12 0x8831
+#define GL_DRAW_BUFFER13 0x8832
+#define GL_DRAW_BUFFER14 0x8833
+#define GL_DRAW_BUFFER15 0x8834
+#define GL_BLEND_EQUATION_ALPHA 0x883D
+#define GL_POINT_SPRITE 0x8861
+#define GL_COORD_REPLACE 0x8862
+#define GL_MAX_VERTEX_ATTRIBS 0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
+#define GL_MAX_TEXTURE_COORDS 0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
+#define GL_FRAGMENT_SHADER 0x8B30
+#define GL_VERTEX_SHADER 0x8B31
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
+#define GL_MAX_VARYING_FLOATS 0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
+#define GL_SHADER_TYPE 0x8B4F
+#define GL_FLOAT_VEC2 0x8B50
+#define GL_FLOAT_VEC3 0x8B51
+#define GL_FLOAT_VEC4 0x8B52
+#define GL_INT_VEC2 0x8B53
+#define GL_INT_VEC3 0x8B54
+#define GL_INT_VEC4 0x8B55
+#define GL_BOOL 0x8B56
+#define GL_BOOL_VEC2 0x8B57
+#define GL_BOOL_VEC3 0x8B58
+#define GL_BOOL_VEC4 0x8B59
+#define GL_FLOAT_MAT2 0x8B5A
+#define GL_FLOAT_MAT3 0x8B5B
+#define GL_FLOAT_MAT4 0x8B5C
+#define GL_SAMPLER_1D 0x8B5D
+#define GL_SAMPLER_2D 0x8B5E
+#define GL_SAMPLER_3D 0x8B5F
+#define GL_SAMPLER_CUBE 0x8B60
+#define GL_SAMPLER_1D_SHADOW 0x8B61
+#define GL_SAMPLER_2D_SHADOW 0x8B62
+#define GL_DELETE_STATUS 0x8B80
+#define GL_COMPILE_STATUS 0x8B81
+#define GL_LINK_STATUS 0x8B82
+#define GL_VALIDATE_STATUS 0x8B83
+#define GL_INFO_LOG_LENGTH 0x8B84
+#define GL_ATTACHED_SHADERS 0x8B85
+#define GL_ACTIVE_UNIFORMS 0x8B86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
+#define GL_SHADER_SOURCE_LENGTH 0x8B88
+#define GL_ACTIVE_ATTRIBUTES 0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
+#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
+#define GL_CURRENT_PROGRAM 0x8B8D
+#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0
+#define GL_LOWER_LEFT 0x8CA1
+#define GL_UPPER_LEFT 0x8CA2
+#define GL_STENCIL_BACK_REF 0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
+
+typedef void (GLAPIENTRY * PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GLAPIENTRY * PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar* name);
+typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum, GLenum);
+typedef void (GLAPIENTRY * PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef GLuint (GLAPIENTRY * PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (GLAPIENTRY * PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (GLAPIENTRY * PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (GLAPIENTRY * PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint);
+typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum* bufs);
+typedef void (GLAPIENTRY * PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint);
+typedef void (GLAPIENTRY * PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
+typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
+typedef void (GLAPIENTRY * PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei* count, GLuint* shaders);
+typedef GLint (GLAPIENTRY * PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar* name);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint* param);
+typedef void (GLAPIENTRY * PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog);
+typedef void (GLAPIENTRY * PFNGLGETSHADERSOURCEPROC) (GLuint obj, GLsizei maxLength, GLsizei* length, GLchar* source);
+typedef void (GLAPIENTRY * PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint* param);
+typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar* name);
+typedef void (GLAPIENTRY * PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint, GLenum, GLvoid**);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVPROC) (GLuint, GLenum, GLdouble*);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVPROC) (GLuint, GLenum, GLfloat*);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVPROC) (GLuint, GLenum, GLint*);
+typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (GLAPIENTRY * PFNGLISSHADERPROC) (GLuint shader);
+typedef void (GLAPIENTRY * PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (GLAPIENTRY * PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar** strings, const GLint* lengths);
+typedef void (GLAPIENTRY * PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+typedef void (GLAPIENTRY * PFNGLSTENCILMASKSEPARATEPROC) (GLenum, GLuint);
+typedef void (GLAPIENTRY * PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (GLAPIENTRY * PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer);
+
+#define glAttachShader GLEW_GET_FUN(__glewAttachShader)
+#define glBindAttribLocation GLEW_GET_FUN(__glewBindAttribLocation)
+#define glBlendEquationSeparate GLEW_GET_FUN(__glewBlendEquationSeparate)
+#define glCompileShader GLEW_GET_FUN(__glewCompileShader)
+#define glCreateProgram GLEW_GET_FUN(__glewCreateProgram)
+#define glCreateShader GLEW_GET_FUN(__glewCreateShader)
+#define glDeleteProgram GLEW_GET_FUN(__glewDeleteProgram)
+#define glDeleteShader GLEW_GET_FUN(__glewDeleteShader)
+#define glDetachShader GLEW_GET_FUN(__glewDetachShader)
+#define glDisableVertexAttribArray GLEW_GET_FUN(__glewDisableVertexAttribArray)
+#define glDrawBuffers GLEW_GET_FUN(__glewDrawBuffers)
+#define glEnableVertexAttribArray GLEW_GET_FUN(__glewEnableVertexAttribArray)
+#define glGetActiveAttrib GLEW_GET_FUN(__glewGetActiveAttrib)
+#define glGetActiveUniform GLEW_GET_FUN(__glewGetActiveUniform)
+#define glGetAttachedShaders GLEW_GET_FUN(__glewGetAttachedShaders)
+#define glGetAttribLocation GLEW_GET_FUN(__glewGetAttribLocation)
+#define glGetProgramInfoLog GLEW_GET_FUN(__glewGetProgramInfoLog)
+#define glGetProgramiv GLEW_GET_FUN(__glewGetProgramiv)
+#define glGetShaderInfoLog GLEW_GET_FUN(__glewGetShaderInfoLog)
+#define glGetShaderSource GLEW_GET_FUN(__glewGetShaderSource)
+#define glGetShaderiv GLEW_GET_FUN(__glewGetShaderiv)
+#define glGetUniformLocation GLEW_GET_FUN(__glewGetUniformLocation)
+#define glGetUniformfv GLEW_GET_FUN(__glewGetUniformfv)
+#define glGetUniformiv GLEW_GET_FUN(__glewGetUniformiv)
+#define glGetVertexAttribPointerv GLEW_GET_FUN(__glewGetVertexAttribPointerv)
+#define glGetVertexAttribdv GLEW_GET_FUN(__glewGetVertexAttribdv)
+#define glGetVertexAttribfv GLEW_GET_FUN(__glewGetVertexAttribfv)
+#define glGetVertexAttribiv GLEW_GET_FUN(__glewGetVertexAttribiv)
+#define glIsProgram GLEW_GET_FUN(__glewIsProgram)
+#define glIsShader GLEW_GET_FUN(__glewIsShader)
+#define glLinkProgram GLEW_GET_FUN(__glewLinkProgram)
+#define glShaderSource GLEW_GET_FUN(__glewShaderSource)
+#define glStencilFuncSeparate GLEW_GET_FUN(__glewStencilFuncSeparate)
+#define glStencilMaskSeparate GLEW_GET_FUN(__glewStencilMaskSeparate)
+#define glStencilOpSeparate GLEW_GET_FUN(__glewStencilOpSeparate)
+#define glUniform1f GLEW_GET_FUN(__glewUniform1f)
+#define glUniform1fv GLEW_GET_FUN(__glewUniform1fv)
+#define glUniform1i GLEW_GET_FUN(__glewUniform1i)
+#define glUniform1iv GLEW_GET_FUN(__glewUniform1iv)
+#define glUniform2f GLEW_GET_FUN(__glewUniform2f)
+#define glUniform2fv GLEW_GET_FUN(__glewUniform2fv)
+#define glUniform2i GLEW_GET_FUN(__glewUniform2i)
+#define glUniform2iv GLEW_GET_FUN(__glewUniform2iv)
+#define glUniform3f GLEW_GET_FUN(__glewUniform3f)
+#define glUniform3fv GLEW_GET_FUN(__glewUniform3fv)
+#define glUniform3i GLEW_GET_FUN(__glewUniform3i)
+#define glUniform3iv GLEW_GET_FUN(__glewUniform3iv)
+#define glUniform4f GLEW_GET_FUN(__glewUniform4f)
+#define glUniform4fv GLEW_GET_FUN(__glewUniform4fv)
+#define glUniform4i GLEW_GET_FUN(__glewUniform4i)
+#define glUniform4iv GLEW_GET_FUN(__glewUniform4iv)
+#define glUniformMatrix2fv GLEW_GET_FUN(__glewUniformMatrix2fv)
+#define glUniformMatrix3fv GLEW_GET_FUN(__glewUniformMatrix3fv)
+#define glUniformMatrix4fv GLEW_GET_FUN(__glewUniformMatrix4fv)
+#define glUseProgram GLEW_GET_FUN(__glewUseProgram)
+#define glValidateProgram GLEW_GET_FUN(__glewValidateProgram)
+#define glVertexAttrib1d GLEW_GET_FUN(__glewVertexAttrib1d)
+#define glVertexAttrib1dv GLEW_GET_FUN(__glewVertexAttrib1dv)
+#define glVertexAttrib1f GLEW_GET_FUN(__glewVertexAttrib1f)
+#define glVertexAttrib1fv GLEW_GET_FUN(__glewVertexAttrib1fv)
+#define glVertexAttrib1s GLEW_GET_FUN(__glewVertexAttrib1s)
+#define glVertexAttrib1sv GLEW_GET_FUN(__glewVertexAttrib1sv)
+#define glVertexAttrib2d GLEW_GET_FUN(__glewVertexAttrib2d)
+#define glVertexAttrib2dv GLEW_GET_FUN(__glewVertexAttrib2dv)
+#define glVertexAttrib2f GLEW_GET_FUN(__glewVertexAttrib2f)
+#define glVertexAttrib2fv GLEW_GET_FUN(__glewVertexAttrib2fv)
+#define glVertexAttrib2s GLEW_GET_FUN(__glewVertexAttrib2s)
+#define glVertexAttrib2sv GLEW_GET_FUN(__glewVertexAttrib2sv)
+#define glVertexAttrib3d GLEW_GET_FUN(__glewVertexAttrib3d)
+#define glVertexAttrib3dv GLEW_GET_FUN(__glewVertexAttrib3dv)
+#define glVertexAttrib3f GLEW_GET_FUN(__glewVertexAttrib3f)
+#define glVertexAttrib3fv GLEW_GET_FUN(__glewVertexAttrib3fv)
+#define glVertexAttrib3s GLEW_GET_FUN(__glewVertexAttrib3s)
+#define glVertexAttrib3sv GLEW_GET_FUN(__glewVertexAttrib3sv)
+#define glVertexAttrib4Nbv GLEW_GET_FUN(__glewVertexAttrib4Nbv)
+#define glVertexAttrib4Niv GLEW_GET_FUN(__glewVertexAttrib4Niv)
+#define glVertexAttrib4Nsv GLEW_GET_FUN(__glewVertexAttrib4Nsv)
+#define glVertexAttrib4Nub GLEW_GET_FUN(__glewVertexAttrib4Nub)
+#define glVertexAttrib4Nubv GLEW_GET_FUN(__glewVertexAttrib4Nubv)
+#define glVertexAttrib4Nuiv GLEW_GET_FUN(__glewVertexAttrib4Nuiv)
+#define glVertexAttrib4Nusv GLEW_GET_FUN(__glewVertexAttrib4Nusv)
+#define glVertexAttrib4bv GLEW_GET_FUN(__glewVertexAttrib4bv)
+#define glVertexAttrib4d GLEW_GET_FUN(__glewVertexAttrib4d)
+#define glVertexAttrib4dv GLEW_GET_FUN(__glewVertexAttrib4dv)
+#define glVertexAttrib4f GLEW_GET_FUN(__glewVertexAttrib4f)
+#define glVertexAttrib4fv GLEW_GET_FUN(__glewVertexAttrib4fv)
+#define glVertexAttrib4iv GLEW_GET_FUN(__glewVertexAttrib4iv)
+#define glVertexAttrib4s GLEW_GET_FUN(__glewVertexAttrib4s)
+#define glVertexAttrib4sv GLEW_GET_FUN(__glewVertexAttrib4sv)
+#define glVertexAttrib4ubv GLEW_GET_FUN(__glewVertexAttrib4ubv)
+#define glVertexAttrib4uiv GLEW_GET_FUN(__glewVertexAttrib4uiv)
+#define glVertexAttrib4usv GLEW_GET_FUN(__glewVertexAttrib4usv)
+#define glVertexAttribPointer GLEW_GET_FUN(__glewVertexAttribPointer)
+
+#define GLEW_VERSION_2_0 GLEW_GET_VAR(__GLEW_VERSION_2_0)
+
+#endif /* GL_VERSION_2_0 */
+
+/* ----------------------------- GL_VERSION_2_1 ---------------------------- */
+
+#ifndef GL_VERSION_2_1
+#define GL_VERSION_2_1 1
+
+#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F
+#define GL_PIXEL_PACK_BUFFER 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
+#define GL_FLOAT_MAT2x3 0x8B65
+#define GL_FLOAT_MAT2x4 0x8B66
+#define GL_FLOAT_MAT3x2 0x8B67
+#define GL_FLOAT_MAT3x4 0x8B68
+#define GL_FLOAT_MAT4x2 0x8B69
+#define GL_FLOAT_MAT4x3 0x8B6A
+#define GL_SRGB 0x8C40
+#define GL_SRGB8 0x8C41
+#define GL_SRGB_ALPHA 0x8C42
+#define GL_SRGB8_ALPHA8 0x8C43
+#define GL_SLUMINANCE_ALPHA 0x8C44
+#define GL_SLUMINANCE8_ALPHA8 0x8C45
+#define GL_SLUMINANCE 0x8C46
+#define GL_SLUMINANCE8 0x8C47
+#define GL_COMPRESSED_SRGB 0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA 0x8C49
+#define GL_COMPRESSED_SLUMINANCE 0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B
+
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+
+#define glUniformMatrix2x3fv GLEW_GET_FUN(__glewUniformMatrix2x3fv)
+#define glUniformMatrix2x4fv GLEW_GET_FUN(__glewUniformMatrix2x4fv)
+#define glUniformMatrix3x2fv GLEW_GET_FUN(__glewUniformMatrix3x2fv)
+#define glUniformMatrix3x4fv GLEW_GET_FUN(__glewUniformMatrix3x4fv)
+#define glUniformMatrix4x2fv GLEW_GET_FUN(__glewUniformMatrix4x2fv)
+#define glUniformMatrix4x3fv GLEW_GET_FUN(__glewUniformMatrix4x3fv)
+
+#define GLEW_VERSION_2_1 GLEW_GET_VAR(__GLEW_VERSION_2_1)
+
+#endif /* GL_VERSION_2_1 */
+
+/* ----------------------------- GL_VERSION_3_0 ---------------------------- */
+
+#ifndef GL_VERSION_3_0
+#define GL_VERSION_3_0 1
+
+#define GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES
+#define GL_CLIP_DISTANCE5 GL_CLIP_PLANE5
+#define GL_CLIP_DISTANCE1 GL_CLIP_PLANE1
+#define GL_CLIP_DISTANCE3 GL_CLIP_PLANE3
+#define GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB
+#define GL_CLIP_DISTANCE0 GL_CLIP_PLANE0
+#define GL_CLIP_DISTANCE4 GL_CLIP_PLANE4
+#define GL_CLIP_DISTANCE2 GL_CLIP_PLANE2
+#define GL_MAX_VARYING_COMPONENTS GL_MAX_VARYING_FLOATS
+#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001
+#define GL_MAJOR_VERSION 0x821B
+#define GL_MINOR_VERSION 0x821C
+#define GL_NUM_EXTENSIONS 0x821D
+#define GL_CONTEXT_FLAGS 0x821E
+#define GL_DEPTH_BUFFER 0x8223
+#define GL_STENCIL_BUFFER 0x8224
+#define GL_COMPRESSED_RED 0x8225
+#define GL_COMPRESSED_RG 0x8226
+#define GL_RGBA32F 0x8814
+#define GL_RGB32F 0x8815
+#define GL_RGBA16F 0x881A
+#define GL_RGB16F 0x881B
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD
+#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF
+#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905
+#define GL_CLAMP_VERTEX_COLOR 0x891A
+#define GL_CLAMP_FRAGMENT_COLOR 0x891B
+#define GL_CLAMP_READ_COLOR 0x891C
+#define GL_FIXED_ONLY 0x891D
+#define GL_TEXTURE_RED_TYPE 0x8C10
+#define GL_TEXTURE_GREEN_TYPE 0x8C11
+#define GL_TEXTURE_BLUE_TYPE 0x8C12
+#define GL_TEXTURE_ALPHA_TYPE 0x8C13
+#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE 0x8C15
+#define GL_TEXTURE_DEPTH_TYPE 0x8C16
+#define GL_UNSIGNED_NORMALIZED 0x8C17
+#define GL_TEXTURE_1D_ARRAY 0x8C18
+#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19
+#define GL_TEXTURE_2D_ARRAY 0x8C1A
+#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B
+#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C
+#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D
+#define GL_R11F_G11F_B10F 0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B
+#define GL_RGB9_E5 0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E
+#define GL_TEXTURE_SHARED_SIZE 0x8C3F
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85
+#define GL_PRIMITIVES_GENERATED 0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88
+#define GL_RASTERIZER_DISCARD 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS 0x8C8C
+#define GL_SEPARATE_ATTRIBS 0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F
+#define GL_RGBA32UI 0x8D70
+#define GL_RGB32UI 0x8D71
+#define GL_RGBA16UI 0x8D76
+#define GL_RGB16UI 0x8D77
+#define GL_RGBA8UI 0x8D7C
+#define GL_RGB8UI 0x8D7D
+#define GL_RGBA32I 0x8D82
+#define GL_RGB32I 0x8D83
+#define GL_RGBA16I 0x8D88
+#define GL_RGB16I 0x8D89
+#define GL_RGBA8I 0x8D8E
+#define GL_RGB8I 0x8D8F
+#define GL_RED_INTEGER 0x8D94
+#define GL_GREEN_INTEGER 0x8D95
+#define GL_BLUE_INTEGER 0x8D96
+#define GL_ALPHA_INTEGER 0x8D97
+#define GL_RGB_INTEGER 0x8D98
+#define GL_RGBA_INTEGER 0x8D99
+#define GL_BGR_INTEGER 0x8D9A
+#define GL_BGRA_INTEGER 0x8D9B
+#define GL_SAMPLER_1D_ARRAY 0x8DC0
+#define GL_SAMPLER_2D_ARRAY 0x8DC1
+#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3
+#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW 0x8DC5
+#define GL_UNSIGNED_INT_VEC2 0x8DC6
+#define GL_UNSIGNED_INT_VEC3 0x8DC7
+#define GL_UNSIGNED_INT_VEC4 0x8DC8
+#define GL_INT_SAMPLER_1D 0x8DC9
+#define GL_INT_SAMPLER_2D 0x8DCA
+#define GL_INT_SAMPLER_3D 0x8DCB
+#define GL_INT_SAMPLER_CUBE 0x8DCC
+#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE
+#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF
+#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7
+#define GL_QUERY_WAIT 0x8E13
+#define GL_QUERY_NO_WAIT 0x8E14
+#define GL_QUERY_BY_REGION_WAIT 0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16
+
+typedef void (GLAPIENTRY * PFNGLBEGINCONDITIONALRENDERPROC) (GLuint, GLenum);
+typedef void (GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum);
+typedef void (GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONPROC) (GLuint, GLuint, const GLchar*);
+typedef void (GLAPIENTRY * PFNGLCLAMPCOLORPROC) (GLenum, GLenum);
+typedef void (GLAPIENTRY * PFNGLCLEARBUFFERFIPROC) (GLenum, GLint, GLfloat, GLint);
+typedef void (GLAPIENTRY * PFNGLCLEARBUFFERFVPROC) (GLenum, GLint, const GLfloat*);
+typedef void (GLAPIENTRY * PFNGLCLEARBUFFERIVPROC) (GLenum, GLint, const GLint*);
+typedef void (GLAPIENTRY * PFNGLCLEARBUFFERUIVPROC) (GLenum, GLint, const GLuint*);
+typedef void (GLAPIENTRY * PFNGLCOLORMASKIPROC) (GLuint, GLboolean, GLboolean, GLboolean, GLboolean);
+typedef void (GLAPIENTRY * PFNGLDISABLEIPROC) (GLenum, GLuint);
+typedef void (GLAPIENTRY * PFNGLENABLEIPROC) (GLenum, GLuint);
+typedef void (GLAPIENTRY * PFNGLENDCONDITIONALRENDERPROC) (void);
+typedef void (GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKPROC) (void);
+typedef void (GLAPIENTRY * PFNGLGETBOOLEANI_VPROC) (GLenum, GLuint, GLboolean*);
+typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATALOCATIONPROC) (GLuint, const GLchar*);
+typedef const GLubyte* (GLAPIENTRY * PFNGLGETSTRINGIPROC) (GLenum, GLuint);
+typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIIVPROC) (GLenum, GLenum, GLint*);
+typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIUIVPROC) (GLenum, GLenum, GLuint*);
+typedef void (GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *);
+typedef void (GLAPIENTRY * PFNGLGETUNIFORMUIVPROC) (GLuint, GLint, GLuint*);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIIVPROC) (GLuint, GLenum, GLint*);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint, GLenum, GLuint*);
+typedef GLboolean (GLAPIENTRY * PFNGLISENABLEDIPROC) (GLenum, GLuint);
+typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIIVPROC) (GLenum, GLenum, const GLint*);
+typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIUIVPROC) (GLenum, GLenum, const GLuint*);
+typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint, GLsizei, const GLchar **, GLenum);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1UIPROC) (GLint, GLuint);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1UIVPROC) (GLint, GLsizei, const GLuint*);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2UIPROC) (GLint, GLuint, GLuint);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2UIVPROC) (GLint, GLsizei, const GLuint*);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3UIPROC) (GLint, GLuint, GLuint, GLuint);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3UIVPROC) (GLint, GLsizei, const GLuint*);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4UIPROC) (GLint, GLuint, GLuint, GLuint, GLuint);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4UIVPROC) (GLint, GLsizei, const GLuint*);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IPROC) (GLuint, GLint);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IVPROC) (GLuint, const GLint*);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIPROC) (GLuint, GLuint);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIVPROC) (GLuint, const GLuint*);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IPROC) (GLuint, GLint, GLint);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IVPROC) (GLuint, const GLint*);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIPROC) (GLuint, GLuint, GLuint);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIVPROC) (GLuint, const GLuint*);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IPROC) (GLuint, GLint, GLint, GLint);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IVPROC) (GLuint, const GLint*);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIPROC) (GLuint, GLuint, GLuint, GLuint);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIVPROC) (GLuint, const GLuint*);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4BVPROC) (GLuint, const GLbyte*);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IPROC) (GLuint, GLint, GLint, GLint, GLint);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IVPROC) (GLuint, const GLint*);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4SVPROC) (GLuint, const GLshort*);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UBVPROC) (GLuint, const GLubyte*);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIPROC) (GLuint, GLuint, GLuint, GLuint, GLuint);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIVPROC) (GLuint, const GLuint*);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4USVPROC) (GLuint, const GLushort*);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint, GLint, GLenum, GLsizei, const GLvoid*);
+
+#define glBeginConditionalRender GLEW_GET_FUN(__glewBeginConditionalRender)
+#define glBeginTransformFeedback GLEW_GET_FUN(__glewBeginTransformFeedback)
+#define glBindFragDataLocation GLEW_GET_FUN(__glewBindFragDataLocation)
+#define glClampColor GLEW_GET_FUN(__glewClampColor)
+#define glClearBufferfi GLEW_GET_FUN(__glewClearBufferfi)
+#define glClearBufferfv GLEW_GET_FUN(__glewClearBufferfv)
+#define glClearBufferiv GLEW_GET_FUN(__glewClearBufferiv)
+#define glClearBufferuiv GLEW_GET_FUN(__glewClearBufferuiv)
+#define glColorMaski GLEW_GET_FUN(__glewColorMaski)
+#define glDisablei GLEW_GET_FUN(__glewDisablei)
+#define glEnablei GLEW_GET_FUN(__glewEnablei)
+#define glEndConditionalRender GLEW_GET_FUN(__glewEndConditionalRender)
+#define glEndTransformFeedback GLEW_GET_FUN(__glewEndTransformFeedback)
+#define glGetBooleani_v GLEW_GET_FUN(__glewGetBooleani_v)
+#define glGetFragDataLocation GLEW_GET_FUN(__glewGetFragDataLocation)
+#define glGetStringi GLEW_GET_FUN(__glewGetStringi)
+#define glGetTexParameterIiv GLEW_GET_FUN(__glewGetTexParameterIiv)
+#define glGetTexParameterIuiv GLEW_GET_FUN(__glewGetTexParameterIuiv)
+#define glGetTransformFeedbackVarying GLEW_GET_FUN(__glewGetTransformFeedbackVarying)
+#define glGetUniformuiv GLEW_GET_FUN(__glewGetUniformuiv)
+#define glGetVertexAttribIiv GLEW_GET_FUN(__glewGetVertexAttribIiv)
+#define glGetVertexAttribIuiv GLEW_GET_FUN(__glewGetVertexAttribIuiv)
+#define glIsEnabledi GLEW_GET_FUN(__glewIsEnabledi)
+#define glTexParameterIiv GLEW_GET_FUN(__glewTexParameterIiv)
+#define glTexParameterIuiv GLEW_GET_FUN(__glewTexParameterIuiv)
+#define glTransformFeedbackVaryings GLEW_GET_FUN(__glewTransformFeedbackVaryings)
+#define glUniform1ui GLEW_GET_FUN(__glewUniform1ui)
+#define glUniform1uiv GLEW_GET_FUN(__glewUniform1uiv)
+#define glUniform2ui GLEW_GET_FUN(__glewUniform2ui)
+#define glUniform2uiv GLEW_GET_FUN(__glewUniform2uiv)
+#define glUniform3ui GLEW_GET_FUN(__glewUniform3ui)
+#define glUniform3uiv GLEW_GET_FUN(__glewUniform3uiv)
+#define glUniform4ui GLEW_GET_FUN(__glewUniform4ui)
+#define glUniform4uiv GLEW_GET_FUN(__glewUniform4uiv)
+#define glVertexAttribI1i GLEW_GET_FUN(__glewVertexAttribI1i)
+#define glVertexAttribI1iv GLEW_GET_FUN(__glewVertexAttribI1iv)
+#define glVertexAttribI1ui GLEW_GET_FUN(__glewVertexAttribI1ui)
+#define glVertexAttribI1uiv GLEW_GET_FUN(__glewVertexAttribI1uiv)
+#define glVertexAttribI2i GLEW_GET_FUN(__glewVertexAttribI2i)
+#define glVertexAttribI2iv GLEW_GET_FUN(__glewVertexAttribI2iv)
+#define glVertexAttribI2ui GLEW_GET_FUN(__glewVertexAttribI2ui)
+#define glVertexAttribI2uiv GLEW_GET_FUN(__glewVertexAttribI2uiv)
+#define glVertexAttribI3i GLEW_GET_FUN(__glewVertexAttribI3i)
+#define glVertexAttribI3iv GLEW_GET_FUN(__glewVertexAttribI3iv)
+#define glVertexAttribI3ui GLEW_GET_FUN(__glewVertexAttribI3ui)
+#define glVertexAttribI3uiv GLEW_GET_FUN(__glewVertexAttribI3uiv)
+#define glVertexAttribI4bv GLEW_GET_FUN(__glewVertexAttribI4bv)
+#define glVertexAttribI4i GLEW_GET_FUN(__glewVertexAttribI4i)
+#define glVertexAttribI4iv GLEW_GET_FUN(__glewVertexAttribI4iv)
+#define glVertexAttribI4sv GLEW_GET_FUN(__glewVertexAttribI4sv)
+#define glVertexAttribI4ubv GLEW_GET_FUN(__glewVertexAttribI4ubv)
+#define glVertexAttribI4ui GLEW_GET_FUN(__glewVertexAttribI4ui)
+#define glVertexAttribI4uiv GLEW_GET_FUN(__glewVertexAttribI4uiv)
+#define glVertexAttribI4usv GLEW_GET_FUN(__glewVertexAttribI4usv)
+#define glVertexAttribIPointer GLEW_GET_FUN(__glewVertexAttribIPointer)
+
+#define GLEW_VERSION_3_0 GLEW_GET_VAR(__GLEW_VERSION_3_0)
+
+#endif /* GL_VERSION_3_0 */
+
+/* ----------------------------- GL_VERSION_3_1 ---------------------------- */
+
+#ifndef GL_VERSION_3_1
+#define GL_VERSION_3_1 1
+
+#define GL_TEXTURE_RECTANGLE 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8
+#define GL_SAMPLER_2D_RECT 0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64
+#define GL_TEXTURE_BUFFER 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D
+#define GL_TEXTURE_BUFFER_FORMAT 0x8C2E
+#define GL_SAMPLER_BUFFER 0x8DC2
+#define GL_INT_SAMPLER_2D_RECT 0x8DCD
+#define GL_INT_SAMPLER_BUFFER 0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8
+#define GL_RED_SNORM 0x8F90
+#define GL_RG_SNORM 0x8F91
+#define GL_RGB_SNORM 0x8F92
+#define GL_RGBA_SNORM 0x8F93
+#define GL_R8_SNORM 0x8F94
+#define GL_RG8_SNORM 0x8F95
+#define GL_RGB8_SNORM 0x8F96
+#define GL_RGBA8_SNORM 0x8F97
+#define GL_R16_SNORM 0x8F98
+#define GL_RG16_SNORM 0x8F99
+#define GL_RGB16_SNORM 0x8F9A
+#define GL_RGBA16_SNORM 0x8F9B
+#define GL_SIGNED_NORMALIZED 0x8F9C
+#define GL_PRIMITIVE_RESTART 0x8F9D
+#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E
+#define GL_BUFFER_ACCESS_FLAGS 0x911F
+#define GL_BUFFER_MAP_LENGTH 0x9120
+#define GL_BUFFER_MAP_OFFSET 0x9121
+
+typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum, GLint, GLsizei, GLsizei);
+typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum, GLsizei, GLenum, const GLvoid*, GLsizei);
+typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint);
+typedef void (GLAPIENTRY * PFNGLTEXBUFFERPROC) (GLenum, GLenum, GLuint);
+
+#define glDrawArraysInstanced GLEW_GET_FUN(__glewDrawArraysInstanced)
+#define glDrawElementsInstanced GLEW_GET_FUN(__glewDrawElementsInstanced)
+#define glPrimitiveRestartIndex GLEW_GET_FUN(__glewPrimitiveRestartIndex)
+#define glTexBuffer GLEW_GET_FUN(__glewTexBuffer)
+
+#define GLEW_VERSION_3_1 GLEW_GET_VAR(__GLEW_VERSION_3_1)
+
+#endif /* GL_VERSION_3_1 */
+
+/* ----------------------------- GL_VERSION_3_2 ---------------------------- */
+
+#ifndef GL_VERSION_3_2
+#define GL_VERSION_3_2 1
+
+#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001
+#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002
+#define GL_LINES_ADJACENCY 0x000A
+#define GL_LINE_STRIP_ADJACENCY 0x000B
+#define GL_TRIANGLES_ADJACENCY 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D
+#define GL_PROGRAM_POINT_SIZE 0x8642
+#define GL_GEOMETRY_VERTICES_OUT 0x8916
+#define GL_GEOMETRY_INPUT_TYPE 0x8917
+#define GL_GEOMETRY_OUTPUT_TYPE 0x8918
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8
+#define GL_GEOMETRY_SHADER 0x8DD9
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1
+#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124
+#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125
+#define GL_CONTEXT_PROFILE_MASK 0x9126
+
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum, GLenum, GLuint, GLint);
+typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum, GLenum, GLint64 *);
+typedef void (GLAPIENTRY * PFNGLGETINTEGER64I_VPROC) (GLenum, GLuint, GLint64 *);
+
+#define glFramebufferTexture GLEW_GET_FUN(__glewFramebufferTexture)
+#define glGetBufferParameteri64v GLEW_GET_FUN(__glewGetBufferParameteri64v)
+#define glGetInteger64i_v GLEW_GET_FUN(__glewGetInteger64i_v)
+
+#define GLEW_VERSION_3_2 GLEW_GET_VAR(__GLEW_VERSION_3_2)
+
+#endif /* GL_VERSION_3_2 */
+
+/* ----------------------------- GL_VERSION_3_3 ---------------------------- */
+
+#ifndef GL_VERSION_3_3
+#define GL_VERSION_3_3 1
+
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE
+#define GL_ANY_SAMPLES_PASSED 0x8C2F
+#define GL_TEXTURE_SWIZZLE_R 0x8E42
+#define GL_TEXTURE_SWIZZLE_G 0x8E43
+#define GL_TEXTURE_SWIZZLE_B 0x8E44
+#define GL_TEXTURE_SWIZZLE_A 0x8E45
+#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46
+#define GL_RGB10_A2UI 0x906F
+
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor);
+
+#define glVertexAttribDivisor GLEW_GET_FUN(__glewVertexAttribDivisor)
+
+#define GLEW_VERSION_3_3 GLEW_GET_VAR(__GLEW_VERSION_3_3)
+
+#endif /* GL_VERSION_3_3 */
+
+/* ----------------------------- GL_VERSION_4_0 ---------------------------- */
+
+#ifndef GL_VERSION_4_0
+#define GL_VERSION_4_0 1
+
+#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F
+#define GL_SAMPLE_SHADING 0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS 0x8F9F
+#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B
+#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F
+
+typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode);
+typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (GLAPIENTRY * PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (GLAPIENTRY * PFNGLMINSAMPLESHADINGPROC) (GLclampf value);
+
+#define glBlendEquationSeparatei GLEW_GET_FUN(__glewBlendEquationSeparatei)
+#define glBlendEquationi GLEW_GET_FUN(__glewBlendEquationi)
+#define glBlendFuncSeparatei GLEW_GET_FUN(__glewBlendFuncSeparatei)
+#define glBlendFunci GLEW_GET_FUN(__glewBlendFunci)
+#define glMinSampleShading GLEW_GET_FUN(__glewMinSampleShading)
+
+#define GLEW_VERSION_4_0 GLEW_GET_VAR(__GLEW_VERSION_4_0)
+
+#endif /* GL_VERSION_4_0 */
+
+/* ----------------------------- GL_VERSION_4_1 ---------------------------- */
+
+#ifndef GL_VERSION_4_1
+#define GL_VERSION_4_1 1
+
+#define GLEW_VERSION_4_1 GLEW_GET_VAR(__GLEW_VERSION_4_1)
+
+#endif /* GL_VERSION_4_1 */
+
+/* ----------------------------- GL_VERSION_4_2 ---------------------------- */
+
+#ifndef GL_VERSION_4_2
+#define GL_VERSION_4_2 1
+
+#define GLEW_VERSION_4_2 GLEW_GET_VAR(__GLEW_VERSION_4_2)
+
+#endif /* GL_VERSION_4_2 */
+
+/* -------------------------- GL_3DFX_multisample -------------------------- */
+
+#ifndef GL_3DFX_multisample
+#define GL_3DFX_multisample 1
+
+#define GL_MULTISAMPLE_3DFX 0x86B2
+#define GL_SAMPLE_BUFFERS_3DFX 0x86B3
+#define GL_SAMPLES_3DFX 0x86B4
+#define GL_MULTISAMPLE_BIT_3DFX 0x20000000
+
+#define GLEW_3DFX_multisample GLEW_GET_VAR(__GLEW_3DFX_multisample)
+
+#endif /* GL_3DFX_multisample */
+
+/* ---------------------------- GL_3DFX_tbuffer ---------------------------- */
+
+#ifndef GL_3DFX_tbuffer
+#define GL_3DFX_tbuffer 1
+
+typedef void (GLAPIENTRY * PFNGLTBUFFERMASK3DFXPROC) (GLuint mask);
+
+#define glTbufferMask3DFX GLEW_GET_FUN(__glewTbufferMask3DFX)
+
+#define GLEW_3DFX_tbuffer GLEW_GET_VAR(__GLEW_3DFX_tbuffer)
+
+#endif /* GL_3DFX_tbuffer */
+
+/* -------------------- GL_3DFX_texture_compression_FXT1 ------------------- */
+
+#ifndef GL_3DFX_texture_compression_FXT1
+#define GL_3DFX_texture_compression_FXT1 1
+
+#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0
+#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1
+
+#define GLEW_3DFX_texture_compression_FXT1 GLEW_GET_VAR(__GLEW_3DFX_texture_compression_FXT1)
+
+#endif /* GL_3DFX_texture_compression_FXT1 */
+
+/* ----------------------- GL_AMD_blend_minmax_factor ---------------------- */
+
+#ifndef GL_AMD_blend_minmax_factor
+#define GL_AMD_blend_minmax_factor 1
+
+#define GL_FACTOR_MIN_AMD 0x901C
+#define GL_FACTOR_MAX_AMD 0x901D
+
+#define GLEW_AMD_blend_minmax_factor GLEW_GET_VAR(__GLEW_AMD_blend_minmax_factor)
+
+#endif /* GL_AMD_blend_minmax_factor */
+
+/* ----------------------- GL_AMD_conservative_depth ----------------------- */
+
+#ifndef GL_AMD_conservative_depth
+#define GL_AMD_conservative_depth 1
+
+#define GLEW_AMD_conservative_depth GLEW_GET_VAR(__GLEW_AMD_conservative_depth)
+
+#endif /* GL_AMD_conservative_depth */
+
+/* -------------------------- GL_AMD_debug_output -------------------------- */
+
+#ifndef GL_AMD_debug_output
+#define GL_AMD_debug_output 1
+
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144
+#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145
+#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147
+#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148
+#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149
+#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A
+#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B
+#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C
+#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D
+#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E
+#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F
+#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150
+
+typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id, GLenum category, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam);
+
+typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void* userParam);
+typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled);
+typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const char* buf);
+typedef GLuint (GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum* categories, GLuint* severities, GLuint* ids, GLsizei* lengths, char* message);
+
+#define glDebugMessageCallbackAMD GLEW_GET_FUN(__glewDebugMessageCallbackAMD)
+#define glDebugMessageEnableAMD GLEW_GET_FUN(__glewDebugMessageEnableAMD)
+#define glDebugMessageInsertAMD GLEW_GET_FUN(__glewDebugMessageInsertAMD)
+#define glGetDebugMessageLogAMD GLEW_GET_FUN(__glewGetDebugMessageLogAMD)
+
+#define GLEW_AMD_debug_output GLEW_GET_VAR(__GLEW_AMD_debug_output)
+
+#endif /* GL_AMD_debug_output */
+
+/* ---------------------- GL_AMD_depth_clamp_separate ---------------------- */
+
+#ifndef GL_AMD_depth_clamp_separate
+#define GL_AMD_depth_clamp_separate 1
+
+#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E
+#define GL_DEPTH_CLAMP_FAR_AMD 0x901F
+
+#define GLEW_AMD_depth_clamp_separate GLEW_GET_VAR(__GLEW_AMD_depth_clamp_separate)
+
+#endif /* GL_AMD_depth_clamp_separate */
+
+/* ----------------------- GL_AMD_draw_buffers_blend ----------------------- */
+
+#ifndef GL_AMD_draw_buffers_blend
+#define GL_AMD_draw_buffers_blend 1
+
+typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode);
+typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (GLAPIENTRY * PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+
+#define glBlendEquationIndexedAMD GLEW_GET_FUN(__glewBlendEquationIndexedAMD)
+#define glBlendEquationSeparateIndexedAMD GLEW_GET_FUN(__glewBlendEquationSeparateIndexedAMD)
+#define glBlendFuncIndexedAMD GLEW_GET_FUN(__glewBlendFuncIndexedAMD)
+#define glBlendFuncSeparateIndexedAMD GLEW_GET_FUN(__glewBlendFuncSeparateIndexedAMD)
+
+#define GLEW_AMD_draw_buffers_blend GLEW_GET_VAR(__GLEW_AMD_draw_buffers_blend)
+
+#endif /* GL_AMD_draw_buffers_blend */
+
+/* ----------------------- GL_AMD_multi_draw_indirect ---------------------- */
+
+#ifndef GL_AMD_multi_draw_indirect
+#define GL_AMD_multi_draw_indirect 1
+
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void* indirect, GLsizei primcount, GLsizei stride);
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void* indirect, GLsizei primcount, GLsizei stride);
+
+#define glMultiDrawArraysIndirectAMD GLEW_GET_FUN(__glewMultiDrawArraysIndirectAMD)
+#define glMultiDrawElementsIndirectAMD GLEW_GET_FUN(__glewMultiDrawElementsIndirectAMD)
+
+#define GLEW_AMD_multi_draw_indirect GLEW_GET_VAR(__GLEW_AMD_multi_draw_indirect)
+
+#endif /* GL_AMD_multi_draw_indirect */
+
+/* ------------------------- GL_AMD_name_gen_delete ------------------------ */
+
+#ifndef GL_AMD_name_gen_delete
+#define GL_AMD_name_gen_delete 1
+
+#define GL_DATA_BUFFER_AMD 0x9151
+#define GL_PERFORMANCE_MONITOR_AMD 0x9152
+#define GL_QUERY_OBJECT_AMD 0x9153
+#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154
+#define GL_SAMPLER_OBJECT_AMD 0x9155
+
+typedef void (GLAPIENTRY * PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint* names);
+typedef void (GLAPIENTRY * PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint* names);
+typedef GLboolean (GLAPIENTRY * PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name);
+
+#define glDeleteNamesAMD GLEW_GET_FUN(__glewDeleteNamesAMD)
+#define glGenNamesAMD GLEW_GET_FUN(__glewGenNamesAMD)
+#define glIsNameAMD GLEW_GET_FUN(__glewIsNameAMD)
+
+#define GLEW_AMD_name_gen_delete GLEW_GET_VAR(__GLEW_AMD_name_gen_delete)
+
+#endif /* GL_AMD_name_gen_delete */
+
+/* ----------------------- GL_AMD_performance_monitor ---------------------- */
+
+#ifndef GL_AMD_performance_monitor
+#define GL_AMD_performance_monitor 1
+
+#define GL_UNSIGNED_INT 0x1405
+#define GL_FLOAT 0x1406
+#define GL_COUNTER_TYPE_AMD 0x8BC0
+#define GL_COUNTER_RANGE_AMD 0x8BC1
+#define GL_UNSIGNED_INT64_AMD 0x8BC2
+#define GL_PERCENTAGE_AMD 0x8BC3
+#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4
+#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5
+#define GL_PERFMON_RESULT_AMD 0x8BC6
+
+typedef void (GLAPIENTRY * PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor);
+typedef void (GLAPIENTRY * PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint* monitors);
+typedef void (GLAPIENTRY * PFNGLENDPERFMONITORAMDPROC) (GLuint monitor);
+typedef void (GLAPIENTRY * PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint* monitors);
+typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint* data, GLint *bytesWritten);
+typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void* data);
+typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei* length, char *counterString);
+typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint* numCounters, GLint *maxActiveCounters, GLsizei countersSize, GLuint *counters);
+typedef void (GLAPIENTRY * PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei* length, char *groupString);
+typedef void (GLAPIENTRY * PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint* numGroups, GLsizei groupsSize, GLuint *groups);
+typedef void (GLAPIENTRY * PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint* counterList);
+
+#define glBeginPerfMonitorAMD GLEW_GET_FUN(__glewBeginPerfMonitorAMD)
+#define glDeletePerfMonitorsAMD GLEW_GET_FUN(__glewDeletePerfMonitorsAMD)
+#define glEndPerfMonitorAMD GLEW_GET_FUN(__glewEndPerfMonitorAMD)
+#define glGenPerfMonitorsAMD GLEW_GET_FUN(__glewGenPerfMonitorsAMD)
+#define glGetPerfMonitorCounterDataAMD GLEW_GET_FUN(__glewGetPerfMonitorCounterDataAMD)
+#define glGetPerfMonitorCounterInfoAMD GLEW_GET_FUN(__glewGetPerfMonitorCounterInfoAMD)
+#define glGetPerfMonitorCounterStringAMD GLEW_GET_FUN(__glewGetPerfMonitorCounterStringAMD)
+#define glGetPerfMonitorCountersAMD GLEW_GET_FUN(__glewGetPerfMonitorCountersAMD)
+#define glGetPerfMonitorGroupStringAMD GLEW_GET_FUN(__glewGetPerfMonitorGroupStringAMD)
+#define glGetPerfMonitorGroupsAMD GLEW_GET_FUN(__glewGetPerfMonitorGroupsAMD)
+#define glSelectPerfMonitorCountersAMD GLEW_GET_FUN(__glewSelectPerfMonitorCountersAMD)
+
+#define GLEW_AMD_performance_monitor GLEW_GET_VAR(__GLEW_AMD_performance_monitor)
+
+#endif /* GL_AMD_performance_monitor */
+
+/* ------------------------ GL_AMD_sample_positions ------------------------ */
+
+#ifndef GL_AMD_sample_positions
+#define GL_AMD_sample_positions 1
+
+#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F
+
+typedef void (GLAPIENTRY * PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat* val);
+
+#define glSetMultisamplefvAMD GLEW_GET_FUN(__glewSetMultisamplefvAMD)
+
+#define GLEW_AMD_sample_positions GLEW_GET_VAR(__GLEW_AMD_sample_positions)
+
+#endif /* GL_AMD_sample_positions */
+
+/* ------------------ GL_AMD_seamless_cubemap_per_texture ------------------ */
+
+#ifndef GL_AMD_seamless_cubemap_per_texture
+#define GL_AMD_seamless_cubemap_per_texture 1
+
+#define GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB 0x884F
+
+#define GLEW_AMD_seamless_cubemap_per_texture GLEW_GET_VAR(__GLEW_AMD_seamless_cubemap_per_texture)
+
+#endif /* GL_AMD_seamless_cubemap_per_texture */
+
+/* ---------------------- GL_AMD_shader_stencil_export --------------------- */
+
+#ifndef GL_AMD_shader_stencil_export
+#define GL_AMD_shader_stencil_export 1
+
+#define GLEW_AMD_shader_stencil_export GLEW_GET_VAR(__GLEW_AMD_shader_stencil_export)
+
+#endif /* GL_AMD_shader_stencil_export */
+
+/* ------------------------ GL_AMD_texture_texture4 ------------------------ */
+
+#ifndef GL_AMD_texture_texture4
+#define GL_AMD_texture_texture4 1
+
+#define GLEW_AMD_texture_texture4 GLEW_GET_VAR(__GLEW_AMD_texture_texture4)
+
+#endif /* GL_AMD_texture_texture4 */
+
+/* --------------- GL_AMD_transform_feedback3_lines_triangles -------------- */
+
+#ifndef GL_AMD_transform_feedback3_lines_triangles
+#define GL_AMD_transform_feedback3_lines_triangles 1
+
+#define GLEW_AMD_transform_feedback3_lines_triangles GLEW_GET_VAR(__GLEW_AMD_transform_feedback3_lines_triangles)
+
+#endif /* GL_AMD_transform_feedback3_lines_triangles */
+
+/* -------------------- GL_AMD_vertex_shader_tessellator ------------------- */
+
+#ifndef GL_AMD_vertex_shader_tessellator
+#define GL_AMD_vertex_shader_tessellator 1
+
+#define GL_SAMPLER_BUFFER_AMD 0x9001
+#define GL_INT_SAMPLER_BUFFER_AMD 0x9002
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003
+#define GL_TESSELLATION_MODE_AMD 0x9004
+#define GL_TESSELLATION_FACTOR_AMD 0x9005
+#define GL_DISCRETE_AMD 0x9006
+#define GL_CONTINUOUS_AMD 0x9007
+
+typedef void (GLAPIENTRY * PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor);
+typedef void (GLAPIENTRY * PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode);
+
+#define glTessellationFactorAMD GLEW_GET_FUN(__glewTessellationFactorAMD)
+#define glTessellationModeAMD GLEW_GET_FUN(__glewTessellationModeAMD)
+
+#define GLEW_AMD_vertex_shader_tessellator GLEW_GET_VAR(__GLEW_AMD_vertex_shader_tessellator)
+
+#endif /* GL_AMD_vertex_shader_tessellator */
+
+/* ----------------------- GL_APPLE_aux_depth_stencil ---------------------- */
+
+#ifndef GL_APPLE_aux_depth_stencil
+#define GL_APPLE_aux_depth_stencil 1
+
+#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14
+
+#define GLEW_APPLE_aux_depth_stencil GLEW_GET_VAR(__GLEW_APPLE_aux_depth_stencil)
+
+#endif /* GL_APPLE_aux_depth_stencil */
+
+/* ------------------------ GL_APPLE_client_storage ------------------------ */
+
+#ifndef GL_APPLE_client_storage
+#define GL_APPLE_client_storage 1
+
+#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2
+
+#define GLEW_APPLE_client_storage GLEW_GET_VAR(__GLEW_APPLE_client_storage)
+
+#endif /* GL_APPLE_client_storage */
+
+/* ------------------------- GL_APPLE_element_array ------------------------ */
+
+#ifndef GL_APPLE_element_array
+#define GL_APPLE_element_array 1
+
+#define GL_ELEMENT_ARRAY_APPLE 0x8A0C
+#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D
+#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E
+
+typedef void (GLAPIENTRY * PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
+typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount);
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint* first, const GLsizei *count, GLsizei primcount);
+
+#define glDrawElementArrayAPPLE GLEW_GET_FUN(__glewDrawElementArrayAPPLE)
+#define glDrawRangeElementArrayAPPLE GLEW_GET_FUN(__glewDrawRangeElementArrayAPPLE)
+#define glElementPointerAPPLE GLEW_GET_FUN(__glewElementPointerAPPLE)
+#define glMultiDrawElementArrayAPPLE GLEW_GET_FUN(__glewMultiDrawElementArrayAPPLE)
+#define glMultiDrawRangeElementArrayAPPLE GLEW_GET_FUN(__glewMultiDrawRangeElementArrayAPPLE)
+
+#define GLEW_APPLE_element_array GLEW_GET_VAR(__GLEW_APPLE_element_array)
+
+#endif /* GL_APPLE_element_array */
+
+/* ----------------------------- GL_APPLE_fence ---------------------------- */
+
+#ifndef GL_APPLE_fence
+#define GL_APPLE_fence 1
+
+#define GL_DRAW_PIXELS_APPLE 0x8A0A
+#define GL_FENCE_APPLE 0x8A0B
+
+typedef void (GLAPIENTRY * PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint* fences);
+typedef void (GLAPIENTRY * PFNGLFINISHFENCEAPPLEPROC) (GLuint fence);
+typedef void (GLAPIENTRY * PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name);
+typedef void (GLAPIENTRY * PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint* fences);
+typedef GLboolean (GLAPIENTRY * PFNGLISFENCEAPPLEPROC) (GLuint fence);
+typedef void (GLAPIENTRY * PFNGLSETFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (GLAPIENTRY * PFNGLTESTFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (GLAPIENTRY * PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name);
+
+#define glDeleteFencesAPPLE GLEW_GET_FUN(__glewDeleteFencesAPPLE)
+#define glFinishFenceAPPLE GLEW_GET_FUN(__glewFinishFenceAPPLE)
+#define glFinishObjectAPPLE GLEW_GET_FUN(__glewFinishObjectAPPLE)
+#define glGenFencesAPPLE GLEW_GET_FUN(__glewGenFencesAPPLE)
+#define glIsFenceAPPLE GLEW_GET_FUN(__glewIsFenceAPPLE)
+#define glSetFenceAPPLE GLEW_GET_FUN(__glewSetFenceAPPLE)
+#define glTestFenceAPPLE GLEW_GET_FUN(__glewTestFenceAPPLE)
+#define glTestObjectAPPLE GLEW_GET_FUN(__glewTestObjectAPPLE)
+
+#define GLEW_APPLE_fence GLEW_GET_VAR(__GLEW_APPLE_fence)
+
+#endif /* GL_APPLE_fence */
+
+/* ------------------------- GL_APPLE_float_pixels ------------------------- */
+
+#ifndef GL_APPLE_float_pixels
+#define GL_APPLE_float_pixels 1
+
+#define GL_HALF_APPLE 0x140B
+#define GL_RGBA_FLOAT32_APPLE 0x8814
+#define GL_RGB_FLOAT32_APPLE 0x8815
+#define GL_ALPHA_FLOAT32_APPLE 0x8816
+#define GL_INTENSITY_FLOAT32_APPLE 0x8817
+#define GL_LUMINANCE_FLOAT32_APPLE 0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819
+#define GL_RGBA_FLOAT16_APPLE 0x881A
+#define GL_RGB_FLOAT16_APPLE 0x881B
+#define GL_ALPHA_FLOAT16_APPLE 0x881C
+#define GL_INTENSITY_FLOAT16_APPLE 0x881D
+#define GL_LUMINANCE_FLOAT16_APPLE 0x881E
+#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F
+#define GL_COLOR_FLOAT_APPLE 0x8A0F
+
+#define GLEW_APPLE_float_pixels GLEW_GET_VAR(__GLEW_APPLE_float_pixels)
+
+#endif /* GL_APPLE_float_pixels */
+
+/* ---------------------- GL_APPLE_flush_buffer_range ---------------------- */
+
+#ifndef GL_APPLE_flush_buffer_range
+#define GL_APPLE_flush_buffer_range 1
+
+#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12
+#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13
+
+typedef void (GLAPIENTRY * PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size);
+
+#define glBufferParameteriAPPLE GLEW_GET_FUN(__glewBufferParameteriAPPLE)
+#define glFlushMappedBufferRangeAPPLE GLEW_GET_FUN(__glewFlushMappedBufferRangeAPPLE)
+
+#define GLEW_APPLE_flush_buffer_range GLEW_GET_VAR(__GLEW_APPLE_flush_buffer_range)
+
+#endif /* GL_APPLE_flush_buffer_range */
+
+/* ----------------------- GL_APPLE_object_purgeable ----------------------- */
+
+#ifndef GL_APPLE_object_purgeable
+#define GL_APPLE_object_purgeable 1
+
+#define GL_BUFFER_OBJECT_APPLE 0x85B3
+#define GL_RELEASED_APPLE 0x8A19
+#define GL_VOLATILE_APPLE 0x8A1A
+#define GL_RETAINED_APPLE 0x8A1B
+#define GL_UNDEFINED_APPLE 0x8A1C
+#define GL_PURGEABLE_APPLE 0x8A1D
+
+typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint* params);
+typedef GLenum (GLAPIENTRY * PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option);
+typedef GLenum (GLAPIENTRY * PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option);
+
+#define glGetObjectParameterivAPPLE GLEW_GET_FUN(__glewGetObjectParameterivAPPLE)
+#define glObjectPurgeableAPPLE GLEW_GET_FUN(__glewObjectPurgeableAPPLE)
+#define glObjectUnpurgeableAPPLE GLEW_GET_FUN(__glewObjectUnpurgeableAPPLE)
+
+#define GLEW_APPLE_object_purgeable GLEW_GET_VAR(__GLEW_APPLE_object_purgeable)
+
+#endif /* GL_APPLE_object_purgeable */
+
+/* ------------------------- GL_APPLE_pixel_buffer ------------------------- */
+
+#ifndef GL_APPLE_pixel_buffer
+#define GL_APPLE_pixel_buffer 1
+
+#define GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE 0x8A10
+
+#define GLEW_APPLE_pixel_buffer GLEW_GET_VAR(__GLEW_APPLE_pixel_buffer)
+
+#endif /* GL_APPLE_pixel_buffer */
+
+/* ---------------------------- GL_APPLE_rgb_422 --------------------------- */
+
+#ifndef GL_APPLE_rgb_422
+#define GL_APPLE_rgb_422 1
+
+#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB
+#define GL_RGB_422_APPLE 0x8A1F
+
+#define GLEW_APPLE_rgb_422 GLEW_GET_VAR(__GLEW_APPLE_rgb_422)
+
+#endif /* GL_APPLE_rgb_422 */
+
+/* --------------------------- GL_APPLE_row_bytes -------------------------- */
+
+#ifndef GL_APPLE_row_bytes
+#define GL_APPLE_row_bytes 1
+
+#define GL_PACK_ROW_BYTES_APPLE 0x8A15
+#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16
+
+#define GLEW_APPLE_row_bytes GLEW_GET_VAR(__GLEW_APPLE_row_bytes)
+
+#endif /* GL_APPLE_row_bytes */
+
+/* ------------------------ GL_APPLE_specular_vector ----------------------- */
+
+#ifndef GL_APPLE_specular_vector
+#define GL_APPLE_specular_vector 1
+
+#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0
+
+#define GLEW_APPLE_specular_vector GLEW_GET_VAR(__GLEW_APPLE_specular_vector)
+
+#endif /* GL_APPLE_specular_vector */
+
+/* ------------------------- GL_APPLE_texture_range ------------------------ */
+
+#ifndef GL_APPLE_texture_range
+#define GL_APPLE_texture_range 1
+
+#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7
+#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8
+#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC
+#define GL_STORAGE_PRIVATE_APPLE 0x85BD
+#define GL_STORAGE_CACHED_APPLE 0x85BE
+#define GL_STORAGE_SHARED_APPLE 0x85BF
+
+typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, GLvoid **params);
+typedef void (GLAPIENTRY * PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, GLvoid *pointer);
+
+#define glGetTexParameterPointervAPPLE GLEW_GET_FUN(__glewGetTexParameterPointervAPPLE)
+#define glTextureRangeAPPLE GLEW_GET_FUN(__glewTextureRangeAPPLE)
+
+#define GLEW_APPLE_texture_range GLEW_GET_VAR(__GLEW_APPLE_texture_range)
+
+#endif /* GL_APPLE_texture_range */
+
+/* ------------------------ GL_APPLE_transform_hint ------------------------ */
+
+#ifndef GL_APPLE_transform_hint
+#define GL_APPLE_transform_hint 1
+
+#define GL_TRANSFORM_HINT_APPLE 0x85B1
+
+#define GLEW_APPLE_transform_hint GLEW_GET_VAR(__GLEW_APPLE_transform_hint)
+
+#endif /* GL_APPLE_transform_hint */
+
+/* ---------------------- GL_APPLE_vertex_array_object --------------------- */
+
+#ifndef GL_APPLE_vertex_array_object
+#define GL_APPLE_vertex_array_object 1
+
+#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5
+
+typedef void (GLAPIENTRY * PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array);
+typedef void (GLAPIENTRY * PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint* arrays);
+typedef void (GLAPIENTRY * PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint* arrays);
+typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array);
+
+#define glBindVertexArrayAPPLE GLEW_GET_FUN(__glewBindVertexArrayAPPLE)
+#define glDeleteVertexArraysAPPLE GLEW_GET_FUN(__glewDeleteVertexArraysAPPLE)
+#define glGenVertexArraysAPPLE GLEW_GET_FUN(__glewGenVertexArraysAPPLE)
+#define glIsVertexArrayAPPLE GLEW_GET_FUN(__glewIsVertexArrayAPPLE)
+
+#define GLEW_APPLE_vertex_array_object GLEW_GET_VAR(__GLEW_APPLE_vertex_array_object)
+
+#endif /* GL_APPLE_vertex_array_object */
+
+/* ---------------------- GL_APPLE_vertex_array_range ---------------------- */
+
+#ifndef GL_APPLE_vertex_array_range
+#define GL_APPLE_vertex_array_range 1
+
+#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E
+#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F
+#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE 0x8520
+#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521
+#define GL_STORAGE_CLIENT_APPLE 0x85B4
+#define GL_STORAGE_CACHED_APPLE 0x85BE
+#define GL_STORAGE_SHARED_APPLE 0x85BF
+
+typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void* pointer);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void* pointer);
+
+#define glFlushVertexArrayRangeAPPLE GLEW_GET_FUN(__glewFlushVertexArrayRangeAPPLE)
+#define glVertexArrayParameteriAPPLE GLEW_GET_FUN(__glewVertexArrayParameteriAPPLE)
+#define glVertexArrayRangeAPPLE GLEW_GET_FUN(__glewVertexArrayRangeAPPLE)
+
+#define GLEW_APPLE_vertex_array_range GLEW_GET_VAR(__GLEW_APPLE_vertex_array_range)
+
+#endif /* GL_APPLE_vertex_array_range */
+
+/* ------------------- GL_APPLE_vertex_program_evaluators ------------------ */
+
+#ifndef GL_APPLE_vertex_program_evaluators
+#define GL_APPLE_vertex_program_evaluators 1
+
+#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00
+#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01
+#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02
+#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03
+#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04
+#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05
+#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06
+#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07
+#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08
+#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09
+
+typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname);
+typedef void (GLAPIENTRY * PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname);
+typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname);
+typedef void (GLAPIENTRY * PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points);
+typedef void (GLAPIENTRY * PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points);
+typedef void (GLAPIENTRY * PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points);
+typedef void (GLAPIENTRY * PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points);
+
+#define glDisableVertexAttribAPPLE GLEW_GET_FUN(__glewDisableVertexAttribAPPLE)
+#define glEnableVertexAttribAPPLE GLEW_GET_FUN(__glewEnableVertexAttribAPPLE)
+#define glIsVertexAttribEnabledAPPLE GLEW_GET_FUN(__glewIsVertexAttribEnabledAPPLE)
+#define glMapVertexAttrib1dAPPLE GLEW_GET_FUN(__glewMapVertexAttrib1dAPPLE)
+#define glMapVertexAttrib1fAPPLE GLEW_GET_FUN(__glewMapVertexAttrib1fAPPLE)
+#define glMapVertexAttrib2dAPPLE GLEW_GET_FUN(__glewMapVertexAttrib2dAPPLE)
+#define glMapVertexAttrib2fAPPLE GLEW_GET_FUN(__glewMapVertexAttrib2fAPPLE)
+
+#define GLEW_APPLE_vertex_program_evaluators GLEW_GET_VAR(__GLEW_APPLE_vertex_program_evaluators)
+
+#endif /* GL_APPLE_vertex_program_evaluators */
+
+/* --------------------------- GL_APPLE_ycbcr_422 -------------------------- */
+
+#ifndef GL_APPLE_ycbcr_422
+#define GL_APPLE_ycbcr_422 1
+
+#define GL_YCBCR_422_APPLE 0x85B9
+#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB
+
+#define GLEW_APPLE_ycbcr_422 GLEW_GET_VAR(__GLEW_APPLE_ycbcr_422)
+
+#endif /* GL_APPLE_ycbcr_422 */
+
+/* ------------------------ GL_ARB_ES2_compatibility ----------------------- */
+
+#ifndef GL_ARB_ES2_compatibility
+#define GL_ARB_ES2_compatibility 1
+
+#define GL_FIXED 0x140C
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
+#define GL_LOW_FLOAT 0x8DF0
+#define GL_MEDIUM_FLOAT 0x8DF1
+#define GL_HIGH_FLOAT 0x8DF2
+#define GL_LOW_INT 0x8DF3
+#define GL_MEDIUM_INT 0x8DF4
+#define GL_HIGH_INT 0x8DF5
+#define GL_SHADER_BINARY_FORMATS 0x8DF8
+#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9
+#define GL_SHADER_COMPILER 0x8DFA
+#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
+#define GL_MAX_VARYING_VECTORS 0x8DFC
+#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD
+
+typedef void (GLAPIENTRY * PFNGLCLEARDEPTHFPROC) (GLclampf d);
+typedef void (GLAPIENTRY * PFNGLDEPTHRANGEFPROC) (GLclampf n, GLclampf f);
+typedef void (GLAPIENTRY * PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint* range, GLint *precision);
+typedef void (GLAPIENTRY * PFNGLRELEASESHADERCOMPILERPROC) (void);
+typedef void (GLAPIENTRY * PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint* shaders, GLenum binaryformat, const GLvoid*binary, GLsizei length);
+
+#define glClearDepthf GLEW_GET_FUN(__glewClearDepthf)
+#define glDepthRangef GLEW_GET_FUN(__glewDepthRangef)
+#define glGetShaderPrecisionFormat GLEW_GET_FUN(__glewGetShaderPrecisionFormat)
+#define glReleaseShaderCompiler GLEW_GET_FUN(__glewReleaseShaderCompiler)
+#define glShaderBinary GLEW_GET_FUN(__glewShaderBinary)
+
+#define GLEW_ARB_ES2_compatibility GLEW_GET_VAR(__GLEW_ARB_ES2_compatibility)
+
+#endif /* GL_ARB_ES2_compatibility */
+
+/* -------------------------- GL_ARB_base_instance ------------------------- */
+
+#ifndef GL_ARB_base_instance
+#define GL_ARB_base_instance 1
+
+typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount, GLuint baseinstance);
+typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount, GLuint baseinstance);
+typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount, GLint basevertex, GLuint baseinstance);
+
+#define glDrawArraysInstancedBaseInstance GLEW_GET_FUN(__glewDrawArraysInstancedBaseInstance)
+#define glDrawElementsInstancedBaseInstance GLEW_GET_FUN(__glewDrawElementsInstancedBaseInstance)
+#define glDrawElementsInstancedBaseVertexBaseInstance GLEW_GET_FUN(__glewDrawElementsInstancedBaseVertexBaseInstance)
+
+#define GLEW_ARB_base_instance GLEW_GET_VAR(__GLEW_ARB_base_instance)
+
+#endif /* GL_ARB_base_instance */
+
+/* ----------------------- GL_ARB_blend_func_extended ---------------------- */
+
+#ifndef GL_ARB_blend_func_extended
+#define GL_ARB_blend_func_extended 1
+
+#define GL_SRC1_COLOR 0x88F9
+#define GL_ONE_MINUS_SRC1_COLOR 0x88FA
+#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB
+#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC
+
+typedef void (GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const char * name);
+typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const char * name);
+
+#define glBindFragDataLocationIndexed GLEW_GET_FUN(__glewBindFragDataLocationIndexed)
+#define glGetFragDataIndex GLEW_GET_FUN(__glewGetFragDataIndex)
+
+#define GLEW_ARB_blend_func_extended GLEW_GET_VAR(__GLEW_ARB_blend_func_extended)
+
+#endif /* GL_ARB_blend_func_extended */
+
+/* ---------------------------- GL_ARB_cl_event ---------------------------- */
+
+#ifndef GL_ARB_cl_event
+#define GL_ARB_cl_event 1
+
+#define GL_SYNC_CL_EVENT_ARB 0x8240
+#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241
+
+typedef struct _cl_context *cl_context;
+typedef struct _cl_event *cl_event;
+
+typedef GLsync (GLAPIENTRY * PFNGLCREATESYNCFROMCLEVENTARBPROC) (cl_context context, cl_event event, GLbitfield flags);
+
+#define glCreateSyncFromCLeventARB GLEW_GET_FUN(__glewCreateSyncFromCLeventARB)
+
+#define GLEW_ARB_cl_event GLEW_GET_VAR(__GLEW_ARB_cl_event)
+
+#endif /* GL_ARB_cl_event */
+
+/* ----------------------- GL_ARB_color_buffer_float ----------------------- */
+
+#ifndef GL_ARB_color_buffer_float
+#define GL_ARB_color_buffer_float 1
+
+#define GL_RGBA_FLOAT_MODE_ARB 0x8820
+#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A
+#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B
+#define GL_CLAMP_READ_COLOR_ARB 0x891C
+#define GL_FIXED_ONLY_ARB 0x891D
+
+typedef void (GLAPIENTRY * PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp);
+
+#define glClampColorARB GLEW_GET_FUN(__glewClampColorARB)
+
+#define GLEW_ARB_color_buffer_float GLEW_GET_VAR(__GLEW_ARB_color_buffer_float)
+
+#endif /* GL_ARB_color_buffer_float */
+
+/* -------------------------- GL_ARB_compatibility ------------------------- */
+
+#ifndef GL_ARB_compatibility
+#define GL_ARB_compatibility 1
+
+#define GLEW_ARB_compatibility GLEW_GET_VAR(__GLEW_ARB_compatibility)
+
+#endif /* GL_ARB_compatibility */
+
+/* ---------------- GL_ARB_compressed_texture_pixel_storage ---------------- */
+
+#ifndef GL_ARB_compressed_texture_pixel_storage
+#define GL_ARB_compressed_texture_pixel_storage 1
+
+#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127
+#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128
+#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129
+#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A
+#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B
+#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C
+#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D
+#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E
+
+#define GLEW_ARB_compressed_texture_pixel_storage GLEW_GET_VAR(__GLEW_ARB_compressed_texture_pixel_storage)
+
+#endif /* GL_ARB_compressed_texture_pixel_storage */
+
+/* ----------------------- GL_ARB_conservative_depth ----------------------- */
+
+#ifndef GL_ARB_conservative_depth
+#define GL_ARB_conservative_depth 1
+
+#define GLEW_ARB_conservative_depth GLEW_GET_VAR(__GLEW_ARB_conservative_depth)
+
+#endif /* GL_ARB_conservative_depth */
+
+/* --------------------------- GL_ARB_copy_buffer -------------------------- */
+
+#ifndef GL_ARB_copy_buffer
+#define GL_ARB_copy_buffer 1
+
+#define GL_COPY_READ_BUFFER 0x8F36
+#define GL_COPY_WRITE_BUFFER 0x8F37
+
+typedef void (GLAPIENTRY * PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintptr writeoffset, GLsizeiptr size);
+
+#define glCopyBufferSubData GLEW_GET_FUN(__glewCopyBufferSubData)
+
+#define GLEW_ARB_copy_buffer GLEW_GET_VAR(__GLEW_ARB_copy_buffer)
+
+#endif /* GL_ARB_copy_buffer */
+
+/* -------------------------- GL_ARB_debug_output -------------------------- */
+
+#ifndef GL_ARB_debug_output
+#define GL_ARB_debug_output 1
+
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245
+#define GL_DEBUG_SOURCE_API_ARB 0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249
+#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A
+#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B
+#define GL_DEBUG_TYPE_ERROR_ARB 0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E
+#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250
+#define GL_DEBUG_TYPE_OTHER_ARB 0x8251
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144
+#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145
+#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147
+#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148
+
+typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam);
+
+typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, void* userParam);
+typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled);
+typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char* buf);
+typedef GLuint (GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, char* messageLog);
+
+#define glDebugMessageCallbackARB GLEW_GET_FUN(__glewDebugMessageCallbackARB)
+#define glDebugMessageControlARB GLEW_GET_FUN(__glewDebugMessageControlARB)
+#define glDebugMessageInsertARB GLEW_GET_FUN(__glewDebugMessageInsertARB)
+#define glGetDebugMessageLogARB GLEW_GET_FUN(__glewGetDebugMessageLogARB)
+
+#define GLEW_ARB_debug_output GLEW_GET_VAR(__GLEW_ARB_debug_output)
+
+#endif /* GL_ARB_debug_output */
+
+/* ----------------------- GL_ARB_depth_buffer_float ----------------------- */
+
+#ifndef GL_ARB_depth_buffer_float
+#define GL_ARB_depth_buffer_float 1
+
+#define GL_DEPTH_COMPONENT32F 0x8CAC
+#define GL_DEPTH32F_STENCIL8 0x8CAD
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
+
+#define GLEW_ARB_depth_buffer_float GLEW_GET_VAR(__GLEW_ARB_depth_buffer_float)
+
+#endif /* GL_ARB_depth_buffer_float */
+
+/* --------------------------- GL_ARB_depth_clamp -------------------------- */
+
+#ifndef GL_ARB_depth_clamp
+#define GL_ARB_depth_clamp 1
+
+#define GL_DEPTH_CLAMP 0x864F
+
+#define GLEW_ARB_depth_clamp GLEW_GET_VAR(__GLEW_ARB_depth_clamp)
+
+#endif /* GL_ARB_depth_clamp */
+
+/* -------------------------- GL_ARB_depth_texture ------------------------- */
+
+#ifndef GL_ARB_depth_texture
+#define GL_ARB_depth_texture 1
+
+#define GL_DEPTH_COMPONENT16_ARB 0x81A5
+#define GL_DEPTH_COMPONENT24_ARB 0x81A6
+#define GL_DEPTH_COMPONENT32_ARB 0x81A7
+#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A
+#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B
+
+#define GLEW_ARB_depth_texture GLEW_GET_VAR(__GLEW_ARB_depth_texture)
+
+#endif /* GL_ARB_depth_texture */
+
+/* -------------------------- GL_ARB_draw_buffers -------------------------- */
+
+#ifndef GL_ARB_draw_buffers
+#define GL_ARB_draw_buffers 1
+
+#define GL_MAX_DRAW_BUFFERS_ARB 0x8824
+#define GL_DRAW_BUFFER0_ARB 0x8825
+#define GL_DRAW_BUFFER1_ARB 0x8826
+#define GL_DRAW_BUFFER2_ARB 0x8827
+#define GL_DRAW_BUFFER3_ARB 0x8828
+#define GL_DRAW_BUFFER4_ARB 0x8829
+#define GL_DRAW_BUFFER5_ARB 0x882A
+#define GL_DRAW_BUFFER6_ARB 0x882B
+#define GL_DRAW_BUFFER7_ARB 0x882C
+#define GL_DRAW_BUFFER8_ARB 0x882D
+#define GL_DRAW_BUFFER9_ARB 0x882E
+#define GL_DRAW_BUFFER10_ARB 0x882F
+#define GL_DRAW_BUFFER11_ARB 0x8830
+#define GL_DRAW_BUFFER12_ARB 0x8831
+#define GL_DRAW_BUFFER13_ARB 0x8832
+#define GL_DRAW_BUFFER14_ARB 0x8833
+#define GL_DRAW_BUFFER15_ARB 0x8834
+
+typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum* bufs);
+
+#define glDrawBuffersARB GLEW_GET_FUN(__glewDrawBuffersARB)
+
+#define GLEW_ARB_draw_buffers GLEW_GET_VAR(__GLEW_ARB_draw_buffers)
+
+#endif /* GL_ARB_draw_buffers */
+
+/* ----------------------- GL_ARB_draw_buffers_blend ----------------------- */
+
+#ifndef GL_ARB_draw_buffers_blend
+#define GL_ARB_draw_buffers_blend 1
+
+typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode);
+typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (GLAPIENTRY * PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst);
+
+#define glBlendEquationSeparateiARB GLEW_GET_FUN(__glewBlendEquationSeparateiARB)
+#define glBlendEquationiARB GLEW_GET_FUN(__glewBlendEquationiARB)
+#define glBlendFuncSeparateiARB GLEW_GET_FUN(__glewBlendFuncSeparateiARB)
+#define glBlendFunciARB GLEW_GET_FUN(__glewBlendFunciARB)
+
+#define GLEW_ARB_draw_buffers_blend GLEW_GET_VAR(__GLEW_ARB_draw_buffers_blend)
+
+#endif /* GL_ARB_draw_buffers_blend */
+
+/* -------------------- GL_ARB_draw_elements_base_vertex ------------------- */
+
+#ifndef GL_ARB_draw_elements_base_vertex
+#define GL_ARB_draw_elements_base_vertex 1
+
+typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, void* indices, GLint basevertex);
+typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount, GLint basevertex);
+typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, void* indices, GLint basevertex);
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei* count, GLenum type, GLvoid**indices, GLsizei primcount, GLint *basevertex);
+
+#define glDrawElementsBaseVertex GLEW_GET_FUN(__glewDrawElementsBaseVertex)
+#define glDrawElementsInstancedBaseVertex GLEW_GET_FUN(__glewDrawElementsInstancedBaseVertex)
+#define glDrawRangeElementsBaseVertex GLEW_GET_FUN(__glewDrawRangeElementsBaseVertex)
+#define glMultiDrawElementsBaseVertex GLEW_GET_FUN(__glewMultiDrawElementsBaseVertex)
+
+#define GLEW_ARB_draw_elements_base_vertex GLEW_GET_VAR(__GLEW_ARB_draw_elements_base_vertex)
+
+#endif /* GL_ARB_draw_elements_base_vertex */
+
+/* -------------------------- GL_ARB_draw_indirect ------------------------- */
+
+#ifndef GL_ARB_draw_indirect
+#define GL_ARB_draw_indirect 1
+
+#define GL_DRAW_INDIRECT_BUFFER 0x8F3F
+#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43
+
+typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void* indirect);
+typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void* indirect);
+
+#define glDrawArraysIndirect GLEW_GET_FUN(__glewDrawArraysIndirect)
+#define glDrawElementsIndirect GLEW_GET_FUN(__glewDrawElementsIndirect)
+
+#define GLEW_ARB_draw_indirect GLEW_GET_VAR(__GLEW_ARB_draw_indirect)
+
+#endif /* GL_ARB_draw_indirect */
+
+/* ------------------------- GL_ARB_draw_instanced ------------------------- */
+
+#ifndef GL_ARB_draw_instanced
+#define GL_ARB_draw_instanced 1
+
+#define GLEW_ARB_draw_instanced GLEW_GET_VAR(__GLEW_ARB_draw_instanced)
+
+#endif /* GL_ARB_draw_instanced */
+
+/* -------------------- GL_ARB_explicit_attrib_location -------------------- */
+
+#ifndef GL_ARB_explicit_attrib_location
+#define GL_ARB_explicit_attrib_location 1
+
+#define GLEW_ARB_explicit_attrib_location GLEW_GET_VAR(__GLEW_ARB_explicit_attrib_location)
+
+#endif /* GL_ARB_explicit_attrib_location */
+
+/* ------------------- GL_ARB_fragment_coord_conventions ------------------- */
+
+#ifndef GL_ARB_fragment_coord_conventions
+#define GL_ARB_fragment_coord_conventions 1
+
+#define GLEW_ARB_fragment_coord_conventions GLEW_GET_VAR(__GLEW_ARB_fragment_coord_conventions)
+
+#endif /* GL_ARB_fragment_coord_conventions */
+
+/* ------------------------ GL_ARB_fragment_program ------------------------ */
+
+#ifndef GL_ARB_fragment_program
+#define GL_ARB_fragment_program 1
+
+#define GL_FRAGMENT_PROGRAM_ARB 0x8804
+#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805
+#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806
+#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807
+#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808
+#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809
+#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A
+#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B
+#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C
+#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D
+#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E
+#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F
+#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810
+#define GL_MAX_TEXTURE_COORDS_ARB 0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872
+
+#define GLEW_ARB_fragment_program GLEW_GET_VAR(__GLEW_ARB_fragment_program)
+
+#endif /* GL_ARB_fragment_program */
+
+/* --------------------- GL_ARB_fragment_program_shadow -------------------- */
+
+#ifndef GL_ARB_fragment_program_shadow
+#define GL_ARB_fragment_program_shadow 1
+
+#define GLEW_ARB_fragment_program_shadow GLEW_GET_VAR(__GLEW_ARB_fragment_program_shadow)
+
+#endif /* GL_ARB_fragment_program_shadow */
+
+/* ------------------------- GL_ARB_fragment_shader ------------------------ */
+
+#ifndef GL_ARB_fragment_shader
+#define GL_ARB_fragment_shader 1
+
+#define GL_FRAGMENT_SHADER_ARB 0x8B30
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B
+
+#define GLEW_ARB_fragment_shader GLEW_GET_VAR(__GLEW_ARB_fragment_shader)
+
+#endif /* GL_ARB_fragment_shader */
+
+/* ----------------------- GL_ARB_framebuffer_object ----------------------- */
+
+#ifndef GL_ARB_framebuffer_object
+#define GL_ARB_framebuffer_object 1
+
+#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
+#define GL_FRAMEBUFFER_DEFAULT 0x8218
+#define GL_FRAMEBUFFER_UNDEFINED 0x8219
+#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A
+#define GL_INDEX 0x8222
+#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
+#define GL_DEPTH_STENCIL 0x84F9
+#define GL_UNSIGNED_INT_24_8 0x84FA
+#define GL_DEPTH24_STENCIL8 0x88F0
+#define GL_TEXTURE_STENCIL_SIZE 0x88F1
+#define GL_UNSIGNED_NORMALIZED 0x8C17
+#define GL_SRGB 0x8C40
+#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_RENDERBUFFER_BINDING 0x8CA7
+#define GL_READ_FRAMEBUFFER 0x8CA8
+#define GL_DRAW_FRAMEBUFFER 0x8CA9
+#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA
+#define GL_RENDERBUFFER_SAMPLES 0x8CAB
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
+#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC
+#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
+#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF
+#define GL_COLOR_ATTACHMENT0 0x8CE0
+#define GL_COLOR_ATTACHMENT1 0x8CE1
+#define GL_COLOR_ATTACHMENT2 0x8CE2
+#define GL_COLOR_ATTACHMENT3 0x8CE3
+#define GL_COLOR_ATTACHMENT4 0x8CE4
+#define GL_COLOR_ATTACHMENT5 0x8CE5
+#define GL_COLOR_ATTACHMENT6 0x8CE6
+#define GL_COLOR_ATTACHMENT7 0x8CE7
+#define GL_COLOR_ATTACHMENT8 0x8CE8
+#define GL_COLOR_ATTACHMENT9 0x8CE9
+#define GL_COLOR_ATTACHMENT10 0x8CEA
+#define GL_COLOR_ATTACHMENT11 0x8CEB
+#define GL_COLOR_ATTACHMENT12 0x8CEC
+#define GL_COLOR_ATTACHMENT13 0x8CED
+#define GL_COLOR_ATTACHMENT14 0x8CEE
+#define GL_COLOR_ATTACHMENT15 0x8CEF
+#define GL_DEPTH_ATTACHMENT 0x8D00
+#define GL_STENCIL_ATTACHMENT 0x8D20
+#define GL_FRAMEBUFFER 0x8D40
+#define GL_RENDERBUFFER 0x8D41
+#define GL_RENDERBUFFER_WIDTH 0x8D42
+#define GL_RENDERBUFFER_HEIGHT 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44
+#define GL_STENCIL_INDEX1 0x8D46
+#define GL_STENCIL_INDEX4 0x8D47
+#define GL_STENCIL_INDEX8 0x8D48
+#define GL_STENCIL_INDEX16 0x8D49
+#define GL_RENDERBUFFER_RED_SIZE 0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
+#define GL_MAX_SAMPLES 0x8D57
+
+typedef void (GLAPIENTRY * PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
+typedef void (GLAPIENTRY * PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);
+typedef void (GLAPIENTRY * PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef GLenum (GLAPIENTRY * PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint* framebuffers);
+typedef void (GLAPIENTRY * PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint* renderbuffers);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint layer);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target,GLenum attachment, GLuint texture,GLint level,GLint layer);
+typedef void (GLAPIENTRY * PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint* framebuffers);
+typedef void (GLAPIENTRY * PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint* renderbuffers);
+typedef void (GLAPIENTRY * PFNGLGENERATEMIPMAPPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);
+typedef GLboolean (GLAPIENTRY * PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);
+typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+
+#define glBindFramebuffer GLEW_GET_FUN(__glewBindFramebuffer)
+#define glBindRenderbuffer GLEW_GET_FUN(__glewBindRenderbuffer)
+#define glBlitFramebuffer GLEW_GET_FUN(__glewBlitFramebuffer)
+#define glCheckFramebufferStatus GLEW_GET_FUN(__glewCheckFramebufferStatus)
+#define glDeleteFramebuffers GLEW_GET_FUN(__glewDeleteFramebuffers)
+#define glDeleteRenderbuffers GLEW_GET_FUN(__glewDeleteRenderbuffers)
+#define glFramebufferRenderbuffer GLEW_GET_FUN(__glewFramebufferRenderbuffer)
+#define glFramebufferTexture1D GLEW_GET_FUN(__glewFramebufferTexture1D)
+#define glFramebufferTexture2D GLEW_GET_FUN(__glewFramebufferTexture2D)
+#define glFramebufferTexture3D GLEW_GET_FUN(__glewFramebufferTexture3D)
+#define glFramebufferTextureLayer GLEW_GET_FUN(__glewFramebufferTextureLayer)
+#define glGenFramebuffers GLEW_GET_FUN(__glewGenFramebuffers)
+#define glGenRenderbuffers GLEW_GET_FUN(__glewGenRenderbuffers)
+#define glGenerateMipmap GLEW_GET_FUN(__glewGenerateMipmap)
+#define glGetFramebufferAttachmentParameteriv GLEW_GET_FUN(__glewGetFramebufferAttachmentParameteriv)
+#define glGetRenderbufferParameteriv GLEW_GET_FUN(__glewGetRenderbufferParameteriv)
+#define glIsFramebuffer GLEW_GET_FUN(__glewIsFramebuffer)
+#define glIsRenderbuffer GLEW_GET_FUN(__glewIsRenderbuffer)
+#define glRenderbufferStorage GLEW_GET_FUN(__glewRenderbufferStorage)
+#define glRenderbufferStorageMultisample GLEW_GET_FUN(__glewRenderbufferStorageMultisample)
+
+#define GLEW_ARB_framebuffer_object GLEW_GET_VAR(__GLEW_ARB_framebuffer_object)
+
+#endif /* GL_ARB_framebuffer_object */
+
+/* ------------------------ GL_ARB_framebuffer_sRGB ------------------------ */
+
+#ifndef GL_ARB_framebuffer_sRGB
+#define GL_ARB_framebuffer_sRGB 1
+
+#define GL_FRAMEBUFFER_SRGB 0x8DB9
+
+#define GLEW_ARB_framebuffer_sRGB GLEW_GET_VAR(__GLEW_ARB_framebuffer_sRGB)
+
+#endif /* GL_ARB_framebuffer_sRGB */
+
+/* ------------------------ GL_ARB_geometry_shader4 ------------------------ */
+
+#ifndef GL_ARB_geometry_shader4
+#define GL_ARB_geometry_shader4 1
+
+#define GL_LINES_ADJACENCY_ARB 0xA
+#define GL_LINE_STRIP_ADJACENCY_ARB 0xB
+#define GL_TRIANGLES_ADJACENCY_ARB 0xC
+#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0xD
+#define GL_PROGRAM_POINT_SIZE_ARB 0x8642
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9
+#define GL_GEOMETRY_SHADER_ARB 0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA
+#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1
+
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value);
+
+#define glFramebufferTextureARB GLEW_GET_FUN(__glewFramebufferTextureARB)
+#define glFramebufferTextureFaceARB GLEW_GET_FUN(__glewFramebufferTextureFaceARB)
+#define glFramebufferTextureLayerARB GLEW_GET_FUN(__glewFramebufferTextureLayerARB)
+#define glProgramParameteriARB GLEW_GET_FUN(__glewProgramParameteriARB)
+
+#define GLEW_ARB_geometry_shader4 GLEW_GET_VAR(__GLEW_ARB_geometry_shader4)
+
+#endif /* GL_ARB_geometry_shader4 */
+
+/* ----------------------- GL_ARB_get_program_binary ----------------------- */
+
+#ifndef GL_ARB_get_program_binary
+#define GL_ARB_get_program_binary 1
+
+#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
+#define GL_PROGRAM_BINARY_LENGTH 0x8741
+#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
+#define GL_PROGRAM_BINARY_FORMATS 0x87FF
+
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei* length, GLenum *binaryFormat, GLvoid*binary);
+typedef void (GLAPIENTRY * PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void* binary, GLsizei length);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value);
+
+#define glGetProgramBinary GLEW_GET_FUN(__glewGetProgramBinary)
+#define glProgramBinary GLEW_GET_FUN(__glewProgramBinary)
+#define glProgramParameteri GLEW_GET_FUN(__glewProgramParameteri)
+
+#define GLEW_ARB_get_program_binary GLEW_GET_VAR(__GLEW_ARB_get_program_binary)
+
+#endif /* GL_ARB_get_program_binary */
+
+/* --------------------------- GL_ARB_gpu_shader5 -------------------------- */
+
+#ifndef GL_ARB_gpu_shader5
+#define GL_ARB_gpu_shader5 1
+
+#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D
+#define GL_MAX_VERTEX_STREAMS 0x8E71
+
+#define GLEW_ARB_gpu_shader5 GLEW_GET_VAR(__GLEW_ARB_gpu_shader5)
+
+#endif /* GL_ARB_gpu_shader5 */
+
+/* ------------------------- GL_ARB_gpu_shader_fp64 ------------------------ */
+
+#ifndef GL_ARB_gpu_shader_fp64
+#define GL_ARB_gpu_shader_fp64 1
+
+#define GL_DOUBLE_MAT2 0x8F46
+#define GL_DOUBLE_MAT3 0x8F47
+#define GL_DOUBLE_MAT4 0x8F48
+#define GL_DOUBLE_MAT2x3 0x8F49
+#define GL_DOUBLE_MAT2x4 0x8F4A
+#define GL_DOUBLE_MAT3x2 0x8F4B
+#define GL_DOUBLE_MAT3x4 0x8F4C
+#define GL_DOUBLE_MAT4x2 0x8F4D
+#define GL_DOUBLE_MAT4x3 0x8F4E
+#define GL_DOUBLE_VEC2 0x8FFC
+#define GL_DOUBLE_VEC3 0x8FFD
+#define GL_DOUBLE_VEC4 0x8FFE
+
+typedef void (GLAPIENTRY * PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1DPROC) (GLint location, GLdouble x);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+
+#define glGetUniformdv GLEW_GET_FUN(__glewGetUniformdv)
+#define glProgramUniform1dEXT GLEW_GET_FUN(__glewProgramUniform1dEXT)
+#define glProgramUniform1dvEXT GLEW_GET_FUN(__glewProgramUniform1dvEXT)
+#define glProgramUniform2dEXT GLEW_GET_FUN(__glewProgramUniform2dEXT)
+#define glProgramUniform2dvEXT GLEW_GET_FUN(__glewProgramUniform2dvEXT)
+#define glProgramUniform3dEXT GLEW_GET_FUN(__glewProgramUniform3dEXT)
+#define glProgramUniform3dvEXT GLEW_GET_FUN(__glewProgramUniform3dvEXT)
+#define glProgramUniform4dEXT GLEW_GET_FUN(__glewProgramUniform4dEXT)
+#define glProgramUniform4dvEXT GLEW_GET_FUN(__glewProgramUniform4dvEXT)
+#define glProgramUniformMatrix2dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2dvEXT)
+#define glProgramUniformMatrix2x3dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x3dvEXT)
+#define glProgramUniformMatrix2x4dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x4dvEXT)
+#define glProgramUniformMatrix3dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3dvEXT)
+#define glProgramUniformMatrix3x2dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x2dvEXT)
+#define glProgramUniformMatrix3x4dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x4dvEXT)
+#define glProgramUniformMatrix4dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4dvEXT)
+#define glProgramUniformMatrix4x2dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x2dvEXT)
+#define glProgramUniformMatrix4x3dvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x3dvEXT)
+#define glUniform1d GLEW_GET_FUN(__glewUniform1d)
+#define glUniform1dv GLEW_GET_FUN(__glewUniform1dv)
+#define glUniform2d GLEW_GET_FUN(__glewUniform2d)
+#define glUniform2dv GLEW_GET_FUN(__glewUniform2dv)
+#define glUniform3d GLEW_GET_FUN(__glewUniform3d)
+#define glUniform3dv GLEW_GET_FUN(__glewUniform3dv)
+#define glUniform4d GLEW_GET_FUN(__glewUniform4d)
+#define glUniform4dv GLEW_GET_FUN(__glewUniform4dv)
+#define glUniformMatrix2dv GLEW_GET_FUN(__glewUniformMatrix2dv)
+#define glUniformMatrix2x3dv GLEW_GET_FUN(__glewUniformMatrix2x3dv)
+#define glUniformMatrix2x4dv GLEW_GET_FUN(__glewUniformMatrix2x4dv)
+#define glUniformMatrix3dv GLEW_GET_FUN(__glewUniformMatrix3dv)
+#define glUniformMatrix3x2dv GLEW_GET_FUN(__glewUniformMatrix3x2dv)
+#define glUniformMatrix3x4dv GLEW_GET_FUN(__glewUniformMatrix3x4dv)
+#define glUniformMatrix4dv GLEW_GET_FUN(__glewUniformMatrix4dv)
+#define glUniformMatrix4x2dv GLEW_GET_FUN(__glewUniformMatrix4x2dv)
+#define glUniformMatrix4x3dv GLEW_GET_FUN(__glewUniformMatrix4x3dv)
+
+#define GLEW_ARB_gpu_shader_fp64 GLEW_GET_VAR(__GLEW_ARB_gpu_shader_fp64)
+
+#endif /* GL_ARB_gpu_shader_fp64 */
+
+/* ------------------------ GL_ARB_half_float_pixel ------------------------ */
+
+#ifndef GL_ARB_half_float_pixel
+#define GL_ARB_half_float_pixel 1
+
+#define GL_HALF_FLOAT_ARB 0x140B
+
+#define GLEW_ARB_half_float_pixel GLEW_GET_VAR(__GLEW_ARB_half_float_pixel)
+
+#endif /* GL_ARB_half_float_pixel */
+
+/* ------------------------ GL_ARB_half_float_vertex ----------------------- */
+
+#ifndef GL_ARB_half_float_vertex
+#define GL_ARB_half_float_vertex 1
+
+#define GL_HALF_FLOAT 0x140B
+
+#define GLEW_ARB_half_float_vertex GLEW_GET_VAR(__GLEW_ARB_half_float_vertex)
+
+#endif /* GL_ARB_half_float_vertex */
+
+/* ----------------------------- GL_ARB_imaging ---------------------------- */
+
+#ifndef GL_ARB_imaging
+#define GL_ARB_imaging 1
+
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_BLEND_COLOR 0x8005
+#define GL_FUNC_ADD 0x8006
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+#define GL_BLEND_EQUATION 0x8009
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_CONVOLUTION_1D 0x8010
+#define GL_CONVOLUTION_2D 0x8011
+#define GL_SEPARABLE_2D 0x8012
+#define GL_CONVOLUTION_BORDER_MODE 0x8013
+#define GL_CONVOLUTION_FILTER_SCALE 0x8014
+#define GL_CONVOLUTION_FILTER_BIAS 0x8015
+#define GL_REDUCE 0x8016
+#define GL_CONVOLUTION_FORMAT 0x8017
+#define GL_CONVOLUTION_WIDTH 0x8018
+#define GL_CONVOLUTION_HEIGHT 0x8019
+#define GL_MAX_CONVOLUTION_WIDTH 0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT 0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS 0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023
+#define GL_HISTOGRAM 0x8024
+#define GL_PROXY_HISTOGRAM 0x8025
+#define GL_HISTOGRAM_WIDTH 0x8026
+#define GL_HISTOGRAM_FORMAT 0x8027
+#define GL_HISTOGRAM_RED_SIZE 0x8028
+#define GL_HISTOGRAM_GREEN_SIZE 0x8029
+#define GL_HISTOGRAM_BLUE_SIZE 0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE 0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C
+#define GL_HISTOGRAM_SINK 0x802D
+#define GL_MINMAX 0x802E
+#define GL_MINMAX_FORMAT 0x802F
+#define GL_MINMAX_SINK 0x8030
+#define GL_TABLE_TOO_LARGE 0x8031
+#define GL_COLOR_MATRIX 0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB
+#define GL_COLOR_TABLE 0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2
+#define GL_PROXY_COLOR_TABLE 0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5
+#define GL_COLOR_TABLE_SCALE 0x80D6
+#define GL_COLOR_TABLE_BIAS 0x80D7
+#define GL_COLOR_TABLE_FORMAT 0x80D8
+#define GL_COLOR_TABLE_WIDTH 0x80D9
+#define GL_COLOR_TABLE_RED_SIZE 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF
+#define GL_IGNORE_BORDER 0x8150
+#define GL_CONSTANT_BORDER 0x8151
+#define GL_WRAP_BORDER 0x8152
+#define GL_REPLICATE_BORDER 0x8153
+#define GL_CONVOLUTION_BORDER_COLOR 0x8154
+
+typedef void (GLAPIENTRY * PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
+typedef void (GLAPIENTRY * PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);
+typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GLAPIENTRY * PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values);
+typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GLAPIENTRY * PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
+typedef void (GLAPIENTRY * PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (GLAPIENTRY * PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (GLAPIENTRY * PFNGLRESETHISTOGRAMPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLRESETMINMAXPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
+
+#define glColorSubTable GLEW_GET_FUN(__glewColorSubTable)
+#define glColorTable GLEW_GET_FUN(__glewColorTable)
+#define glColorTableParameterfv GLEW_GET_FUN(__glewColorTableParameterfv)
+#define glColorTableParameteriv GLEW_GET_FUN(__glewColorTableParameteriv)
+#define glConvolutionFilter1D GLEW_GET_FUN(__glewConvolutionFilter1D)
+#define glConvolutionFilter2D GLEW_GET_FUN(__glewConvolutionFilter2D)
+#define glConvolutionParameterf GLEW_GET_FUN(__glewConvolutionParameterf)
+#define glConvolutionParameterfv GLEW_GET_FUN(__glewConvolutionParameterfv)
+#define glConvolutionParameteri GLEW_GET_FUN(__glewConvolutionParameteri)
+#define glConvolutionParameteriv GLEW_GET_FUN(__glewConvolutionParameteriv)
+#define glCopyColorSubTable GLEW_GET_FUN(__glewCopyColorSubTable)
+#define glCopyColorTable GLEW_GET_FUN(__glewCopyColorTable)
+#define glCopyConvolutionFilter1D GLEW_GET_FUN(__glewCopyConvolutionFilter1D)
+#define glCopyConvolutionFilter2D GLEW_GET_FUN(__glewCopyConvolutionFilter2D)
+#define glGetColorTable GLEW_GET_FUN(__glewGetColorTable)
+#define glGetColorTableParameterfv GLEW_GET_FUN(__glewGetColorTableParameterfv)
+#define glGetColorTableParameteriv GLEW_GET_FUN(__glewGetColorTableParameteriv)
+#define glGetConvolutionFilter GLEW_GET_FUN(__glewGetConvolutionFilter)
+#define glGetConvolutionParameterfv GLEW_GET_FUN(__glewGetConvolutionParameterfv)
+#define glGetConvolutionParameteriv GLEW_GET_FUN(__glewGetConvolutionParameteriv)
+#define glGetHistogram GLEW_GET_FUN(__glewGetHistogram)
+#define glGetHistogramParameterfv GLEW_GET_FUN(__glewGetHistogramParameterfv)
+#define glGetHistogramParameteriv GLEW_GET_FUN(__glewGetHistogramParameteriv)
+#define glGetMinmax GLEW_GET_FUN(__glewGetMinmax)
+#define glGetMinmaxParameterfv GLEW_GET_FUN(__glewGetMinmaxParameterfv)
+#define glGetMinmaxParameteriv GLEW_GET_FUN(__glewGetMinmaxParameteriv)
+#define glGetSeparableFilter GLEW_GET_FUN(__glewGetSeparableFilter)
+#define glHistogram GLEW_GET_FUN(__glewHistogram)
+#define glMinmax GLEW_GET_FUN(__glewMinmax)
+#define glResetHistogram GLEW_GET_FUN(__glewResetHistogram)
+#define glResetMinmax GLEW_GET_FUN(__glewResetMinmax)
+#define glSeparableFilter2D GLEW_GET_FUN(__glewSeparableFilter2D)
+
+#define GLEW_ARB_imaging GLEW_GET_VAR(__GLEW_ARB_imaging)
+
+#endif /* GL_ARB_imaging */
+
+/* ------------------------ GL_ARB_instanced_arrays ------------------------ */
+
+#ifndef GL_ARB_instanced_arrays
+#define GL_ARB_instanced_arrays 1
+
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE
+
+typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor);
+
+#define glDrawArraysInstancedARB GLEW_GET_FUN(__glewDrawArraysInstancedARB)
+#define glDrawElementsInstancedARB GLEW_GET_FUN(__glewDrawElementsInstancedARB)
+#define glVertexAttribDivisorARB GLEW_GET_FUN(__glewVertexAttribDivisorARB)
+
+#define GLEW_ARB_instanced_arrays GLEW_GET_VAR(__GLEW_ARB_instanced_arrays)
+
+#endif /* GL_ARB_instanced_arrays */
+
+/* ---------------------- GL_ARB_internalformat_query ---------------------- */
+
+#ifndef GL_ARB_internalformat_query
+#define GL_ARB_internalformat_query 1
+
+#define GL_NUM_SAMPLE_COUNTS 0x9380
+
+typedef void (GLAPIENTRY * PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params);
+
+#define glGetInternalformativ GLEW_GET_FUN(__glewGetInternalformativ)
+
+#define GLEW_ARB_internalformat_query GLEW_GET_VAR(__GLEW_ARB_internalformat_query)
+
+#endif /* GL_ARB_internalformat_query */
+
+/* ---------------------- GL_ARB_map_buffer_alignment ---------------------- */
+
+#ifndef GL_ARB_map_buffer_alignment
+#define GL_ARB_map_buffer_alignment 1
+
+#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC
+
+#define GLEW_ARB_map_buffer_alignment GLEW_GET_VAR(__GLEW_ARB_map_buffer_alignment)
+
+#endif /* GL_ARB_map_buffer_alignment */
+
+/* ------------------------ GL_ARB_map_buffer_range ------------------------ */
+
+#ifndef GL_ARB_map_buffer_range
+#define GL_ARB_map_buffer_range 1
+
+#define GL_MAP_READ_BIT 0x0001
+#define GL_MAP_WRITE_BIT 0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
+
+typedef void (GLAPIENTRY * PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
+typedef GLvoid * (GLAPIENTRY * PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+
+#define glFlushMappedBufferRange GLEW_GET_FUN(__glewFlushMappedBufferRange)
+#define glMapBufferRange GLEW_GET_FUN(__glewMapBufferRange)
+
+#define GLEW_ARB_map_buffer_range GLEW_GET_VAR(__GLEW_ARB_map_buffer_range)
+
+#endif /* GL_ARB_map_buffer_range */
+
+/* ------------------------- GL_ARB_matrix_palette ------------------------- */
+
+#ifndef GL_ARB_matrix_palette
+#define GL_ARB_matrix_palette 1
+
+#define GL_MATRIX_PALETTE_ARB 0x8840
+#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841
+#define GL_MAX_PALETTE_MATRICES_ARB 0x8842
+#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843
+#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844
+#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845
+#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846
+#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847
+#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848
+#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849
+
+typedef void (GLAPIENTRY * PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index);
+typedef void (GLAPIENTRY * PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer);
+typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUBVARBPROC) (GLint size, GLubyte *indices);
+typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUIVARBPROC) (GLint size, GLuint *indices);
+typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUSVARBPROC) (GLint size, GLushort *indices);
+
+#define glCurrentPaletteMatrixARB GLEW_GET_FUN(__glewCurrentPaletteMatrixARB)
+#define glMatrixIndexPointerARB GLEW_GET_FUN(__glewMatrixIndexPointerARB)
+#define glMatrixIndexubvARB GLEW_GET_FUN(__glewMatrixIndexubvARB)
+#define glMatrixIndexuivARB GLEW_GET_FUN(__glewMatrixIndexuivARB)
+#define glMatrixIndexusvARB GLEW_GET_FUN(__glewMatrixIndexusvARB)
+
+#define GLEW_ARB_matrix_palette GLEW_GET_VAR(__GLEW_ARB_matrix_palette)
+
+#endif /* GL_ARB_matrix_palette */
+
+/* --------------------------- GL_ARB_multisample -------------------------- */
+
+#ifndef GL_ARB_multisample
+#define GL_ARB_multisample 1
+
+#define GL_MULTISAMPLE_ARB 0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F
+#define GL_SAMPLE_COVERAGE_ARB 0x80A0
+#define GL_SAMPLE_BUFFERS_ARB 0x80A8
+#define GL_SAMPLES_ARB 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB
+#define GL_MULTISAMPLE_BIT_ARB 0x20000000
+
+typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert);
+
+#define glSampleCoverageARB GLEW_GET_FUN(__glewSampleCoverageARB)
+
+#define GLEW_ARB_multisample GLEW_GET_VAR(__GLEW_ARB_multisample)
+
+#endif /* GL_ARB_multisample */
+
+/* -------------------------- GL_ARB_multitexture -------------------------- */
+
+#ifndef GL_ARB_multitexture
+#define GL_ARB_multitexture 1
+
+#define GL_TEXTURE0_ARB 0x84C0
+#define GL_TEXTURE1_ARB 0x84C1
+#define GL_TEXTURE2_ARB 0x84C2
+#define GL_TEXTURE3_ARB 0x84C3
+#define GL_TEXTURE4_ARB 0x84C4
+#define GL_TEXTURE5_ARB 0x84C5
+#define GL_TEXTURE6_ARB 0x84C6
+#define GL_TEXTURE7_ARB 0x84C7
+#define GL_TEXTURE8_ARB 0x84C8
+#define GL_TEXTURE9_ARB 0x84C9
+#define GL_TEXTURE10_ARB 0x84CA
+#define GL_TEXTURE11_ARB 0x84CB
+#define GL_TEXTURE12_ARB 0x84CC
+#define GL_TEXTURE13_ARB 0x84CD
+#define GL_TEXTURE14_ARB 0x84CE
+#define GL_TEXTURE15_ARB 0x84CF
+#define GL_TEXTURE16_ARB 0x84D0
+#define GL_TEXTURE17_ARB 0x84D1
+#define GL_TEXTURE18_ARB 0x84D2
+#define GL_TEXTURE19_ARB 0x84D3
+#define GL_TEXTURE20_ARB 0x84D4
+#define GL_TEXTURE21_ARB 0x84D5
+#define GL_TEXTURE22_ARB 0x84D6
+#define GL_TEXTURE23_ARB 0x84D7
+#define GL_TEXTURE24_ARB 0x84D8
+#define GL_TEXTURE25_ARB 0x84D9
+#define GL_TEXTURE26_ARB 0x84DA
+#define GL_TEXTURE27_ARB 0x84DB
+#define GL_TEXTURE28_ARB 0x84DC
+#define GL_TEXTURE29_ARB 0x84DD
+#define GL_TEXTURE30_ARB 0x84DE
+#define GL_TEXTURE31_ARB 0x84DF
+#define GL_ACTIVE_TEXTURE_ARB 0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1
+#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2
+
+typedef void (GLAPIENTRY * PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (GLAPIENTRY * PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);
+
+#define glActiveTextureARB GLEW_GET_FUN(__glewActiveTextureARB)
+#define glClientActiveTextureARB GLEW_GET_FUN(__glewClientActiveTextureARB)
+#define glMultiTexCoord1dARB GLEW_GET_FUN(__glewMultiTexCoord1dARB)
+#define glMultiTexCoord1dvARB GLEW_GET_FUN(__glewMultiTexCoord1dvARB)
+#define glMultiTexCoord1fARB GLEW_GET_FUN(__glewMultiTexCoord1fARB)
+#define glMultiTexCoord1fvARB GLEW_GET_FUN(__glewMultiTexCoord1fvARB)
+#define glMultiTexCoord1iARB GLEW_GET_FUN(__glewMultiTexCoord1iARB)
+#define glMultiTexCoord1ivARB GLEW_GET_FUN(__glewMultiTexCoord1ivARB)
+#define glMultiTexCoord1sARB GLEW_GET_FUN(__glewMultiTexCoord1sARB)
+#define glMultiTexCoord1svARB GLEW_GET_FUN(__glewMultiTexCoord1svARB)
+#define glMultiTexCoord2dARB GLEW_GET_FUN(__glewMultiTexCoord2dARB)
+#define glMultiTexCoord2dvARB GLEW_GET_FUN(__glewMultiTexCoord2dvARB)
+#define glMultiTexCoord2fARB GLEW_GET_FUN(__glewMultiTexCoord2fARB)
+#define glMultiTexCoord2fvARB GLEW_GET_FUN(__glewMultiTexCoord2fvARB)
+#define glMultiTexCoord2iARB GLEW_GET_FUN(__glewMultiTexCoord2iARB)
+#define glMultiTexCoord2ivARB GLEW_GET_FUN(__glewMultiTexCoord2ivARB)
+#define glMultiTexCoord2sARB GLEW_GET_FUN(__glewMultiTexCoord2sARB)
+#define glMultiTexCoord2svARB GLEW_GET_FUN(__glewMultiTexCoord2svARB)
+#define glMultiTexCoord3dARB GLEW_GET_FUN(__glewMultiTexCoord3dARB)
+#define glMultiTexCoord3dvARB GLEW_GET_FUN(__glewMultiTexCoord3dvARB)
+#define glMultiTexCoord3fARB GLEW_GET_FUN(__glewMultiTexCoord3fARB)
+#define glMultiTexCoord3fvARB GLEW_GET_FUN(__glewMultiTexCoord3fvARB)
+#define glMultiTexCoord3iARB GLEW_GET_FUN(__glewMultiTexCoord3iARB)
+#define glMultiTexCoord3ivARB GLEW_GET_FUN(__glewMultiTexCoord3ivARB)
+#define glMultiTexCoord3sARB GLEW_GET_FUN(__glewMultiTexCoord3sARB)
+#define glMultiTexCoord3svARB GLEW_GET_FUN(__glewMultiTexCoord3svARB)
+#define glMultiTexCoord4dARB GLEW_GET_FUN(__glewMultiTexCoord4dARB)
+#define glMultiTexCoord4dvARB GLEW_GET_FUN(__glewMultiTexCoord4dvARB)
+#define glMultiTexCoord4fARB GLEW_GET_FUN(__glewMultiTexCoord4fARB)
+#define glMultiTexCoord4fvARB GLEW_GET_FUN(__glewMultiTexCoord4fvARB)
+#define glMultiTexCoord4iARB GLEW_GET_FUN(__glewMultiTexCoord4iARB)
+#define glMultiTexCoord4ivARB GLEW_GET_FUN(__glewMultiTexCoord4ivARB)
+#define glMultiTexCoord4sARB GLEW_GET_FUN(__glewMultiTexCoord4sARB)
+#define glMultiTexCoord4svARB GLEW_GET_FUN(__glewMultiTexCoord4svARB)
+
+#define GLEW_ARB_multitexture GLEW_GET_VAR(__GLEW_ARB_multitexture)
+
+#endif /* GL_ARB_multitexture */
+
+/* ------------------------- GL_ARB_occlusion_query ------------------------ */
+
+#ifndef GL_ARB_occlusion_query
+#define GL_ARB_occlusion_query 1
+
+#define GL_QUERY_COUNTER_BITS_ARB 0x8864
+#define GL_CURRENT_QUERY_ARB 0x8865
+#define GL_QUERY_RESULT_ARB 0x8866
+#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867
+#define GL_SAMPLES_PASSED_ARB 0x8914
+
+typedef void (GLAPIENTRY * PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id);
+typedef void (GLAPIENTRY * PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLENDQUERYARBPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint* params);
+typedef void (GLAPIENTRY * PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISQUERYARBPROC) (GLuint id);
+
+#define glBeginQueryARB GLEW_GET_FUN(__glewBeginQueryARB)
+#define glDeleteQueriesARB GLEW_GET_FUN(__glewDeleteQueriesARB)
+#define glEndQueryARB GLEW_GET_FUN(__glewEndQueryARB)
+#define glGenQueriesARB GLEW_GET_FUN(__glewGenQueriesARB)
+#define glGetQueryObjectivARB GLEW_GET_FUN(__glewGetQueryObjectivARB)
+#define glGetQueryObjectuivARB GLEW_GET_FUN(__glewGetQueryObjectuivARB)
+#define glGetQueryivARB GLEW_GET_FUN(__glewGetQueryivARB)
+#define glIsQueryARB GLEW_GET_FUN(__glewIsQueryARB)
+
+#define GLEW_ARB_occlusion_query GLEW_GET_VAR(__GLEW_ARB_occlusion_query)
+
+#endif /* GL_ARB_occlusion_query */
+
+/* ------------------------ GL_ARB_occlusion_query2 ------------------------ */
+
+#ifndef GL_ARB_occlusion_query2
+#define GL_ARB_occlusion_query2 1
+
+#define GL_ANY_SAMPLES_PASSED 0x8C2F
+
+#define GLEW_ARB_occlusion_query2 GLEW_GET_VAR(__GLEW_ARB_occlusion_query2)
+
+#endif /* GL_ARB_occlusion_query2 */
+
+/* ----------------------- GL_ARB_pixel_buffer_object ---------------------- */
+
+#ifndef GL_ARB_pixel_buffer_object
+#define GL_ARB_pixel_buffer_object 1
+
+#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF
+
+#define GLEW_ARB_pixel_buffer_object GLEW_GET_VAR(__GLEW_ARB_pixel_buffer_object)
+
+#endif /* GL_ARB_pixel_buffer_object */
+
+/* ------------------------ GL_ARB_point_parameters ------------------------ */
+
+#ifndef GL_ARB_point_parameters
+#define GL_ARB_point_parameters 1
+
+#define GL_POINT_SIZE_MIN_ARB 0x8126
+#define GL_POINT_SIZE_MAX_ARB 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128
+#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129
+
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat* params);
+
+#define glPointParameterfARB GLEW_GET_FUN(__glewPointParameterfARB)
+#define glPointParameterfvARB GLEW_GET_FUN(__glewPointParameterfvARB)
+
+#define GLEW_ARB_point_parameters GLEW_GET_VAR(__GLEW_ARB_point_parameters)
+
+#endif /* GL_ARB_point_parameters */
+
+/* -------------------------- GL_ARB_point_sprite -------------------------- */
+
+#ifndef GL_ARB_point_sprite
+#define GL_ARB_point_sprite 1
+
+#define GL_POINT_SPRITE_ARB 0x8861
+#define GL_COORD_REPLACE_ARB 0x8862
+
+#define GLEW_ARB_point_sprite GLEW_GET_VAR(__GLEW_ARB_point_sprite)
+
+#endif /* GL_ARB_point_sprite */
+
+/* ------------------------ GL_ARB_provoking_vertex ------------------------ */
+
+#ifndef GL_ARB_provoking_vertex
+#define GL_ARB_provoking_vertex 1
+
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C
+#define GL_FIRST_VERTEX_CONVENTION 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION 0x8E4E
+#define GL_PROVOKING_VERTEX 0x8E4F
+
+typedef void (GLAPIENTRY * PFNGLPROVOKINGVERTEXPROC) (GLenum mode);
+
+#define glProvokingVertex GLEW_GET_FUN(__glewProvokingVertex)
+
+#define GLEW_ARB_provoking_vertex GLEW_GET_VAR(__GLEW_ARB_provoking_vertex)
+
+#endif /* GL_ARB_provoking_vertex */
+
+/* --------------------------- GL_ARB_robustness --------------------------- */
+
+#ifndef GL_ARB_robustness
+#define GL_ARB_robustness 1
+
+#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004
+#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252
+#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253
+#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254
+#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define GL_NO_RESET_NOTIFICATION_ARB 0x8261
+
+typedef GLenum (GLAPIENTRY * PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void);
+typedef void (GLAPIENTRY * PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* table);
+typedef void (GLAPIENTRY * PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void* img);
+typedef void (GLAPIENTRY * PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* image);
+typedef void (GLAPIENTRY * PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values);
+typedef void (GLAPIENTRY * PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint* v);
+typedef void (GLAPIENTRY * PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values);
+typedef void (GLAPIENTRY * PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat* values);
+typedef void (GLAPIENTRY * PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint* values);
+typedef void (GLAPIENTRY * PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort* values);
+typedef void (GLAPIENTRY * PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte* pattern);
+typedef void (GLAPIENTRY * PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void* row, GLsizei columnBufSize, GLvoid*column, GLvoid*span);
+typedef void (GLAPIENTRY * PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* img);
+typedef void (GLAPIENTRY * PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint* params);
+typedef void (GLAPIENTRY * PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void* data);
+
+#define glGetGraphicsResetStatusARB GLEW_GET_FUN(__glewGetGraphicsResetStatusARB)
+#define glGetnColorTableARB GLEW_GET_FUN(__glewGetnColorTableARB)
+#define glGetnCompressedTexImageARB GLEW_GET_FUN(__glewGetnCompressedTexImageARB)
+#define glGetnConvolutionFilterARB GLEW_GET_FUN(__glewGetnConvolutionFilterARB)
+#define glGetnHistogramARB GLEW_GET_FUN(__glewGetnHistogramARB)
+#define glGetnMapdvARB GLEW_GET_FUN(__glewGetnMapdvARB)
+#define glGetnMapfvARB GLEW_GET_FUN(__glewGetnMapfvARB)
+#define glGetnMapivARB GLEW_GET_FUN(__glewGetnMapivARB)
+#define glGetnMinmaxARB GLEW_GET_FUN(__glewGetnMinmaxARB)
+#define glGetnPixelMapfvARB GLEW_GET_FUN(__glewGetnPixelMapfvARB)
+#define glGetnPixelMapuivARB GLEW_GET_FUN(__glewGetnPixelMapuivARB)
+#define glGetnPixelMapusvARB GLEW_GET_FUN(__glewGetnPixelMapusvARB)
+#define glGetnPolygonStippleARB GLEW_GET_FUN(__glewGetnPolygonStippleARB)
+#define glGetnSeparableFilterARB GLEW_GET_FUN(__glewGetnSeparableFilterARB)
+#define glGetnTexImageARB GLEW_GET_FUN(__glewGetnTexImageARB)
+#define glGetnUniformdvARB GLEW_GET_FUN(__glewGetnUniformdvARB)
+#define glGetnUniformfvARB GLEW_GET_FUN(__glewGetnUniformfvARB)
+#define glGetnUniformivARB GLEW_GET_FUN(__glewGetnUniformivARB)
+#define glGetnUniformuivARB GLEW_GET_FUN(__glewGetnUniformuivARB)
+#define glReadnPixelsARB GLEW_GET_FUN(__glewReadnPixelsARB)
+
+#define GLEW_ARB_robustness GLEW_GET_VAR(__GLEW_ARB_robustness)
+
+#endif /* GL_ARB_robustness */
+
+/* ------------------------- GL_ARB_sample_shading ------------------------- */
+
+#ifndef GL_ARB_sample_shading
+#define GL_ARB_sample_shading 1
+
+#define GL_SAMPLE_SHADING_ARB 0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37
+
+typedef void (GLAPIENTRY * PFNGLMINSAMPLESHADINGARBPROC) (GLclampf value);
+
+#define glMinSampleShadingARB GLEW_GET_FUN(__glewMinSampleShadingARB)
+
+#define GLEW_ARB_sample_shading GLEW_GET_VAR(__GLEW_ARB_sample_shading)
+
+#endif /* GL_ARB_sample_shading */
+
+/* ------------------------- GL_ARB_sampler_objects ------------------------ */
+
+#ifndef GL_ARB_sampler_objects
+#define GL_ARB_sampler_objects 1
+
+#define GL_SAMPLER_BINDING 0x8919
+
+typedef void (GLAPIENTRY * PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
+typedef void (GLAPIENTRY * PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint * samplers);
+typedef void (GLAPIENTRY * PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint* samplers);
+typedef void (GLAPIENTRY * PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint* params);
+typedef void (GLAPIENTRY * PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISSAMPLERPROC) (GLuint sampler);
+typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint* params);
+typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint* params);
+
+#define glBindSampler GLEW_GET_FUN(__glewBindSampler)
+#define glDeleteSamplers GLEW_GET_FUN(__glewDeleteSamplers)
+#define glGenSamplers GLEW_GET_FUN(__glewGenSamplers)
+#define glGetSamplerParameterIiv GLEW_GET_FUN(__glewGetSamplerParameterIiv)
+#define glGetSamplerParameterIuiv GLEW_GET_FUN(__glewGetSamplerParameterIuiv)
+#define glGetSamplerParameterfv GLEW_GET_FUN(__glewGetSamplerParameterfv)
+#define glGetSamplerParameteriv GLEW_GET_FUN(__glewGetSamplerParameteriv)
+#define glIsSampler GLEW_GET_FUN(__glewIsSampler)
+#define glSamplerParameterIiv GLEW_GET_FUN(__glewSamplerParameterIiv)
+#define glSamplerParameterIuiv GLEW_GET_FUN(__glewSamplerParameterIuiv)
+#define glSamplerParameterf GLEW_GET_FUN(__glewSamplerParameterf)
+#define glSamplerParameterfv GLEW_GET_FUN(__glewSamplerParameterfv)
+#define glSamplerParameteri GLEW_GET_FUN(__glewSamplerParameteri)
+#define glSamplerParameteriv GLEW_GET_FUN(__glewSamplerParameteriv)
+
+#define GLEW_ARB_sampler_objects GLEW_GET_VAR(__GLEW_ARB_sampler_objects)
+
+#endif /* GL_ARB_sampler_objects */
+
+/* ------------------------ GL_ARB_seamless_cube_map ----------------------- */
+
+#ifndef GL_ARB_seamless_cube_map
+#define GL_ARB_seamless_cube_map 1
+
+#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F
+
+#define GLEW_ARB_seamless_cube_map GLEW_GET_VAR(__GLEW_ARB_seamless_cube_map)
+
+#endif /* GL_ARB_seamless_cube_map */
+
+/* --------------------- GL_ARB_separate_shader_objects -------------------- */
+
+#ifndef GL_ARB_separate_shader_objects
+#define GL_ARB_separate_shader_objects 1
+
+#define GL_VERTEX_SHADER_BIT 0x00000001
+#define GL_FRAGMENT_SHADER_BIT 0x00000002
+#define GL_GEOMETRY_SHADER_BIT 0x00000004
+#define GL_TESS_CONTROL_SHADER_BIT 0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010
+#define GL_PROGRAM_SEPARABLE 0x8258
+#define GL_ACTIVE_PROGRAM 0x8259
+#define GL_PROGRAM_PIPELINE_BINDING 0x825A
+#define GL_ALL_SHADER_BITS 0xFFFFFFFF
+
+typedef void (GLAPIENTRY * PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program);
+typedef void (GLAPIENTRY * PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef GLuint (GLAPIENTRY * PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const char ** strings);
+typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint* pipelines);
+typedef void (GLAPIENTRY * PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint* pipelines);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei* length, char *infoLog);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble x);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat x);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint x);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint x);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint x, GLint y);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint x, GLuint y);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint x, GLuint y, GLuint z);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program);
+typedef void (GLAPIENTRY * PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline);
+
+#define glActiveShaderProgram GLEW_GET_FUN(__glewActiveShaderProgram)
+#define glBindProgramPipeline GLEW_GET_FUN(__glewBindProgramPipeline)
+#define glCreateShaderProgramv GLEW_GET_FUN(__glewCreateShaderProgramv)
+#define glDeleteProgramPipelines GLEW_GET_FUN(__glewDeleteProgramPipelines)
+#define glGenProgramPipelines GLEW_GET_FUN(__glewGenProgramPipelines)
+#define glGetProgramPipelineInfoLog GLEW_GET_FUN(__glewGetProgramPipelineInfoLog)
+#define glGetProgramPipelineiv GLEW_GET_FUN(__glewGetProgramPipelineiv)
+#define glIsProgramPipeline GLEW_GET_FUN(__glewIsProgramPipeline)
+#define glProgramUniform1d GLEW_GET_FUN(__glewProgramUniform1d)
+#define glProgramUniform1dv GLEW_GET_FUN(__glewProgramUniform1dv)
+#define glProgramUniform1f GLEW_GET_FUN(__glewProgramUniform1f)
+#define glProgramUniform1fv GLEW_GET_FUN(__glewProgramUniform1fv)
+#define glProgramUniform1i GLEW_GET_FUN(__glewProgramUniform1i)
+#define glProgramUniform1iv GLEW_GET_FUN(__glewProgramUniform1iv)
+#define glProgramUniform1ui GLEW_GET_FUN(__glewProgramUniform1ui)
+#define glProgramUniform1uiv GLEW_GET_FUN(__glewProgramUniform1uiv)
+#define glProgramUniform2d GLEW_GET_FUN(__glewProgramUniform2d)
+#define glProgramUniform2dv GLEW_GET_FUN(__glewProgramUniform2dv)
+#define glProgramUniform2f GLEW_GET_FUN(__glewProgramUniform2f)
+#define glProgramUniform2fv GLEW_GET_FUN(__glewProgramUniform2fv)
+#define glProgramUniform2i GLEW_GET_FUN(__glewProgramUniform2i)
+#define glProgramUniform2iv GLEW_GET_FUN(__glewProgramUniform2iv)
+#define glProgramUniform2ui GLEW_GET_FUN(__glewProgramUniform2ui)
+#define glProgramUniform2uiv GLEW_GET_FUN(__glewProgramUniform2uiv)
+#define glProgramUniform3d GLEW_GET_FUN(__glewProgramUniform3d)
+#define glProgramUniform3dv GLEW_GET_FUN(__glewProgramUniform3dv)
+#define glProgramUniform3f GLEW_GET_FUN(__glewProgramUniform3f)
+#define glProgramUniform3fv GLEW_GET_FUN(__glewProgramUniform3fv)
+#define glProgramUniform3i GLEW_GET_FUN(__glewProgramUniform3i)
+#define glProgramUniform3iv GLEW_GET_FUN(__glewProgramUniform3iv)
+#define glProgramUniform3ui GLEW_GET_FUN(__glewProgramUniform3ui)
+#define glProgramUniform3uiv GLEW_GET_FUN(__glewProgramUniform3uiv)
+#define glProgramUniform4d GLEW_GET_FUN(__glewProgramUniform4d)
+#define glProgramUniform4dv GLEW_GET_FUN(__glewProgramUniform4dv)
+#define glProgramUniform4f GLEW_GET_FUN(__glewProgramUniform4f)
+#define glProgramUniform4fv GLEW_GET_FUN(__glewProgramUniform4fv)
+#define glProgramUniform4i GLEW_GET_FUN(__glewProgramUniform4i)
+#define glProgramUniform4iv GLEW_GET_FUN(__glewProgramUniform4iv)
+#define glProgramUniform4ui GLEW_GET_FUN(__glewProgramUniform4ui)
+#define glProgramUniform4uiv GLEW_GET_FUN(__glewProgramUniform4uiv)
+#define glProgramUniformMatrix2dv GLEW_GET_FUN(__glewProgramUniformMatrix2dv)
+#define glProgramUniformMatrix2fv GLEW_GET_FUN(__glewProgramUniformMatrix2fv)
+#define glProgramUniformMatrix2x3dv GLEW_GET_FUN(__glewProgramUniformMatrix2x3dv)
+#define glProgramUniformMatrix2x3fv GLEW_GET_FUN(__glewProgramUniformMatrix2x3fv)
+#define glProgramUniformMatrix2x4dv GLEW_GET_FUN(__glewProgramUniformMatrix2x4dv)
+#define glProgramUniformMatrix2x4fv GLEW_GET_FUN(__glewProgramUniformMatrix2x4fv)
+#define glProgramUniformMatrix3dv GLEW_GET_FUN(__glewProgramUniformMatrix3dv)
+#define glProgramUniformMatrix3fv GLEW_GET_FUN(__glewProgramUniformMatrix3fv)
+#define glProgramUniformMatrix3x2dv GLEW_GET_FUN(__glewProgramUniformMatrix3x2dv)
+#define glProgramUniformMatrix3x2fv GLEW_GET_FUN(__glewProgramUniformMatrix3x2fv)
+#define glProgramUniformMatrix3x4dv GLEW_GET_FUN(__glewProgramUniformMatrix3x4dv)
+#define glProgramUniformMatrix3x4fv GLEW_GET_FUN(__glewProgramUniformMatrix3x4fv)
+#define glProgramUniformMatrix4dv GLEW_GET_FUN(__glewProgramUniformMatrix4dv)
+#define glProgramUniformMatrix4fv GLEW_GET_FUN(__glewProgramUniformMatrix4fv)
+#define glProgramUniformMatrix4x2dv GLEW_GET_FUN(__glewProgramUniformMatrix4x2dv)
+#define glProgramUniformMatrix4x2fv GLEW_GET_FUN(__glewProgramUniformMatrix4x2fv)
+#define glProgramUniformMatrix4x3dv GLEW_GET_FUN(__glewProgramUniformMatrix4x3dv)
+#define glProgramUniformMatrix4x3fv GLEW_GET_FUN(__glewProgramUniformMatrix4x3fv)
+#define glUseProgramStages GLEW_GET_FUN(__glewUseProgramStages)
+#define glValidateProgramPipeline GLEW_GET_FUN(__glewValidateProgramPipeline)
+
+#define GLEW_ARB_separate_shader_objects GLEW_GET_VAR(__GLEW_ARB_separate_shader_objects)
+
+#endif /* GL_ARB_separate_shader_objects */
+
+/* --------------------- GL_ARB_shader_atomic_counters --------------------- */
+
+#ifndef GL_ARB_shader_atomic_counters
+#define GL_ARB_shader_atomic_counters 1
+
+#define GL_ATOMIC_COUNTER_BUFFER 0x92C0
+#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1
+#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2
+#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3
+#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB
+#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0
+#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1
+#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6
+#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8
+#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9
+#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA
+#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC
+
+typedef void (GLAPIENTRY * PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint* params);
+
+#define glGetActiveAtomicCounterBufferiv GLEW_GET_FUN(__glewGetActiveAtomicCounterBufferiv)
+
+#define GLEW_ARB_shader_atomic_counters GLEW_GET_VAR(__GLEW_ARB_shader_atomic_counters)
+
+#endif /* GL_ARB_shader_atomic_counters */
+
+/* ----------------------- GL_ARB_shader_bit_encoding ---------------------- */
+
+#ifndef GL_ARB_shader_bit_encoding
+#define GL_ARB_shader_bit_encoding 1
+
+#define GLEW_ARB_shader_bit_encoding GLEW_GET_VAR(__GLEW_ARB_shader_bit_encoding)
+
+#endif /* GL_ARB_shader_bit_encoding */
+
+/* --------------------- GL_ARB_shader_image_load_store -------------------- */
+
+#ifndef GL_ARB_shader_image_load_store
+#define GL_ARB_shader_image_load_store 1
+
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001
+#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002
+#define GL_UNIFORM_BARRIER_BIT 0x00000004
+#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020
+#define GL_COMMAND_BARRIER_BIT 0x00000040
+#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080
+#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100
+#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200
+#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800
+#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000
+#define GL_MAX_IMAGE_UNITS 0x8F38
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39
+#define GL_IMAGE_BINDING_NAME 0x8F3A
+#define GL_IMAGE_BINDING_LEVEL 0x8F3B
+#define GL_IMAGE_BINDING_LAYERED 0x8F3C
+#define GL_IMAGE_BINDING_LAYER 0x8F3D
+#define GL_IMAGE_BINDING_ACCESS 0x8F3E
+#define GL_IMAGE_1D 0x904C
+#define GL_IMAGE_2D 0x904D
+#define GL_IMAGE_3D 0x904E
+#define GL_IMAGE_2D_RECT 0x904F
+#define GL_IMAGE_CUBE 0x9050
+#define GL_IMAGE_BUFFER 0x9051
+#define GL_IMAGE_1D_ARRAY 0x9052
+#define GL_IMAGE_2D_ARRAY 0x9053
+#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054
+#define GL_IMAGE_2D_MULTISAMPLE 0x9055
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056
+#define GL_INT_IMAGE_1D 0x9057
+#define GL_INT_IMAGE_2D 0x9058
+#define GL_INT_IMAGE_3D 0x9059
+#define GL_INT_IMAGE_2D_RECT 0x905A
+#define GL_INT_IMAGE_CUBE 0x905B
+#define GL_INT_IMAGE_BUFFER 0x905C
+#define GL_INT_IMAGE_1D_ARRAY 0x905D
+#define GL_INT_IMAGE_2D_ARRAY 0x905E
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F
+#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061
+#define GL_UNSIGNED_INT_IMAGE_1D 0x9062
+#define GL_UNSIGNED_INT_IMAGE_2D 0x9063
+#define GL_UNSIGNED_INT_IMAGE_3D 0x9064
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065
+#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066
+#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C
+#define GL_MAX_IMAGE_SAMPLES 0x906D
+#define GL_IMAGE_BINDING_FORMAT 0x906E
+#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9
+#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD
+#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE
+#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF
+#define GL_ALL_BARRIER_BITS 0xFFFFFFFF
+
+typedef void (GLAPIENTRY * PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+typedef void (GLAPIENTRY * PFNGLMEMORYBARRIERPROC) (GLbitfield barriers);
+
+#define glBindImageTexture GLEW_GET_FUN(__glewBindImageTexture)
+#define glMemoryBarrier GLEW_GET_FUN(__glewMemoryBarrier)
+
+#define GLEW_ARB_shader_image_load_store GLEW_GET_VAR(__GLEW_ARB_shader_image_load_store)
+
+#endif /* GL_ARB_shader_image_load_store */
+
+/* ------------------------- GL_ARB_shader_objects ------------------------- */
+
+#ifndef GL_ARB_shader_objects
+#define GL_ARB_shader_objects 1
+
+#define GL_PROGRAM_OBJECT_ARB 0x8B40
+#define GL_SHADER_OBJECT_ARB 0x8B48
+#define GL_OBJECT_TYPE_ARB 0x8B4E
+#define GL_OBJECT_SUBTYPE_ARB 0x8B4F
+#define GL_FLOAT_VEC2_ARB 0x8B50
+#define GL_FLOAT_VEC3_ARB 0x8B51
+#define GL_FLOAT_VEC4_ARB 0x8B52
+#define GL_INT_VEC2_ARB 0x8B53
+#define GL_INT_VEC3_ARB 0x8B54
+#define GL_INT_VEC4_ARB 0x8B55
+#define GL_BOOL_ARB 0x8B56
+#define GL_BOOL_VEC2_ARB 0x8B57
+#define GL_BOOL_VEC3_ARB 0x8B58
+#define GL_BOOL_VEC4_ARB 0x8B59
+#define GL_FLOAT_MAT2_ARB 0x8B5A
+#define GL_FLOAT_MAT3_ARB 0x8B5B
+#define GL_FLOAT_MAT4_ARB 0x8B5C
+#define GL_SAMPLER_1D_ARB 0x8B5D
+#define GL_SAMPLER_2D_ARB 0x8B5E
+#define GL_SAMPLER_3D_ARB 0x8B5F
+#define GL_SAMPLER_CUBE_ARB 0x8B60
+#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61
+#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62
+#define GL_SAMPLER_2D_RECT_ARB 0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64
+#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80
+#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81
+#define GL_OBJECT_LINK_STATUS_ARB 0x8B82
+#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83
+#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84
+#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85
+#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86
+#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87
+#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88
+
+typedef char GLcharARB;
+typedef unsigned int GLhandleARB;
+
+typedef void (GLAPIENTRY * PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
+typedef void (GLAPIENTRY * PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj);
+typedef GLhandleARB (GLAPIENTRY * PFNGLCREATEPROGRAMOBJECTARBPROC) (void);
+typedef GLhandleARB (GLAPIENTRY * PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);
+typedef void (GLAPIENTRY * PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj);
+typedef void (GLAPIENTRY * PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj);
+typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name);
+typedef void (GLAPIENTRY * PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei* count, GLhandleARB *obj);
+typedef GLhandleARB (GLAPIENTRY * PFNGLGETHANDLEARBPROC) (GLenum pname);
+typedef void (GLAPIENTRY * PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *infoLog);
+typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *source);
+typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB* name);
+typedef void (GLAPIENTRY * PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint* params);
+typedef void (GLAPIENTRY * PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj);
+typedef void (GLAPIENTRY * PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint *length);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj);
+typedef void (GLAPIENTRY * PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj);
+
+#define glAttachObjectARB GLEW_GET_FUN(__glewAttachObjectARB)
+#define glCompileShaderARB GLEW_GET_FUN(__glewCompileShaderARB)
+#define glCreateProgramObjectARB GLEW_GET_FUN(__glewCreateProgramObjectARB)
+#define glCreateShaderObjectARB GLEW_GET_FUN(__glewCreateShaderObjectARB)
+#define glDeleteObjectARB GLEW_GET_FUN(__glewDeleteObjectARB)
+#define glDetachObjectARB GLEW_GET_FUN(__glewDetachObjectARB)
+#define glGetActiveUniformARB GLEW_GET_FUN(__glewGetActiveUniformARB)
+#define glGetAttachedObjectsARB GLEW_GET_FUN(__glewGetAttachedObjectsARB)
+#define glGetHandleARB GLEW_GET_FUN(__glewGetHandleARB)
+#define glGetInfoLogARB GLEW_GET_FUN(__glewGetInfoLogARB)
+#define glGetObjectParameterfvARB GLEW_GET_FUN(__glewGetObjectParameterfvARB)
+#define glGetObjectParameterivARB GLEW_GET_FUN(__glewGetObjectParameterivARB)
+#define glGetShaderSourceARB GLEW_GET_FUN(__glewGetShaderSourceARB)
+#define glGetUniformLocationARB GLEW_GET_FUN(__glewGetUniformLocationARB)
+#define glGetUniformfvARB GLEW_GET_FUN(__glewGetUniformfvARB)
+#define glGetUniformivARB GLEW_GET_FUN(__glewGetUniformivARB)
+#define glLinkProgramARB GLEW_GET_FUN(__glewLinkProgramARB)
+#define glShaderSourceARB GLEW_GET_FUN(__glewShaderSourceARB)
+#define glUniform1fARB GLEW_GET_FUN(__glewUniform1fARB)
+#define glUniform1fvARB GLEW_GET_FUN(__glewUniform1fvARB)
+#define glUniform1iARB GLEW_GET_FUN(__glewUniform1iARB)
+#define glUniform1ivARB GLEW_GET_FUN(__glewUniform1ivARB)
+#define glUniform2fARB GLEW_GET_FUN(__glewUniform2fARB)
+#define glUniform2fvARB GLEW_GET_FUN(__glewUniform2fvARB)
+#define glUniform2iARB GLEW_GET_FUN(__glewUniform2iARB)
+#define glUniform2ivARB GLEW_GET_FUN(__glewUniform2ivARB)
+#define glUniform3fARB GLEW_GET_FUN(__glewUniform3fARB)
+#define glUniform3fvARB GLEW_GET_FUN(__glewUniform3fvARB)
+#define glUniform3iARB GLEW_GET_FUN(__glewUniform3iARB)
+#define glUniform3ivARB GLEW_GET_FUN(__glewUniform3ivARB)
+#define glUniform4fARB GLEW_GET_FUN(__glewUniform4fARB)
+#define glUniform4fvARB GLEW_GET_FUN(__glewUniform4fvARB)
+#define glUniform4iARB GLEW_GET_FUN(__glewUniform4iARB)
+#define glUniform4ivARB GLEW_GET_FUN(__glewUniform4ivARB)
+#define glUniformMatrix2fvARB GLEW_GET_FUN(__glewUniformMatrix2fvARB)
+#define glUniformMatrix3fvARB GLEW_GET_FUN(__glewUniformMatrix3fvARB)
+#define glUniformMatrix4fvARB GLEW_GET_FUN(__glewUniformMatrix4fvARB)
+#define glUseProgramObjectARB GLEW_GET_FUN(__glewUseProgramObjectARB)
+#define glValidateProgramARB GLEW_GET_FUN(__glewValidateProgramARB)
+
+#define GLEW_ARB_shader_objects GLEW_GET_VAR(__GLEW_ARB_shader_objects)
+
+#endif /* GL_ARB_shader_objects */
+
+/* ------------------------ GL_ARB_shader_precision ------------------------ */
+
+#ifndef GL_ARB_shader_precision
+#define GL_ARB_shader_precision 1
+
+#define GLEW_ARB_shader_precision GLEW_GET_VAR(__GLEW_ARB_shader_precision)
+
+#endif /* GL_ARB_shader_precision */
+
+/* ---------------------- GL_ARB_shader_stencil_export --------------------- */
+
+#ifndef GL_ARB_shader_stencil_export
+#define GL_ARB_shader_stencil_export 1
+
+#define GLEW_ARB_shader_stencil_export GLEW_GET_VAR(__GLEW_ARB_shader_stencil_export)
+
+#endif /* GL_ARB_shader_stencil_export */
+
+/* ------------------------ GL_ARB_shader_subroutine ----------------------- */
+
+#ifndef GL_ARB_shader_subroutine
+#define GL_ARB_shader_subroutine 1
+
+#define GL_ACTIVE_SUBROUTINES 0x8DE5
+#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6
+#define GL_MAX_SUBROUTINES 0x8DE7
+#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47
+#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49
+#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A
+#define GL_COMPATIBLE_SUBROUTINES 0x8E4B
+
+typedef void (GLAPIENTRY * PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei* length, char *name);
+typedef void (GLAPIENTRY * PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei* length, char *name);
+typedef void (GLAPIENTRY * PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint* values);
+typedef GLuint (GLAPIENTRY * PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const char* name);
+typedef GLint (GLAPIENTRY * PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const char* name);
+typedef void (GLAPIENTRY * PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint* params);
+typedef void (GLAPIENTRY * PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint* indices);
+
+#define glGetActiveSubroutineName GLEW_GET_FUN(__glewGetActiveSubroutineName)
+#define glGetActiveSubroutineUniformName GLEW_GET_FUN(__glewGetActiveSubroutineUniformName)
+#define glGetActiveSubroutineUniformiv GLEW_GET_FUN(__glewGetActiveSubroutineUniformiv)
+#define glGetProgramStageiv GLEW_GET_FUN(__glewGetProgramStageiv)
+#define glGetSubroutineIndex GLEW_GET_FUN(__glewGetSubroutineIndex)
+#define glGetSubroutineUniformLocation GLEW_GET_FUN(__glewGetSubroutineUniformLocation)
+#define glGetUniformSubroutineuiv GLEW_GET_FUN(__glewGetUniformSubroutineuiv)
+#define glUniformSubroutinesuiv GLEW_GET_FUN(__glewUniformSubroutinesuiv)
+
+#define GLEW_ARB_shader_subroutine GLEW_GET_VAR(__GLEW_ARB_shader_subroutine)
+
+#endif /* GL_ARB_shader_subroutine */
+
+/* ----------------------- GL_ARB_shader_texture_lod ----------------------- */
+
+#ifndef GL_ARB_shader_texture_lod
+#define GL_ARB_shader_texture_lod 1
+
+#define GLEW_ARB_shader_texture_lod GLEW_GET_VAR(__GLEW_ARB_shader_texture_lod)
+
+#endif /* GL_ARB_shader_texture_lod */
+
+/* ---------------------- GL_ARB_shading_language_100 ---------------------- */
+
+#ifndef GL_ARB_shading_language_100
+#define GL_ARB_shading_language_100 1
+
+#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C
+
+#define GLEW_ARB_shading_language_100 GLEW_GET_VAR(__GLEW_ARB_shading_language_100)
+
+#endif /* GL_ARB_shading_language_100 */
+
+/* -------------------- GL_ARB_shading_language_420pack -------------------- */
+
+#ifndef GL_ARB_shading_language_420pack
+#define GL_ARB_shading_language_420pack 1
+
+#define GLEW_ARB_shading_language_420pack GLEW_GET_VAR(__GLEW_ARB_shading_language_420pack)
+
+#endif /* GL_ARB_shading_language_420pack */
+
+/* -------------------- GL_ARB_shading_language_include -------------------- */
+
+#ifndef GL_ARB_shading_language_include
+#define GL_ARB_shading_language_include 1
+
+#define GL_SHADER_INCLUDE_ARB 0x8DAE
+#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9
+#define GL_NAMED_STRING_TYPE_ARB 0x8DEA
+
+typedef void (GLAPIENTRY * PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const char ** path, const GLint *length);
+typedef void (GLAPIENTRY * PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const char* name);
+typedef void (GLAPIENTRY * PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const char* name, GLsizei bufSize, GLint *stringlen, char *string);
+typedef void (GLAPIENTRY * PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const char* name, GLenum pname, GLint *params);
+typedef GLboolean (GLAPIENTRY * PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const char* name);
+typedef void (GLAPIENTRY * PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const char* name, GLint stringlen, const char *string);
+
+#define glCompileShaderIncludeARB GLEW_GET_FUN(__glewCompileShaderIncludeARB)
+#define glDeleteNamedStringARB GLEW_GET_FUN(__glewDeleteNamedStringARB)
+#define glGetNamedStringARB GLEW_GET_FUN(__glewGetNamedStringARB)
+#define glGetNamedStringivARB GLEW_GET_FUN(__glewGetNamedStringivARB)
+#define glIsNamedStringARB GLEW_GET_FUN(__glewIsNamedStringARB)
+#define glNamedStringARB GLEW_GET_FUN(__glewNamedStringARB)
+
+#define GLEW_ARB_shading_language_include GLEW_GET_VAR(__GLEW_ARB_shading_language_include)
+
+#endif /* GL_ARB_shading_language_include */
+
+/* -------------------- GL_ARB_shading_language_packing -------------------- */
+
+#ifndef GL_ARB_shading_language_packing
+#define GL_ARB_shading_language_packing 1
+
+#define GLEW_ARB_shading_language_packing GLEW_GET_VAR(__GLEW_ARB_shading_language_packing)
+
+#endif /* GL_ARB_shading_language_packing */
+
+/* ----------------------------- GL_ARB_shadow ----------------------------- */
+
+#ifndef GL_ARB_shadow
+#define GL_ARB_shadow 1
+
+#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C
+#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D
+#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E
+
+#define GLEW_ARB_shadow GLEW_GET_VAR(__GLEW_ARB_shadow)
+
+#endif /* GL_ARB_shadow */
+
+/* ------------------------- GL_ARB_shadow_ambient ------------------------- */
+
+#ifndef GL_ARB_shadow_ambient
+#define GL_ARB_shadow_ambient 1
+
+#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF
+
+#define GLEW_ARB_shadow_ambient GLEW_GET_VAR(__GLEW_ARB_shadow_ambient)
+
+#endif /* GL_ARB_shadow_ambient */
+
+/* ------------------------------ GL_ARB_sync ------------------------------ */
+
+#ifndef GL_ARB_sync
+#define GL_ARB_sync 1
+
+#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
+#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
+#define GL_OBJECT_TYPE 0x9112
+#define GL_SYNC_CONDITION 0x9113
+#define GL_SYNC_STATUS 0x9114
+#define GL_SYNC_FLAGS 0x9115
+#define GL_SYNC_FENCE 0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
+#define GL_UNSIGNALED 0x9118
+#define GL_SIGNALED 0x9119
+#define GL_ALREADY_SIGNALED 0x911A
+#define GL_TIMEOUT_EXPIRED 0x911B
+#define GL_CONDITION_SATISFIED 0x911C
+#define GL_WAIT_FAILED 0x911D
+#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF
+
+typedef GLenum (GLAPIENTRY * PFNGLCLIENTWAITSYNCPROC) (GLsync GLsync,GLbitfield flags,GLuint64 timeout);
+typedef void (GLAPIENTRY * PFNGLDELETESYNCPROC) (GLsync GLsync);
+typedef GLsync (GLAPIENTRY * PFNGLFENCESYNCPROC) (GLenum condition,GLbitfield flags);
+typedef void (GLAPIENTRY * PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64* params);
+typedef void (GLAPIENTRY * PFNGLGETSYNCIVPROC) (GLsync GLsync,GLenum pname,GLsizei bufSize,GLsizei* length, GLint *values);
+typedef GLboolean (GLAPIENTRY * PFNGLISSYNCPROC) (GLsync GLsync);
+typedef void (GLAPIENTRY * PFNGLWAITSYNCPROC) (GLsync GLsync,GLbitfield flags,GLuint64 timeout);
+
+#define glClientWaitSync GLEW_GET_FUN(__glewClientWaitSync)
+#define glDeleteSync GLEW_GET_FUN(__glewDeleteSync)
+#define glFenceSync GLEW_GET_FUN(__glewFenceSync)
+#define glGetInteger64v GLEW_GET_FUN(__glewGetInteger64v)
+#define glGetSynciv GLEW_GET_FUN(__glewGetSynciv)
+#define glIsSync GLEW_GET_FUN(__glewIsSync)
+#define glWaitSync GLEW_GET_FUN(__glewWaitSync)
+
+#define GLEW_ARB_sync GLEW_GET_VAR(__GLEW_ARB_sync)
+
+#endif /* GL_ARB_sync */
+
+/* ----------------------- GL_ARB_tessellation_shader ---------------------- */
+
+#ifndef GL_ARB_tessellation_shader
+#define GL_ARB_tessellation_shader 1
+
+#define GL_PATCHES 0xE
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F
+#define GL_PATCH_VERTICES 0x8E72
+#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73
+#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74
+#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75
+#define GL_TESS_GEN_MODE 0x8E76
+#define GL_TESS_GEN_SPACING 0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER 0x8E78
+#define GL_TESS_GEN_POINT_MODE 0x8E79
+#define GL_ISOLINES 0x8E7A
+#define GL_FRACTIONAL_ODD 0x8E7B
+#define GL_FRACTIONAL_EVEN 0x8E7C
+#define GL_MAX_PATCH_VERTICES 0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL 0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86
+#define GL_TESS_EVALUATION_SHADER 0x8E87
+#define GL_TESS_CONTROL_SHADER 0x8E88
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A
+
+typedef void (GLAPIENTRY * PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat* values);
+typedef void (GLAPIENTRY * PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value);
+
+#define glPatchParameterfv GLEW_GET_FUN(__glewPatchParameterfv)
+#define glPatchParameteri GLEW_GET_FUN(__glewPatchParameteri)
+
+#define GLEW_ARB_tessellation_shader GLEW_GET_VAR(__GLEW_ARB_tessellation_shader)
+
+#endif /* GL_ARB_tessellation_shader */
+
+/* ---------------------- GL_ARB_texture_border_clamp ---------------------- */
+
+#ifndef GL_ARB_texture_border_clamp
+#define GL_ARB_texture_border_clamp 1
+
+#define GL_CLAMP_TO_BORDER_ARB 0x812D
+
+#define GLEW_ARB_texture_border_clamp GLEW_GET_VAR(__GLEW_ARB_texture_border_clamp)
+
+#endif /* GL_ARB_texture_border_clamp */
+
+/* ---------------------- GL_ARB_texture_buffer_object --------------------- */
+
+#ifndef GL_ARB_texture_buffer_object
+#define GL_ARB_texture_buffer_object 1
+
+#define GL_TEXTURE_BUFFER_ARB 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D
+#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E
+
+typedef void (GLAPIENTRY * PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+
+#define glTexBufferARB GLEW_GET_FUN(__glewTexBufferARB)
+
+#define GLEW_ARB_texture_buffer_object GLEW_GET_VAR(__GLEW_ARB_texture_buffer_object)
+
+#endif /* GL_ARB_texture_buffer_object */
+
+/* ------------------- GL_ARB_texture_buffer_object_rgb32 ------------------ */
+
+#ifndef GL_ARB_texture_buffer_object_rgb32
+#define GL_ARB_texture_buffer_object_rgb32 1
+
+#define GLEW_ARB_texture_buffer_object_rgb32 GLEW_GET_VAR(__GLEW_ARB_texture_buffer_object_rgb32)
+
+#endif /* GL_ARB_texture_buffer_object_rgb32 */
+
+/* ----------------------- GL_ARB_texture_compression ---------------------- */
+
+#ifndef GL_ARB_texture_compression
+#define GL_ARB_texture_compression 1
+
+#define GL_COMPRESSED_ALPHA_ARB 0x84E9
+#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB
+#define GL_COMPRESSED_INTENSITY_ARB 0x84EC
+#define GL_COMPRESSED_RGB_ARB 0x84ED
+#define GL_COMPRESSED_RGBA_ARB 0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0
+#define GL_TEXTURE_COMPRESSED_ARB 0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3
+
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, void* img);
+
+#define glCompressedTexImage1DARB GLEW_GET_FUN(__glewCompressedTexImage1DARB)
+#define glCompressedTexImage2DARB GLEW_GET_FUN(__glewCompressedTexImage2DARB)
+#define glCompressedTexImage3DARB GLEW_GET_FUN(__glewCompressedTexImage3DARB)
+#define glCompressedTexSubImage1DARB GLEW_GET_FUN(__glewCompressedTexSubImage1DARB)
+#define glCompressedTexSubImage2DARB GLEW_GET_FUN(__glewCompressedTexSubImage2DARB)
+#define glCompressedTexSubImage3DARB GLEW_GET_FUN(__glewCompressedTexSubImage3DARB)
+#define glGetCompressedTexImageARB GLEW_GET_FUN(__glewGetCompressedTexImageARB)
+
+#define GLEW_ARB_texture_compression GLEW_GET_VAR(__GLEW_ARB_texture_compression)
+
+#endif /* GL_ARB_texture_compression */
+
+/* -------------------- GL_ARB_texture_compression_bptc -------------------- */
+
+#ifndef GL_ARB_texture_compression_bptc
+#define GL_ARB_texture_compression_bptc 1
+
+#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C
+#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D
+#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E
+#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F
+
+#define GLEW_ARB_texture_compression_bptc GLEW_GET_VAR(__GLEW_ARB_texture_compression_bptc)
+
+#endif /* GL_ARB_texture_compression_bptc */
+
+/* -------------------- GL_ARB_texture_compression_rgtc -------------------- */
+
+#ifndef GL_ARB_texture_compression_rgtc
+#define GL_ARB_texture_compression_rgtc 1
+
+#define GL_COMPRESSED_RED_RGTC1 0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC
+#define GL_COMPRESSED_RG_RGTC2 0x8DBD
+#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE
+
+#define GLEW_ARB_texture_compression_rgtc GLEW_GET_VAR(__GLEW_ARB_texture_compression_rgtc)
+
+#endif /* GL_ARB_texture_compression_rgtc */
+
+/* ------------------------ GL_ARB_texture_cube_map ------------------------ */
+
+#ifndef GL_ARB_texture_cube_map
+#define GL_ARB_texture_cube_map 1
+
+#define GL_NORMAL_MAP_ARB 0x8511
+#define GL_REFLECTION_MAP_ARB 0x8512
+#define GL_TEXTURE_CUBE_MAP_ARB 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C
+
+#define GLEW_ARB_texture_cube_map GLEW_GET_VAR(__GLEW_ARB_texture_cube_map)
+
+#endif /* GL_ARB_texture_cube_map */
+
+/* --------------------- GL_ARB_texture_cube_map_array --------------------- */
+
+#ifndef GL_ARB_texture_cube_map_array
+#define GL_ARB_texture_cube_map_array 1
+
+#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B
+#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F
+
+#define GLEW_ARB_texture_cube_map_array GLEW_GET_VAR(__GLEW_ARB_texture_cube_map_array)
+
+#endif /* GL_ARB_texture_cube_map_array */
+
+/* ------------------------- GL_ARB_texture_env_add ------------------------ */
+
+#ifndef GL_ARB_texture_env_add
+#define GL_ARB_texture_env_add 1
+
+#define GLEW_ARB_texture_env_add GLEW_GET_VAR(__GLEW_ARB_texture_env_add)
+
+#endif /* GL_ARB_texture_env_add */
+
+/* ----------------------- GL_ARB_texture_env_combine ---------------------- */
+
+#ifndef GL_ARB_texture_env_combine
+#define GL_ARB_texture_env_combine 1
+
+#define GL_SUBTRACT_ARB 0x84E7
+#define GL_COMBINE_ARB 0x8570
+#define GL_COMBINE_RGB_ARB 0x8571
+#define GL_COMBINE_ALPHA_ARB 0x8572
+#define GL_RGB_SCALE_ARB 0x8573
+#define GL_ADD_SIGNED_ARB 0x8574
+#define GL_INTERPOLATE_ARB 0x8575
+#define GL_CONSTANT_ARB 0x8576
+#define GL_PRIMARY_COLOR_ARB 0x8577
+#define GL_PREVIOUS_ARB 0x8578
+#define GL_SOURCE0_RGB_ARB 0x8580
+#define GL_SOURCE1_RGB_ARB 0x8581
+#define GL_SOURCE2_RGB_ARB 0x8582
+#define GL_SOURCE0_ALPHA_ARB 0x8588
+#define GL_SOURCE1_ALPHA_ARB 0x8589
+#define GL_SOURCE2_ALPHA_ARB 0x858A
+#define GL_OPERAND0_RGB_ARB 0x8590
+#define GL_OPERAND1_RGB_ARB 0x8591
+#define GL_OPERAND2_RGB_ARB 0x8592
+#define GL_OPERAND0_ALPHA_ARB 0x8598
+#define GL_OPERAND1_ALPHA_ARB 0x8599
+#define GL_OPERAND2_ALPHA_ARB 0x859A
+
+#define GLEW_ARB_texture_env_combine GLEW_GET_VAR(__GLEW_ARB_texture_env_combine)
+
+#endif /* GL_ARB_texture_env_combine */
+
+/* ---------------------- GL_ARB_texture_env_crossbar ---------------------- */
+
+#ifndef GL_ARB_texture_env_crossbar
+#define GL_ARB_texture_env_crossbar 1
+
+#define GLEW_ARB_texture_env_crossbar GLEW_GET_VAR(__GLEW_ARB_texture_env_crossbar)
+
+#endif /* GL_ARB_texture_env_crossbar */
+
+/* ------------------------ GL_ARB_texture_env_dot3 ------------------------ */
+
+#ifndef GL_ARB_texture_env_dot3
+#define GL_ARB_texture_env_dot3 1
+
+#define GL_DOT3_RGB_ARB 0x86AE
+#define GL_DOT3_RGBA_ARB 0x86AF
+
+#define GLEW_ARB_texture_env_dot3 GLEW_GET_VAR(__GLEW_ARB_texture_env_dot3)
+
+#endif /* GL_ARB_texture_env_dot3 */
+
+/* -------------------------- GL_ARB_texture_float ------------------------- */
+
+#ifndef GL_ARB_texture_float
+#define GL_ARB_texture_float 1
+
+#define GL_RGBA32F_ARB 0x8814
+#define GL_RGB32F_ARB 0x8815
+#define GL_ALPHA32F_ARB 0x8816
+#define GL_INTENSITY32F_ARB 0x8817
+#define GL_LUMINANCE32F_ARB 0x8818
+#define GL_LUMINANCE_ALPHA32F_ARB 0x8819
+#define GL_RGBA16F_ARB 0x881A
+#define GL_RGB16F_ARB 0x881B
+#define GL_ALPHA16F_ARB 0x881C
+#define GL_INTENSITY16F_ARB 0x881D
+#define GL_LUMINANCE16F_ARB 0x881E
+#define GL_LUMINANCE_ALPHA16F_ARB 0x881F
+#define GL_TEXTURE_RED_TYPE_ARB 0x8C10
+#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11
+#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12
+#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13
+#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15
+#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16
+#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17
+
+#define GLEW_ARB_texture_float GLEW_GET_VAR(__GLEW_ARB_texture_float)
+
+#endif /* GL_ARB_texture_float */
+
+/* ------------------------- GL_ARB_texture_gather ------------------------- */
+
+#ifndef GL_ARB_texture_gather
+#define GL_ARB_texture_gather 1
+
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F
+
+#define GLEW_ARB_texture_gather GLEW_GET_VAR(__GLEW_ARB_texture_gather)
+
+#endif /* GL_ARB_texture_gather */
+
+/* --------------------- GL_ARB_texture_mirrored_repeat -------------------- */
+
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_ARB_texture_mirrored_repeat 1
+
+#define GL_MIRRORED_REPEAT_ARB 0x8370
+
+#define GLEW_ARB_texture_mirrored_repeat GLEW_GET_VAR(__GLEW_ARB_texture_mirrored_repeat)
+
+#endif /* GL_ARB_texture_mirrored_repeat */
+
+/* ----------------------- GL_ARB_texture_multisample ---------------------- */
+
+#ifndef GL_ARB_texture_multisample
+#define GL_ARB_texture_multisample 1
+
+#define GL_SAMPLE_POSITION 0x8E50
+#define GL_SAMPLE_MASK 0x8E51
+#define GL_SAMPLE_MASK_VALUE 0x8E52
+#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59
+#define GL_TEXTURE_2D_MULTISAMPLE 0x9100
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105
+#define GL_TEXTURE_SAMPLES 0x9106
+#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107
+#define GL_SAMPLER_2D_MULTISAMPLE 0x9108
+#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A
+#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B
+#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D
+#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E
+#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F
+#define GL_MAX_INTEGER_SAMPLES 0x9110
+
+typedef void (GLAPIENTRY * PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat* val);
+typedef void (GLAPIENTRY * PFNGLSAMPLEMASKIPROC) (GLuint index, GLbitfield mask);
+typedef void (GLAPIENTRY * PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+
+#define glGetMultisamplefv GLEW_GET_FUN(__glewGetMultisamplefv)
+#define glSampleMaski GLEW_GET_FUN(__glewSampleMaski)
+#define glTexImage2DMultisample GLEW_GET_FUN(__glewTexImage2DMultisample)
+#define glTexImage3DMultisample GLEW_GET_FUN(__glewTexImage3DMultisample)
+
+#define GLEW_ARB_texture_multisample GLEW_GET_VAR(__GLEW_ARB_texture_multisample)
+
+#endif /* GL_ARB_texture_multisample */
+
+/* -------------------- GL_ARB_texture_non_power_of_two -------------------- */
+
+#ifndef GL_ARB_texture_non_power_of_two
+#define GL_ARB_texture_non_power_of_two 1
+
+#define GLEW_ARB_texture_non_power_of_two GLEW_GET_VAR(__GLEW_ARB_texture_non_power_of_two)
+
+#endif /* GL_ARB_texture_non_power_of_two */
+
+/* ------------------------ GL_ARB_texture_query_lod ----------------------- */
+
+#ifndef GL_ARB_texture_query_lod
+#define GL_ARB_texture_query_lod 1
+
+#define GLEW_ARB_texture_query_lod GLEW_GET_VAR(__GLEW_ARB_texture_query_lod)
+
+#endif /* GL_ARB_texture_query_lod */
+
+/* ------------------------ GL_ARB_texture_rectangle ----------------------- */
+
+#ifndef GL_ARB_texture_rectangle
+#define GL_ARB_texture_rectangle 1
+
+#define GL_TEXTURE_RECTANGLE_ARB 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8
+#define GL_SAMPLER_2D_RECT_ARB 0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64
+
+#define GLEW_ARB_texture_rectangle GLEW_GET_VAR(__GLEW_ARB_texture_rectangle)
+
+#endif /* GL_ARB_texture_rectangle */
+
+/* --------------------------- GL_ARB_texture_rg --------------------------- */
+
+#ifndef GL_ARB_texture_rg
+#define GL_ARB_texture_rg 1
+
+#define GL_RED 0x1903
+#define GL_COMPRESSED_RED 0x8225
+#define GL_COMPRESSED_RG 0x8226
+#define GL_RG 0x8227
+#define GL_RG_INTEGER 0x8228
+#define GL_R8 0x8229
+#define GL_R16 0x822A
+#define GL_RG8 0x822B
+#define GL_RG16 0x822C
+#define GL_R16F 0x822D
+#define GL_R32F 0x822E
+#define GL_RG16F 0x822F
+#define GL_RG32F 0x8230
+#define GL_R8I 0x8231
+#define GL_R8UI 0x8232
+#define GL_R16I 0x8233
+#define GL_R16UI 0x8234
+#define GL_R32I 0x8235
+#define GL_R32UI 0x8236
+#define GL_RG8I 0x8237
+#define GL_RG8UI 0x8238
+#define GL_RG16I 0x8239
+#define GL_RG16UI 0x823A
+#define GL_RG32I 0x823B
+#define GL_RG32UI 0x823C
+
+#define GLEW_ARB_texture_rg GLEW_GET_VAR(__GLEW_ARB_texture_rg)
+
+#endif /* GL_ARB_texture_rg */
+
+/* ----------------------- GL_ARB_texture_rgb10_a2ui ----------------------- */
+
+#ifndef GL_ARB_texture_rgb10_a2ui
+#define GL_ARB_texture_rgb10_a2ui 1
+
+#define GL_RGB10_A2UI 0x906F
+
+#define GLEW_ARB_texture_rgb10_a2ui GLEW_GET_VAR(__GLEW_ARB_texture_rgb10_a2ui)
+
+#endif /* GL_ARB_texture_rgb10_a2ui */
+
+/* ------------------------- GL_ARB_texture_storage ------------------------ */
+
+#ifndef GL_ARB_texture_storage
+#define GL_ARB_texture_storage 1
+
+#define GL_ALPHA8_EXT 0x803C
+#define GL_LUMINANCE8_EXT 0x8040
+#define GL_LUMINANCE8_ALPHA8_EXT 0x8045
+#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F
+
+typedef void (GLAPIENTRY * PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+
+#define glTexStorage1D GLEW_GET_FUN(__glewTexStorage1D)
+#define glTexStorage2D GLEW_GET_FUN(__glewTexStorage2D)
+#define glTexStorage3D GLEW_GET_FUN(__glewTexStorage3D)
+#define glTextureStorage1DEXT GLEW_GET_FUN(__glewTextureStorage1DEXT)
+#define glTextureStorage2DEXT GLEW_GET_FUN(__glewTextureStorage2DEXT)
+#define glTextureStorage3DEXT GLEW_GET_FUN(__glewTextureStorage3DEXT)
+
+#define GLEW_ARB_texture_storage GLEW_GET_VAR(__GLEW_ARB_texture_storage)
+
+#endif /* GL_ARB_texture_storage */
+
+/* ------------------------- GL_ARB_texture_swizzle ------------------------ */
+
+#ifndef GL_ARB_texture_swizzle
+#define GL_ARB_texture_swizzle 1
+
+#define GL_TEXTURE_SWIZZLE_R 0x8E42
+#define GL_TEXTURE_SWIZZLE_G 0x8E43
+#define GL_TEXTURE_SWIZZLE_B 0x8E44
+#define GL_TEXTURE_SWIZZLE_A 0x8E45
+#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46
+
+#define GLEW_ARB_texture_swizzle GLEW_GET_VAR(__GLEW_ARB_texture_swizzle)
+
+#endif /* GL_ARB_texture_swizzle */
+
+/* --------------------------- GL_ARB_timer_query -------------------------- */
+
+#ifndef GL_ARB_timer_query
+#define GL_ARB_timer_query 1
+
+#define GL_TIME_ELAPSED 0x88BF
+#define GL_TIMESTAMP 0x8E28
+
+typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64* params);
+typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64* params);
+typedef void (GLAPIENTRY * PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target);
+
+#define glGetQueryObjecti64v GLEW_GET_FUN(__glewGetQueryObjecti64v)
+#define glGetQueryObjectui64v GLEW_GET_FUN(__glewGetQueryObjectui64v)
+#define glQueryCounter GLEW_GET_FUN(__glewQueryCounter)
+
+#define GLEW_ARB_timer_query GLEW_GET_VAR(__GLEW_ARB_timer_query)
+
+#endif /* GL_ARB_timer_query */
+
+/* ----------------------- GL_ARB_transform_feedback2 ---------------------- */
+
+#ifndef GL_ARB_transform_feedback2
+#define GL_ARB_transform_feedback2 1
+
+#define GL_TRANSFORM_FEEDBACK 0x8E22
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25
+
+typedef void (GLAPIENTRY * PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id);
+typedef void (GLAPIENTRY * PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id);
+typedef void (GLAPIENTRY * PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint* ids);
+typedef GLboolean (GLAPIENTRY * PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLPAUSETRANSFORMFEEDBACKPROC) (void);
+typedef void (GLAPIENTRY * PFNGLRESUMETRANSFORMFEEDBACKPROC) (void);
+
+#define glBindTransformFeedback GLEW_GET_FUN(__glewBindTransformFeedback)
+#define glDeleteTransformFeedbacks GLEW_GET_FUN(__glewDeleteTransformFeedbacks)
+#define glDrawTransformFeedback GLEW_GET_FUN(__glewDrawTransformFeedback)
+#define glGenTransformFeedbacks GLEW_GET_FUN(__glewGenTransformFeedbacks)
+#define glIsTransformFeedback GLEW_GET_FUN(__glewIsTransformFeedback)
+#define glPauseTransformFeedback GLEW_GET_FUN(__glewPauseTransformFeedback)
+#define glResumeTransformFeedback GLEW_GET_FUN(__glewResumeTransformFeedback)
+
+#define GLEW_ARB_transform_feedback2 GLEW_GET_VAR(__GLEW_ARB_transform_feedback2)
+
+#endif /* GL_ARB_transform_feedback2 */
+
+/* ----------------------- GL_ARB_transform_feedback3 ---------------------- */
+
+#ifndef GL_ARB_transform_feedback3
+#define GL_ARB_transform_feedback3 1
+
+#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70
+#define GL_MAX_VERTEX_STREAMS 0x8E71
+
+typedef void (GLAPIENTRY * PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id);
+typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream);
+typedef void (GLAPIENTRY * PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index);
+typedef void (GLAPIENTRY * PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint* params);
+
+#define glBeginQueryIndexed GLEW_GET_FUN(__glewBeginQueryIndexed)
+#define glDrawTransformFeedbackStream GLEW_GET_FUN(__glewDrawTransformFeedbackStream)
+#define glEndQueryIndexed GLEW_GET_FUN(__glewEndQueryIndexed)
+#define glGetQueryIndexediv GLEW_GET_FUN(__glewGetQueryIndexediv)
+
+#define GLEW_ARB_transform_feedback3 GLEW_GET_VAR(__GLEW_ARB_transform_feedback3)
+
+#endif /* GL_ARB_transform_feedback3 */
+
+/* ------------------ GL_ARB_transform_feedback_instanced ------------------ */
+
+#ifndef GL_ARB_transform_feedback_instanced
+#define GL_ARB_transform_feedback_instanced 1
+
+typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei primcount);
+typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei primcount);
+
+#define glDrawTransformFeedbackInstanced GLEW_GET_FUN(__glewDrawTransformFeedbackInstanced)
+#define glDrawTransformFeedbackStreamInstanced GLEW_GET_FUN(__glewDrawTransformFeedbackStreamInstanced)
+
+#define GLEW_ARB_transform_feedback_instanced GLEW_GET_VAR(__GLEW_ARB_transform_feedback_instanced)
+
+#endif /* GL_ARB_transform_feedback_instanced */
+
+/* ------------------------ GL_ARB_transpose_matrix ------------------------ */
+
+#ifndef GL_ARB_transpose_matrix
+#define GL_ARB_transpose_matrix 1
+
+#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6
+
+typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXDARBPROC) (GLdouble m[16]);
+typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXFARBPROC) (GLfloat m[16]);
+typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXDARBPROC) (GLdouble m[16]);
+typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXFARBPROC) (GLfloat m[16]);
+
+#define glLoadTransposeMatrixdARB GLEW_GET_FUN(__glewLoadTransposeMatrixdARB)
+#define glLoadTransposeMatrixfARB GLEW_GET_FUN(__glewLoadTransposeMatrixfARB)
+#define glMultTransposeMatrixdARB GLEW_GET_FUN(__glewMultTransposeMatrixdARB)
+#define glMultTransposeMatrixfARB GLEW_GET_FUN(__glewMultTransposeMatrixfARB)
+
+#define GLEW_ARB_transpose_matrix GLEW_GET_VAR(__GLEW_ARB_transpose_matrix)
+
+#endif /* GL_ARB_transpose_matrix */
+
+/* ---------------------- GL_ARB_uniform_buffer_object --------------------- */
+
+#ifndef GL_ARB_uniform_buffer_object
+#define GL_ARB_uniform_buffer_object 1
+
+#define GL_UNIFORM_BUFFER 0x8A11
+#define GL_UNIFORM_BUFFER_BINDING 0x8A28
+#define GL_UNIFORM_BUFFER_START 0x8A29
+#define GL_UNIFORM_BUFFER_SIZE 0x8A2A
+#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C
+#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D
+#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E
+#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F
+#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30
+#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32
+#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
+#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
+#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
+#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36
+#define GL_UNIFORM_TYPE 0x8A37
+#define GL_UNIFORM_SIZE 0x8A38
+#define GL_UNIFORM_NAME_LENGTH 0x8A39
+#define GL_UNIFORM_BLOCK_INDEX 0x8A3A
+#define GL_UNIFORM_OFFSET 0x8A3B
+#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C
+#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D
+#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E
+#define GL_UNIFORM_BLOCK_BINDING 0x8A3F
+#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40
+#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
+#define GL_INVALID_INDEX 0xFFFFFFFF
+
+typedef void (GLAPIENTRY * PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, char* uniformBlockName);
+typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, char* uniformName);
+typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint* data);
+typedef GLuint (GLAPIENTRY * PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const char* uniformBlockName);
+typedef void (GLAPIENTRY * PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const char** uniformNames, GLuint* uniformIndices);
+typedef void (GLAPIENTRY * PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+
+#define glBindBufferBase GLEW_GET_FUN(__glewBindBufferBase)
+#define glBindBufferRange GLEW_GET_FUN(__glewBindBufferRange)
+#define glGetActiveUniformBlockName GLEW_GET_FUN(__glewGetActiveUniformBlockName)
+#define glGetActiveUniformBlockiv GLEW_GET_FUN(__glewGetActiveUniformBlockiv)
+#define glGetActiveUniformName GLEW_GET_FUN(__glewGetActiveUniformName)
+#define glGetActiveUniformsiv GLEW_GET_FUN(__glewGetActiveUniformsiv)
+#define glGetIntegeri_v GLEW_GET_FUN(__glewGetIntegeri_v)
+#define glGetUniformBlockIndex GLEW_GET_FUN(__glewGetUniformBlockIndex)
+#define glGetUniformIndices GLEW_GET_FUN(__glewGetUniformIndices)
+#define glUniformBlockBinding GLEW_GET_FUN(__glewUniformBlockBinding)
+
+#define GLEW_ARB_uniform_buffer_object GLEW_GET_VAR(__GLEW_ARB_uniform_buffer_object)
+
+#endif /* GL_ARB_uniform_buffer_object */
+
+/* ------------------------ GL_ARB_vertex_array_bgra ----------------------- */
+
+#ifndef GL_ARB_vertex_array_bgra
+#define GL_ARB_vertex_array_bgra 1
+
+#define GL_BGRA 0x80E1
+
+#define GLEW_ARB_vertex_array_bgra GLEW_GET_VAR(__GLEW_ARB_vertex_array_bgra)
+
+#endif /* GL_ARB_vertex_array_bgra */
+
+/* ----------------------- GL_ARB_vertex_array_object ---------------------- */
+
+#ifndef GL_ARB_vertex_array_object
+#define GL_ARB_vertex_array_object 1
+
+#define GL_VERTEX_ARRAY_BINDING 0x85B5
+
+typedef void (GLAPIENTRY * PFNGLBINDVERTEXARRAYPROC) (GLuint array);
+typedef void (GLAPIENTRY * PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint* arrays);
+typedef void (GLAPIENTRY * PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint* arrays);
+typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXARRAYPROC) (GLuint array);
+
+#define glBindVertexArray GLEW_GET_FUN(__glewBindVertexArray)
+#define glDeleteVertexArrays GLEW_GET_FUN(__glewDeleteVertexArrays)
+#define glGenVertexArrays GLEW_GET_FUN(__glewGenVertexArrays)
+#define glIsVertexArray GLEW_GET_FUN(__glewIsVertexArray)
+
+#define GLEW_ARB_vertex_array_object GLEW_GET_VAR(__GLEW_ARB_vertex_array_object)
+
+#endif /* GL_ARB_vertex_array_object */
+
+/* ----------------------- GL_ARB_vertex_attrib_64bit ---------------------- */
+
+#ifndef GL_ARB_vertex_attrib_64bit
+#define GL_ARB_vertex_attrib_64bit 1
+
+#define GL_DOUBLE_MAT2 0x8F46
+#define GL_DOUBLE_MAT3 0x8F47
+#define GL_DOUBLE_MAT4 0x8F48
+#define GL_DOUBLE_VEC2 0x8FFC
+#define GL_DOUBLE_VEC3 0x8FFD
+#define GL_DOUBLE_VEC4 0x8FFE
+
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer);
+
+#define glGetVertexAttribLdv GLEW_GET_FUN(__glewGetVertexAttribLdv)
+#define glVertexAttribL1d GLEW_GET_FUN(__glewVertexAttribL1d)
+#define glVertexAttribL1dv GLEW_GET_FUN(__glewVertexAttribL1dv)
+#define glVertexAttribL2d GLEW_GET_FUN(__glewVertexAttribL2d)
+#define glVertexAttribL2dv GLEW_GET_FUN(__glewVertexAttribL2dv)
+#define glVertexAttribL3d GLEW_GET_FUN(__glewVertexAttribL3d)
+#define glVertexAttribL3dv GLEW_GET_FUN(__glewVertexAttribL3dv)
+#define glVertexAttribL4d GLEW_GET_FUN(__glewVertexAttribL4d)
+#define glVertexAttribL4dv GLEW_GET_FUN(__glewVertexAttribL4dv)
+#define glVertexAttribLPointer GLEW_GET_FUN(__glewVertexAttribLPointer)
+
+#define GLEW_ARB_vertex_attrib_64bit GLEW_GET_VAR(__GLEW_ARB_vertex_attrib_64bit)
+
+#endif /* GL_ARB_vertex_attrib_64bit */
+
+/* -------------------------- GL_ARB_vertex_blend -------------------------- */
+
+#ifndef GL_ARB_vertex_blend
+#define GL_ARB_vertex_blend 1
+
+#define GL_MODELVIEW0_ARB 0x1700
+#define GL_MODELVIEW1_ARB 0x850A
+#define GL_MAX_VERTEX_UNITS_ARB 0x86A4
+#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5
+#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6
+#define GL_VERTEX_BLEND_ARB 0x86A7
+#define GL_CURRENT_WEIGHT_ARB 0x86A8
+#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9
+#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA
+#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB
+#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC
+#define GL_WEIGHT_ARRAY_ARB 0x86AD
+#define GL_MODELVIEW2_ARB 0x8722
+#define GL_MODELVIEW3_ARB 0x8723
+#define GL_MODELVIEW4_ARB 0x8724
+#define GL_MODELVIEW5_ARB 0x8725
+#define GL_MODELVIEW6_ARB 0x8726
+#define GL_MODELVIEW7_ARB 0x8727
+#define GL_MODELVIEW8_ARB 0x8728
+#define GL_MODELVIEW9_ARB 0x8729
+#define GL_MODELVIEW10_ARB 0x872A
+#define GL_MODELVIEW11_ARB 0x872B
+#define GL_MODELVIEW12_ARB 0x872C
+#define GL_MODELVIEW13_ARB 0x872D
+#define GL_MODELVIEW14_ARB 0x872E
+#define GL_MODELVIEW15_ARB 0x872F
+#define GL_MODELVIEW16_ARB 0x8730
+#define GL_MODELVIEW17_ARB 0x8731
+#define GL_MODELVIEW18_ARB 0x8732
+#define GL_MODELVIEW19_ARB 0x8733
+#define GL_MODELVIEW20_ARB 0x8734
+#define GL_MODELVIEW21_ARB 0x8735
+#define GL_MODELVIEW22_ARB 0x8736
+#define GL_MODELVIEW23_ARB 0x8737
+#define GL_MODELVIEW24_ARB 0x8738
+#define GL_MODELVIEW25_ARB 0x8739
+#define GL_MODELVIEW26_ARB 0x873A
+#define GL_MODELVIEW27_ARB 0x873B
+#define GL_MODELVIEW28_ARB 0x873C
+#define GL_MODELVIEW29_ARB 0x873D
+#define GL_MODELVIEW30_ARB 0x873E
+#define GL_MODELVIEW31_ARB 0x873F
+
+typedef void (GLAPIENTRY * PFNGLVERTEXBLENDARBPROC) (GLint count);
+typedef void (GLAPIENTRY * PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer);
+typedef void (GLAPIENTRY * PFNGLWEIGHTBVARBPROC) (GLint size, GLbyte *weights);
+typedef void (GLAPIENTRY * PFNGLWEIGHTDVARBPROC) (GLint size, GLdouble *weights);
+typedef void (GLAPIENTRY * PFNGLWEIGHTFVARBPROC) (GLint size, GLfloat *weights);
+typedef void (GLAPIENTRY * PFNGLWEIGHTIVARBPROC) (GLint size, GLint *weights);
+typedef void (GLAPIENTRY * PFNGLWEIGHTSVARBPROC) (GLint size, GLshort *weights);
+typedef void (GLAPIENTRY * PFNGLWEIGHTUBVARBPROC) (GLint size, GLubyte *weights);
+typedef void (GLAPIENTRY * PFNGLWEIGHTUIVARBPROC) (GLint size, GLuint *weights);
+typedef void (GLAPIENTRY * PFNGLWEIGHTUSVARBPROC) (GLint size, GLushort *weights);
+
+#define glVertexBlendARB GLEW_GET_FUN(__glewVertexBlendARB)
+#define glWeightPointerARB GLEW_GET_FUN(__glewWeightPointerARB)
+#define glWeightbvARB GLEW_GET_FUN(__glewWeightbvARB)
+#define glWeightdvARB GLEW_GET_FUN(__glewWeightdvARB)
+#define glWeightfvARB GLEW_GET_FUN(__glewWeightfvARB)
+#define glWeightivARB GLEW_GET_FUN(__glewWeightivARB)
+#define glWeightsvARB GLEW_GET_FUN(__glewWeightsvARB)
+#define glWeightubvARB GLEW_GET_FUN(__glewWeightubvARB)
+#define glWeightuivARB GLEW_GET_FUN(__glewWeightuivARB)
+#define glWeightusvARB GLEW_GET_FUN(__glewWeightusvARB)
+
+#define GLEW_ARB_vertex_blend GLEW_GET_VAR(__GLEW_ARB_vertex_blend)
+
+#endif /* GL_ARB_vertex_blend */
+
+/* ---------------------- GL_ARB_vertex_buffer_object ---------------------- */
+
+#ifndef GL_ARB_vertex_buffer_object
+#define GL_ARB_vertex_buffer_object 1
+
+#define GL_BUFFER_SIZE_ARB 0x8764
+#define GL_BUFFER_USAGE_ARB 0x8765
+#define GL_ARRAY_BUFFER_ARB 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893
+#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
+#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F
+#define GL_READ_ONLY_ARB 0x88B8
+#define GL_WRITE_ONLY_ARB 0x88B9
+#define GL_READ_WRITE_ARB 0x88BA
+#define GL_BUFFER_ACCESS_ARB 0x88BB
+#define GL_BUFFER_MAPPED_ARB 0x88BC
+#define GL_BUFFER_MAP_POINTER_ARB 0x88BD
+#define GL_STREAM_DRAW_ARB 0x88E0
+#define GL_STREAM_READ_ARB 0x88E1
+#define GL_STREAM_COPY_ARB 0x88E2
+#define GL_STATIC_DRAW_ARB 0x88E4
+#define GL_STATIC_READ_ARB 0x88E5
+#define GL_STATIC_COPY_ARB 0x88E6
+#define GL_DYNAMIC_DRAW_ARB 0x88E8
+#define GL_DYNAMIC_READ_ARB 0x88E9
+#define GL_DYNAMIC_COPY_ARB 0x88EA
+
+typedef ptrdiff_t GLintptrARB;
+typedef ptrdiff_t GLsizeiptrARB;
+
+typedef void (GLAPIENTRY * PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid* data, GLenum usage);
+typedef void (GLAPIENTRY * PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid* data);
+typedef void (GLAPIENTRY * PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint* buffers);
+typedef void (GLAPIENTRY * PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint* buffers);
+typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid** params);
+typedef void (GLAPIENTRY * PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid* data);
+typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERARBPROC) (GLuint buffer);
+typedef GLvoid * (GLAPIENTRY * PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access);
+typedef GLboolean (GLAPIENTRY * PFNGLUNMAPBUFFERARBPROC) (GLenum target);
+
+#define glBindBufferARB GLEW_GET_FUN(__glewBindBufferARB)
+#define glBufferDataARB GLEW_GET_FUN(__glewBufferDataARB)
+#define glBufferSubDataARB GLEW_GET_FUN(__glewBufferSubDataARB)
+#define glDeleteBuffersARB GLEW_GET_FUN(__glewDeleteBuffersARB)
+#define glGenBuffersARB GLEW_GET_FUN(__glewGenBuffersARB)
+#define glGetBufferParameterivARB GLEW_GET_FUN(__glewGetBufferParameterivARB)
+#define glGetBufferPointervARB GLEW_GET_FUN(__glewGetBufferPointervARB)
+#define glGetBufferSubDataARB GLEW_GET_FUN(__glewGetBufferSubDataARB)
+#define glIsBufferARB GLEW_GET_FUN(__glewIsBufferARB)
+#define glMapBufferARB GLEW_GET_FUN(__glewMapBufferARB)
+#define glUnmapBufferARB GLEW_GET_FUN(__glewUnmapBufferARB)
+
+#define GLEW_ARB_vertex_buffer_object GLEW_GET_VAR(__GLEW_ARB_vertex_buffer_object)
+
+#endif /* GL_ARB_vertex_buffer_object */
+
+/* ------------------------- GL_ARB_vertex_program ------------------------- */
+
+#ifndef GL_ARB_vertex_program
+#define GL_ARB_vertex_program 1
+
+#define GL_COLOR_SUM_ARB 0x8458
+#define GL_VERTEX_PROGRAM_ARB 0x8620
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625
+#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626
+#define GL_PROGRAM_LENGTH_ARB 0x8627
+#define GL_PROGRAM_STRING_ARB 0x8628
+#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E
+#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F
+#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
+#define GL_CURRENT_MATRIX_ARB 0x8641
+#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
+#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B
+#define GL_PROGRAM_BINDING_ARB 0x8677
+#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A
+#define GL_PROGRAM_ERROR_STRING_ARB 0x8874
+#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875
+#define GL_PROGRAM_FORMAT_ARB 0x8876
+#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0
+#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1
+#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2
+#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3
+#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4
+#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5
+#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6
+#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7
+#define GL_PROGRAM_PARAMETERS_ARB 0x88A8
+#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9
+#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA
+#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB
+#define GL_PROGRAM_ATTRIBS_ARB 0x88AC
+#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD
+#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE
+#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF
+#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0
+#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1
+#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2
+#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3
+#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4
+#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5
+#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6
+#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7
+#define GL_MATRIX0_ARB 0x88C0
+#define GL_MATRIX1_ARB 0x88C1
+#define GL_MATRIX2_ARB 0x88C2
+#define GL_MATRIX3_ARB 0x88C3
+#define GL_MATRIX4_ARB 0x88C4
+#define GL_MATRIX5_ARB 0x88C5
+#define GL_MATRIX6_ARB 0x88C6
+#define GL_MATRIX7_ARB 0x88C7
+#define GL_MATRIX8_ARB 0x88C8
+#define GL_MATRIX9_ARB 0x88C9
+#define GL_MATRIX10_ARB 0x88CA
+#define GL_MATRIX11_ARB 0x88CB
+#define GL_MATRIX12_ARB 0x88CC
+#define GL_MATRIX13_ARB 0x88CD
+#define GL_MATRIX14_ARB 0x88CE
+#define GL_MATRIX15_ARB 0x88CF
+#define GL_MATRIX16_ARB 0x88D0
+#define GL_MATRIX17_ARB 0x88D1
+#define GL_MATRIX18_ARB 0x88D2
+#define GL_MATRIX19_ARB 0x88D3
+#define GL_MATRIX20_ARB 0x88D4
+#define GL_MATRIX21_ARB 0x88D5
+#define GL_MATRIX22_ARB 0x88D6
+#define GL_MATRIX23_ARB 0x88D7
+#define GL_MATRIX24_ARB 0x88D8
+#define GL_MATRIX25_ARB 0x88D9
+#define GL_MATRIX26_ARB 0x88DA
+#define GL_MATRIX27_ARB 0x88DB
+#define GL_MATRIX28_ARB 0x88DC
+#define GL_MATRIX29_ARB 0x88DD
+#define GL_MATRIX30_ARB 0x88DE
+#define GL_MATRIX31_ARB 0x88DF
+
+typedef void (GLAPIENTRY * PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program);
+typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint* programs);
+typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
+typedef void (GLAPIENTRY * PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
+typedef void (GLAPIENTRY * PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint* programs);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void* string);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid** pointer);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMARBPROC) (GLuint program);
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void* string);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer);
+
+#define glBindProgramARB GLEW_GET_FUN(__glewBindProgramARB)
+#define glDeleteProgramsARB GLEW_GET_FUN(__glewDeleteProgramsARB)
+#define glDisableVertexAttribArrayARB GLEW_GET_FUN(__glewDisableVertexAttribArrayARB)
+#define glEnableVertexAttribArrayARB GLEW_GET_FUN(__glewEnableVertexAttribArrayARB)
+#define glGenProgramsARB GLEW_GET_FUN(__glewGenProgramsARB)
+#define glGetProgramEnvParameterdvARB GLEW_GET_FUN(__glewGetProgramEnvParameterdvARB)
+#define glGetProgramEnvParameterfvARB GLEW_GET_FUN(__glewGetProgramEnvParameterfvARB)
+#define glGetProgramLocalParameterdvARB GLEW_GET_FUN(__glewGetProgramLocalParameterdvARB)
+#define glGetProgramLocalParameterfvARB GLEW_GET_FUN(__glewGetProgramLocalParameterfvARB)
+#define glGetProgramStringARB GLEW_GET_FUN(__glewGetProgramStringARB)
+#define glGetProgramivARB GLEW_GET_FUN(__glewGetProgramivARB)
+#define glGetVertexAttribPointervARB GLEW_GET_FUN(__glewGetVertexAttribPointervARB)
+#define glGetVertexAttribdvARB GLEW_GET_FUN(__glewGetVertexAttribdvARB)
+#define glGetVertexAttribfvARB GLEW_GET_FUN(__glewGetVertexAttribfvARB)
+#define glGetVertexAttribivARB GLEW_GET_FUN(__glewGetVertexAttribivARB)
+#define glIsProgramARB GLEW_GET_FUN(__glewIsProgramARB)
+#define glProgramEnvParameter4dARB GLEW_GET_FUN(__glewProgramEnvParameter4dARB)
+#define glProgramEnvParameter4dvARB GLEW_GET_FUN(__glewProgramEnvParameter4dvARB)
+#define glProgramEnvParameter4fARB GLEW_GET_FUN(__glewProgramEnvParameter4fARB)
+#define glProgramEnvParameter4fvARB GLEW_GET_FUN(__glewProgramEnvParameter4fvARB)
+#define glProgramLocalParameter4dARB GLEW_GET_FUN(__glewProgramLocalParameter4dARB)
+#define glProgramLocalParameter4dvARB GLEW_GET_FUN(__glewProgramLocalParameter4dvARB)
+#define glProgramLocalParameter4fARB GLEW_GET_FUN(__glewProgramLocalParameter4fARB)
+#define glProgramLocalParameter4fvARB GLEW_GET_FUN(__glewProgramLocalParameter4fvARB)
+#define glProgramStringARB GLEW_GET_FUN(__glewProgramStringARB)
+#define glVertexAttrib1dARB GLEW_GET_FUN(__glewVertexAttrib1dARB)
+#define glVertexAttrib1dvARB GLEW_GET_FUN(__glewVertexAttrib1dvARB)
+#define glVertexAttrib1fARB GLEW_GET_FUN(__glewVertexAttrib1fARB)
+#define glVertexAttrib1fvARB GLEW_GET_FUN(__glewVertexAttrib1fvARB)
+#define glVertexAttrib1sARB GLEW_GET_FUN(__glewVertexAttrib1sARB)
+#define glVertexAttrib1svARB GLEW_GET_FUN(__glewVertexAttrib1svARB)
+#define glVertexAttrib2dARB GLEW_GET_FUN(__glewVertexAttrib2dARB)
+#define glVertexAttrib2dvARB GLEW_GET_FUN(__glewVertexAttrib2dvARB)
+#define glVertexAttrib2fARB GLEW_GET_FUN(__glewVertexAttrib2fARB)
+#define glVertexAttrib2fvARB GLEW_GET_FUN(__glewVertexAttrib2fvARB)
+#define glVertexAttrib2sARB GLEW_GET_FUN(__glewVertexAttrib2sARB)
+#define glVertexAttrib2svARB GLEW_GET_FUN(__glewVertexAttrib2svARB)
+#define glVertexAttrib3dARB GLEW_GET_FUN(__glewVertexAttrib3dARB)
+#define glVertexAttrib3dvARB GLEW_GET_FUN(__glewVertexAttrib3dvARB)
+#define glVertexAttrib3fARB GLEW_GET_FUN(__glewVertexAttrib3fARB)
+#define glVertexAttrib3fvARB GLEW_GET_FUN(__glewVertexAttrib3fvARB)
+#define glVertexAttrib3sARB GLEW_GET_FUN(__glewVertexAttrib3sARB)
+#define glVertexAttrib3svARB GLEW_GET_FUN(__glewVertexAttrib3svARB)
+#define glVertexAttrib4NbvARB GLEW_GET_FUN(__glewVertexAttrib4NbvARB)
+#define glVertexAttrib4NivARB GLEW_GET_FUN(__glewVertexAttrib4NivARB)
+#define glVertexAttrib4NsvARB GLEW_GET_FUN(__glewVertexAttrib4NsvARB)
+#define glVertexAttrib4NubARB GLEW_GET_FUN(__glewVertexAttrib4NubARB)
+#define glVertexAttrib4NubvARB GLEW_GET_FUN(__glewVertexAttrib4NubvARB)
+#define glVertexAttrib4NuivARB GLEW_GET_FUN(__glewVertexAttrib4NuivARB)
+#define glVertexAttrib4NusvARB GLEW_GET_FUN(__glewVertexAttrib4NusvARB)
+#define glVertexAttrib4bvARB GLEW_GET_FUN(__glewVertexAttrib4bvARB)
+#define glVertexAttrib4dARB GLEW_GET_FUN(__glewVertexAttrib4dARB)
+#define glVertexAttrib4dvARB GLEW_GET_FUN(__glewVertexAttrib4dvARB)
+#define glVertexAttrib4fARB GLEW_GET_FUN(__glewVertexAttrib4fARB)
+#define glVertexAttrib4fvARB GLEW_GET_FUN(__glewVertexAttrib4fvARB)
+#define glVertexAttrib4ivARB GLEW_GET_FUN(__glewVertexAttrib4ivARB)
+#define glVertexAttrib4sARB GLEW_GET_FUN(__glewVertexAttrib4sARB)
+#define glVertexAttrib4svARB GLEW_GET_FUN(__glewVertexAttrib4svARB)
+#define glVertexAttrib4ubvARB GLEW_GET_FUN(__glewVertexAttrib4ubvARB)
+#define glVertexAttrib4uivARB GLEW_GET_FUN(__glewVertexAttrib4uivARB)
+#define glVertexAttrib4usvARB GLEW_GET_FUN(__glewVertexAttrib4usvARB)
+#define glVertexAttribPointerARB GLEW_GET_FUN(__glewVertexAttribPointerARB)
+
+#define GLEW_ARB_vertex_program GLEW_GET_VAR(__GLEW_ARB_vertex_program)
+
+#endif /* GL_ARB_vertex_program */
+
+/* -------------------------- GL_ARB_vertex_shader ------------------------- */
+
+#ifndef GL_ARB_vertex_shader
+#define GL_ARB_vertex_shader 1
+
+#define GL_VERTEX_SHADER_ARB 0x8B31
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A
+#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D
+#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89
+#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A
+
+typedef void (GLAPIENTRY * PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB* name);
+typedef void (GLAPIENTRY * PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name);
+typedef GLint (GLAPIENTRY * PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB* name);
+
+#define glBindAttribLocationARB GLEW_GET_FUN(__glewBindAttribLocationARB)
+#define glGetActiveAttribARB GLEW_GET_FUN(__glewGetActiveAttribARB)
+#define glGetAttribLocationARB GLEW_GET_FUN(__glewGetAttribLocationARB)
+
+#define GLEW_ARB_vertex_shader GLEW_GET_VAR(__GLEW_ARB_vertex_shader)
+
+#endif /* GL_ARB_vertex_shader */
+
+/* ------------------- GL_ARB_vertex_type_2_10_10_10_rev ------------------- */
+
+#ifndef GL_ARB_vertex_type_2_10_10_10_rev
+#define GL_ARB_vertex_type_2_10_10_10_rev 1
+
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_INT_2_10_10_10_REV 0x8D9F
+
+typedef void (GLAPIENTRY * PFNGLCOLORP3UIPROC) (GLenum type, GLuint color);
+typedef void (GLAPIENTRY * PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint* color);
+typedef void (GLAPIENTRY * PFNGLCOLORP4UIPROC) (GLenum type, GLuint color);
+typedef void (GLAPIENTRY * PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint* color);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint* coords);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint* coords);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint* coords);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint* coords);
+typedef void (GLAPIENTRY * PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords);
+typedef void (GLAPIENTRY * PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint* coords);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint* color);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint* coords);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint* coords);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint* coords);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint* coords);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint* value);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint* value);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint* value);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint* value);
+typedef void (GLAPIENTRY * PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value);
+typedef void (GLAPIENTRY * PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint* value);
+typedef void (GLAPIENTRY * PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value);
+typedef void (GLAPIENTRY * PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint* value);
+typedef void (GLAPIENTRY * PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value);
+typedef void (GLAPIENTRY * PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint* value);
+
+#define glColorP3ui GLEW_GET_FUN(__glewColorP3ui)
+#define glColorP3uiv GLEW_GET_FUN(__glewColorP3uiv)
+#define glColorP4ui GLEW_GET_FUN(__glewColorP4ui)
+#define glColorP4uiv GLEW_GET_FUN(__glewColorP4uiv)
+#define glMultiTexCoordP1ui GLEW_GET_FUN(__glewMultiTexCoordP1ui)
+#define glMultiTexCoordP1uiv GLEW_GET_FUN(__glewMultiTexCoordP1uiv)
+#define glMultiTexCoordP2ui GLEW_GET_FUN(__glewMultiTexCoordP2ui)
+#define glMultiTexCoordP2uiv GLEW_GET_FUN(__glewMultiTexCoordP2uiv)
+#define glMultiTexCoordP3ui GLEW_GET_FUN(__glewMultiTexCoordP3ui)
+#define glMultiTexCoordP3uiv GLEW_GET_FUN(__glewMultiTexCoordP3uiv)
+#define glMultiTexCoordP4ui GLEW_GET_FUN(__glewMultiTexCoordP4ui)
+#define glMultiTexCoordP4uiv GLEW_GET_FUN(__glewMultiTexCoordP4uiv)
+#define glNormalP3ui GLEW_GET_FUN(__glewNormalP3ui)
+#define glNormalP3uiv GLEW_GET_FUN(__glewNormalP3uiv)
+#define glSecondaryColorP3ui GLEW_GET_FUN(__glewSecondaryColorP3ui)
+#define glSecondaryColorP3uiv GLEW_GET_FUN(__glewSecondaryColorP3uiv)
+#define glTexCoordP1ui GLEW_GET_FUN(__glewTexCoordP1ui)
+#define glTexCoordP1uiv GLEW_GET_FUN(__glewTexCoordP1uiv)
+#define glTexCoordP2ui GLEW_GET_FUN(__glewTexCoordP2ui)
+#define glTexCoordP2uiv GLEW_GET_FUN(__glewTexCoordP2uiv)
+#define glTexCoordP3ui GLEW_GET_FUN(__glewTexCoordP3ui)
+#define glTexCoordP3uiv GLEW_GET_FUN(__glewTexCoordP3uiv)
+#define glTexCoordP4ui GLEW_GET_FUN(__glewTexCoordP4ui)
+#define glTexCoordP4uiv GLEW_GET_FUN(__glewTexCoordP4uiv)
+#define glVertexAttribP1ui GLEW_GET_FUN(__glewVertexAttribP1ui)
+#define glVertexAttribP1uiv GLEW_GET_FUN(__glewVertexAttribP1uiv)
+#define glVertexAttribP2ui GLEW_GET_FUN(__glewVertexAttribP2ui)
+#define glVertexAttribP2uiv GLEW_GET_FUN(__glewVertexAttribP2uiv)
+#define glVertexAttribP3ui GLEW_GET_FUN(__glewVertexAttribP3ui)
+#define glVertexAttribP3uiv GLEW_GET_FUN(__glewVertexAttribP3uiv)
+#define glVertexAttribP4ui GLEW_GET_FUN(__glewVertexAttribP4ui)
+#define glVertexAttribP4uiv GLEW_GET_FUN(__glewVertexAttribP4uiv)
+#define glVertexP2ui GLEW_GET_FUN(__glewVertexP2ui)
+#define glVertexP2uiv GLEW_GET_FUN(__glewVertexP2uiv)
+#define glVertexP3ui GLEW_GET_FUN(__glewVertexP3ui)
+#define glVertexP3uiv GLEW_GET_FUN(__glewVertexP3uiv)
+#define glVertexP4ui GLEW_GET_FUN(__glewVertexP4ui)
+#define glVertexP4uiv GLEW_GET_FUN(__glewVertexP4uiv)
+
+#define GLEW_ARB_vertex_type_2_10_10_10_rev GLEW_GET_VAR(__GLEW_ARB_vertex_type_2_10_10_10_rev)
+
+#endif /* GL_ARB_vertex_type_2_10_10_10_rev */
+
+/* ------------------------- GL_ARB_viewport_array ------------------------- */
+
+#ifndef GL_ARB_viewport_array
+#define GL_ARB_viewport_array 1
+
+#define GL_DEPTH_RANGE 0x0B70
+#define GL_VIEWPORT 0x0BA2
+#define GL_SCISSOR_BOX 0x0C10
+#define GL_SCISSOR_TEST 0x0C11
+#define GL_MAX_VIEWPORTS 0x825B
+#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C
+#define GL_VIEWPORT_BOUNDS_RANGE 0x825D
+#define GL_LAYER_PROVOKING_VERTEX 0x825E
+#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F
+#define GL_UNDEFINED_VERTEX 0x8260
+#define GL_FIRST_VERTEX_CONVENTION 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION 0x8E4E
+#define GL_PROVOKING_VERTEX 0x8E4F
+
+typedef void (GLAPIENTRY * PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLclampd * v);
+typedef void (GLAPIENTRY * PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLclampd n, GLclampd f);
+typedef void (GLAPIENTRY * PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble* data);
+typedef void (GLAPIENTRY * PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat* data);
+typedef void (GLAPIENTRY * PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint * v);
+typedef void (GLAPIENTRY * PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint * v);
+typedef void (GLAPIENTRY * PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat * v);
+typedef void (GLAPIENTRY * PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+typedef void (GLAPIENTRY * PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat * v);
+
+#define glDepthRangeArrayv GLEW_GET_FUN(__glewDepthRangeArrayv)
+#define glDepthRangeIndexed GLEW_GET_FUN(__glewDepthRangeIndexed)
+#define glGetDoublei_v GLEW_GET_FUN(__glewGetDoublei_v)
+#define glGetFloati_v GLEW_GET_FUN(__glewGetFloati_v)
+#define glScissorArrayv GLEW_GET_FUN(__glewScissorArrayv)
+#define glScissorIndexed GLEW_GET_FUN(__glewScissorIndexed)
+#define glScissorIndexedv GLEW_GET_FUN(__glewScissorIndexedv)
+#define glViewportArrayv GLEW_GET_FUN(__glewViewportArrayv)
+#define glViewportIndexedf GLEW_GET_FUN(__glewViewportIndexedf)
+#define glViewportIndexedfv GLEW_GET_FUN(__glewViewportIndexedfv)
+
+#define GLEW_ARB_viewport_array GLEW_GET_VAR(__GLEW_ARB_viewport_array)
+
+#endif /* GL_ARB_viewport_array */
+
+/* --------------------------- GL_ARB_window_pos --------------------------- */
+
+#ifndef GL_ARB_window_pos
+#define GL_ARB_window_pos 1
+
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVARBPROC) (const GLdouble* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVARBPROC) (const GLfloat* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVARBPROC) (const GLint* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVARBPROC) (const GLshort* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVARBPROC) (const GLdouble* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVARBPROC) (const GLfloat* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVARBPROC) (const GLint* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVARBPROC) (const GLshort* p);
+
+#define glWindowPos2dARB GLEW_GET_FUN(__glewWindowPos2dARB)
+#define glWindowPos2dvARB GLEW_GET_FUN(__glewWindowPos2dvARB)
+#define glWindowPos2fARB GLEW_GET_FUN(__glewWindowPos2fARB)
+#define glWindowPos2fvARB GLEW_GET_FUN(__glewWindowPos2fvARB)
+#define glWindowPos2iARB GLEW_GET_FUN(__glewWindowPos2iARB)
+#define glWindowPos2ivARB GLEW_GET_FUN(__glewWindowPos2ivARB)
+#define glWindowPos2sARB GLEW_GET_FUN(__glewWindowPos2sARB)
+#define glWindowPos2svARB GLEW_GET_FUN(__glewWindowPos2svARB)
+#define glWindowPos3dARB GLEW_GET_FUN(__glewWindowPos3dARB)
+#define glWindowPos3dvARB GLEW_GET_FUN(__glewWindowPos3dvARB)
+#define glWindowPos3fARB GLEW_GET_FUN(__glewWindowPos3fARB)
+#define glWindowPos3fvARB GLEW_GET_FUN(__glewWindowPos3fvARB)
+#define glWindowPos3iARB GLEW_GET_FUN(__glewWindowPos3iARB)
+#define glWindowPos3ivARB GLEW_GET_FUN(__glewWindowPos3ivARB)
+#define glWindowPos3sARB GLEW_GET_FUN(__glewWindowPos3sARB)
+#define glWindowPos3svARB GLEW_GET_FUN(__glewWindowPos3svARB)
+
+#define GLEW_ARB_window_pos GLEW_GET_VAR(__GLEW_ARB_window_pos)
+
+#endif /* GL_ARB_window_pos */
+
+/* ------------------------- GL_ATIX_point_sprites ------------------------- */
+
+#ifndef GL_ATIX_point_sprites
+#define GL_ATIX_point_sprites 1
+
+#define GL_TEXTURE_POINT_MODE_ATIX 0x60B0
+#define GL_TEXTURE_POINT_ONE_COORD_ATIX 0x60B1
+#define GL_TEXTURE_POINT_SPRITE_ATIX 0x60B2
+#define GL_POINT_SPRITE_CULL_MODE_ATIX 0x60B3
+#define GL_POINT_SPRITE_CULL_CENTER_ATIX 0x60B4
+#define GL_POINT_SPRITE_CULL_CLIP_ATIX 0x60B5
+
+#define GLEW_ATIX_point_sprites GLEW_GET_VAR(__GLEW_ATIX_point_sprites)
+
+#endif /* GL_ATIX_point_sprites */
+
+/* ---------------------- GL_ATIX_texture_env_combine3 --------------------- */
+
+#ifndef GL_ATIX_texture_env_combine3
+#define GL_ATIX_texture_env_combine3 1
+
+#define GL_MODULATE_ADD_ATIX 0x8744
+#define GL_MODULATE_SIGNED_ADD_ATIX 0x8745
+#define GL_MODULATE_SUBTRACT_ATIX 0x8746
+
+#define GLEW_ATIX_texture_env_combine3 GLEW_GET_VAR(__GLEW_ATIX_texture_env_combine3)
+
+#endif /* GL_ATIX_texture_env_combine3 */
+
+/* ----------------------- GL_ATIX_texture_env_route ----------------------- */
+
+#ifndef GL_ATIX_texture_env_route
+#define GL_ATIX_texture_env_route 1
+
+#define GL_SECONDARY_COLOR_ATIX 0x8747
+#define GL_TEXTURE_OUTPUT_RGB_ATIX 0x8748
+#define GL_TEXTURE_OUTPUT_ALPHA_ATIX 0x8749
+
+#define GLEW_ATIX_texture_env_route GLEW_GET_VAR(__GLEW_ATIX_texture_env_route)
+
+#endif /* GL_ATIX_texture_env_route */
+
+/* ---------------- GL_ATIX_vertex_shader_output_point_size ---------------- */
+
+#ifndef GL_ATIX_vertex_shader_output_point_size
+#define GL_ATIX_vertex_shader_output_point_size 1
+
+#define GL_OUTPUT_POINT_SIZE_ATIX 0x610E
+
+#define GLEW_ATIX_vertex_shader_output_point_size GLEW_GET_VAR(__GLEW_ATIX_vertex_shader_output_point_size)
+
+#endif /* GL_ATIX_vertex_shader_output_point_size */
+
+/* -------------------------- GL_ATI_draw_buffers -------------------------- */
+
+#ifndef GL_ATI_draw_buffers
+#define GL_ATI_draw_buffers 1
+
+#define GL_MAX_DRAW_BUFFERS_ATI 0x8824
+#define GL_DRAW_BUFFER0_ATI 0x8825
+#define GL_DRAW_BUFFER1_ATI 0x8826
+#define GL_DRAW_BUFFER2_ATI 0x8827
+#define GL_DRAW_BUFFER3_ATI 0x8828
+#define GL_DRAW_BUFFER4_ATI 0x8829
+#define GL_DRAW_BUFFER5_ATI 0x882A
+#define GL_DRAW_BUFFER6_ATI 0x882B
+#define GL_DRAW_BUFFER7_ATI 0x882C
+#define GL_DRAW_BUFFER8_ATI 0x882D
+#define GL_DRAW_BUFFER9_ATI 0x882E
+#define GL_DRAW_BUFFER10_ATI 0x882F
+#define GL_DRAW_BUFFER11_ATI 0x8830
+#define GL_DRAW_BUFFER12_ATI 0x8831
+#define GL_DRAW_BUFFER13_ATI 0x8832
+#define GL_DRAW_BUFFER14_ATI 0x8833
+#define GL_DRAW_BUFFER15_ATI 0x8834
+
+typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum* bufs);
+
+#define glDrawBuffersATI GLEW_GET_FUN(__glewDrawBuffersATI)
+
+#define GLEW_ATI_draw_buffers GLEW_GET_VAR(__GLEW_ATI_draw_buffers)
+
+#endif /* GL_ATI_draw_buffers */
+
+/* -------------------------- GL_ATI_element_array ------------------------- */
+
+#ifndef GL_ATI_element_array
+#define GL_ATI_element_array 1
+
+#define GL_ELEMENT_ARRAY_ATI 0x8768
+#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769
+#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A
+
+typedef void (GLAPIENTRY * PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count);
+typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count);
+typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void* pointer);
+
+#define glDrawElementArrayATI GLEW_GET_FUN(__glewDrawElementArrayATI)
+#define glDrawRangeElementArrayATI GLEW_GET_FUN(__glewDrawRangeElementArrayATI)
+#define glElementPointerATI GLEW_GET_FUN(__glewElementPointerATI)
+
+#define GLEW_ATI_element_array GLEW_GET_VAR(__GLEW_ATI_element_array)
+
+#endif /* GL_ATI_element_array */
+
+/* ------------------------- GL_ATI_envmap_bumpmap ------------------------- */
+
+#ifndef GL_ATI_envmap_bumpmap
+#define GL_ATI_envmap_bumpmap 1
+
+#define GL_BUMP_ROT_MATRIX_ATI 0x8775
+#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776
+#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777
+#define GL_BUMP_TEX_UNITS_ATI 0x8778
+#define GL_DUDV_ATI 0x8779
+#define GL_DU8DV8_ATI 0x877A
+#define GL_BUMP_ENVMAP_ATI 0x877B
+#define GL_BUMP_TARGET_ATI 0x877C
+
+typedef void (GLAPIENTRY * PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);
+typedef void (GLAPIENTRY * PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);
+typedef void (GLAPIENTRY * PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);
+typedef void (GLAPIENTRY * PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);
+
+#define glGetTexBumpParameterfvATI GLEW_GET_FUN(__glewGetTexBumpParameterfvATI)
+#define glGetTexBumpParameterivATI GLEW_GET_FUN(__glewGetTexBumpParameterivATI)
+#define glTexBumpParameterfvATI GLEW_GET_FUN(__glewTexBumpParameterfvATI)
+#define glTexBumpParameterivATI GLEW_GET_FUN(__glewTexBumpParameterivATI)
+
+#define GLEW_ATI_envmap_bumpmap GLEW_GET_VAR(__GLEW_ATI_envmap_bumpmap)
+
+#endif /* GL_ATI_envmap_bumpmap */
+
+/* ------------------------- GL_ATI_fragment_shader ------------------------ */
+
+#ifndef GL_ATI_fragment_shader
+#define GL_ATI_fragment_shader 1
+
+#define GL_RED_BIT_ATI 0x00000001
+#define GL_2X_BIT_ATI 0x00000001
+#define GL_4X_BIT_ATI 0x00000002
+#define GL_GREEN_BIT_ATI 0x00000002
+#define GL_COMP_BIT_ATI 0x00000002
+#define GL_BLUE_BIT_ATI 0x00000004
+#define GL_8X_BIT_ATI 0x00000004
+#define GL_NEGATE_BIT_ATI 0x00000004
+#define GL_BIAS_BIT_ATI 0x00000008
+#define GL_HALF_BIT_ATI 0x00000008
+#define GL_QUARTER_BIT_ATI 0x00000010
+#define GL_EIGHTH_BIT_ATI 0x00000020
+#define GL_SATURATE_BIT_ATI 0x00000040
+#define GL_FRAGMENT_SHADER_ATI 0x8920
+#define GL_REG_0_ATI 0x8921
+#define GL_REG_1_ATI 0x8922
+#define GL_REG_2_ATI 0x8923
+#define GL_REG_3_ATI 0x8924
+#define GL_REG_4_ATI 0x8925
+#define GL_REG_5_ATI 0x8926
+#define GL_CON_0_ATI 0x8941
+#define GL_CON_1_ATI 0x8942
+#define GL_CON_2_ATI 0x8943
+#define GL_CON_3_ATI 0x8944
+#define GL_CON_4_ATI 0x8945
+#define GL_CON_5_ATI 0x8946
+#define GL_CON_6_ATI 0x8947
+#define GL_CON_7_ATI 0x8948
+#define GL_MOV_ATI 0x8961
+#define GL_ADD_ATI 0x8963
+#define GL_MUL_ATI 0x8964
+#define GL_SUB_ATI 0x8965
+#define GL_DOT3_ATI 0x8966
+#define GL_DOT4_ATI 0x8967
+#define GL_MAD_ATI 0x8968
+#define GL_LERP_ATI 0x8969
+#define GL_CND_ATI 0x896A
+#define GL_CND0_ATI 0x896B
+#define GL_DOT2_ADD_ATI 0x896C
+#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D
+#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E
+#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F
+#define GL_NUM_PASSES_ATI 0x8970
+#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971
+#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972
+#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973
+#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974
+#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975
+#define GL_SWIZZLE_STR_ATI 0x8976
+#define GL_SWIZZLE_STQ_ATI 0x8977
+#define GL_SWIZZLE_STR_DR_ATI 0x8978
+#define GL_SWIZZLE_STQ_DQ_ATI 0x8979
+#define GL_SWIZZLE_STRQ_ATI 0x897A
+#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B
+
+typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (GLAPIENTRY * PFNGLBEGINFRAGMENTSHADERATIPROC) (void);
+typedef void (GLAPIENTRY * PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (GLAPIENTRY * PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLENDFRAGMENTSHADERATIPROC) (void);
+typedef GLuint (GLAPIENTRY * PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range);
+typedef void (GLAPIENTRY * PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle);
+typedef void (GLAPIENTRY * PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle);
+typedef void (GLAPIENTRY * PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat* value);
+
+#define glAlphaFragmentOp1ATI GLEW_GET_FUN(__glewAlphaFragmentOp1ATI)
+#define glAlphaFragmentOp2ATI GLEW_GET_FUN(__glewAlphaFragmentOp2ATI)
+#define glAlphaFragmentOp3ATI GLEW_GET_FUN(__glewAlphaFragmentOp3ATI)
+#define glBeginFragmentShaderATI GLEW_GET_FUN(__glewBeginFragmentShaderATI)
+#define glBindFragmentShaderATI GLEW_GET_FUN(__glewBindFragmentShaderATI)
+#define glColorFragmentOp1ATI GLEW_GET_FUN(__glewColorFragmentOp1ATI)
+#define glColorFragmentOp2ATI GLEW_GET_FUN(__glewColorFragmentOp2ATI)
+#define glColorFragmentOp3ATI GLEW_GET_FUN(__glewColorFragmentOp3ATI)
+#define glDeleteFragmentShaderATI GLEW_GET_FUN(__glewDeleteFragmentShaderATI)
+#define glEndFragmentShaderATI GLEW_GET_FUN(__glewEndFragmentShaderATI)
+#define glGenFragmentShadersATI GLEW_GET_FUN(__glewGenFragmentShadersATI)
+#define glPassTexCoordATI GLEW_GET_FUN(__glewPassTexCoordATI)
+#define glSampleMapATI GLEW_GET_FUN(__glewSampleMapATI)
+#define glSetFragmentShaderConstantATI GLEW_GET_FUN(__glewSetFragmentShaderConstantATI)
+
+#define GLEW_ATI_fragment_shader GLEW_GET_VAR(__GLEW_ATI_fragment_shader)
+
+#endif /* GL_ATI_fragment_shader */
+
+/* ------------------------ GL_ATI_map_object_buffer ----------------------- */
+
+#ifndef GL_ATI_map_object_buffer
+#define GL_ATI_map_object_buffer 1
+
+typedef void* (GLAPIENTRY * PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer);
+
+#define glMapObjectBufferATI GLEW_GET_FUN(__glewMapObjectBufferATI)
+#define glUnmapObjectBufferATI GLEW_GET_FUN(__glewUnmapObjectBufferATI)
+
+#define GLEW_ATI_map_object_buffer GLEW_GET_VAR(__GLEW_ATI_map_object_buffer)
+
+#endif /* GL_ATI_map_object_buffer */
+
+/* ----------------------------- GL_ATI_meminfo ---------------------------- */
+
+#ifndef GL_ATI_meminfo
+#define GL_ATI_meminfo 1
+
+#define GL_VBO_FREE_MEMORY_ATI 0x87FB
+#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC
+#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD
+
+#define GLEW_ATI_meminfo GLEW_GET_VAR(__GLEW_ATI_meminfo)
+
+#endif /* GL_ATI_meminfo */
+
+/* -------------------------- GL_ATI_pn_triangles -------------------------- */
+
+#ifndef GL_ATI_pn_triangles
+#define GL_ATI_pn_triangles 1
+
+#define GL_PN_TRIANGLES_ATI 0x87F0
+#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1
+#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2
+#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3
+#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4
+#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5
+#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6
+#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7
+#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8
+
+typedef void (GLAPIENTRY * PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param);
+
+#define glPNTrianglesfATI GLEW_GET_FUN(__glewPNTrianglesfATI)
+#define glPNTrianglesiATI GLEW_GET_FUN(__glewPNTrianglesiATI)
+
+#define GLEW_ATI_pn_triangles GLEW_GET_VAR(__GLEW_ATI_pn_triangles)
+
+#endif /* GL_ATI_pn_triangles */
+
+/* ------------------------ GL_ATI_separate_stencil ------------------------ */
+
+#ifndef GL_ATI_separate_stencil
+#define GL_ATI_separate_stencil 1
+
+#define GL_STENCIL_BACK_FUNC_ATI 0x8800
+#define GL_STENCIL_BACK_FAIL_ATI 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803
+
+typedef void (GLAPIENTRY * PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+typedef void (GLAPIENTRY * PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+
+#define glStencilFuncSeparateATI GLEW_GET_FUN(__glewStencilFuncSeparateATI)
+#define glStencilOpSeparateATI GLEW_GET_FUN(__glewStencilOpSeparateATI)
+
+#define GLEW_ATI_separate_stencil GLEW_GET_VAR(__GLEW_ATI_separate_stencil)
+
+#endif /* GL_ATI_separate_stencil */
+
+/* ----------------------- GL_ATI_shader_texture_lod ----------------------- */
+
+#ifndef GL_ATI_shader_texture_lod
+#define GL_ATI_shader_texture_lod 1
+
+#define GLEW_ATI_shader_texture_lod GLEW_GET_VAR(__GLEW_ATI_shader_texture_lod)
+
+#endif /* GL_ATI_shader_texture_lod */
+
+/* ---------------------- GL_ATI_text_fragment_shader ---------------------- */
+
+#ifndef GL_ATI_text_fragment_shader
+#define GL_ATI_text_fragment_shader 1
+
+#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200
+
+#define GLEW_ATI_text_fragment_shader GLEW_GET_VAR(__GLEW_ATI_text_fragment_shader)
+
+#endif /* GL_ATI_text_fragment_shader */
+
+/* --------------------- GL_ATI_texture_compression_3dc -------------------- */
+
+#ifndef GL_ATI_texture_compression_3dc
+#define GL_ATI_texture_compression_3dc 1
+
+#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837
+
+#define GLEW_ATI_texture_compression_3dc GLEW_GET_VAR(__GLEW_ATI_texture_compression_3dc)
+
+#endif /* GL_ATI_texture_compression_3dc */
+
+/* ---------------------- GL_ATI_texture_env_combine3 ---------------------- */
+
+#ifndef GL_ATI_texture_env_combine3
+#define GL_ATI_texture_env_combine3 1
+
+#define GL_MODULATE_ADD_ATI 0x8744
+#define GL_MODULATE_SIGNED_ADD_ATI 0x8745
+#define GL_MODULATE_SUBTRACT_ATI 0x8746
+
+#define GLEW_ATI_texture_env_combine3 GLEW_GET_VAR(__GLEW_ATI_texture_env_combine3)
+
+#endif /* GL_ATI_texture_env_combine3 */
+
+/* -------------------------- GL_ATI_texture_float ------------------------- */
+
+#ifndef GL_ATI_texture_float
+#define GL_ATI_texture_float 1
+
+#define GL_RGBA_FLOAT32_ATI 0x8814
+#define GL_RGB_FLOAT32_ATI 0x8815
+#define GL_ALPHA_FLOAT32_ATI 0x8816
+#define GL_INTENSITY_FLOAT32_ATI 0x8817
+#define GL_LUMINANCE_FLOAT32_ATI 0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819
+#define GL_RGBA_FLOAT16_ATI 0x881A
+#define GL_RGB_FLOAT16_ATI 0x881B
+#define GL_ALPHA_FLOAT16_ATI 0x881C
+#define GL_INTENSITY_FLOAT16_ATI 0x881D
+#define GL_LUMINANCE_FLOAT16_ATI 0x881E
+#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F
+
+#define GLEW_ATI_texture_float GLEW_GET_VAR(__GLEW_ATI_texture_float)
+
+#endif /* GL_ATI_texture_float */
+
+/* ----------------------- GL_ATI_texture_mirror_once ---------------------- */
+
+#ifndef GL_ATI_texture_mirror_once
+#define GL_ATI_texture_mirror_once 1
+
+#define GL_MIRROR_CLAMP_ATI 0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743
+
+#define GLEW_ATI_texture_mirror_once GLEW_GET_VAR(__GLEW_ATI_texture_mirror_once)
+
+#endif /* GL_ATI_texture_mirror_once */
+
+/* ----------------------- GL_ATI_vertex_array_object ---------------------- */
+
+#ifndef GL_ATI_vertex_array_object
+#define GL_ATI_vertex_array_object 1
+
+#define GL_STATIC_ATI 0x8760
+#define GL_DYNAMIC_ATI 0x8761
+#define GL_PRESERVE_ATI 0x8762
+#define GL_DISCARD_ATI 0x8763
+#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764
+#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765
+#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766
+#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767
+
+typedef void (GLAPIENTRY * PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (GLAPIENTRY * PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef GLuint (GLAPIENTRY * PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void* pointer, GLenum usage);
+typedef void (GLAPIENTRY * PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void* pointer, GLenum preserve);
+typedef void (GLAPIENTRY * PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+
+#define glArrayObjectATI GLEW_GET_FUN(__glewArrayObjectATI)
+#define glFreeObjectBufferATI GLEW_GET_FUN(__glewFreeObjectBufferATI)
+#define glGetArrayObjectfvATI GLEW_GET_FUN(__glewGetArrayObjectfvATI)
+#define glGetArrayObjectivATI GLEW_GET_FUN(__glewGetArrayObjectivATI)
+#define glGetObjectBufferfvATI GLEW_GET_FUN(__glewGetObjectBufferfvATI)
+#define glGetObjectBufferivATI GLEW_GET_FUN(__glewGetObjectBufferivATI)
+#define glGetVariantArrayObjectfvATI GLEW_GET_FUN(__glewGetVariantArrayObjectfvATI)
+#define glGetVariantArrayObjectivATI GLEW_GET_FUN(__glewGetVariantArrayObjectivATI)
+#define glIsObjectBufferATI GLEW_GET_FUN(__glewIsObjectBufferATI)
+#define glNewObjectBufferATI GLEW_GET_FUN(__glewNewObjectBufferATI)
+#define glUpdateObjectBufferATI GLEW_GET_FUN(__glewUpdateObjectBufferATI)
+#define glVariantArrayObjectATI GLEW_GET_FUN(__glewVariantArrayObjectATI)
+
+#define GLEW_ATI_vertex_array_object GLEW_GET_VAR(__GLEW_ATI_vertex_array_object)
+
+#endif /* GL_ATI_vertex_array_object */
+
+/* ------------------- GL_ATI_vertex_attrib_array_object ------------------- */
+
+#ifndef GL_ATI_vertex_attrib_array_object
+#define GL_ATI_vertex_attrib_array_object 1
+
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);
+
+#define glGetVertexAttribArrayObjectfvATI GLEW_GET_FUN(__glewGetVertexAttribArrayObjectfvATI)
+#define glGetVertexAttribArrayObjectivATI GLEW_GET_FUN(__glewGetVertexAttribArrayObjectivATI)
+#define glVertexAttribArrayObjectATI GLEW_GET_FUN(__glewVertexAttribArrayObjectATI)
+
+#define GLEW_ATI_vertex_attrib_array_object GLEW_GET_VAR(__GLEW_ATI_vertex_attrib_array_object)
+
+#endif /* GL_ATI_vertex_attrib_array_object */
+
+/* ------------------------- GL_ATI_vertex_streams ------------------------- */
+
+#ifndef GL_ATI_vertex_streams
+#define GL_ATI_vertex_streams 1
+
+#define GL_MAX_VERTEX_STREAMS_ATI 0x876B
+#define GL_VERTEX_SOURCE_ATI 0x876C
+#define GL_VERTEX_STREAM0_ATI 0x876D
+#define GL_VERTEX_STREAM1_ATI 0x876E
+#define GL_VERTEX_STREAM2_ATI 0x876F
+#define GL_VERTEX_STREAM3_ATI 0x8770
+#define GL_VERTEX_STREAM4_ATI 0x8771
+#define GL_VERTEX_STREAM5_ATI 0x8772
+#define GL_VERTEX_STREAM6_ATI 0x8773
+#define GL_VERTEX_STREAM7_ATI 0x8774
+
+typedef void (GLAPIENTRY * PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte x, GLbyte y, GLbyte z);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *v);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *v);
+
+#define glClientActiveVertexStreamATI GLEW_GET_FUN(__glewClientActiveVertexStreamATI)
+#define glNormalStream3bATI GLEW_GET_FUN(__glewNormalStream3bATI)
+#define glNormalStream3bvATI GLEW_GET_FUN(__glewNormalStream3bvATI)
+#define glNormalStream3dATI GLEW_GET_FUN(__glewNormalStream3dATI)
+#define glNormalStream3dvATI GLEW_GET_FUN(__glewNormalStream3dvATI)
+#define glNormalStream3fATI GLEW_GET_FUN(__glewNormalStream3fATI)
+#define glNormalStream3fvATI GLEW_GET_FUN(__glewNormalStream3fvATI)
+#define glNormalStream3iATI GLEW_GET_FUN(__glewNormalStream3iATI)
+#define glNormalStream3ivATI GLEW_GET_FUN(__glewNormalStream3ivATI)
+#define glNormalStream3sATI GLEW_GET_FUN(__glewNormalStream3sATI)
+#define glNormalStream3svATI GLEW_GET_FUN(__glewNormalStream3svATI)
+#define glVertexBlendEnvfATI GLEW_GET_FUN(__glewVertexBlendEnvfATI)
+#define glVertexBlendEnviATI GLEW_GET_FUN(__glewVertexBlendEnviATI)
+#define glVertexStream2dATI GLEW_GET_FUN(__glewVertexStream2dATI)
+#define glVertexStream2dvATI GLEW_GET_FUN(__glewVertexStream2dvATI)
+#define glVertexStream2fATI GLEW_GET_FUN(__glewVertexStream2fATI)
+#define glVertexStream2fvATI GLEW_GET_FUN(__glewVertexStream2fvATI)
+#define glVertexStream2iATI GLEW_GET_FUN(__glewVertexStream2iATI)
+#define glVertexStream2ivATI GLEW_GET_FUN(__glewVertexStream2ivATI)
+#define glVertexStream2sATI GLEW_GET_FUN(__glewVertexStream2sATI)
+#define glVertexStream2svATI GLEW_GET_FUN(__glewVertexStream2svATI)
+#define glVertexStream3dATI GLEW_GET_FUN(__glewVertexStream3dATI)
+#define glVertexStream3dvATI GLEW_GET_FUN(__glewVertexStream3dvATI)
+#define glVertexStream3fATI GLEW_GET_FUN(__glewVertexStream3fATI)
+#define glVertexStream3fvATI GLEW_GET_FUN(__glewVertexStream3fvATI)
+#define glVertexStream3iATI GLEW_GET_FUN(__glewVertexStream3iATI)
+#define glVertexStream3ivATI GLEW_GET_FUN(__glewVertexStream3ivATI)
+#define glVertexStream3sATI GLEW_GET_FUN(__glewVertexStream3sATI)
+#define glVertexStream3svATI GLEW_GET_FUN(__glewVertexStream3svATI)
+#define glVertexStream4dATI GLEW_GET_FUN(__glewVertexStream4dATI)
+#define glVertexStream4dvATI GLEW_GET_FUN(__glewVertexStream4dvATI)
+#define glVertexStream4fATI GLEW_GET_FUN(__glewVertexStream4fATI)
+#define glVertexStream4fvATI GLEW_GET_FUN(__glewVertexStream4fvATI)
+#define glVertexStream4iATI GLEW_GET_FUN(__glewVertexStream4iATI)
+#define glVertexStream4ivATI GLEW_GET_FUN(__glewVertexStream4ivATI)
+#define glVertexStream4sATI GLEW_GET_FUN(__glewVertexStream4sATI)
+#define glVertexStream4svATI GLEW_GET_FUN(__glewVertexStream4svATI)
+
+#define GLEW_ATI_vertex_streams GLEW_GET_VAR(__GLEW_ATI_vertex_streams)
+
+#endif /* GL_ATI_vertex_streams */
+
+/* --------------------------- GL_EXT_422_pixels --------------------------- */
+
+#ifndef GL_EXT_422_pixels
+#define GL_EXT_422_pixels 1
+
+#define GL_422_EXT 0x80CC
+#define GL_422_REV_EXT 0x80CD
+#define GL_422_AVERAGE_EXT 0x80CE
+#define GL_422_REV_AVERAGE_EXT 0x80CF
+
+#define GLEW_EXT_422_pixels GLEW_GET_VAR(__GLEW_EXT_422_pixels)
+
+#endif /* GL_EXT_422_pixels */
+
+/* ---------------------------- GL_EXT_Cg_shader --------------------------- */
+
+#ifndef GL_EXT_Cg_shader
+#define GL_EXT_Cg_shader 1
+
+#define GL_CG_VERTEX_SHADER_EXT 0x890E
+#define GL_CG_FRAGMENT_SHADER_EXT 0x890F
+
+#define GLEW_EXT_Cg_shader GLEW_GET_VAR(__GLEW_EXT_Cg_shader)
+
+#endif /* GL_EXT_Cg_shader */
+
+/* ------------------------------ GL_EXT_abgr ------------------------------ */
+
+#ifndef GL_EXT_abgr
+#define GL_EXT_abgr 1
+
+#define GL_ABGR_EXT 0x8000
+
+#define GLEW_EXT_abgr GLEW_GET_VAR(__GLEW_EXT_abgr)
+
+#endif /* GL_EXT_abgr */
+
+/* ------------------------------ GL_EXT_bgra ------------------------------ */
+
+#ifndef GL_EXT_bgra
+#define GL_EXT_bgra 1
+
+#define GL_BGR_EXT 0x80E0
+#define GL_BGRA_EXT 0x80E1
+
+#define GLEW_EXT_bgra GLEW_GET_VAR(__GLEW_EXT_bgra)
+
+#endif /* GL_EXT_bgra */
+
+/* ------------------------ GL_EXT_bindable_uniform ------------------------ */
+
+#ifndef GL_EXT_bindable_uniform
+#define GL_EXT_bindable_uniform 1
+
+#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2
+#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3
+#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4
+#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED
+#define GL_UNIFORM_BUFFER_EXT 0x8DEE
+#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF
+
+typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location);
+typedef GLintptr (GLAPIENTRY * PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location);
+typedef void (GLAPIENTRY * PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer);
+
+#define glGetUniformBufferSizeEXT GLEW_GET_FUN(__glewGetUniformBufferSizeEXT)
+#define glGetUniformOffsetEXT GLEW_GET_FUN(__glewGetUniformOffsetEXT)
+#define glUniformBufferEXT GLEW_GET_FUN(__glewUniformBufferEXT)
+
+#define GLEW_EXT_bindable_uniform GLEW_GET_VAR(__GLEW_EXT_bindable_uniform)
+
+#endif /* GL_EXT_bindable_uniform */
+
+/* --------------------------- GL_EXT_blend_color -------------------------- */
+
+#ifndef GL_EXT_blend_color
+#define GL_EXT_blend_color 1
+
+#define GL_CONSTANT_COLOR_EXT 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002
+#define GL_CONSTANT_ALPHA_EXT 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004
+#define GL_BLEND_COLOR_EXT 0x8005
+
+typedef void (GLAPIENTRY * PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+
+#define glBlendColorEXT GLEW_GET_FUN(__glewBlendColorEXT)
+
+#define GLEW_EXT_blend_color GLEW_GET_VAR(__GLEW_EXT_blend_color)
+
+#endif /* GL_EXT_blend_color */
+
+/* --------------------- GL_EXT_blend_equation_separate -------------------- */
+
+#ifndef GL_EXT_blend_equation_separate
+#define GL_EXT_blend_equation_separate 1
+
+#define GL_BLEND_EQUATION_RGB_EXT 0x8009
+#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D
+
+typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha);
+
+#define glBlendEquationSeparateEXT GLEW_GET_FUN(__glewBlendEquationSeparateEXT)
+
+#define GLEW_EXT_blend_equation_separate GLEW_GET_VAR(__GLEW_EXT_blend_equation_separate)
+
+#endif /* GL_EXT_blend_equation_separate */
+
+/* ----------------------- GL_EXT_blend_func_separate ---------------------- */
+
+#ifndef GL_EXT_blend_func_separate
+#define GL_EXT_blend_func_separate 1
+
+#define GL_BLEND_DST_RGB_EXT 0x80C8
+#define GL_BLEND_SRC_RGB_EXT 0x80C9
+#define GL_BLEND_DST_ALPHA_EXT 0x80CA
+#define GL_BLEND_SRC_ALPHA_EXT 0x80CB
+
+typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+
+#define glBlendFuncSeparateEXT GLEW_GET_FUN(__glewBlendFuncSeparateEXT)
+
+#define GLEW_EXT_blend_func_separate GLEW_GET_VAR(__GLEW_EXT_blend_func_separate)
+
+#endif /* GL_EXT_blend_func_separate */
+
+/* ------------------------- GL_EXT_blend_logic_op ------------------------- */
+
+#ifndef GL_EXT_blend_logic_op
+#define GL_EXT_blend_logic_op 1
+
+#define GLEW_EXT_blend_logic_op GLEW_GET_VAR(__GLEW_EXT_blend_logic_op)
+
+#endif /* GL_EXT_blend_logic_op */
+
+/* -------------------------- GL_EXT_blend_minmax -------------------------- */
+
+#ifndef GL_EXT_blend_minmax
+#define GL_EXT_blend_minmax 1
+
+#define GL_FUNC_ADD_EXT 0x8006
+#define GL_MIN_EXT 0x8007
+#define GL_MAX_EXT 0x8008
+#define GL_BLEND_EQUATION_EXT 0x8009
+
+typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode);
+
+#define glBlendEquationEXT GLEW_GET_FUN(__glewBlendEquationEXT)
+
+#define GLEW_EXT_blend_minmax GLEW_GET_VAR(__GLEW_EXT_blend_minmax)
+
+#endif /* GL_EXT_blend_minmax */
+
+/* ------------------------- GL_EXT_blend_subtract ------------------------- */
+
+#ifndef GL_EXT_blend_subtract
+#define GL_EXT_blend_subtract 1
+
+#define GL_FUNC_SUBTRACT_EXT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B
+
+#define GLEW_EXT_blend_subtract GLEW_GET_VAR(__GLEW_EXT_blend_subtract)
+
+#endif /* GL_EXT_blend_subtract */
+
+/* ------------------------ GL_EXT_clip_volume_hint ------------------------ */
+
+#ifndef GL_EXT_clip_volume_hint
+#define GL_EXT_clip_volume_hint 1
+
+#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0
+
+#define GLEW_EXT_clip_volume_hint GLEW_GET_VAR(__GLEW_EXT_clip_volume_hint)
+
+#endif /* GL_EXT_clip_volume_hint */
+
+/* ------------------------------ GL_EXT_cmyka ----------------------------- */
+
+#ifndef GL_EXT_cmyka
+#define GL_EXT_cmyka 1
+
+#define GL_CMYK_EXT 0x800C
+#define GL_CMYKA_EXT 0x800D
+#define GL_PACK_CMYK_HINT_EXT 0x800E
+#define GL_UNPACK_CMYK_HINT_EXT 0x800F
+
+#define GLEW_EXT_cmyka GLEW_GET_VAR(__GLEW_EXT_cmyka)
+
+#endif /* GL_EXT_cmyka */
+
+/* ------------------------- GL_EXT_color_subtable ------------------------- */
+
+#ifndef GL_EXT_color_subtable
+#define GL_EXT_color_subtable 1
+
+typedef void (GLAPIENTRY * PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+
+#define glColorSubTableEXT GLEW_GET_FUN(__glewColorSubTableEXT)
+#define glCopyColorSubTableEXT GLEW_GET_FUN(__glewCopyColorSubTableEXT)
+
+#define GLEW_EXT_color_subtable GLEW_GET_VAR(__GLEW_EXT_color_subtable)
+
+#endif /* GL_EXT_color_subtable */
+
+/* ---------------------- GL_EXT_compiled_vertex_array --------------------- */
+
+#ifndef GL_EXT_compiled_vertex_array
+#define GL_EXT_compiled_vertex_array 1
+
+#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8
+#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9
+
+typedef void (GLAPIENTRY * PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);
+typedef void (GLAPIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void);
+
+#define glLockArraysEXT GLEW_GET_FUN(__glewLockArraysEXT)
+#define glUnlockArraysEXT GLEW_GET_FUN(__glewUnlockArraysEXT)
+
+#define GLEW_EXT_compiled_vertex_array GLEW_GET_VAR(__GLEW_EXT_compiled_vertex_array)
+
+#endif /* GL_EXT_compiled_vertex_array */
+
+/* --------------------------- GL_EXT_convolution -------------------------- */
+
+#ifndef GL_EXT_convolution
+#define GL_EXT_convolution 1
+
+#define GL_CONVOLUTION_1D_EXT 0x8010
+#define GL_CONVOLUTION_2D_EXT 0x8011
+#define GL_SEPARABLE_2D_EXT 0x8012
+#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013
+#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014
+#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015
+#define GL_REDUCE_EXT 0x8016
+#define GL_CONVOLUTION_FORMAT_EXT 0x8017
+#define GL_CONVOLUTION_WIDTH_EXT 0x8018
+#define GL_CONVOLUTION_HEIGHT_EXT 0x8019
+#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023
+
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void* image);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* image);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void* image);
+typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void* row, void* column, void* span);
+typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* row, const void* column);
+
+#define glConvolutionFilter1DEXT GLEW_GET_FUN(__glewConvolutionFilter1DEXT)
+#define glConvolutionFilter2DEXT GLEW_GET_FUN(__glewConvolutionFilter2DEXT)
+#define glConvolutionParameterfEXT GLEW_GET_FUN(__glewConvolutionParameterfEXT)
+#define glConvolutionParameterfvEXT GLEW_GET_FUN(__glewConvolutionParameterfvEXT)
+#define glConvolutionParameteriEXT GLEW_GET_FUN(__glewConvolutionParameteriEXT)
+#define glConvolutionParameterivEXT GLEW_GET_FUN(__glewConvolutionParameterivEXT)
+#define glCopyConvolutionFilter1DEXT GLEW_GET_FUN(__glewCopyConvolutionFilter1DEXT)
+#define glCopyConvolutionFilter2DEXT GLEW_GET_FUN(__glewCopyConvolutionFilter2DEXT)
+#define glGetConvolutionFilterEXT GLEW_GET_FUN(__glewGetConvolutionFilterEXT)
+#define glGetConvolutionParameterfvEXT GLEW_GET_FUN(__glewGetConvolutionParameterfvEXT)
+#define glGetConvolutionParameterivEXT GLEW_GET_FUN(__glewGetConvolutionParameterivEXT)
+#define glGetSeparableFilterEXT GLEW_GET_FUN(__glewGetSeparableFilterEXT)
+#define glSeparableFilter2DEXT GLEW_GET_FUN(__glewSeparableFilter2DEXT)
+
+#define GLEW_EXT_convolution GLEW_GET_VAR(__GLEW_EXT_convolution)
+
+#endif /* GL_EXT_convolution */
+
+/* ------------------------ GL_EXT_coordinate_frame ------------------------ */
+
+#ifndef GL_EXT_coordinate_frame
+#define GL_EXT_coordinate_frame 1
+
+#define GL_TANGENT_ARRAY_EXT 0x8439
+#define GL_BINORMAL_ARRAY_EXT 0x843A
+#define GL_CURRENT_TANGENT_EXT 0x843B
+#define GL_CURRENT_BINORMAL_EXT 0x843C
+#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E
+#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F
+#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440
+#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441
+#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442
+#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443
+#define GL_MAP1_TANGENT_EXT 0x8444
+#define GL_MAP2_TANGENT_EXT 0x8445
+#define GL_MAP1_BINORMAL_EXT 0x8446
+#define GL_MAP2_BINORMAL_EXT 0x8447
+
+typedef void (GLAPIENTRY * PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, void* pointer);
+typedef void (GLAPIENTRY * PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, void* pointer);
+
+#define glBinormalPointerEXT GLEW_GET_FUN(__glewBinormalPointerEXT)
+#define glTangentPointerEXT GLEW_GET_FUN(__glewTangentPointerEXT)
+
+#define GLEW_EXT_coordinate_frame GLEW_GET_VAR(__GLEW_EXT_coordinate_frame)
+
+#endif /* GL_EXT_coordinate_frame */
+
+/* -------------------------- GL_EXT_copy_texture -------------------------- */
+
+#ifndef GL_EXT_copy_texture
+#define GL_EXT_copy_texture 1
+
+typedef void (GLAPIENTRY * PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (GLAPIENTRY * PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+
+#define glCopyTexImage1DEXT GLEW_GET_FUN(__glewCopyTexImage1DEXT)
+#define glCopyTexImage2DEXT GLEW_GET_FUN(__glewCopyTexImage2DEXT)
+#define glCopyTexSubImage1DEXT GLEW_GET_FUN(__glewCopyTexSubImage1DEXT)
+#define glCopyTexSubImage2DEXT GLEW_GET_FUN(__glewCopyTexSubImage2DEXT)
+#define glCopyTexSubImage3DEXT GLEW_GET_FUN(__glewCopyTexSubImage3DEXT)
+
+#define GLEW_EXT_copy_texture GLEW_GET_VAR(__GLEW_EXT_copy_texture)
+
+#endif /* GL_EXT_copy_texture */
+
+/* --------------------------- GL_EXT_cull_vertex -------------------------- */
+
+#ifndef GL_EXT_cull_vertex
+#define GL_EXT_cull_vertex 1
+
+#define GL_CULL_VERTEX_EXT 0x81AA
+#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB
+#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC
+
+typedef void (GLAPIENTRY * PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat* params);
+
+#define glCullParameterdvEXT GLEW_GET_FUN(__glewCullParameterdvEXT)
+#define glCullParameterfvEXT GLEW_GET_FUN(__glewCullParameterfvEXT)
+
+#define GLEW_EXT_cull_vertex GLEW_GET_VAR(__GLEW_EXT_cull_vertex)
+
+#endif /* GL_EXT_cull_vertex */
+
+/* ------------------------ GL_EXT_depth_bounds_test ----------------------- */
+
+#ifndef GL_EXT_depth_bounds_test
+#define GL_EXT_depth_bounds_test 1
+
+#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890
+#define GL_DEPTH_BOUNDS_EXT 0x8891
+
+typedef void (GLAPIENTRY * PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax);
+
+#define glDepthBoundsEXT GLEW_GET_FUN(__glewDepthBoundsEXT)
+
+#define GLEW_EXT_depth_bounds_test GLEW_GET_VAR(__GLEW_EXT_depth_bounds_test)
+
+#endif /* GL_EXT_depth_bounds_test */
+
+/* ----------------------- GL_EXT_direct_state_access ---------------------- */
+
+#ifndef GL_EXT_direct_state_access
+#define GL_EXT_direct_state_access 1
+
+#define GL_PROGRAM_MATRIX_EXT 0x8E2D
+#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E
+#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F
+
+typedef void (GLAPIENTRY * PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture);
+typedef GLenum (GLAPIENTRY * PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target);
+typedef void (GLAPIENTRY * PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data);
+typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (GLAPIENTRY * PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index);
+typedef void (GLAPIENTRY * PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index);
+typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index);
+typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array);
+typedef void (GLAPIENTRY * PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index);
+typedef void (GLAPIENTRY * PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index);
+typedef void (GLAPIENTRY * PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index);
+typedef void (GLAPIENTRY * PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array);
+typedef void (GLAPIENTRY * PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum* bufs);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode);
+typedef void (GLAPIENTRY * PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target);
+typedef void (GLAPIENTRY * PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target);
+typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, void* img);
+typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, void* img);
+typedef void (GLAPIENTRY * PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint* param);
+typedef void (GLAPIENTRY * PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void* pixels);
+typedef void (GLAPIENTRY * PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint* params);
+typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void** params);
+typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void* data);
+typedef void (GLAPIENTRY * PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint* params);
+typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void* string);
+typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLvoid** params);
+typedef void (GLAPIENTRY * PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, GLvoid** params);
+typedef void (GLAPIENTRY * PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void* pixels);
+typedef void (GLAPIENTRY * PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint* params);
+typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint* param);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint* param);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLvoid** param);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, GLvoid** param);
+typedef GLvoid * (GLAPIENTRY * PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access);
+typedef GLvoid * (GLAPIENTRY * PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (GLAPIENTRY * PFNGLMATRIXFRUSTUMEXTPROC) (GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f);
+typedef void (GLAPIENTRY * PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum matrixMode);
+typedef void (GLAPIENTRY * PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum matrixMode, const GLdouble* m);
+typedef void (GLAPIENTRY * PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum matrixMode, const GLfloat* m);
+typedef void (GLAPIENTRY * PFNGLMATRIXLOADDEXTPROC) (GLenum matrixMode, const GLdouble* m);
+typedef void (GLAPIENTRY * PFNGLMATRIXLOADFEXTPROC) (GLenum matrixMode, const GLfloat* m);
+typedef void (GLAPIENTRY * PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum matrixMode, const GLdouble* m);
+typedef void (GLAPIENTRY * PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum matrixMode, const GLfloat* m);
+typedef void (GLAPIENTRY * PFNGLMATRIXMULTDEXTPROC) (GLenum matrixMode, const GLdouble* m);
+typedef void (GLAPIENTRY * PFNGLMATRIXMULTFEXTPROC) (GLenum matrixMode, const GLfloat* m);
+typedef void (GLAPIENTRY * PFNGLMATRIXORTHOEXTPROC) (GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f);
+typedef void (GLAPIENTRY * PFNGLMATRIXPOPEXTPROC) (GLenum matrixMode);
+typedef void (GLAPIENTRY * PFNGLMATRIXPUSHEXTPROC) (GLenum matrixMode);
+typedef void (GLAPIENTRY * PFNGLMATRIXROTATEDEXTPROC) (GLenum matrixMode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLMATRIXROTATEFEXTPROC) (GLenum matrixMode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLMATRIXSCALEDEXTPROC) (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLMATRIXSCALEFEXTPROC) (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param);
+typedef void (GLAPIENTRY * PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint* params);
+typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat* param);
+typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint* param);
+typedef void (GLAPIENTRY * PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer);
+typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void* data, GLenum usage);
+typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
+typedef void (GLAPIENTRY * PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face);
+typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint* params);
+typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint* params);
+typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void* string);
+typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask);
+typedef void (GLAPIENTRY * PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint* params);
+typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat* param);
+typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint* param);
+typedef void (GLAPIENTRY * PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer);
+typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels);
+typedef GLboolean (GLAPIENTRY * PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+
+#define glBindMultiTextureEXT GLEW_GET_FUN(__glewBindMultiTextureEXT)
+#define glCheckNamedFramebufferStatusEXT GLEW_GET_FUN(__glewCheckNamedFramebufferStatusEXT)
+#define glClientAttribDefaultEXT GLEW_GET_FUN(__glewClientAttribDefaultEXT)
+#define glCompressedMultiTexImage1DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage1DEXT)
+#define glCompressedMultiTexImage2DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage2DEXT)
+#define glCompressedMultiTexImage3DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage3DEXT)
+#define glCompressedMultiTexSubImage1DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage1DEXT)
+#define glCompressedMultiTexSubImage2DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage2DEXT)
+#define glCompressedMultiTexSubImage3DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage3DEXT)
+#define glCompressedTextureImage1DEXT GLEW_GET_FUN(__glewCompressedTextureImage1DEXT)
+#define glCompressedTextureImage2DEXT GLEW_GET_FUN(__glewCompressedTextureImage2DEXT)
+#define glCompressedTextureImage3DEXT GLEW_GET_FUN(__glewCompressedTextureImage3DEXT)
+#define glCompressedTextureSubImage1DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage1DEXT)
+#define glCompressedTextureSubImage2DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage2DEXT)
+#define glCompressedTextureSubImage3DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage3DEXT)
+#define glCopyMultiTexImage1DEXT GLEW_GET_FUN(__glewCopyMultiTexImage1DEXT)
+#define glCopyMultiTexImage2DEXT GLEW_GET_FUN(__glewCopyMultiTexImage2DEXT)
+#define glCopyMultiTexSubImage1DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage1DEXT)
+#define glCopyMultiTexSubImage2DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage2DEXT)
+#define glCopyMultiTexSubImage3DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage3DEXT)
+#define glCopyTextureImage1DEXT GLEW_GET_FUN(__glewCopyTextureImage1DEXT)
+#define glCopyTextureImage2DEXT GLEW_GET_FUN(__glewCopyTextureImage2DEXT)
+#define glCopyTextureSubImage1DEXT GLEW_GET_FUN(__glewCopyTextureSubImage1DEXT)
+#define glCopyTextureSubImage2DEXT GLEW_GET_FUN(__glewCopyTextureSubImage2DEXT)
+#define glCopyTextureSubImage3DEXT GLEW_GET_FUN(__glewCopyTextureSubImage3DEXT)
+#define glDisableClientStateIndexedEXT GLEW_GET_FUN(__glewDisableClientStateIndexedEXT)
+#define glDisableClientStateiEXT GLEW_GET_FUN(__glewDisableClientStateiEXT)
+#define glDisableVertexArrayAttribEXT GLEW_GET_FUN(__glewDisableVertexArrayAttribEXT)
+#define glDisableVertexArrayEXT GLEW_GET_FUN(__glewDisableVertexArrayEXT)
+#define glEnableClientStateIndexedEXT GLEW_GET_FUN(__glewEnableClientStateIndexedEXT)
+#define glEnableClientStateiEXT GLEW_GET_FUN(__glewEnableClientStateiEXT)
+#define glEnableVertexArrayAttribEXT GLEW_GET_FUN(__glewEnableVertexArrayAttribEXT)
+#define glEnableVertexArrayEXT GLEW_GET_FUN(__glewEnableVertexArrayEXT)
+#define glFlushMappedNamedBufferRangeEXT GLEW_GET_FUN(__glewFlushMappedNamedBufferRangeEXT)
+#define glFramebufferDrawBufferEXT GLEW_GET_FUN(__glewFramebufferDrawBufferEXT)
+#define glFramebufferDrawBuffersEXT GLEW_GET_FUN(__glewFramebufferDrawBuffersEXT)
+#define glFramebufferReadBufferEXT GLEW_GET_FUN(__glewFramebufferReadBufferEXT)
+#define glGenerateMultiTexMipmapEXT GLEW_GET_FUN(__glewGenerateMultiTexMipmapEXT)
+#define glGenerateTextureMipmapEXT GLEW_GET_FUN(__glewGenerateTextureMipmapEXT)
+#define glGetCompressedMultiTexImageEXT GLEW_GET_FUN(__glewGetCompressedMultiTexImageEXT)
+#define glGetCompressedTextureImageEXT GLEW_GET_FUN(__glewGetCompressedTextureImageEXT)
+#define glGetDoubleIndexedvEXT GLEW_GET_FUN(__glewGetDoubleIndexedvEXT)
+#define glGetDoublei_vEXT GLEW_GET_FUN(__glewGetDoublei_vEXT)
+#define glGetFloatIndexedvEXT GLEW_GET_FUN(__glewGetFloatIndexedvEXT)
+#define glGetFloati_vEXT GLEW_GET_FUN(__glewGetFloati_vEXT)
+#define glGetFramebufferParameterivEXT GLEW_GET_FUN(__glewGetFramebufferParameterivEXT)
+#define glGetMultiTexEnvfvEXT GLEW_GET_FUN(__glewGetMultiTexEnvfvEXT)
+#define glGetMultiTexEnvivEXT GLEW_GET_FUN(__glewGetMultiTexEnvivEXT)
+#define glGetMultiTexGendvEXT GLEW_GET_FUN(__glewGetMultiTexGendvEXT)
+#define glGetMultiTexGenfvEXT GLEW_GET_FUN(__glewGetMultiTexGenfvEXT)
+#define glGetMultiTexGenivEXT GLEW_GET_FUN(__glewGetMultiTexGenivEXT)
+#define glGetMultiTexImageEXT GLEW_GET_FUN(__glewGetMultiTexImageEXT)
+#define glGetMultiTexLevelParameterfvEXT GLEW_GET_FUN(__glewGetMultiTexLevelParameterfvEXT)
+#define glGetMultiTexLevelParameterivEXT GLEW_GET_FUN(__glewGetMultiTexLevelParameterivEXT)
+#define glGetMultiTexParameterIivEXT GLEW_GET_FUN(__glewGetMultiTexParameterIivEXT)
+#define glGetMultiTexParameterIuivEXT GLEW_GET_FUN(__glewGetMultiTexParameterIuivEXT)
+#define glGetMultiTexParameterfvEXT GLEW_GET_FUN(__glewGetMultiTexParameterfvEXT)
+#define glGetMultiTexParameterivEXT GLEW_GET_FUN(__glewGetMultiTexParameterivEXT)
+#define glGetNamedBufferParameterivEXT GLEW_GET_FUN(__glewGetNamedBufferParameterivEXT)
+#define glGetNamedBufferPointervEXT GLEW_GET_FUN(__glewGetNamedBufferPointervEXT)
+#define glGetNamedBufferSubDataEXT GLEW_GET_FUN(__glewGetNamedBufferSubDataEXT)
+#define glGetNamedFramebufferAttachmentParameterivEXT GLEW_GET_FUN(__glewGetNamedFramebufferAttachmentParameterivEXT)
+#define glGetNamedProgramLocalParameterIivEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterIivEXT)
+#define glGetNamedProgramLocalParameterIuivEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterIuivEXT)
+#define glGetNamedProgramLocalParameterdvEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterdvEXT)
+#define glGetNamedProgramLocalParameterfvEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterfvEXT)
+#define glGetNamedProgramStringEXT GLEW_GET_FUN(__glewGetNamedProgramStringEXT)
+#define glGetNamedProgramivEXT GLEW_GET_FUN(__glewGetNamedProgramivEXT)
+#define glGetNamedRenderbufferParameterivEXT GLEW_GET_FUN(__glewGetNamedRenderbufferParameterivEXT)
+#define glGetPointerIndexedvEXT GLEW_GET_FUN(__glewGetPointerIndexedvEXT)
+#define glGetPointeri_vEXT GLEW_GET_FUN(__glewGetPointeri_vEXT)
+#define glGetTextureImageEXT GLEW_GET_FUN(__glewGetTextureImageEXT)
+#define glGetTextureLevelParameterfvEXT GLEW_GET_FUN(__glewGetTextureLevelParameterfvEXT)
+#define glGetTextureLevelParameterivEXT GLEW_GET_FUN(__glewGetTextureLevelParameterivEXT)
+#define glGetTextureParameterIivEXT GLEW_GET_FUN(__glewGetTextureParameterIivEXT)
+#define glGetTextureParameterIuivEXT GLEW_GET_FUN(__glewGetTextureParameterIuivEXT)
+#define glGetTextureParameterfvEXT GLEW_GET_FUN(__glewGetTextureParameterfvEXT)
+#define glGetTextureParameterivEXT GLEW_GET_FUN(__glewGetTextureParameterivEXT)
+#define glGetVertexArrayIntegeri_vEXT GLEW_GET_FUN(__glewGetVertexArrayIntegeri_vEXT)
+#define glGetVertexArrayIntegervEXT GLEW_GET_FUN(__glewGetVertexArrayIntegervEXT)
+#define glGetVertexArrayPointeri_vEXT GLEW_GET_FUN(__glewGetVertexArrayPointeri_vEXT)
+#define glGetVertexArrayPointervEXT GLEW_GET_FUN(__glewGetVertexArrayPointervEXT)
+#define glMapNamedBufferEXT GLEW_GET_FUN(__glewMapNamedBufferEXT)
+#define glMapNamedBufferRangeEXT GLEW_GET_FUN(__glewMapNamedBufferRangeEXT)
+#define glMatrixFrustumEXT GLEW_GET_FUN(__glewMatrixFrustumEXT)
+#define glMatrixLoadIdentityEXT GLEW_GET_FUN(__glewMatrixLoadIdentityEXT)
+#define glMatrixLoadTransposedEXT GLEW_GET_FUN(__glewMatrixLoadTransposedEXT)
+#define glMatrixLoadTransposefEXT GLEW_GET_FUN(__glewMatrixLoadTransposefEXT)
+#define glMatrixLoaddEXT GLEW_GET_FUN(__glewMatrixLoaddEXT)
+#define glMatrixLoadfEXT GLEW_GET_FUN(__glewMatrixLoadfEXT)
+#define glMatrixMultTransposedEXT GLEW_GET_FUN(__glewMatrixMultTransposedEXT)
+#define glMatrixMultTransposefEXT GLEW_GET_FUN(__glewMatrixMultTransposefEXT)
+#define glMatrixMultdEXT GLEW_GET_FUN(__glewMatrixMultdEXT)
+#define glMatrixMultfEXT GLEW_GET_FUN(__glewMatrixMultfEXT)
+#define glMatrixOrthoEXT GLEW_GET_FUN(__glewMatrixOrthoEXT)
+#define glMatrixPopEXT GLEW_GET_FUN(__glewMatrixPopEXT)
+#define glMatrixPushEXT GLEW_GET_FUN(__glewMatrixPushEXT)
+#define glMatrixRotatedEXT GLEW_GET_FUN(__glewMatrixRotatedEXT)
+#define glMatrixRotatefEXT GLEW_GET_FUN(__glewMatrixRotatefEXT)
+#define glMatrixScaledEXT GLEW_GET_FUN(__glewMatrixScaledEXT)
+#define glMatrixScalefEXT GLEW_GET_FUN(__glewMatrixScalefEXT)
+#define glMatrixTranslatedEXT GLEW_GET_FUN(__glewMatrixTranslatedEXT)
+#define glMatrixTranslatefEXT GLEW_GET_FUN(__glewMatrixTranslatefEXT)
+#define glMultiTexBufferEXT GLEW_GET_FUN(__glewMultiTexBufferEXT)
+#define glMultiTexCoordPointerEXT GLEW_GET_FUN(__glewMultiTexCoordPointerEXT)
+#define glMultiTexEnvfEXT GLEW_GET_FUN(__glewMultiTexEnvfEXT)
+#define glMultiTexEnvfvEXT GLEW_GET_FUN(__glewMultiTexEnvfvEXT)
+#define glMultiTexEnviEXT GLEW_GET_FUN(__glewMultiTexEnviEXT)
+#define glMultiTexEnvivEXT GLEW_GET_FUN(__glewMultiTexEnvivEXT)
+#define glMultiTexGendEXT GLEW_GET_FUN(__glewMultiTexGendEXT)
+#define glMultiTexGendvEXT GLEW_GET_FUN(__glewMultiTexGendvEXT)
+#define glMultiTexGenfEXT GLEW_GET_FUN(__glewMultiTexGenfEXT)
+#define glMultiTexGenfvEXT GLEW_GET_FUN(__glewMultiTexGenfvEXT)
+#define glMultiTexGeniEXT GLEW_GET_FUN(__glewMultiTexGeniEXT)
+#define glMultiTexGenivEXT GLEW_GET_FUN(__glewMultiTexGenivEXT)
+#define glMultiTexImage1DEXT GLEW_GET_FUN(__glewMultiTexImage1DEXT)
+#define glMultiTexImage2DEXT GLEW_GET_FUN(__glewMultiTexImage2DEXT)
+#define glMultiTexImage3DEXT GLEW_GET_FUN(__glewMultiTexImage3DEXT)
+#define glMultiTexParameterIivEXT GLEW_GET_FUN(__glewMultiTexParameterIivEXT)
+#define glMultiTexParameterIuivEXT GLEW_GET_FUN(__glewMultiTexParameterIuivEXT)
+#define glMultiTexParameterfEXT GLEW_GET_FUN(__glewMultiTexParameterfEXT)
+#define glMultiTexParameterfvEXT GLEW_GET_FUN(__glewMultiTexParameterfvEXT)
+#define glMultiTexParameteriEXT GLEW_GET_FUN(__glewMultiTexParameteriEXT)
+#define glMultiTexParameterivEXT GLEW_GET_FUN(__glewMultiTexParameterivEXT)
+#define glMultiTexRenderbufferEXT GLEW_GET_FUN(__glewMultiTexRenderbufferEXT)
+#define glMultiTexSubImage1DEXT GLEW_GET_FUN(__glewMultiTexSubImage1DEXT)
+#define glMultiTexSubImage2DEXT GLEW_GET_FUN(__glewMultiTexSubImage2DEXT)
+#define glMultiTexSubImage3DEXT GLEW_GET_FUN(__glewMultiTexSubImage3DEXT)
+#define glNamedBufferDataEXT GLEW_GET_FUN(__glewNamedBufferDataEXT)
+#define glNamedBufferSubDataEXT GLEW_GET_FUN(__glewNamedBufferSubDataEXT)
+#define glNamedCopyBufferSubDataEXT GLEW_GET_FUN(__glewNamedCopyBufferSubDataEXT)
+#define glNamedFramebufferRenderbufferEXT GLEW_GET_FUN(__glewNamedFramebufferRenderbufferEXT)
+#define glNamedFramebufferTexture1DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture1DEXT)
+#define glNamedFramebufferTexture2DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture2DEXT)
+#define glNamedFramebufferTexture3DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture3DEXT)
+#define glNamedFramebufferTextureEXT GLEW_GET_FUN(__glewNamedFramebufferTextureEXT)
+#define glNamedFramebufferTextureFaceEXT GLEW_GET_FUN(__glewNamedFramebufferTextureFaceEXT)
+#define glNamedFramebufferTextureLayerEXT GLEW_GET_FUN(__glewNamedFramebufferTextureLayerEXT)
+#define glNamedProgramLocalParameter4dEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4dEXT)
+#define glNamedProgramLocalParameter4dvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4dvEXT)
+#define glNamedProgramLocalParameter4fEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4fEXT)
+#define glNamedProgramLocalParameter4fvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4fvEXT)
+#define glNamedProgramLocalParameterI4iEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4iEXT)
+#define glNamedProgramLocalParameterI4ivEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4ivEXT)
+#define glNamedProgramLocalParameterI4uiEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4uiEXT)
+#define glNamedProgramLocalParameterI4uivEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4uivEXT)
+#define glNamedProgramLocalParameters4fvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameters4fvEXT)
+#define glNamedProgramLocalParametersI4ivEXT GLEW_GET_FUN(__glewNamedProgramLocalParametersI4ivEXT)
+#define glNamedProgramLocalParametersI4uivEXT GLEW_GET_FUN(__glewNamedProgramLocalParametersI4uivEXT)
+#define glNamedProgramStringEXT GLEW_GET_FUN(__glewNamedProgramStringEXT)
+#define glNamedRenderbufferStorageEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageEXT)
+#define glNamedRenderbufferStorageMultisampleCoverageEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageMultisampleCoverageEXT)
+#define glNamedRenderbufferStorageMultisampleEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageMultisampleEXT)
+#define glProgramUniform1fEXT GLEW_GET_FUN(__glewProgramUniform1fEXT)
+#define glProgramUniform1fvEXT GLEW_GET_FUN(__glewProgramUniform1fvEXT)
+#define glProgramUniform1iEXT GLEW_GET_FUN(__glewProgramUniform1iEXT)
+#define glProgramUniform1ivEXT GLEW_GET_FUN(__glewProgramUniform1ivEXT)
+#define glProgramUniform1uiEXT GLEW_GET_FUN(__glewProgramUniform1uiEXT)
+#define glProgramUniform1uivEXT GLEW_GET_FUN(__glewProgramUniform1uivEXT)
+#define glProgramUniform2fEXT GLEW_GET_FUN(__glewProgramUniform2fEXT)
+#define glProgramUniform2fvEXT GLEW_GET_FUN(__glewProgramUniform2fvEXT)
+#define glProgramUniform2iEXT GLEW_GET_FUN(__glewProgramUniform2iEXT)
+#define glProgramUniform2ivEXT GLEW_GET_FUN(__glewProgramUniform2ivEXT)
+#define glProgramUniform2uiEXT GLEW_GET_FUN(__glewProgramUniform2uiEXT)
+#define glProgramUniform2uivEXT GLEW_GET_FUN(__glewProgramUniform2uivEXT)
+#define glProgramUniform3fEXT GLEW_GET_FUN(__glewProgramUniform3fEXT)
+#define glProgramUniform3fvEXT GLEW_GET_FUN(__glewProgramUniform3fvEXT)
+#define glProgramUniform3iEXT GLEW_GET_FUN(__glewProgramUniform3iEXT)
+#define glProgramUniform3ivEXT GLEW_GET_FUN(__glewProgramUniform3ivEXT)
+#define glProgramUniform3uiEXT GLEW_GET_FUN(__glewProgramUniform3uiEXT)
+#define glProgramUniform3uivEXT GLEW_GET_FUN(__glewProgramUniform3uivEXT)
+#define glProgramUniform4fEXT GLEW_GET_FUN(__glewProgramUniform4fEXT)
+#define glProgramUniform4fvEXT GLEW_GET_FUN(__glewProgramUniform4fvEXT)
+#define glProgramUniform4iEXT GLEW_GET_FUN(__glewProgramUniform4iEXT)
+#define glProgramUniform4ivEXT GLEW_GET_FUN(__glewProgramUniform4ivEXT)
+#define glProgramUniform4uiEXT GLEW_GET_FUN(__glewProgramUniform4uiEXT)
+#define glProgramUniform4uivEXT GLEW_GET_FUN(__glewProgramUniform4uivEXT)
+#define glProgramUniformMatrix2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2fvEXT)
+#define glProgramUniformMatrix2x3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x3fvEXT)
+#define glProgramUniformMatrix2x4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x4fvEXT)
+#define glProgramUniformMatrix3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3fvEXT)
+#define glProgramUniformMatrix3x2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x2fvEXT)
+#define glProgramUniformMatrix3x4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x4fvEXT)
+#define glProgramUniformMatrix4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4fvEXT)
+#define glProgramUniformMatrix4x2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x2fvEXT)
+#define glProgramUniformMatrix4x3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x3fvEXT)
+#define glPushClientAttribDefaultEXT GLEW_GET_FUN(__glewPushClientAttribDefaultEXT)
+#define glTextureBufferEXT GLEW_GET_FUN(__glewTextureBufferEXT)
+#define glTextureImage1DEXT GLEW_GET_FUN(__glewTextureImage1DEXT)
+#define glTextureImage2DEXT GLEW_GET_FUN(__glewTextureImage2DEXT)
+#define glTextureImage3DEXT GLEW_GET_FUN(__glewTextureImage3DEXT)
+#define glTextureParameterIivEXT GLEW_GET_FUN(__glewTextureParameterIivEXT)
+#define glTextureParameterIuivEXT GLEW_GET_FUN(__glewTextureParameterIuivEXT)
+#define glTextureParameterfEXT GLEW_GET_FUN(__glewTextureParameterfEXT)
+#define glTextureParameterfvEXT GLEW_GET_FUN(__glewTextureParameterfvEXT)
+#define glTextureParameteriEXT GLEW_GET_FUN(__glewTextureParameteriEXT)
+#define glTextureParameterivEXT GLEW_GET_FUN(__glewTextureParameterivEXT)
+#define glTextureRenderbufferEXT GLEW_GET_FUN(__glewTextureRenderbufferEXT)
+#define glTextureSubImage1DEXT GLEW_GET_FUN(__glewTextureSubImage1DEXT)
+#define glTextureSubImage2DEXT GLEW_GET_FUN(__glewTextureSubImage2DEXT)
+#define glTextureSubImage3DEXT GLEW_GET_FUN(__glewTextureSubImage3DEXT)
+#define glUnmapNamedBufferEXT GLEW_GET_FUN(__glewUnmapNamedBufferEXT)
+#define glVertexArrayColorOffsetEXT GLEW_GET_FUN(__glewVertexArrayColorOffsetEXT)
+#define glVertexArrayEdgeFlagOffsetEXT GLEW_GET_FUN(__glewVertexArrayEdgeFlagOffsetEXT)
+#define glVertexArrayFogCoordOffsetEXT GLEW_GET_FUN(__glewVertexArrayFogCoordOffsetEXT)
+#define glVertexArrayIndexOffsetEXT GLEW_GET_FUN(__glewVertexArrayIndexOffsetEXT)
+#define glVertexArrayMultiTexCoordOffsetEXT GLEW_GET_FUN(__glewVertexArrayMultiTexCoordOffsetEXT)
+#define glVertexArrayNormalOffsetEXT GLEW_GET_FUN(__glewVertexArrayNormalOffsetEXT)
+#define glVertexArraySecondaryColorOffsetEXT GLEW_GET_FUN(__glewVertexArraySecondaryColorOffsetEXT)
+#define glVertexArrayTexCoordOffsetEXT GLEW_GET_FUN(__glewVertexArrayTexCoordOffsetEXT)
+#define glVertexArrayVertexAttribIOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexAttribIOffsetEXT)
+#define glVertexArrayVertexAttribOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexAttribOffsetEXT)
+#define glVertexArrayVertexOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexOffsetEXT)
+
+#define GLEW_EXT_direct_state_access GLEW_GET_VAR(__GLEW_EXT_direct_state_access)
+
+#endif /* GL_EXT_direct_state_access */
+
+/* -------------------------- GL_EXT_draw_buffers2 ------------------------- */
+
+#ifndef GL_EXT_draw_buffers2
+#define GL_EXT_draw_buffers2 1
+
+typedef void (GLAPIENTRY * PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+typedef void (GLAPIENTRY * PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef void (GLAPIENTRY * PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef void (GLAPIENTRY * PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum value, GLuint index, GLboolean* data);
+typedef void (GLAPIENTRY * PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum value, GLuint index, GLint* data);
+typedef GLboolean (GLAPIENTRY * PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index);
+
+#define glColorMaskIndexedEXT GLEW_GET_FUN(__glewColorMaskIndexedEXT)
+#define glDisableIndexedEXT GLEW_GET_FUN(__glewDisableIndexedEXT)
+#define glEnableIndexedEXT GLEW_GET_FUN(__glewEnableIndexedEXT)
+#define glGetBooleanIndexedvEXT GLEW_GET_FUN(__glewGetBooleanIndexedvEXT)
+#define glGetIntegerIndexedvEXT GLEW_GET_FUN(__glewGetIntegerIndexedvEXT)
+#define glIsEnabledIndexedEXT GLEW_GET_FUN(__glewIsEnabledIndexedEXT)
+
+#define GLEW_EXT_draw_buffers2 GLEW_GET_VAR(__GLEW_EXT_draw_buffers2)
+
+#endif /* GL_EXT_draw_buffers2 */
+
+/* ------------------------- GL_EXT_draw_instanced ------------------------- */
+
+#ifndef GL_EXT_draw_instanced
+#define GL_EXT_draw_instanced 1
+
+typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
+typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount);
+
+#define glDrawArraysInstancedEXT GLEW_GET_FUN(__glewDrawArraysInstancedEXT)
+#define glDrawElementsInstancedEXT GLEW_GET_FUN(__glewDrawElementsInstancedEXT)
+
+#define GLEW_EXT_draw_instanced GLEW_GET_VAR(__GLEW_EXT_draw_instanced)
+
+#endif /* GL_EXT_draw_instanced */
+
+/* ----------------------- GL_EXT_draw_range_elements ---------------------- */
+
+#ifndef GL_EXT_draw_range_elements
+#define GL_EXT_draw_range_elements 1
+
+#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8
+#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9
+
+typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+
+#define glDrawRangeElementsEXT GLEW_GET_FUN(__glewDrawRangeElementsEXT)
+
+#define GLEW_EXT_draw_range_elements GLEW_GET_VAR(__GLEW_EXT_draw_range_elements)
+
+#endif /* GL_EXT_draw_range_elements */
+
+/* ---------------------------- GL_EXT_fog_coord --------------------------- */
+
+#ifndef GL_EXT_fog_coord
+#define GL_EXT_fog_coord 1
+
+#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450
+#define GL_FOG_COORDINATE_EXT 0x8451
+#define GL_FRAGMENT_DEPTH_EXT 0x8452
+#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456
+#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457
+
+typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDDEXTPROC) (GLdouble coord);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDFEXTPROC) (GLfloat coord);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);
+
+#define glFogCoordPointerEXT GLEW_GET_FUN(__glewFogCoordPointerEXT)
+#define glFogCoorddEXT GLEW_GET_FUN(__glewFogCoorddEXT)
+#define glFogCoorddvEXT GLEW_GET_FUN(__glewFogCoorddvEXT)
+#define glFogCoordfEXT GLEW_GET_FUN(__glewFogCoordfEXT)
+#define glFogCoordfvEXT GLEW_GET_FUN(__glewFogCoordfvEXT)
+
+#define GLEW_EXT_fog_coord GLEW_GET_VAR(__GLEW_EXT_fog_coord)
+
+#endif /* GL_EXT_fog_coord */
+
+/* ------------------------ GL_EXT_fragment_lighting ----------------------- */
+
+#ifndef GL_EXT_fragment_lighting
+#define GL_EXT_fragment_lighting 1
+
+#define GL_FRAGMENT_LIGHTING_EXT 0x8400
+#define GL_FRAGMENT_COLOR_MATERIAL_EXT 0x8401
+#define GL_FRAGMENT_COLOR_MATERIAL_FACE_EXT 0x8402
+#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_EXT 0x8403
+#define GL_MAX_FRAGMENT_LIGHTS_EXT 0x8404
+#define GL_MAX_ACTIVE_LIGHTS_EXT 0x8405
+#define GL_CURRENT_RASTER_NORMAL_EXT 0x8406
+#define GL_LIGHT_ENV_MODE_EXT 0x8407
+#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_EXT 0x8408
+#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_EXT 0x8409
+#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_EXT 0x840A
+#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_EXT 0x840B
+#define GL_FRAGMENT_LIGHT0_EXT 0x840C
+#define GL_FRAGMENT_LIGHT7_EXT 0x8413
+
+typedef void (GLAPIENTRY * PFNGLFRAGMENTCOLORMATERIALEXTPROC) (GLenum face, GLenum mode);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFEXTPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVEXTPROC) (GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIEXTPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVEXTPROC) (GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFEXTPROC) (GLenum light, GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFVEXTPROC) (GLenum light, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIEXTPROC) (GLenum light, GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIVEXTPROC) (GLenum light, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFEXTPROC) (GLenum face, GLenum pname, const GLfloat param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFVEXTPROC) (GLenum face, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIEXTPROC) (GLenum face, GLenum pname, const GLint param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIVEXTPROC) (GLenum face, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTFVEXTPROC) (GLenum light, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTIVEXTPROC) (GLenum light, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVEXTPROC) (GLenum face, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVEXTPROC) (GLenum face, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLLIGHTENVIEXTPROC) (GLenum pname, GLint param);
+
+#define glFragmentColorMaterialEXT GLEW_GET_FUN(__glewFragmentColorMaterialEXT)
+#define glFragmentLightModelfEXT GLEW_GET_FUN(__glewFragmentLightModelfEXT)
+#define glFragmentLightModelfvEXT GLEW_GET_FUN(__glewFragmentLightModelfvEXT)
+#define glFragmentLightModeliEXT GLEW_GET_FUN(__glewFragmentLightModeliEXT)
+#define glFragmentLightModelivEXT GLEW_GET_FUN(__glewFragmentLightModelivEXT)
+#define glFragmentLightfEXT GLEW_GET_FUN(__glewFragmentLightfEXT)
+#define glFragmentLightfvEXT GLEW_GET_FUN(__glewFragmentLightfvEXT)
+#define glFragmentLightiEXT GLEW_GET_FUN(__glewFragmentLightiEXT)
+#define glFragmentLightivEXT GLEW_GET_FUN(__glewFragmentLightivEXT)
+#define glFragmentMaterialfEXT GLEW_GET_FUN(__glewFragmentMaterialfEXT)
+#define glFragmentMaterialfvEXT GLEW_GET_FUN(__glewFragmentMaterialfvEXT)
+#define glFragmentMaterialiEXT GLEW_GET_FUN(__glewFragmentMaterialiEXT)
+#define glFragmentMaterialivEXT GLEW_GET_FUN(__glewFragmentMaterialivEXT)
+#define glGetFragmentLightfvEXT GLEW_GET_FUN(__glewGetFragmentLightfvEXT)
+#define glGetFragmentLightivEXT GLEW_GET_FUN(__glewGetFragmentLightivEXT)
+#define glGetFragmentMaterialfvEXT GLEW_GET_FUN(__glewGetFragmentMaterialfvEXT)
+#define glGetFragmentMaterialivEXT GLEW_GET_FUN(__glewGetFragmentMaterialivEXT)
+#define glLightEnviEXT GLEW_GET_FUN(__glewLightEnviEXT)
+
+#define GLEW_EXT_fragment_lighting GLEW_GET_VAR(__GLEW_EXT_fragment_lighting)
+
+#endif /* GL_EXT_fragment_lighting */
+
+/* ------------------------ GL_EXT_framebuffer_blit ------------------------ */
+
+#ifndef GL_EXT_framebuffer_blit
+#define GL_EXT_framebuffer_blit 1
+
+#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6
+#define GL_READ_FRAMEBUFFER_EXT 0x8CA8
+#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9
+#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA
+
+typedef void (GLAPIENTRY * PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+
+#define glBlitFramebufferEXT GLEW_GET_FUN(__glewBlitFramebufferEXT)
+
+#define GLEW_EXT_framebuffer_blit GLEW_GET_VAR(__GLEW_EXT_framebuffer_blit)
+
+#endif /* GL_EXT_framebuffer_blit */
+
+/* --------------------- GL_EXT_framebuffer_multisample -------------------- */
+
+#ifndef GL_EXT_framebuffer_multisample
+#define GL_EXT_framebuffer_multisample 1
+
+#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56
+#define GL_MAX_SAMPLES_EXT 0x8D57
+
+typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+
+#define glRenderbufferStorageMultisampleEXT GLEW_GET_FUN(__glewRenderbufferStorageMultisampleEXT)
+
+#define GLEW_EXT_framebuffer_multisample GLEW_GET_VAR(__GLEW_EXT_framebuffer_multisample)
+
+#endif /* GL_EXT_framebuffer_multisample */
+
+/* --------------- GL_EXT_framebuffer_multisample_blit_scaled -------------- */
+
+#ifndef GL_EXT_framebuffer_multisample_blit_scaled
+#define GL_EXT_framebuffer_multisample_blit_scaled 1
+
+#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA
+#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB
+
+#define GLEW_EXT_framebuffer_multisample_blit_scaled GLEW_GET_VAR(__GLEW_EXT_framebuffer_multisample_blit_scaled)
+
+#endif /* GL_EXT_framebuffer_multisample_blit_scaled */
+
+/* ----------------------- GL_EXT_framebuffer_object ----------------------- */
+
+#ifndef GL_EXT_framebuffer_object
+#define GL_EXT_framebuffer_object 1
+
+#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506
+#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8
+#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6
+#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4
+#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9
+#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC
+#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD
+#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF
+#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
+#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1
+#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2
+#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3
+#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4
+#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5
+#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6
+#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7
+#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8
+#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9
+#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA
+#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB
+#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC
+#define GL_COLOR_ATTACHMENT13_EXT 0x8CED
+#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE
+#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF
+#define GL_DEPTH_ATTACHMENT_EXT 0x8D00
+#define GL_STENCIL_ATTACHMENT_EXT 0x8D20
+#define GL_FRAMEBUFFER_EXT 0x8D40
+#define GL_RENDERBUFFER_EXT 0x8D41
+#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42
+#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44
+#define GL_STENCIL_INDEX1_EXT 0x8D46
+#define GL_STENCIL_INDEX4_EXT 0x8D47
+#define GL_STENCIL_INDEX8_EXT 0x8D48
+#define GL_STENCIL_INDEX16_EXT 0x8D49
+#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55
+
+typedef void (GLAPIENTRY * PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer);
+typedef void (GLAPIENTRY * PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer);
+typedef GLenum (GLAPIENTRY * PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint* framebuffers);
+typedef void (GLAPIENTRY * PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint* renderbuffers);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (GLAPIENTRY * PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint* framebuffers);
+typedef void (GLAPIENTRY * PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint* renderbuffers);
+typedef void (GLAPIENTRY * PFNGLGENERATEMIPMAPEXTPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer);
+typedef GLboolean (GLAPIENTRY * PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer);
+typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+
+#define glBindFramebufferEXT GLEW_GET_FUN(__glewBindFramebufferEXT)
+#define glBindRenderbufferEXT GLEW_GET_FUN(__glewBindRenderbufferEXT)
+#define glCheckFramebufferStatusEXT GLEW_GET_FUN(__glewCheckFramebufferStatusEXT)
+#define glDeleteFramebuffersEXT GLEW_GET_FUN(__glewDeleteFramebuffersEXT)
+#define glDeleteRenderbuffersEXT GLEW_GET_FUN(__glewDeleteRenderbuffersEXT)
+#define glFramebufferRenderbufferEXT GLEW_GET_FUN(__glewFramebufferRenderbufferEXT)
+#define glFramebufferTexture1DEXT GLEW_GET_FUN(__glewFramebufferTexture1DEXT)
+#define glFramebufferTexture2DEXT GLEW_GET_FUN(__glewFramebufferTexture2DEXT)
+#define glFramebufferTexture3DEXT GLEW_GET_FUN(__glewFramebufferTexture3DEXT)
+#define glGenFramebuffersEXT GLEW_GET_FUN(__glewGenFramebuffersEXT)
+#define glGenRenderbuffersEXT GLEW_GET_FUN(__glewGenRenderbuffersEXT)
+#define glGenerateMipmapEXT GLEW_GET_FUN(__glewGenerateMipmapEXT)
+#define glGetFramebufferAttachmentParameterivEXT GLEW_GET_FUN(__glewGetFramebufferAttachmentParameterivEXT)
+#define glGetRenderbufferParameterivEXT GLEW_GET_FUN(__glewGetRenderbufferParameterivEXT)
+#define glIsFramebufferEXT GLEW_GET_FUN(__glewIsFramebufferEXT)
+#define glIsRenderbufferEXT GLEW_GET_FUN(__glewIsRenderbufferEXT)
+#define glRenderbufferStorageEXT GLEW_GET_FUN(__glewRenderbufferStorageEXT)
+
+#define GLEW_EXT_framebuffer_object GLEW_GET_VAR(__GLEW_EXT_framebuffer_object)
+
+#endif /* GL_EXT_framebuffer_object */
+
+/* ------------------------ GL_EXT_framebuffer_sRGB ------------------------ */
+
+#ifndef GL_EXT_framebuffer_sRGB
+#define GL_EXT_framebuffer_sRGB 1
+
+#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
+#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA
+
+#define GLEW_EXT_framebuffer_sRGB GLEW_GET_VAR(__GLEW_EXT_framebuffer_sRGB)
+
+#endif /* GL_EXT_framebuffer_sRGB */
+
+/* ------------------------ GL_EXT_geometry_shader4 ------------------------ */
+
+#ifndef GL_EXT_geometry_shader4
+#define GL_EXT_geometry_shader4 1
+
+#define GL_LINES_ADJACENCY_EXT 0xA
+#define GL_LINE_STRIP_ADJACENCY_EXT 0xB
+#define GL_TRIANGLES_ADJACENCY_EXT 0xC
+#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD
+#define GL_PROGRAM_POINT_SIZE_EXT 0x8642
+#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9
+#define GL_GEOMETRY_SHADER_EXT 0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA
+#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1
+
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value);
+
+#define glFramebufferTextureEXT GLEW_GET_FUN(__glewFramebufferTextureEXT)
+#define glFramebufferTextureFaceEXT GLEW_GET_FUN(__glewFramebufferTextureFaceEXT)
+#define glProgramParameteriEXT GLEW_GET_FUN(__glewProgramParameteriEXT)
+
+#define GLEW_EXT_geometry_shader4 GLEW_GET_VAR(__GLEW_EXT_geometry_shader4)
+
+#endif /* GL_EXT_geometry_shader4 */
+
+/* --------------------- GL_EXT_gpu_program_parameters --------------------- */
+
+#ifndef GL_EXT_gpu_program_parameters
+#define GL_EXT_gpu_program_parameters 1
+
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat* params);
+
+#define glProgramEnvParameters4fvEXT GLEW_GET_FUN(__glewProgramEnvParameters4fvEXT)
+#define glProgramLocalParameters4fvEXT GLEW_GET_FUN(__glewProgramLocalParameters4fvEXT)
+
+#define GLEW_EXT_gpu_program_parameters GLEW_GET_VAR(__GLEW_EXT_gpu_program_parameters)
+
+#endif /* GL_EXT_gpu_program_parameters */
+
+/* --------------------------- GL_EXT_gpu_shader4 -------------------------- */
+
+#ifndef GL_EXT_gpu_shader4
+#define GL_EXT_gpu_shader4 1
+
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD
+#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0
+#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1
+#define GL_SAMPLER_BUFFER_EXT 0x8DC2
+#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3
+#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5
+#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6
+#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7
+#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8
+#define GL_INT_SAMPLER_1D_EXT 0x8DC9
+#define GL_INT_SAMPLER_2D_EXT 0x8DCA
+#define GL_INT_SAMPLER_3D_EXT 0x8DCB
+#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC
+#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD
+#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE
+#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF
+#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8
+
+typedef void (GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name);
+typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name);
+typedef void (GLAPIENTRY * PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+
+#define glBindFragDataLocationEXT GLEW_GET_FUN(__glewBindFragDataLocationEXT)
+#define glGetFragDataLocationEXT GLEW_GET_FUN(__glewGetFragDataLocationEXT)
+#define glGetUniformuivEXT GLEW_GET_FUN(__glewGetUniformuivEXT)
+#define glGetVertexAttribIivEXT GLEW_GET_FUN(__glewGetVertexAttribIivEXT)
+#define glGetVertexAttribIuivEXT GLEW_GET_FUN(__glewGetVertexAttribIuivEXT)
+#define glUniform1uiEXT GLEW_GET_FUN(__glewUniform1uiEXT)
+#define glUniform1uivEXT GLEW_GET_FUN(__glewUniform1uivEXT)
+#define glUniform2uiEXT GLEW_GET_FUN(__glewUniform2uiEXT)
+#define glUniform2uivEXT GLEW_GET_FUN(__glewUniform2uivEXT)
+#define glUniform3uiEXT GLEW_GET_FUN(__glewUniform3uiEXT)
+#define glUniform3uivEXT GLEW_GET_FUN(__glewUniform3uivEXT)
+#define glUniform4uiEXT GLEW_GET_FUN(__glewUniform4uiEXT)
+#define glUniform4uivEXT GLEW_GET_FUN(__glewUniform4uivEXT)
+#define glVertexAttribI1iEXT GLEW_GET_FUN(__glewVertexAttribI1iEXT)
+#define glVertexAttribI1ivEXT GLEW_GET_FUN(__glewVertexAttribI1ivEXT)
+#define glVertexAttribI1uiEXT GLEW_GET_FUN(__glewVertexAttribI1uiEXT)
+#define glVertexAttribI1uivEXT GLEW_GET_FUN(__glewVertexAttribI1uivEXT)
+#define glVertexAttribI2iEXT GLEW_GET_FUN(__glewVertexAttribI2iEXT)
+#define glVertexAttribI2ivEXT GLEW_GET_FUN(__glewVertexAttribI2ivEXT)
+#define glVertexAttribI2uiEXT GLEW_GET_FUN(__glewVertexAttribI2uiEXT)
+#define glVertexAttribI2uivEXT GLEW_GET_FUN(__glewVertexAttribI2uivEXT)
+#define glVertexAttribI3iEXT GLEW_GET_FUN(__glewVertexAttribI3iEXT)
+#define glVertexAttribI3ivEXT GLEW_GET_FUN(__glewVertexAttribI3ivEXT)
+#define glVertexAttribI3uiEXT GLEW_GET_FUN(__glewVertexAttribI3uiEXT)
+#define glVertexAttribI3uivEXT GLEW_GET_FUN(__glewVertexAttribI3uivEXT)
+#define glVertexAttribI4bvEXT GLEW_GET_FUN(__glewVertexAttribI4bvEXT)
+#define glVertexAttribI4iEXT GLEW_GET_FUN(__glewVertexAttribI4iEXT)
+#define glVertexAttribI4ivEXT GLEW_GET_FUN(__glewVertexAttribI4ivEXT)
+#define glVertexAttribI4svEXT GLEW_GET_FUN(__glewVertexAttribI4svEXT)
+#define glVertexAttribI4ubvEXT GLEW_GET_FUN(__glewVertexAttribI4ubvEXT)
+#define glVertexAttribI4uiEXT GLEW_GET_FUN(__glewVertexAttribI4uiEXT)
+#define glVertexAttribI4uivEXT GLEW_GET_FUN(__glewVertexAttribI4uivEXT)
+#define glVertexAttribI4usvEXT GLEW_GET_FUN(__glewVertexAttribI4usvEXT)
+#define glVertexAttribIPointerEXT GLEW_GET_FUN(__glewVertexAttribIPointerEXT)
+
+#define GLEW_EXT_gpu_shader4 GLEW_GET_VAR(__GLEW_EXT_gpu_shader4)
+
+#endif /* GL_EXT_gpu_shader4 */
+
+/* ---------------------------- GL_EXT_histogram --------------------------- */
+
+#ifndef GL_EXT_histogram
+#define GL_EXT_histogram 1
+
+#define GL_HISTOGRAM_EXT 0x8024
+#define GL_PROXY_HISTOGRAM_EXT 0x8025
+#define GL_HISTOGRAM_WIDTH_EXT 0x8026
+#define GL_HISTOGRAM_FORMAT_EXT 0x8027
+#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028
+#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029
+#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C
+#define GL_HISTOGRAM_SINK_EXT 0x802D
+#define GL_MINMAX_EXT 0x802E
+#define GL_MINMAX_FORMAT_EXT 0x802F
+#define GL_MINMAX_SINK_EXT 0x8030
+
+typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void* values);
+typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void* values);
+typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (GLAPIENTRY * PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (GLAPIENTRY * PFNGLRESETHISTOGRAMEXTPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLRESETMINMAXEXTPROC) (GLenum target);
+
+#define glGetHistogramEXT GLEW_GET_FUN(__glewGetHistogramEXT)
+#define glGetHistogramParameterfvEXT GLEW_GET_FUN(__glewGetHistogramParameterfvEXT)
+#define glGetHistogramParameterivEXT GLEW_GET_FUN(__glewGetHistogramParameterivEXT)
+#define glGetMinmaxEXT GLEW_GET_FUN(__glewGetMinmaxEXT)
+#define glGetMinmaxParameterfvEXT GLEW_GET_FUN(__glewGetMinmaxParameterfvEXT)
+#define glGetMinmaxParameterivEXT GLEW_GET_FUN(__glewGetMinmaxParameterivEXT)
+#define glHistogramEXT GLEW_GET_FUN(__glewHistogramEXT)
+#define glMinmaxEXT GLEW_GET_FUN(__glewMinmaxEXT)
+#define glResetHistogramEXT GLEW_GET_FUN(__glewResetHistogramEXT)
+#define glResetMinmaxEXT GLEW_GET_FUN(__glewResetMinmaxEXT)
+
+#define GLEW_EXT_histogram GLEW_GET_VAR(__GLEW_EXT_histogram)
+
+#endif /* GL_EXT_histogram */
+
+/* ----------------------- GL_EXT_index_array_formats ---------------------- */
+
+#ifndef GL_EXT_index_array_formats
+#define GL_EXT_index_array_formats 1
+
+#define GLEW_EXT_index_array_formats GLEW_GET_VAR(__GLEW_EXT_index_array_formats)
+
+#endif /* GL_EXT_index_array_formats */
+
+/* --------------------------- GL_EXT_index_func --------------------------- */
+
+#ifndef GL_EXT_index_func
+#define GL_EXT_index_func 1
+
+typedef void (GLAPIENTRY * PFNGLINDEXFUNCEXTPROC) (GLenum func, GLfloat ref);
+
+#define glIndexFuncEXT GLEW_GET_FUN(__glewIndexFuncEXT)
+
+#define GLEW_EXT_index_func GLEW_GET_VAR(__GLEW_EXT_index_func)
+
+#endif /* GL_EXT_index_func */
+
+/* ------------------------- GL_EXT_index_material ------------------------- */
+
+#ifndef GL_EXT_index_material
+#define GL_EXT_index_material 1
+
+typedef void (GLAPIENTRY * PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode);
+
+#define glIndexMaterialEXT GLEW_GET_FUN(__glewIndexMaterialEXT)
+
+#define GLEW_EXT_index_material GLEW_GET_VAR(__GLEW_EXT_index_material)
+
+#endif /* GL_EXT_index_material */
+
+/* -------------------------- GL_EXT_index_texture ------------------------- */
+
+#ifndef GL_EXT_index_texture
+#define GL_EXT_index_texture 1
+
+#define GLEW_EXT_index_texture GLEW_GET_VAR(__GLEW_EXT_index_texture)
+
+#endif /* GL_EXT_index_texture */
+
+/* -------------------------- GL_EXT_light_texture ------------------------- */
+
+#ifndef GL_EXT_light_texture
+#define GL_EXT_light_texture 1
+
+#define GL_FRAGMENT_MATERIAL_EXT 0x8349
+#define GL_FRAGMENT_NORMAL_EXT 0x834A
+#define GL_FRAGMENT_COLOR_EXT 0x834C
+#define GL_ATTENUATION_EXT 0x834D
+#define GL_SHADOW_ATTENUATION_EXT 0x834E
+#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F
+#define GL_TEXTURE_LIGHT_EXT 0x8350
+#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351
+#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352
+#define GL_FRAGMENT_DEPTH_EXT 0x8452
+
+typedef void (GLAPIENTRY * PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode);
+typedef void (GLAPIENTRY * PFNGLTEXTURELIGHTEXTPROC) (GLenum pname);
+typedef void (GLAPIENTRY * PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode);
+
+#define glApplyTextureEXT GLEW_GET_FUN(__glewApplyTextureEXT)
+#define glTextureLightEXT GLEW_GET_FUN(__glewTextureLightEXT)
+#define glTextureMaterialEXT GLEW_GET_FUN(__glewTextureMaterialEXT)
+
+#define GLEW_EXT_light_texture GLEW_GET_VAR(__GLEW_EXT_light_texture)
+
+#endif /* GL_EXT_light_texture */
+
+/* ------------------------- GL_EXT_misc_attribute ------------------------- */
+
+#ifndef GL_EXT_misc_attribute
+#define GL_EXT_misc_attribute 1
+
+#define GLEW_EXT_misc_attribute GLEW_GET_VAR(__GLEW_EXT_misc_attribute)
+
+#endif /* GL_EXT_misc_attribute */
+
+/* ------------------------ GL_EXT_multi_draw_arrays ----------------------- */
+
+#ifndef GL_EXT_multi_draw_arrays
+#define GL_EXT_multi_draw_arrays 1
+
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount);
+typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, GLsizei* count, GLenum type, const GLvoid **indices, GLsizei primcount);
+
+#define glMultiDrawArraysEXT GLEW_GET_FUN(__glewMultiDrawArraysEXT)
+#define glMultiDrawElementsEXT GLEW_GET_FUN(__glewMultiDrawElementsEXT)
+
+#define GLEW_EXT_multi_draw_arrays GLEW_GET_VAR(__GLEW_EXT_multi_draw_arrays)
+
+#endif /* GL_EXT_multi_draw_arrays */
+
+/* --------------------------- GL_EXT_multisample -------------------------- */
+
+#ifndef GL_EXT_multisample
+#define GL_EXT_multisample 1
+
+#define GL_MULTISAMPLE_EXT 0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F
+#define GL_SAMPLE_MASK_EXT 0x80A0
+#define GL_1PASS_EXT 0x80A1
+#define GL_2PASS_0_EXT 0x80A2
+#define GL_2PASS_1_EXT 0x80A3
+#define GL_4PASS_0_EXT 0x80A4
+#define GL_4PASS_1_EXT 0x80A5
+#define GL_4PASS_2_EXT 0x80A6
+#define GL_4PASS_3_EXT 0x80A7
+#define GL_SAMPLE_BUFFERS_EXT 0x80A8
+#define GL_SAMPLES_EXT 0x80A9
+#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA
+#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB
+#define GL_SAMPLE_PATTERN_EXT 0x80AC
+#define GL_MULTISAMPLE_BIT_EXT 0x20000000
+
+typedef void (GLAPIENTRY * PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert);
+typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern);
+
+#define glSampleMaskEXT GLEW_GET_FUN(__glewSampleMaskEXT)
+#define glSamplePatternEXT GLEW_GET_FUN(__glewSamplePatternEXT)
+
+#define GLEW_EXT_multisample GLEW_GET_VAR(__GLEW_EXT_multisample)
+
+#endif /* GL_EXT_multisample */
+
+/* ---------------------- GL_EXT_packed_depth_stencil ---------------------- */
+
+#ifndef GL_EXT_packed_depth_stencil
+#define GL_EXT_packed_depth_stencil 1
+
+#define GL_DEPTH_STENCIL_EXT 0x84F9
+#define GL_UNSIGNED_INT_24_8_EXT 0x84FA
+#define GL_DEPTH24_STENCIL8_EXT 0x88F0
+#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1
+
+#define GLEW_EXT_packed_depth_stencil GLEW_GET_VAR(__GLEW_EXT_packed_depth_stencil)
+
+#endif /* GL_EXT_packed_depth_stencil */
+
+/* -------------------------- GL_EXT_packed_float -------------------------- */
+
+#ifndef GL_EXT_packed_float
+#define GL_EXT_packed_float 1
+
+#define GL_R11F_G11F_B10F_EXT 0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B
+#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C
+
+#define GLEW_EXT_packed_float GLEW_GET_VAR(__GLEW_EXT_packed_float)
+
+#endif /* GL_EXT_packed_float */
+
+/* -------------------------- GL_EXT_packed_pixels ------------------------- */
+
+#ifndef GL_EXT_packed_pixels
+#define GL_EXT_packed_pixels 1
+
+#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034
+#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035
+#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036
+
+#define GLEW_EXT_packed_pixels GLEW_GET_VAR(__GLEW_EXT_packed_pixels)
+
+#endif /* GL_EXT_packed_pixels */
+
+/* ------------------------ GL_EXT_paletted_texture ------------------------ */
+
+#ifndef GL_EXT_paletted_texture
+#define GL_EXT_paletted_texture 1
+
+#define GL_TEXTURE_1D 0x0DE0
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_PROXY_TEXTURE_1D 0x8063
+#define GL_PROXY_TEXTURE_2D 0x8064
+#define GL_TEXTURE_3D_EXT 0x806F
+#define GL_PROXY_TEXTURE_3D_EXT 0x8070
+#define GL_COLOR_TABLE_FORMAT_EXT 0x80D8
+#define GL_COLOR_TABLE_WIDTH_EXT 0x80D9
+#define GL_COLOR_TABLE_RED_SIZE_EXT 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE_EXT 0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE_EXT 0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE_EXT 0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE_EXT 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE_EXT 0x80DF
+#define GL_COLOR_INDEX1_EXT 0x80E2
+#define GL_COLOR_INDEX2_EXT 0x80E3
+#define GL_COLOR_INDEX4_EXT 0x80E4
+#define GL_COLOR_INDEX8_EXT 0x80E5
+#define GL_COLOR_INDEX12_EXT 0x80E6
+#define GL_COLOR_INDEX16_EXT 0x80E7
+#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED
+#define GL_TEXTURE_CUBE_MAP_ARB 0x8513
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B
+
+typedef void (GLAPIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void* data);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void* data);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params);
+
+#define glColorTableEXT GLEW_GET_FUN(__glewColorTableEXT)
+#define glGetColorTableEXT GLEW_GET_FUN(__glewGetColorTableEXT)
+#define glGetColorTableParameterfvEXT GLEW_GET_FUN(__glewGetColorTableParameterfvEXT)
+#define glGetColorTableParameterivEXT GLEW_GET_FUN(__glewGetColorTableParameterivEXT)
+
+#define GLEW_EXT_paletted_texture GLEW_GET_VAR(__GLEW_EXT_paletted_texture)
+
+#endif /* GL_EXT_paletted_texture */
+
+/* ----------------------- GL_EXT_pixel_buffer_object ---------------------- */
+
+#ifndef GL_EXT_pixel_buffer_object
+#define GL_EXT_pixel_buffer_object 1
+
+#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF
+
+#define GLEW_EXT_pixel_buffer_object GLEW_GET_VAR(__GLEW_EXT_pixel_buffer_object)
+
+#endif /* GL_EXT_pixel_buffer_object */
+
+/* ------------------------- GL_EXT_pixel_transform ------------------------ */
+
+#ifndef GL_EXT_pixel_transform
+#define GL_EXT_pixel_transform 1
+
+#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330
+#define GL_PIXEL_MAG_FILTER_EXT 0x8331
+#define GL_PIXEL_MIN_FILTER_EXT 0x8332
+#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333
+#define GL_CUBIC_EXT 0x8334
+#define GL_AVERAGE_EXT 0x8335
+#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336
+#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337
+#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338
+
+typedef void (GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, const GLfloat param);
+typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, const GLint param);
+typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params);
+
+#define glGetPixelTransformParameterfvEXT GLEW_GET_FUN(__glewGetPixelTransformParameterfvEXT)
+#define glGetPixelTransformParameterivEXT GLEW_GET_FUN(__glewGetPixelTransformParameterivEXT)
+#define glPixelTransformParameterfEXT GLEW_GET_FUN(__glewPixelTransformParameterfEXT)
+#define glPixelTransformParameterfvEXT GLEW_GET_FUN(__glewPixelTransformParameterfvEXT)
+#define glPixelTransformParameteriEXT GLEW_GET_FUN(__glewPixelTransformParameteriEXT)
+#define glPixelTransformParameterivEXT GLEW_GET_FUN(__glewPixelTransformParameterivEXT)
+
+#define GLEW_EXT_pixel_transform GLEW_GET_VAR(__GLEW_EXT_pixel_transform)
+
+#endif /* GL_EXT_pixel_transform */
+
+/* ------------------- GL_EXT_pixel_transform_color_table ------------------ */
+
+#ifndef GL_EXT_pixel_transform_color_table
+#define GL_EXT_pixel_transform_color_table 1
+
+#define GLEW_EXT_pixel_transform_color_table GLEW_GET_VAR(__GLEW_EXT_pixel_transform_color_table)
+
+#endif /* GL_EXT_pixel_transform_color_table */
+
+/* ------------------------ GL_EXT_point_parameters ------------------------ */
+
+#ifndef GL_EXT_point_parameters
+#define GL_EXT_point_parameters 1
+
+#define GL_POINT_SIZE_MIN_EXT 0x8126
+#define GL_POINT_SIZE_MAX_EXT 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128
+#define GL_DISTANCE_ATTENUATION_EXT 0x8129
+
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat* params);
+
+#define glPointParameterfEXT GLEW_GET_FUN(__glewPointParameterfEXT)
+#define glPointParameterfvEXT GLEW_GET_FUN(__glewPointParameterfvEXT)
+
+#define GLEW_EXT_point_parameters GLEW_GET_VAR(__GLEW_EXT_point_parameters)
+
+#endif /* GL_EXT_point_parameters */
+
+/* ------------------------- GL_EXT_polygon_offset ------------------------- */
+
+#ifndef GL_EXT_polygon_offset
+#define GL_EXT_polygon_offset 1
+
+#define GL_POLYGON_OFFSET_EXT 0x8037
+#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038
+#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039
+
+typedef void (GLAPIENTRY * PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias);
+
+#define glPolygonOffsetEXT GLEW_GET_FUN(__glewPolygonOffsetEXT)
+
+#define GLEW_EXT_polygon_offset GLEW_GET_VAR(__GLEW_EXT_polygon_offset)
+
+#endif /* GL_EXT_polygon_offset */
+
+/* ------------------------ GL_EXT_provoking_vertex ------------------------ */
+
+#ifndef GL_EXT_provoking_vertex
+#define GL_EXT_provoking_vertex 1
+
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C
+#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E
+#define GL_PROVOKING_VERTEX_EXT 0x8E4F
+
+typedef void (GLAPIENTRY * PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode);
+
+#define glProvokingVertexEXT GLEW_GET_FUN(__glewProvokingVertexEXT)
+
+#define GLEW_EXT_provoking_vertex GLEW_GET_VAR(__GLEW_EXT_provoking_vertex)
+
+#endif /* GL_EXT_provoking_vertex */
+
+/* ------------------------- GL_EXT_rescale_normal ------------------------- */
+
+#ifndef GL_EXT_rescale_normal
+#define GL_EXT_rescale_normal 1
+
+#define GL_RESCALE_NORMAL_EXT 0x803A
+
+#define GLEW_EXT_rescale_normal GLEW_GET_VAR(__GLEW_EXT_rescale_normal)
+
+#endif /* GL_EXT_rescale_normal */
+
+/* -------------------------- GL_EXT_scene_marker -------------------------- */
+
+#ifndef GL_EXT_scene_marker
+#define GL_EXT_scene_marker 1
+
+typedef void (GLAPIENTRY * PFNGLBEGINSCENEEXTPROC) (void);
+typedef void (GLAPIENTRY * PFNGLENDSCENEEXTPROC) (void);
+
+#define glBeginSceneEXT GLEW_GET_FUN(__glewBeginSceneEXT)
+#define glEndSceneEXT GLEW_GET_FUN(__glewEndSceneEXT)
+
+#define GLEW_EXT_scene_marker GLEW_GET_VAR(__GLEW_EXT_scene_marker)
+
+#endif /* GL_EXT_scene_marker */
+
+/* ------------------------- GL_EXT_secondary_color ------------------------ */
+
+#ifndef GL_EXT_secondary_color
+#define GL_EXT_secondary_color 1
+
+#define GL_COLOR_SUM_EXT 0x8458
+#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D
+#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E
+
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+
+#define glSecondaryColor3bEXT GLEW_GET_FUN(__glewSecondaryColor3bEXT)
+#define glSecondaryColor3bvEXT GLEW_GET_FUN(__glewSecondaryColor3bvEXT)
+#define glSecondaryColor3dEXT GLEW_GET_FUN(__glewSecondaryColor3dEXT)
+#define glSecondaryColor3dvEXT GLEW_GET_FUN(__glewSecondaryColor3dvEXT)
+#define glSecondaryColor3fEXT GLEW_GET_FUN(__glewSecondaryColor3fEXT)
+#define glSecondaryColor3fvEXT GLEW_GET_FUN(__glewSecondaryColor3fvEXT)
+#define glSecondaryColor3iEXT GLEW_GET_FUN(__glewSecondaryColor3iEXT)
+#define glSecondaryColor3ivEXT GLEW_GET_FUN(__glewSecondaryColor3ivEXT)
+#define glSecondaryColor3sEXT GLEW_GET_FUN(__glewSecondaryColor3sEXT)
+#define glSecondaryColor3svEXT GLEW_GET_FUN(__glewSecondaryColor3svEXT)
+#define glSecondaryColor3ubEXT GLEW_GET_FUN(__glewSecondaryColor3ubEXT)
+#define glSecondaryColor3ubvEXT GLEW_GET_FUN(__glewSecondaryColor3ubvEXT)
+#define glSecondaryColor3uiEXT GLEW_GET_FUN(__glewSecondaryColor3uiEXT)
+#define glSecondaryColor3uivEXT GLEW_GET_FUN(__glewSecondaryColor3uivEXT)
+#define glSecondaryColor3usEXT GLEW_GET_FUN(__glewSecondaryColor3usEXT)
+#define glSecondaryColor3usvEXT GLEW_GET_FUN(__glewSecondaryColor3usvEXT)
+#define glSecondaryColorPointerEXT GLEW_GET_FUN(__glewSecondaryColorPointerEXT)
+
+#define GLEW_EXT_secondary_color GLEW_GET_VAR(__GLEW_EXT_secondary_color)
+
+#endif /* GL_EXT_secondary_color */
+
+/* --------------------- GL_EXT_separate_shader_objects -------------------- */
+
+#ifndef GL_EXT_separate_shader_objects
+#define GL_EXT_separate_shader_objects 1
+
+#define GL_ACTIVE_PROGRAM_EXT 0x8B8D
+
+typedef void (GLAPIENTRY * PFNGLACTIVEPROGRAMEXTPROC) (GLuint program);
+typedef GLuint (GLAPIENTRY * PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const char* string);
+typedef void (GLAPIENTRY * PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program);
+
+#define glActiveProgramEXT GLEW_GET_FUN(__glewActiveProgramEXT)
+#define glCreateShaderProgramEXT GLEW_GET_FUN(__glewCreateShaderProgramEXT)
+#define glUseShaderProgramEXT GLEW_GET_FUN(__glewUseShaderProgramEXT)
+
+#define GLEW_EXT_separate_shader_objects GLEW_GET_VAR(__GLEW_EXT_separate_shader_objects)
+
+#endif /* GL_EXT_separate_shader_objects */
+
+/* --------------------- GL_EXT_separate_specular_color -------------------- */
+
+#ifndef GL_EXT_separate_specular_color
+#define GL_EXT_separate_specular_color 1
+
+#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8
+#define GL_SINGLE_COLOR_EXT 0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA
+
+#define GLEW_EXT_separate_specular_color GLEW_GET_VAR(__GLEW_EXT_separate_specular_color)
+
+#endif /* GL_EXT_separate_specular_color */
+
+/* --------------------- GL_EXT_shader_image_load_store -------------------- */
+
+#ifndef GL_EXT_shader_image_load_store
+#define GL_EXT_shader_image_load_store 1
+
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001
+#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002
+#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004
+#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020
+#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040
+#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080
+#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100
+#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200
+#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800
+#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000
+#define GL_MAX_IMAGE_UNITS_EXT 0x8F38
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39
+#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A
+#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B
+#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C
+#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D
+#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E
+#define GL_IMAGE_1D_EXT 0x904C
+#define GL_IMAGE_2D_EXT 0x904D
+#define GL_IMAGE_3D_EXT 0x904E
+#define GL_IMAGE_2D_RECT_EXT 0x904F
+#define GL_IMAGE_CUBE_EXT 0x9050
+#define GL_IMAGE_BUFFER_EXT 0x9051
+#define GL_IMAGE_1D_ARRAY_EXT 0x9052
+#define GL_IMAGE_2D_ARRAY_EXT 0x9053
+#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054
+#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056
+#define GL_INT_IMAGE_1D_EXT 0x9057
+#define GL_INT_IMAGE_2D_EXT 0x9058
+#define GL_INT_IMAGE_3D_EXT 0x9059
+#define GL_INT_IMAGE_2D_RECT_EXT 0x905A
+#define GL_INT_IMAGE_CUBE_EXT 0x905B
+#define GL_INT_IMAGE_BUFFER_EXT 0x905C
+#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D
+#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F
+#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061
+#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062
+#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063
+#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065
+#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066
+#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C
+#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D
+#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E
+#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF
+
+typedef void (GLAPIENTRY * PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format);
+typedef void (GLAPIENTRY * PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers);
+
+#define glBindImageTextureEXT GLEW_GET_FUN(__glewBindImageTextureEXT)
+#define glMemoryBarrierEXT GLEW_GET_FUN(__glewMemoryBarrierEXT)
+
+#define GLEW_EXT_shader_image_load_store GLEW_GET_VAR(__GLEW_EXT_shader_image_load_store)
+
+#endif /* GL_EXT_shader_image_load_store */
+
+/* -------------------------- GL_EXT_shadow_funcs -------------------------- */
+
+#ifndef GL_EXT_shadow_funcs
+#define GL_EXT_shadow_funcs 1
+
+#define GLEW_EXT_shadow_funcs GLEW_GET_VAR(__GLEW_EXT_shadow_funcs)
+
+#endif /* GL_EXT_shadow_funcs */
+
+/* --------------------- GL_EXT_shared_texture_palette --------------------- */
+
+#ifndef GL_EXT_shared_texture_palette
+#define GL_EXT_shared_texture_palette 1
+
+#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB
+
+#define GLEW_EXT_shared_texture_palette GLEW_GET_VAR(__GLEW_EXT_shared_texture_palette)
+
+#endif /* GL_EXT_shared_texture_palette */
+
+/* ------------------------ GL_EXT_stencil_clear_tag ----------------------- */
+
+#ifndef GL_EXT_stencil_clear_tag
+#define GL_EXT_stencil_clear_tag 1
+
+#define GL_STENCIL_TAG_BITS_EXT 0x88F2
+#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3
+
+#define GLEW_EXT_stencil_clear_tag GLEW_GET_VAR(__GLEW_EXT_stencil_clear_tag)
+
+#endif /* GL_EXT_stencil_clear_tag */
+
+/* ------------------------ GL_EXT_stencil_two_side ------------------------ */
+
+#ifndef GL_EXT_stencil_two_side
+#define GL_EXT_stencil_two_side 1
+
+#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910
+#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911
+
+typedef void (GLAPIENTRY * PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face);
+
+#define glActiveStencilFaceEXT GLEW_GET_FUN(__glewActiveStencilFaceEXT)
+
+#define GLEW_EXT_stencil_two_side GLEW_GET_VAR(__GLEW_EXT_stencil_two_side)
+
+#endif /* GL_EXT_stencil_two_side */
+
+/* -------------------------- GL_EXT_stencil_wrap -------------------------- */
+
+#ifndef GL_EXT_stencil_wrap
+#define GL_EXT_stencil_wrap 1
+
+#define GL_INCR_WRAP_EXT 0x8507
+#define GL_DECR_WRAP_EXT 0x8508
+
+#define GLEW_EXT_stencil_wrap GLEW_GET_VAR(__GLEW_EXT_stencil_wrap)
+
+#endif /* GL_EXT_stencil_wrap */
+
+/* --------------------------- GL_EXT_subtexture --------------------------- */
+
+#ifndef GL_EXT_subtexture
+#define GL_EXT_subtexture 1
+
+typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels);
+
+#define glTexSubImage1DEXT GLEW_GET_FUN(__glewTexSubImage1DEXT)
+#define glTexSubImage2DEXT GLEW_GET_FUN(__glewTexSubImage2DEXT)
+#define glTexSubImage3DEXT GLEW_GET_FUN(__glewTexSubImage3DEXT)
+
+#define GLEW_EXT_subtexture GLEW_GET_VAR(__GLEW_EXT_subtexture)
+
+#endif /* GL_EXT_subtexture */
+
+/* ----------------------------- GL_EXT_texture ---------------------------- */
+
+#ifndef GL_EXT_texture
+#define GL_EXT_texture 1
+
+#define GL_ALPHA4_EXT 0x803B
+#define GL_ALPHA8_EXT 0x803C
+#define GL_ALPHA12_EXT 0x803D
+#define GL_ALPHA16_EXT 0x803E
+#define GL_LUMINANCE4_EXT 0x803F
+#define GL_LUMINANCE8_EXT 0x8040
+#define GL_LUMINANCE12_EXT 0x8041
+#define GL_LUMINANCE16_EXT 0x8042
+#define GL_LUMINANCE4_ALPHA4_EXT 0x8043
+#define GL_LUMINANCE6_ALPHA2_EXT 0x8044
+#define GL_LUMINANCE8_ALPHA8_EXT 0x8045
+#define GL_LUMINANCE12_ALPHA4_EXT 0x8046
+#define GL_LUMINANCE12_ALPHA12_EXT 0x8047
+#define GL_LUMINANCE16_ALPHA16_EXT 0x8048
+#define GL_INTENSITY_EXT 0x8049
+#define GL_INTENSITY4_EXT 0x804A
+#define GL_INTENSITY8_EXT 0x804B
+#define GL_INTENSITY12_EXT 0x804C
+#define GL_INTENSITY16_EXT 0x804D
+#define GL_RGB2_EXT 0x804E
+#define GL_RGB4_EXT 0x804F
+#define GL_RGB5_EXT 0x8050
+#define GL_RGB8_EXT 0x8051
+#define GL_RGB10_EXT 0x8052
+#define GL_RGB12_EXT 0x8053
+#define GL_RGB16_EXT 0x8054
+#define GL_RGBA2_EXT 0x8055
+#define GL_RGBA4_EXT 0x8056
+#define GL_RGB5_A1_EXT 0x8057
+#define GL_RGBA8_EXT 0x8058
+#define GL_RGB10_A2_EXT 0x8059
+#define GL_RGBA12_EXT 0x805A
+#define GL_RGBA16_EXT 0x805B
+#define GL_TEXTURE_RED_SIZE_EXT 0x805C
+#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D
+#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E
+#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060
+#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061
+#define GL_REPLACE_EXT 0x8062
+#define GL_PROXY_TEXTURE_1D_EXT 0x8063
+#define GL_PROXY_TEXTURE_2D_EXT 0x8064
+
+#define GLEW_EXT_texture GLEW_GET_VAR(__GLEW_EXT_texture)
+
+#endif /* GL_EXT_texture */
+
+/* ---------------------------- GL_EXT_texture3D --------------------------- */
+
+#ifndef GL_EXT_texture3D
+#define GL_EXT_texture3D 1
+
+#define GL_PACK_SKIP_IMAGES_EXT 0x806B
+#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C
+#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E
+#define GL_TEXTURE_3D_EXT 0x806F
+#define GL_PROXY_TEXTURE_3D_EXT 0x8070
+#define GL_TEXTURE_DEPTH_EXT 0x8071
+#define GL_TEXTURE_WRAP_R_EXT 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073
+
+typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels);
+
+#define glTexImage3DEXT GLEW_GET_FUN(__glewTexImage3DEXT)
+
+#define GLEW_EXT_texture3D GLEW_GET_VAR(__GLEW_EXT_texture3D)
+
+#endif /* GL_EXT_texture3D */
+
+/* -------------------------- GL_EXT_texture_array ------------------------- */
+
+#ifndef GL_EXT_texture_array
+#define GL_EXT_texture_array 1
+
+#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E
+#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF
+#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18
+#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19
+#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A
+#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B
+#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C
+#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D
+
+typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+
+#define glFramebufferTextureLayerEXT GLEW_GET_FUN(__glewFramebufferTextureLayerEXT)
+
+#define GLEW_EXT_texture_array GLEW_GET_VAR(__GLEW_EXT_texture_array)
+
+#endif /* GL_EXT_texture_array */
+
+/* ---------------------- GL_EXT_texture_buffer_object --------------------- */
+
+#ifndef GL_EXT_texture_buffer_object
+#define GL_EXT_texture_buffer_object 1
+
+#define GL_TEXTURE_BUFFER_EXT 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D
+#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E
+
+typedef void (GLAPIENTRY * PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+
+#define glTexBufferEXT GLEW_GET_FUN(__glewTexBufferEXT)
+
+#define GLEW_EXT_texture_buffer_object GLEW_GET_VAR(__GLEW_EXT_texture_buffer_object)
+
+#endif /* GL_EXT_texture_buffer_object */
+
+/* -------------------- GL_EXT_texture_compression_dxt1 -------------------- */
+
+#ifndef GL_EXT_texture_compression_dxt1
+#define GL_EXT_texture_compression_dxt1 1
+
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
+
+#define GLEW_EXT_texture_compression_dxt1 GLEW_GET_VAR(__GLEW_EXT_texture_compression_dxt1)
+
+#endif /* GL_EXT_texture_compression_dxt1 */
+
+/* -------------------- GL_EXT_texture_compression_latc -------------------- */
+
+#ifndef GL_EXT_texture_compression_latc
+#define GL_EXT_texture_compression_latc 1
+
+#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70
+#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71
+#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72
+#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73
+
+#define GLEW_EXT_texture_compression_latc GLEW_GET_VAR(__GLEW_EXT_texture_compression_latc)
+
+#endif /* GL_EXT_texture_compression_latc */
+
+/* -------------------- GL_EXT_texture_compression_rgtc -------------------- */
+
+#ifndef GL_EXT_texture_compression_rgtc
+#define GL_EXT_texture_compression_rgtc 1
+
+#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC
+#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD
+#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE
+
+#define GLEW_EXT_texture_compression_rgtc GLEW_GET_VAR(__GLEW_EXT_texture_compression_rgtc)
+
+#endif /* GL_EXT_texture_compression_rgtc */
+
+/* -------------------- GL_EXT_texture_compression_s3tc -------------------- */
+
+#ifndef GL_EXT_texture_compression_s3tc
+#define GL_EXT_texture_compression_s3tc 1
+
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
+
+#define GLEW_EXT_texture_compression_s3tc GLEW_GET_VAR(__GLEW_EXT_texture_compression_s3tc)
+
+#endif /* GL_EXT_texture_compression_s3tc */
+
+/* ------------------------ GL_EXT_texture_cube_map ------------------------ */
+
+#ifndef GL_EXT_texture_cube_map
+#define GL_EXT_texture_cube_map 1
+
+#define GL_NORMAL_MAP_EXT 0x8511
+#define GL_REFLECTION_MAP_EXT 0x8512
+#define GL_TEXTURE_CUBE_MAP_EXT 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C
+
+#define GLEW_EXT_texture_cube_map GLEW_GET_VAR(__GLEW_EXT_texture_cube_map)
+
+#endif /* GL_EXT_texture_cube_map */
+
+/* ----------------------- GL_EXT_texture_edge_clamp ----------------------- */
+
+#ifndef GL_EXT_texture_edge_clamp
+#define GL_EXT_texture_edge_clamp 1
+
+#define GL_CLAMP_TO_EDGE_EXT 0x812F
+
+#define GLEW_EXT_texture_edge_clamp GLEW_GET_VAR(__GLEW_EXT_texture_edge_clamp)
+
+#endif /* GL_EXT_texture_edge_clamp */
+
+/* --------------------------- GL_EXT_texture_env -------------------------- */
+
+#ifndef GL_EXT_texture_env
+#define GL_EXT_texture_env 1
+
+#define GL_TEXTURE_ENV0_EXT 0
+#define GL_ENV_BLEND_EXT 0
+#define GL_TEXTURE_ENV_SHIFT_EXT 0
+#define GL_ENV_REPLACE_EXT 0
+#define GL_ENV_ADD_EXT 0
+#define GL_ENV_SUBTRACT_EXT 0
+#define GL_TEXTURE_ENV_MODE_ALPHA_EXT 0
+#define GL_ENV_REVERSE_SUBTRACT_EXT 0
+#define GL_ENV_REVERSE_BLEND_EXT 0
+#define GL_ENV_COPY_EXT 0
+#define GL_ENV_MODULATE_EXT 0
+
+#define GLEW_EXT_texture_env GLEW_GET_VAR(__GLEW_EXT_texture_env)
+
+#endif /* GL_EXT_texture_env */
+
+/* ------------------------- GL_EXT_texture_env_add ------------------------ */
+
+#ifndef GL_EXT_texture_env_add
+#define GL_EXT_texture_env_add 1
+
+#define GLEW_EXT_texture_env_add GLEW_GET_VAR(__GLEW_EXT_texture_env_add)
+
+#endif /* GL_EXT_texture_env_add */
+
+/* ----------------------- GL_EXT_texture_env_combine ---------------------- */
+
+#ifndef GL_EXT_texture_env_combine
+#define GL_EXT_texture_env_combine 1
+
+#define GL_COMBINE_EXT 0x8570
+#define GL_COMBINE_RGB_EXT 0x8571
+#define GL_COMBINE_ALPHA_EXT 0x8572
+#define GL_RGB_SCALE_EXT 0x8573
+#define GL_ADD_SIGNED_EXT 0x8574
+#define GL_INTERPOLATE_EXT 0x8575
+#define GL_CONSTANT_EXT 0x8576
+#define GL_PRIMARY_COLOR_EXT 0x8577
+#define GL_PREVIOUS_EXT 0x8578
+#define GL_SOURCE0_RGB_EXT 0x8580
+#define GL_SOURCE1_RGB_EXT 0x8581
+#define GL_SOURCE2_RGB_EXT 0x8582
+#define GL_SOURCE0_ALPHA_EXT 0x8588
+#define GL_SOURCE1_ALPHA_EXT 0x8589
+#define GL_SOURCE2_ALPHA_EXT 0x858A
+#define GL_OPERAND0_RGB_EXT 0x8590
+#define GL_OPERAND1_RGB_EXT 0x8591
+#define GL_OPERAND2_RGB_EXT 0x8592
+#define GL_OPERAND0_ALPHA_EXT 0x8598
+#define GL_OPERAND1_ALPHA_EXT 0x8599
+#define GL_OPERAND2_ALPHA_EXT 0x859A
+
+#define GLEW_EXT_texture_env_combine GLEW_GET_VAR(__GLEW_EXT_texture_env_combine)
+
+#endif /* GL_EXT_texture_env_combine */
+
+/* ------------------------ GL_EXT_texture_env_dot3 ------------------------ */
+
+#ifndef GL_EXT_texture_env_dot3
+#define GL_EXT_texture_env_dot3 1
+
+#define GL_DOT3_RGB_EXT 0x8740
+#define GL_DOT3_RGBA_EXT 0x8741
+
+#define GLEW_EXT_texture_env_dot3 GLEW_GET_VAR(__GLEW_EXT_texture_env_dot3)
+
+#endif /* GL_EXT_texture_env_dot3 */
+
+/* ------------------- GL_EXT_texture_filter_anisotropic ------------------- */
+
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_EXT_texture_filter_anisotropic 1
+
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
+
+#define GLEW_EXT_texture_filter_anisotropic GLEW_GET_VAR(__GLEW_EXT_texture_filter_anisotropic)
+
+#endif /* GL_EXT_texture_filter_anisotropic */
+
+/* ------------------------- GL_EXT_texture_integer ------------------------ */
+
+#ifndef GL_EXT_texture_integer
+#define GL_EXT_texture_integer 1
+
+#define GL_RGBA32UI_EXT 0x8D70
+#define GL_RGB32UI_EXT 0x8D71
+#define GL_ALPHA32UI_EXT 0x8D72
+#define GL_INTENSITY32UI_EXT 0x8D73
+#define GL_LUMINANCE32UI_EXT 0x8D74
+#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75
+#define GL_RGBA16UI_EXT 0x8D76
+#define GL_RGB16UI_EXT 0x8D77
+#define GL_ALPHA16UI_EXT 0x8D78
+#define GL_INTENSITY16UI_EXT 0x8D79
+#define GL_LUMINANCE16UI_EXT 0x8D7A
+#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B
+#define GL_RGBA8UI_EXT 0x8D7C
+#define GL_RGB8UI_EXT 0x8D7D
+#define GL_ALPHA8UI_EXT 0x8D7E
+#define GL_INTENSITY8UI_EXT 0x8D7F
+#define GL_LUMINANCE8UI_EXT 0x8D80
+#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81
+#define GL_RGBA32I_EXT 0x8D82
+#define GL_RGB32I_EXT 0x8D83
+#define GL_ALPHA32I_EXT 0x8D84
+#define GL_INTENSITY32I_EXT 0x8D85
+#define GL_LUMINANCE32I_EXT 0x8D86
+#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87
+#define GL_RGBA16I_EXT 0x8D88
+#define GL_RGB16I_EXT 0x8D89
+#define GL_ALPHA16I_EXT 0x8D8A
+#define GL_INTENSITY16I_EXT 0x8D8B
+#define GL_LUMINANCE16I_EXT 0x8D8C
+#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D
+#define GL_RGBA8I_EXT 0x8D8E
+#define GL_RGB8I_EXT 0x8D8F
+#define GL_ALPHA8I_EXT 0x8D90
+#define GL_INTENSITY8I_EXT 0x8D91
+#define GL_LUMINANCE8I_EXT 0x8D92
+#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93
+#define GL_RED_INTEGER_EXT 0x8D94
+#define GL_GREEN_INTEGER_EXT 0x8D95
+#define GL_BLUE_INTEGER_EXT 0x8D96
+#define GL_ALPHA_INTEGER_EXT 0x8D97
+#define GL_RGB_INTEGER_EXT 0x8D98
+#define GL_RGBA_INTEGER_EXT 0x8D99
+#define GL_BGR_INTEGER_EXT 0x8D9A
+#define GL_BGRA_INTEGER_EXT 0x8D9B
+#define GL_LUMINANCE_INTEGER_EXT 0x8D9C
+#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D
+#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E
+
+typedef void (GLAPIENTRY * PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha);
+typedef void (GLAPIENTRY * PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha);
+typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params);
+
+#define glClearColorIiEXT GLEW_GET_FUN(__glewClearColorIiEXT)
+#define glClearColorIuiEXT GLEW_GET_FUN(__glewClearColorIuiEXT)
+#define glGetTexParameterIivEXT GLEW_GET_FUN(__glewGetTexParameterIivEXT)
+#define glGetTexParameterIuivEXT GLEW_GET_FUN(__glewGetTexParameterIuivEXT)
+#define glTexParameterIivEXT GLEW_GET_FUN(__glewTexParameterIivEXT)
+#define glTexParameterIuivEXT GLEW_GET_FUN(__glewTexParameterIuivEXT)
+
+#define GLEW_EXT_texture_integer GLEW_GET_VAR(__GLEW_EXT_texture_integer)
+
+#endif /* GL_EXT_texture_integer */
+
+/* ------------------------ GL_EXT_texture_lod_bias ------------------------ */
+
+#ifndef GL_EXT_texture_lod_bias
+#define GL_EXT_texture_lod_bias 1
+
+#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD
+#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500
+#define GL_TEXTURE_LOD_BIAS_EXT 0x8501
+
+#define GLEW_EXT_texture_lod_bias GLEW_GET_VAR(__GLEW_EXT_texture_lod_bias)
+
+#endif /* GL_EXT_texture_lod_bias */
+
+/* ---------------------- GL_EXT_texture_mirror_clamp ---------------------- */
+
+#ifndef GL_EXT_texture_mirror_clamp
+#define GL_EXT_texture_mirror_clamp 1
+
+#define GL_MIRROR_CLAMP_EXT 0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743
+#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912
+
+#define GLEW_EXT_texture_mirror_clamp GLEW_GET_VAR(__GLEW_EXT_texture_mirror_clamp)
+
+#endif /* GL_EXT_texture_mirror_clamp */
+
+/* ------------------------- GL_EXT_texture_object ------------------------- */
+
+#ifndef GL_EXT_texture_object
+#define GL_EXT_texture_object 1
+
+#define GL_TEXTURE_PRIORITY_EXT 0x8066
+#define GL_TEXTURE_RESIDENT_EXT 0x8067
+#define GL_TEXTURE_1D_BINDING_EXT 0x8068
+#define GL_TEXTURE_2D_BINDING_EXT 0x8069
+#define GL_TEXTURE_3D_BINDING_EXT 0x806A
+
+typedef GLboolean (GLAPIENTRY * PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint* textures, GLboolean* residences);
+typedef void (GLAPIENTRY * PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture);
+typedef void (GLAPIENTRY * PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint* textures);
+typedef void (GLAPIENTRY * PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint* textures);
+typedef GLboolean (GLAPIENTRY * PFNGLISTEXTUREEXTPROC) (GLuint texture);
+typedef void (GLAPIENTRY * PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint* textures, const GLclampf* priorities);
+
+#define glAreTexturesResidentEXT GLEW_GET_FUN(__glewAreTexturesResidentEXT)
+#define glBindTextureEXT GLEW_GET_FUN(__glewBindTextureEXT)
+#define glDeleteTexturesEXT GLEW_GET_FUN(__glewDeleteTexturesEXT)
+#define glGenTexturesEXT GLEW_GET_FUN(__glewGenTexturesEXT)
+#define glIsTextureEXT GLEW_GET_FUN(__glewIsTextureEXT)
+#define glPrioritizeTexturesEXT GLEW_GET_FUN(__glewPrioritizeTexturesEXT)
+
+#define GLEW_EXT_texture_object GLEW_GET_VAR(__GLEW_EXT_texture_object)
+
+#endif /* GL_EXT_texture_object */
+
+/* --------------------- GL_EXT_texture_perturb_normal --------------------- */
+
+#ifndef GL_EXT_texture_perturb_normal
+#define GL_EXT_texture_perturb_normal 1
+
+#define GL_PERTURB_EXT 0x85AE
+#define GL_TEXTURE_NORMAL_EXT 0x85AF
+
+typedef void (GLAPIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode);
+
+#define glTextureNormalEXT GLEW_GET_FUN(__glewTextureNormalEXT)
+
+#define GLEW_EXT_texture_perturb_normal GLEW_GET_VAR(__GLEW_EXT_texture_perturb_normal)
+
+#endif /* GL_EXT_texture_perturb_normal */
+
+/* ------------------------ GL_EXT_texture_rectangle ----------------------- */
+
+#ifndef GL_EXT_texture_rectangle
+#define GL_EXT_texture_rectangle 1
+
+#define GL_TEXTURE_RECTANGLE_EXT 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_EXT 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_EXT 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT 0x84F8
+
+#define GLEW_EXT_texture_rectangle GLEW_GET_VAR(__GLEW_EXT_texture_rectangle)
+
+#endif /* GL_EXT_texture_rectangle */
+
+/* -------------------------- GL_EXT_texture_sRGB -------------------------- */
+
+#ifndef GL_EXT_texture_sRGB
+#define GL_EXT_texture_sRGB 1
+
+#define GL_SRGB_EXT 0x8C40
+#define GL_SRGB8_EXT 0x8C41
+#define GL_SRGB_ALPHA_EXT 0x8C42
+#define GL_SRGB8_ALPHA8_EXT 0x8C43
+#define GL_SLUMINANCE_ALPHA_EXT 0x8C44
+#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45
+#define GL_SLUMINANCE_EXT 0x8C46
+#define GL_SLUMINANCE8_EXT 0x8C47
+#define GL_COMPRESSED_SRGB_EXT 0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49
+#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F
+
+#define GLEW_EXT_texture_sRGB GLEW_GET_VAR(__GLEW_EXT_texture_sRGB)
+
+#endif /* GL_EXT_texture_sRGB */
+
+/* ----------------------- GL_EXT_texture_sRGB_decode ---------------------- */
+
+#ifndef GL_EXT_texture_sRGB_decode
+#define GL_EXT_texture_sRGB_decode 1
+
+#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48
+#define GL_DECODE_EXT 0x8A49
+#define GL_SKIP_DECODE_EXT 0x8A4A
+
+#define GLEW_EXT_texture_sRGB_decode GLEW_GET_VAR(__GLEW_EXT_texture_sRGB_decode)
+
+#endif /* GL_EXT_texture_sRGB_decode */
+
+/* --------------------- GL_EXT_texture_shared_exponent -------------------- */
+
+#ifndef GL_EXT_texture_shared_exponent
+#define GL_EXT_texture_shared_exponent 1
+
+#define GL_RGB9_E5_EXT 0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E
+#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F
+
+#define GLEW_EXT_texture_shared_exponent GLEW_GET_VAR(__GLEW_EXT_texture_shared_exponent)
+
+#endif /* GL_EXT_texture_shared_exponent */
+
+/* -------------------------- GL_EXT_texture_snorm ------------------------- */
+
+#ifndef GL_EXT_texture_snorm
+#define GL_EXT_texture_snorm 1
+
+#define GL_RED_SNORM 0x8F90
+#define GL_RG_SNORM 0x8F91
+#define GL_RGB_SNORM 0x8F92
+#define GL_RGBA_SNORM 0x8F93
+#define GL_R8_SNORM 0x8F94
+#define GL_RG8_SNORM 0x8F95
+#define GL_RGB8_SNORM 0x8F96
+#define GL_RGBA8_SNORM 0x8F97
+#define GL_R16_SNORM 0x8F98
+#define GL_RG16_SNORM 0x8F99
+#define GL_RGB16_SNORM 0x8F9A
+#define GL_RGBA16_SNORM 0x8F9B
+#define GL_SIGNED_NORMALIZED 0x8F9C
+#define GL_ALPHA_SNORM 0x9010
+#define GL_LUMINANCE_SNORM 0x9011
+#define GL_LUMINANCE_ALPHA_SNORM 0x9012
+#define GL_INTENSITY_SNORM 0x9013
+#define GL_ALPHA8_SNORM 0x9014
+#define GL_LUMINANCE8_SNORM 0x9015
+#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016
+#define GL_INTENSITY8_SNORM 0x9017
+#define GL_ALPHA16_SNORM 0x9018
+#define GL_LUMINANCE16_SNORM 0x9019
+#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A
+#define GL_INTENSITY16_SNORM 0x901B
+
+#define GLEW_EXT_texture_snorm GLEW_GET_VAR(__GLEW_EXT_texture_snorm)
+
+#endif /* GL_EXT_texture_snorm */
+
+/* ------------------------- GL_EXT_texture_swizzle ------------------------ */
+
+#ifndef GL_EXT_texture_swizzle
+#define GL_EXT_texture_swizzle 1
+
+#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42
+#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43
+#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44
+#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45
+#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46
+
+#define GLEW_EXT_texture_swizzle GLEW_GET_VAR(__GLEW_EXT_texture_swizzle)
+
+#endif /* GL_EXT_texture_swizzle */
+
+/* --------------------------- GL_EXT_timer_query -------------------------- */
+
+#ifndef GL_EXT_timer_query
+#define GL_EXT_timer_query 1
+
+#define GL_TIME_ELAPSED_EXT 0x88BF
+
+typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params);
+typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params);
+
+#define glGetQueryObjecti64vEXT GLEW_GET_FUN(__glewGetQueryObjecti64vEXT)
+#define glGetQueryObjectui64vEXT GLEW_GET_FUN(__glewGetQueryObjectui64vEXT)
+
+#define GLEW_EXT_timer_query GLEW_GET_VAR(__GLEW_EXT_timer_query)
+
+#endif /* GL_EXT_timer_query */
+
+/* ----------------------- GL_EXT_transform_feedback ----------------------- */
+
+#ifndef GL_EXT_transform_feedback
+#define GL_EXT_transform_feedback 1
+
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85
+#define GL_PRIMITIVES_GENERATED_EXT 0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88
+#define GL_RASTERIZER_DISCARD_EXT 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C
+#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F
+
+typedef void (GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode);
+typedef void (GLAPIENTRY * PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void);
+typedef void (GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei *size, GLenum *type, char *name);
+typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const char ** varyings, GLenum bufferMode);
+
+#define glBeginTransformFeedbackEXT GLEW_GET_FUN(__glewBeginTransformFeedbackEXT)
+#define glBindBufferBaseEXT GLEW_GET_FUN(__glewBindBufferBaseEXT)
+#define glBindBufferOffsetEXT GLEW_GET_FUN(__glewBindBufferOffsetEXT)
+#define glBindBufferRangeEXT GLEW_GET_FUN(__glewBindBufferRangeEXT)
+#define glEndTransformFeedbackEXT GLEW_GET_FUN(__glewEndTransformFeedbackEXT)
+#define glGetTransformFeedbackVaryingEXT GLEW_GET_FUN(__glewGetTransformFeedbackVaryingEXT)
+#define glTransformFeedbackVaryingsEXT GLEW_GET_FUN(__glewTransformFeedbackVaryingsEXT)
+
+#define GLEW_EXT_transform_feedback GLEW_GET_VAR(__GLEW_EXT_transform_feedback)
+
+#endif /* GL_EXT_transform_feedback */
+
+/* -------------------------- GL_EXT_vertex_array -------------------------- */
+
+#ifndef GL_EXT_vertex_array
+#define GL_EXT_vertex_array 1
+
+#define GL_DOUBLE_EXT 0x140A
+#define GL_VERTEX_ARRAY_EXT 0x8074
+#define GL_NORMAL_ARRAY_EXT 0x8075
+#define GL_COLOR_ARRAY_EXT 0x8076
+#define GL_INDEX_ARRAY_EXT 0x8077
+#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078
+#define GL_EDGE_FLAG_ARRAY_EXT 0x8079
+#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A
+#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B
+#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C
+#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D
+#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E
+#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F
+#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080
+#define GL_COLOR_ARRAY_SIZE_EXT 0x8081
+#define GL_COLOR_ARRAY_TYPE_EXT 0x8082
+#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083
+#define GL_COLOR_ARRAY_COUNT_EXT 0x8084
+#define GL_INDEX_ARRAY_TYPE_EXT 0x8085
+#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086
+#define GL_INDEX_ARRAY_COUNT_EXT 0x8087
+#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A
+#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B
+#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C
+#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D
+#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E
+#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F
+#define GL_COLOR_ARRAY_POINTER_EXT 0x8090
+#define GL_INDEX_ARRAY_POINTER_EXT 0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093
+
+typedef void (GLAPIENTRY * PFNGLARRAYELEMENTEXTPROC) (GLint i);
+typedef void (GLAPIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (GLAPIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean* pointer);
+typedef void (GLAPIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer);
+
+#define glArrayElementEXT GLEW_GET_FUN(__glewArrayElementEXT)
+#define glColorPointerEXT GLEW_GET_FUN(__glewColorPointerEXT)
+#define glDrawArraysEXT GLEW_GET_FUN(__glewDrawArraysEXT)
+#define glEdgeFlagPointerEXT GLEW_GET_FUN(__glewEdgeFlagPointerEXT)
+#define glIndexPointerEXT GLEW_GET_FUN(__glewIndexPointerEXT)
+#define glNormalPointerEXT GLEW_GET_FUN(__glewNormalPointerEXT)
+#define glTexCoordPointerEXT GLEW_GET_FUN(__glewTexCoordPointerEXT)
+#define glVertexPointerEXT GLEW_GET_FUN(__glewVertexPointerEXT)
+
+#define GLEW_EXT_vertex_array GLEW_GET_VAR(__GLEW_EXT_vertex_array)
+
+#endif /* GL_EXT_vertex_array */
+
+/* ------------------------ GL_EXT_vertex_array_bgra ----------------------- */
+
+#ifndef GL_EXT_vertex_array_bgra
+#define GL_EXT_vertex_array_bgra 1
+
+#define GL_BGRA 0x80E1
+
+#define GLEW_EXT_vertex_array_bgra GLEW_GET_VAR(__GLEW_EXT_vertex_array_bgra)
+
+#endif /* GL_EXT_vertex_array_bgra */
+
+/* ----------------------- GL_EXT_vertex_attrib_64bit ---------------------- */
+
+#ifndef GL_EXT_vertex_attrib_64bit
+#define GL_EXT_vertex_attrib_64bit 1
+
+#define GL_DOUBLE_MAT2_EXT 0x8F46
+#define GL_DOUBLE_MAT3_EXT 0x8F47
+#define GL_DOUBLE_MAT4_EXT 0x8F48
+#define GL_DOUBLE_MAT2x3_EXT 0x8F49
+#define GL_DOUBLE_MAT2x4_EXT 0x8F4A
+#define GL_DOUBLE_MAT3x2_EXT 0x8F4B
+#define GL_DOUBLE_MAT3x4_EXT 0x8F4C
+#define GL_DOUBLE_MAT4x2_EXT 0x8F4D
+#define GL_DOUBLE_MAT4x3_EXT 0x8F4E
+#define GL_DOUBLE_VEC2_EXT 0x8FFC
+#define GL_DOUBLE_VEC3_EXT 0x8FFD
+#define GL_DOUBLE_VEC4_EXT 0x8FFE
+
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer);
+
+#define glGetVertexAttribLdvEXT GLEW_GET_FUN(__glewGetVertexAttribLdvEXT)
+#define glVertexArrayVertexAttribLOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexAttribLOffsetEXT)
+#define glVertexAttribL1dEXT GLEW_GET_FUN(__glewVertexAttribL1dEXT)
+#define glVertexAttribL1dvEXT GLEW_GET_FUN(__glewVertexAttribL1dvEXT)
+#define glVertexAttribL2dEXT GLEW_GET_FUN(__glewVertexAttribL2dEXT)
+#define glVertexAttribL2dvEXT GLEW_GET_FUN(__glewVertexAttribL2dvEXT)
+#define glVertexAttribL3dEXT GLEW_GET_FUN(__glewVertexAttribL3dEXT)
+#define glVertexAttribL3dvEXT GLEW_GET_FUN(__glewVertexAttribL3dvEXT)
+#define glVertexAttribL4dEXT GLEW_GET_FUN(__glewVertexAttribL4dEXT)
+#define glVertexAttribL4dvEXT GLEW_GET_FUN(__glewVertexAttribL4dvEXT)
+#define glVertexAttribLPointerEXT GLEW_GET_FUN(__glewVertexAttribLPointerEXT)
+
+#define GLEW_EXT_vertex_attrib_64bit GLEW_GET_VAR(__GLEW_EXT_vertex_attrib_64bit)
+
+#endif /* GL_EXT_vertex_attrib_64bit */
+
+/* -------------------------- GL_EXT_vertex_shader ------------------------- */
+
+#ifndef GL_EXT_vertex_shader
+#define GL_EXT_vertex_shader 1
+
+#define GL_VERTEX_SHADER_EXT 0x8780
+#define GL_VERTEX_SHADER_BINDING_EXT 0x8781
+#define GL_OP_INDEX_EXT 0x8782
+#define GL_OP_NEGATE_EXT 0x8783
+#define GL_OP_DOT3_EXT 0x8784
+#define GL_OP_DOT4_EXT 0x8785
+#define GL_OP_MUL_EXT 0x8786
+#define GL_OP_ADD_EXT 0x8787
+#define GL_OP_MADD_EXT 0x8788
+#define GL_OP_FRAC_EXT 0x8789
+#define GL_OP_MAX_EXT 0x878A
+#define GL_OP_MIN_EXT 0x878B
+#define GL_OP_SET_GE_EXT 0x878C
+#define GL_OP_SET_LT_EXT 0x878D
+#define GL_OP_CLAMP_EXT 0x878E
+#define GL_OP_FLOOR_EXT 0x878F
+#define GL_OP_ROUND_EXT 0x8790
+#define GL_OP_EXP_BASE_2_EXT 0x8791
+#define GL_OP_LOG_BASE_2_EXT 0x8792
+#define GL_OP_POWER_EXT 0x8793
+#define GL_OP_RECIP_EXT 0x8794
+#define GL_OP_RECIP_SQRT_EXT 0x8795
+#define GL_OP_SUB_EXT 0x8796
+#define GL_OP_CROSS_PRODUCT_EXT 0x8797
+#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798
+#define GL_OP_MOV_EXT 0x8799
+#define GL_OUTPUT_VERTEX_EXT 0x879A
+#define GL_OUTPUT_COLOR0_EXT 0x879B
+#define GL_OUTPUT_COLOR1_EXT 0x879C
+#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D
+#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E
+#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F
+#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0
+#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1
+#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2
+#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3
+#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4
+#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5
+#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6
+#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7
+#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8
+#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9
+#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA
+#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB
+#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC
+#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD
+#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE
+#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF
+#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0
+#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1
+#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2
+#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3
+#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4
+#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5
+#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6
+#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7
+#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8
+#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9
+#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA
+#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB
+#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC
+#define GL_OUTPUT_FOG_EXT 0x87BD
+#define GL_SCALAR_EXT 0x87BE
+#define GL_VECTOR_EXT 0x87BF
+#define GL_MATRIX_EXT 0x87C0
+#define GL_VARIANT_EXT 0x87C1
+#define GL_INVARIANT_EXT 0x87C2
+#define GL_LOCAL_CONSTANT_EXT 0x87C3
+#define GL_LOCAL_EXT 0x87C4
+#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5
+#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6
+#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7
+#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8
+#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CC
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CD
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE
+#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF
+#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0
+#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1
+#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2
+#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3
+#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4
+#define GL_X_EXT 0x87D5
+#define GL_Y_EXT 0x87D6
+#define GL_Z_EXT 0x87D7
+#define GL_W_EXT 0x87D8
+#define GL_NEGATIVE_X_EXT 0x87D9
+#define GL_NEGATIVE_Y_EXT 0x87DA
+#define GL_NEGATIVE_Z_EXT 0x87DB
+#define GL_NEGATIVE_W_EXT 0x87DC
+#define GL_ZERO_EXT 0x87DD
+#define GL_ONE_EXT 0x87DE
+#define GL_NEGATIVE_ONE_EXT 0x87DF
+#define GL_NORMALIZED_RANGE_EXT 0x87E0
+#define GL_FULL_RANGE_EXT 0x87E1
+#define GL_CURRENT_VERTEX_EXT 0x87E2
+#define GL_MVP_MATRIX_EXT 0x87E3
+#define GL_VARIANT_VALUE_EXT 0x87E4
+#define GL_VARIANT_DATATYPE_EXT 0x87E5
+#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6
+#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7
+#define GL_VARIANT_ARRAY_EXT 0x87E8
+#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9
+#define GL_INVARIANT_VALUE_EXT 0x87EA
+#define GL_INVARIANT_DATATYPE_EXT 0x87EB
+#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC
+#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED
+
+typedef void (GLAPIENTRY * PFNGLBEGINVERTEXSHADEREXTPROC) (void);
+typedef GLuint (GLAPIENTRY * PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value);
+typedef GLuint (GLAPIENTRY * PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value);
+typedef GLuint (GLAPIENTRY * PFNGLBINDPARAMETEREXTPROC) (GLenum value);
+typedef GLuint (GLAPIENTRY * PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value);
+typedef GLuint (GLAPIENTRY * PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value);
+typedef void (GLAPIENTRY * PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLENDVERTEXSHADEREXTPROC) (void);
+typedef void (GLAPIENTRY * PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef GLuint (GLAPIENTRY * PFNGLGENSYMBOLSEXTPROC) (GLenum dataType, GLenum storageType, GLenum range, GLuint components);
+typedef GLuint (GLAPIENTRY * PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range);
+typedef void (GLAPIENTRY * PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (GLAPIENTRY * PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (GLAPIENTRY * PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (GLAPIENTRY * PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (GLAPIENTRY * PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (GLAPIENTRY * PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (GLAPIENTRY * PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid **data);
+typedef void (GLAPIENTRY * PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef GLboolean (GLAPIENTRY * PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap);
+typedef void (GLAPIENTRY * PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, GLvoid *addr);
+typedef void (GLAPIENTRY * PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, GLvoid *addr);
+typedef void (GLAPIENTRY * PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1);
+typedef void (GLAPIENTRY * PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2);
+typedef void (GLAPIENTRY * PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);
+typedef void (GLAPIENTRY * PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (GLAPIENTRY * PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, GLvoid *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTBVEXTPROC) (GLuint id, GLbyte *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTDVEXTPROC) (GLuint id, GLdouble *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTFVEXTPROC) (GLuint id, GLfloat *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTIVEXTPROC) (GLuint id, GLint *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTSVEXTPROC) (GLuint id, GLshort *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTUBVEXTPROC) (GLuint id, GLubyte *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTUIVEXTPROC) (GLuint id, GLuint *addr);
+typedef void (GLAPIENTRY * PFNGLVARIANTUSVEXTPROC) (GLuint id, GLushort *addr);
+typedef void (GLAPIENTRY * PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+
+#define glBeginVertexShaderEXT GLEW_GET_FUN(__glewBeginVertexShaderEXT)
+#define glBindLightParameterEXT GLEW_GET_FUN(__glewBindLightParameterEXT)
+#define glBindMaterialParameterEXT GLEW_GET_FUN(__glewBindMaterialParameterEXT)
+#define glBindParameterEXT GLEW_GET_FUN(__glewBindParameterEXT)
+#define glBindTexGenParameterEXT GLEW_GET_FUN(__glewBindTexGenParameterEXT)
+#define glBindTextureUnitParameterEXT GLEW_GET_FUN(__glewBindTextureUnitParameterEXT)
+#define glBindVertexShaderEXT GLEW_GET_FUN(__glewBindVertexShaderEXT)
+#define glDeleteVertexShaderEXT GLEW_GET_FUN(__glewDeleteVertexShaderEXT)
+#define glDisableVariantClientStateEXT GLEW_GET_FUN(__glewDisableVariantClientStateEXT)
+#define glEnableVariantClientStateEXT GLEW_GET_FUN(__glewEnableVariantClientStateEXT)
+#define glEndVertexShaderEXT GLEW_GET_FUN(__glewEndVertexShaderEXT)
+#define glExtractComponentEXT GLEW_GET_FUN(__glewExtractComponentEXT)
+#define glGenSymbolsEXT GLEW_GET_FUN(__glewGenSymbolsEXT)
+#define glGenVertexShadersEXT GLEW_GET_FUN(__glewGenVertexShadersEXT)
+#define glGetInvariantBooleanvEXT GLEW_GET_FUN(__glewGetInvariantBooleanvEXT)
+#define glGetInvariantFloatvEXT GLEW_GET_FUN(__glewGetInvariantFloatvEXT)
+#define glGetInvariantIntegervEXT GLEW_GET_FUN(__glewGetInvariantIntegervEXT)
+#define glGetLocalConstantBooleanvEXT GLEW_GET_FUN(__glewGetLocalConstantBooleanvEXT)
+#define glGetLocalConstantFloatvEXT GLEW_GET_FUN(__glewGetLocalConstantFloatvEXT)
+#define glGetLocalConstantIntegervEXT GLEW_GET_FUN(__glewGetLocalConstantIntegervEXT)
+#define glGetVariantBooleanvEXT GLEW_GET_FUN(__glewGetVariantBooleanvEXT)
+#define glGetVariantFloatvEXT GLEW_GET_FUN(__glewGetVariantFloatvEXT)
+#define glGetVariantIntegervEXT GLEW_GET_FUN(__glewGetVariantIntegervEXT)
+#define glGetVariantPointervEXT GLEW_GET_FUN(__glewGetVariantPointervEXT)
+#define glInsertComponentEXT GLEW_GET_FUN(__glewInsertComponentEXT)
+#define glIsVariantEnabledEXT GLEW_GET_FUN(__glewIsVariantEnabledEXT)
+#define glSetInvariantEXT GLEW_GET_FUN(__glewSetInvariantEXT)
+#define glSetLocalConstantEXT GLEW_GET_FUN(__glewSetLocalConstantEXT)
+#define glShaderOp1EXT GLEW_GET_FUN(__glewShaderOp1EXT)
+#define glShaderOp2EXT GLEW_GET_FUN(__glewShaderOp2EXT)
+#define glShaderOp3EXT GLEW_GET_FUN(__glewShaderOp3EXT)
+#define glSwizzleEXT GLEW_GET_FUN(__glewSwizzleEXT)
+#define glVariantPointerEXT GLEW_GET_FUN(__glewVariantPointerEXT)
+#define glVariantbvEXT GLEW_GET_FUN(__glewVariantbvEXT)
+#define glVariantdvEXT GLEW_GET_FUN(__glewVariantdvEXT)
+#define glVariantfvEXT GLEW_GET_FUN(__glewVariantfvEXT)
+#define glVariantivEXT GLEW_GET_FUN(__glewVariantivEXT)
+#define glVariantsvEXT GLEW_GET_FUN(__glewVariantsvEXT)
+#define glVariantubvEXT GLEW_GET_FUN(__glewVariantubvEXT)
+#define glVariantuivEXT GLEW_GET_FUN(__glewVariantuivEXT)
+#define glVariantusvEXT GLEW_GET_FUN(__glewVariantusvEXT)
+#define glWriteMaskEXT GLEW_GET_FUN(__glewWriteMaskEXT)
+
+#define GLEW_EXT_vertex_shader GLEW_GET_VAR(__GLEW_EXT_vertex_shader)
+
+#endif /* GL_EXT_vertex_shader */
+
+/* ------------------------ GL_EXT_vertex_weighting ------------------------ */
+
+#ifndef GL_EXT_vertex_weighting
+#define GL_EXT_vertex_weighting 1
+
+#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3
+#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6
+#define GL_MODELVIEW0_EXT 0x1700
+#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502
+#define GL_MODELVIEW1_MATRIX_EXT 0x8506
+#define GL_VERTEX_WEIGHTING_EXT 0x8509
+#define GL_MODELVIEW1_EXT 0x850A
+#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B
+#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C
+#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D
+#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E
+#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F
+#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510
+
+typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, void* pointer);
+typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight);
+typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC) (GLfloat* weight);
+
+#define glVertexWeightPointerEXT GLEW_GET_FUN(__glewVertexWeightPointerEXT)
+#define glVertexWeightfEXT GLEW_GET_FUN(__glewVertexWeightfEXT)
+#define glVertexWeightfvEXT GLEW_GET_FUN(__glewVertexWeightfvEXT)
+
+#define GLEW_EXT_vertex_weighting GLEW_GET_VAR(__GLEW_EXT_vertex_weighting)
+
+#endif /* GL_EXT_vertex_weighting */
+
+/* ------------------------- GL_EXT_x11_sync_object ------------------------ */
+
+#ifndef GL_EXT_x11_sync_object
+#define GL_EXT_x11_sync_object 1
+
+#define GL_SYNC_X11_FENCE_EXT 0x90E1
+
+typedef GLsync (GLAPIENTRY * PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags);
+
+#define glImportSyncEXT GLEW_GET_FUN(__glewImportSyncEXT)
+
+#define GLEW_EXT_x11_sync_object GLEW_GET_VAR(__GLEW_EXT_x11_sync_object)
+
+#endif /* GL_EXT_x11_sync_object */
+
+/* ---------------------- GL_GREMEDY_frame_terminator ---------------------- */
+
+#ifndef GL_GREMEDY_frame_terminator
+#define GL_GREMEDY_frame_terminator 1
+
+typedef void (GLAPIENTRY * PFNGLFRAMETERMINATORGREMEDYPROC) (void);
+
+#define glFrameTerminatorGREMEDY GLEW_GET_FUN(__glewFrameTerminatorGREMEDY)
+
+#define GLEW_GREMEDY_frame_terminator GLEW_GET_VAR(__GLEW_GREMEDY_frame_terminator)
+
+#endif /* GL_GREMEDY_frame_terminator */
+
+/* ------------------------ GL_GREMEDY_string_marker ----------------------- */
+
+#ifndef GL_GREMEDY_string_marker
+#define GL_GREMEDY_string_marker 1
+
+typedef void (GLAPIENTRY * PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void* string);
+
+#define glStringMarkerGREMEDY GLEW_GET_FUN(__glewStringMarkerGREMEDY)
+
+#define GLEW_GREMEDY_string_marker GLEW_GET_VAR(__GLEW_GREMEDY_string_marker)
+
+#endif /* GL_GREMEDY_string_marker */
+
+/* --------------------- GL_HP_convolution_border_modes -------------------- */
+
+#ifndef GL_HP_convolution_border_modes
+#define GL_HP_convolution_border_modes 1
+
+#define GLEW_HP_convolution_border_modes GLEW_GET_VAR(__GLEW_HP_convolution_border_modes)
+
+#endif /* GL_HP_convolution_border_modes */
+
+/* ------------------------- GL_HP_image_transform ------------------------- */
+
+#ifndef GL_HP_image_transform
+#define GL_HP_image_transform 1
+
+typedef void (GLAPIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, const GLfloat param);
+typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, const GLint param);
+typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint* params);
+
+#define glGetImageTransformParameterfvHP GLEW_GET_FUN(__glewGetImageTransformParameterfvHP)
+#define glGetImageTransformParameterivHP GLEW_GET_FUN(__glewGetImageTransformParameterivHP)
+#define glImageTransformParameterfHP GLEW_GET_FUN(__glewImageTransformParameterfHP)
+#define glImageTransformParameterfvHP GLEW_GET_FUN(__glewImageTransformParameterfvHP)
+#define glImageTransformParameteriHP GLEW_GET_FUN(__glewImageTransformParameteriHP)
+#define glImageTransformParameterivHP GLEW_GET_FUN(__glewImageTransformParameterivHP)
+
+#define GLEW_HP_image_transform GLEW_GET_VAR(__GLEW_HP_image_transform)
+
+#endif /* GL_HP_image_transform */
+
+/* -------------------------- GL_HP_occlusion_test ------------------------- */
+
+#ifndef GL_HP_occlusion_test
+#define GL_HP_occlusion_test 1
+
+#define GL_OCCLUSION_TEST_HP 0x8165
+#define GL_OCCLUSION_TEST_RESULT_HP 0x8166
+
+#define GLEW_HP_occlusion_test GLEW_GET_VAR(__GLEW_HP_occlusion_test)
+
+#endif /* GL_HP_occlusion_test */
+
+/* ------------------------- GL_HP_texture_lighting ------------------------ */
+
+#ifndef GL_HP_texture_lighting
+#define GL_HP_texture_lighting 1
+
+#define GLEW_HP_texture_lighting GLEW_GET_VAR(__GLEW_HP_texture_lighting)
+
+#endif /* GL_HP_texture_lighting */
+
+/* --------------------------- GL_IBM_cull_vertex -------------------------- */
+
+#ifndef GL_IBM_cull_vertex
+#define GL_IBM_cull_vertex 1
+
+#define GL_CULL_VERTEX_IBM 103050
+
+#define GLEW_IBM_cull_vertex GLEW_GET_VAR(__GLEW_IBM_cull_vertex)
+
+#endif /* GL_IBM_cull_vertex */
+
+/* ---------------------- GL_IBM_multimode_draw_arrays --------------------- */
+
+#ifndef GL_IBM_multimode_draw_arrays
+#define GL_IBM_multimode_draw_arrays 1
+
+typedef void (GLAPIENTRY * PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum* mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
+typedef void (GLAPIENTRY * PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum* mode, const GLsizei *count, GLenum type, const GLvoid * const *indices, GLsizei primcount, GLint modestride);
+
+#define glMultiModeDrawArraysIBM GLEW_GET_FUN(__glewMultiModeDrawArraysIBM)
+#define glMultiModeDrawElementsIBM GLEW_GET_FUN(__glewMultiModeDrawElementsIBM)
+
+#define GLEW_IBM_multimode_draw_arrays GLEW_GET_VAR(__GLEW_IBM_multimode_draw_arrays)
+
+#endif /* GL_IBM_multimode_draw_arrays */
+
+/* ------------------------- GL_IBM_rasterpos_clip ------------------------- */
+
+#ifndef GL_IBM_rasterpos_clip
+#define GL_IBM_rasterpos_clip 1
+
+#define GL_RASTER_POSITION_UNCLIPPED_IBM 103010
+
+#define GLEW_IBM_rasterpos_clip GLEW_GET_VAR(__GLEW_IBM_rasterpos_clip)
+
+#endif /* GL_IBM_rasterpos_clip */
+
+/* --------------------------- GL_IBM_static_data -------------------------- */
+
+#ifndef GL_IBM_static_data
+#define GL_IBM_static_data 1
+
+#define GL_ALL_STATIC_DATA_IBM 103060
+#define GL_STATIC_VERTEX_ARRAY_IBM 103061
+
+#define GLEW_IBM_static_data GLEW_GET_VAR(__GLEW_IBM_static_data)
+
+#endif /* GL_IBM_static_data */
+
+/* --------------------- GL_IBM_texture_mirrored_repeat -------------------- */
+
+#ifndef GL_IBM_texture_mirrored_repeat
+#define GL_IBM_texture_mirrored_repeat 1
+
+#define GL_MIRRORED_REPEAT_IBM 0x8370
+
+#define GLEW_IBM_texture_mirrored_repeat GLEW_GET_VAR(__GLEW_IBM_texture_mirrored_repeat)
+
+#endif /* GL_IBM_texture_mirrored_repeat */
+
+/* ----------------------- GL_IBM_vertex_array_lists ----------------------- */
+
+#ifndef GL_IBM_vertex_array_lists
+#define GL_IBM_vertex_array_lists 1
+
+#define GL_VERTEX_ARRAY_LIST_IBM 103070
+#define GL_NORMAL_ARRAY_LIST_IBM 103071
+#define GL_COLOR_ARRAY_LIST_IBM 103072
+#define GL_INDEX_ARRAY_LIST_IBM 103073
+#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074
+#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075
+#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076
+#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077
+#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080
+#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081
+#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082
+#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083
+#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084
+#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085
+#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086
+#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087
+
+typedef void (GLAPIENTRY * PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride);
+typedef void (GLAPIENTRY * PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean ** pointer, GLint ptrstride);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride);
+typedef void (GLAPIENTRY * PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride);
+typedef void (GLAPIENTRY * PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride);
+typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride);
+
+#define glColorPointerListIBM GLEW_GET_FUN(__glewColorPointerListIBM)
+#define glEdgeFlagPointerListIBM GLEW_GET_FUN(__glewEdgeFlagPointerListIBM)
+#define glFogCoordPointerListIBM GLEW_GET_FUN(__glewFogCoordPointerListIBM)
+#define glIndexPointerListIBM GLEW_GET_FUN(__glewIndexPointerListIBM)
+#define glNormalPointerListIBM GLEW_GET_FUN(__glewNormalPointerListIBM)
+#define glSecondaryColorPointerListIBM GLEW_GET_FUN(__glewSecondaryColorPointerListIBM)
+#define glTexCoordPointerListIBM GLEW_GET_FUN(__glewTexCoordPointerListIBM)
+#define glVertexPointerListIBM GLEW_GET_FUN(__glewVertexPointerListIBM)
+
+#define GLEW_IBM_vertex_array_lists GLEW_GET_VAR(__GLEW_IBM_vertex_array_lists)
+
+#endif /* GL_IBM_vertex_array_lists */
+
+/* -------------------------- GL_INGR_color_clamp -------------------------- */
+
+#ifndef GL_INGR_color_clamp
+#define GL_INGR_color_clamp 1
+
+#define GL_RED_MIN_CLAMP_INGR 0x8560
+#define GL_GREEN_MIN_CLAMP_INGR 0x8561
+#define GL_BLUE_MIN_CLAMP_INGR 0x8562
+#define GL_ALPHA_MIN_CLAMP_INGR 0x8563
+#define GL_RED_MAX_CLAMP_INGR 0x8564
+#define GL_GREEN_MAX_CLAMP_INGR 0x8565
+#define GL_BLUE_MAX_CLAMP_INGR 0x8566
+#define GL_ALPHA_MAX_CLAMP_INGR 0x8567
+
+#define GLEW_INGR_color_clamp GLEW_GET_VAR(__GLEW_INGR_color_clamp)
+
+#endif /* GL_INGR_color_clamp */
+
+/* ------------------------- GL_INGR_interlace_read ------------------------ */
+
+#ifndef GL_INGR_interlace_read
+#define GL_INGR_interlace_read 1
+
+#define GL_INTERLACE_READ_INGR 0x8568
+
+#define GLEW_INGR_interlace_read GLEW_GET_VAR(__GLEW_INGR_interlace_read)
+
+#endif /* GL_INGR_interlace_read */
+
+/* ------------------------ GL_INTEL_parallel_arrays ----------------------- */
+
+#ifndef GL_INTEL_parallel_arrays
+#define GL_INTEL_parallel_arrays 1
+
+#define GL_PARALLEL_ARRAYS_INTEL 0x83F4
+#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5
+#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6
+#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7
+#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8
+
+typedef void (GLAPIENTRY * PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer);
+typedef void (GLAPIENTRY * PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void** pointer);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer);
+typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer);
+
+#define glColorPointervINTEL GLEW_GET_FUN(__glewColorPointervINTEL)
+#define glNormalPointervINTEL GLEW_GET_FUN(__glewNormalPointervINTEL)
+#define glTexCoordPointervINTEL GLEW_GET_FUN(__glewTexCoordPointervINTEL)
+#define glVertexPointervINTEL GLEW_GET_FUN(__glewVertexPointervINTEL)
+
+#define GLEW_INTEL_parallel_arrays GLEW_GET_VAR(__GLEW_INTEL_parallel_arrays)
+
+#endif /* GL_INTEL_parallel_arrays */
+
+/* ------------------------ GL_INTEL_texture_scissor ----------------------- */
+
+#ifndef GL_INTEL_texture_scissor
+#define GL_INTEL_texture_scissor 1
+
+typedef void (GLAPIENTRY * PFNGLTEXSCISSORFUNCINTELPROC) (GLenum target, GLenum lfunc, GLenum hfunc);
+typedef void (GLAPIENTRY * PFNGLTEXSCISSORINTELPROC) (GLenum target, GLclampf tlow, GLclampf thigh);
+
+#define glTexScissorFuncINTEL GLEW_GET_FUN(__glewTexScissorFuncINTEL)
+#define glTexScissorINTEL GLEW_GET_FUN(__glewTexScissorINTEL)
+
+#define GLEW_INTEL_texture_scissor GLEW_GET_VAR(__GLEW_INTEL_texture_scissor)
+
+#endif /* GL_INTEL_texture_scissor */
+
+/* -------------------------- GL_KTX_buffer_region ------------------------- */
+
+#ifndef GL_KTX_buffer_region
+#define GL_KTX_buffer_region 1
+
+#define GL_KTX_FRONT_REGION 0x0
+#define GL_KTX_BACK_REGION 0x1
+#define GL_KTX_Z_REGION 0x2
+#define GL_KTX_STENCIL_REGION 0x3
+
+typedef GLuint (GLAPIENTRY * PFNGLBUFFERREGIONENABLEDPROC) (void);
+typedef void (GLAPIENTRY * PFNGLDELETEBUFFERREGIONPROC) (GLenum region);
+typedef void (GLAPIENTRY * PFNGLDRAWBUFFERREGIONPROC) (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height, GLint xDest, GLint yDest);
+typedef GLuint (GLAPIENTRY * PFNGLNEWBUFFERREGIONPROC) (GLenum region);
+typedef void (GLAPIENTRY * PFNGLREADBUFFERREGIONPROC) (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height);
+
+#define glBufferRegionEnabled GLEW_GET_FUN(__glewBufferRegionEnabled)
+#define glDeleteBufferRegion GLEW_GET_FUN(__glewDeleteBufferRegion)
+#define glDrawBufferRegion GLEW_GET_FUN(__glewDrawBufferRegion)
+#define glNewBufferRegion GLEW_GET_FUN(__glewNewBufferRegion)
+#define glReadBufferRegion GLEW_GET_FUN(__glewReadBufferRegion)
+
+#define GLEW_KTX_buffer_region GLEW_GET_VAR(__GLEW_KTX_buffer_region)
+
+#endif /* GL_KTX_buffer_region */
+
+/* ------------------------- GL_MESAX_texture_stack ------------------------ */
+
+#ifndef GL_MESAX_texture_stack
+#define GL_MESAX_texture_stack 1
+
+#define GL_TEXTURE_1D_STACK_MESAX 0x8759
+#define GL_TEXTURE_2D_STACK_MESAX 0x875A
+#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B
+#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C
+#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D
+#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E
+
+#define GLEW_MESAX_texture_stack GLEW_GET_VAR(__GLEW_MESAX_texture_stack)
+
+#endif /* GL_MESAX_texture_stack */
+
+/* -------------------------- GL_MESA_pack_invert -------------------------- */
+
+#ifndef GL_MESA_pack_invert
+#define GL_MESA_pack_invert 1
+
+#define GL_PACK_INVERT_MESA 0x8758
+
+#define GLEW_MESA_pack_invert GLEW_GET_VAR(__GLEW_MESA_pack_invert)
+
+#endif /* GL_MESA_pack_invert */
+
+/* ------------------------- GL_MESA_resize_buffers ------------------------ */
+
+#ifndef GL_MESA_resize_buffers
+#define GL_MESA_resize_buffers 1
+
+typedef void (GLAPIENTRY * PFNGLRESIZEBUFFERSMESAPROC) (void);
+
+#define glResizeBuffersMESA GLEW_GET_FUN(__glewResizeBuffersMESA)
+
+#define GLEW_MESA_resize_buffers GLEW_GET_VAR(__GLEW_MESA_resize_buffers)
+
+#endif /* GL_MESA_resize_buffers */
+
+/* --------------------------- GL_MESA_window_pos -------------------------- */
+
+#ifndef GL_MESA_window_pos
+#define GL_MESA_window_pos 1
+
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVMESAPROC) (const GLint* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVMESAPROC) (const GLshort* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVMESAPROC) (const GLint* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVMESAPROC) (const GLshort* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4IVMESAPROC) (const GLint* p);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort* p);
+
+#define glWindowPos2dMESA GLEW_GET_FUN(__glewWindowPos2dMESA)
+#define glWindowPos2dvMESA GLEW_GET_FUN(__glewWindowPos2dvMESA)
+#define glWindowPos2fMESA GLEW_GET_FUN(__glewWindowPos2fMESA)
+#define glWindowPos2fvMESA GLEW_GET_FUN(__glewWindowPos2fvMESA)
+#define glWindowPos2iMESA GLEW_GET_FUN(__glewWindowPos2iMESA)
+#define glWindowPos2ivMESA GLEW_GET_FUN(__glewWindowPos2ivMESA)
+#define glWindowPos2sMESA GLEW_GET_FUN(__glewWindowPos2sMESA)
+#define glWindowPos2svMESA GLEW_GET_FUN(__glewWindowPos2svMESA)
+#define glWindowPos3dMESA GLEW_GET_FUN(__glewWindowPos3dMESA)
+#define glWindowPos3dvMESA GLEW_GET_FUN(__glewWindowPos3dvMESA)
+#define glWindowPos3fMESA GLEW_GET_FUN(__glewWindowPos3fMESA)
+#define glWindowPos3fvMESA GLEW_GET_FUN(__glewWindowPos3fvMESA)
+#define glWindowPos3iMESA GLEW_GET_FUN(__glewWindowPos3iMESA)
+#define glWindowPos3ivMESA GLEW_GET_FUN(__glewWindowPos3ivMESA)
+#define glWindowPos3sMESA GLEW_GET_FUN(__glewWindowPos3sMESA)
+#define glWindowPos3svMESA GLEW_GET_FUN(__glewWindowPos3svMESA)
+#define glWindowPos4dMESA GLEW_GET_FUN(__glewWindowPos4dMESA)
+#define glWindowPos4dvMESA GLEW_GET_FUN(__glewWindowPos4dvMESA)
+#define glWindowPos4fMESA GLEW_GET_FUN(__glewWindowPos4fMESA)
+#define glWindowPos4fvMESA GLEW_GET_FUN(__glewWindowPos4fvMESA)
+#define glWindowPos4iMESA GLEW_GET_FUN(__glewWindowPos4iMESA)
+#define glWindowPos4ivMESA GLEW_GET_FUN(__glewWindowPos4ivMESA)
+#define glWindowPos4sMESA GLEW_GET_FUN(__glewWindowPos4sMESA)
+#define glWindowPos4svMESA GLEW_GET_FUN(__glewWindowPos4svMESA)
+
+#define GLEW_MESA_window_pos GLEW_GET_VAR(__GLEW_MESA_window_pos)
+
+#endif /* GL_MESA_window_pos */
+
+/* ------------------------- GL_MESA_ycbcr_texture ------------------------- */
+
+#ifndef GL_MESA_ycbcr_texture
+#define GL_MESA_ycbcr_texture 1
+
+#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB
+#define GL_YCBCR_MESA 0x8757
+
+#define GLEW_MESA_ycbcr_texture GLEW_GET_VAR(__GLEW_MESA_ycbcr_texture)
+
+#endif /* GL_MESA_ycbcr_texture */
+
+/* ------------------------- GL_NVX_gpu_memory_info ------------------------ */
+
+#ifndef GL_NVX_gpu_memory_info
+#define GL_NVX_gpu_memory_info 1
+
+#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047
+#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048
+#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049
+#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A
+#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B
+
+#define GLEW_NVX_gpu_memory_info GLEW_GET_VAR(__GLEW_NVX_gpu_memory_info)
+
+#endif /* GL_NVX_gpu_memory_info */
+
+/* --------------------------- GL_NV_blend_square -------------------------- */
+
+#ifndef GL_NV_blend_square
+#define GL_NV_blend_square 1
+
+#define GLEW_NV_blend_square GLEW_GET_VAR(__GLEW_NV_blend_square)
+
+#endif /* GL_NV_blend_square */
+
+/* ------------------------ GL_NV_conditional_render ----------------------- */
+
+#ifndef GL_NV_conditional_render
+#define GL_NV_conditional_render 1
+
+#define GL_QUERY_WAIT_NV 0x8E13
+#define GL_QUERY_NO_WAIT_NV 0x8E14
+#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16
+
+typedef void (GLAPIENTRY * PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode);
+typedef void (GLAPIENTRY * PFNGLENDCONDITIONALRENDERNVPROC) (void);
+
+#define glBeginConditionalRenderNV GLEW_GET_FUN(__glewBeginConditionalRenderNV)
+#define glEndConditionalRenderNV GLEW_GET_FUN(__glewEndConditionalRenderNV)
+
+#define GLEW_NV_conditional_render GLEW_GET_VAR(__GLEW_NV_conditional_render)
+
+#endif /* GL_NV_conditional_render */
+
+/* ----------------------- GL_NV_copy_depth_to_color ----------------------- */
+
+#ifndef GL_NV_copy_depth_to_color
+#define GL_NV_copy_depth_to_color 1
+
+#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E
+#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F
+
+#define GLEW_NV_copy_depth_to_color GLEW_GET_VAR(__GLEW_NV_copy_depth_to_color)
+
+#endif /* GL_NV_copy_depth_to_color */
+
+/* ---------------------------- GL_NV_copy_image --------------------------- */
+
+#ifndef GL_NV_copy_image
+#define GL_NV_copy_image 1
+
+typedef void (GLAPIENTRY * PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+
+#define glCopyImageSubDataNV GLEW_GET_FUN(__glewCopyImageSubDataNV)
+
+#define GLEW_NV_copy_image GLEW_GET_VAR(__GLEW_NV_copy_image)
+
+#endif /* GL_NV_copy_image */
+
+/* ------------------------ GL_NV_depth_buffer_float ----------------------- */
+
+#ifndef GL_NV_depth_buffer_float
+#define GL_NV_depth_buffer_float 1
+
+#define GL_DEPTH_COMPONENT32F_NV 0x8DAB
+#define GL_DEPTH32F_STENCIL8_NV 0x8DAC
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD
+#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF
+
+typedef void (GLAPIENTRY * PFNGLCLEARDEPTHDNVPROC) (GLdouble depth);
+typedef void (GLAPIENTRY * PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax);
+typedef void (GLAPIENTRY * PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar);
+
+#define glClearDepthdNV GLEW_GET_FUN(__glewClearDepthdNV)
+#define glDepthBoundsdNV GLEW_GET_FUN(__glewDepthBoundsdNV)
+#define glDepthRangedNV GLEW_GET_FUN(__glewDepthRangedNV)
+
+#define GLEW_NV_depth_buffer_float GLEW_GET_VAR(__GLEW_NV_depth_buffer_float)
+
+#endif /* GL_NV_depth_buffer_float */
+
+/* --------------------------- GL_NV_depth_clamp --------------------------- */
+
+#ifndef GL_NV_depth_clamp
+#define GL_NV_depth_clamp 1
+
+#define GL_DEPTH_CLAMP_NV 0x864F
+
+#define GLEW_NV_depth_clamp GLEW_GET_VAR(__GLEW_NV_depth_clamp)
+
+#endif /* GL_NV_depth_clamp */
+
+/* ---------------------- GL_NV_depth_range_unclamped ---------------------- */
+
+#ifndef GL_NV_depth_range_unclamped
+#define GL_NV_depth_range_unclamped 1
+
+#define GL_SAMPLE_COUNT_BITS_NV 0x8864
+#define GL_CURRENT_SAMPLE_COUNT_QUERY_NV 0x8865
+#define GL_QUERY_RESULT_NV 0x8866
+#define GL_QUERY_RESULT_AVAILABLE_NV 0x8867
+#define GL_SAMPLE_COUNT_NV 0x8914
+
+#define GLEW_NV_depth_range_unclamped GLEW_GET_VAR(__GLEW_NV_depth_range_unclamped)
+
+#endif /* GL_NV_depth_range_unclamped */
+
+/* ---------------------------- GL_NV_evaluators --------------------------- */
+
+#ifndef GL_NV_evaluators
+#define GL_NV_evaluators 1
+
+#define GL_EVAL_2D_NV 0x86C0
+#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1
+#define GL_MAP_TESSELLATION_NV 0x86C2
+#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3
+#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4
+#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5
+#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6
+#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7
+#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8
+#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9
+#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA
+#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB
+#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC
+#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD
+#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE
+#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF
+#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0
+#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1
+#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2
+#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3
+#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4
+#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5
+#define GL_MAX_MAP_TESSELLATION_NV 0x86D6
+#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7
+
+typedef void (GLAPIENTRY * PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode);
+typedef void (GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void* points);
+typedef void (GLAPIENTRY * PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void* points);
+typedef void (GLAPIENTRY * PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint* params);
+
+#define glEvalMapsNV GLEW_GET_FUN(__glewEvalMapsNV)
+#define glGetMapAttribParameterfvNV GLEW_GET_FUN(__glewGetMapAttribParameterfvNV)
+#define glGetMapAttribParameterivNV GLEW_GET_FUN(__glewGetMapAttribParameterivNV)
+#define glGetMapControlPointsNV GLEW_GET_FUN(__glewGetMapControlPointsNV)
+#define glGetMapParameterfvNV GLEW_GET_FUN(__glewGetMapParameterfvNV)
+#define glGetMapParameterivNV GLEW_GET_FUN(__glewGetMapParameterivNV)
+#define glMapControlPointsNV GLEW_GET_FUN(__glewMapControlPointsNV)
+#define glMapParameterfvNV GLEW_GET_FUN(__glewMapParameterfvNV)
+#define glMapParameterivNV GLEW_GET_FUN(__glewMapParameterivNV)
+
+#define GLEW_NV_evaluators GLEW_GET_VAR(__GLEW_NV_evaluators)
+
+#endif /* GL_NV_evaluators */
+
+/* ----------------------- GL_NV_explicit_multisample ---------------------- */
+
+#ifndef GL_NV_explicit_multisample
+#define GL_NV_explicit_multisample 1
+
+#define GL_SAMPLE_POSITION_NV 0x8E50
+#define GL_SAMPLE_MASK_NV 0x8E51
+#define GL_SAMPLE_MASK_VALUE_NV 0x8E52
+#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53
+#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54
+#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55
+#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56
+#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57
+#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58
+#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59
+
+typedef void (GLAPIENTRY * PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat* val);
+typedef void (GLAPIENTRY * PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask);
+typedef void (GLAPIENTRY * PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer);
+
+#define glGetMultisamplefvNV GLEW_GET_FUN(__glewGetMultisamplefvNV)
+#define glSampleMaskIndexedNV GLEW_GET_FUN(__glewSampleMaskIndexedNV)
+#define glTexRenderbufferNV GLEW_GET_FUN(__glewTexRenderbufferNV)
+
+#define GLEW_NV_explicit_multisample GLEW_GET_VAR(__GLEW_NV_explicit_multisample)
+
+#endif /* GL_NV_explicit_multisample */
+
+/* ------------------------------ GL_NV_fence ------------------------------ */
+
+#ifndef GL_NV_fence
+#define GL_NV_fence 1
+
+#define GL_ALL_COMPLETED_NV 0x84F2
+#define GL_FENCE_STATUS_NV 0x84F3
+#define GL_FENCE_CONDITION_NV 0x84F4
+
+typedef void (GLAPIENTRY * PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint* fences);
+typedef void (GLAPIENTRY * PFNGLFINISHFENCENVPROC) (GLuint fence);
+typedef void (GLAPIENTRY * PFNGLGENFENCESNVPROC) (GLsizei n, GLuint* fences);
+typedef void (GLAPIENTRY * PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISFENCENVPROC) (GLuint fence);
+typedef void (GLAPIENTRY * PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
+typedef GLboolean (GLAPIENTRY * PFNGLTESTFENCENVPROC) (GLuint fence);
+
+#define glDeleteFencesNV GLEW_GET_FUN(__glewDeleteFencesNV)
+#define glFinishFenceNV GLEW_GET_FUN(__glewFinishFenceNV)
+#define glGenFencesNV GLEW_GET_FUN(__glewGenFencesNV)
+#define glGetFenceivNV GLEW_GET_FUN(__glewGetFenceivNV)
+#define glIsFenceNV GLEW_GET_FUN(__glewIsFenceNV)
+#define glSetFenceNV GLEW_GET_FUN(__glewSetFenceNV)
+#define glTestFenceNV GLEW_GET_FUN(__glewTestFenceNV)
+
+#define GLEW_NV_fence GLEW_GET_VAR(__GLEW_NV_fence)
+
+#endif /* GL_NV_fence */
+
+/* --------------------------- GL_NV_float_buffer -------------------------- */
+
+#ifndef GL_NV_float_buffer
+#define GL_NV_float_buffer 1
+
+#define GL_FLOAT_R_NV 0x8880
+#define GL_FLOAT_RG_NV 0x8881
+#define GL_FLOAT_RGB_NV 0x8882
+#define GL_FLOAT_RGBA_NV 0x8883
+#define GL_FLOAT_R16_NV 0x8884
+#define GL_FLOAT_R32_NV 0x8885
+#define GL_FLOAT_RG16_NV 0x8886
+#define GL_FLOAT_RG32_NV 0x8887
+#define GL_FLOAT_RGB16_NV 0x8888
+#define GL_FLOAT_RGB32_NV 0x8889
+#define GL_FLOAT_RGBA16_NV 0x888A
+#define GL_FLOAT_RGBA32_NV 0x888B
+#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C
+#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D
+#define GL_FLOAT_RGBA_MODE_NV 0x888E
+
+#define GLEW_NV_float_buffer GLEW_GET_VAR(__GLEW_NV_float_buffer)
+
+#endif /* GL_NV_float_buffer */
+
+/* --------------------------- GL_NV_fog_distance -------------------------- */
+
+#ifndef GL_NV_fog_distance
+#define GL_NV_fog_distance 1
+
+#define GL_FOG_DISTANCE_MODE_NV 0x855A
+#define GL_EYE_RADIAL_NV 0x855B
+#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C
+
+#define GLEW_NV_fog_distance GLEW_GET_VAR(__GLEW_NV_fog_distance)
+
+#endif /* GL_NV_fog_distance */
+
+/* ------------------------- GL_NV_fragment_program ------------------------ */
+
+#ifndef GL_NV_fragment_program
+#define GL_NV_fragment_program 1
+
+#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868
+#define GL_FRAGMENT_PROGRAM_NV 0x8870
+#define GL_MAX_TEXTURE_COORDS_NV 0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872
+#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873
+#define GL_PROGRAM_ERROR_STRING_NV 0x8874
+
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLdouble *params);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLfloat *params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, const GLdouble v[]);
+typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, const GLfloat v[]);
+
+#define glGetProgramNamedParameterdvNV GLEW_GET_FUN(__glewGetProgramNamedParameterdvNV)
+#define glGetProgramNamedParameterfvNV GLEW_GET_FUN(__glewGetProgramNamedParameterfvNV)
+#define glProgramNamedParameter4dNV GLEW_GET_FUN(__glewProgramNamedParameter4dNV)
+#define glProgramNamedParameter4dvNV GLEW_GET_FUN(__glewProgramNamedParameter4dvNV)
+#define glProgramNamedParameter4fNV GLEW_GET_FUN(__glewProgramNamedParameter4fNV)
+#define glProgramNamedParameter4fvNV GLEW_GET_FUN(__glewProgramNamedParameter4fvNV)
+
+#define GLEW_NV_fragment_program GLEW_GET_VAR(__GLEW_NV_fragment_program)
+
+#endif /* GL_NV_fragment_program */
+
+/* ------------------------ GL_NV_fragment_program2 ------------------------ */
+
+#ifndef GL_NV_fragment_program2
+#define GL_NV_fragment_program2 1
+
+#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4
+#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5
+#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6
+#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7
+#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8
+
+#define GLEW_NV_fragment_program2 GLEW_GET_VAR(__GLEW_NV_fragment_program2)
+
+#endif /* GL_NV_fragment_program2 */
+
+/* ------------------------ GL_NV_fragment_program4 ------------------------ */
+
+#ifndef GL_NV_fragment_program4
+#define GL_NV_fragment_program4 1
+
+#define GLEW_NV_fragment_program4 GLEW_GET_VAR(__GLEW_NV_fragment_program4)
+
+#endif /* GL_NV_fragment_program4 */
+
+/* --------------------- GL_NV_fragment_program_option --------------------- */
+
+#ifndef GL_NV_fragment_program_option
+#define GL_NV_fragment_program_option 1
+
+#define GLEW_NV_fragment_program_option GLEW_GET_VAR(__GLEW_NV_fragment_program_option)
+
+#endif /* GL_NV_fragment_program_option */
+
+/* ----------------- GL_NV_framebuffer_multisample_coverage ---------------- */
+
+#ifndef GL_NV_framebuffer_multisample_coverage
+#define GL_NV_framebuffer_multisample_coverage 1
+
+#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB
+#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10
+#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11
+#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12
+
+typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+
+#define glRenderbufferStorageMultisampleCoverageNV GLEW_GET_FUN(__glewRenderbufferStorageMultisampleCoverageNV)
+
+#define GLEW_NV_framebuffer_multisample_coverage GLEW_GET_VAR(__GLEW_NV_framebuffer_multisample_coverage)
+
+#endif /* GL_NV_framebuffer_multisample_coverage */
+
+/* ------------------------ GL_NV_geometry_program4 ------------------------ */
+
+#ifndef GL_NV_geometry_program4
+#define GL_NV_geometry_program4 1
+
+#define GL_GEOMETRY_PROGRAM_NV 0x8C26
+#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27
+#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28
+
+typedef void (GLAPIENTRY * PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit);
+
+#define glProgramVertexLimitNV GLEW_GET_FUN(__glewProgramVertexLimitNV)
+
+#define GLEW_NV_geometry_program4 GLEW_GET_VAR(__GLEW_NV_geometry_program4)
+
+#endif /* GL_NV_geometry_program4 */
+
+/* ------------------------- GL_NV_geometry_shader4 ------------------------ */
+
+#ifndef GL_NV_geometry_shader4
+#define GL_NV_geometry_shader4 1
+
+#define GLEW_NV_geometry_shader4 GLEW_GET_VAR(__GLEW_NV_geometry_shader4)
+
+#endif /* GL_NV_geometry_shader4 */
+
+/* --------------------------- GL_NV_gpu_program4 -------------------------- */
+
+#ifndef GL_NV_gpu_program4
+#define GL_NV_gpu_program4 1
+
+#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905
+#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906
+#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907
+#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908
+#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909
+#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5
+#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6
+
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+
+#define glProgramEnvParameterI4iNV GLEW_GET_FUN(__glewProgramEnvParameterI4iNV)
+#define glProgramEnvParameterI4ivNV GLEW_GET_FUN(__glewProgramEnvParameterI4ivNV)
+#define glProgramEnvParameterI4uiNV GLEW_GET_FUN(__glewProgramEnvParameterI4uiNV)
+#define glProgramEnvParameterI4uivNV GLEW_GET_FUN(__glewProgramEnvParameterI4uivNV)
+#define glProgramEnvParametersI4ivNV GLEW_GET_FUN(__glewProgramEnvParametersI4ivNV)
+#define glProgramEnvParametersI4uivNV GLEW_GET_FUN(__glewProgramEnvParametersI4uivNV)
+#define glProgramLocalParameterI4iNV GLEW_GET_FUN(__glewProgramLocalParameterI4iNV)
+#define glProgramLocalParameterI4ivNV GLEW_GET_FUN(__glewProgramLocalParameterI4ivNV)
+#define glProgramLocalParameterI4uiNV GLEW_GET_FUN(__glewProgramLocalParameterI4uiNV)
+#define glProgramLocalParameterI4uivNV GLEW_GET_FUN(__glewProgramLocalParameterI4uivNV)
+#define glProgramLocalParametersI4ivNV GLEW_GET_FUN(__glewProgramLocalParametersI4ivNV)
+#define glProgramLocalParametersI4uivNV GLEW_GET_FUN(__glewProgramLocalParametersI4uivNV)
+
+#define GLEW_NV_gpu_program4 GLEW_GET_VAR(__GLEW_NV_gpu_program4)
+
+#endif /* GL_NV_gpu_program4 */
+
+/* --------------------------- GL_NV_gpu_program5 -------------------------- */
+
+#ifndef GL_NV_gpu_program5
+#define GL_NV_gpu_program5 1
+
+#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C
+#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F
+
+#define GLEW_NV_gpu_program5 GLEW_GET_VAR(__GLEW_NV_gpu_program5)
+
+#endif /* GL_NV_gpu_program5 */
+
+/* ------------------------- GL_NV_gpu_program_fp64 ------------------------ */
+
+#ifndef GL_NV_gpu_program_fp64
+#define GL_NV_gpu_program_fp64 1
+
+#define GLEW_NV_gpu_program_fp64 GLEW_GET_VAR(__GLEW_NV_gpu_program_fp64)
+
+#endif /* GL_NV_gpu_program_fp64 */
+
+/* --------------------------- GL_NV_gpu_shader5 --------------------------- */
+
+#ifndef GL_NV_gpu_shader5
+#define GL_NV_gpu_shader5 1
+
+#define GL_INT64_NV 0x140E
+#define GL_UNSIGNED_INT64_NV 0x140F
+#define GL_INT8_NV 0x8FE0
+#define GL_INT8_VEC2_NV 0x8FE1
+#define GL_INT8_VEC3_NV 0x8FE2
+#define GL_INT8_VEC4_NV 0x8FE3
+#define GL_INT16_NV 0x8FE4
+#define GL_INT16_VEC2_NV 0x8FE5
+#define GL_INT16_VEC3_NV 0x8FE6
+#define GL_INT16_VEC4_NV 0x8FE7
+#define GL_INT64_VEC2_NV 0x8FE9
+#define GL_INT64_VEC3_NV 0x8FEA
+#define GL_INT64_VEC4_NV 0x8FEB
+#define GL_UNSIGNED_INT8_NV 0x8FEC
+#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED
+#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE
+#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF
+#define GL_UNSIGNED_INT16_NV 0x8FF0
+#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1
+#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2
+#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3
+#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5
+#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6
+#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7
+#define GL_FLOAT16_NV 0x8FF8
+#define GL_FLOAT16_VEC2_NV 0x8FF9
+#define GL_FLOAT16_VEC3_NV 0x8FFA
+#define GL_FLOAT16_VEC4_NV 0x8FFB
+
+typedef void (GLAPIENTRY * PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT* params);
+typedef void (GLAPIENTRY * PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x);
+typedef void (GLAPIENTRY * PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y);
+typedef void (GLAPIENTRY * PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (GLAPIENTRY * PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (GLAPIENTRY * PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value);
+
+#define glGetUniformi64vNV GLEW_GET_FUN(__glewGetUniformi64vNV)
+#define glGetUniformui64vNV GLEW_GET_FUN(__glewGetUniformui64vNV)
+#define glProgramUniform1i64NV GLEW_GET_FUN(__glewProgramUniform1i64NV)
+#define glProgramUniform1i64vNV GLEW_GET_FUN(__glewProgramUniform1i64vNV)
+#define glProgramUniform1ui64NV GLEW_GET_FUN(__glewProgramUniform1ui64NV)
+#define glProgramUniform1ui64vNV GLEW_GET_FUN(__glewProgramUniform1ui64vNV)
+#define glProgramUniform2i64NV GLEW_GET_FUN(__glewProgramUniform2i64NV)
+#define glProgramUniform2i64vNV GLEW_GET_FUN(__glewProgramUniform2i64vNV)
+#define glProgramUniform2ui64NV GLEW_GET_FUN(__glewProgramUniform2ui64NV)
+#define glProgramUniform2ui64vNV GLEW_GET_FUN(__glewProgramUniform2ui64vNV)
+#define glProgramUniform3i64NV GLEW_GET_FUN(__glewProgramUniform3i64NV)
+#define glProgramUniform3i64vNV GLEW_GET_FUN(__glewProgramUniform3i64vNV)
+#define glProgramUniform3ui64NV GLEW_GET_FUN(__glewProgramUniform3ui64NV)
+#define glProgramUniform3ui64vNV GLEW_GET_FUN(__glewProgramUniform3ui64vNV)
+#define glProgramUniform4i64NV GLEW_GET_FUN(__glewProgramUniform4i64NV)
+#define glProgramUniform4i64vNV GLEW_GET_FUN(__glewProgramUniform4i64vNV)
+#define glProgramUniform4ui64NV GLEW_GET_FUN(__glewProgramUniform4ui64NV)
+#define glProgramUniform4ui64vNV GLEW_GET_FUN(__glewProgramUniform4ui64vNV)
+#define glUniform1i64NV GLEW_GET_FUN(__glewUniform1i64NV)
+#define glUniform1i64vNV GLEW_GET_FUN(__glewUniform1i64vNV)
+#define glUniform1ui64NV GLEW_GET_FUN(__glewUniform1ui64NV)
+#define glUniform1ui64vNV GLEW_GET_FUN(__glewUniform1ui64vNV)
+#define glUniform2i64NV GLEW_GET_FUN(__glewUniform2i64NV)
+#define glUniform2i64vNV GLEW_GET_FUN(__glewUniform2i64vNV)
+#define glUniform2ui64NV GLEW_GET_FUN(__glewUniform2ui64NV)
+#define glUniform2ui64vNV GLEW_GET_FUN(__glewUniform2ui64vNV)
+#define glUniform3i64NV GLEW_GET_FUN(__glewUniform3i64NV)
+#define glUniform3i64vNV GLEW_GET_FUN(__glewUniform3i64vNV)
+#define glUniform3ui64NV GLEW_GET_FUN(__glewUniform3ui64NV)
+#define glUniform3ui64vNV GLEW_GET_FUN(__glewUniform3ui64vNV)
+#define glUniform4i64NV GLEW_GET_FUN(__glewUniform4i64NV)
+#define glUniform4i64vNV GLEW_GET_FUN(__glewUniform4i64vNV)
+#define glUniform4ui64NV GLEW_GET_FUN(__glewUniform4ui64NV)
+#define glUniform4ui64vNV GLEW_GET_FUN(__glewUniform4ui64vNV)
+
+#define GLEW_NV_gpu_shader5 GLEW_GET_VAR(__GLEW_NV_gpu_shader5)
+
+#endif /* GL_NV_gpu_shader5 */
+
+/* ---------------------------- GL_NV_half_float --------------------------- */
+
+#ifndef GL_NV_half_float
+#define GL_NV_half_float 1
+
+#define GL_HALF_FLOAT_NV 0x140B
+
+typedef unsigned short GLhalf;
+
+typedef void (GLAPIENTRY * PFNGLCOLOR3HNVPROC) (GLhalf red, GLhalf green, GLhalf blue);
+typedef void (GLAPIENTRY * PFNGLCOLOR3HVNVPROC) (const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLCOLOR4HNVPROC) (GLhalf red, GLhalf green, GLhalf blue, GLhalf alpha);
+typedef void (GLAPIENTRY * PFNGLCOLOR4HVNVPROC) (const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDHNVPROC) (GLhalf fog);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDHVNVPROC) (const GLhalf* fog);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalf s);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalf s, GLhalf t);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalf s, GLhalf t, GLhalf r);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalf s, GLhalf t, GLhalf r, GLhalf q);
+typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLNORMAL3HNVPROC) (GLhalf nx, GLhalf ny, GLhalf nz);
+typedef void (GLAPIENTRY * PFNGLNORMAL3HVNVPROC) (const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3HNVPROC) (GLhalf red, GLhalf green, GLhalf blue);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD1HNVPROC) (GLhalf s);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD1HVNVPROC) (const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2HNVPROC) (GLhalf s, GLhalf t);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2HVNVPROC) (const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD3HNVPROC) (GLhalf s, GLhalf t, GLhalf r);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD3HVNVPROC) (const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD4HNVPROC) (GLhalf s, GLhalf t, GLhalf r, GLhalf q);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD4HVNVPROC) (const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLVERTEX2HNVPROC) (GLhalf x, GLhalf y);
+typedef void (GLAPIENTRY * PFNGLVERTEX2HVNVPROC) (const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLVERTEX3HNVPROC) (GLhalf x, GLhalf y, GLhalf z);
+typedef void (GLAPIENTRY * PFNGLVERTEX3HVNVPROC) (const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLVERTEX4HNVPROC) (GLhalf x, GLhalf y, GLhalf z, GLhalf w);
+typedef void (GLAPIENTRY * PFNGLVERTEX4HVNVPROC) (const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalf x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalf x, GLhalf y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalf x, GLhalf y, GLhalf z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalf x, GLhalf y, GLhalf z, GLhalf w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTHNVPROC) (GLhalf weight);
+typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalf* weight);
+
+#define glColor3hNV GLEW_GET_FUN(__glewColor3hNV)
+#define glColor3hvNV GLEW_GET_FUN(__glewColor3hvNV)
+#define glColor4hNV GLEW_GET_FUN(__glewColor4hNV)
+#define glColor4hvNV GLEW_GET_FUN(__glewColor4hvNV)
+#define glFogCoordhNV GLEW_GET_FUN(__glewFogCoordhNV)
+#define glFogCoordhvNV GLEW_GET_FUN(__glewFogCoordhvNV)
+#define glMultiTexCoord1hNV GLEW_GET_FUN(__glewMultiTexCoord1hNV)
+#define glMultiTexCoord1hvNV GLEW_GET_FUN(__glewMultiTexCoord1hvNV)
+#define glMultiTexCoord2hNV GLEW_GET_FUN(__glewMultiTexCoord2hNV)
+#define glMultiTexCoord2hvNV GLEW_GET_FUN(__glewMultiTexCoord2hvNV)
+#define glMultiTexCoord3hNV GLEW_GET_FUN(__glewMultiTexCoord3hNV)
+#define glMultiTexCoord3hvNV GLEW_GET_FUN(__glewMultiTexCoord3hvNV)
+#define glMultiTexCoord4hNV GLEW_GET_FUN(__glewMultiTexCoord4hNV)
+#define glMultiTexCoord4hvNV GLEW_GET_FUN(__glewMultiTexCoord4hvNV)
+#define glNormal3hNV GLEW_GET_FUN(__glewNormal3hNV)
+#define glNormal3hvNV GLEW_GET_FUN(__glewNormal3hvNV)
+#define glSecondaryColor3hNV GLEW_GET_FUN(__glewSecondaryColor3hNV)
+#define glSecondaryColor3hvNV GLEW_GET_FUN(__glewSecondaryColor3hvNV)
+#define glTexCoord1hNV GLEW_GET_FUN(__glewTexCoord1hNV)
+#define glTexCoord1hvNV GLEW_GET_FUN(__glewTexCoord1hvNV)
+#define glTexCoord2hNV GLEW_GET_FUN(__glewTexCoord2hNV)
+#define glTexCoord2hvNV GLEW_GET_FUN(__glewTexCoord2hvNV)
+#define glTexCoord3hNV GLEW_GET_FUN(__glewTexCoord3hNV)
+#define glTexCoord3hvNV GLEW_GET_FUN(__glewTexCoord3hvNV)
+#define glTexCoord4hNV GLEW_GET_FUN(__glewTexCoord4hNV)
+#define glTexCoord4hvNV GLEW_GET_FUN(__glewTexCoord4hvNV)
+#define glVertex2hNV GLEW_GET_FUN(__glewVertex2hNV)
+#define glVertex2hvNV GLEW_GET_FUN(__glewVertex2hvNV)
+#define glVertex3hNV GLEW_GET_FUN(__glewVertex3hNV)
+#define glVertex3hvNV GLEW_GET_FUN(__glewVertex3hvNV)
+#define glVertex4hNV GLEW_GET_FUN(__glewVertex4hNV)
+#define glVertex4hvNV GLEW_GET_FUN(__glewVertex4hvNV)
+#define glVertexAttrib1hNV GLEW_GET_FUN(__glewVertexAttrib1hNV)
+#define glVertexAttrib1hvNV GLEW_GET_FUN(__glewVertexAttrib1hvNV)
+#define glVertexAttrib2hNV GLEW_GET_FUN(__glewVertexAttrib2hNV)
+#define glVertexAttrib2hvNV GLEW_GET_FUN(__glewVertexAttrib2hvNV)
+#define glVertexAttrib3hNV GLEW_GET_FUN(__glewVertexAttrib3hNV)
+#define glVertexAttrib3hvNV GLEW_GET_FUN(__glewVertexAttrib3hvNV)
+#define glVertexAttrib4hNV GLEW_GET_FUN(__glewVertexAttrib4hNV)
+#define glVertexAttrib4hvNV GLEW_GET_FUN(__glewVertexAttrib4hvNV)
+#define glVertexAttribs1hvNV GLEW_GET_FUN(__glewVertexAttribs1hvNV)
+#define glVertexAttribs2hvNV GLEW_GET_FUN(__glewVertexAttribs2hvNV)
+#define glVertexAttribs3hvNV GLEW_GET_FUN(__glewVertexAttribs3hvNV)
+#define glVertexAttribs4hvNV GLEW_GET_FUN(__glewVertexAttribs4hvNV)
+#define glVertexWeighthNV GLEW_GET_FUN(__glewVertexWeighthNV)
+#define glVertexWeighthvNV GLEW_GET_FUN(__glewVertexWeighthvNV)
+
+#define GLEW_NV_half_float GLEW_GET_VAR(__GLEW_NV_half_float)
+
+#endif /* GL_NV_half_float */
+
+/* ------------------------ GL_NV_light_max_exponent ----------------------- */
+
+#ifndef GL_NV_light_max_exponent
+#define GL_NV_light_max_exponent 1
+
+#define GL_MAX_SHININESS_NV 0x8504
+#define GL_MAX_SPOT_EXPONENT_NV 0x8505
+
+#define GLEW_NV_light_max_exponent GLEW_GET_VAR(__GLEW_NV_light_max_exponent)
+
+#endif /* GL_NV_light_max_exponent */
+
+/* ----------------------- GL_NV_multisample_coverage ---------------------- */
+
+#ifndef GL_NV_multisample_coverage
+#define GL_NV_multisample_coverage 1
+
+#define GL_COVERAGE_SAMPLES_NV 0x80A9
+#define GL_COLOR_SAMPLES_NV 0x8E20
+
+#define GLEW_NV_multisample_coverage GLEW_GET_VAR(__GLEW_NV_multisample_coverage)
+
+#endif /* GL_NV_multisample_coverage */
+
+/* --------------------- GL_NV_multisample_filter_hint --------------------- */
+
+#ifndef GL_NV_multisample_filter_hint
+#define GL_NV_multisample_filter_hint 1
+
+#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534
+
+#define GLEW_NV_multisample_filter_hint GLEW_GET_VAR(__GLEW_NV_multisample_filter_hint)
+
+#endif /* GL_NV_multisample_filter_hint */
+
+/* ------------------------- GL_NV_occlusion_query ------------------------- */
+
+#ifndef GL_NV_occlusion_query
+#define GL_NV_occlusion_query 1
+
+#define GL_PIXEL_COUNTER_BITS_NV 0x8864
+#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865
+#define GL_PIXEL_COUNT_NV 0x8866
+#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867
+
+typedef void (GLAPIENTRY * PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLENDOCCLUSIONQUERYNVPROC) (void);
+typedef void (GLAPIENTRY * PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id);
+
+#define glBeginOcclusionQueryNV GLEW_GET_FUN(__glewBeginOcclusionQueryNV)
+#define glDeleteOcclusionQueriesNV GLEW_GET_FUN(__glewDeleteOcclusionQueriesNV)
+#define glEndOcclusionQueryNV GLEW_GET_FUN(__glewEndOcclusionQueryNV)
+#define glGenOcclusionQueriesNV GLEW_GET_FUN(__glewGenOcclusionQueriesNV)
+#define glGetOcclusionQueryivNV GLEW_GET_FUN(__glewGetOcclusionQueryivNV)
+#define glGetOcclusionQueryuivNV GLEW_GET_FUN(__glewGetOcclusionQueryuivNV)
+#define glIsOcclusionQueryNV GLEW_GET_FUN(__glewIsOcclusionQueryNV)
+
+#define GLEW_NV_occlusion_query GLEW_GET_VAR(__GLEW_NV_occlusion_query)
+
+#endif /* GL_NV_occlusion_query */
+
+/* ----------------------- GL_NV_packed_depth_stencil ---------------------- */
+
+#ifndef GL_NV_packed_depth_stencil
+#define GL_NV_packed_depth_stencil 1
+
+#define GL_DEPTH_STENCIL_NV 0x84F9
+#define GL_UNSIGNED_INT_24_8_NV 0x84FA
+
+#define GLEW_NV_packed_depth_stencil GLEW_GET_VAR(__GLEW_NV_packed_depth_stencil)
+
+#endif /* GL_NV_packed_depth_stencil */
+
+/* --------------------- GL_NV_parameter_buffer_object --------------------- */
+
+#ifndef GL_NV_parameter_buffer_object
+#define GL_NV_parameter_buffer_object 1
+
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1
+#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2
+#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3
+#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4
+
+typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params);
+
+#define glProgramBufferParametersIivNV GLEW_GET_FUN(__glewProgramBufferParametersIivNV)
+#define glProgramBufferParametersIuivNV GLEW_GET_FUN(__glewProgramBufferParametersIuivNV)
+#define glProgramBufferParametersfvNV GLEW_GET_FUN(__glewProgramBufferParametersfvNV)
+
+#define GLEW_NV_parameter_buffer_object GLEW_GET_VAR(__GLEW_NV_parameter_buffer_object)
+
+#endif /* GL_NV_parameter_buffer_object */
+
+/* --------------------- GL_NV_parameter_buffer_object2 -------------------- */
+
+#ifndef GL_NV_parameter_buffer_object2
+#define GL_NV_parameter_buffer_object2 1
+
+#define GLEW_NV_parameter_buffer_object2 GLEW_GET_VAR(__GLEW_NV_parameter_buffer_object2)
+
+#endif /* GL_NV_parameter_buffer_object2 */
+
+/* -------------------------- GL_NV_path_rendering ------------------------- */
+
+#ifndef GL_NV_path_rendering
+#define GL_NV_path_rendering 1
+
+#define GL_CLOSE_PATH_NV 0x00
+#define GL_BOLD_BIT_NV 0x01
+#define GL_GLYPH_WIDTH_BIT_NV 0x01
+#define GL_MOVE_TO_NV 0x02
+#define GL_GLYPH_HEIGHT_BIT_NV 0x02
+#define GL_ITALIC_BIT_NV 0x02
+#define GL_RELATIVE_MOVE_TO_NV 0x03
+#define GL_LINE_TO_NV 0x04
+#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04
+#define GL_RELATIVE_LINE_TO_NV 0x05
+#define GL_HORIZONTAL_LINE_TO_NV 0x06
+#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07
+#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08
+#define GL_VERTICAL_LINE_TO_NV 0x08
+#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09
+#define GL_QUADRATIC_CURVE_TO_NV 0x0A
+#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B
+#define GL_CUBIC_CURVE_TO_NV 0x0C
+#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D
+#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E
+#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F
+#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10
+#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10
+#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11
+#define GL_SMALL_CCW_ARC_TO_NV 0x12
+#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13
+#define GL_SMALL_CW_ARC_TO_NV 0x14
+#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15
+#define GL_LARGE_CCW_ARC_TO_NV 0x16
+#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17
+#define GL_LARGE_CW_ARC_TO_NV 0x18
+#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19
+#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20
+#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40
+#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80
+#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8
+#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA
+#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC
+#define GL_ARC_TO_NV 0xFE
+#define GL_RELATIVE_ARC_TO_NV 0xFF
+#define GL_GLYPH_HAS_KERNING_NV 0x100
+#define GL_PRIMARY_COLOR_NV 0x852C
+#define GL_SECONDARY_COLOR_NV 0x852D
+#define GL_PRIMARY_COLOR 0x8577
+#define GL_PATH_FORMAT_SVG_NV 0x9070
+#define GL_PATH_FORMAT_PS_NV 0x9071
+#define GL_STANDARD_FONT_NAME_NV 0x9072
+#define GL_SYSTEM_FONT_NAME_NV 0x9073
+#define GL_FILE_NAME_NV 0x9074
+#define GL_PATH_STROKE_WIDTH_NV 0x9075
+#define GL_PATH_END_CAPS_NV 0x9076
+#define GL_PATH_INITIAL_END_CAP_NV 0x9077
+#define GL_PATH_TERMINAL_END_CAP_NV 0x9078
+#define GL_PATH_JOIN_STYLE_NV 0x9079
+#define GL_PATH_MITER_LIMIT_NV 0x907A
+#define GL_PATH_DASH_CAPS_NV 0x907B
+#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C
+#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D
+#define GL_PATH_DASH_OFFSET_NV 0x907E
+#define GL_PATH_CLIENT_LENGTH_NV 0x907F
+#define GL_PATH_FILL_MODE_NV 0x9080
+#define GL_PATH_FILL_MASK_NV 0x9081
+#define GL_PATH_FILL_COVER_MODE_NV 0x9082
+#define GL_PATH_STROKE_COVER_MODE_NV 0x9083
+#define GL_PATH_STROKE_MASK_NV 0x9084
+#define GL_COUNT_UP_NV 0x9088
+#define GL_COUNT_DOWN_NV 0x9089
+#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A
+#define GL_CONVEX_HULL_NV 0x908B
+#define GL_BOUNDING_BOX_NV 0x908D
+#define GL_TRANSLATE_X_NV 0x908E
+#define GL_TRANSLATE_Y_NV 0x908F
+#define GL_TRANSLATE_2D_NV 0x9090
+#define GL_TRANSLATE_3D_NV 0x9091
+#define GL_AFFINE_2D_NV 0x9092
+#define GL_AFFINE_3D_NV 0x9094
+#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096
+#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098
+#define GL_UTF8_NV 0x909A
+#define GL_UTF16_NV 0x909B
+#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C
+#define GL_PATH_COMMAND_COUNT_NV 0x909D
+#define GL_PATH_COORD_COUNT_NV 0x909E
+#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F
+#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0
+#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1
+#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2
+#define GL_SQUARE_NV 0x90A3
+#define GL_ROUND_NV 0x90A4
+#define GL_TRIANGULAR_NV 0x90A5
+#define GL_BEVEL_NV 0x90A6
+#define GL_MITER_REVERT_NV 0x90A7
+#define GL_MITER_TRUNCATE_NV 0x90A8
+#define GL_SKIP_MISSING_GLYPH_NV 0x90A9
+#define GL_USE_MISSING_GLYPH_NV 0x90AA
+#define GL_PATH_ERROR_POSITION_NV 0x90AB
+#define GL_PATH_FOG_GEN_MODE_NV 0x90AC
+#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD
+#define GL_ADJACENT_PAIRS_NV 0x90AE
+#define GL_FIRST_TO_REST_NV 0x90AF
+#define GL_PATH_GEN_MODE_NV 0x90B0
+#define GL_PATH_GEN_COEFF_NV 0x90B1
+#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2
+#define GL_PATH_GEN_COMPONENTS_NV 0x90B3
+#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4
+#define GL_MOVE_TO_RESETS_NV 0x90B5
+#define GL_MOVE_TO_CONTINUES_NV 0x90B6
+#define GL_PATH_STENCIL_FUNC_NV 0x90B7
+#define GL_PATH_STENCIL_REF_NV 0x90B8
+#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9
+#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD
+#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE
+#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF
+#define GL_FONT_X_MIN_BOUNDS_NV 0x00010000
+#define GL_FONT_Y_MIN_BOUNDS_NV 0x00020000
+#define GL_FONT_X_MAX_BOUNDS_NV 0x00040000
+#define GL_FONT_Y_MAX_BOUNDS_NV 0x00080000
+#define GL_FONT_UNITS_PER_EM_NV 0x00100000
+#define GL_FONT_ASCENDER_NV 0x00200000
+#define GL_FONT_DESCENDER_NV 0x00400000
+#define GL_FONT_HEIGHT_NV 0x00800000
+#define GL_FONT_MAX_ADVANCE_WIDTH_NV 0x01000000
+#define GL_FONT_MAX_ADVANCE_HEIGHT_NV 0x02000000
+#define GL_FONT_UNDERLINE_POSITION_NV 0x04000000
+#define GL_FONT_UNDERLINE_THICKNESS_NV 0x08000000
+#define GL_FONT_HAS_KERNING_NV 0x10000000
+
+typedef void (GLAPIENTRY * PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath);
+typedef void (GLAPIENTRY * PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (GLAPIENTRY * PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (GLAPIENTRY * PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (GLAPIENTRY * PFNGLCOVERSTROKEPATHNVPROC) (GLuint name, GLenum coverMode);
+typedef void (GLAPIENTRY * PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range);
+typedef GLuint (GLAPIENTRY * PFNGLGENPATHSNVPROC) (GLsizei range);
+typedef void (GLAPIENTRY * PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint* value);
+typedef void (GLAPIENTRY * PFNGLGETPATHCOMMANDSNVPROC) (GLuint name, GLubyte* commands);
+typedef void (GLAPIENTRY * PFNGLGETPATHCOORDSNVPROC) (GLuint name, GLfloat* coords);
+typedef void (GLAPIENTRY * PFNGLGETPATHDASHARRAYNVPROC) (GLuint name, GLfloat* dashArray);
+typedef GLfloat (GLAPIENTRY * PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments);
+typedef void (GLAPIENTRY * PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint fistPathName, GLsizei numPaths, GLsizei stride, GLfloat* metrics);
+typedef void (GLAPIENTRY * PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+typedef void (GLAPIENTRY * PFNGLGETPATHPARAMETERFVNVPROC) (GLuint name, GLenum param, GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLGETPATHPARAMETERIVNVPROC) (GLuint name, GLenum param, GLint* value);
+typedef void (GLAPIENTRY * PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+typedef void (GLAPIENTRY * PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint* value);
+typedef void (GLAPIENTRY * PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+typedef GLboolean (GLAPIENTRY * PFNGLISPATHNVPROC) (GLuint path);
+typedef GLboolean (GLAPIENTRY * PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+typedef GLboolean (GLAPIENTRY * PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat* coeffs);
+typedef void (GLAPIENTRY * PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const GLvoid*coords);
+typedef void (GLAPIENTRY * PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void* coords);
+typedef void (GLAPIENTRY * PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum zfunc);
+typedef void (GLAPIENTRY * PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat* dashArray);
+typedef void (GLAPIENTRY * PFNGLPATHFOGGENNVPROC) (GLenum genMode);
+typedef void (GLAPIENTRY * PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (GLAPIENTRY * PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid*charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (GLAPIENTRY * PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value);
+typedef void (GLAPIENTRY * PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat* value);
+typedef void (GLAPIENTRY * PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value);
+typedef void (GLAPIENTRY * PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint* value);
+typedef void (GLAPIENTRY * PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLint units);
+typedef void (GLAPIENTRY * PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (GLAPIENTRY * PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void* pathString);
+typedef void (GLAPIENTRY * PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const GLvoid*coords);
+typedef void (GLAPIENTRY * PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void* coords);
+typedef void (GLAPIENTRY * PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat* coeffs);
+typedef GLboolean (GLAPIENTRY * PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat* x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+typedef void (GLAPIENTRY * PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (GLAPIENTRY * PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask);
+typedef void (GLAPIENTRY * PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (GLAPIENTRY * PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask);
+typedef void (GLAPIENTRY * PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat* transformValues);
+typedef void (GLAPIENTRY * PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint paths[], const GLfloat weights[]);
+
+#define glCopyPathNV GLEW_GET_FUN(__glewCopyPathNV)
+#define glCoverFillPathInstancedNV GLEW_GET_FUN(__glewCoverFillPathInstancedNV)
+#define glCoverFillPathNV GLEW_GET_FUN(__glewCoverFillPathNV)
+#define glCoverStrokePathInstancedNV GLEW_GET_FUN(__glewCoverStrokePathInstancedNV)
+#define glCoverStrokePathNV GLEW_GET_FUN(__glewCoverStrokePathNV)
+#define glDeletePathsNV GLEW_GET_FUN(__glewDeletePathsNV)
+#define glGenPathsNV GLEW_GET_FUN(__glewGenPathsNV)
+#define glGetPathColorGenfvNV GLEW_GET_FUN(__glewGetPathColorGenfvNV)
+#define glGetPathColorGenivNV GLEW_GET_FUN(__glewGetPathColorGenivNV)
+#define glGetPathCommandsNV GLEW_GET_FUN(__glewGetPathCommandsNV)
+#define glGetPathCoordsNV GLEW_GET_FUN(__glewGetPathCoordsNV)
+#define glGetPathDashArrayNV GLEW_GET_FUN(__glewGetPathDashArrayNV)
+#define glGetPathLengthNV GLEW_GET_FUN(__glewGetPathLengthNV)
+#define glGetPathMetricRangeNV GLEW_GET_FUN(__glewGetPathMetricRangeNV)
+#define glGetPathMetricsNV GLEW_GET_FUN(__glewGetPathMetricsNV)
+#define glGetPathParameterfvNV GLEW_GET_FUN(__glewGetPathParameterfvNV)
+#define glGetPathParameterivNV GLEW_GET_FUN(__glewGetPathParameterivNV)
+#define glGetPathSpacingNV GLEW_GET_FUN(__glewGetPathSpacingNV)
+#define glGetPathTexGenfvNV GLEW_GET_FUN(__glewGetPathTexGenfvNV)
+#define glGetPathTexGenivNV GLEW_GET_FUN(__glewGetPathTexGenivNV)
+#define glInterpolatePathsNV GLEW_GET_FUN(__glewInterpolatePathsNV)
+#define glIsPathNV GLEW_GET_FUN(__glewIsPathNV)
+#define glIsPointInFillPathNV GLEW_GET_FUN(__glewIsPointInFillPathNV)
+#define glIsPointInStrokePathNV GLEW_GET_FUN(__glewIsPointInStrokePathNV)
+#define glPathColorGenNV GLEW_GET_FUN(__glewPathColorGenNV)
+#define glPathCommandsNV GLEW_GET_FUN(__glewPathCommandsNV)
+#define glPathCoordsNV GLEW_GET_FUN(__glewPathCoordsNV)
+#define glPathCoverDepthFuncNV GLEW_GET_FUN(__glewPathCoverDepthFuncNV)
+#define glPathDashArrayNV GLEW_GET_FUN(__glewPathDashArrayNV)
+#define glPathFogGenNV GLEW_GET_FUN(__glewPathFogGenNV)
+#define glPathGlyphRangeNV GLEW_GET_FUN(__glewPathGlyphRangeNV)
+#define glPathGlyphsNV GLEW_GET_FUN(__glewPathGlyphsNV)
+#define glPathParameterfNV GLEW_GET_FUN(__glewPathParameterfNV)
+#define glPathParameterfvNV GLEW_GET_FUN(__glewPathParameterfvNV)
+#define glPathParameteriNV GLEW_GET_FUN(__glewPathParameteriNV)
+#define glPathParameterivNV GLEW_GET_FUN(__glewPathParameterivNV)
+#define glPathStencilDepthOffsetNV GLEW_GET_FUN(__glewPathStencilDepthOffsetNV)
+#define glPathStencilFuncNV GLEW_GET_FUN(__glewPathStencilFuncNV)
+#define glPathStringNV GLEW_GET_FUN(__glewPathStringNV)
+#define glPathSubCommandsNV GLEW_GET_FUN(__glewPathSubCommandsNV)
+#define glPathSubCoordsNV GLEW_GET_FUN(__glewPathSubCoordsNV)
+#define glPathTexGenNV GLEW_GET_FUN(__glewPathTexGenNV)
+#define glPointAlongPathNV GLEW_GET_FUN(__glewPointAlongPathNV)
+#define glStencilFillPathInstancedNV GLEW_GET_FUN(__glewStencilFillPathInstancedNV)
+#define glStencilFillPathNV GLEW_GET_FUN(__glewStencilFillPathNV)
+#define glStencilStrokePathInstancedNV GLEW_GET_FUN(__glewStencilStrokePathInstancedNV)
+#define glStencilStrokePathNV GLEW_GET_FUN(__glewStencilStrokePathNV)
+#define glTransformPathNV GLEW_GET_FUN(__glewTransformPathNV)
+#define glWeightPathsNV GLEW_GET_FUN(__glewWeightPathsNV)
+
+#define GLEW_NV_path_rendering GLEW_GET_VAR(__GLEW_NV_path_rendering)
+
+#endif /* GL_NV_path_rendering */
+
+/* ------------------------- GL_NV_pixel_data_range ------------------------ */
+
+#ifndef GL_NV_pixel_data_range
+#define GL_NV_pixel_data_range 1
+
+#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878
+#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879
+#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A
+#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B
+#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C
+#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D
+
+typedef void (GLAPIENTRY * PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, void* pointer);
+
+#define glFlushPixelDataRangeNV GLEW_GET_FUN(__glewFlushPixelDataRangeNV)
+#define glPixelDataRangeNV GLEW_GET_FUN(__glewPixelDataRangeNV)
+
+#define GLEW_NV_pixel_data_range GLEW_GET_VAR(__GLEW_NV_pixel_data_range)
+
+#endif /* GL_NV_pixel_data_range */
+
+/* --------------------------- GL_NV_point_sprite -------------------------- */
+
+#ifndef GL_NV_point_sprite
+#define GL_NV_point_sprite 1
+
+#define GL_POINT_SPRITE_NV 0x8861
+#define GL_COORD_REPLACE_NV 0x8862
+#define GL_POINT_SPRITE_R_MODE_NV 0x8863
+
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint* params);
+
+#define glPointParameteriNV GLEW_GET_FUN(__glewPointParameteriNV)
+#define glPointParameterivNV GLEW_GET_FUN(__glewPointParameterivNV)
+
+#define GLEW_NV_point_sprite GLEW_GET_VAR(__GLEW_NV_point_sprite)
+
+#endif /* GL_NV_point_sprite */
+
+/* -------------------------- GL_NV_present_video -------------------------- */
+
+#ifndef GL_NV_present_video
+#define GL_NV_present_video 1
+
+#define GL_FRAME_NV 0x8E26
+#define GL_FIELDS_NV 0x8E27
+#define GL_CURRENT_TIME_NV 0x8E28
+#define GL_NUM_FILL_STREAMS_NV 0x8E29
+#define GL_PRESENT_TIME_NV 0x8E2A
+#define GL_PRESENT_DURATION_NV 0x8E2B
+
+typedef void (GLAPIENTRY * PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT* params);
+typedef void (GLAPIENTRY * PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT* params);
+typedef void (GLAPIENTRY * PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint* params);
+typedef void (GLAPIENTRY * PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3);
+typedef void (GLAPIENTRY * PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1);
+
+#define glGetVideoi64vNV GLEW_GET_FUN(__glewGetVideoi64vNV)
+#define glGetVideoivNV GLEW_GET_FUN(__glewGetVideoivNV)
+#define glGetVideoui64vNV GLEW_GET_FUN(__glewGetVideoui64vNV)
+#define glGetVideouivNV GLEW_GET_FUN(__glewGetVideouivNV)
+#define glPresentFrameDualFillNV GLEW_GET_FUN(__glewPresentFrameDualFillNV)
+#define glPresentFrameKeyedNV GLEW_GET_FUN(__glewPresentFrameKeyedNV)
+
+#define GLEW_NV_present_video GLEW_GET_VAR(__GLEW_NV_present_video)
+
+#endif /* GL_NV_present_video */
+
+/* ------------------------ GL_NV_primitive_restart ------------------------ */
+
+#ifndef GL_NV_primitive_restart
+#define GL_NV_primitive_restart 1
+
+#define GL_PRIMITIVE_RESTART_NV 0x8558
+#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559
+
+typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index);
+typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTNVPROC) (void);
+
+#define glPrimitiveRestartIndexNV GLEW_GET_FUN(__glewPrimitiveRestartIndexNV)
+#define glPrimitiveRestartNV GLEW_GET_FUN(__glewPrimitiveRestartNV)
+
+#define GLEW_NV_primitive_restart GLEW_GET_VAR(__GLEW_NV_primitive_restart)
+
+#endif /* GL_NV_primitive_restart */
+
+/* ------------------------ GL_NV_register_combiners ----------------------- */
+
+#ifndef GL_NV_register_combiners
+#define GL_NV_register_combiners 1
+
+#define GL_REGISTER_COMBINERS_NV 0x8522
+#define GL_VARIABLE_A_NV 0x8523
+#define GL_VARIABLE_B_NV 0x8524
+#define GL_VARIABLE_C_NV 0x8525
+#define GL_VARIABLE_D_NV 0x8526
+#define GL_VARIABLE_E_NV 0x8527
+#define GL_VARIABLE_F_NV 0x8528
+#define GL_VARIABLE_G_NV 0x8529
+#define GL_CONSTANT_COLOR0_NV 0x852A
+#define GL_CONSTANT_COLOR1_NV 0x852B
+#define GL_PRIMARY_COLOR_NV 0x852C
+#define GL_SECONDARY_COLOR_NV 0x852D
+#define GL_SPARE0_NV 0x852E
+#define GL_SPARE1_NV 0x852F
+#define GL_DISCARD_NV 0x8530
+#define GL_E_TIMES_F_NV 0x8531
+#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
+#define GL_UNSIGNED_IDENTITY_NV 0x8536
+#define GL_UNSIGNED_INVERT_NV 0x8537
+#define GL_EXPAND_NORMAL_NV 0x8538
+#define GL_EXPAND_NEGATE_NV 0x8539
+#define GL_HALF_BIAS_NORMAL_NV 0x853A
+#define GL_HALF_BIAS_NEGATE_NV 0x853B
+#define GL_SIGNED_IDENTITY_NV 0x853C
+#define GL_SIGNED_NEGATE_NV 0x853D
+#define GL_SCALE_BY_TWO_NV 0x853E
+#define GL_SCALE_BY_FOUR_NV 0x853F
+#define GL_SCALE_BY_ONE_HALF_NV 0x8540
+#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541
+#define GL_COMBINER_INPUT_NV 0x8542
+#define GL_COMBINER_MAPPING_NV 0x8543
+#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544
+#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545
+#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546
+#define GL_COMBINER_MUX_SUM_NV 0x8547
+#define GL_COMBINER_SCALE_NV 0x8548
+#define GL_COMBINER_BIAS_NV 0x8549
+#define GL_COMBINER_AB_OUTPUT_NV 0x854A
+#define GL_COMBINER_CD_OUTPUT_NV 0x854B
+#define GL_COMBINER_SUM_OUTPUT_NV 0x854C
+#define GL_MAX_GENERAL_COMBINERS_NV 0x854D
+#define GL_NUM_GENERAL_COMBINERS_NV 0x854E
+#define GL_COLOR_SUM_CLAMP_NV 0x854F
+#define GL_COMBINER0_NV 0x8550
+#define GL_COMBINER1_NV 0x8551
+#define GL_COMBINER2_NV 0x8552
+#define GL_COMBINER3_NV 0x8553
+#define GL_COMBINER4_NV 0x8554
+#define GL_COMBINER5_NV 0x8555
+#define GL_COMBINER6_NV 0x8556
+#define GL_COMBINER7_NV 0x8557
+
+typedef void (GLAPIENTRY * PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (GLAPIENTRY * PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (GLAPIENTRY * PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint* params);
+
+#define glCombinerInputNV GLEW_GET_FUN(__glewCombinerInputNV)
+#define glCombinerOutputNV GLEW_GET_FUN(__glewCombinerOutputNV)
+#define glCombinerParameterfNV GLEW_GET_FUN(__glewCombinerParameterfNV)
+#define glCombinerParameterfvNV GLEW_GET_FUN(__glewCombinerParameterfvNV)
+#define glCombinerParameteriNV GLEW_GET_FUN(__glewCombinerParameteriNV)
+#define glCombinerParameterivNV GLEW_GET_FUN(__glewCombinerParameterivNV)
+#define glFinalCombinerInputNV GLEW_GET_FUN(__glewFinalCombinerInputNV)
+#define glGetCombinerInputParameterfvNV GLEW_GET_FUN(__glewGetCombinerInputParameterfvNV)
+#define glGetCombinerInputParameterivNV GLEW_GET_FUN(__glewGetCombinerInputParameterivNV)
+#define glGetCombinerOutputParameterfvNV GLEW_GET_FUN(__glewGetCombinerOutputParameterfvNV)
+#define glGetCombinerOutputParameterivNV GLEW_GET_FUN(__glewGetCombinerOutputParameterivNV)
+#define glGetFinalCombinerInputParameterfvNV GLEW_GET_FUN(__glewGetFinalCombinerInputParameterfvNV)
+#define glGetFinalCombinerInputParameterivNV GLEW_GET_FUN(__glewGetFinalCombinerInputParameterivNV)
+
+#define GLEW_NV_register_combiners GLEW_GET_VAR(__GLEW_NV_register_combiners)
+
+#endif /* GL_NV_register_combiners */
+
+/* ----------------------- GL_NV_register_combiners2 ----------------------- */
+
+#ifndef GL_NV_register_combiners2
+#define GL_NV_register_combiners2 1
+
+#define GL_PER_STAGE_CONSTANTS_NV 0x8535
+
+typedef void (GLAPIENTRY * PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat* params);
+
+#define glCombinerStageParameterfvNV GLEW_GET_FUN(__glewCombinerStageParameterfvNV)
+#define glGetCombinerStageParameterfvNV GLEW_GET_FUN(__glewGetCombinerStageParameterfvNV)
+
+#define GLEW_NV_register_combiners2 GLEW_GET_VAR(__GLEW_NV_register_combiners2)
+
+#endif /* GL_NV_register_combiners2 */
+
+/* ------------------------ GL_NV_shader_buffer_load ----------------------- */
+
+#ifndef GL_NV_shader_buffer_load
+#define GL_NV_shader_buffer_load 1
+
+#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D
+#define GL_GPU_ADDRESS_NV 0x8F34
+#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35
+
+typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT* params);
+typedef void (GLAPIENTRY * PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT* result);
+typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERRESIDENTNVPROC) (GLenum target);
+typedef GLboolean (GLAPIENTRY * PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target);
+typedef void (GLAPIENTRY * PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access);
+typedef void (GLAPIENTRY * PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value);
+typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value);
+typedef void (GLAPIENTRY * PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value);
+
+#define glGetBufferParameterui64vNV GLEW_GET_FUN(__glewGetBufferParameterui64vNV)
+#define glGetIntegerui64vNV GLEW_GET_FUN(__glewGetIntegerui64vNV)
+#define glGetNamedBufferParameterui64vNV GLEW_GET_FUN(__glewGetNamedBufferParameterui64vNV)
+#define glIsBufferResidentNV GLEW_GET_FUN(__glewIsBufferResidentNV)
+#define glIsNamedBufferResidentNV GLEW_GET_FUN(__glewIsNamedBufferResidentNV)
+#define glMakeBufferNonResidentNV GLEW_GET_FUN(__glewMakeBufferNonResidentNV)
+#define glMakeBufferResidentNV GLEW_GET_FUN(__glewMakeBufferResidentNV)
+#define glMakeNamedBufferNonResidentNV GLEW_GET_FUN(__glewMakeNamedBufferNonResidentNV)
+#define glMakeNamedBufferResidentNV GLEW_GET_FUN(__glewMakeNamedBufferResidentNV)
+#define glProgramUniformui64NV GLEW_GET_FUN(__glewProgramUniformui64NV)
+#define glProgramUniformui64vNV GLEW_GET_FUN(__glewProgramUniformui64vNV)
+#define glUniformui64NV GLEW_GET_FUN(__glewUniformui64NV)
+#define glUniformui64vNV GLEW_GET_FUN(__glewUniformui64vNV)
+
+#define GLEW_NV_shader_buffer_load GLEW_GET_VAR(__GLEW_NV_shader_buffer_load)
+
+#endif /* GL_NV_shader_buffer_load */
+
+/* ---------------------- GL_NV_tessellation_program5 ---------------------- */
+
+#ifndef GL_NV_tessellation_program5
+#define GL_NV_tessellation_program5 1
+
+#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8
+#define GL_TESS_CONTROL_PROGRAM_NV 0x891E
+#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F
+#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74
+#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75
+
+#define GLEW_NV_tessellation_program5 GLEW_GET_VAR(__GLEW_NV_tessellation_program5)
+
+#endif /* GL_NV_tessellation_program5 */
+
+/* -------------------------- GL_NV_texgen_emboss -------------------------- */
+
+#ifndef GL_NV_texgen_emboss
+#define GL_NV_texgen_emboss 1
+
+#define GL_EMBOSS_LIGHT_NV 0x855D
+#define GL_EMBOSS_CONSTANT_NV 0x855E
+#define GL_EMBOSS_MAP_NV 0x855F
+
+#define GLEW_NV_texgen_emboss GLEW_GET_VAR(__GLEW_NV_texgen_emboss)
+
+#endif /* GL_NV_texgen_emboss */
+
+/* ------------------------ GL_NV_texgen_reflection ------------------------ */
+
+#ifndef GL_NV_texgen_reflection
+#define GL_NV_texgen_reflection 1
+
+#define GL_NORMAL_MAP_NV 0x8511
+#define GL_REFLECTION_MAP_NV 0x8512
+
+#define GLEW_NV_texgen_reflection GLEW_GET_VAR(__GLEW_NV_texgen_reflection)
+
+#endif /* GL_NV_texgen_reflection */
+
+/* ------------------------- GL_NV_texture_barrier ------------------------- */
+
+#ifndef GL_NV_texture_barrier
+#define GL_NV_texture_barrier 1
+
+typedef void (GLAPIENTRY * PFNGLTEXTUREBARRIERNVPROC) (void);
+
+#define glTextureBarrierNV GLEW_GET_FUN(__glewTextureBarrierNV)
+
+#define GLEW_NV_texture_barrier GLEW_GET_VAR(__GLEW_NV_texture_barrier)
+
+#endif /* GL_NV_texture_barrier */
+
+/* --------------------- GL_NV_texture_compression_vtc --------------------- */
+
+#ifndef GL_NV_texture_compression_vtc
+#define GL_NV_texture_compression_vtc 1
+
+#define GLEW_NV_texture_compression_vtc GLEW_GET_VAR(__GLEW_NV_texture_compression_vtc)
+
+#endif /* GL_NV_texture_compression_vtc */
+
+/* ----------------------- GL_NV_texture_env_combine4 ---------------------- */
+
+#ifndef GL_NV_texture_env_combine4
+#define GL_NV_texture_env_combine4 1
+
+#define GL_COMBINE4_NV 0x8503
+#define GL_SOURCE3_RGB_NV 0x8583
+#define GL_SOURCE3_ALPHA_NV 0x858B
+#define GL_OPERAND3_RGB_NV 0x8593
+#define GL_OPERAND3_ALPHA_NV 0x859B
+
+#define GLEW_NV_texture_env_combine4 GLEW_GET_VAR(__GLEW_NV_texture_env_combine4)
+
+#endif /* GL_NV_texture_env_combine4 */
+
+/* ---------------------- GL_NV_texture_expand_normal ---------------------- */
+
+#ifndef GL_NV_texture_expand_normal
+#define GL_NV_texture_expand_normal 1
+
+#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F
+
+#define GLEW_NV_texture_expand_normal GLEW_GET_VAR(__GLEW_NV_texture_expand_normal)
+
+#endif /* GL_NV_texture_expand_normal */
+
+/* ----------------------- GL_NV_texture_multisample ----------------------- */
+
+#ifndef GL_NV_texture_multisample
+#define GL_NV_texture_multisample 1
+
+#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045
+#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046
+
+typedef void (GLAPIENTRY * PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+
+#define glTexImage2DMultisampleCoverageNV GLEW_GET_FUN(__glewTexImage2DMultisampleCoverageNV)
+#define glTexImage3DMultisampleCoverageNV GLEW_GET_FUN(__glewTexImage3DMultisampleCoverageNV)
+#define glTextureImage2DMultisampleCoverageNV GLEW_GET_FUN(__glewTextureImage2DMultisampleCoverageNV)
+#define glTextureImage2DMultisampleNV GLEW_GET_FUN(__glewTextureImage2DMultisampleNV)
+#define glTextureImage3DMultisampleCoverageNV GLEW_GET_FUN(__glewTextureImage3DMultisampleCoverageNV)
+#define glTextureImage3DMultisampleNV GLEW_GET_FUN(__glewTextureImage3DMultisampleNV)
+
+#define GLEW_NV_texture_multisample GLEW_GET_VAR(__GLEW_NV_texture_multisample)
+
+#endif /* GL_NV_texture_multisample */
+
+/* ------------------------ GL_NV_texture_rectangle ------------------------ */
+
+#ifndef GL_NV_texture_rectangle
+#define GL_NV_texture_rectangle 1
+
+#define GL_TEXTURE_RECTANGLE_NV 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8
+
+#define GLEW_NV_texture_rectangle GLEW_GET_VAR(__GLEW_NV_texture_rectangle)
+
+#endif /* GL_NV_texture_rectangle */
+
+/* -------------------------- GL_NV_texture_shader ------------------------- */
+
+#ifndef GL_NV_texture_shader
+#define GL_NV_texture_shader 1
+
+#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C
+#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D
+#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E
+#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB
+#define GL_DSDT_MAG_INTENSITY_NV 0x86DC
+#define GL_SHADER_CONSISTENT_NV 0x86DD
+#define GL_TEXTURE_SHADER_NV 0x86DE
+#define GL_SHADER_OPERATION_NV 0x86DF
+#define GL_CULL_MODES_NV 0x86E0
+#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1
+#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1
+#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2
+#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2
+#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3
+#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3
+#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4
+#define GL_CONST_EYE_NV 0x86E5
+#define GL_PASS_THROUGH_NV 0x86E6
+#define GL_CULL_FRAGMENT_NV 0x86E7
+#define GL_OFFSET_TEXTURE_2D_NV 0x86E8
+#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9
+#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA
+#define GL_DOT_PRODUCT_NV 0x86EC
+#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED
+#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE
+#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0
+#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1
+#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2
+#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3
+#define GL_HILO_NV 0x86F4
+#define GL_DSDT_NV 0x86F5
+#define GL_DSDT_MAG_NV 0x86F6
+#define GL_DSDT_MAG_VIB_NV 0x86F7
+#define GL_HILO16_NV 0x86F8
+#define GL_SIGNED_HILO_NV 0x86F9
+#define GL_SIGNED_HILO16_NV 0x86FA
+#define GL_SIGNED_RGBA_NV 0x86FB
+#define GL_SIGNED_RGBA8_NV 0x86FC
+#define GL_SIGNED_RGB_NV 0x86FE
+#define GL_SIGNED_RGB8_NV 0x86FF
+#define GL_SIGNED_LUMINANCE_NV 0x8701
+#define GL_SIGNED_LUMINANCE8_NV 0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704
+#define GL_SIGNED_ALPHA_NV 0x8705
+#define GL_SIGNED_ALPHA8_NV 0x8706
+#define GL_SIGNED_INTENSITY_NV 0x8707
+#define GL_SIGNED_INTENSITY8_NV 0x8708
+#define GL_DSDT8_NV 0x8709
+#define GL_DSDT8_MAG8_NV 0x870A
+#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D
+#define GL_HI_SCALE_NV 0x870E
+#define GL_LO_SCALE_NV 0x870F
+#define GL_DS_SCALE_NV 0x8710
+#define GL_DT_SCALE_NV 0x8711
+#define GL_MAGNITUDE_SCALE_NV 0x8712
+#define GL_VIBRANCE_SCALE_NV 0x8713
+#define GL_HI_BIAS_NV 0x8714
+#define GL_LO_BIAS_NV 0x8715
+#define GL_DS_BIAS_NV 0x8716
+#define GL_DT_BIAS_NV 0x8717
+#define GL_MAGNITUDE_BIAS_NV 0x8718
+#define GL_VIBRANCE_BIAS_NV 0x8719
+#define GL_TEXTURE_BORDER_VALUES_NV 0x871A
+#define GL_TEXTURE_HI_SIZE_NV 0x871B
+#define GL_TEXTURE_LO_SIZE_NV 0x871C
+#define GL_TEXTURE_DS_SIZE_NV 0x871D
+#define GL_TEXTURE_DT_SIZE_NV 0x871E
+#define GL_TEXTURE_MAG_SIZE_NV 0x871F
+
+#define GLEW_NV_texture_shader GLEW_GET_VAR(__GLEW_NV_texture_shader)
+
+#endif /* GL_NV_texture_shader */
+
+/* ------------------------- GL_NV_texture_shader2 ------------------------- */
+
+#ifndef GL_NV_texture_shader2
+#define GL_NV_texture_shader2 1
+
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB
+#define GL_DSDT_MAG_INTENSITY_NV 0x86DC
+#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF
+#define GL_HILO_NV 0x86F4
+#define GL_DSDT_NV 0x86F5
+#define GL_DSDT_MAG_NV 0x86F6
+#define GL_DSDT_MAG_VIB_NV 0x86F7
+#define GL_HILO16_NV 0x86F8
+#define GL_SIGNED_HILO_NV 0x86F9
+#define GL_SIGNED_HILO16_NV 0x86FA
+#define GL_SIGNED_RGBA_NV 0x86FB
+#define GL_SIGNED_RGBA8_NV 0x86FC
+#define GL_SIGNED_RGB_NV 0x86FE
+#define GL_SIGNED_RGB8_NV 0x86FF
+#define GL_SIGNED_LUMINANCE_NV 0x8701
+#define GL_SIGNED_LUMINANCE8_NV 0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704
+#define GL_SIGNED_ALPHA_NV 0x8705
+#define GL_SIGNED_ALPHA8_NV 0x8706
+#define GL_SIGNED_INTENSITY_NV 0x8707
+#define GL_SIGNED_INTENSITY8_NV 0x8708
+#define GL_DSDT8_NV 0x8709
+#define GL_DSDT8_MAG8_NV 0x870A
+#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D
+
+#define GLEW_NV_texture_shader2 GLEW_GET_VAR(__GLEW_NV_texture_shader2)
+
+#endif /* GL_NV_texture_shader2 */
+
+/* ------------------------- GL_NV_texture_shader3 ------------------------- */
+
+#ifndef GL_NV_texture_shader3
+#define GL_NV_texture_shader3 1
+
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853
+#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854
+#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857
+#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858
+#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859
+#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A
+#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B
+#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C
+#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D
+#define GL_HILO8_NV 0x885E
+#define GL_SIGNED_HILO8_NV 0x885F
+#define GL_FORCE_BLUE_TO_ONE_NV 0x8860
+
+#define GLEW_NV_texture_shader3 GLEW_GET_VAR(__GLEW_NV_texture_shader3)
+
+#endif /* GL_NV_texture_shader3 */
+
+/* ------------------------ GL_NV_transform_feedback ----------------------- */
+
+#ifndef GL_NV_transform_feedback
+#define GL_NV_transform_feedback 1
+
+#define GL_BACK_PRIMARY_COLOR_NV 0x8C77
+#define GL_BACK_SECONDARY_COLOR_NV 0x8C78
+#define GL_TEXTURE_COORD_NV 0x8C79
+#define GL_CLIP_DISTANCE_NV 0x8C7A
+#define GL_VERTEX_ID_NV 0x8C7B
+#define GL_PRIMITIVE_ID_NV 0x8C7C
+#define GL_GENERIC_ATTRIB_NV 0x8C7D
+#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80
+#define GL_ACTIVE_VARYINGS_NV 0x8C81
+#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85
+#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86
+#define GL_PRIMITIVES_GENERATED_NV 0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88
+#define GL_RASTERIZER_DISCARD_NV 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C
+#define GL_SEPARATE_ATTRIBS_NV 0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F
+
+typedef void (GLAPIENTRY * PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name);
+typedef void (GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode);
+typedef void (GLAPIENTRY * PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (GLAPIENTRY * PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKNVPROC) (void);
+typedef void (GLAPIENTRY * PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location);
+typedef GLint (GLAPIENTRY * PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name);
+typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode);
+typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode);
+
+#define glActiveVaryingNV GLEW_GET_FUN(__glewActiveVaryingNV)
+#define glBeginTransformFeedbackNV GLEW_GET_FUN(__glewBeginTransformFeedbackNV)
+#define glBindBufferBaseNV GLEW_GET_FUN(__glewBindBufferBaseNV)
+#define glBindBufferOffsetNV GLEW_GET_FUN(__glewBindBufferOffsetNV)
+#define glBindBufferRangeNV GLEW_GET_FUN(__glewBindBufferRangeNV)
+#define glEndTransformFeedbackNV GLEW_GET_FUN(__glewEndTransformFeedbackNV)
+#define glGetActiveVaryingNV GLEW_GET_FUN(__glewGetActiveVaryingNV)
+#define glGetTransformFeedbackVaryingNV GLEW_GET_FUN(__glewGetTransformFeedbackVaryingNV)
+#define glGetVaryingLocationNV GLEW_GET_FUN(__glewGetVaryingLocationNV)
+#define glTransformFeedbackAttribsNV GLEW_GET_FUN(__glewTransformFeedbackAttribsNV)
+#define glTransformFeedbackVaryingsNV GLEW_GET_FUN(__glewTransformFeedbackVaryingsNV)
+
+#define GLEW_NV_transform_feedback GLEW_GET_VAR(__GLEW_NV_transform_feedback)
+
+#endif /* GL_NV_transform_feedback */
+
+/* ----------------------- GL_NV_transform_feedback2 ----------------------- */
+
+#ifndef GL_NV_transform_feedback2
+#define GL_NV_transform_feedback2 1
+
+#define GL_TRANSFORM_FEEDBACK_NV 0x8E22
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25
+
+typedef void (GLAPIENTRY * PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id);
+typedef void (GLAPIENTRY * PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id);
+typedef void (GLAPIENTRY * PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint* ids);
+typedef GLboolean (GLAPIENTRY * PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void);
+typedef void (GLAPIENTRY * PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void);
+
+#define glBindTransformFeedbackNV GLEW_GET_FUN(__glewBindTransformFeedbackNV)
+#define glDeleteTransformFeedbacksNV GLEW_GET_FUN(__glewDeleteTransformFeedbacksNV)
+#define glDrawTransformFeedbackNV GLEW_GET_FUN(__glewDrawTransformFeedbackNV)
+#define glGenTransformFeedbacksNV GLEW_GET_FUN(__glewGenTransformFeedbacksNV)
+#define glIsTransformFeedbackNV GLEW_GET_FUN(__glewIsTransformFeedbackNV)
+#define glPauseTransformFeedbackNV GLEW_GET_FUN(__glewPauseTransformFeedbackNV)
+#define glResumeTransformFeedbackNV GLEW_GET_FUN(__glewResumeTransformFeedbackNV)
+
+#define GLEW_NV_transform_feedback2 GLEW_GET_VAR(__GLEW_NV_transform_feedback2)
+
+#endif /* GL_NV_transform_feedback2 */
+
+/* -------------------------- GL_NV_vdpau_interop -------------------------- */
+
+#ifndef GL_NV_vdpau_interop
+#define GL_NV_vdpau_interop 1
+
+#define GL_SURFACE_STATE_NV 0x86EB
+#define GL_SURFACE_REGISTERED_NV 0x86FD
+#define GL_SURFACE_MAPPED_NV 0x8700
+#define GL_WRITE_DISCARD_NV 0x88BE
+
+typedef GLintptr GLvdpauSurfaceNV;
+
+typedef void (GLAPIENTRY * PFNGLVDPAUFININVPROC) (void);
+typedef void (GLAPIENTRY * PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei* length, GLint *values);
+typedef void (GLAPIENTRY * PFNGLVDPAUINITNVPROC) (const void* vdpDevice, const GLvoid*getProcAddress);
+typedef void (GLAPIENTRY * PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface);
+typedef void (GLAPIENTRY * PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV* surfaces);
+typedef GLvdpauSurfaceNV (GLAPIENTRY * PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+typedef GLvdpauSurfaceNV (GLAPIENTRY * PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+typedef void (GLAPIENTRY * PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access);
+typedef void (GLAPIENTRY * PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV* surfaces);
+typedef void (GLAPIENTRY * PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface);
+
+#define glVDPAUFiniNV GLEW_GET_FUN(__glewVDPAUFiniNV)
+#define glVDPAUGetSurfaceivNV GLEW_GET_FUN(__glewVDPAUGetSurfaceivNV)
+#define glVDPAUInitNV GLEW_GET_FUN(__glewVDPAUInitNV)
+#define glVDPAUIsSurfaceNV GLEW_GET_FUN(__glewVDPAUIsSurfaceNV)
+#define glVDPAUMapSurfacesNV GLEW_GET_FUN(__glewVDPAUMapSurfacesNV)
+#define glVDPAURegisterOutputSurfaceNV GLEW_GET_FUN(__glewVDPAURegisterOutputSurfaceNV)
+#define glVDPAURegisterVideoSurfaceNV GLEW_GET_FUN(__glewVDPAURegisterVideoSurfaceNV)
+#define glVDPAUSurfaceAccessNV GLEW_GET_FUN(__glewVDPAUSurfaceAccessNV)
+#define glVDPAUUnmapSurfacesNV GLEW_GET_FUN(__glewVDPAUUnmapSurfacesNV)
+#define glVDPAUUnregisterSurfaceNV GLEW_GET_FUN(__glewVDPAUUnregisterSurfaceNV)
+
+#define GLEW_NV_vdpau_interop GLEW_GET_VAR(__GLEW_NV_vdpau_interop)
+
+#endif /* GL_NV_vdpau_interop */
+
+/* ------------------------ GL_NV_vertex_array_range ----------------------- */
+
+#ifndef GL_NV_vertex_array_range
+#define GL_NV_vertex_array_range 1
+
+#define GL_VERTEX_ARRAY_RANGE_NV 0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E
+#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F
+#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520
+#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521
+
+typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);
+typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, void* pointer);
+
+#define glFlushVertexArrayRangeNV GLEW_GET_FUN(__glewFlushVertexArrayRangeNV)
+#define glVertexArrayRangeNV GLEW_GET_FUN(__glewVertexArrayRangeNV)
+
+#define GLEW_NV_vertex_array_range GLEW_GET_VAR(__GLEW_NV_vertex_array_range)
+
+#endif /* GL_NV_vertex_array_range */
+
+/* ----------------------- GL_NV_vertex_array_range2 ----------------------- */
+
+#ifndef GL_NV_vertex_array_range2
+#define GL_NV_vertex_array_range2 1
+
+#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533
+
+#define GLEW_NV_vertex_array_range2 GLEW_GET_VAR(__GLEW_NV_vertex_array_range2)
+
+#endif /* GL_NV_vertex_array_range2 */
+
+/* ------------------- GL_NV_vertex_attrib_integer_64bit ------------------- */
+
+#ifndef GL_NV_vertex_attrib_integer_64bit
+#define GL_NV_vertex_attrib_integer_64bit 1
+
+#define GL_INT64_NV 0x140E
+#define GL_UNSIGNED_INT64_NV 0x140F
+
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT* params);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);
+
+#define glGetVertexAttribLi64vNV GLEW_GET_FUN(__glewGetVertexAttribLi64vNV)
+#define glGetVertexAttribLui64vNV GLEW_GET_FUN(__glewGetVertexAttribLui64vNV)
+#define glVertexAttribL1i64NV GLEW_GET_FUN(__glewVertexAttribL1i64NV)
+#define glVertexAttribL1i64vNV GLEW_GET_FUN(__glewVertexAttribL1i64vNV)
+#define glVertexAttribL1ui64NV GLEW_GET_FUN(__glewVertexAttribL1ui64NV)
+#define glVertexAttribL1ui64vNV GLEW_GET_FUN(__glewVertexAttribL1ui64vNV)
+#define glVertexAttribL2i64NV GLEW_GET_FUN(__glewVertexAttribL2i64NV)
+#define glVertexAttribL2i64vNV GLEW_GET_FUN(__glewVertexAttribL2i64vNV)
+#define glVertexAttribL2ui64NV GLEW_GET_FUN(__glewVertexAttribL2ui64NV)
+#define glVertexAttribL2ui64vNV GLEW_GET_FUN(__glewVertexAttribL2ui64vNV)
+#define glVertexAttribL3i64NV GLEW_GET_FUN(__glewVertexAttribL3i64NV)
+#define glVertexAttribL3i64vNV GLEW_GET_FUN(__glewVertexAttribL3i64vNV)
+#define glVertexAttribL3ui64NV GLEW_GET_FUN(__glewVertexAttribL3ui64NV)
+#define glVertexAttribL3ui64vNV GLEW_GET_FUN(__glewVertexAttribL3ui64vNV)
+#define glVertexAttribL4i64NV GLEW_GET_FUN(__glewVertexAttribL4i64NV)
+#define glVertexAttribL4i64vNV GLEW_GET_FUN(__glewVertexAttribL4i64vNV)
+#define glVertexAttribL4ui64NV GLEW_GET_FUN(__glewVertexAttribL4ui64NV)
+#define glVertexAttribL4ui64vNV GLEW_GET_FUN(__glewVertexAttribL4ui64vNV)
+#define glVertexAttribLFormatNV GLEW_GET_FUN(__glewVertexAttribLFormatNV)
+
+#define GLEW_NV_vertex_attrib_integer_64bit GLEW_GET_VAR(__GLEW_NV_vertex_attrib_integer_64bit)
+
+#endif /* GL_NV_vertex_attrib_integer_64bit */
+
+/* ------------------- GL_NV_vertex_buffer_unified_memory ------------------ */
+
+#ifndef GL_NV_vertex_buffer_unified_memory
+#define GL_NV_vertex_buffer_unified_memory 1
+
+#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E
+#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F
+#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20
+#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21
+#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22
+#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23
+#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24
+#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25
+#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26
+#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27
+#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28
+#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29
+#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A
+#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B
+#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C
+#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D
+#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E
+#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F
+#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30
+#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31
+#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32
+#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33
+#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40
+#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41
+#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42
+
+typedef void (GLAPIENTRY * PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length);
+typedef void (GLAPIENTRY * PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (GLAPIENTRY * PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride);
+typedef void (GLAPIENTRY * PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (GLAPIENTRY * PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT result[]);
+typedef void (GLAPIENTRY * PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (GLAPIENTRY * PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (GLAPIENTRY * PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);
+typedef void (GLAPIENTRY * PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+
+#define glBufferAddressRangeNV GLEW_GET_FUN(__glewBufferAddressRangeNV)
+#define glColorFormatNV GLEW_GET_FUN(__glewColorFormatNV)
+#define glEdgeFlagFormatNV GLEW_GET_FUN(__glewEdgeFlagFormatNV)
+#define glFogCoordFormatNV GLEW_GET_FUN(__glewFogCoordFormatNV)
+#define glGetIntegerui64i_vNV GLEW_GET_FUN(__glewGetIntegerui64i_vNV)
+#define glIndexFormatNV GLEW_GET_FUN(__glewIndexFormatNV)
+#define glNormalFormatNV GLEW_GET_FUN(__glewNormalFormatNV)
+#define glSecondaryColorFormatNV GLEW_GET_FUN(__glewSecondaryColorFormatNV)
+#define glTexCoordFormatNV GLEW_GET_FUN(__glewTexCoordFormatNV)
+#define glVertexAttribFormatNV GLEW_GET_FUN(__glewVertexAttribFormatNV)
+#define glVertexAttribIFormatNV GLEW_GET_FUN(__glewVertexAttribIFormatNV)
+#define glVertexFormatNV GLEW_GET_FUN(__glewVertexFormatNV)
+
+#define GLEW_NV_vertex_buffer_unified_memory GLEW_GET_VAR(__GLEW_NV_vertex_buffer_unified_memory)
+
+#endif /* GL_NV_vertex_buffer_unified_memory */
+
+/* -------------------------- GL_NV_vertex_program ------------------------- */
+
+#ifndef GL_NV_vertex_program
+#define GL_NV_vertex_program 1
+
+#define GL_VERTEX_PROGRAM_NV 0x8620
+#define GL_VERTEX_STATE_PROGRAM_NV 0x8621
+#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623
+#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624
+#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625
+#define GL_CURRENT_ATTRIB_NV 0x8626
+#define GL_PROGRAM_LENGTH_NV 0x8627
+#define GL_PROGRAM_STRING_NV 0x8628
+#define GL_MODELVIEW_PROJECTION_NV 0x8629
+#define GL_IDENTITY_NV 0x862A
+#define GL_INVERSE_NV 0x862B
+#define GL_TRANSPOSE_NV 0x862C
+#define GL_INVERSE_TRANSPOSE_NV 0x862D
+#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E
+#define GL_MAX_TRACK_MATRICES_NV 0x862F
+#define GL_MATRIX0_NV 0x8630
+#define GL_MATRIX1_NV 0x8631
+#define GL_MATRIX2_NV 0x8632
+#define GL_MATRIX3_NV 0x8633
+#define GL_MATRIX4_NV 0x8634
+#define GL_MATRIX5_NV 0x8635
+#define GL_MATRIX6_NV 0x8636
+#define GL_MATRIX7_NV 0x8637
+#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640
+#define GL_CURRENT_MATRIX_NV 0x8641
+#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643
+#define GL_PROGRAM_PARAMETER_NV 0x8644
+#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645
+#define GL_PROGRAM_TARGET_NV 0x8646
+#define GL_PROGRAM_RESIDENT_NV 0x8647
+#define GL_TRACK_MATRIX_NV 0x8648
+#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649
+#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A
+#define GL_PROGRAM_ERROR_POSITION_NV 0x864B
+#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650
+#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651
+#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652
+#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653
+#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654
+#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655
+#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656
+#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657
+#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658
+#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659
+#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A
+#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B
+#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C
+#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D
+#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E
+#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F
+#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660
+#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661
+#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662
+#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663
+#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664
+#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665
+#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666
+#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667
+#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668
+#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669
+#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A
+#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B
+#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C
+#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D
+#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E
+#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F
+#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670
+#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671
+#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672
+#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673
+#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674
+#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675
+#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676
+#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677
+#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678
+#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679
+#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A
+#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B
+#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C
+#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D
+#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E
+#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F
+
+typedef GLboolean (GLAPIENTRY * PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint* ids, GLboolean *residences);
+typedef void (GLAPIENTRY * PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);
+typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte* program);
+typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid** pointer);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint* params);
+typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMNVPROC) (GLuint id);
+typedef void (GLAPIENTRY * PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte* program);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei num, const GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei num, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, GLuint* ids);
+typedef void (GLAPIENTRY * PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei n, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei n, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei n, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei n, const GLshort* v);
+typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei n, const GLubyte* v);
+
+#define glAreProgramsResidentNV GLEW_GET_FUN(__glewAreProgramsResidentNV)
+#define glBindProgramNV GLEW_GET_FUN(__glewBindProgramNV)
+#define glDeleteProgramsNV GLEW_GET_FUN(__glewDeleteProgramsNV)
+#define glExecuteProgramNV GLEW_GET_FUN(__glewExecuteProgramNV)
+#define glGenProgramsNV GLEW_GET_FUN(__glewGenProgramsNV)
+#define glGetProgramParameterdvNV GLEW_GET_FUN(__glewGetProgramParameterdvNV)
+#define glGetProgramParameterfvNV GLEW_GET_FUN(__glewGetProgramParameterfvNV)
+#define glGetProgramStringNV GLEW_GET_FUN(__glewGetProgramStringNV)
+#define glGetProgramivNV GLEW_GET_FUN(__glewGetProgramivNV)
+#define glGetTrackMatrixivNV GLEW_GET_FUN(__glewGetTrackMatrixivNV)
+#define glGetVertexAttribPointervNV GLEW_GET_FUN(__glewGetVertexAttribPointervNV)
+#define glGetVertexAttribdvNV GLEW_GET_FUN(__glewGetVertexAttribdvNV)
+#define glGetVertexAttribfvNV GLEW_GET_FUN(__glewGetVertexAttribfvNV)
+#define glGetVertexAttribivNV GLEW_GET_FUN(__glewGetVertexAttribivNV)
+#define glIsProgramNV GLEW_GET_FUN(__glewIsProgramNV)
+#define glLoadProgramNV GLEW_GET_FUN(__glewLoadProgramNV)
+#define glProgramParameter4dNV GLEW_GET_FUN(__glewProgramParameter4dNV)
+#define glProgramParameter4dvNV GLEW_GET_FUN(__glewProgramParameter4dvNV)
+#define glProgramParameter4fNV GLEW_GET_FUN(__glewProgramParameter4fNV)
+#define glProgramParameter4fvNV GLEW_GET_FUN(__glewProgramParameter4fvNV)
+#define glProgramParameters4dvNV GLEW_GET_FUN(__glewProgramParameters4dvNV)
+#define glProgramParameters4fvNV GLEW_GET_FUN(__glewProgramParameters4fvNV)
+#define glRequestResidentProgramsNV GLEW_GET_FUN(__glewRequestResidentProgramsNV)
+#define glTrackMatrixNV GLEW_GET_FUN(__glewTrackMatrixNV)
+#define glVertexAttrib1dNV GLEW_GET_FUN(__glewVertexAttrib1dNV)
+#define glVertexAttrib1dvNV GLEW_GET_FUN(__glewVertexAttrib1dvNV)
+#define glVertexAttrib1fNV GLEW_GET_FUN(__glewVertexAttrib1fNV)
+#define glVertexAttrib1fvNV GLEW_GET_FUN(__glewVertexAttrib1fvNV)
+#define glVertexAttrib1sNV GLEW_GET_FUN(__glewVertexAttrib1sNV)
+#define glVertexAttrib1svNV GLEW_GET_FUN(__glewVertexAttrib1svNV)
+#define glVertexAttrib2dNV GLEW_GET_FUN(__glewVertexAttrib2dNV)
+#define glVertexAttrib2dvNV GLEW_GET_FUN(__glewVertexAttrib2dvNV)
+#define glVertexAttrib2fNV GLEW_GET_FUN(__glewVertexAttrib2fNV)
+#define glVertexAttrib2fvNV GLEW_GET_FUN(__glewVertexAttrib2fvNV)
+#define glVertexAttrib2sNV GLEW_GET_FUN(__glewVertexAttrib2sNV)
+#define glVertexAttrib2svNV GLEW_GET_FUN(__glewVertexAttrib2svNV)
+#define glVertexAttrib3dNV GLEW_GET_FUN(__glewVertexAttrib3dNV)
+#define glVertexAttrib3dvNV GLEW_GET_FUN(__glewVertexAttrib3dvNV)
+#define glVertexAttrib3fNV GLEW_GET_FUN(__glewVertexAttrib3fNV)
+#define glVertexAttrib3fvNV GLEW_GET_FUN(__glewVertexAttrib3fvNV)
+#define glVertexAttrib3sNV GLEW_GET_FUN(__glewVertexAttrib3sNV)
+#define glVertexAttrib3svNV GLEW_GET_FUN(__glewVertexAttrib3svNV)
+#define glVertexAttrib4dNV GLEW_GET_FUN(__glewVertexAttrib4dNV)
+#define glVertexAttrib4dvNV GLEW_GET_FUN(__glewVertexAttrib4dvNV)
+#define glVertexAttrib4fNV GLEW_GET_FUN(__glewVertexAttrib4fNV)
+#define glVertexAttrib4fvNV GLEW_GET_FUN(__glewVertexAttrib4fvNV)
+#define glVertexAttrib4sNV GLEW_GET_FUN(__glewVertexAttrib4sNV)
+#define glVertexAttrib4svNV GLEW_GET_FUN(__glewVertexAttrib4svNV)
+#define glVertexAttrib4ubNV GLEW_GET_FUN(__glewVertexAttrib4ubNV)
+#define glVertexAttrib4ubvNV GLEW_GET_FUN(__glewVertexAttrib4ubvNV)
+#define glVertexAttribPointerNV GLEW_GET_FUN(__glewVertexAttribPointerNV)
+#define glVertexAttribs1dvNV GLEW_GET_FUN(__glewVertexAttribs1dvNV)
+#define glVertexAttribs1fvNV GLEW_GET_FUN(__glewVertexAttribs1fvNV)
+#define glVertexAttribs1svNV GLEW_GET_FUN(__glewVertexAttribs1svNV)
+#define glVertexAttribs2dvNV GLEW_GET_FUN(__glewVertexAttribs2dvNV)
+#define glVertexAttribs2fvNV GLEW_GET_FUN(__glewVertexAttribs2fvNV)
+#define glVertexAttribs2svNV GLEW_GET_FUN(__glewVertexAttribs2svNV)
+#define glVertexAttribs3dvNV GLEW_GET_FUN(__glewVertexAttribs3dvNV)
+#define glVertexAttribs3fvNV GLEW_GET_FUN(__glewVertexAttribs3fvNV)
+#define glVertexAttribs3svNV GLEW_GET_FUN(__glewVertexAttribs3svNV)
+#define glVertexAttribs4dvNV GLEW_GET_FUN(__glewVertexAttribs4dvNV)
+#define glVertexAttribs4fvNV GLEW_GET_FUN(__glewVertexAttribs4fvNV)
+#define glVertexAttribs4svNV GLEW_GET_FUN(__glewVertexAttribs4svNV)
+#define glVertexAttribs4ubvNV GLEW_GET_FUN(__glewVertexAttribs4ubvNV)
+
+#define GLEW_NV_vertex_program GLEW_GET_VAR(__GLEW_NV_vertex_program)
+
+#endif /* GL_NV_vertex_program */
+
+/* ------------------------ GL_NV_vertex_program1_1 ------------------------ */
+
+#ifndef GL_NV_vertex_program1_1
+#define GL_NV_vertex_program1_1 1
+
+#define GLEW_NV_vertex_program1_1 GLEW_GET_VAR(__GLEW_NV_vertex_program1_1)
+
+#endif /* GL_NV_vertex_program1_1 */
+
+/* ------------------------- GL_NV_vertex_program2 ------------------------- */
+
+#ifndef GL_NV_vertex_program2
+#define GL_NV_vertex_program2 1
+
+#define GLEW_NV_vertex_program2 GLEW_GET_VAR(__GLEW_NV_vertex_program2)
+
+#endif /* GL_NV_vertex_program2 */
+
+/* ---------------------- GL_NV_vertex_program2_option --------------------- */
+
+#ifndef GL_NV_vertex_program2_option
+#define GL_NV_vertex_program2_option 1
+
+#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4
+#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5
+
+#define GLEW_NV_vertex_program2_option GLEW_GET_VAR(__GLEW_NV_vertex_program2_option)
+
+#endif /* GL_NV_vertex_program2_option */
+
+/* ------------------------- GL_NV_vertex_program3 ------------------------- */
+
+#ifndef GL_NV_vertex_program3
+#define GL_NV_vertex_program3 1
+
+#define MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C
+
+#define GLEW_NV_vertex_program3 GLEW_GET_VAR(__GLEW_NV_vertex_program3)
+
+#endif /* GL_NV_vertex_program3 */
+
+/* ------------------------- GL_NV_vertex_program4 ------------------------- */
+
+#ifndef GL_NV_vertex_program4
+#define GL_NV_vertex_program4 1
+
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD
+
+#define GLEW_NV_vertex_program4 GLEW_GET_VAR(__GLEW_NV_vertex_program4)
+
+#endif /* GL_NV_vertex_program4 */
+
+/* -------------------------- GL_NV_video_capture -------------------------- */
+
+#ifndef GL_NV_video_capture
+#define GL_NV_video_capture 1
+
+#define GL_VIDEO_BUFFER_NV 0x9020
+#define GL_VIDEO_BUFFER_BINDING_NV 0x9021
+#define GL_FIELD_UPPER_NV 0x9022
+#define GL_FIELD_LOWER_NV 0x9023
+#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024
+#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025
+#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026
+#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027
+#define GL_VIDEO_BUFFER_PITCH_NV 0x9028
+#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029
+#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A
+#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B
+#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C
+#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D
+#define GL_PARTIAL_SUCCESS_NV 0x902E
+#define GL_SUCCESS_NV 0x902F
+#define GL_FAILURE_NV 0x9030
+#define GL_YCBYCR8_422_NV 0x9031
+#define GL_YCBAYCR8A_4224_NV 0x9032
+#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033
+#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034
+#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035
+#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036
+#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037
+#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038
+#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039
+#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A
+#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B
+#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C
+
+typedef void (GLAPIENTRY * PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot);
+typedef void (GLAPIENTRY * PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset);
+typedef void (GLAPIENTRY * PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture);
+typedef void (GLAPIENTRY * PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot);
+typedef void (GLAPIENTRY * PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint* params);
+typedef GLenum (GLAPIENTRY * PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint* sequence_num, GLuint64EXT *capture_time);
+typedef void (GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble* params);
+typedef void (GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint* params);
+
+#define glBeginVideoCaptureNV GLEW_GET_FUN(__glewBeginVideoCaptureNV)
+#define glBindVideoCaptureStreamBufferNV GLEW_GET_FUN(__glewBindVideoCaptureStreamBufferNV)
+#define glBindVideoCaptureStreamTextureNV GLEW_GET_FUN(__glewBindVideoCaptureStreamTextureNV)
+#define glEndVideoCaptureNV GLEW_GET_FUN(__glewEndVideoCaptureNV)
+#define glGetVideoCaptureStreamdvNV GLEW_GET_FUN(__glewGetVideoCaptureStreamdvNV)
+#define glGetVideoCaptureStreamfvNV GLEW_GET_FUN(__glewGetVideoCaptureStreamfvNV)
+#define glGetVideoCaptureStreamivNV GLEW_GET_FUN(__glewGetVideoCaptureStreamivNV)
+#define glGetVideoCaptureivNV GLEW_GET_FUN(__glewGetVideoCaptureivNV)
+#define glVideoCaptureNV GLEW_GET_FUN(__glewVideoCaptureNV)
+#define glVideoCaptureStreamParameterdvNV GLEW_GET_FUN(__glewVideoCaptureStreamParameterdvNV)
+#define glVideoCaptureStreamParameterfvNV GLEW_GET_FUN(__glewVideoCaptureStreamParameterfvNV)
+#define glVideoCaptureStreamParameterivNV GLEW_GET_FUN(__glewVideoCaptureStreamParameterivNV)
+
+#define GLEW_NV_video_capture GLEW_GET_VAR(__GLEW_NV_video_capture)
+
+#endif /* GL_NV_video_capture */
+
+/* ------------------------ GL_OES_byte_coordinates ------------------------ */
+
+#ifndef GL_OES_byte_coordinates
+#define GL_OES_byte_coordinates 1
+
+#define GL_BYTE 0x1400
+
+#define GLEW_OES_byte_coordinates GLEW_GET_VAR(__GLEW_OES_byte_coordinates)
+
+#endif /* GL_OES_byte_coordinates */
+
+/* ------------------- GL_OES_compressed_paletted_texture ------------------ */
+
+#ifndef GL_OES_compressed_paletted_texture
+#define GL_OES_compressed_paletted_texture 1
+
+#define GL_PALETTE4_RGB8_OES 0x8B90
+#define GL_PALETTE4_RGBA8_OES 0x8B91
+#define GL_PALETTE4_R5_G6_B5_OES 0x8B92
+#define GL_PALETTE4_RGBA4_OES 0x8B93
+#define GL_PALETTE4_RGB5_A1_OES 0x8B94
+#define GL_PALETTE8_RGB8_OES 0x8B95
+#define GL_PALETTE8_RGBA8_OES 0x8B96
+#define GL_PALETTE8_R5_G6_B5_OES 0x8B97
+#define GL_PALETTE8_RGBA4_OES 0x8B98
+#define GL_PALETTE8_RGB5_A1_OES 0x8B99
+
+#define GLEW_OES_compressed_paletted_texture GLEW_GET_VAR(__GLEW_OES_compressed_paletted_texture)
+
+#endif /* GL_OES_compressed_paletted_texture */
+
+/* --------------------------- GL_OES_read_format -------------------------- */
+
+#ifndef GL_OES_read_format
+#define GL_OES_read_format 1
+
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B
+
+#define GLEW_OES_read_format GLEW_GET_VAR(__GLEW_OES_read_format)
+
+#endif /* GL_OES_read_format */
+
+/* ------------------------ GL_OES_single_precision ------------------------ */
+
+#ifndef GL_OES_single_precision
+#define GL_OES_single_precision 1
+
+typedef void (GLAPIENTRY * PFNGLCLEARDEPTHFOESPROC) (GLclampd depth);
+typedef void (GLAPIENTRY * PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat* equation);
+typedef void (GLAPIENTRY * PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f);
+typedef void (GLAPIENTRY * PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+typedef void (GLAPIENTRY * PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat* equation);
+typedef void (GLAPIENTRY * PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+
+#define glClearDepthfOES GLEW_GET_FUN(__glewClearDepthfOES)
+#define glClipPlanefOES GLEW_GET_FUN(__glewClipPlanefOES)
+#define glDepthRangefOES GLEW_GET_FUN(__glewDepthRangefOES)
+#define glFrustumfOES GLEW_GET_FUN(__glewFrustumfOES)
+#define glGetClipPlanefOES GLEW_GET_FUN(__glewGetClipPlanefOES)
+#define glOrthofOES GLEW_GET_FUN(__glewOrthofOES)
+
+#define GLEW_OES_single_precision GLEW_GET_VAR(__GLEW_OES_single_precision)
+
+#endif /* GL_OES_single_precision */
+
+/* ---------------------------- GL_OML_interlace --------------------------- */
+
+#ifndef GL_OML_interlace
+#define GL_OML_interlace 1
+
+#define GL_INTERLACE_OML 0x8980
+#define GL_INTERLACE_READ_OML 0x8981
+
+#define GLEW_OML_interlace GLEW_GET_VAR(__GLEW_OML_interlace)
+
+#endif /* GL_OML_interlace */
+
+/* ---------------------------- GL_OML_resample ---------------------------- */
+
+#ifndef GL_OML_resample
+#define GL_OML_resample 1
+
+#define GL_PACK_RESAMPLE_OML 0x8984
+#define GL_UNPACK_RESAMPLE_OML 0x8985
+#define GL_RESAMPLE_REPLICATE_OML 0x8986
+#define GL_RESAMPLE_ZERO_FILL_OML 0x8987
+#define GL_RESAMPLE_AVERAGE_OML 0x8988
+#define GL_RESAMPLE_DECIMATE_OML 0x8989
+
+#define GLEW_OML_resample GLEW_GET_VAR(__GLEW_OML_resample)
+
+#endif /* GL_OML_resample */
+
+/* ---------------------------- GL_OML_subsample --------------------------- */
+
+#ifndef GL_OML_subsample
+#define GL_OML_subsample 1
+
+#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982
+#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983
+
+#define GLEW_OML_subsample GLEW_GET_VAR(__GLEW_OML_subsample)
+
+#endif /* GL_OML_subsample */
+
+/* --------------------------- GL_PGI_misc_hints --------------------------- */
+
+#ifndef GL_PGI_misc_hints
+#define GL_PGI_misc_hints 1
+
+#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 107000
+#define GL_CONSERVE_MEMORY_HINT_PGI 107005
+#define GL_RECLAIM_MEMORY_HINT_PGI 107006
+#define GL_NATIVE_GRAPHICS_HANDLE_PGI 107010
+#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 107011
+#define GL_NATIVE_GRAPHICS_END_HINT_PGI 107012
+#define GL_ALWAYS_FAST_HINT_PGI 107020
+#define GL_ALWAYS_SOFT_HINT_PGI 107021
+#define GL_ALLOW_DRAW_OBJ_HINT_PGI 107022
+#define GL_ALLOW_DRAW_WIN_HINT_PGI 107023
+#define GL_ALLOW_DRAW_FRG_HINT_PGI 107024
+#define GL_ALLOW_DRAW_MEM_HINT_PGI 107025
+#define GL_STRICT_DEPTHFUNC_HINT_PGI 107030
+#define GL_STRICT_LIGHTING_HINT_PGI 107031
+#define GL_STRICT_SCISSOR_HINT_PGI 107032
+#define GL_FULL_STIPPLE_HINT_PGI 107033
+#define GL_CLIP_NEAR_HINT_PGI 107040
+#define GL_CLIP_FAR_HINT_PGI 107041
+#define GL_WIDE_LINE_HINT_PGI 107042
+#define GL_BACK_NORMALS_HINT_PGI 107043
+
+#define GLEW_PGI_misc_hints GLEW_GET_VAR(__GLEW_PGI_misc_hints)
+
+#endif /* GL_PGI_misc_hints */
+
+/* -------------------------- GL_PGI_vertex_hints -------------------------- */
+
+#ifndef GL_PGI_vertex_hints
+#define GL_PGI_vertex_hints 1
+
+#define GL_VERTEX23_BIT_PGI 0x00000004
+#define GL_VERTEX4_BIT_PGI 0x00000008
+#define GL_COLOR3_BIT_PGI 0x00010000
+#define GL_COLOR4_BIT_PGI 0x00020000
+#define GL_EDGEFLAG_BIT_PGI 0x00040000
+#define GL_INDEX_BIT_PGI 0x00080000
+#define GL_MAT_AMBIENT_BIT_PGI 0x00100000
+#define GL_VERTEX_DATA_HINT_PGI 107050
+#define GL_VERTEX_CONSISTENT_HINT_PGI 107051
+#define GL_MATERIAL_SIDE_HINT_PGI 107052
+#define GL_MAX_VERTEX_HINT_PGI 107053
+#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000
+#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000
+#define GL_MAT_EMISSION_BIT_PGI 0x00800000
+#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000
+#define GL_MAT_SHININESS_BIT_PGI 0x02000000
+#define GL_MAT_SPECULAR_BIT_PGI 0x04000000
+#define GL_NORMAL_BIT_PGI 0x08000000
+#define GL_TEXCOORD1_BIT_PGI 0x10000000
+#define GL_TEXCOORD2_BIT_PGI 0x20000000
+#define GL_TEXCOORD3_BIT_PGI 0x40000000
+#define GL_TEXCOORD4_BIT_PGI 0x80000000
+
+#define GLEW_PGI_vertex_hints GLEW_GET_VAR(__GLEW_PGI_vertex_hints)
+
+#endif /* GL_PGI_vertex_hints */
+
+/* ----------------------- GL_REND_screen_coordinates ---------------------- */
+
+#ifndef GL_REND_screen_coordinates
+#define GL_REND_screen_coordinates 1
+
+#define GL_SCREEN_COORDINATES_REND 0x8490
+#define GL_INVERTED_SCREEN_W_REND 0x8491
+
+#define GLEW_REND_screen_coordinates GLEW_GET_VAR(__GLEW_REND_screen_coordinates)
+
+#endif /* GL_REND_screen_coordinates */
+
+/* ------------------------------- GL_S3_s3tc ------------------------------ */
+
+#ifndef GL_S3_s3tc
+#define GL_S3_s3tc 1
+
+#define GL_RGB_S3TC 0x83A0
+#define GL_RGB4_S3TC 0x83A1
+#define GL_RGBA_S3TC 0x83A2
+#define GL_RGBA4_S3TC 0x83A3
+#define GL_RGBA_DXT5_S3TC 0x83A4
+#define GL_RGBA4_DXT5_S3TC 0x83A5
+
+#define GLEW_S3_s3tc GLEW_GET_VAR(__GLEW_S3_s3tc)
+
+#endif /* GL_S3_s3tc */
+
+/* -------------------------- GL_SGIS_color_range -------------------------- */
+
+#ifndef GL_SGIS_color_range
+#define GL_SGIS_color_range 1
+
+#define GL_EXTENDED_RANGE_SGIS 0x85A5
+#define GL_MIN_RED_SGIS 0x85A6
+#define GL_MAX_RED_SGIS 0x85A7
+#define GL_MIN_GREEN_SGIS 0x85A8
+#define GL_MAX_GREEN_SGIS 0x85A9
+#define GL_MIN_BLUE_SGIS 0x85AA
+#define GL_MAX_BLUE_SGIS 0x85AB
+#define GL_MIN_ALPHA_SGIS 0x85AC
+#define GL_MAX_ALPHA_SGIS 0x85AD
+
+#define GLEW_SGIS_color_range GLEW_GET_VAR(__GLEW_SGIS_color_range)
+
+#endif /* GL_SGIS_color_range */
+
+/* ------------------------- GL_SGIS_detail_texture ------------------------ */
+
+#ifndef GL_SGIS_detail_texture
+#define GL_SGIS_detail_texture 1
+
+typedef void (GLAPIENTRY * PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat* points);
+typedef void (GLAPIENTRY * PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat* points);
+
+#define glDetailTexFuncSGIS GLEW_GET_FUN(__glewDetailTexFuncSGIS)
+#define glGetDetailTexFuncSGIS GLEW_GET_FUN(__glewGetDetailTexFuncSGIS)
+
+#define GLEW_SGIS_detail_texture GLEW_GET_VAR(__GLEW_SGIS_detail_texture)
+
+#endif /* GL_SGIS_detail_texture */
+
+/* -------------------------- GL_SGIS_fog_function ------------------------- */
+
+#ifndef GL_SGIS_fog_function
+#define GL_SGIS_fog_function 1
+
+typedef void (GLAPIENTRY * PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat* points);
+typedef void (GLAPIENTRY * PFNGLGETFOGFUNCSGISPROC) (GLfloat* points);
+
+#define glFogFuncSGIS GLEW_GET_FUN(__glewFogFuncSGIS)
+#define glGetFogFuncSGIS GLEW_GET_FUN(__glewGetFogFuncSGIS)
+
+#define GLEW_SGIS_fog_function GLEW_GET_VAR(__GLEW_SGIS_fog_function)
+
+#endif /* GL_SGIS_fog_function */
+
+/* ------------------------ GL_SGIS_generate_mipmap ------------------------ */
+
+#ifndef GL_SGIS_generate_mipmap
+#define GL_SGIS_generate_mipmap 1
+
+#define GL_GENERATE_MIPMAP_SGIS 0x8191
+#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192
+
+#define GLEW_SGIS_generate_mipmap GLEW_GET_VAR(__GLEW_SGIS_generate_mipmap)
+
+#endif /* GL_SGIS_generate_mipmap */
+
+/* -------------------------- GL_SGIS_multisample -------------------------- */
+
+#ifndef GL_SGIS_multisample
+#define GL_SGIS_multisample 1
+
+#define GL_MULTISAMPLE_SGIS 0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F
+#define GL_SAMPLE_MASK_SGIS 0x80A0
+#define GL_1PASS_SGIS 0x80A1
+#define GL_2PASS_0_SGIS 0x80A2
+#define GL_2PASS_1_SGIS 0x80A3
+#define GL_4PASS_0_SGIS 0x80A4
+#define GL_4PASS_1_SGIS 0x80A5
+#define GL_4PASS_2_SGIS 0x80A6
+#define GL_4PASS_3_SGIS 0x80A7
+#define GL_SAMPLE_BUFFERS_SGIS 0x80A8
+#define GL_SAMPLES_SGIS 0x80A9
+#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA
+#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB
+#define GL_SAMPLE_PATTERN_SGIS 0x80AC
+#define GL_MULTISAMPLE_BIT_EXT 0x20000000
+
+typedef void (GLAPIENTRY * PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert);
+typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern);
+
+#define glSampleMaskSGIS GLEW_GET_FUN(__glewSampleMaskSGIS)
+#define glSamplePatternSGIS GLEW_GET_FUN(__glewSamplePatternSGIS)
+
+#define GLEW_SGIS_multisample GLEW_GET_VAR(__GLEW_SGIS_multisample)
+
+#endif /* GL_SGIS_multisample */
+
+/* ------------------------- GL_SGIS_pixel_texture ------------------------- */
+
+#ifndef GL_SGIS_pixel_texture
+#define GL_SGIS_pixel_texture 1
+
+#define GLEW_SGIS_pixel_texture GLEW_GET_VAR(__GLEW_SGIS_pixel_texture)
+
+#endif /* GL_SGIS_pixel_texture */
+
+/* ----------------------- GL_SGIS_point_line_texgen ----------------------- */
+
+#ifndef GL_SGIS_point_line_texgen
+#define GL_SGIS_point_line_texgen 1
+
+#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0
+#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1
+#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2
+#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3
+#define GL_EYE_POINT_SGIS 0x81F4
+#define GL_OBJECT_POINT_SGIS 0x81F5
+#define GL_EYE_LINE_SGIS 0x81F6
+#define GL_OBJECT_LINE_SGIS 0x81F7
+
+#define GLEW_SGIS_point_line_texgen GLEW_GET_VAR(__GLEW_SGIS_point_line_texgen)
+
+#endif /* GL_SGIS_point_line_texgen */
+
+/* ------------------------ GL_SGIS_sharpen_texture ------------------------ */
+
+#ifndef GL_SGIS_sharpen_texture
+#define GL_SGIS_sharpen_texture 1
+
+typedef void (GLAPIENTRY * PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat* points);
+typedef void (GLAPIENTRY * PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat* points);
+
+#define glGetSharpenTexFuncSGIS GLEW_GET_FUN(__glewGetSharpenTexFuncSGIS)
+#define glSharpenTexFuncSGIS GLEW_GET_FUN(__glewSharpenTexFuncSGIS)
+
+#define GLEW_SGIS_sharpen_texture GLEW_GET_VAR(__GLEW_SGIS_sharpen_texture)
+
+#endif /* GL_SGIS_sharpen_texture */
+
+/* --------------------------- GL_SGIS_texture4D --------------------------- */
+
+#ifndef GL_SGIS_texture4D
+#define GL_SGIS_texture4D 1
+
+typedef void (GLAPIENTRY * PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLint border, GLenum format, GLenum type, const void* pixels);
+typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLenum format, GLenum type, const void* pixels);
+
+#define glTexImage4DSGIS GLEW_GET_FUN(__glewTexImage4DSGIS)
+#define glTexSubImage4DSGIS GLEW_GET_FUN(__glewTexSubImage4DSGIS)
+
+#define GLEW_SGIS_texture4D GLEW_GET_VAR(__GLEW_SGIS_texture4D)
+
+#endif /* GL_SGIS_texture4D */
+
+/* ---------------------- GL_SGIS_texture_border_clamp --------------------- */
+
+#ifndef GL_SGIS_texture_border_clamp
+#define GL_SGIS_texture_border_clamp 1
+
+#define GL_CLAMP_TO_BORDER_SGIS 0x812D
+
+#define GLEW_SGIS_texture_border_clamp GLEW_GET_VAR(__GLEW_SGIS_texture_border_clamp)
+
+#endif /* GL_SGIS_texture_border_clamp */
+
+/* ----------------------- GL_SGIS_texture_edge_clamp ---------------------- */
+
+#ifndef GL_SGIS_texture_edge_clamp
+#define GL_SGIS_texture_edge_clamp 1
+
+#define GL_CLAMP_TO_EDGE_SGIS 0x812F
+
+#define GLEW_SGIS_texture_edge_clamp GLEW_GET_VAR(__GLEW_SGIS_texture_edge_clamp)
+
+#endif /* GL_SGIS_texture_edge_clamp */
+
+/* ------------------------ GL_SGIS_texture_filter4 ------------------------ */
+
+#ifndef GL_SGIS_texture_filter4
+#define GL_SGIS_texture_filter4 1
+
+typedef void (GLAPIENTRY * PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat* weights);
+typedef void (GLAPIENTRY * PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat* weights);
+
+#define glGetTexFilterFuncSGIS GLEW_GET_FUN(__glewGetTexFilterFuncSGIS)
+#define glTexFilterFuncSGIS GLEW_GET_FUN(__glewTexFilterFuncSGIS)
+
+#define GLEW_SGIS_texture_filter4 GLEW_GET_VAR(__GLEW_SGIS_texture_filter4)
+
+#endif /* GL_SGIS_texture_filter4 */
+
+/* -------------------------- GL_SGIS_texture_lod -------------------------- */
+
+#ifndef GL_SGIS_texture_lod
+#define GL_SGIS_texture_lod 1
+
+#define GL_TEXTURE_MIN_LOD_SGIS 0x813A
+#define GL_TEXTURE_MAX_LOD_SGIS 0x813B
+#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C
+#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D
+
+#define GLEW_SGIS_texture_lod GLEW_GET_VAR(__GLEW_SGIS_texture_lod)
+
+#endif /* GL_SGIS_texture_lod */
+
+/* ------------------------- GL_SGIS_texture_select ------------------------ */
+
+#ifndef GL_SGIS_texture_select
+#define GL_SGIS_texture_select 1
+
+#define GLEW_SGIS_texture_select GLEW_GET_VAR(__GLEW_SGIS_texture_select)
+
+#endif /* GL_SGIS_texture_select */
+
+/* ----------------------------- GL_SGIX_async ----------------------------- */
+
+#ifndef GL_SGIX_async
+#define GL_SGIX_async 1
+
+#define GL_ASYNC_MARKER_SGIX 0x8329
+
+typedef void (GLAPIENTRY * PFNGLASYNCMARKERSGIXPROC) (GLuint marker);
+typedef void (GLAPIENTRY * PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range);
+typedef GLint (GLAPIENTRY * PFNGLFINISHASYNCSGIXPROC) (GLuint* markerp);
+typedef GLuint (GLAPIENTRY * PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range);
+typedef GLboolean (GLAPIENTRY * PFNGLISASYNCMARKERSGIXPROC) (GLuint marker);
+typedef GLint (GLAPIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint* markerp);
+
+#define glAsyncMarkerSGIX GLEW_GET_FUN(__glewAsyncMarkerSGIX)
+#define glDeleteAsyncMarkersSGIX GLEW_GET_FUN(__glewDeleteAsyncMarkersSGIX)
+#define glFinishAsyncSGIX GLEW_GET_FUN(__glewFinishAsyncSGIX)
+#define glGenAsyncMarkersSGIX GLEW_GET_FUN(__glewGenAsyncMarkersSGIX)
+#define glIsAsyncMarkerSGIX GLEW_GET_FUN(__glewIsAsyncMarkerSGIX)
+#define glPollAsyncSGIX GLEW_GET_FUN(__glewPollAsyncSGIX)
+
+#define GLEW_SGIX_async GLEW_GET_VAR(__GLEW_SGIX_async)
+
+#endif /* GL_SGIX_async */
+
+/* ------------------------ GL_SGIX_async_histogram ------------------------ */
+
+#ifndef GL_SGIX_async_histogram
+#define GL_SGIX_async_histogram 1
+
+#define GL_ASYNC_HISTOGRAM_SGIX 0x832C
+#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D
+
+#define GLEW_SGIX_async_histogram GLEW_GET_VAR(__GLEW_SGIX_async_histogram)
+
+#endif /* GL_SGIX_async_histogram */
+
+/* -------------------------- GL_SGIX_async_pixel -------------------------- */
+
+#ifndef GL_SGIX_async_pixel
+#define GL_SGIX_async_pixel 1
+
+#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C
+#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D
+#define GL_ASYNC_READ_PIXELS_SGIX 0x835E
+#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F
+#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360
+#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361
+
+#define GLEW_SGIX_async_pixel GLEW_GET_VAR(__GLEW_SGIX_async_pixel)
+
+#endif /* GL_SGIX_async_pixel */
+
+/* ----------------------- GL_SGIX_blend_alpha_minmax ---------------------- */
+
+#ifndef GL_SGIX_blend_alpha_minmax
+#define GL_SGIX_blend_alpha_minmax 1
+
+#define GL_ALPHA_MIN_SGIX 0x8320
+#define GL_ALPHA_MAX_SGIX 0x8321
+
+#define GLEW_SGIX_blend_alpha_minmax GLEW_GET_VAR(__GLEW_SGIX_blend_alpha_minmax)
+
+#endif /* GL_SGIX_blend_alpha_minmax */
+
+/* ---------------------------- GL_SGIX_clipmap ---------------------------- */
+
+#ifndef GL_SGIX_clipmap
+#define GL_SGIX_clipmap 1
+
+#define GLEW_SGIX_clipmap GLEW_GET_VAR(__GLEW_SGIX_clipmap)
+
+#endif /* GL_SGIX_clipmap */
+
+/* ---------------------- GL_SGIX_convolution_accuracy --------------------- */
+
+#ifndef GL_SGIX_convolution_accuracy
+#define GL_SGIX_convolution_accuracy 1
+
+#define GL_CONVOLUTION_HINT_SGIX 0x8316
+
+#define GLEW_SGIX_convolution_accuracy GLEW_GET_VAR(__GLEW_SGIX_convolution_accuracy)
+
+#endif /* GL_SGIX_convolution_accuracy */
+
+/* ------------------------- GL_SGIX_depth_texture ------------------------- */
+
+#ifndef GL_SGIX_depth_texture
+#define GL_SGIX_depth_texture 1
+
+#define GL_DEPTH_COMPONENT16_SGIX 0x81A5
+#define GL_DEPTH_COMPONENT24_SGIX 0x81A6
+#define GL_DEPTH_COMPONENT32_SGIX 0x81A7
+
+#define GLEW_SGIX_depth_texture GLEW_GET_VAR(__GLEW_SGIX_depth_texture)
+
+#endif /* GL_SGIX_depth_texture */
+
+/* -------------------------- GL_SGIX_flush_raster ------------------------- */
+
+#ifndef GL_SGIX_flush_raster
+#define GL_SGIX_flush_raster 1
+
+typedef void (GLAPIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void);
+
+#define glFlushRasterSGIX GLEW_GET_FUN(__glewFlushRasterSGIX)
+
+#define GLEW_SGIX_flush_raster GLEW_GET_VAR(__GLEW_SGIX_flush_raster)
+
+#endif /* GL_SGIX_flush_raster */
+
+/* --------------------------- GL_SGIX_fog_offset -------------------------- */
+
+#ifndef GL_SGIX_fog_offset
+#define GL_SGIX_fog_offset 1
+
+#define GL_FOG_OFFSET_SGIX 0x8198
+#define GL_FOG_OFFSET_VALUE_SGIX 0x8199
+
+#define GLEW_SGIX_fog_offset GLEW_GET_VAR(__GLEW_SGIX_fog_offset)
+
+#endif /* GL_SGIX_fog_offset */
+
+/* -------------------------- GL_SGIX_fog_texture -------------------------- */
+
+#ifndef GL_SGIX_fog_texture
+#define GL_SGIX_fog_texture 1
+
+#define GL_TEXTURE_FOG_SGIX 0
+#define GL_FOG_PATCHY_FACTOR_SGIX 0
+#define GL_FRAGMENT_FOG_SGIX 0
+
+typedef void (GLAPIENTRY * PFNGLTEXTUREFOGSGIXPROC) (GLenum pname);
+
+#define glTextureFogSGIX GLEW_GET_FUN(__glewTextureFogSGIX)
+
+#define GLEW_SGIX_fog_texture GLEW_GET_VAR(__GLEW_SGIX_fog_texture)
+
+#endif /* GL_SGIX_fog_texture */
+
+/* ------------------- GL_SGIX_fragment_specular_lighting ------------------ */
+
+#ifndef GL_SGIX_fragment_specular_lighting
+#define GL_SGIX_fragment_specular_lighting 1
+
+typedef void (GLAPIENTRY * PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, const GLfloat param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, const GLint param);
+typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum value, GLfloat* data);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum value, GLint* data);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat* data);
+typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint* data);
+
+#define glFragmentColorMaterialSGIX GLEW_GET_FUN(__glewFragmentColorMaterialSGIX)
+#define glFragmentLightModelfSGIX GLEW_GET_FUN(__glewFragmentLightModelfSGIX)
+#define glFragmentLightModelfvSGIX GLEW_GET_FUN(__glewFragmentLightModelfvSGIX)
+#define glFragmentLightModeliSGIX GLEW_GET_FUN(__glewFragmentLightModeliSGIX)
+#define glFragmentLightModelivSGIX GLEW_GET_FUN(__glewFragmentLightModelivSGIX)
+#define glFragmentLightfSGIX GLEW_GET_FUN(__glewFragmentLightfSGIX)
+#define glFragmentLightfvSGIX GLEW_GET_FUN(__glewFragmentLightfvSGIX)
+#define glFragmentLightiSGIX GLEW_GET_FUN(__glewFragmentLightiSGIX)
+#define glFragmentLightivSGIX GLEW_GET_FUN(__glewFragmentLightivSGIX)
+#define glFragmentMaterialfSGIX GLEW_GET_FUN(__glewFragmentMaterialfSGIX)
+#define glFragmentMaterialfvSGIX GLEW_GET_FUN(__glewFragmentMaterialfvSGIX)
+#define glFragmentMaterialiSGIX GLEW_GET_FUN(__glewFragmentMaterialiSGIX)
+#define glFragmentMaterialivSGIX GLEW_GET_FUN(__glewFragmentMaterialivSGIX)
+#define glGetFragmentLightfvSGIX GLEW_GET_FUN(__glewGetFragmentLightfvSGIX)
+#define glGetFragmentLightivSGIX GLEW_GET_FUN(__glewGetFragmentLightivSGIX)
+#define glGetFragmentMaterialfvSGIX GLEW_GET_FUN(__glewGetFragmentMaterialfvSGIX)
+#define glGetFragmentMaterialivSGIX GLEW_GET_FUN(__glewGetFragmentMaterialivSGIX)
+
+#define GLEW_SGIX_fragment_specular_lighting GLEW_GET_VAR(__GLEW_SGIX_fragment_specular_lighting)
+
+#endif /* GL_SGIX_fragment_specular_lighting */
+
+/* --------------------------- GL_SGIX_framezoom --------------------------- */
+
+#ifndef GL_SGIX_framezoom
+#define GL_SGIX_framezoom 1
+
+typedef void (GLAPIENTRY * PFNGLFRAMEZOOMSGIXPROC) (GLint factor);
+
+#define glFrameZoomSGIX GLEW_GET_FUN(__glewFrameZoomSGIX)
+
+#define GLEW_SGIX_framezoom GLEW_GET_VAR(__GLEW_SGIX_framezoom)
+
+#endif /* GL_SGIX_framezoom */
+
+/* --------------------------- GL_SGIX_interlace --------------------------- */
+
+#ifndef GL_SGIX_interlace
+#define GL_SGIX_interlace 1
+
+#define GL_INTERLACE_SGIX 0x8094
+
+#define GLEW_SGIX_interlace GLEW_GET_VAR(__GLEW_SGIX_interlace)
+
+#endif /* GL_SGIX_interlace */
+
+/* ------------------------- GL_SGIX_ir_instrument1 ------------------------ */
+
+#ifndef GL_SGIX_ir_instrument1
+#define GL_SGIX_ir_instrument1 1
+
+#define GLEW_SGIX_ir_instrument1 GLEW_GET_VAR(__GLEW_SGIX_ir_instrument1)
+
+#endif /* GL_SGIX_ir_instrument1 */
+
+/* ------------------------- GL_SGIX_list_priority ------------------------- */
+
+#ifndef GL_SGIX_list_priority
+#define GL_SGIX_list_priority 1
+
+#define GLEW_SGIX_list_priority GLEW_GET_VAR(__GLEW_SGIX_list_priority)
+
+#endif /* GL_SGIX_list_priority */
+
+/* ------------------------- GL_SGIX_pixel_texture ------------------------- */
+
+#ifndef GL_SGIX_pixel_texture
+#define GL_SGIX_pixel_texture 1
+
+typedef void (GLAPIENTRY * PFNGLPIXELTEXGENSGIXPROC) (GLenum mode);
+
+#define glPixelTexGenSGIX GLEW_GET_FUN(__glewPixelTexGenSGIX)
+
+#define GLEW_SGIX_pixel_texture GLEW_GET_VAR(__GLEW_SGIX_pixel_texture)
+
+#endif /* GL_SGIX_pixel_texture */
+
+/* ----------------------- GL_SGIX_pixel_texture_bits ---------------------- */
+
+#ifndef GL_SGIX_pixel_texture_bits
+#define GL_SGIX_pixel_texture_bits 1
+
+#define GLEW_SGIX_pixel_texture_bits GLEW_GET_VAR(__GLEW_SGIX_pixel_texture_bits)
+
+#endif /* GL_SGIX_pixel_texture_bits */
+
+/* ------------------------ GL_SGIX_reference_plane ------------------------ */
+
+#ifndef GL_SGIX_reference_plane
+#define GL_SGIX_reference_plane 1
+
+typedef void (GLAPIENTRY * PFNGLREFERENCEPLANESGIXPROC) (const GLdouble* equation);
+
+#define glReferencePlaneSGIX GLEW_GET_FUN(__glewReferencePlaneSGIX)
+
+#define GLEW_SGIX_reference_plane GLEW_GET_VAR(__GLEW_SGIX_reference_plane)
+
+#endif /* GL_SGIX_reference_plane */
+
+/* ---------------------------- GL_SGIX_resample --------------------------- */
+
+#ifndef GL_SGIX_resample
+#define GL_SGIX_resample 1
+
+#define GL_PACK_RESAMPLE_SGIX 0x842E
+#define GL_UNPACK_RESAMPLE_SGIX 0x842F
+#define GL_RESAMPLE_DECIMATE_SGIX 0x8430
+#define GL_RESAMPLE_REPLICATE_SGIX 0x8433
+#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434
+
+#define GLEW_SGIX_resample GLEW_GET_VAR(__GLEW_SGIX_resample)
+
+#endif /* GL_SGIX_resample */
+
+/* ----------------------------- GL_SGIX_shadow ---------------------------- */
+
+#ifndef GL_SGIX_shadow
+#define GL_SGIX_shadow 1
+
+#define GL_TEXTURE_COMPARE_SGIX 0x819A
+#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B
+#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C
+#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D
+
+#define GLEW_SGIX_shadow GLEW_GET_VAR(__GLEW_SGIX_shadow)
+
+#endif /* GL_SGIX_shadow */
+
+/* ------------------------- GL_SGIX_shadow_ambient ------------------------ */
+
+#ifndef GL_SGIX_shadow_ambient
+#define GL_SGIX_shadow_ambient 1
+
+#define GL_SHADOW_AMBIENT_SGIX 0x80BF
+
+#define GLEW_SGIX_shadow_ambient GLEW_GET_VAR(__GLEW_SGIX_shadow_ambient)
+
+#endif /* GL_SGIX_shadow_ambient */
+
+/* ----------------------------- GL_SGIX_sprite ---------------------------- */
+
+#ifndef GL_SGIX_sprite
+#define GL_SGIX_sprite 1
+
+typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param);
+typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, GLint* params);
+
+#define glSpriteParameterfSGIX GLEW_GET_FUN(__glewSpriteParameterfSGIX)
+#define glSpriteParameterfvSGIX GLEW_GET_FUN(__glewSpriteParameterfvSGIX)
+#define glSpriteParameteriSGIX GLEW_GET_FUN(__glewSpriteParameteriSGIX)
+#define glSpriteParameterivSGIX GLEW_GET_FUN(__glewSpriteParameterivSGIX)
+
+#define GLEW_SGIX_sprite GLEW_GET_VAR(__GLEW_SGIX_sprite)
+
+#endif /* GL_SGIX_sprite */
+
+/* ----------------------- GL_SGIX_tag_sample_buffer ----------------------- */
+
+#ifndef GL_SGIX_tag_sample_buffer
+#define GL_SGIX_tag_sample_buffer 1
+
+typedef void (GLAPIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void);
+
+#define glTagSampleBufferSGIX GLEW_GET_FUN(__glewTagSampleBufferSGIX)
+
+#define GLEW_SGIX_tag_sample_buffer GLEW_GET_VAR(__GLEW_SGIX_tag_sample_buffer)
+
+#endif /* GL_SGIX_tag_sample_buffer */
+
+/* ------------------------ GL_SGIX_texture_add_env ------------------------ */
+
+#ifndef GL_SGIX_texture_add_env
+#define GL_SGIX_texture_add_env 1
+
+#define GLEW_SGIX_texture_add_env GLEW_GET_VAR(__GLEW_SGIX_texture_add_env)
+
+#endif /* GL_SGIX_texture_add_env */
+
+/* -------------------- GL_SGIX_texture_coordinate_clamp ------------------- */
+
+#ifndef GL_SGIX_texture_coordinate_clamp
+#define GL_SGIX_texture_coordinate_clamp 1
+
+#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369
+#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A
+#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B
+
+#define GLEW_SGIX_texture_coordinate_clamp GLEW_GET_VAR(__GLEW_SGIX_texture_coordinate_clamp)
+
+#endif /* GL_SGIX_texture_coordinate_clamp */
+
+/* ------------------------ GL_SGIX_texture_lod_bias ----------------------- */
+
+#ifndef GL_SGIX_texture_lod_bias
+#define GL_SGIX_texture_lod_bias 1
+
+#define GLEW_SGIX_texture_lod_bias GLEW_GET_VAR(__GLEW_SGIX_texture_lod_bias)
+
+#endif /* GL_SGIX_texture_lod_bias */
+
+/* ---------------------- GL_SGIX_texture_multi_buffer --------------------- */
+
+#ifndef GL_SGIX_texture_multi_buffer
+#define GL_SGIX_texture_multi_buffer 1
+
+#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E
+
+#define GLEW_SGIX_texture_multi_buffer GLEW_GET_VAR(__GLEW_SGIX_texture_multi_buffer)
+
+#endif /* GL_SGIX_texture_multi_buffer */
+
+/* ------------------------- GL_SGIX_texture_range ------------------------- */
+
+#ifndef GL_SGIX_texture_range
+#define GL_SGIX_texture_range 1
+
+#define GL_RGB_SIGNED_SGIX 0x85E0
+#define GL_RGBA_SIGNED_SGIX 0x85E1
+#define GL_ALPHA_SIGNED_SGIX 0x85E2
+#define GL_LUMINANCE_SIGNED_SGIX 0x85E3
+#define GL_INTENSITY_SIGNED_SGIX 0x85E4
+#define GL_LUMINANCE_ALPHA_SIGNED_SGIX 0x85E5
+#define GL_RGB16_SIGNED_SGIX 0x85E6
+#define GL_RGBA16_SIGNED_SGIX 0x85E7
+#define GL_ALPHA16_SIGNED_SGIX 0x85E8
+#define GL_LUMINANCE16_SIGNED_SGIX 0x85E9
+#define GL_INTENSITY16_SIGNED_SGIX 0x85EA
+#define GL_LUMINANCE16_ALPHA16_SIGNED_SGIX 0x85EB
+#define GL_RGB_EXTENDED_RANGE_SGIX 0x85EC
+#define GL_RGBA_EXTENDED_RANGE_SGIX 0x85ED
+#define GL_ALPHA_EXTENDED_RANGE_SGIX 0x85EE
+#define GL_LUMINANCE_EXTENDED_RANGE_SGIX 0x85EF
+#define GL_INTENSITY_EXTENDED_RANGE_SGIX 0x85F0
+#define GL_LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX 0x85F1
+#define GL_RGB16_EXTENDED_RANGE_SGIX 0x85F2
+#define GL_RGBA16_EXTENDED_RANGE_SGIX 0x85F3
+#define GL_ALPHA16_EXTENDED_RANGE_SGIX 0x85F4
+#define GL_LUMINANCE16_EXTENDED_RANGE_SGIX 0x85F5
+#define GL_INTENSITY16_EXTENDED_RANGE_SGIX 0x85F6
+#define GL_LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX 0x85F7
+#define GL_MIN_LUMINANCE_SGIS 0x85F8
+#define GL_MAX_LUMINANCE_SGIS 0x85F9
+#define GL_MIN_INTENSITY_SGIS 0x85FA
+#define GL_MAX_INTENSITY_SGIS 0x85FB
+
+#define GLEW_SGIX_texture_range GLEW_GET_VAR(__GLEW_SGIX_texture_range)
+
+#endif /* GL_SGIX_texture_range */
+
+/* ----------------------- GL_SGIX_texture_scale_bias ---------------------- */
+
+#ifndef GL_SGIX_texture_scale_bias
+#define GL_SGIX_texture_scale_bias 1
+
+#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179
+#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A
+#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B
+#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C
+
+#define GLEW_SGIX_texture_scale_bias GLEW_GET_VAR(__GLEW_SGIX_texture_scale_bias)
+
+#endif /* GL_SGIX_texture_scale_bias */
+
+/* ------------------------- GL_SGIX_vertex_preclip ------------------------ */
+
+#ifndef GL_SGIX_vertex_preclip
+#define GL_SGIX_vertex_preclip 1
+
+#define GL_VERTEX_PRECLIP_SGIX 0x83EE
+#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF
+
+#define GLEW_SGIX_vertex_preclip GLEW_GET_VAR(__GLEW_SGIX_vertex_preclip)
+
+#endif /* GL_SGIX_vertex_preclip */
+
+/* ---------------------- GL_SGIX_vertex_preclip_hint ---------------------- */
+
+#ifndef GL_SGIX_vertex_preclip_hint
+#define GL_SGIX_vertex_preclip_hint 1
+
+#define GL_VERTEX_PRECLIP_SGIX 0x83EE
+#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF
+
+#define GLEW_SGIX_vertex_preclip_hint GLEW_GET_VAR(__GLEW_SGIX_vertex_preclip_hint)
+
+#endif /* GL_SGIX_vertex_preclip_hint */
+
+/* ----------------------------- GL_SGIX_ycrcb ----------------------------- */
+
+#ifndef GL_SGIX_ycrcb
+#define GL_SGIX_ycrcb 1
+
+#define GLEW_SGIX_ycrcb GLEW_GET_VAR(__GLEW_SGIX_ycrcb)
+
+#endif /* GL_SGIX_ycrcb */
+
+/* -------------------------- GL_SGI_color_matrix -------------------------- */
+
+#ifndef GL_SGI_color_matrix
+#define GL_SGI_color_matrix 1
+
+#define GL_COLOR_MATRIX_SGI 0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB
+
+#define GLEW_SGI_color_matrix GLEW_GET_VAR(__GLEW_SGI_color_matrix)
+
+#endif /* GL_SGI_color_matrix */
+
+/* --------------------------- GL_SGI_color_table -------------------------- */
+
+#ifndef GL_SGI_color_table
+#define GL_SGI_color_table 1
+
+#define GL_COLOR_TABLE_SGI 0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2
+#define GL_PROXY_COLOR_TABLE_SGI 0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5
+#define GL_COLOR_TABLE_SCALE_SGI 0x80D6
+#define GL_COLOR_TABLE_BIAS_SGI 0x80D7
+#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8
+#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9
+#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF
+
+typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint* params);
+typedef void (GLAPIENTRY * PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void* table);
+typedef void (GLAPIENTRY * PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat* params);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint* params);
+typedef void (GLAPIENTRY * PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void* table);
+
+#define glColorTableParameterfvSGI GLEW_GET_FUN(__glewColorTableParameterfvSGI)
+#define glColorTableParameterivSGI GLEW_GET_FUN(__glewColorTableParameterivSGI)
+#define glColorTableSGI GLEW_GET_FUN(__glewColorTableSGI)
+#define glCopyColorTableSGI GLEW_GET_FUN(__glewCopyColorTableSGI)
+#define glGetColorTableParameterfvSGI GLEW_GET_FUN(__glewGetColorTableParameterfvSGI)
+#define glGetColorTableParameterivSGI GLEW_GET_FUN(__glewGetColorTableParameterivSGI)
+#define glGetColorTableSGI GLEW_GET_FUN(__glewGetColorTableSGI)
+
+#define GLEW_SGI_color_table GLEW_GET_VAR(__GLEW_SGI_color_table)
+
+#endif /* GL_SGI_color_table */
+
+/* ----------------------- GL_SGI_texture_color_table ---------------------- */
+
+#ifndef GL_SGI_texture_color_table
+#define GL_SGI_texture_color_table 1
+
+#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC
+#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD
+
+#define GLEW_SGI_texture_color_table GLEW_GET_VAR(__GLEW_SGI_texture_color_table)
+
+#endif /* GL_SGI_texture_color_table */
+
+/* ------------------------- GL_SUNX_constant_data ------------------------- */
+
+#ifndef GL_SUNX_constant_data
+#define GL_SUNX_constant_data 1
+
+#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5
+#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6
+
+typedef void (GLAPIENTRY * PFNGLFINISHTEXTURESUNXPROC) (void);
+
+#define glFinishTextureSUNX GLEW_GET_FUN(__glewFinishTextureSUNX)
+
+#define GLEW_SUNX_constant_data GLEW_GET_VAR(__GLEW_SUNX_constant_data)
+
+#endif /* GL_SUNX_constant_data */
+
+/* -------------------- GL_SUN_convolution_border_modes -------------------- */
+
+#ifndef GL_SUN_convolution_border_modes
+#define GL_SUN_convolution_border_modes 1
+
+#define GL_WRAP_BORDER_SUN 0x81D4
+
+#define GLEW_SUN_convolution_border_modes GLEW_GET_VAR(__GLEW_SUN_convolution_border_modes)
+
+#endif /* GL_SUN_convolution_border_modes */
+
+/* -------------------------- GL_SUN_global_alpha -------------------------- */
+
+#ifndef GL_SUN_global_alpha
+#define GL_SUN_global_alpha 1
+
+#define GL_GLOBAL_ALPHA_SUN 0x81D9
+#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA
+
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor);
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor);
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor);
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor);
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor);
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor);
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor);
+typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor);
+
+#define glGlobalAlphaFactorbSUN GLEW_GET_FUN(__glewGlobalAlphaFactorbSUN)
+#define glGlobalAlphaFactordSUN GLEW_GET_FUN(__glewGlobalAlphaFactordSUN)
+#define glGlobalAlphaFactorfSUN GLEW_GET_FUN(__glewGlobalAlphaFactorfSUN)
+#define glGlobalAlphaFactoriSUN GLEW_GET_FUN(__glewGlobalAlphaFactoriSUN)
+#define glGlobalAlphaFactorsSUN GLEW_GET_FUN(__glewGlobalAlphaFactorsSUN)
+#define glGlobalAlphaFactorubSUN GLEW_GET_FUN(__glewGlobalAlphaFactorubSUN)
+#define glGlobalAlphaFactoruiSUN GLEW_GET_FUN(__glewGlobalAlphaFactoruiSUN)
+#define glGlobalAlphaFactorusSUN GLEW_GET_FUN(__glewGlobalAlphaFactorusSUN)
+
+#define GLEW_SUN_global_alpha GLEW_GET_VAR(__GLEW_SUN_global_alpha)
+
+#endif /* GL_SUN_global_alpha */
+
+/* --------------------------- GL_SUN_mesh_array --------------------------- */
+
+#ifndef GL_SUN_mesh_array
+#define GL_SUN_mesh_array 1
+
+#define GL_QUAD_MESH_SUN 0x8614
+#define GL_TRIANGLE_MESH_SUN 0x8615
+
+#define GLEW_SUN_mesh_array GLEW_GET_VAR(__GLEW_SUN_mesh_array)
+
+#endif /* GL_SUN_mesh_array */
+
+/* ------------------------ GL_SUN_read_video_pixels ----------------------- */
+
+#ifndef GL_SUN_read_video_pixels
+#define GL_SUN_read_video_pixels 1
+
+typedef void (GLAPIENTRY * PFNGLREADVIDEOPIXELSSUNPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
+
+#define glReadVideoPixelsSUN GLEW_GET_FUN(__glewReadVideoPixelsSUN)
+
+#define GLEW_SUN_read_video_pixels GLEW_GET_VAR(__GLEW_SUN_read_video_pixels)
+
+#endif /* GL_SUN_read_video_pixels */
+
+/* --------------------------- GL_SUN_slice_accum -------------------------- */
+
+#ifndef GL_SUN_slice_accum
+#define GL_SUN_slice_accum 1
+
+#define GL_SLICE_ACCUM_SUN 0x85CC
+
+#define GLEW_SUN_slice_accum GLEW_GET_VAR(__GLEW_SUN_slice_accum)
+
+#endif /* GL_SUN_slice_accum */
+
+/* -------------------------- GL_SUN_triangle_list ------------------------- */
+
+#ifndef GL_SUN_triangle_list
+#define GL_SUN_triangle_list 1
+
+#define GL_RESTART_SUN 0x01
+#define GL_REPLACE_MIDDLE_SUN 0x02
+#define GL_REPLACE_OLDEST_SUN 0x03
+#define GL_TRIANGLE_LIST_SUN 0x81D7
+#define GL_REPLACEMENT_CODE_SUN 0x81D8
+#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0
+#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1
+#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2
+#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3
+#define GL_R1UI_V3F_SUN 0x85C4
+#define GL_R1UI_C4UB_V3F_SUN 0x85C5
+#define GL_R1UI_C3F_V3F_SUN 0x85C6
+#define GL_R1UI_N3F_V3F_SUN 0x85C7
+#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8
+#define GL_R1UI_T2F_V3F_SUN 0x85C9
+#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA
+#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB
+
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void* pointer);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte* code);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint* code);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort* code);
+
+#define glReplacementCodePointerSUN GLEW_GET_FUN(__glewReplacementCodePointerSUN)
+#define glReplacementCodeubSUN GLEW_GET_FUN(__glewReplacementCodeubSUN)
+#define glReplacementCodeubvSUN GLEW_GET_FUN(__glewReplacementCodeubvSUN)
+#define glReplacementCodeuiSUN GLEW_GET_FUN(__glewReplacementCodeuiSUN)
+#define glReplacementCodeuivSUN GLEW_GET_FUN(__glewReplacementCodeuivSUN)
+#define glReplacementCodeusSUN GLEW_GET_FUN(__glewReplacementCodeusSUN)
+#define glReplacementCodeusvSUN GLEW_GET_FUN(__glewReplacementCodeusvSUN)
+
+#define GLEW_SUN_triangle_list GLEW_GET_VAR(__GLEW_SUN_triangle_list)
+
+#endif /* GL_SUN_triangle_list */
+
+/* ----------------------------- GL_SUN_vertex ----------------------------- */
+
+#ifndef GL_SUN_vertex
+#define GL_SUN_vertex 1
+
+typedef void (GLAPIENTRY * PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat* c, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* c, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);
+typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte* c, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte* c, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *c, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint* rc, const GLubyte *c, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat* tc, const GLubyte *c, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat* tc, const GLfloat *v);
+
+#define glColor3fVertex3fSUN GLEW_GET_FUN(__glewColor3fVertex3fSUN)
+#define glColor3fVertex3fvSUN GLEW_GET_FUN(__glewColor3fVertex3fvSUN)
+#define glColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewColor4fNormal3fVertex3fSUN)
+#define glColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewColor4fNormal3fVertex3fvSUN)
+#define glColor4ubVertex2fSUN GLEW_GET_FUN(__glewColor4ubVertex2fSUN)
+#define glColor4ubVertex2fvSUN GLEW_GET_FUN(__glewColor4ubVertex2fvSUN)
+#define glColor4ubVertex3fSUN GLEW_GET_FUN(__glewColor4ubVertex3fSUN)
+#define glColor4ubVertex3fvSUN GLEW_GET_FUN(__glewColor4ubVertex3fvSUN)
+#define glNormal3fVertex3fSUN GLEW_GET_FUN(__glewNormal3fVertex3fSUN)
+#define glNormal3fVertex3fvSUN GLEW_GET_FUN(__glewNormal3fVertex3fvSUN)
+#define glReplacementCodeuiColor3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor3fVertex3fSUN)
+#define glReplacementCodeuiColor3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor3fVertex3fvSUN)
+#define glReplacementCodeuiColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4fNormal3fVertex3fSUN)
+#define glReplacementCodeuiColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4fNormal3fVertex3fvSUN)
+#define glReplacementCodeuiColor4ubVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4ubVertex3fSUN)
+#define glReplacementCodeuiColor4ubVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4ubVertex3fvSUN)
+#define glReplacementCodeuiNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiNormal3fVertex3fSUN)
+#define glReplacementCodeuiNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiNormal3fVertex3fvSUN)
+#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN)
+#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN)
+#define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN)
+#define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN)
+#define glReplacementCodeuiTexCoord2fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fVertex3fSUN)
+#define glReplacementCodeuiTexCoord2fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fVertex3fvSUN)
+#define glReplacementCodeuiVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiVertex3fSUN)
+#define glReplacementCodeuiVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiVertex3fvSUN)
+#define glTexCoord2fColor3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor3fVertex3fSUN)
+#define glTexCoord2fColor3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor3fVertex3fvSUN)
+#define glTexCoord2fColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor4fNormal3fVertex3fSUN)
+#define glTexCoord2fColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor4fNormal3fVertex3fvSUN)
+#define glTexCoord2fColor4ubVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor4ubVertex3fSUN)
+#define glTexCoord2fColor4ubVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor4ubVertex3fvSUN)
+#define glTexCoord2fNormal3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fNormal3fVertex3fSUN)
+#define glTexCoord2fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fNormal3fVertex3fvSUN)
+#define glTexCoord2fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fVertex3fSUN)
+#define glTexCoord2fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fVertex3fvSUN)
+#define glTexCoord4fColor4fNormal3fVertex4fSUN GLEW_GET_FUN(__glewTexCoord4fColor4fNormal3fVertex4fSUN)
+#define glTexCoord4fColor4fNormal3fVertex4fvSUN GLEW_GET_FUN(__glewTexCoord4fColor4fNormal3fVertex4fvSUN)
+#define glTexCoord4fVertex4fSUN GLEW_GET_FUN(__glewTexCoord4fVertex4fSUN)
+#define glTexCoord4fVertex4fvSUN GLEW_GET_FUN(__glewTexCoord4fVertex4fvSUN)
+
+#define GLEW_SUN_vertex GLEW_GET_VAR(__GLEW_SUN_vertex)
+
+#endif /* GL_SUN_vertex */
+
+/* -------------------------- GL_WIN_phong_shading ------------------------- */
+
+#ifndef GL_WIN_phong_shading
+#define GL_WIN_phong_shading 1
+
+#define GL_PHONG_WIN 0x80EA
+#define GL_PHONG_HINT_WIN 0x80EB
+
+#define GLEW_WIN_phong_shading GLEW_GET_VAR(__GLEW_WIN_phong_shading)
+
+#endif /* GL_WIN_phong_shading */
+
+/* -------------------------- GL_WIN_specular_fog -------------------------- */
+
+#ifndef GL_WIN_specular_fog
+#define GL_WIN_specular_fog 1
+
+#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC
+
+#define GLEW_WIN_specular_fog GLEW_GET_VAR(__GLEW_WIN_specular_fog)
+
+#endif /* GL_WIN_specular_fog */
+
+/* ---------------------------- GL_WIN_swap_hint --------------------------- */
+
+#ifndef GL_WIN_swap_hint
+#define GL_WIN_swap_hint 1
+
+typedef void (GLAPIENTRY * PFNGLADDSWAPHINTRECTWINPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+
+#define glAddSwapHintRectWIN GLEW_GET_FUN(__glewAddSwapHintRectWIN)
+
+#define GLEW_WIN_swap_hint GLEW_GET_VAR(__GLEW_WIN_swap_hint)
+
+#endif /* GL_WIN_swap_hint */
+
+/* ------------------------------------------------------------------------- */
+
+#if defined(GLEW_MX) && defined(_WIN32)
+#define GLEW_FUN_EXPORT
+#else
+#define GLEW_FUN_EXPORT GLEWAPI
+#endif /* GLEW_MX */
+
+#if defined(GLEW_MX)
+#define GLEW_VAR_EXPORT
+#else
+#define GLEW_VAR_EXPORT GLEWAPI
+#endif /* GLEW_MX */
+
+#if defined(GLEW_MX) && defined(_WIN32)
+struct GLEWContextStruct
+{
+#endif /* GLEW_MX */
+
+GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D;
+GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSPROC __glewDrawRangeElements;
+GLEW_FUN_EXPORT PFNGLTEXIMAGE3DPROC __glewTexImage3D;
+GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DPROC __glewTexSubImage3D;
+
+GLEW_FUN_EXPORT PFNGLACTIVETEXTUREPROC __glewActiveTexture;
+GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREPROC __glewClientActiveTexture;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE1DPROC __glewCompressedTexImage1D;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE2DPROC __glewCompressedTexImage2D;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DPROC __glewCompressedTexImage3D;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC __glewCompressedTexSubImage1D;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC __glewCompressedTexSubImage2D;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC __glewCompressedTexSubImage3D;
+GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXIMAGEPROC __glewGetCompressedTexImage;
+GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDPROC __glewLoadTransposeMatrixd;
+GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFPROC __glewLoadTransposeMatrixf;
+GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDPROC __glewMultTransposeMatrixd;
+GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFPROC __glewMultTransposeMatrixf;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DPROC __glewMultiTexCoord1d;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVPROC __glewMultiTexCoord1dv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FPROC __glewMultiTexCoord1f;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVPROC __glewMultiTexCoord1fv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IPROC __glewMultiTexCoord1i;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVPROC __glewMultiTexCoord1iv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SPROC __glewMultiTexCoord1s;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVPROC __glewMultiTexCoord1sv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DPROC __glewMultiTexCoord2d;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVPROC __glewMultiTexCoord2dv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FPROC __glewMultiTexCoord2f;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVPROC __glewMultiTexCoord2fv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IPROC __glewMultiTexCoord2i;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVPROC __glewMultiTexCoord2iv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SPROC __glewMultiTexCoord2s;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVPROC __glewMultiTexCoord2sv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DPROC __glewMultiTexCoord3d;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVPROC __glewMultiTexCoord3dv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FPROC __glewMultiTexCoord3f;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVPROC __glewMultiTexCoord3fv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IPROC __glewMultiTexCoord3i;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVPROC __glewMultiTexCoord3iv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SPROC __glewMultiTexCoord3s;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVPROC __glewMultiTexCoord3sv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DPROC __glewMultiTexCoord4d;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVPROC __glewMultiTexCoord4dv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FPROC __glewMultiTexCoord4f;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVPROC __glewMultiTexCoord4fv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IPROC __glewMultiTexCoord4i;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVPROC __glewMultiTexCoord4iv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SPROC __glewMultiTexCoord4s;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVPROC __glewMultiTexCoord4sv;
+GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEPROC __glewSampleCoverage;
+
+GLEW_FUN_EXPORT PFNGLBLENDCOLORPROC __glewBlendColor;
+GLEW_FUN_EXPORT PFNGLBLENDEQUATIONPROC __glewBlendEquation;
+GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEPROC __glewBlendFuncSeparate;
+GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTERPROC __glewFogCoordPointer;
+GLEW_FUN_EXPORT PFNGLFOGCOORDDPROC __glewFogCoordd;
+GLEW_FUN_EXPORT PFNGLFOGCOORDDVPROC __glewFogCoorddv;
+GLEW_FUN_EXPORT PFNGLFOGCOORDFPROC __glewFogCoordf;
+GLEW_FUN_EXPORT PFNGLFOGCOORDFVPROC __glewFogCoordfv;
+GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSPROC __glewMultiDrawArrays;
+GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSPROC __glewMultiDrawElements;
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFPROC __glewPointParameterf;
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVPROC __glewPointParameterfv;
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIPROC __glewPointParameteri;
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIVPROC __glewPointParameteriv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BPROC __glewSecondaryColor3b;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BVPROC __glewSecondaryColor3bv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DPROC __glewSecondaryColor3d;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DVPROC __glewSecondaryColor3dv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FPROC __glewSecondaryColor3f;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FVPROC __glewSecondaryColor3fv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IPROC __glewSecondaryColor3i;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IVPROC __glewSecondaryColor3iv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SPROC __glewSecondaryColor3s;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SVPROC __glewSecondaryColor3sv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBPROC __glewSecondaryColor3ub;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBVPROC __glewSecondaryColor3ubv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIPROC __glewSecondaryColor3ui;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIVPROC __glewSecondaryColor3uiv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USPROC __glewSecondaryColor3us;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVPROC __glewSecondaryColor3usv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERPROC __glewSecondaryColorPointer;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2DPROC __glewWindowPos2d;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVPROC __glewWindowPos2dv;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2FPROC __glewWindowPos2f;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVPROC __glewWindowPos2fv;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2IPROC __glewWindowPos2i;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVPROC __glewWindowPos2iv;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2SPROC __glewWindowPos2s;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVPROC __glewWindowPos2sv;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3DPROC __glewWindowPos3d;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVPROC __glewWindowPos3dv;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3FPROC __glewWindowPos3f;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVPROC __glewWindowPos3fv;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3IPROC __glewWindowPos3i;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVPROC __glewWindowPos3iv;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3SPROC __glewWindowPos3s;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVPROC __glewWindowPos3sv;
+
+GLEW_FUN_EXPORT PFNGLBEGINQUERYPROC __glewBeginQuery;
+GLEW_FUN_EXPORT PFNGLBINDBUFFERPROC __glewBindBuffer;
+GLEW_FUN_EXPORT PFNGLBUFFERDATAPROC __glewBufferData;
+GLEW_FUN_EXPORT PFNGLBUFFERSUBDATAPROC __glewBufferSubData;
+GLEW_FUN_EXPORT PFNGLDELETEBUFFERSPROC __glewDeleteBuffers;
+GLEW_FUN_EXPORT PFNGLDELETEQUERIESPROC __glewDeleteQueries;
+GLEW_FUN_EXPORT PFNGLENDQUERYPROC __glewEndQuery;
+GLEW_FUN_EXPORT PFNGLGENBUFFERSPROC __glewGenBuffers;
+GLEW_FUN_EXPORT PFNGLGENQUERIESPROC __glewGenQueries;
+GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERIVPROC __glewGetBufferParameteriv;
+GLEW_FUN_EXPORT PFNGLGETBUFFERPOINTERVPROC __glewGetBufferPointerv;
+GLEW_FUN_EXPORT PFNGLGETBUFFERSUBDATAPROC __glewGetBufferSubData;
+GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVPROC __glewGetQueryObjectiv;
+GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVPROC __glewGetQueryObjectuiv;
+GLEW_FUN_EXPORT PFNGLGETQUERYIVPROC __glewGetQueryiv;
+GLEW_FUN_EXPORT PFNGLISBUFFERPROC __glewIsBuffer;
+GLEW_FUN_EXPORT PFNGLISQUERYPROC __glewIsQuery;
+GLEW_FUN_EXPORT PFNGLMAPBUFFERPROC __glewMapBuffer;
+GLEW_FUN_EXPORT PFNGLUNMAPBUFFERPROC __glewUnmapBuffer;
+
+GLEW_FUN_EXPORT PFNGLATTACHSHADERPROC __glewAttachShader;
+GLEW_FUN_EXPORT PFNGLBINDATTRIBLOCATIONPROC __glewBindAttribLocation;
+GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEPROC __glewBlendEquationSeparate;
+GLEW_FUN_EXPORT PFNGLCOMPILESHADERPROC __glewCompileShader;
+GLEW_FUN_EXPORT PFNGLCREATEPROGRAMPROC __glewCreateProgram;
+GLEW_FUN_EXPORT PFNGLCREATESHADERPROC __glewCreateShader;
+GLEW_FUN_EXPORT PFNGLDELETEPROGRAMPROC __glewDeleteProgram;
+GLEW_FUN_EXPORT PFNGLDELETESHADERPROC __glewDeleteShader;
+GLEW_FUN_EXPORT PFNGLDETACHSHADERPROC __glewDetachShader;
+GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBARRAYPROC __glewDisableVertexAttribArray;
+GLEW_FUN_EXPORT PFNGLDRAWBUFFERSPROC __glewDrawBuffers;
+GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBARRAYPROC __glewEnableVertexAttribArray;
+GLEW_FUN_EXPORT PFNGLGETACTIVEATTRIBPROC __glewGetActiveAttrib;
+GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMPROC __glewGetActiveUniform;
+GLEW_FUN_EXPORT PFNGLGETATTACHEDSHADERSPROC __glewGetAttachedShaders;
+GLEW_FUN_EXPORT PFNGLGETATTRIBLOCATIONPROC __glewGetAttribLocation;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMINFOLOGPROC __glewGetProgramInfoLog;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMIVPROC __glewGetProgramiv;
+GLEW_FUN_EXPORT PFNGLGETSHADERINFOLOGPROC __glewGetShaderInfoLog;
+GLEW_FUN_EXPORT PFNGLGETSHADERSOURCEPROC __glewGetShaderSource;
+GLEW_FUN_EXPORT PFNGLGETSHADERIVPROC __glewGetShaderiv;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMLOCATIONPROC __glewGetUniformLocation;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMFVPROC __glewGetUniformfv;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMIVPROC __glewGetUniformiv;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVPROC __glewGetVertexAttribPointerv;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVPROC __glewGetVertexAttribdv;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVPROC __glewGetVertexAttribfv;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVPROC __glewGetVertexAttribiv;
+GLEW_FUN_EXPORT PFNGLISPROGRAMPROC __glewIsProgram;
+GLEW_FUN_EXPORT PFNGLISSHADERPROC __glewIsShader;
+GLEW_FUN_EXPORT PFNGLLINKPROGRAMPROC __glewLinkProgram;
+GLEW_FUN_EXPORT PFNGLSHADERSOURCEPROC __glewShaderSource;
+GLEW_FUN_EXPORT PFNGLSTENCILFUNCSEPARATEPROC __glewStencilFuncSeparate;
+GLEW_FUN_EXPORT PFNGLSTENCILMASKSEPARATEPROC __glewStencilMaskSeparate;
+GLEW_FUN_EXPORT PFNGLSTENCILOPSEPARATEPROC __glewStencilOpSeparate;
+GLEW_FUN_EXPORT PFNGLUNIFORM1FPROC __glewUniform1f;
+GLEW_FUN_EXPORT PFNGLUNIFORM1FVPROC __glewUniform1fv;
+GLEW_FUN_EXPORT PFNGLUNIFORM1IPROC __glewUniform1i;
+GLEW_FUN_EXPORT PFNGLUNIFORM1IVPROC __glewUniform1iv;
+GLEW_FUN_EXPORT PFNGLUNIFORM2FPROC __glewUniform2f;
+GLEW_FUN_EXPORT PFNGLUNIFORM2FVPROC __glewUniform2fv;
+GLEW_FUN_EXPORT PFNGLUNIFORM2IPROC __glewUniform2i;
+GLEW_FUN_EXPORT PFNGLUNIFORM2IVPROC __glewUniform2iv;
+GLEW_FUN_EXPORT PFNGLUNIFORM3FPROC __glewUniform3f;
+GLEW_FUN_EXPORT PFNGLUNIFORM3FVPROC __glewUniform3fv;
+GLEW_FUN_EXPORT PFNGLUNIFORM3IPROC __glewUniform3i;
+GLEW_FUN_EXPORT PFNGLUNIFORM3IVPROC __glewUniform3iv;
+GLEW_FUN_EXPORT PFNGLUNIFORM4FPROC __glewUniform4f;
+GLEW_FUN_EXPORT PFNGLUNIFORM4FVPROC __glewUniform4fv;
+GLEW_FUN_EXPORT PFNGLUNIFORM4IPROC __glewUniform4i;
+GLEW_FUN_EXPORT PFNGLUNIFORM4IVPROC __glewUniform4iv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2FVPROC __glewUniformMatrix2fv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3FVPROC __glewUniformMatrix3fv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4FVPROC __glewUniformMatrix4fv;
+GLEW_FUN_EXPORT PFNGLUSEPROGRAMPROC __glewUseProgram;
+GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMPROC __glewValidateProgram;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DPROC __glewVertexAttrib1d;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVPROC __glewVertexAttrib1dv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FPROC __glewVertexAttrib1f;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVPROC __glewVertexAttrib1fv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SPROC __glewVertexAttrib1s;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVPROC __glewVertexAttrib1sv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DPROC __glewVertexAttrib2d;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVPROC __glewVertexAttrib2dv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FPROC __glewVertexAttrib2f;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVPROC __glewVertexAttrib2fv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SPROC __glewVertexAttrib2s;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVPROC __glewVertexAttrib2sv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DPROC __glewVertexAttrib3d;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVPROC __glewVertexAttrib3dv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FPROC __glewVertexAttrib3f;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVPROC __glewVertexAttrib3fv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SPROC __glewVertexAttrib3s;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVPROC __glewVertexAttrib3sv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NBVPROC __glewVertexAttrib4Nbv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NIVPROC __glewVertexAttrib4Niv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NSVPROC __glewVertexAttrib4Nsv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBPROC __glewVertexAttrib4Nub;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBVPROC __glewVertexAttrib4Nubv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUIVPROC __glewVertexAttrib4Nuiv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUSVPROC __glewVertexAttrib4Nusv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4BVPROC __glewVertexAttrib4bv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DPROC __glewVertexAttrib4d;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVPROC __glewVertexAttrib4dv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FPROC __glewVertexAttrib4f;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVPROC __glewVertexAttrib4fv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4IVPROC __glewVertexAttrib4iv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SPROC __glewVertexAttrib4s;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVPROC __glewVertexAttrib4sv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVPROC __glewVertexAttrib4ubv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UIVPROC __glewVertexAttrib4uiv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4USVPROC __glewVertexAttrib4usv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERPROC __glewVertexAttribPointer;
+
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X3FVPROC __glewUniformMatrix2x3fv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X4FVPROC __glewUniformMatrix2x4fv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X2FVPROC __glewUniformMatrix3x2fv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X4FVPROC __glewUniformMatrix3x4fv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X2FVPROC __glewUniformMatrix4x2fv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X3FVPROC __glewUniformMatrix4x3fv;
+
+GLEW_FUN_EXPORT PFNGLBEGINCONDITIONALRENDERPROC __glewBeginConditionalRender;
+GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKPROC __glewBeginTransformFeedback;
+GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONPROC __glewBindFragDataLocation;
+GLEW_FUN_EXPORT PFNGLCLAMPCOLORPROC __glewClampColor;
+GLEW_FUN_EXPORT PFNGLCLEARBUFFERFIPROC __glewClearBufferfi;
+GLEW_FUN_EXPORT PFNGLCLEARBUFFERFVPROC __glewClearBufferfv;
+GLEW_FUN_EXPORT PFNGLCLEARBUFFERIVPROC __glewClearBufferiv;
+GLEW_FUN_EXPORT PFNGLCLEARBUFFERUIVPROC __glewClearBufferuiv;
+GLEW_FUN_EXPORT PFNGLCOLORMASKIPROC __glewColorMaski;
+GLEW_FUN_EXPORT PFNGLDISABLEIPROC __glewDisablei;
+GLEW_FUN_EXPORT PFNGLENABLEIPROC __glewEnablei;
+GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERPROC __glewEndConditionalRender;
+GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKPROC __glewEndTransformFeedback;
+GLEW_FUN_EXPORT PFNGLGETBOOLEANI_VPROC __glewGetBooleani_v;
+GLEW_FUN_EXPORT PFNGLGETFRAGDATALOCATIONPROC __glewGetFragDataLocation;
+GLEW_FUN_EXPORT PFNGLGETSTRINGIPROC __glewGetStringi;
+GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIIVPROC __glewGetTexParameterIiv;
+GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIUIVPROC __glewGetTexParameterIuiv;
+GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGPROC __glewGetTransformFeedbackVarying;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMUIVPROC __glewGetUniformuiv;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIIVPROC __glewGetVertexAttribIiv;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIUIVPROC __glewGetVertexAttribIuiv;
+GLEW_FUN_EXPORT PFNGLISENABLEDIPROC __glewIsEnabledi;
+GLEW_FUN_EXPORT PFNGLTEXPARAMETERIIVPROC __glewTexParameterIiv;
+GLEW_FUN_EXPORT PFNGLTEXPARAMETERIUIVPROC __glewTexParameterIuiv;
+GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSPROC __glewTransformFeedbackVaryings;
+GLEW_FUN_EXPORT PFNGLUNIFORM1UIPROC __glewUniform1ui;
+GLEW_FUN_EXPORT PFNGLUNIFORM1UIVPROC __glewUniform1uiv;
+GLEW_FUN_EXPORT PFNGLUNIFORM2UIPROC __glewUniform2ui;
+GLEW_FUN_EXPORT PFNGLUNIFORM2UIVPROC __glewUniform2uiv;
+GLEW_FUN_EXPORT PFNGLUNIFORM3UIPROC __glewUniform3ui;
+GLEW_FUN_EXPORT PFNGLUNIFORM3UIVPROC __glewUniform3uiv;
+GLEW_FUN_EXPORT PFNGLUNIFORM4UIPROC __glewUniform4ui;
+GLEW_FUN_EXPORT PFNGLUNIFORM4UIVPROC __glewUniform4uiv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IPROC __glewVertexAttribI1i;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IVPROC __glewVertexAttribI1iv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIPROC __glewVertexAttribI1ui;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIVPROC __glewVertexAttribI1uiv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IPROC __glewVertexAttribI2i;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IVPROC __glewVertexAttribI2iv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIPROC __glewVertexAttribI2ui;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIVPROC __glewVertexAttribI2uiv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IPROC __glewVertexAttribI3i;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IVPROC __glewVertexAttribI3iv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIPROC __glewVertexAttribI3ui;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIVPROC __glewVertexAttribI3uiv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4BVPROC __glewVertexAttribI4bv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IPROC __glewVertexAttribI4i;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IVPROC __glewVertexAttribI4iv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4SVPROC __glewVertexAttribI4sv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UBVPROC __glewVertexAttribI4ubv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIPROC __glewVertexAttribI4ui;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIVPROC __glewVertexAttribI4uiv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4USVPROC __glewVertexAttribI4usv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIPOINTERPROC __glewVertexAttribIPointer;
+
+GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDPROC __glewDrawArraysInstanced;
+GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDPROC __glewDrawElementsInstanced;
+GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTINDEXPROC __glewPrimitiveRestartIndex;
+GLEW_FUN_EXPORT PFNGLTEXBUFFERPROC __glewTexBuffer;
+
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREPROC __glewFramebufferTexture;
+GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERI64VPROC __glewGetBufferParameteri64v;
+GLEW_FUN_EXPORT PFNGLGETINTEGER64I_VPROC __glewGetInteger64i_v;
+
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBDIVISORPROC __glewVertexAttribDivisor;
+
+GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEIPROC __glewBlendEquationSeparatei;
+GLEW_FUN_EXPORT PFNGLBLENDEQUATIONIPROC __glewBlendEquationi;
+GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEIPROC __glewBlendFuncSeparatei;
+GLEW_FUN_EXPORT PFNGLBLENDFUNCIPROC __glewBlendFunci;
+GLEW_FUN_EXPORT PFNGLMINSAMPLESHADINGPROC __glewMinSampleShading;
+
+GLEW_FUN_EXPORT PFNGLTBUFFERMASK3DFXPROC __glewTbufferMask3DFX;
+
+GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECALLBACKAMDPROC __glewDebugMessageCallbackAMD;
+GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEENABLEAMDPROC __glewDebugMessageEnableAMD;
+GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEINSERTAMDPROC __glewDebugMessageInsertAMD;
+GLEW_FUN_EXPORT PFNGLGETDEBUGMESSAGELOGAMDPROC __glewGetDebugMessageLogAMD;
+
+GLEW_FUN_EXPORT PFNGLBLENDEQUATIONINDEXEDAMDPROC __glewBlendEquationIndexedAMD;
+GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC __glewBlendEquationSeparateIndexedAMD;
+GLEW_FUN_EXPORT PFNGLBLENDFUNCINDEXEDAMDPROC __glewBlendFuncIndexedAMD;
+GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC __glewBlendFuncSeparateIndexedAMD;
+
+GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC __glewMultiDrawArraysIndirectAMD;
+GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC __glewMultiDrawElementsIndirectAMD;
+
+GLEW_FUN_EXPORT PFNGLDELETENAMESAMDPROC __glewDeleteNamesAMD;
+GLEW_FUN_EXPORT PFNGLGENNAMESAMDPROC __glewGenNamesAMD;
+GLEW_FUN_EXPORT PFNGLISNAMEAMDPROC __glewIsNameAMD;
+
+GLEW_FUN_EXPORT PFNGLBEGINPERFMONITORAMDPROC __glewBeginPerfMonitorAMD;
+GLEW_FUN_EXPORT PFNGLDELETEPERFMONITORSAMDPROC __glewDeletePerfMonitorsAMD;
+GLEW_FUN_EXPORT PFNGLENDPERFMONITORAMDPROC __glewEndPerfMonitorAMD;
+GLEW_FUN_EXPORT PFNGLGENPERFMONITORSAMDPROC __glewGenPerfMonitorsAMD;
+GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERDATAAMDPROC __glewGetPerfMonitorCounterDataAMD;
+GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERINFOAMDPROC __glewGetPerfMonitorCounterInfoAMD;
+GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC __glewGetPerfMonitorCounterStringAMD;
+GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERSAMDPROC __glewGetPerfMonitorCountersAMD;
+GLEW_FUN_EXPORT PFNGLGETPERFMONITORGROUPSTRINGAMDPROC __glewGetPerfMonitorGroupStringAMD;
+GLEW_FUN_EXPORT PFNGLGETPERFMONITORGROUPSAMDPROC __glewGetPerfMonitorGroupsAMD;
+GLEW_FUN_EXPORT PFNGLSELECTPERFMONITORCOUNTERSAMDPROC __glewSelectPerfMonitorCountersAMD;
+
+GLEW_FUN_EXPORT PFNGLSETMULTISAMPLEFVAMDPROC __glewSetMultisamplefvAMD;
+
+GLEW_FUN_EXPORT PFNGLTESSELLATIONFACTORAMDPROC __glewTessellationFactorAMD;
+GLEW_FUN_EXPORT PFNGLTESSELLATIONMODEAMDPROC __glewTessellationModeAMD;
+
+GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE;
+GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE;
+GLEW_FUN_EXPORT PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE;
+GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC __glewMultiDrawElementArrayAPPLE;
+GLEW_FUN_EXPORT PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC __glewMultiDrawRangeElementArrayAPPLE;
+
+GLEW_FUN_EXPORT PFNGLDELETEFENCESAPPLEPROC __glewDeleteFencesAPPLE;
+GLEW_FUN_EXPORT PFNGLFINISHFENCEAPPLEPROC __glewFinishFenceAPPLE;
+GLEW_FUN_EXPORT PFNGLFINISHOBJECTAPPLEPROC __glewFinishObjectAPPLE;
+GLEW_FUN_EXPORT PFNGLGENFENCESAPPLEPROC __glewGenFencesAPPLE;
+GLEW_FUN_EXPORT PFNGLISFENCEAPPLEPROC __glewIsFenceAPPLE;
+GLEW_FUN_EXPORT PFNGLSETFENCEAPPLEPROC __glewSetFenceAPPLE;
+GLEW_FUN_EXPORT PFNGLTESTFENCEAPPLEPROC __glewTestFenceAPPLE;
+GLEW_FUN_EXPORT PFNGLTESTOBJECTAPPLEPROC __glewTestObjectAPPLE;
+
+GLEW_FUN_EXPORT PFNGLBUFFERPARAMETERIAPPLEPROC __glewBufferParameteriAPPLE;
+GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC __glewFlushMappedBufferRangeAPPLE;
+
+GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERIVAPPLEPROC __glewGetObjectParameterivAPPLE;
+GLEW_FUN_EXPORT PFNGLOBJECTPURGEABLEAPPLEPROC __glewObjectPurgeableAPPLE;
+GLEW_FUN_EXPORT PFNGLOBJECTUNPURGEABLEAPPLEPROC __glewObjectUnpurgeableAPPLE;
+
+GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC __glewGetTexParameterPointervAPPLE;
+GLEW_FUN_EXPORT PFNGLTEXTURERANGEAPPLEPROC __glewTextureRangeAPPLE;
+
+GLEW_FUN_EXPORT PFNGLBINDVERTEXARRAYAPPLEPROC __glewBindVertexArrayAPPLE;
+GLEW_FUN_EXPORT PFNGLDELETEVERTEXARRAYSAPPLEPROC __glewDeleteVertexArraysAPPLE;
+GLEW_FUN_EXPORT PFNGLGENVERTEXARRAYSAPPLEPROC __glewGenVertexArraysAPPLE;
+GLEW_FUN_EXPORT PFNGLISVERTEXARRAYAPPLEPROC __glewIsVertexArrayAPPLE;
+
+GLEW_FUN_EXPORT PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC __glewFlushVertexArrayRangeAPPLE;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYPARAMETERIAPPLEPROC __glewVertexArrayParameteriAPPLE;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYRANGEAPPLEPROC __glewVertexArrayRangeAPPLE;
+
+GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBAPPLEPROC __glewDisableVertexAttribAPPLE;
+GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBAPPLEPROC __glewEnableVertexAttribAPPLE;
+GLEW_FUN_EXPORT PFNGLISVERTEXATTRIBENABLEDAPPLEPROC __glewIsVertexAttribEnabledAPPLE;
+GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB1DAPPLEPROC __glewMapVertexAttrib1dAPPLE;
+GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB1FAPPLEPROC __glewMapVertexAttrib1fAPPLE;
+GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB2DAPPLEPROC __glewMapVertexAttrib2dAPPLE;
+GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB2FAPPLEPROC __glewMapVertexAttrib2fAPPLE;
+
+GLEW_FUN_EXPORT PFNGLCLEARDEPTHFPROC __glewClearDepthf;
+GLEW_FUN_EXPORT PFNGLDEPTHRANGEFPROC __glewDepthRangef;
+GLEW_FUN_EXPORT PFNGLGETSHADERPRECISIONFORMATPROC __glewGetShaderPrecisionFormat;
+GLEW_FUN_EXPORT PFNGLRELEASESHADERCOMPILERPROC __glewReleaseShaderCompiler;
+GLEW_FUN_EXPORT PFNGLSHADERBINARYPROC __glewShaderBinary;
+
+GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC __glewDrawArraysInstancedBaseInstance;
+GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC __glewDrawElementsInstancedBaseInstance;
+GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC __glewDrawElementsInstancedBaseVertexBaseInstance;
+
+GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONINDEXEDPROC __glewBindFragDataLocationIndexed;
+GLEW_FUN_EXPORT PFNGLGETFRAGDATAINDEXPROC __glewGetFragDataIndex;
+
+GLEW_FUN_EXPORT PFNGLCREATESYNCFROMCLEVENTARBPROC __glewCreateSyncFromCLeventARB;
+
+GLEW_FUN_EXPORT PFNGLCLAMPCOLORARBPROC __glewClampColorARB;
+
+GLEW_FUN_EXPORT PFNGLCOPYBUFFERSUBDATAPROC __glewCopyBufferSubData;
+
+GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECALLBACKARBPROC __glewDebugMessageCallbackARB;
+GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECONTROLARBPROC __glewDebugMessageControlARB;
+GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEINSERTARBPROC __glewDebugMessageInsertARB;
+GLEW_FUN_EXPORT PFNGLGETDEBUGMESSAGELOGARBPROC __glewGetDebugMessageLogARB;
+
+GLEW_FUN_EXPORT PFNGLDRAWBUFFERSARBPROC __glewDrawBuffersARB;
+
+GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEIARBPROC __glewBlendEquationSeparateiARB;
+GLEW_FUN_EXPORT PFNGLBLENDEQUATIONIARBPROC __glewBlendEquationiARB;
+GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEIARBPROC __glewBlendFuncSeparateiARB;
+GLEW_FUN_EXPORT PFNGLBLENDFUNCIARBPROC __glewBlendFunciARB;
+
+GLEW_FUN_EXPORT PFNGLDRAWELEMENTSBASEVERTEXPROC __glewDrawElementsBaseVertex;
+GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC __glewDrawElementsInstancedBaseVertex;
+GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC __glewDrawRangeElementsBaseVertex;
+GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC __glewMultiDrawElementsBaseVertex;
+
+GLEW_FUN_EXPORT PFNGLDRAWARRAYSINDIRECTPROC __glewDrawArraysIndirect;
+GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINDIRECTPROC __glewDrawElementsIndirect;
+
+GLEW_FUN_EXPORT PFNGLBINDFRAMEBUFFERPROC __glewBindFramebuffer;
+GLEW_FUN_EXPORT PFNGLBINDRENDERBUFFERPROC __glewBindRenderbuffer;
+GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFERPROC __glewBlitFramebuffer;
+GLEW_FUN_EXPORT PFNGLCHECKFRAMEBUFFERSTATUSPROC __glewCheckFramebufferStatus;
+GLEW_FUN_EXPORT PFNGLDELETEFRAMEBUFFERSPROC __glewDeleteFramebuffers;
+GLEW_FUN_EXPORT PFNGLDELETERENDERBUFFERSPROC __glewDeleteRenderbuffers;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERRENDERBUFFERPROC __glewFramebufferRenderbuffer;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE1DPROC __glewFramebufferTexture1D;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE2DPROC __glewFramebufferTexture2D;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE3DPROC __glewFramebufferTexture3D;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYERPROC __glewFramebufferTextureLayer;
+GLEW_FUN_EXPORT PFNGLGENFRAMEBUFFERSPROC __glewGenFramebuffers;
+GLEW_FUN_EXPORT PFNGLGENRENDERBUFFERSPROC __glewGenRenderbuffers;
+GLEW_FUN_EXPORT PFNGLGENERATEMIPMAPPROC __glewGenerateMipmap;
+GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC __glewGetFramebufferAttachmentParameteriv;
+GLEW_FUN_EXPORT PFNGLGETRENDERBUFFERPARAMETERIVPROC __glewGetRenderbufferParameteriv;
+GLEW_FUN_EXPORT PFNGLISFRAMEBUFFERPROC __glewIsFramebuffer;
+GLEW_FUN_EXPORT PFNGLISRENDERBUFFERPROC __glewIsRenderbuffer;
+GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEPROC __glewRenderbufferStorage;
+GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC __glewRenderbufferStorageMultisample;
+
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREARBPROC __glewFramebufferTextureARB;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREFACEARBPROC __glewFramebufferTextureFaceARB;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYERARBPROC __glewFramebufferTextureLayerARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIARBPROC __glewProgramParameteriARB;
+
+GLEW_FUN_EXPORT PFNGLGETPROGRAMBINARYPROC __glewGetProgramBinary;
+GLEW_FUN_EXPORT PFNGLPROGRAMBINARYPROC __glewProgramBinary;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIPROC __glewProgramParameteri;
+
+GLEW_FUN_EXPORT PFNGLGETUNIFORMDVPROC __glewGetUniformdv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1DEXTPROC __glewProgramUniform1dEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1DVEXTPROC __glewProgramUniform1dvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2DEXTPROC __glewProgramUniform2dEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2DVEXTPROC __glewProgramUniform2dvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3DEXTPROC __glewProgramUniform3dEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3DVEXTPROC __glewProgramUniform3dvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4DEXTPROC __glewProgramUniform4dEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4DVEXTPROC __glewProgramUniform4dvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC __glewProgramUniformMatrix2dvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC __glewProgramUniformMatrix2x3dvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC __glewProgramUniformMatrix2x4dvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC __glewProgramUniformMatrix3dvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC __glewProgramUniformMatrix3x2dvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC __glewProgramUniformMatrix3x4dvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC __glewProgramUniformMatrix4dvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC __glewProgramUniformMatrix4x2dvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC __glewProgramUniformMatrix4x3dvEXT;
+GLEW_FUN_EXPORT PFNGLUNIFORM1DPROC __glewUniform1d;
+GLEW_FUN_EXPORT PFNGLUNIFORM1DVPROC __glewUniform1dv;
+GLEW_FUN_EXPORT PFNGLUNIFORM2DPROC __glewUniform2d;
+GLEW_FUN_EXPORT PFNGLUNIFORM2DVPROC __glewUniform2dv;
+GLEW_FUN_EXPORT PFNGLUNIFORM3DPROC __glewUniform3d;
+GLEW_FUN_EXPORT PFNGLUNIFORM3DVPROC __glewUniform3dv;
+GLEW_FUN_EXPORT PFNGLUNIFORM4DPROC __glewUniform4d;
+GLEW_FUN_EXPORT PFNGLUNIFORM4DVPROC __glewUniform4dv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2DVPROC __glewUniformMatrix2dv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X3DVPROC __glewUniformMatrix2x3dv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X4DVPROC __glewUniformMatrix2x4dv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3DVPROC __glewUniformMatrix3dv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X2DVPROC __glewUniformMatrix3x2dv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X4DVPROC __glewUniformMatrix3x4dv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4DVPROC __glewUniformMatrix4dv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X2DVPROC __glewUniformMatrix4x2dv;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X3DVPROC __glewUniformMatrix4x3dv;
+
+GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEPROC __glewColorSubTable;
+GLEW_FUN_EXPORT PFNGLCOLORTABLEPROC __glewColorTable;
+GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVPROC __glewColorTableParameterfv;
+GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVPROC __glewColorTableParameteriv;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DPROC __glewConvolutionFilter1D;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DPROC __glewConvolutionFilter2D;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFPROC __glewConvolutionParameterf;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVPROC __glewConvolutionParameterfv;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIPROC __glewConvolutionParameteri;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVPROC __glewConvolutionParameteriv;
+GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEPROC __glewCopyColorSubTable;
+GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLEPROC __glewCopyColorTable;
+GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DPROC __glewCopyConvolutionFilter1D;
+GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DPROC __glewCopyConvolutionFilter2D;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPROC __glewGetColorTable;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVPROC __glewGetColorTableParameterfv;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVPROC __glewGetColorTableParameteriv;
+GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTERPROC __glewGetConvolutionFilter;
+GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVPROC __glewGetConvolutionParameterfv;
+GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVPROC __glewGetConvolutionParameteriv;
+GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPROC __glewGetHistogram;
+GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVPROC __glewGetHistogramParameterfv;
+GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVPROC __glewGetHistogramParameteriv;
+GLEW_FUN_EXPORT PFNGLGETMINMAXPROC __glewGetMinmax;
+GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERFVPROC __glewGetMinmaxParameterfv;
+GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERIVPROC __glewGetMinmaxParameteriv;
+GLEW_FUN_EXPORT PFNGLGETSEPARABLEFILTERPROC __glewGetSeparableFilter;
+GLEW_FUN_EXPORT PFNGLHISTOGRAMPROC __glewHistogram;
+GLEW_FUN_EXPORT PFNGLMINMAXPROC __glewMinmax;
+GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMPROC __glewResetHistogram;
+GLEW_FUN_EXPORT PFNGLRESETMINMAXPROC __glewResetMinmax;
+GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DPROC __glewSeparableFilter2D;
+
+GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDARBPROC __glewDrawArraysInstancedARB;
+GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDARBPROC __glewDrawElementsInstancedARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBDIVISORARBPROC __glewVertexAttribDivisorARB;
+
+GLEW_FUN_EXPORT PFNGLGETINTERNALFORMATIVPROC __glewGetInternalformativ;
+
+GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDBUFFERRANGEPROC __glewFlushMappedBufferRange;
+GLEW_FUN_EXPORT PFNGLMAPBUFFERRANGEPROC __glewMapBufferRange;
+
+GLEW_FUN_EXPORT PFNGLCURRENTPALETTEMATRIXARBPROC __glewCurrentPaletteMatrixARB;
+GLEW_FUN_EXPORT PFNGLMATRIXINDEXPOINTERARBPROC __glewMatrixIndexPointerARB;
+GLEW_FUN_EXPORT PFNGLMATRIXINDEXUBVARBPROC __glewMatrixIndexubvARB;
+GLEW_FUN_EXPORT PFNGLMATRIXINDEXUIVARBPROC __glewMatrixIndexuivARB;
+GLEW_FUN_EXPORT PFNGLMATRIXINDEXUSVARBPROC __glewMatrixIndexusvARB;
+
+GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEARBPROC __glewSampleCoverageARB;
+
+GLEW_FUN_EXPORT PFNGLACTIVETEXTUREARBPROC __glewActiveTextureARB;
+GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREARBPROC __glewClientActiveTextureARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DARBPROC __glewMultiTexCoord1dARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVARBPROC __glewMultiTexCoord1dvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FARBPROC __glewMultiTexCoord1fARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVARBPROC __glewMultiTexCoord1fvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IARBPROC __glewMultiTexCoord1iARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVARBPROC __glewMultiTexCoord1ivARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SARBPROC __glewMultiTexCoord1sARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVARBPROC __glewMultiTexCoord1svARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DARBPROC __glewMultiTexCoord2dARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVARBPROC __glewMultiTexCoord2dvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FARBPROC __glewMultiTexCoord2fARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVARBPROC __glewMultiTexCoord2fvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IARBPROC __glewMultiTexCoord2iARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVARBPROC __glewMultiTexCoord2ivARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SARBPROC __glewMultiTexCoord2sARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVARBPROC __glewMultiTexCoord2svARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DARBPROC __glewMultiTexCoord3dARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVARBPROC __glewMultiTexCoord3dvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FARBPROC __glewMultiTexCoord3fARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVARBPROC __glewMultiTexCoord3fvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IARBPROC __glewMultiTexCoord3iARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVARBPROC __glewMultiTexCoord3ivARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SARBPROC __glewMultiTexCoord3sARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVARBPROC __glewMultiTexCoord3svARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DARBPROC __glewMultiTexCoord4dARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVARBPROC __glewMultiTexCoord4dvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FARBPROC __glewMultiTexCoord4fARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVARBPROC __glewMultiTexCoord4fvARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IARBPROC __glewMultiTexCoord4iARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVARBPROC __glewMultiTexCoord4ivARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SARBPROC __glewMultiTexCoord4sARB;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVARBPROC __glewMultiTexCoord4svARB;
+
+GLEW_FUN_EXPORT PFNGLBEGINQUERYARBPROC __glewBeginQueryARB;
+GLEW_FUN_EXPORT PFNGLDELETEQUERIESARBPROC __glewDeleteQueriesARB;
+GLEW_FUN_EXPORT PFNGLENDQUERYARBPROC __glewEndQueryARB;
+GLEW_FUN_EXPORT PFNGLGENQUERIESARBPROC __glewGenQueriesARB;
+GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVARBPROC __glewGetQueryObjectivARB;
+GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVARBPROC __glewGetQueryObjectuivARB;
+GLEW_FUN_EXPORT PFNGLGETQUERYIVARBPROC __glewGetQueryivARB;
+GLEW_FUN_EXPORT PFNGLISQUERYARBPROC __glewIsQueryARB;
+
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFARBPROC __glewPointParameterfARB;
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVARBPROC __glewPointParameterfvARB;
+
+GLEW_FUN_EXPORT PFNGLPROVOKINGVERTEXPROC __glewProvokingVertex;
+
+GLEW_FUN_EXPORT PFNGLGETGRAPHICSRESETSTATUSARBPROC __glewGetGraphicsResetStatusARB;
+GLEW_FUN_EXPORT PFNGLGETNCOLORTABLEARBPROC __glewGetnColorTableARB;
+GLEW_FUN_EXPORT PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC __glewGetnCompressedTexImageARB;
+GLEW_FUN_EXPORT PFNGLGETNCONVOLUTIONFILTERARBPROC __glewGetnConvolutionFilterARB;
+GLEW_FUN_EXPORT PFNGLGETNHISTOGRAMARBPROC __glewGetnHistogramARB;
+GLEW_FUN_EXPORT PFNGLGETNMAPDVARBPROC __glewGetnMapdvARB;
+GLEW_FUN_EXPORT PFNGLGETNMAPFVARBPROC __glewGetnMapfvARB;
+GLEW_FUN_EXPORT PFNGLGETNMAPIVARBPROC __glewGetnMapivARB;
+GLEW_FUN_EXPORT PFNGLGETNMINMAXARBPROC __glewGetnMinmaxARB;
+GLEW_FUN_EXPORT PFNGLGETNPIXELMAPFVARBPROC __glewGetnPixelMapfvARB;
+GLEW_FUN_EXPORT PFNGLGETNPIXELMAPUIVARBPROC __glewGetnPixelMapuivARB;
+GLEW_FUN_EXPORT PFNGLGETNPIXELMAPUSVARBPROC __glewGetnPixelMapusvARB;
+GLEW_FUN_EXPORT PFNGLGETNPOLYGONSTIPPLEARBPROC __glewGetnPolygonStippleARB;
+GLEW_FUN_EXPORT PFNGLGETNSEPARABLEFILTERARBPROC __glewGetnSeparableFilterARB;
+GLEW_FUN_EXPORT PFNGLGETNTEXIMAGEARBPROC __glewGetnTexImageARB;
+GLEW_FUN_EXPORT PFNGLGETNUNIFORMDVARBPROC __glewGetnUniformdvARB;
+GLEW_FUN_EXPORT PFNGLGETNUNIFORMFVARBPROC __glewGetnUniformfvARB;
+GLEW_FUN_EXPORT PFNGLGETNUNIFORMIVARBPROC __glewGetnUniformivARB;
+GLEW_FUN_EXPORT PFNGLGETNUNIFORMUIVARBPROC __glewGetnUniformuivARB;
+GLEW_FUN_EXPORT PFNGLREADNPIXELSARBPROC __glewReadnPixelsARB;
+
+GLEW_FUN_EXPORT PFNGLMINSAMPLESHADINGARBPROC __glewMinSampleShadingARB;
+
+GLEW_FUN_EXPORT PFNGLBINDSAMPLERPROC __glewBindSampler;
+GLEW_FUN_EXPORT PFNGLDELETESAMPLERSPROC __glewDeleteSamplers;
+GLEW_FUN_EXPORT PFNGLGENSAMPLERSPROC __glewGenSamplers;
+GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERIIVPROC __glewGetSamplerParameterIiv;
+GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERIUIVPROC __glewGetSamplerParameterIuiv;
+GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERFVPROC __glewGetSamplerParameterfv;
+GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERIVPROC __glewGetSamplerParameteriv;
+GLEW_FUN_EXPORT PFNGLISSAMPLERPROC __glewIsSampler;
+GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIIVPROC __glewSamplerParameterIiv;
+GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIUIVPROC __glewSamplerParameterIuiv;
+GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERFPROC __glewSamplerParameterf;
+GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERFVPROC __glewSamplerParameterfv;
+GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIPROC __glewSamplerParameteri;
+GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIVPROC __glewSamplerParameteriv;
+
+GLEW_FUN_EXPORT PFNGLACTIVESHADERPROGRAMPROC __glewActiveShaderProgram;
+GLEW_FUN_EXPORT PFNGLBINDPROGRAMPIPELINEPROC __glewBindProgramPipeline;
+GLEW_FUN_EXPORT PFNGLCREATESHADERPROGRAMVPROC __glewCreateShaderProgramv;
+GLEW_FUN_EXPORT PFNGLDELETEPROGRAMPIPELINESPROC __glewDeleteProgramPipelines;
+GLEW_FUN_EXPORT PFNGLGENPROGRAMPIPELINESPROC __glewGenProgramPipelines;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMPIPELINEINFOLOGPROC __glewGetProgramPipelineInfoLog;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMPIPELINEIVPROC __glewGetProgramPipelineiv;
+GLEW_FUN_EXPORT PFNGLISPROGRAMPIPELINEPROC __glewIsProgramPipeline;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1DPROC __glewProgramUniform1d;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1DVPROC __glewProgramUniform1dv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FPROC __glewProgramUniform1f;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FVPROC __glewProgramUniform1fv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IPROC __glewProgramUniform1i;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IVPROC __glewProgramUniform1iv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIPROC __glewProgramUniform1ui;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIVPROC __glewProgramUniform1uiv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2DPROC __glewProgramUniform2d;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2DVPROC __glewProgramUniform2dv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FPROC __glewProgramUniform2f;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FVPROC __glewProgramUniform2fv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IPROC __glewProgramUniform2i;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IVPROC __glewProgramUniform2iv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIPROC __glewProgramUniform2ui;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIVPROC __glewProgramUniform2uiv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3DPROC __glewProgramUniform3d;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3DVPROC __glewProgramUniform3dv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FPROC __glewProgramUniform3f;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FVPROC __glewProgramUniform3fv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IPROC __glewProgramUniform3i;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IVPROC __glewProgramUniform3iv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIPROC __glewProgramUniform3ui;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIVPROC __glewProgramUniform3uiv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4DPROC __glewProgramUniform4d;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4DVPROC __glewProgramUniform4dv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FPROC __glewProgramUniform4f;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FVPROC __glewProgramUniform4fv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IPROC __glewProgramUniform4i;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IVPROC __glewProgramUniform4iv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIPROC __glewProgramUniform4ui;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIVPROC __glewProgramUniform4uiv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2DVPROC __glewProgramUniformMatrix2dv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2FVPROC __glewProgramUniformMatrix2fv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC __glewProgramUniformMatrix2x3dv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC __glewProgramUniformMatrix2x3fv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC __glewProgramUniformMatrix2x4dv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC __glewProgramUniformMatrix2x4fv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3DVPROC __glewProgramUniformMatrix3dv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3FVPROC __glewProgramUniformMatrix3fv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC __glewProgramUniformMatrix3x2dv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC __glewProgramUniformMatrix3x2fv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC __glewProgramUniformMatrix3x4dv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC __glewProgramUniformMatrix3x4fv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4DVPROC __glewProgramUniformMatrix4dv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4FVPROC __glewProgramUniformMatrix4fv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC __glewProgramUniformMatrix4x2dv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC __glewProgramUniformMatrix4x2fv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC __glewProgramUniformMatrix4x3dv;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC __glewProgramUniformMatrix4x3fv;
+GLEW_FUN_EXPORT PFNGLUSEPROGRAMSTAGESPROC __glewUseProgramStages;
+GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMPIPELINEPROC __glewValidateProgramPipeline;
+
+GLEW_FUN_EXPORT PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC __glewGetActiveAtomicCounterBufferiv;
+
+GLEW_FUN_EXPORT PFNGLBINDIMAGETEXTUREPROC __glewBindImageTexture;
+GLEW_FUN_EXPORT PFNGLMEMORYBARRIERPROC __glewMemoryBarrier;
+
+GLEW_FUN_EXPORT PFNGLATTACHOBJECTARBPROC __glewAttachObjectARB;
+GLEW_FUN_EXPORT PFNGLCOMPILESHADERARBPROC __glewCompileShaderARB;
+GLEW_FUN_EXPORT PFNGLCREATEPROGRAMOBJECTARBPROC __glewCreateProgramObjectARB;
+GLEW_FUN_EXPORT PFNGLCREATESHADEROBJECTARBPROC __glewCreateShaderObjectARB;
+GLEW_FUN_EXPORT PFNGLDELETEOBJECTARBPROC __glewDeleteObjectARB;
+GLEW_FUN_EXPORT PFNGLDETACHOBJECTARBPROC __glewDetachObjectARB;
+GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMARBPROC __glewGetActiveUniformARB;
+GLEW_FUN_EXPORT PFNGLGETATTACHEDOBJECTSARBPROC __glewGetAttachedObjectsARB;
+GLEW_FUN_EXPORT PFNGLGETHANDLEARBPROC __glewGetHandleARB;
+GLEW_FUN_EXPORT PFNGLGETINFOLOGARBPROC __glewGetInfoLogARB;
+GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERFVARBPROC __glewGetObjectParameterfvARB;
+GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERIVARBPROC __glewGetObjectParameterivARB;
+GLEW_FUN_EXPORT PFNGLGETSHADERSOURCEARBPROC __glewGetShaderSourceARB;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMLOCATIONARBPROC __glewGetUniformLocationARB;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMFVARBPROC __glewGetUniformfvARB;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMIVARBPROC __glewGetUniformivARB;
+GLEW_FUN_EXPORT PFNGLLINKPROGRAMARBPROC __glewLinkProgramARB;
+GLEW_FUN_EXPORT PFNGLSHADERSOURCEARBPROC __glewShaderSourceARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM1FARBPROC __glewUniform1fARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM1FVARBPROC __glewUniform1fvARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM1IARBPROC __glewUniform1iARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM1IVARBPROC __glewUniform1ivARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM2FARBPROC __glewUniform2fARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM2FVARBPROC __glewUniform2fvARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM2IARBPROC __glewUniform2iARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM2IVARBPROC __glewUniform2ivARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM3FARBPROC __glewUniform3fARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM3FVARBPROC __glewUniform3fvARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM3IARBPROC __glewUniform3iARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM3IVARBPROC __glewUniform3ivARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM4FARBPROC __glewUniform4fARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM4FVARBPROC __glewUniform4fvARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM4IARBPROC __glewUniform4iARB;
+GLEW_FUN_EXPORT PFNGLUNIFORM4IVARBPROC __glewUniform4ivARB;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2FVARBPROC __glewUniformMatrix2fvARB;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3FVARBPROC __glewUniformMatrix3fvARB;
+GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4FVARBPROC __glewUniformMatrix4fvARB;
+GLEW_FUN_EXPORT PFNGLUSEPROGRAMOBJECTARBPROC __glewUseProgramObjectARB;
+GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMARBPROC __glewValidateProgramARB;
+
+GLEW_FUN_EXPORT PFNGLGETACTIVESUBROUTINENAMEPROC __glewGetActiveSubroutineName;
+GLEW_FUN_EXPORT PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC __glewGetActiveSubroutineUniformName;
+GLEW_FUN_EXPORT PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC __glewGetActiveSubroutineUniformiv;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMSTAGEIVPROC __glewGetProgramStageiv;
+GLEW_FUN_EXPORT PFNGLGETSUBROUTINEINDEXPROC __glewGetSubroutineIndex;
+GLEW_FUN_EXPORT PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC __glewGetSubroutineUniformLocation;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMSUBROUTINEUIVPROC __glewGetUniformSubroutineuiv;
+GLEW_FUN_EXPORT PFNGLUNIFORMSUBROUTINESUIVPROC __glewUniformSubroutinesuiv;
+
+GLEW_FUN_EXPORT PFNGLCOMPILESHADERINCLUDEARBPROC __glewCompileShaderIncludeARB;
+GLEW_FUN_EXPORT PFNGLDELETENAMEDSTRINGARBPROC __glewDeleteNamedStringARB;
+GLEW_FUN_EXPORT PFNGLGETNAMEDSTRINGARBPROC __glewGetNamedStringARB;
+GLEW_FUN_EXPORT PFNGLGETNAMEDSTRINGIVARBPROC __glewGetNamedStringivARB;
+GLEW_FUN_EXPORT PFNGLISNAMEDSTRINGARBPROC __glewIsNamedStringARB;
+GLEW_FUN_EXPORT PFNGLNAMEDSTRINGARBPROC __glewNamedStringARB;
+
+GLEW_FUN_EXPORT PFNGLCLIENTWAITSYNCPROC __glewClientWaitSync;
+GLEW_FUN_EXPORT PFNGLDELETESYNCPROC __glewDeleteSync;
+GLEW_FUN_EXPORT PFNGLFENCESYNCPROC __glewFenceSync;
+GLEW_FUN_EXPORT PFNGLGETINTEGER64VPROC __glewGetInteger64v;
+GLEW_FUN_EXPORT PFNGLGETSYNCIVPROC __glewGetSynciv;
+GLEW_FUN_EXPORT PFNGLISSYNCPROC __glewIsSync;
+GLEW_FUN_EXPORT PFNGLWAITSYNCPROC __glewWaitSync;
+
+GLEW_FUN_EXPORT PFNGLPATCHPARAMETERFVPROC __glewPatchParameterfv;
+GLEW_FUN_EXPORT PFNGLPATCHPARAMETERIPROC __glewPatchParameteri;
+
+GLEW_FUN_EXPORT PFNGLTEXBUFFERARBPROC __glewTexBufferARB;
+
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE1DARBPROC __glewCompressedTexImage1DARB;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE2DARBPROC __glewCompressedTexImage2DARB;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DARBPROC __glewCompressedTexImage3DARB;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC __glewCompressedTexSubImage1DARB;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC __glewCompressedTexSubImage2DARB;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC __glewCompressedTexSubImage3DARB;
+GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXIMAGEARBPROC __glewGetCompressedTexImageARB;
+
+GLEW_FUN_EXPORT PFNGLGETMULTISAMPLEFVPROC __glewGetMultisamplefv;
+GLEW_FUN_EXPORT PFNGLSAMPLEMASKIPROC __glewSampleMaski;
+GLEW_FUN_EXPORT PFNGLTEXIMAGE2DMULTISAMPLEPROC __glewTexImage2DMultisample;
+GLEW_FUN_EXPORT PFNGLTEXIMAGE3DMULTISAMPLEPROC __glewTexImage3DMultisample;
+
+GLEW_FUN_EXPORT PFNGLTEXSTORAGE1DPROC __glewTexStorage1D;
+GLEW_FUN_EXPORT PFNGLTEXSTORAGE2DPROC __glewTexStorage2D;
+GLEW_FUN_EXPORT PFNGLTEXSTORAGE3DPROC __glewTexStorage3D;
+GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE1DEXTPROC __glewTextureStorage1DEXT;
+GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE2DEXTPROC __glewTextureStorage2DEXT;
+GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE3DEXTPROC __glewTextureStorage3DEXT;
+
+GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTI64VPROC __glewGetQueryObjecti64v;
+GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUI64VPROC __glewGetQueryObjectui64v;
+GLEW_FUN_EXPORT PFNGLQUERYCOUNTERPROC __glewQueryCounter;
+
+GLEW_FUN_EXPORT PFNGLBINDTRANSFORMFEEDBACKPROC __glewBindTransformFeedback;
+GLEW_FUN_EXPORT PFNGLDELETETRANSFORMFEEDBACKSPROC __glewDeleteTransformFeedbacks;
+GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKPROC __glewDrawTransformFeedback;
+GLEW_FUN_EXPORT PFNGLGENTRANSFORMFEEDBACKSPROC __glewGenTransformFeedbacks;
+GLEW_FUN_EXPORT PFNGLISTRANSFORMFEEDBACKPROC __glewIsTransformFeedback;
+GLEW_FUN_EXPORT PFNGLPAUSETRANSFORMFEEDBACKPROC __glewPauseTransformFeedback;
+GLEW_FUN_EXPORT PFNGLRESUMETRANSFORMFEEDBACKPROC __glewResumeTransformFeedback;
+
+GLEW_FUN_EXPORT PFNGLBEGINQUERYINDEXEDPROC __glewBeginQueryIndexed;
+GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC __glewDrawTransformFeedbackStream;
+GLEW_FUN_EXPORT PFNGLENDQUERYINDEXEDPROC __glewEndQueryIndexed;
+GLEW_FUN_EXPORT PFNGLGETQUERYINDEXEDIVPROC __glewGetQueryIndexediv;
+
+GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC __glewDrawTransformFeedbackInstanced;
+GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC __glewDrawTransformFeedbackStreamInstanced;
+
+GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDARBPROC __glewLoadTransposeMatrixdARB;
+GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFARBPROC __glewLoadTransposeMatrixfARB;
+GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDARBPROC __glewMultTransposeMatrixdARB;
+GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFARBPROC __glewMultTransposeMatrixfARB;
+
+GLEW_FUN_EXPORT PFNGLBINDBUFFERBASEPROC __glewBindBufferBase;
+GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGEPROC __glewBindBufferRange;
+GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC __glewGetActiveUniformBlockName;
+GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMBLOCKIVPROC __glewGetActiveUniformBlockiv;
+GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMNAMEPROC __glewGetActiveUniformName;
+GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMSIVPROC __glewGetActiveUniformsiv;
+GLEW_FUN_EXPORT PFNGLGETINTEGERI_VPROC __glewGetIntegeri_v;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMBLOCKINDEXPROC __glewGetUniformBlockIndex;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMINDICESPROC __glewGetUniformIndices;
+GLEW_FUN_EXPORT PFNGLUNIFORMBLOCKBINDINGPROC __glewUniformBlockBinding;
+
+GLEW_FUN_EXPORT PFNGLBINDVERTEXARRAYPROC __glewBindVertexArray;
+GLEW_FUN_EXPORT PFNGLDELETEVERTEXARRAYSPROC __glewDeleteVertexArrays;
+GLEW_FUN_EXPORT PFNGLGENVERTEXARRAYSPROC __glewGenVertexArrays;
+GLEW_FUN_EXPORT PFNGLISVERTEXARRAYPROC __glewIsVertexArray;
+
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLDVPROC __glewGetVertexAttribLdv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DPROC __glewVertexAttribL1d;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DVPROC __glewVertexAttribL1dv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DPROC __glewVertexAttribL2d;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DVPROC __glewVertexAttribL2dv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DPROC __glewVertexAttribL3d;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DVPROC __glewVertexAttribL3dv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DPROC __glewVertexAttribL4d;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DVPROC __glewVertexAttribL4dv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLPOINTERPROC __glewVertexAttribLPointer;
+
+GLEW_FUN_EXPORT PFNGLVERTEXBLENDARBPROC __glewVertexBlendARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTPOINTERARBPROC __glewWeightPointerARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTBVARBPROC __glewWeightbvARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTDVARBPROC __glewWeightdvARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTFVARBPROC __glewWeightfvARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTIVARBPROC __glewWeightivARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTSVARBPROC __glewWeightsvARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTUBVARBPROC __glewWeightubvARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTUIVARBPROC __glewWeightuivARB;
+GLEW_FUN_EXPORT PFNGLWEIGHTUSVARBPROC __glewWeightusvARB;
+
+GLEW_FUN_EXPORT PFNGLBINDBUFFERARBPROC __glewBindBufferARB;
+GLEW_FUN_EXPORT PFNGLBUFFERDATAARBPROC __glewBufferDataARB;
+GLEW_FUN_EXPORT PFNGLBUFFERSUBDATAARBPROC __glewBufferSubDataARB;
+GLEW_FUN_EXPORT PFNGLDELETEBUFFERSARBPROC __glewDeleteBuffersARB;
+GLEW_FUN_EXPORT PFNGLGENBUFFERSARBPROC __glewGenBuffersARB;
+GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERIVARBPROC __glewGetBufferParameterivARB;
+GLEW_FUN_EXPORT PFNGLGETBUFFERPOINTERVARBPROC __glewGetBufferPointervARB;
+GLEW_FUN_EXPORT PFNGLGETBUFFERSUBDATAARBPROC __glewGetBufferSubDataARB;
+GLEW_FUN_EXPORT PFNGLISBUFFERARBPROC __glewIsBufferARB;
+GLEW_FUN_EXPORT PFNGLMAPBUFFERARBPROC __glewMapBufferARB;
+GLEW_FUN_EXPORT PFNGLUNMAPBUFFERARBPROC __glewUnmapBufferARB;
+
+GLEW_FUN_EXPORT PFNGLBINDPROGRAMARBPROC __glewBindProgramARB;
+GLEW_FUN_EXPORT PFNGLDELETEPROGRAMSARBPROC __glewDeleteProgramsARB;
+GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBARRAYARBPROC __glewDisableVertexAttribArrayARB;
+GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBARRAYARBPROC __glewEnableVertexAttribArrayARB;
+GLEW_FUN_EXPORT PFNGLGENPROGRAMSARBPROC __glewGenProgramsARB;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMENVPARAMETERDVARBPROC __glewGetProgramEnvParameterdvARB;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMENVPARAMETERFVARBPROC __glewGetProgramEnvParameterfvARB;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC __glewGetProgramLocalParameterdvARB;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC __glewGetProgramLocalParameterfvARB;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMSTRINGARBPROC __glewGetProgramStringARB;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMIVARBPROC __glewGetProgramivARB;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVARBPROC __glewGetVertexAttribPointervARB;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVARBPROC __glewGetVertexAttribdvARB;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVARBPROC __glewGetVertexAttribfvARB;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVARBPROC __glewGetVertexAttribivARB;
+GLEW_FUN_EXPORT PFNGLISPROGRAMARBPROC __glewIsProgramARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4DARBPROC __glewProgramEnvParameter4dARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4DVARBPROC __glewProgramEnvParameter4dvARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4FARBPROC __glewProgramEnvParameter4fARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4FVARBPROC __glewProgramEnvParameter4fvARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4DARBPROC __glewProgramLocalParameter4dARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4DVARBPROC __glewProgramLocalParameter4dvARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4FARBPROC __glewProgramLocalParameter4fARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4FVARBPROC __glewProgramLocalParameter4fvARB;
+GLEW_FUN_EXPORT PFNGLPROGRAMSTRINGARBPROC __glewProgramStringARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DARBPROC __glewVertexAttrib1dARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVARBPROC __glewVertexAttrib1dvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FARBPROC __glewVertexAttrib1fARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVARBPROC __glewVertexAttrib1fvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SARBPROC __glewVertexAttrib1sARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVARBPROC __glewVertexAttrib1svARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DARBPROC __glewVertexAttrib2dARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVARBPROC __glewVertexAttrib2dvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FARBPROC __glewVertexAttrib2fARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVARBPROC __glewVertexAttrib2fvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SARBPROC __glewVertexAttrib2sARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVARBPROC __glewVertexAttrib2svARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DARBPROC __glewVertexAttrib3dARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVARBPROC __glewVertexAttrib3dvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FARBPROC __glewVertexAttrib3fARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVARBPROC __glewVertexAttrib3fvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SARBPROC __glewVertexAttrib3sARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVARBPROC __glewVertexAttrib3svARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NBVARBPROC __glewVertexAttrib4NbvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NIVARBPROC __glewVertexAttrib4NivARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NSVARBPROC __glewVertexAttrib4NsvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBARBPROC __glewVertexAttrib4NubARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBVARBPROC __glewVertexAttrib4NubvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUIVARBPROC __glewVertexAttrib4NuivARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUSVARBPROC __glewVertexAttrib4NusvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4BVARBPROC __glewVertexAttrib4bvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DARBPROC __glewVertexAttrib4dARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVARBPROC __glewVertexAttrib4dvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FARBPROC __glewVertexAttrib4fARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVARBPROC __glewVertexAttrib4fvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4IVARBPROC __glewVertexAttrib4ivARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SARBPROC __glewVertexAttrib4sARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVARBPROC __glewVertexAttrib4svARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVARBPROC __glewVertexAttrib4ubvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UIVARBPROC __glewVertexAttrib4uivARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4USVARBPROC __glewVertexAttrib4usvARB;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERARBPROC __glewVertexAttribPointerARB;
+
+GLEW_FUN_EXPORT PFNGLBINDATTRIBLOCATIONARBPROC __glewBindAttribLocationARB;
+GLEW_FUN_EXPORT PFNGLGETACTIVEATTRIBARBPROC __glewGetActiveAttribARB;
+GLEW_FUN_EXPORT PFNGLGETATTRIBLOCATIONARBPROC __glewGetAttribLocationARB;
+
+GLEW_FUN_EXPORT PFNGLCOLORP3UIPROC __glewColorP3ui;
+GLEW_FUN_EXPORT PFNGLCOLORP3UIVPROC __glewColorP3uiv;
+GLEW_FUN_EXPORT PFNGLCOLORP4UIPROC __glewColorP4ui;
+GLEW_FUN_EXPORT PFNGLCOLORP4UIVPROC __glewColorP4uiv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP1UIPROC __glewMultiTexCoordP1ui;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP1UIVPROC __glewMultiTexCoordP1uiv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP2UIPROC __glewMultiTexCoordP2ui;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP2UIVPROC __glewMultiTexCoordP2uiv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP3UIPROC __glewMultiTexCoordP3ui;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP3UIVPROC __glewMultiTexCoordP3uiv;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP4UIPROC __glewMultiTexCoordP4ui;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP4UIVPROC __glewMultiTexCoordP4uiv;
+GLEW_FUN_EXPORT PFNGLNORMALP3UIPROC __glewNormalP3ui;
+GLEW_FUN_EXPORT PFNGLNORMALP3UIVPROC __glewNormalP3uiv;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLORP3UIPROC __glewSecondaryColorP3ui;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLORP3UIVPROC __glewSecondaryColorP3uiv;
+GLEW_FUN_EXPORT PFNGLTEXCOORDP1UIPROC __glewTexCoordP1ui;
+GLEW_FUN_EXPORT PFNGLTEXCOORDP1UIVPROC __glewTexCoordP1uiv;
+GLEW_FUN_EXPORT PFNGLTEXCOORDP2UIPROC __glewTexCoordP2ui;
+GLEW_FUN_EXPORT PFNGLTEXCOORDP2UIVPROC __glewTexCoordP2uiv;
+GLEW_FUN_EXPORT PFNGLTEXCOORDP3UIPROC __glewTexCoordP3ui;
+GLEW_FUN_EXPORT PFNGLTEXCOORDP3UIVPROC __glewTexCoordP3uiv;
+GLEW_FUN_EXPORT PFNGLTEXCOORDP4UIPROC __glewTexCoordP4ui;
+GLEW_FUN_EXPORT PFNGLTEXCOORDP4UIVPROC __glewTexCoordP4uiv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP1UIPROC __glewVertexAttribP1ui;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP1UIVPROC __glewVertexAttribP1uiv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP2UIPROC __glewVertexAttribP2ui;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP2UIVPROC __glewVertexAttribP2uiv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP3UIPROC __glewVertexAttribP3ui;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP3UIVPROC __glewVertexAttribP3uiv;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP4UIPROC __glewVertexAttribP4ui;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP4UIVPROC __glewVertexAttribP4uiv;
+GLEW_FUN_EXPORT PFNGLVERTEXP2UIPROC __glewVertexP2ui;
+GLEW_FUN_EXPORT PFNGLVERTEXP2UIVPROC __glewVertexP2uiv;
+GLEW_FUN_EXPORT PFNGLVERTEXP3UIPROC __glewVertexP3ui;
+GLEW_FUN_EXPORT PFNGLVERTEXP3UIVPROC __glewVertexP3uiv;
+GLEW_FUN_EXPORT PFNGLVERTEXP4UIPROC __glewVertexP4ui;
+GLEW_FUN_EXPORT PFNGLVERTEXP4UIVPROC __glewVertexP4uiv;
+
+GLEW_FUN_EXPORT PFNGLDEPTHRANGEARRAYVPROC __glewDepthRangeArrayv;
+GLEW_FUN_EXPORT PFNGLDEPTHRANGEINDEXEDPROC __glewDepthRangeIndexed;
+GLEW_FUN_EXPORT PFNGLGETDOUBLEI_VPROC __glewGetDoublei_v;
+GLEW_FUN_EXPORT PFNGLGETFLOATI_VPROC __glewGetFloati_v;
+GLEW_FUN_EXPORT PFNGLSCISSORARRAYVPROC __glewScissorArrayv;
+GLEW_FUN_EXPORT PFNGLSCISSORINDEXEDPROC __glewScissorIndexed;
+GLEW_FUN_EXPORT PFNGLSCISSORINDEXEDVPROC __glewScissorIndexedv;
+GLEW_FUN_EXPORT PFNGLVIEWPORTARRAYVPROC __glewViewportArrayv;
+GLEW_FUN_EXPORT PFNGLVIEWPORTINDEXEDFPROC __glewViewportIndexedf;
+GLEW_FUN_EXPORT PFNGLVIEWPORTINDEXEDFVPROC __glewViewportIndexedfv;
+
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2DARBPROC __glewWindowPos2dARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVARBPROC __glewWindowPos2dvARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2FARBPROC __glewWindowPos2fARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVARBPROC __glewWindowPos2fvARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2IARBPROC __glewWindowPos2iARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVARBPROC __glewWindowPos2ivARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2SARBPROC __glewWindowPos2sARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVARBPROC __glewWindowPos2svARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3DARBPROC __glewWindowPos3dARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVARBPROC __glewWindowPos3dvARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3FARBPROC __glewWindowPos3fARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVARBPROC __glewWindowPos3fvARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3IARBPROC __glewWindowPos3iARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVARBPROC __glewWindowPos3ivARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3SARBPROC __glewWindowPos3sARB;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVARBPROC __glewWindowPos3svARB;
+
+GLEW_FUN_EXPORT PFNGLDRAWBUFFERSATIPROC __glewDrawBuffersATI;
+
+GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYATIPROC __glewDrawElementArrayATI;
+GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYATIPROC __glewDrawRangeElementArrayATI;
+GLEW_FUN_EXPORT PFNGLELEMENTPOINTERATIPROC __glewElementPointerATI;
+
+GLEW_FUN_EXPORT PFNGLGETTEXBUMPPARAMETERFVATIPROC __glewGetTexBumpParameterfvATI;
+GLEW_FUN_EXPORT PFNGLGETTEXBUMPPARAMETERIVATIPROC __glewGetTexBumpParameterivATI;
+GLEW_FUN_EXPORT PFNGLTEXBUMPPARAMETERFVATIPROC __glewTexBumpParameterfvATI;
+GLEW_FUN_EXPORT PFNGLTEXBUMPPARAMETERIVATIPROC __glewTexBumpParameterivATI;
+
+GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP1ATIPROC __glewAlphaFragmentOp1ATI;
+GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP2ATIPROC __glewAlphaFragmentOp2ATI;
+GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP3ATIPROC __glewAlphaFragmentOp3ATI;
+GLEW_FUN_EXPORT PFNGLBEGINFRAGMENTSHADERATIPROC __glewBeginFragmentShaderATI;
+GLEW_FUN_EXPORT PFNGLBINDFRAGMENTSHADERATIPROC __glewBindFragmentShaderATI;
+GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP1ATIPROC __glewColorFragmentOp1ATI;
+GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP2ATIPROC __glewColorFragmentOp2ATI;
+GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP3ATIPROC __glewColorFragmentOp3ATI;
+GLEW_FUN_EXPORT PFNGLDELETEFRAGMENTSHADERATIPROC __glewDeleteFragmentShaderATI;
+GLEW_FUN_EXPORT PFNGLENDFRAGMENTSHADERATIPROC __glewEndFragmentShaderATI;
+GLEW_FUN_EXPORT PFNGLGENFRAGMENTSHADERSATIPROC __glewGenFragmentShadersATI;
+GLEW_FUN_EXPORT PFNGLPASSTEXCOORDATIPROC __glewPassTexCoordATI;
+GLEW_FUN_EXPORT PFNGLSAMPLEMAPATIPROC __glewSampleMapATI;
+GLEW_FUN_EXPORT PFNGLSETFRAGMENTSHADERCONSTANTATIPROC __glewSetFragmentShaderConstantATI;
+
+GLEW_FUN_EXPORT PFNGLMAPOBJECTBUFFERATIPROC __glewMapObjectBufferATI;
+GLEW_FUN_EXPORT PFNGLUNMAPOBJECTBUFFERATIPROC __glewUnmapObjectBufferATI;
+
+GLEW_FUN_EXPORT PFNGLPNTRIANGLESFATIPROC __glewPNTrianglesfATI;
+GLEW_FUN_EXPORT PFNGLPNTRIANGLESIATIPROC __glewPNTrianglesiATI;
+
+GLEW_FUN_EXPORT PFNGLSTENCILFUNCSEPARATEATIPROC __glewStencilFuncSeparateATI;
+GLEW_FUN_EXPORT PFNGLSTENCILOPSEPARATEATIPROC __glewStencilOpSeparateATI;
+
+GLEW_FUN_EXPORT PFNGLARRAYOBJECTATIPROC __glewArrayObjectATI;
+GLEW_FUN_EXPORT PFNGLFREEOBJECTBUFFERATIPROC __glewFreeObjectBufferATI;
+GLEW_FUN_EXPORT PFNGLGETARRAYOBJECTFVATIPROC __glewGetArrayObjectfvATI;
+GLEW_FUN_EXPORT PFNGLGETARRAYOBJECTIVATIPROC __glewGetArrayObjectivATI;
+GLEW_FUN_EXPORT PFNGLGETOBJECTBUFFERFVATIPROC __glewGetObjectBufferfvATI;
+GLEW_FUN_EXPORT PFNGLGETOBJECTBUFFERIVATIPROC __glewGetObjectBufferivATI;
+GLEW_FUN_EXPORT PFNGLGETVARIANTARRAYOBJECTFVATIPROC __glewGetVariantArrayObjectfvATI;
+GLEW_FUN_EXPORT PFNGLGETVARIANTARRAYOBJECTIVATIPROC __glewGetVariantArrayObjectivATI;
+GLEW_FUN_EXPORT PFNGLISOBJECTBUFFERATIPROC __glewIsObjectBufferATI;
+GLEW_FUN_EXPORT PFNGLNEWOBJECTBUFFERATIPROC __glewNewObjectBufferATI;
+GLEW_FUN_EXPORT PFNGLUPDATEOBJECTBUFFERATIPROC __glewUpdateObjectBufferATI;
+GLEW_FUN_EXPORT PFNGLVARIANTARRAYOBJECTATIPROC __glewVariantArrayObjectATI;
+
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC __glewGetVertexAttribArrayObjectfvATI;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC __glewGetVertexAttribArrayObjectivATI;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBARRAYOBJECTATIPROC __glewVertexAttribArrayObjectATI;
+
+GLEW_FUN_EXPORT PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC __glewClientActiveVertexStreamATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3BATIPROC __glewNormalStream3bATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3BVATIPROC __glewNormalStream3bvATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3DATIPROC __glewNormalStream3dATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3DVATIPROC __glewNormalStream3dvATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3FATIPROC __glewNormalStream3fATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3FVATIPROC __glewNormalStream3fvATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3IATIPROC __glewNormalStream3iATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3IVATIPROC __glewNormalStream3ivATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3SATIPROC __glewNormalStream3sATI;
+GLEW_FUN_EXPORT PFNGLNORMALSTREAM3SVATIPROC __glewNormalStream3svATI;
+GLEW_FUN_EXPORT PFNGLVERTEXBLENDENVFATIPROC __glewVertexBlendEnvfATI;
+GLEW_FUN_EXPORT PFNGLVERTEXBLENDENVIATIPROC __glewVertexBlendEnviATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2DATIPROC __glewVertexStream2dATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2DVATIPROC __glewVertexStream2dvATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2FATIPROC __glewVertexStream2fATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2FVATIPROC __glewVertexStream2fvATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2IATIPROC __glewVertexStream2iATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2IVATIPROC __glewVertexStream2ivATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2SATIPROC __glewVertexStream2sATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2SVATIPROC __glewVertexStream2svATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3DATIPROC __glewVertexStream3dATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3DVATIPROC __glewVertexStream3dvATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3FATIPROC __glewVertexStream3fATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3FVATIPROC __glewVertexStream3fvATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3IATIPROC __glewVertexStream3iATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3IVATIPROC __glewVertexStream3ivATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3SATIPROC __glewVertexStream3sATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3SVATIPROC __glewVertexStream3svATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4DATIPROC __glewVertexStream4dATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4DVATIPROC __glewVertexStream4dvATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4FATIPROC __glewVertexStream4fATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4FVATIPROC __glewVertexStream4fvATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IATIPROC __glewVertexStream4iATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IVATIPROC __glewVertexStream4ivATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SATIPROC __glewVertexStream4sATI;
+GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SVATIPROC __glewVertexStream4svATI;
+
+GLEW_FUN_EXPORT PFNGLGETUNIFORMBUFFERSIZEEXTPROC __glewGetUniformBufferSizeEXT;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMOFFSETEXTPROC __glewGetUniformOffsetEXT;
+GLEW_FUN_EXPORT PFNGLUNIFORMBUFFEREXTPROC __glewUniformBufferEXT;
+
+GLEW_FUN_EXPORT PFNGLBLENDCOLOREXTPROC __glewBlendColorEXT;
+
+GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEEXTPROC __glewBlendEquationSeparateEXT;
+
+GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEEXTPROC __glewBlendFuncSeparateEXT;
+
+GLEW_FUN_EXPORT PFNGLBLENDEQUATIONEXTPROC __glewBlendEquationEXT;
+
+GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEEXTPROC __glewColorSubTableEXT;
+GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEEXTPROC __glewCopyColorSubTableEXT;
+
+GLEW_FUN_EXPORT PFNGLLOCKARRAYSEXTPROC __glewLockArraysEXT;
+GLEW_FUN_EXPORT PFNGLUNLOCKARRAYSEXTPROC __glewUnlockArraysEXT;
+
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DEXTPROC __glewConvolutionFilter1DEXT;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DEXTPROC __glewConvolutionFilter2DEXT;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFEXTPROC __glewConvolutionParameterfEXT;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVEXTPROC __glewConvolutionParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIEXTPROC __glewConvolutionParameteriEXT;
+GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVEXTPROC __glewConvolutionParameterivEXT;
+GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC __glewCopyConvolutionFilter1DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC __glewCopyConvolutionFilter2DEXT;
+GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTEREXTPROC __glewGetConvolutionFilterEXT;
+GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC __glewGetConvolutionParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC __glewGetConvolutionParameterivEXT;
+GLEW_FUN_EXPORT PFNGLGETSEPARABLEFILTEREXTPROC __glewGetSeparableFilterEXT;
+GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DEXTPROC __glewSeparableFilter2DEXT;
+
+GLEW_FUN_EXPORT PFNGLBINORMALPOINTEREXTPROC __glewBinormalPointerEXT;
+GLEW_FUN_EXPORT PFNGLTANGENTPOINTEREXTPROC __glewTangentPointerEXT;
+
+GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE1DEXTPROC __glewCopyTexImage1DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE2DEXTPROC __glewCopyTexImage2DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE1DEXTPROC __glewCopyTexSubImage1DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE2DEXTPROC __glewCopyTexSubImage2DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DEXTPROC __glewCopyTexSubImage3DEXT;
+
+GLEW_FUN_EXPORT PFNGLCULLPARAMETERDVEXTPROC __glewCullParameterdvEXT;
+GLEW_FUN_EXPORT PFNGLCULLPARAMETERFVEXTPROC __glewCullParameterfvEXT;
+
+GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSEXTPROC __glewDepthBoundsEXT;
+
+GLEW_FUN_EXPORT PFNGLBINDMULTITEXTUREEXTPROC __glewBindMultiTextureEXT;
+GLEW_FUN_EXPORT PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC __glewCheckNamedFramebufferStatusEXT;
+GLEW_FUN_EXPORT PFNGLCLIENTATTRIBDEFAULTEXTPROC __glewClientAttribDefaultEXT;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC __glewCompressedMultiTexImage1DEXT;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC __glewCompressedMultiTexImage2DEXT;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC __glewCompressedMultiTexImage3DEXT;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC __glewCompressedMultiTexSubImage1DEXT;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC __glewCompressedMultiTexSubImage2DEXT;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC __glewCompressedMultiTexSubImage3DEXT;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC __glewCompressedTextureImage1DEXT;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC __glewCompressedTextureImage2DEXT;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC __glewCompressedTextureImage3DEXT;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC __glewCompressedTextureSubImage1DEXT;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC __glewCompressedTextureSubImage2DEXT;
+GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC __glewCompressedTextureSubImage3DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYMULTITEXIMAGE1DEXTPROC __glewCopyMultiTexImage1DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYMULTITEXIMAGE2DEXTPROC __glewCopyMultiTexImage2DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC __glewCopyMultiTexSubImage1DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC __glewCopyMultiTexSubImage2DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC __glewCopyMultiTexSubImage3DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYTEXTUREIMAGE1DEXTPROC __glewCopyTextureImage1DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYTEXTUREIMAGE2DEXTPROC __glewCopyTextureImage2DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC __glewCopyTextureSubImage1DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC __glewCopyTextureSubImage2DEXT;
+GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC __glewCopyTextureSubImage3DEXT;
+GLEW_FUN_EXPORT PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC __glewDisableClientStateIndexedEXT;
+GLEW_FUN_EXPORT PFNGLDISABLECLIENTSTATEIEXTPROC __glewDisableClientStateiEXT;
+GLEW_FUN_EXPORT PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC __glewDisableVertexArrayAttribEXT;
+GLEW_FUN_EXPORT PFNGLDISABLEVERTEXARRAYEXTPROC __glewDisableVertexArrayEXT;
+GLEW_FUN_EXPORT PFNGLENABLECLIENTSTATEINDEXEDEXTPROC __glewEnableClientStateIndexedEXT;
+GLEW_FUN_EXPORT PFNGLENABLECLIENTSTATEIEXTPROC __glewEnableClientStateiEXT;
+GLEW_FUN_EXPORT PFNGLENABLEVERTEXARRAYATTRIBEXTPROC __glewEnableVertexArrayAttribEXT;
+GLEW_FUN_EXPORT PFNGLENABLEVERTEXARRAYEXTPROC __glewEnableVertexArrayEXT;
+GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC __glewFlushMappedNamedBufferRangeEXT;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC __glewFramebufferDrawBufferEXT;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC __glewFramebufferDrawBuffersEXT;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERREADBUFFEREXTPROC __glewFramebufferReadBufferEXT;
+GLEW_FUN_EXPORT PFNGLGENERATEMULTITEXMIPMAPEXTPROC __glewGenerateMultiTexMipmapEXT;
+GLEW_FUN_EXPORT PFNGLGENERATETEXTUREMIPMAPEXTPROC __glewGenerateTextureMipmapEXT;
+GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC __glewGetCompressedMultiTexImageEXT;
+GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC __glewGetCompressedTextureImageEXT;
+GLEW_FUN_EXPORT PFNGLGETDOUBLEINDEXEDVEXTPROC __glewGetDoubleIndexedvEXT;
+GLEW_FUN_EXPORT PFNGLGETDOUBLEI_VEXTPROC __glewGetDoublei_vEXT;
+GLEW_FUN_EXPORT PFNGLGETFLOATINDEXEDVEXTPROC __glewGetFloatIndexedvEXT;
+GLEW_FUN_EXPORT PFNGLGETFLOATI_VEXTPROC __glewGetFloati_vEXT;
+GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC __glewGetFramebufferParameterivEXT;
+GLEW_FUN_EXPORT PFNGLGETMULTITEXENVFVEXTPROC __glewGetMultiTexEnvfvEXT;
+GLEW_FUN_EXPORT PFNGLGETMULTITEXENVIVEXTPROC __glewGetMultiTexEnvivEXT;
+GLEW_FUN_EXPORT PFNGLGETMULTITEXGENDVEXTPROC __glewGetMultiTexGendvEXT;
+GLEW_FUN_EXPORT PFNGLGETMULTITEXGENFVEXTPROC __glewGetMultiTexGenfvEXT;
+GLEW_FUN_EXPORT PFNGLGETMULTITEXGENIVEXTPROC __glewGetMultiTexGenivEXT;
+GLEW_FUN_EXPORT PFNGLGETMULTITEXIMAGEEXTPROC __glewGetMultiTexImageEXT;
+GLEW_FUN_EXPORT PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC __glewGetMultiTexLevelParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC __glewGetMultiTexLevelParameterivEXT;
+GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIIVEXTPROC __glewGetMultiTexParameterIivEXT;
+GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIUIVEXTPROC __glewGetMultiTexParameterIuivEXT;
+GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERFVEXTPROC __glewGetMultiTexParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIVEXTPROC __glewGetMultiTexParameterivEXT;
+GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC __glewGetNamedBufferParameterivEXT;
+GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERPOINTERVEXTPROC __glewGetNamedBufferPointervEXT;
+GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERSUBDATAEXTPROC __glewGetNamedBufferSubDataEXT;
+GLEW_FUN_EXPORT PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetNamedFramebufferAttachmentParameterivEXT;
+GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC __glewGetNamedProgramLocalParameterIivEXT;
+GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC __glewGetNamedProgramLocalParameterIuivEXT;
+GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC __glewGetNamedProgramLocalParameterdvEXT;
+GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC __glewGetNamedProgramLocalParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMSTRINGEXTPROC __glewGetNamedProgramStringEXT;
+GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMIVEXTPROC __glewGetNamedProgramivEXT;
+GLEW_FUN_EXPORT PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC __glewGetNamedRenderbufferParameterivEXT;
+GLEW_FUN_EXPORT PFNGLGETPOINTERINDEXEDVEXTPROC __glewGetPointerIndexedvEXT;
+GLEW_FUN_EXPORT PFNGLGETPOINTERI_VEXTPROC __glewGetPointeri_vEXT;
+GLEW_FUN_EXPORT PFNGLGETTEXTUREIMAGEEXTPROC __glewGetTextureImageEXT;
+GLEW_FUN_EXPORT PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC __glewGetTextureLevelParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC __glewGetTextureLevelParameterivEXT;
+GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIIVEXTPROC __glewGetTextureParameterIivEXT;
+GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIUIVEXTPROC __glewGetTextureParameterIuivEXT;
+GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERFVEXTPROC __glewGetTextureParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIVEXTPROC __glewGetTextureParameterivEXT;
+GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC __glewGetVertexArrayIntegeri_vEXT;
+GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYINTEGERVEXTPROC __glewGetVertexArrayIntegervEXT;
+GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC __glewGetVertexArrayPointeri_vEXT;
+GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYPOINTERVEXTPROC __glewGetVertexArrayPointervEXT;
+GLEW_FUN_EXPORT PFNGLMAPNAMEDBUFFEREXTPROC __glewMapNamedBufferEXT;
+GLEW_FUN_EXPORT PFNGLMAPNAMEDBUFFERRANGEEXTPROC __glewMapNamedBufferRangeEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXFRUSTUMEXTPROC __glewMatrixFrustumEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXLOADIDENTITYEXTPROC __glewMatrixLoadIdentityEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXLOADTRANSPOSEDEXTPROC __glewMatrixLoadTransposedEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXLOADTRANSPOSEFEXTPROC __glewMatrixLoadTransposefEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXLOADDEXTPROC __glewMatrixLoaddEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXLOADFEXTPROC __glewMatrixLoadfEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXMULTTRANSPOSEDEXTPROC __glewMatrixMultTransposedEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXMULTTRANSPOSEFEXTPROC __glewMatrixMultTransposefEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXMULTDEXTPROC __glewMatrixMultdEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXMULTFEXTPROC __glewMatrixMultfEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXORTHOEXTPROC __glewMatrixOrthoEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXPOPEXTPROC __glewMatrixPopEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXPUSHEXTPROC __glewMatrixPushEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXROTATEDEXTPROC __glewMatrixRotatedEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXROTATEFEXTPROC __glewMatrixRotatefEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXSCALEDEXTPROC __glewMatrixScaledEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXSCALEFEXTPROC __glewMatrixScalefEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXTRANSLATEDEXTPROC __glewMatrixTranslatedEXT;
+GLEW_FUN_EXPORT PFNGLMATRIXTRANSLATEFEXTPROC __glewMatrixTranslatefEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXBUFFEREXTPROC __glewMultiTexBufferEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORDPOINTEREXTPROC __glewMultiTexCoordPointerEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXENVFEXTPROC __glewMultiTexEnvfEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXENVFVEXTPROC __glewMultiTexEnvfvEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXENVIEXTPROC __glewMultiTexEnviEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXENVIVEXTPROC __glewMultiTexEnvivEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXGENDEXTPROC __glewMultiTexGendEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXGENDVEXTPROC __glewMultiTexGendvEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXGENFEXTPROC __glewMultiTexGenfEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXGENFVEXTPROC __glewMultiTexGenfvEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXGENIEXTPROC __glewMultiTexGeniEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXGENIVEXTPROC __glewMultiTexGenivEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE1DEXTPROC __glewMultiTexImage1DEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE2DEXTPROC __glewMultiTexImage2DEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE3DEXTPROC __glewMultiTexImage3DEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIIVEXTPROC __glewMultiTexParameterIivEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIUIVEXTPROC __glewMultiTexParameterIuivEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERFEXTPROC __glewMultiTexParameterfEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERFVEXTPROC __glewMultiTexParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIEXTPROC __glewMultiTexParameteriEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIVEXTPROC __glewMultiTexParameterivEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXRENDERBUFFEREXTPROC __glewMultiTexRenderbufferEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE1DEXTPROC __glewMultiTexSubImage1DEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE2DEXTPROC __glewMultiTexSubImage2DEXT;
+GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE3DEXTPROC __glewMultiTexSubImage3DEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDBUFFERDATAEXTPROC __glewNamedBufferDataEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDBUFFERSUBDATAEXTPROC __glewNamedBufferSubDataEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC __glewNamedCopyBufferSubDataEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC __glewNamedFramebufferRenderbufferEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC __glewNamedFramebufferTexture1DEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC __glewNamedFramebufferTexture2DEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC __glewNamedFramebufferTexture3DEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC __glewNamedFramebufferTextureEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC __glewNamedFramebufferTextureFaceEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC __glewNamedFramebufferTextureLayerEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC __glewNamedProgramLocalParameter4dEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC __glewNamedProgramLocalParameter4dvEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC __glewNamedProgramLocalParameter4fEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC __glewNamedProgramLocalParameter4fvEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC __glewNamedProgramLocalParameterI4iEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC __glewNamedProgramLocalParameterI4ivEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC __glewNamedProgramLocalParameterI4uiEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC __glewNamedProgramLocalParameterI4uivEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC __glewNamedProgramLocalParameters4fvEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC __glewNamedProgramLocalParametersI4ivEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC __glewNamedProgramLocalParametersI4uivEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMSTRINGEXTPROC __glewNamedProgramStringEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC __glewNamedRenderbufferStorageEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC __glewNamedRenderbufferStorageMultisampleCoverageEXT;
+GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewNamedRenderbufferStorageMultisampleEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FEXTPROC __glewProgramUniform1fEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FVEXTPROC __glewProgramUniform1fvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IEXTPROC __glewProgramUniform1iEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IVEXTPROC __glewProgramUniform1ivEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIEXTPROC __glewProgramUniform1uiEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIVEXTPROC __glewProgramUniform1uivEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FEXTPROC __glewProgramUniform2fEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FVEXTPROC __glewProgramUniform2fvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IEXTPROC __glewProgramUniform2iEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IVEXTPROC __glewProgramUniform2ivEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIEXTPROC __glewProgramUniform2uiEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIVEXTPROC __glewProgramUniform2uivEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FEXTPROC __glewProgramUniform3fEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FVEXTPROC __glewProgramUniform3fvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IEXTPROC __glewProgramUniform3iEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IVEXTPROC __glewProgramUniform3ivEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIEXTPROC __glewProgramUniform3uiEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIVEXTPROC __glewProgramUniform3uivEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FEXTPROC __glewProgramUniform4fEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FVEXTPROC __glewProgramUniform4fvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IEXTPROC __glewProgramUniform4iEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IVEXTPROC __glewProgramUniform4ivEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIEXTPROC __glewProgramUniform4uiEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIVEXTPROC __glewProgramUniform4uivEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC __glewProgramUniformMatrix2fvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC __glewProgramUniformMatrix2x3fvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC __glewProgramUniformMatrix2x4fvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC __glewProgramUniformMatrix3fvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC __glewProgramUniformMatrix3x2fvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC __glewProgramUniformMatrix3x4fvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC __glewProgramUniformMatrix4fvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC __glewProgramUniformMatrix4x2fvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC __glewProgramUniformMatrix4x3fvEXT;
+GLEW_FUN_EXPORT PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC __glewPushClientAttribDefaultEXT;
+GLEW_FUN_EXPORT PFNGLTEXTUREBUFFEREXTPROC __glewTextureBufferEXT;
+GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE1DEXTPROC __glewTextureImage1DEXT;
+GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE2DEXTPROC __glewTextureImage2DEXT;
+GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE3DEXTPROC __glewTextureImage3DEXT;
+GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIIVEXTPROC __glewTextureParameterIivEXT;
+GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIUIVEXTPROC __glewTextureParameterIuivEXT;
+GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERFEXTPROC __glewTextureParameterfEXT;
+GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERFVEXTPROC __glewTextureParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIEXTPROC __glewTextureParameteriEXT;
+GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIVEXTPROC __glewTextureParameterivEXT;
+GLEW_FUN_EXPORT PFNGLTEXTURERENDERBUFFEREXTPROC __glewTextureRenderbufferEXT;
+GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE1DEXTPROC __glewTextureSubImage1DEXT;
+GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE2DEXTPROC __glewTextureSubImage2DEXT;
+GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE3DEXTPROC __glewTextureSubImage3DEXT;
+GLEW_FUN_EXPORT PFNGLUNMAPNAMEDBUFFEREXTPROC __glewUnmapNamedBufferEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYCOLOROFFSETEXTPROC __glewVertexArrayColorOffsetEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC __glewVertexArrayEdgeFlagOffsetEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC __glewVertexArrayFogCoordOffsetEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYINDEXOFFSETEXTPROC __glewVertexArrayIndexOffsetEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC __glewVertexArrayMultiTexCoordOffsetEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYNORMALOFFSETEXTPROC __glewVertexArrayNormalOffsetEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC __glewVertexArraySecondaryColorOffsetEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC __glewVertexArrayTexCoordOffsetEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC __glewVertexArrayVertexAttribIOffsetEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC __glewVertexArrayVertexAttribOffsetEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC __glewVertexArrayVertexOffsetEXT;
+
+GLEW_FUN_EXPORT PFNGLCOLORMASKINDEXEDEXTPROC __glewColorMaskIndexedEXT;
+GLEW_FUN_EXPORT PFNGLDISABLEINDEXEDEXTPROC __glewDisableIndexedEXT;
+GLEW_FUN_EXPORT PFNGLENABLEINDEXEDEXTPROC __glewEnableIndexedEXT;
+GLEW_FUN_EXPORT PFNGLGETBOOLEANINDEXEDVEXTPROC __glewGetBooleanIndexedvEXT;
+GLEW_FUN_EXPORT PFNGLGETINTEGERINDEXEDVEXTPROC __glewGetIntegerIndexedvEXT;
+GLEW_FUN_EXPORT PFNGLISENABLEDINDEXEDEXTPROC __glewIsEnabledIndexedEXT;
+
+GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDEXTPROC __glewDrawArraysInstancedEXT;
+GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDEXTPROC __glewDrawElementsInstancedEXT;
+
+GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSEXTPROC __glewDrawRangeElementsEXT;
+
+GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTEREXTPROC __glewFogCoordPointerEXT;
+GLEW_FUN_EXPORT PFNGLFOGCOORDDEXTPROC __glewFogCoorddEXT;
+GLEW_FUN_EXPORT PFNGLFOGCOORDDVEXTPROC __glewFogCoorddvEXT;
+GLEW_FUN_EXPORT PFNGLFOGCOORDFEXTPROC __glewFogCoordfEXT;
+GLEW_FUN_EXPORT PFNGLFOGCOORDFVEXTPROC __glewFogCoordfvEXT;
+
+GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALEXTPROC __glewFragmentColorMaterialEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFEXTPROC __glewFragmentLightModelfEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFVEXTPROC __glewFragmentLightModelfvEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIEXTPROC __glewFragmentLightModeliEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIVEXTPROC __glewFragmentLightModelivEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFEXTPROC __glewFragmentLightfEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFVEXTPROC __glewFragmentLightfvEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIEXTPROC __glewFragmentLightiEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIVEXTPROC __glewFragmentLightivEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFEXTPROC __glewFragmentMaterialfEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFVEXTPROC __glewFragmentMaterialfvEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIEXTPROC __glewFragmentMaterialiEXT;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIVEXTPROC __glewFragmentMaterialivEXT;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTFVEXTPROC __glewGetFragmentLightfvEXT;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTIVEXTPROC __glewGetFragmentLightivEXT;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALFVEXTPROC __glewGetFragmentMaterialfvEXT;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVEXTPROC __glewGetFragmentMaterialivEXT;
+GLEW_FUN_EXPORT PFNGLLIGHTENVIEXTPROC __glewLightEnviEXT;
+
+GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFEREXTPROC __glewBlitFramebufferEXT;
+
+GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewRenderbufferStorageMultisampleEXT;
+
+GLEW_FUN_EXPORT PFNGLBINDFRAMEBUFFEREXTPROC __glewBindFramebufferEXT;
+GLEW_FUN_EXPORT PFNGLBINDRENDERBUFFEREXTPROC __glewBindRenderbufferEXT;
+GLEW_FUN_EXPORT PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC __glewCheckFramebufferStatusEXT;
+GLEW_FUN_EXPORT PFNGLDELETEFRAMEBUFFERSEXTPROC __glewDeleteFramebuffersEXT;
+GLEW_FUN_EXPORT PFNGLDELETERENDERBUFFERSEXTPROC __glewDeleteRenderbuffersEXT;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC __glewFramebufferRenderbufferEXT;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE1DEXTPROC __glewFramebufferTexture1DEXT;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE2DEXTPROC __glewFramebufferTexture2DEXT;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE3DEXTPROC __glewFramebufferTexture3DEXT;
+GLEW_FUN_EXPORT PFNGLGENFRAMEBUFFERSEXTPROC __glewGenFramebuffersEXT;
+GLEW_FUN_EXPORT PFNGLGENRENDERBUFFERSEXTPROC __glewGenRenderbuffersEXT;
+GLEW_FUN_EXPORT PFNGLGENERATEMIPMAPEXTPROC __glewGenerateMipmapEXT;
+GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetFramebufferAttachmentParameterivEXT;
+GLEW_FUN_EXPORT PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC __glewGetRenderbufferParameterivEXT;
+GLEW_FUN_EXPORT PFNGLISFRAMEBUFFEREXTPROC __glewIsFramebufferEXT;
+GLEW_FUN_EXPORT PFNGLISRENDERBUFFEREXTPROC __glewIsRenderbufferEXT;
+GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEEXTPROC __glewRenderbufferStorageEXT;
+
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREEXTPROC __glewFramebufferTextureEXT;
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC __glewFramebufferTextureFaceEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIEXTPROC __glewProgramParameteriEXT;
+
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERS4FVEXTPROC __glewProgramEnvParameters4fvEXT;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC __glewProgramLocalParameters4fvEXT;
+
+GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONEXTPROC __glewBindFragDataLocationEXT;
+GLEW_FUN_EXPORT PFNGLGETFRAGDATALOCATIONEXTPROC __glewGetFragDataLocationEXT;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMUIVEXTPROC __glewGetUniformuivEXT;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIIVEXTPROC __glewGetVertexAttribIivEXT;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIUIVEXTPROC __glewGetVertexAttribIuivEXT;
+GLEW_FUN_EXPORT PFNGLUNIFORM1UIEXTPROC __glewUniform1uiEXT;
+GLEW_FUN_EXPORT PFNGLUNIFORM1UIVEXTPROC __glewUniform1uivEXT;
+GLEW_FUN_EXPORT PFNGLUNIFORM2UIEXTPROC __glewUniform2uiEXT;
+GLEW_FUN_EXPORT PFNGLUNIFORM2UIVEXTPROC __glewUniform2uivEXT;
+GLEW_FUN_EXPORT PFNGLUNIFORM3UIEXTPROC __glewUniform3uiEXT;
+GLEW_FUN_EXPORT PFNGLUNIFORM3UIVEXTPROC __glewUniform3uivEXT;
+GLEW_FUN_EXPORT PFNGLUNIFORM4UIEXTPROC __glewUniform4uiEXT;
+GLEW_FUN_EXPORT PFNGLUNIFORM4UIVEXTPROC __glewUniform4uivEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IEXTPROC __glewVertexAttribI1iEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IVEXTPROC __glewVertexAttribI1ivEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIEXTPROC __glewVertexAttribI1uiEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIVEXTPROC __glewVertexAttribI1uivEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IEXTPROC __glewVertexAttribI2iEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IVEXTPROC __glewVertexAttribI2ivEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIEXTPROC __glewVertexAttribI2uiEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIVEXTPROC __glewVertexAttribI2uivEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IEXTPROC __glewVertexAttribI3iEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IVEXTPROC __glewVertexAttribI3ivEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIEXTPROC __glewVertexAttribI3uiEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIVEXTPROC __glewVertexAttribI3uivEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4BVEXTPROC __glewVertexAttribI4bvEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IEXTPROC __glewVertexAttribI4iEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IVEXTPROC __glewVertexAttribI4ivEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4SVEXTPROC __glewVertexAttribI4svEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UBVEXTPROC __glewVertexAttribI4ubvEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIEXTPROC __glewVertexAttribI4uiEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIVEXTPROC __glewVertexAttribI4uivEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4USVEXTPROC __glewVertexAttribI4usvEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIPOINTEREXTPROC __glewVertexAttribIPointerEXT;
+
+GLEW_FUN_EXPORT PFNGLGETHISTOGRAMEXTPROC __glewGetHistogramEXT;
+GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVEXTPROC __glewGetHistogramParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVEXTPROC __glewGetHistogramParameterivEXT;
+GLEW_FUN_EXPORT PFNGLGETMINMAXEXTPROC __glewGetMinmaxEXT;
+GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERFVEXTPROC __glewGetMinmaxParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERIVEXTPROC __glewGetMinmaxParameterivEXT;
+GLEW_FUN_EXPORT PFNGLHISTOGRAMEXTPROC __glewHistogramEXT;
+GLEW_FUN_EXPORT PFNGLMINMAXEXTPROC __glewMinmaxEXT;
+GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMEXTPROC __glewResetHistogramEXT;
+GLEW_FUN_EXPORT PFNGLRESETMINMAXEXTPROC __glewResetMinmaxEXT;
+
+GLEW_FUN_EXPORT PFNGLINDEXFUNCEXTPROC __glewIndexFuncEXT;
+
+GLEW_FUN_EXPORT PFNGLINDEXMATERIALEXTPROC __glewIndexMaterialEXT;
+
+GLEW_FUN_EXPORT PFNGLAPPLYTEXTUREEXTPROC __glewApplyTextureEXT;
+GLEW_FUN_EXPORT PFNGLTEXTURELIGHTEXTPROC __glewTextureLightEXT;
+GLEW_FUN_EXPORT PFNGLTEXTUREMATERIALEXTPROC __glewTextureMaterialEXT;
+
+GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSEXTPROC __glewMultiDrawArraysEXT;
+GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSEXTPROC __glewMultiDrawElementsEXT;
+
+GLEW_FUN_EXPORT PFNGLSAMPLEMASKEXTPROC __glewSampleMaskEXT;
+GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNEXTPROC __glewSamplePatternEXT;
+
+GLEW_FUN_EXPORT PFNGLCOLORTABLEEXTPROC __glewColorTableEXT;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEEXTPROC __glewGetColorTableEXT;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVEXTPROC __glewGetColorTableParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVEXTPROC __glewGetColorTableParameterivEXT;
+
+GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC __glewGetPixelTransformParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC __glewGetPixelTransformParameterivEXT;
+GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFEXTPROC __glewPixelTransformParameterfEXT;
+GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC __glewPixelTransformParameterfvEXT;
+GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIEXTPROC __glewPixelTransformParameteriEXT;
+GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC __glewPixelTransformParameterivEXT;
+
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFEXTPROC __glewPointParameterfEXT;
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVEXTPROC __glewPointParameterfvEXT;
+
+GLEW_FUN_EXPORT PFNGLPOLYGONOFFSETEXTPROC __glewPolygonOffsetEXT;
+
+GLEW_FUN_EXPORT PFNGLPROVOKINGVERTEXEXTPROC __glewProvokingVertexEXT;
+
+GLEW_FUN_EXPORT PFNGLBEGINSCENEEXTPROC __glewBeginSceneEXT;
+GLEW_FUN_EXPORT PFNGLENDSCENEEXTPROC __glewEndSceneEXT;
+
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BEXTPROC __glewSecondaryColor3bEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BVEXTPROC __glewSecondaryColor3bvEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DEXTPROC __glewSecondaryColor3dEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DVEXTPROC __glewSecondaryColor3dvEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FEXTPROC __glewSecondaryColor3fEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FVEXTPROC __glewSecondaryColor3fvEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IEXTPROC __glewSecondaryColor3iEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IVEXTPROC __glewSecondaryColor3ivEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SEXTPROC __glewSecondaryColor3sEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SVEXTPROC __glewSecondaryColor3svEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBEXTPROC __glewSecondaryColor3ubEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBVEXTPROC __glewSecondaryColor3ubvEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIEXTPROC __glewSecondaryColor3uiEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIVEXTPROC __glewSecondaryColor3uivEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USEXTPROC __glewSecondaryColor3usEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVEXTPROC __glewSecondaryColor3usvEXT;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTEREXTPROC __glewSecondaryColorPointerEXT;
+
+GLEW_FUN_EXPORT PFNGLACTIVEPROGRAMEXTPROC __glewActiveProgramEXT;
+GLEW_FUN_EXPORT PFNGLCREATESHADERPROGRAMEXTPROC __glewCreateShaderProgramEXT;
+GLEW_FUN_EXPORT PFNGLUSESHADERPROGRAMEXTPROC __glewUseShaderProgramEXT;
+
+GLEW_FUN_EXPORT PFNGLBINDIMAGETEXTUREEXTPROC __glewBindImageTextureEXT;
+GLEW_FUN_EXPORT PFNGLMEMORYBARRIEREXTPROC __glewMemoryBarrierEXT;
+
+GLEW_FUN_EXPORT PFNGLACTIVESTENCILFACEEXTPROC __glewActiveStencilFaceEXT;
+
+GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE1DEXTPROC __glewTexSubImage1DEXT;
+GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE2DEXTPROC __glewTexSubImage2DEXT;
+GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DEXTPROC __glewTexSubImage3DEXT;
+
+GLEW_FUN_EXPORT PFNGLTEXIMAGE3DEXTPROC __glewTexImage3DEXT;
+
+GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC __glewFramebufferTextureLayerEXT;
+
+GLEW_FUN_EXPORT PFNGLTEXBUFFEREXTPROC __glewTexBufferEXT;
+
+GLEW_FUN_EXPORT PFNGLCLEARCOLORIIEXTPROC __glewClearColorIiEXT;
+GLEW_FUN_EXPORT PFNGLCLEARCOLORIUIEXTPROC __glewClearColorIuiEXT;
+GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIIVEXTPROC __glewGetTexParameterIivEXT;
+GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIUIVEXTPROC __glewGetTexParameterIuivEXT;
+GLEW_FUN_EXPORT PFNGLTEXPARAMETERIIVEXTPROC __glewTexParameterIivEXT;
+GLEW_FUN_EXPORT PFNGLTEXPARAMETERIUIVEXTPROC __glewTexParameterIuivEXT;
+
+GLEW_FUN_EXPORT PFNGLARETEXTURESRESIDENTEXTPROC __glewAreTexturesResidentEXT;
+GLEW_FUN_EXPORT PFNGLBINDTEXTUREEXTPROC __glewBindTextureEXT;
+GLEW_FUN_EXPORT PFNGLDELETETEXTURESEXTPROC __glewDeleteTexturesEXT;
+GLEW_FUN_EXPORT PFNGLGENTEXTURESEXTPROC __glewGenTexturesEXT;
+GLEW_FUN_EXPORT PFNGLISTEXTUREEXTPROC __glewIsTextureEXT;
+GLEW_FUN_EXPORT PFNGLPRIORITIZETEXTURESEXTPROC __glewPrioritizeTexturesEXT;
+
+GLEW_FUN_EXPORT PFNGLTEXTURENORMALEXTPROC __glewTextureNormalEXT;
+
+GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTI64VEXTPROC __glewGetQueryObjecti64vEXT;
+GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUI64VEXTPROC __glewGetQueryObjectui64vEXT;
+
+GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKEXTPROC __glewBeginTransformFeedbackEXT;
+GLEW_FUN_EXPORT PFNGLBINDBUFFERBASEEXTPROC __glewBindBufferBaseEXT;
+GLEW_FUN_EXPORT PFNGLBINDBUFFEROFFSETEXTPROC __glewBindBufferOffsetEXT;
+GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGEEXTPROC __glewBindBufferRangeEXT;
+GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKEXTPROC __glewEndTransformFeedbackEXT;
+GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC __glewGetTransformFeedbackVaryingEXT;
+GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC __glewTransformFeedbackVaryingsEXT;
+
+GLEW_FUN_EXPORT PFNGLARRAYELEMENTEXTPROC __glewArrayElementEXT;
+GLEW_FUN_EXPORT PFNGLCOLORPOINTEREXTPROC __glewColorPointerEXT;
+GLEW_FUN_EXPORT PFNGLDRAWARRAYSEXTPROC __glewDrawArraysEXT;
+GLEW_FUN_EXPORT PFNGLEDGEFLAGPOINTEREXTPROC __glewEdgeFlagPointerEXT;
+GLEW_FUN_EXPORT PFNGLINDEXPOINTEREXTPROC __glewIndexPointerEXT;
+GLEW_FUN_EXPORT PFNGLNORMALPOINTEREXTPROC __glewNormalPointerEXT;
+GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTEREXTPROC __glewTexCoordPointerEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXPOINTEREXTPROC __glewVertexPointerEXT;
+
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLDVEXTPROC __glewGetVertexAttribLdvEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC __glewVertexArrayVertexAttribLOffsetEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DEXTPROC __glewVertexAttribL1dEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DVEXTPROC __glewVertexAttribL1dvEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DEXTPROC __glewVertexAttribL2dEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DVEXTPROC __glewVertexAttribL2dvEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DEXTPROC __glewVertexAttribL3dEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DVEXTPROC __glewVertexAttribL3dvEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DEXTPROC __glewVertexAttribL4dEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DVEXTPROC __glewVertexAttribL4dvEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLPOINTEREXTPROC __glewVertexAttribLPointerEXT;
+
+GLEW_FUN_EXPORT PFNGLBEGINVERTEXSHADEREXTPROC __glewBeginVertexShaderEXT;
+GLEW_FUN_EXPORT PFNGLBINDLIGHTPARAMETEREXTPROC __glewBindLightParameterEXT;
+GLEW_FUN_EXPORT PFNGLBINDMATERIALPARAMETEREXTPROC __glewBindMaterialParameterEXT;
+GLEW_FUN_EXPORT PFNGLBINDPARAMETEREXTPROC __glewBindParameterEXT;
+GLEW_FUN_EXPORT PFNGLBINDTEXGENPARAMETEREXTPROC __glewBindTexGenParameterEXT;
+GLEW_FUN_EXPORT PFNGLBINDTEXTUREUNITPARAMETEREXTPROC __glewBindTextureUnitParameterEXT;
+GLEW_FUN_EXPORT PFNGLBINDVERTEXSHADEREXTPROC __glewBindVertexShaderEXT;
+GLEW_FUN_EXPORT PFNGLDELETEVERTEXSHADEREXTPROC __glewDeleteVertexShaderEXT;
+GLEW_FUN_EXPORT PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC __glewDisableVariantClientStateEXT;
+GLEW_FUN_EXPORT PFNGLENABLEVARIANTCLIENTSTATEEXTPROC __glewEnableVariantClientStateEXT;
+GLEW_FUN_EXPORT PFNGLENDVERTEXSHADEREXTPROC __glewEndVertexShaderEXT;
+GLEW_FUN_EXPORT PFNGLEXTRACTCOMPONENTEXTPROC __glewExtractComponentEXT;
+GLEW_FUN_EXPORT PFNGLGENSYMBOLSEXTPROC __glewGenSymbolsEXT;
+GLEW_FUN_EXPORT PFNGLGENVERTEXSHADERSEXTPROC __glewGenVertexShadersEXT;
+GLEW_FUN_EXPORT PFNGLGETINVARIANTBOOLEANVEXTPROC __glewGetInvariantBooleanvEXT;
+GLEW_FUN_EXPORT PFNGLGETINVARIANTFLOATVEXTPROC __glewGetInvariantFloatvEXT;
+GLEW_FUN_EXPORT PFNGLGETINVARIANTINTEGERVEXTPROC __glewGetInvariantIntegervEXT;
+GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC __glewGetLocalConstantBooleanvEXT;
+GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTFLOATVEXTPROC __glewGetLocalConstantFloatvEXT;
+GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTINTEGERVEXTPROC __glewGetLocalConstantIntegervEXT;
+GLEW_FUN_EXPORT PFNGLGETVARIANTBOOLEANVEXTPROC __glewGetVariantBooleanvEXT;
+GLEW_FUN_EXPORT PFNGLGETVARIANTFLOATVEXTPROC __glewGetVariantFloatvEXT;
+GLEW_FUN_EXPORT PFNGLGETVARIANTINTEGERVEXTPROC __glewGetVariantIntegervEXT;
+GLEW_FUN_EXPORT PFNGLGETVARIANTPOINTERVEXTPROC __glewGetVariantPointervEXT;
+GLEW_FUN_EXPORT PFNGLINSERTCOMPONENTEXTPROC __glewInsertComponentEXT;
+GLEW_FUN_EXPORT PFNGLISVARIANTENABLEDEXTPROC __glewIsVariantEnabledEXT;
+GLEW_FUN_EXPORT PFNGLSETINVARIANTEXTPROC __glewSetInvariantEXT;
+GLEW_FUN_EXPORT PFNGLSETLOCALCONSTANTEXTPROC __glewSetLocalConstantEXT;
+GLEW_FUN_EXPORT PFNGLSHADEROP1EXTPROC __glewShaderOp1EXT;
+GLEW_FUN_EXPORT PFNGLSHADEROP2EXTPROC __glewShaderOp2EXT;
+GLEW_FUN_EXPORT PFNGLSHADEROP3EXTPROC __glewShaderOp3EXT;
+GLEW_FUN_EXPORT PFNGLSWIZZLEEXTPROC __glewSwizzleEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTPOINTEREXTPROC __glewVariantPointerEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTBVEXTPROC __glewVariantbvEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTDVEXTPROC __glewVariantdvEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTFVEXTPROC __glewVariantfvEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTIVEXTPROC __glewVariantivEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTSVEXTPROC __glewVariantsvEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTUBVEXTPROC __glewVariantubvEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTUIVEXTPROC __glewVariantuivEXT;
+GLEW_FUN_EXPORT PFNGLVARIANTUSVEXTPROC __glewVariantusvEXT;
+GLEW_FUN_EXPORT PFNGLWRITEMASKEXTPROC __glewWriteMaskEXT;
+
+GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT;
+GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT;
+
+GLEW_FUN_EXPORT PFNGLIMPORTSYNCEXTPROC __glewImportSyncEXT;
+
+GLEW_FUN_EXPORT PFNGLFRAMETERMINATORGREMEDYPROC __glewFrameTerminatorGREMEDY;
+
+GLEW_FUN_EXPORT PFNGLSTRINGMARKERGREMEDYPROC __glewStringMarkerGREMEDY;
+
+GLEW_FUN_EXPORT PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC __glewGetImageTransformParameterfvHP;
+GLEW_FUN_EXPORT PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC __glewGetImageTransformParameterivHP;
+GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERFHPPROC __glewImageTransformParameterfHP;
+GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERFVHPPROC __glewImageTransformParameterfvHP;
+GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERIHPPROC __glewImageTransformParameteriHP;
+GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERIVHPPROC __glewImageTransformParameterivHP;
+
+GLEW_FUN_EXPORT PFNGLMULTIMODEDRAWARRAYSIBMPROC __glewMultiModeDrawArraysIBM;
+GLEW_FUN_EXPORT PFNGLMULTIMODEDRAWELEMENTSIBMPROC __glewMultiModeDrawElementsIBM;
+
+GLEW_FUN_EXPORT PFNGLCOLORPOINTERLISTIBMPROC __glewColorPointerListIBM;
+GLEW_FUN_EXPORT PFNGLEDGEFLAGPOINTERLISTIBMPROC __glewEdgeFlagPointerListIBM;
+GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTERLISTIBMPROC __glewFogCoordPointerListIBM;
+GLEW_FUN_EXPORT PFNGLINDEXPOINTERLISTIBMPROC __glewIndexPointerListIBM;
+GLEW_FUN_EXPORT PFNGLNORMALPOINTERLISTIBMPROC __glewNormalPointerListIBM;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERLISTIBMPROC __glewSecondaryColorPointerListIBM;
+GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERLISTIBMPROC __glewTexCoordPointerListIBM;
+GLEW_FUN_EXPORT PFNGLVERTEXPOINTERLISTIBMPROC __glewVertexPointerListIBM;
+
+GLEW_FUN_EXPORT PFNGLCOLORPOINTERVINTELPROC __glewColorPointervINTEL;
+GLEW_FUN_EXPORT PFNGLNORMALPOINTERVINTELPROC __glewNormalPointervINTEL;
+GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERVINTELPROC __glewTexCoordPointervINTEL;
+GLEW_FUN_EXPORT PFNGLVERTEXPOINTERVINTELPROC __glewVertexPointervINTEL;
+
+GLEW_FUN_EXPORT PFNGLTEXSCISSORFUNCINTELPROC __glewTexScissorFuncINTEL;
+GLEW_FUN_EXPORT PFNGLTEXSCISSORINTELPROC __glewTexScissorINTEL;
+
+GLEW_FUN_EXPORT PFNGLBUFFERREGIONENABLEDPROC __glewBufferRegionEnabled;
+GLEW_FUN_EXPORT PFNGLDELETEBUFFERREGIONPROC __glewDeleteBufferRegion;
+GLEW_FUN_EXPORT PFNGLDRAWBUFFERREGIONPROC __glewDrawBufferRegion;
+GLEW_FUN_EXPORT PFNGLNEWBUFFERREGIONPROC __glewNewBufferRegion;
+GLEW_FUN_EXPORT PFNGLREADBUFFERREGIONPROC __glewReadBufferRegion;
+
+GLEW_FUN_EXPORT PFNGLRESIZEBUFFERSMESAPROC __glewResizeBuffersMESA;
+
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2DMESAPROC __glewWindowPos2dMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVMESAPROC __glewWindowPos2dvMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2FMESAPROC __glewWindowPos2fMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVMESAPROC __glewWindowPos2fvMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2IMESAPROC __glewWindowPos2iMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVMESAPROC __glewWindowPos2ivMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2SMESAPROC __glewWindowPos2sMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVMESAPROC __glewWindowPos2svMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3DMESAPROC __glewWindowPos3dMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVMESAPROC __glewWindowPos3dvMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3FMESAPROC __glewWindowPos3fMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVMESAPROC __glewWindowPos3fvMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3IMESAPROC __glewWindowPos3iMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVMESAPROC __glewWindowPos3ivMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3SMESAPROC __glewWindowPos3sMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVMESAPROC __glewWindowPos3svMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4DMESAPROC __glewWindowPos4dMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4DVMESAPROC __glewWindowPos4dvMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4FMESAPROC __glewWindowPos4fMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4FVMESAPROC __glewWindowPos4fvMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4IMESAPROC __glewWindowPos4iMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4IVMESAPROC __glewWindowPos4ivMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4SMESAPROC __glewWindowPos4sMESA;
+GLEW_FUN_EXPORT PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA;
+
+GLEW_FUN_EXPORT PFNGLBEGINCONDITIONALRENDERNVPROC __glewBeginConditionalRenderNV;
+GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERNVPROC __glewEndConditionalRenderNV;
+
+GLEW_FUN_EXPORT PFNGLCOPYIMAGESUBDATANVPROC __glewCopyImageSubDataNV;
+
+GLEW_FUN_EXPORT PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV;
+GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSDNVPROC __glewDepthBoundsdNV;
+GLEW_FUN_EXPORT PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV;
+
+GLEW_FUN_EXPORT PFNGLEVALMAPSNVPROC __glewEvalMapsNV;
+GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV;
+GLEW_FUN_EXPORT PFNGLGETMAPCONTROLPOINTSNVPROC __glewGetMapControlPointsNV;
+GLEW_FUN_EXPORT PFNGLGETMAPPARAMETERFVNVPROC __glewGetMapParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETMAPPARAMETERIVNVPROC __glewGetMapParameterivNV;
+GLEW_FUN_EXPORT PFNGLMAPCONTROLPOINTSNVPROC __glewMapControlPointsNV;
+GLEW_FUN_EXPORT PFNGLMAPPARAMETERFVNVPROC __glewMapParameterfvNV;
+GLEW_FUN_EXPORT PFNGLMAPPARAMETERIVNVPROC __glewMapParameterivNV;
+
+GLEW_FUN_EXPORT PFNGLGETMULTISAMPLEFVNVPROC __glewGetMultisamplefvNV;
+GLEW_FUN_EXPORT PFNGLSAMPLEMASKINDEXEDNVPROC __glewSampleMaskIndexedNV;
+GLEW_FUN_EXPORT PFNGLTEXRENDERBUFFERNVPROC __glewTexRenderbufferNV;
+
+GLEW_FUN_EXPORT PFNGLDELETEFENCESNVPROC __glewDeleteFencesNV;
+GLEW_FUN_EXPORT PFNGLFINISHFENCENVPROC __glewFinishFenceNV;
+GLEW_FUN_EXPORT PFNGLGENFENCESNVPROC __glewGenFencesNV;
+GLEW_FUN_EXPORT PFNGLGETFENCEIVNVPROC __glewGetFenceivNV;
+GLEW_FUN_EXPORT PFNGLISFENCENVPROC __glewIsFenceNV;
+GLEW_FUN_EXPORT PFNGLSETFENCENVPROC __glewSetFenceNV;
+GLEW_FUN_EXPORT PFNGLTESTFENCENVPROC __glewTestFenceNV;
+
+GLEW_FUN_EXPORT PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC __glewGetProgramNamedParameterdvNV;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC __glewGetProgramNamedParameterfvNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DNVPROC __glewProgramNamedParameter4dNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC __glewProgramNamedParameter4dvNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FNVPROC __glewProgramNamedParameter4fNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC __glewProgramNamedParameter4fvNV;
+
+GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC __glewRenderbufferStorageMultisampleCoverageNV;
+
+GLEW_FUN_EXPORT PFNGLPROGRAMVERTEXLIMITNVPROC __glewProgramVertexLimitNV;
+
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4INVPROC __glewProgramEnvParameterI4iNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4IVNVPROC __glewProgramEnvParameterI4ivNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4UINVPROC __glewProgramEnvParameterI4uiNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4UIVNVPROC __glewProgramEnvParameterI4uivNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERSI4IVNVPROC __glewProgramEnvParametersI4ivNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC __glewProgramEnvParametersI4uivNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4INVPROC __glewProgramLocalParameterI4iNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC __glewProgramLocalParameterI4ivNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4UINVPROC __glewProgramLocalParameterI4uiNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC __glewProgramLocalParameterI4uivNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC __glewProgramLocalParametersI4ivNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC __glewProgramLocalParametersI4uivNV;
+
+GLEW_FUN_EXPORT PFNGLGETUNIFORMI64VNVPROC __glewGetUniformi64vNV;
+GLEW_FUN_EXPORT PFNGLGETUNIFORMUI64VNVPROC __glewGetUniformui64vNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1I64NVPROC __glewProgramUniform1i64NV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1I64VNVPROC __glewProgramUniform1i64vNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UI64NVPROC __glewProgramUniform1ui64NV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UI64VNVPROC __glewProgramUniform1ui64vNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2I64NVPROC __glewProgramUniform2i64NV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2I64VNVPROC __glewProgramUniform2i64vNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UI64NVPROC __glewProgramUniform2ui64NV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UI64VNVPROC __glewProgramUniform2ui64vNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3I64NVPROC __glewProgramUniform3i64NV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3I64VNVPROC __glewProgramUniform3i64vNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UI64NVPROC __glewProgramUniform3ui64NV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UI64VNVPROC __glewProgramUniform3ui64vNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4I64NVPROC __glewProgramUniform4i64NV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4I64VNVPROC __glewProgramUniform4i64vNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UI64NVPROC __glewProgramUniform4ui64NV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UI64VNVPROC __glewProgramUniform4ui64vNV;
+GLEW_FUN_EXPORT PFNGLUNIFORM1I64NVPROC __glewUniform1i64NV;
+GLEW_FUN_EXPORT PFNGLUNIFORM1I64VNVPROC __glewUniform1i64vNV;
+GLEW_FUN_EXPORT PFNGLUNIFORM1UI64NVPROC __glewUniform1ui64NV;
+GLEW_FUN_EXPORT PFNGLUNIFORM1UI64VNVPROC __glewUniform1ui64vNV;
+GLEW_FUN_EXPORT PFNGLUNIFORM2I64NVPROC __glewUniform2i64NV;
+GLEW_FUN_EXPORT PFNGLUNIFORM2I64VNVPROC __glewUniform2i64vNV;
+GLEW_FUN_EXPORT PFNGLUNIFORM2UI64NVPROC __glewUniform2ui64NV;
+GLEW_FUN_EXPORT PFNGLUNIFORM2UI64VNVPROC __glewUniform2ui64vNV;
+GLEW_FUN_EXPORT PFNGLUNIFORM3I64NVPROC __glewUniform3i64NV;
+GLEW_FUN_EXPORT PFNGLUNIFORM3I64VNVPROC __glewUniform3i64vNV;
+GLEW_FUN_EXPORT PFNGLUNIFORM3UI64NVPROC __glewUniform3ui64NV;
+GLEW_FUN_EXPORT PFNGLUNIFORM3UI64VNVPROC __glewUniform3ui64vNV;
+GLEW_FUN_EXPORT PFNGLUNIFORM4I64NVPROC __glewUniform4i64NV;
+GLEW_FUN_EXPORT PFNGLUNIFORM4I64VNVPROC __glewUniform4i64vNV;
+GLEW_FUN_EXPORT PFNGLUNIFORM4UI64NVPROC __glewUniform4ui64NV;
+GLEW_FUN_EXPORT PFNGLUNIFORM4UI64VNVPROC __glewUniform4ui64vNV;
+
+GLEW_FUN_EXPORT PFNGLCOLOR3HNVPROC __glewColor3hNV;
+GLEW_FUN_EXPORT PFNGLCOLOR3HVNVPROC __glewColor3hvNV;
+GLEW_FUN_EXPORT PFNGLCOLOR4HNVPROC __glewColor4hNV;
+GLEW_FUN_EXPORT PFNGLCOLOR4HVNVPROC __glewColor4hvNV;
+GLEW_FUN_EXPORT PFNGLFOGCOORDHNVPROC __glewFogCoordhNV;
+GLEW_FUN_EXPORT PFNGLFOGCOORDHVNVPROC __glewFogCoordhvNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1HNVPROC __glewMultiTexCoord1hNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1HVNVPROC __glewMultiTexCoord1hvNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2HNVPROC __glewMultiTexCoord2hNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2HVNVPROC __glewMultiTexCoord2hvNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3HNVPROC __glewMultiTexCoord3hNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3HVNVPROC __glewMultiTexCoord3hvNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4HNVPROC __glewMultiTexCoord4hNV;
+GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4HVNVPROC __glewMultiTexCoord4hvNV;
+GLEW_FUN_EXPORT PFNGLNORMAL3HNVPROC __glewNormal3hNV;
+GLEW_FUN_EXPORT PFNGLNORMAL3HVNVPROC __glewNormal3hvNV;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3HNVPROC __glewSecondaryColor3hNV;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3HVNVPROC __glewSecondaryColor3hvNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD1HNVPROC __glewTexCoord1hNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD1HVNVPROC __glewTexCoord1hvNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2HNVPROC __glewTexCoord2hNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2HVNVPROC __glewTexCoord2hvNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD3HNVPROC __glewTexCoord3hNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD3HVNVPROC __glewTexCoord3hvNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD4HNVPROC __glewTexCoord4hNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORD4HVNVPROC __glewTexCoord4hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEX2HNVPROC __glewVertex2hNV;
+GLEW_FUN_EXPORT PFNGLVERTEX2HVNVPROC __glewVertex2hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEX3HNVPROC __glewVertex3hNV;
+GLEW_FUN_EXPORT PFNGLVERTEX3HVNVPROC __glewVertex3hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEX4HNVPROC __glewVertex4hNV;
+GLEW_FUN_EXPORT PFNGLVERTEX4HVNVPROC __glewVertex4hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1HNVPROC __glewVertexAttrib1hNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1HVNVPROC __glewVertexAttrib1hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2HNVPROC __glewVertexAttrib2hNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2HVNVPROC __glewVertexAttrib2hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3HNVPROC __glewVertexAttrib3hNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3HVNVPROC __glewVertexAttrib3hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4HNVPROC __glewVertexAttrib4hNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4HVNVPROC __glewVertexAttrib4hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1HVNVPROC __glewVertexAttribs1hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2HVNVPROC __glewVertexAttribs2hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3HVNVPROC __glewVertexAttribs3hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4HVNVPROC __glewVertexAttribs4hvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHNVPROC __glewVertexWeighthNV;
+GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHVNVPROC __glewVertexWeighthvNV;
+
+GLEW_FUN_EXPORT PFNGLBEGINOCCLUSIONQUERYNVPROC __glewBeginOcclusionQueryNV;
+GLEW_FUN_EXPORT PFNGLDELETEOCCLUSIONQUERIESNVPROC __glewDeleteOcclusionQueriesNV;
+GLEW_FUN_EXPORT PFNGLENDOCCLUSIONQUERYNVPROC __glewEndOcclusionQueryNV;
+GLEW_FUN_EXPORT PFNGLGENOCCLUSIONQUERIESNVPROC __glewGenOcclusionQueriesNV;
+GLEW_FUN_EXPORT PFNGLGETOCCLUSIONQUERYIVNVPROC __glewGetOcclusionQueryivNV;
+GLEW_FUN_EXPORT PFNGLGETOCCLUSIONQUERYUIVNVPROC __glewGetOcclusionQueryuivNV;
+GLEW_FUN_EXPORT PFNGLISOCCLUSIONQUERYNVPROC __glewIsOcclusionQueryNV;
+
+GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC __glewProgramBufferParametersIivNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC __glewProgramBufferParametersIuivNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC __glewProgramBufferParametersfvNV;
+
+GLEW_FUN_EXPORT PFNGLCOPYPATHNVPROC __glewCopyPathNV;
+GLEW_FUN_EXPORT PFNGLCOVERFILLPATHINSTANCEDNVPROC __glewCoverFillPathInstancedNV;
+GLEW_FUN_EXPORT PFNGLCOVERFILLPATHNVPROC __glewCoverFillPathNV;
+GLEW_FUN_EXPORT PFNGLCOVERSTROKEPATHINSTANCEDNVPROC __glewCoverStrokePathInstancedNV;
+GLEW_FUN_EXPORT PFNGLCOVERSTROKEPATHNVPROC __glewCoverStrokePathNV;
+GLEW_FUN_EXPORT PFNGLDELETEPATHSNVPROC __glewDeletePathsNV;
+GLEW_FUN_EXPORT PFNGLGENPATHSNVPROC __glewGenPathsNV;
+GLEW_FUN_EXPORT PFNGLGETPATHCOLORGENFVNVPROC __glewGetPathColorGenfvNV;
+GLEW_FUN_EXPORT PFNGLGETPATHCOLORGENIVNVPROC __glewGetPathColorGenivNV;
+GLEW_FUN_EXPORT PFNGLGETPATHCOMMANDSNVPROC __glewGetPathCommandsNV;
+GLEW_FUN_EXPORT PFNGLGETPATHCOORDSNVPROC __glewGetPathCoordsNV;
+GLEW_FUN_EXPORT PFNGLGETPATHDASHARRAYNVPROC __glewGetPathDashArrayNV;
+GLEW_FUN_EXPORT PFNGLGETPATHLENGTHNVPROC __glewGetPathLengthNV;
+GLEW_FUN_EXPORT PFNGLGETPATHMETRICRANGENVPROC __glewGetPathMetricRangeNV;
+GLEW_FUN_EXPORT PFNGLGETPATHMETRICSNVPROC __glewGetPathMetricsNV;
+GLEW_FUN_EXPORT PFNGLGETPATHPARAMETERFVNVPROC __glewGetPathParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETPATHPARAMETERIVNVPROC __glewGetPathParameterivNV;
+GLEW_FUN_EXPORT PFNGLGETPATHSPACINGNVPROC __glewGetPathSpacingNV;
+GLEW_FUN_EXPORT PFNGLGETPATHTEXGENFVNVPROC __glewGetPathTexGenfvNV;
+GLEW_FUN_EXPORT PFNGLGETPATHTEXGENIVNVPROC __glewGetPathTexGenivNV;
+GLEW_FUN_EXPORT PFNGLINTERPOLATEPATHSNVPROC __glewInterpolatePathsNV;
+GLEW_FUN_EXPORT PFNGLISPATHNVPROC __glewIsPathNV;
+GLEW_FUN_EXPORT PFNGLISPOINTINFILLPATHNVPROC __glewIsPointInFillPathNV;
+GLEW_FUN_EXPORT PFNGLISPOINTINSTROKEPATHNVPROC __glewIsPointInStrokePathNV;
+GLEW_FUN_EXPORT PFNGLPATHCOLORGENNVPROC __glewPathColorGenNV;
+GLEW_FUN_EXPORT PFNGLPATHCOMMANDSNVPROC __glewPathCommandsNV;
+GLEW_FUN_EXPORT PFNGLPATHCOORDSNVPROC __glewPathCoordsNV;
+GLEW_FUN_EXPORT PFNGLPATHCOVERDEPTHFUNCNVPROC __glewPathCoverDepthFuncNV;
+GLEW_FUN_EXPORT PFNGLPATHDASHARRAYNVPROC __glewPathDashArrayNV;
+GLEW_FUN_EXPORT PFNGLPATHFOGGENNVPROC __glewPathFogGenNV;
+GLEW_FUN_EXPORT PFNGLPATHGLYPHRANGENVPROC __glewPathGlyphRangeNV;
+GLEW_FUN_EXPORT PFNGLPATHGLYPHSNVPROC __glewPathGlyphsNV;
+GLEW_FUN_EXPORT PFNGLPATHPARAMETERFNVPROC __glewPathParameterfNV;
+GLEW_FUN_EXPORT PFNGLPATHPARAMETERFVNVPROC __glewPathParameterfvNV;
+GLEW_FUN_EXPORT PFNGLPATHPARAMETERINVPROC __glewPathParameteriNV;
+GLEW_FUN_EXPORT PFNGLPATHPARAMETERIVNVPROC __glewPathParameterivNV;
+GLEW_FUN_EXPORT PFNGLPATHSTENCILDEPTHOFFSETNVPROC __glewPathStencilDepthOffsetNV;
+GLEW_FUN_EXPORT PFNGLPATHSTENCILFUNCNVPROC __glewPathStencilFuncNV;
+GLEW_FUN_EXPORT PFNGLPATHSTRINGNVPROC __glewPathStringNV;
+GLEW_FUN_EXPORT PFNGLPATHSUBCOMMANDSNVPROC __glewPathSubCommandsNV;
+GLEW_FUN_EXPORT PFNGLPATHSUBCOORDSNVPROC __glewPathSubCoordsNV;
+GLEW_FUN_EXPORT PFNGLPATHTEXGENNVPROC __glewPathTexGenNV;
+GLEW_FUN_EXPORT PFNGLPOINTALONGPATHNVPROC __glewPointAlongPathNV;
+GLEW_FUN_EXPORT PFNGLSTENCILFILLPATHINSTANCEDNVPROC __glewStencilFillPathInstancedNV;
+GLEW_FUN_EXPORT PFNGLSTENCILFILLPATHNVPROC __glewStencilFillPathNV;
+GLEW_FUN_EXPORT PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC __glewStencilStrokePathInstancedNV;
+GLEW_FUN_EXPORT PFNGLSTENCILSTROKEPATHNVPROC __glewStencilStrokePathNV;
+GLEW_FUN_EXPORT PFNGLTRANSFORMPATHNVPROC __glewTransformPathNV;
+GLEW_FUN_EXPORT PFNGLWEIGHTPATHSNVPROC __glewWeightPathsNV;
+
+GLEW_FUN_EXPORT PFNGLFLUSHPIXELDATARANGENVPROC __glewFlushPixelDataRangeNV;
+GLEW_FUN_EXPORT PFNGLPIXELDATARANGENVPROC __glewPixelDataRangeNV;
+
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERINVPROC __glewPointParameteriNV;
+GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIVNVPROC __glewPointParameterivNV;
+
+GLEW_FUN_EXPORT PFNGLGETVIDEOI64VNVPROC __glewGetVideoi64vNV;
+GLEW_FUN_EXPORT PFNGLGETVIDEOIVNVPROC __glewGetVideoivNV;
+GLEW_FUN_EXPORT PFNGLGETVIDEOUI64VNVPROC __glewGetVideoui64vNV;
+GLEW_FUN_EXPORT PFNGLGETVIDEOUIVNVPROC __glewGetVideouivNV;
+GLEW_FUN_EXPORT PFNGLPRESENTFRAMEDUALFILLNVPROC __glewPresentFrameDualFillNV;
+GLEW_FUN_EXPORT PFNGLPRESENTFRAMEKEYEDNVPROC __glewPresentFrameKeyedNV;
+
+GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTINDEXNVPROC __glewPrimitiveRestartIndexNV;
+GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTNVPROC __glewPrimitiveRestartNV;
+
+GLEW_FUN_EXPORT PFNGLCOMBINERINPUTNVPROC __glewCombinerInputNV;
+GLEW_FUN_EXPORT PFNGLCOMBINEROUTPUTNVPROC __glewCombinerOutputNV;
+GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERFNVPROC __glewCombinerParameterfNV;
+GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERFVNVPROC __glewCombinerParameterfvNV;
+GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERINVPROC __glewCombinerParameteriNV;
+GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERIVNVPROC __glewCombinerParameterivNV;
+GLEW_FUN_EXPORT PFNGLFINALCOMBINERINPUTNVPROC __glewFinalCombinerInputNV;
+GLEW_FUN_EXPORT PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC __glewGetCombinerInputParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC __glewGetCombinerInputParameterivNV;
+GLEW_FUN_EXPORT PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC __glewGetCombinerOutputParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC __glewGetCombinerOutputParameterivNV;
+GLEW_FUN_EXPORT PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC __glewGetFinalCombinerInputParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC __glewGetFinalCombinerInputParameterivNV;
+
+GLEW_FUN_EXPORT PFNGLCOMBINERSTAGEPARAMETERFVNVPROC __glewCombinerStageParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC __glewGetCombinerStageParameterfvNV;
+
+GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERUI64VNVPROC __glewGetBufferParameterui64vNV;
+GLEW_FUN_EXPORT PFNGLGETINTEGERUI64VNVPROC __glewGetIntegerui64vNV;
+GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC __glewGetNamedBufferParameterui64vNV;
+GLEW_FUN_EXPORT PFNGLISBUFFERRESIDENTNVPROC __glewIsBufferResidentNV;
+GLEW_FUN_EXPORT PFNGLISNAMEDBUFFERRESIDENTNVPROC __glewIsNamedBufferResidentNV;
+GLEW_FUN_EXPORT PFNGLMAKEBUFFERNONRESIDENTNVPROC __glewMakeBufferNonResidentNV;
+GLEW_FUN_EXPORT PFNGLMAKEBUFFERRESIDENTNVPROC __glewMakeBufferResidentNV;
+GLEW_FUN_EXPORT PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC __glewMakeNamedBufferNonResidentNV;
+GLEW_FUN_EXPORT PFNGLMAKENAMEDBUFFERRESIDENTNVPROC __glewMakeNamedBufferResidentNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMUI64NVPROC __glewProgramUniformui64NV;
+GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMUI64VNVPROC __glewProgramUniformui64vNV;
+GLEW_FUN_EXPORT PFNGLUNIFORMUI64NVPROC __glewUniformui64NV;
+GLEW_FUN_EXPORT PFNGLUNIFORMUI64VNVPROC __glewUniformui64vNV;
+
+GLEW_FUN_EXPORT PFNGLTEXTUREBARRIERNVPROC __glewTextureBarrierNV;
+
+GLEW_FUN_EXPORT PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTexImage2DMultisampleCoverageNV;
+GLEW_FUN_EXPORT PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC __glewTexImage3DMultisampleCoverageNV;
+GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTextureImage2DMultisampleCoverageNV;
+GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC __glewTextureImage2DMultisampleNV;
+GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC __glewTextureImage3DMultisampleCoverageNV;
+GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC __glewTextureImage3DMultisampleNV;
+
+GLEW_FUN_EXPORT PFNGLACTIVEVARYINGNVPROC __glewActiveVaryingNV;
+GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKNVPROC __glewBeginTransformFeedbackNV;
+GLEW_FUN_EXPORT PFNGLBINDBUFFERBASENVPROC __glewBindBufferBaseNV;
+GLEW_FUN_EXPORT PFNGLBINDBUFFEROFFSETNVPROC __glewBindBufferOffsetNV;
+GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGENVPROC __glewBindBufferRangeNV;
+GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKNVPROC __glewEndTransformFeedbackNV;
+GLEW_FUN_EXPORT PFNGLGETACTIVEVARYINGNVPROC __glewGetActiveVaryingNV;
+GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC __glewGetTransformFeedbackVaryingNV;
+GLEW_FUN_EXPORT PFNGLGETVARYINGLOCATIONNVPROC __glewGetVaryingLocationNV;
+GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC __glewTransformFeedbackAttribsNV;
+GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC __glewTransformFeedbackVaryingsNV;
+
+GLEW_FUN_EXPORT PFNGLBINDTRANSFORMFEEDBACKNVPROC __glewBindTransformFeedbackNV;
+GLEW_FUN_EXPORT PFNGLDELETETRANSFORMFEEDBACKSNVPROC __glewDeleteTransformFeedbacksNV;
+GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKNVPROC __glewDrawTransformFeedbackNV;
+GLEW_FUN_EXPORT PFNGLGENTRANSFORMFEEDBACKSNVPROC __glewGenTransformFeedbacksNV;
+GLEW_FUN_EXPORT PFNGLISTRANSFORMFEEDBACKNVPROC __glewIsTransformFeedbackNV;
+GLEW_FUN_EXPORT PFNGLPAUSETRANSFORMFEEDBACKNVPROC __glewPauseTransformFeedbackNV;
+GLEW_FUN_EXPORT PFNGLRESUMETRANSFORMFEEDBACKNVPROC __glewResumeTransformFeedbackNV;
+
+GLEW_FUN_EXPORT PFNGLVDPAUFININVPROC __glewVDPAUFiniNV;
+GLEW_FUN_EXPORT PFNGLVDPAUGETSURFACEIVNVPROC __glewVDPAUGetSurfaceivNV;
+GLEW_FUN_EXPORT PFNGLVDPAUINITNVPROC __glewVDPAUInitNV;
+GLEW_FUN_EXPORT PFNGLVDPAUISSURFACENVPROC __glewVDPAUIsSurfaceNV;
+GLEW_FUN_EXPORT PFNGLVDPAUMAPSURFACESNVPROC __glewVDPAUMapSurfacesNV;
+GLEW_FUN_EXPORT PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC __glewVDPAURegisterOutputSurfaceNV;
+GLEW_FUN_EXPORT PFNGLVDPAUREGISTERVIDEOSURFACENVPROC __glewVDPAURegisterVideoSurfaceNV;
+GLEW_FUN_EXPORT PFNGLVDPAUSURFACEACCESSNVPROC __glewVDPAUSurfaceAccessNV;
+GLEW_FUN_EXPORT PFNGLVDPAUUNMAPSURFACESNVPROC __glewVDPAUUnmapSurfacesNV;
+GLEW_FUN_EXPORT PFNGLVDPAUUNREGISTERSURFACENVPROC __glewVDPAUUnregisterSurfaceNV;
+
+GLEW_FUN_EXPORT PFNGLFLUSHVERTEXARRAYRANGENVPROC __glewFlushVertexArrayRangeNV;
+GLEW_FUN_EXPORT PFNGLVERTEXARRAYRANGENVPROC __glewVertexArrayRangeNV;
+
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLI64VNVPROC __glewGetVertexAttribLi64vNV;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLUI64VNVPROC __glewGetVertexAttribLui64vNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1I64NVPROC __glewVertexAttribL1i64NV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1I64VNVPROC __glewVertexAttribL1i64vNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1UI64NVPROC __glewVertexAttribL1ui64NV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1UI64VNVPROC __glewVertexAttribL1ui64vNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2I64NVPROC __glewVertexAttribL2i64NV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2I64VNVPROC __glewVertexAttribL2i64vNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2UI64NVPROC __glewVertexAttribL2ui64NV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2UI64VNVPROC __glewVertexAttribL2ui64vNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3I64NVPROC __glewVertexAttribL3i64NV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3I64VNVPROC __glewVertexAttribL3i64vNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3UI64NVPROC __glewVertexAttribL3ui64NV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3UI64VNVPROC __glewVertexAttribL3ui64vNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4I64NVPROC __glewVertexAttribL4i64NV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4I64VNVPROC __glewVertexAttribL4i64vNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4UI64NVPROC __glewVertexAttribL4ui64NV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4UI64VNVPROC __glewVertexAttribL4ui64vNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLFORMATNVPROC __glewVertexAttribLFormatNV;
+
+GLEW_FUN_EXPORT PFNGLBUFFERADDRESSRANGENVPROC __glewBufferAddressRangeNV;
+GLEW_FUN_EXPORT PFNGLCOLORFORMATNVPROC __glewColorFormatNV;
+GLEW_FUN_EXPORT PFNGLEDGEFLAGFORMATNVPROC __glewEdgeFlagFormatNV;
+GLEW_FUN_EXPORT PFNGLFOGCOORDFORMATNVPROC __glewFogCoordFormatNV;
+GLEW_FUN_EXPORT PFNGLGETINTEGERUI64I_VNVPROC __glewGetIntegerui64i_vNV;
+GLEW_FUN_EXPORT PFNGLINDEXFORMATNVPROC __glewIndexFormatNV;
+GLEW_FUN_EXPORT PFNGLNORMALFORMATNVPROC __glewNormalFormatNV;
+GLEW_FUN_EXPORT PFNGLSECONDARYCOLORFORMATNVPROC __glewSecondaryColorFormatNV;
+GLEW_FUN_EXPORT PFNGLTEXCOORDFORMATNVPROC __glewTexCoordFormatNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBFORMATNVPROC __glewVertexAttribFormatNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIFORMATNVPROC __glewVertexAttribIFormatNV;
+GLEW_FUN_EXPORT PFNGLVERTEXFORMATNVPROC __glewVertexFormatNV;
+
+GLEW_FUN_EXPORT PFNGLAREPROGRAMSRESIDENTNVPROC __glewAreProgramsResidentNV;
+GLEW_FUN_EXPORT PFNGLBINDPROGRAMNVPROC __glewBindProgramNV;
+GLEW_FUN_EXPORT PFNGLDELETEPROGRAMSNVPROC __glewDeleteProgramsNV;
+GLEW_FUN_EXPORT PFNGLEXECUTEPROGRAMNVPROC __glewExecuteProgramNV;
+GLEW_FUN_EXPORT PFNGLGENPROGRAMSNVPROC __glewGenProgramsNV;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMPARAMETERDVNVPROC __glewGetProgramParameterdvNV;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMPARAMETERFVNVPROC __glewGetProgramParameterfvNV;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMSTRINGNVPROC __glewGetProgramStringNV;
+GLEW_FUN_EXPORT PFNGLGETPROGRAMIVNVPROC __glewGetProgramivNV;
+GLEW_FUN_EXPORT PFNGLGETTRACKMATRIXIVNVPROC __glewGetTrackMatrixivNV;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVNVPROC __glewGetVertexAttribPointervNV;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVNVPROC __glewGetVertexAttribdvNV;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVNVPROC __glewGetVertexAttribfvNV;
+GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVNVPROC __glewGetVertexAttribivNV;
+GLEW_FUN_EXPORT PFNGLISPROGRAMNVPROC __glewIsProgramNV;
+GLEW_FUN_EXPORT PFNGLLOADPROGRAMNVPROC __glewLoadProgramNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4DNVPROC __glewProgramParameter4dNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4DVNVPROC __glewProgramParameter4dvNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4FNVPROC __glewProgramParameter4fNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4FVNVPROC __glewProgramParameter4fvNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERS4DVNVPROC __glewProgramParameters4dvNV;
+GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERS4FVNVPROC __glewProgramParameters4fvNV;
+GLEW_FUN_EXPORT PFNGLREQUESTRESIDENTPROGRAMSNVPROC __glewRequestResidentProgramsNV;
+GLEW_FUN_EXPORT PFNGLTRACKMATRIXNVPROC __glewTrackMatrixNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DNVPROC __glewVertexAttrib1dNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVNVPROC __glewVertexAttrib1dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FNVPROC __glewVertexAttrib1fNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVNVPROC __glewVertexAttrib1fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SNVPROC __glewVertexAttrib1sNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVNVPROC __glewVertexAttrib1svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DNVPROC __glewVertexAttrib2dNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVNVPROC __glewVertexAttrib2dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FNVPROC __glewVertexAttrib2fNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVNVPROC __glewVertexAttrib2fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SNVPROC __glewVertexAttrib2sNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVNVPROC __glewVertexAttrib2svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DNVPROC __glewVertexAttrib3dNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVNVPROC __glewVertexAttrib3dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FNVPROC __glewVertexAttrib3fNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVNVPROC __glewVertexAttrib3fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SNVPROC __glewVertexAttrib3sNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVNVPROC __glewVertexAttrib3svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DNVPROC __glewVertexAttrib4dNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVNVPROC __glewVertexAttrib4dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FNVPROC __glewVertexAttrib4fNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVNVPROC __glewVertexAttrib4fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SNVPROC __glewVertexAttrib4sNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVNVPROC __glewVertexAttrib4svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBNVPROC __glewVertexAttrib4ubNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVNVPROC __glewVertexAttrib4ubvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERNVPROC __glewVertexAttribPointerNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1DVNVPROC __glewVertexAttribs1dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1FVNVPROC __glewVertexAttribs1fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1SVNVPROC __glewVertexAttribs1svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2DVNVPROC __glewVertexAttribs2dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2FVNVPROC __glewVertexAttribs2fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2SVNVPROC __glewVertexAttribs2svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3DVNVPROC __glewVertexAttribs3dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3FVNVPROC __glewVertexAttribs3fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3SVNVPROC __glewVertexAttribs3svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4DVNVPROC __glewVertexAttribs4dvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4FVNVPROC __glewVertexAttribs4fvNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4SVNVPROC __glewVertexAttribs4svNV;
+GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4UBVNVPROC __glewVertexAttribs4ubvNV;
+
+GLEW_FUN_EXPORT PFNGLBEGINVIDEOCAPTURENVPROC __glewBeginVideoCaptureNV;
+GLEW_FUN_EXPORT PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC __glewBindVideoCaptureStreamBufferNV;
+GLEW_FUN_EXPORT PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC __glewBindVideoCaptureStreamTextureNV;
+GLEW_FUN_EXPORT PFNGLENDVIDEOCAPTURENVPROC __glewEndVideoCaptureNV;
+GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTURESTREAMDVNVPROC __glewGetVideoCaptureStreamdvNV;
+GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTURESTREAMFVNVPROC __glewGetVideoCaptureStreamfvNV;
+GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTURESTREAMIVNVPROC __glewGetVideoCaptureStreamivNV;
+GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTUREIVNVPROC __glewGetVideoCaptureivNV;
+GLEW_FUN_EXPORT PFNGLVIDEOCAPTURENVPROC __glewVideoCaptureNV;
+GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC __glewVideoCaptureStreamParameterdvNV;
+GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC __glewVideoCaptureStreamParameterfvNV;
+GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC __glewVideoCaptureStreamParameterivNV;
+
+GLEW_FUN_EXPORT PFNGLCLEARDEPTHFOESPROC __glewClearDepthfOES;
+GLEW_FUN_EXPORT PFNGLCLIPPLANEFOESPROC __glewClipPlanefOES;
+GLEW_FUN_EXPORT PFNGLDEPTHRANGEFOESPROC __glewDepthRangefOES;
+GLEW_FUN_EXPORT PFNGLFRUSTUMFOESPROC __glewFrustumfOES;
+GLEW_FUN_EXPORT PFNGLGETCLIPPLANEFOESPROC __glewGetClipPlanefOES;
+GLEW_FUN_EXPORT PFNGLORTHOFOESPROC __glewOrthofOES;
+
+GLEW_FUN_EXPORT PFNGLDETAILTEXFUNCSGISPROC __glewDetailTexFuncSGIS;
+GLEW_FUN_EXPORT PFNGLGETDETAILTEXFUNCSGISPROC __glewGetDetailTexFuncSGIS;
+
+GLEW_FUN_EXPORT PFNGLFOGFUNCSGISPROC __glewFogFuncSGIS;
+GLEW_FUN_EXPORT PFNGLGETFOGFUNCSGISPROC __glewGetFogFuncSGIS;
+
+GLEW_FUN_EXPORT PFNGLSAMPLEMASKSGISPROC __glewSampleMaskSGIS;
+GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNSGISPROC __glewSamplePatternSGIS;
+
+GLEW_FUN_EXPORT PFNGLGETSHARPENTEXFUNCSGISPROC __glewGetSharpenTexFuncSGIS;
+GLEW_FUN_EXPORT PFNGLSHARPENTEXFUNCSGISPROC __glewSharpenTexFuncSGIS;
+
+GLEW_FUN_EXPORT PFNGLTEXIMAGE4DSGISPROC __glewTexImage4DSGIS;
+GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE4DSGISPROC __glewTexSubImage4DSGIS;
+
+GLEW_FUN_EXPORT PFNGLGETTEXFILTERFUNCSGISPROC __glewGetTexFilterFuncSGIS;
+GLEW_FUN_EXPORT PFNGLTEXFILTERFUNCSGISPROC __glewTexFilterFuncSGIS;
+
+GLEW_FUN_EXPORT PFNGLASYNCMARKERSGIXPROC __glewAsyncMarkerSGIX;
+GLEW_FUN_EXPORT PFNGLDELETEASYNCMARKERSSGIXPROC __glewDeleteAsyncMarkersSGIX;
+GLEW_FUN_EXPORT PFNGLFINISHASYNCSGIXPROC __glewFinishAsyncSGIX;
+GLEW_FUN_EXPORT PFNGLGENASYNCMARKERSSGIXPROC __glewGenAsyncMarkersSGIX;
+GLEW_FUN_EXPORT PFNGLISASYNCMARKERSGIXPROC __glewIsAsyncMarkerSGIX;
+GLEW_FUN_EXPORT PFNGLPOLLASYNCSGIXPROC __glewPollAsyncSGIX;
+
+GLEW_FUN_EXPORT PFNGLFLUSHRASTERSGIXPROC __glewFlushRasterSGIX;
+
+GLEW_FUN_EXPORT PFNGLTEXTUREFOGSGIXPROC __glewTextureFogSGIX;
+
+GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALSGIXPROC __glewFragmentColorMaterialSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFSGIXPROC __glewFragmentLightModelfSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFVSGIXPROC __glewFragmentLightModelfvSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELISGIXPROC __glewFragmentLightModeliSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIVSGIXPROC __glewFragmentLightModelivSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFSGIXPROC __glewFragmentLightfSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFVSGIXPROC __glewFragmentLightfvSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTISGIXPROC __glewFragmentLightiSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIVSGIXPROC __glewFragmentLightivSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFSGIXPROC __glewFragmentMaterialfSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFVSGIXPROC __glewFragmentMaterialfvSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALISGIXPROC __glewFragmentMaterialiSGIX;
+GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIVSGIXPROC __glewFragmentMaterialivSGIX;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTFVSGIXPROC __glewGetFragmentLightfvSGIX;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTIVSGIXPROC __glewGetFragmentLightivSGIX;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALFVSGIXPROC __glewGetFragmentMaterialfvSGIX;
+GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVSGIXPROC __glewGetFragmentMaterialivSGIX;
+
+GLEW_FUN_EXPORT PFNGLFRAMEZOOMSGIXPROC __glewFrameZoomSGIX;
+
+GLEW_FUN_EXPORT PFNGLPIXELTEXGENSGIXPROC __glewPixelTexGenSGIX;
+
+GLEW_FUN_EXPORT PFNGLREFERENCEPLANESGIXPROC __glewReferencePlaneSGIX;
+
+GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFSGIXPROC __glewSpriteParameterfSGIX;
+GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFVSGIXPROC __glewSpriteParameterfvSGIX;
+GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERISGIXPROC __glewSpriteParameteriSGIX;
+GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERIVSGIXPROC __glewSpriteParameterivSGIX;
+
+GLEW_FUN_EXPORT PFNGLTAGSAMPLEBUFFERSGIXPROC __glewTagSampleBufferSGIX;
+
+GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVSGIPROC __glewColorTableParameterfvSGI;
+GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVSGIPROC __glewColorTableParameterivSGI;
+GLEW_FUN_EXPORT PFNGLCOLORTABLESGIPROC __glewColorTableSGI;
+GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLESGIPROC __glewCopyColorTableSGI;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVSGIPROC __glewGetColorTableParameterfvSGI;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVSGIPROC __glewGetColorTableParameterivSGI;
+GLEW_FUN_EXPORT PFNGLGETCOLORTABLESGIPROC __glewGetColorTableSGI;
+
+GLEW_FUN_EXPORT PFNGLFINISHTEXTURESUNXPROC __glewFinishTextureSUNX;
+
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORBSUNPROC __glewGlobalAlphaFactorbSUN;
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORDSUNPROC __glewGlobalAlphaFactordSUN;
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORFSUNPROC __glewGlobalAlphaFactorfSUN;
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORISUNPROC __glewGlobalAlphaFactoriSUN;
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORSSUNPROC __glewGlobalAlphaFactorsSUN;
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUBSUNPROC __glewGlobalAlphaFactorubSUN;
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUISUNPROC __glewGlobalAlphaFactoruiSUN;
+GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUSSUNPROC __glewGlobalAlphaFactorusSUN;
+
+GLEW_FUN_EXPORT PFNGLREADVIDEOPIXELSSUNPROC __glewReadVideoPixelsSUN;
+
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEPOINTERSUNPROC __glewReplacementCodePointerSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUBSUNPROC __glewReplacementCodeubSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUBVSUNPROC __glewReplacementCodeubvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUISUNPROC __glewReplacementCodeuiSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVSUNPROC __glewReplacementCodeuivSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUSSUNPROC __glewReplacementCodeusSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUSVSUNPROC __glewReplacementCodeusvSUN;
+
+GLEW_FUN_EXPORT PFNGLCOLOR3FVERTEX3FSUNPROC __glewColor3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLCOLOR3FVERTEX3FVSUNPROC __glewColor3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewColor4fNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewColor4fNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX2FSUNPROC __glewColor4ubVertex2fSUN;
+GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX2FVSUNPROC __glewColor4ubVertex2fvSUN;
+GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX3FSUNPROC __glewColor4ubVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX3FVSUNPROC __glewColor4ubVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLNORMAL3FVERTEX3FSUNPROC __glewNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLNORMAL3FVERTEX3FVSUNPROC __glewNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC __glewReplacementCodeuiColor3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC __glewReplacementCodeuiColor4ubVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC __glewReplacementCodeuiColor4ubVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC __glewReplacementCodeuiVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC __glewReplacementCodeuiVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC __glewTexCoord2fColor3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC __glewTexCoord2fColor3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC __glewTexCoord2fColor4ubVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC __glewTexCoord2fColor4ubVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fNormal3fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fNormal3fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FVERTEX3FSUNPROC __glewTexCoord2fVertex3fSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD2FVERTEX3FVSUNPROC __glewTexCoord2fVertex3fvSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fvSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FSUNPROC __glewTexCoord4fVertex4fSUN;
+GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FVSUNPROC __glewTexCoord4fVertex4fvSUN;
+
+GLEW_FUN_EXPORT PFNGLADDSWAPHINTRECTWINPROC __glewAddSwapHintRectWIN;
+
+#if defined(GLEW_MX) && !defined(_WIN32)
+struct GLEWContextStruct
+{
+#endif /* GLEW_MX */
+
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_1;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2_1;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_3;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_4;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_5;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_2_0;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_2_1;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_0;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_1;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_2;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_3;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_0;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_1;
+GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_2;
+GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_multisample;
+GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_tbuffer;
+GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_texture_compression_FXT1;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_blend_minmax_factor;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_conservative_depth;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_debug_output;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_depth_clamp_separate;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_draw_buffers_blend;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_multi_draw_indirect;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_name_gen_delete;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_performance_monitor;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_sample_positions;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_seamless_cubemap_per_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_stencil_export;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_texture_texture4;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_transform_feedback3_lines_triangles;
+GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_tessellator;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_aux_depth_stencil;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_client_storage;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_element_array;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_fence;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_float_pixels;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_flush_buffer_range;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_object_purgeable;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_pixel_buffer;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_rgb_422;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_row_bytes;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_specular_vector;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_texture_range;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_transform_hint;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_range;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_program_evaluators;
+GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_ycbcr_422;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_ES2_compatibility;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_base_instance;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_blend_func_extended;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_cl_event;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_color_buffer_float;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compatibility;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compressed_texture_pixel_storage;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_conservative_depth;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_copy_buffer;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_debug_output;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_buffer_float;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_buffers;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_buffers_blend;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_elements_base_vertex;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_indirect;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_instanced;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_explicit_attrib_location;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_coord_conventions;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_program;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_program_shadow;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_framebuffer_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_framebuffer_sRGB;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_geometry_shader4;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_get_program_binary;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_gpu_shader5;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_gpu_shader_fp64;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_pixel;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_vertex;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_imaging;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_instanced_arrays;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_internalformat_query;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_map_buffer_alignment;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_map_buffer_range;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_matrix_palette;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multisample;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multitexture;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_occlusion_query;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_occlusion_query2;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_pixel_buffer_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_parameters;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_sprite;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_provoking_vertex;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robustness;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sample_shading;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sampler_objects;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_seamless_cube_map;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_separate_shader_objects;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_atomic_counters;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_bit_encoding;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_image_load_store;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_objects;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_precision;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_stencil_export;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_subroutine;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_texture_lod;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_100;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_420pack;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_include;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_packing;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow_ambient;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sync;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_tessellation_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_border_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_buffer_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_buffer_object_rgb32;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression_bptc;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression_rgtc;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_cube_map;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_cube_map_array;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_add;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_combine;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_crossbar;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_dot3;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_float;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_gather;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_mirrored_repeat;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_multisample;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_non_power_of_two;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_query_lod;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rectangle;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rg;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rgb10_a2ui;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_storage;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_swizzle;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_timer_query;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transform_feedback2;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transform_feedback3;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transform_feedback_instanced;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transpose_matrix;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_uniform_buffer_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_array_bgra;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_array_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_attrib_64bit;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_blend;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_buffer_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_program;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_type_2_10_10_10_rev;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_viewport_array;
+GLEW_VAR_EXPORT GLboolean __GLEW_ARB_window_pos;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_point_sprites;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_combine3;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_route;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_vertex_shader_output_point_size;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_draw_buffers;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_element_array;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_envmap_bumpmap;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_fragment_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_map_object_buffer;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_meminfo;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_pn_triangles;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_separate_stencil;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_shader_texture_lod;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_text_fragment_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_compression_3dc;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_env_combine3;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_float;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_mirror_once;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_array_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_attrib_array_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_streams;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_422_pixels;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_Cg_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_abgr;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bgra;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bindable_uniform;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_color;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_equation_separate;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_func_separate;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_logic_op;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_minmax;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_subtract;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_clip_volume_hint;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cmyka;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_color_subtable;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_compiled_vertex_array;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_convolution;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_coordinate_frame;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_copy_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cull_vertex;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_depth_bounds_test;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_direct_state_access;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_buffers2;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_instanced;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_range_elements;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fog_coord;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fragment_lighting;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_blit;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_multisample;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_multisample_blit_scaled;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_sRGB;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_geometry_shader4;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_program_parameters;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_shader4;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_histogram;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_array_formats;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_func;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_material;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_light_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_misc_attribute;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multi_draw_arrays;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multisample;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_depth_stencil;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_float;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_pixels;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_paletted_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_buffer_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_transform;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_transform_color_table;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_point_parameters;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_polygon_offset;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_provoking_vertex;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_rescale_normal;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_scene_marker;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_secondary_color;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_shader_objects;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_specular_color;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_image_load_store;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shadow_funcs;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shared_texture_palette;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_clear_tag;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_two_side;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_wrap;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_subtexture;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture3D;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_array;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_buffer_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_dxt1;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_latc;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_rgtc;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_s3tc;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_cube_map;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_edge_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_add;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_combine;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_dot3;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_filter_anisotropic;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_integer;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_lod_bias;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_mirror_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_perturb_normal;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_rectangle;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_sRGB;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_sRGB_decode;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_shared_exponent;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_snorm;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_swizzle;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_timer_query;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_transform_feedback;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array_bgra;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_attrib_64bit;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_weighting;
+GLEW_VAR_EXPORT GLboolean __GLEW_EXT_x11_sync_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_frame_terminator;
+GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_string_marker;
+GLEW_VAR_EXPORT GLboolean __GLEW_HP_convolution_border_modes;
+GLEW_VAR_EXPORT GLboolean __GLEW_HP_image_transform;
+GLEW_VAR_EXPORT GLboolean __GLEW_HP_occlusion_test;
+GLEW_VAR_EXPORT GLboolean __GLEW_HP_texture_lighting;
+GLEW_VAR_EXPORT GLboolean __GLEW_IBM_cull_vertex;
+GLEW_VAR_EXPORT GLboolean __GLEW_IBM_multimode_draw_arrays;
+GLEW_VAR_EXPORT GLboolean __GLEW_IBM_rasterpos_clip;
+GLEW_VAR_EXPORT GLboolean __GLEW_IBM_static_data;
+GLEW_VAR_EXPORT GLboolean __GLEW_IBM_texture_mirrored_repeat;
+GLEW_VAR_EXPORT GLboolean __GLEW_IBM_vertex_array_lists;
+GLEW_VAR_EXPORT GLboolean __GLEW_INGR_color_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_INGR_interlace_read;
+GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_parallel_arrays;
+GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_texture_scissor;
+GLEW_VAR_EXPORT GLboolean __GLEW_KTX_buffer_region;
+GLEW_VAR_EXPORT GLboolean __GLEW_MESAX_texture_stack;
+GLEW_VAR_EXPORT GLboolean __GLEW_MESA_pack_invert;
+GLEW_VAR_EXPORT GLboolean __GLEW_MESA_resize_buffers;
+GLEW_VAR_EXPORT GLboolean __GLEW_MESA_window_pos;
+GLEW_VAR_EXPORT GLboolean __GLEW_MESA_ycbcr_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_NVX_gpu_memory_info;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_square;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_conditional_render;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_depth_to_color;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_image;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_buffer_float;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_range_unclamped;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_evaluators;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_explicit_multisample;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_fence;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_float_buffer;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_fog_distance;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program2;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program4;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program_option;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_framebuffer_multisample_coverage;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_program4;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_shader4;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program4;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program5;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program_fp64;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_shader5;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_half_float;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_light_max_exponent;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_multisample_coverage;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_multisample_filter_hint;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_occlusion_query;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_packed_depth_stencil;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_parameter_buffer_object;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_parameter_buffer_object2;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_path_rendering;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_pixel_data_range;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_point_sprite;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_present_video;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_primitive_restart;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners2;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_buffer_load;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_tessellation_program5;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_emboss;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_reflection;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_barrier;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_compression_vtc;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_env_combine4;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_expand_normal;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_multisample;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_rectangle;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader2;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader3;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_transform_feedback;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_transform_feedback2;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vdpau_interop;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_array_range;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_array_range2;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_attrib_integer_64bit;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_buffer_unified_memory;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program1_1;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2_option;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program3;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program4;
+GLEW_VAR_EXPORT GLboolean __GLEW_NV_video_capture;
+GLEW_VAR_EXPORT GLboolean __GLEW_OES_byte_coordinates;
+GLEW_VAR_EXPORT GLboolean __GLEW_OES_compressed_paletted_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_OES_read_format;
+GLEW_VAR_EXPORT GLboolean __GLEW_OES_single_precision;
+GLEW_VAR_EXPORT GLboolean __GLEW_OML_interlace;
+GLEW_VAR_EXPORT GLboolean __GLEW_OML_resample;
+GLEW_VAR_EXPORT GLboolean __GLEW_OML_subsample;
+GLEW_VAR_EXPORT GLboolean __GLEW_PGI_misc_hints;
+GLEW_VAR_EXPORT GLboolean __GLEW_PGI_vertex_hints;
+GLEW_VAR_EXPORT GLboolean __GLEW_REND_screen_coordinates;
+GLEW_VAR_EXPORT GLboolean __GLEW_S3_s3tc;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_color_range;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_detail_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_fog_function;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_generate_mipmap;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_multisample;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_pixel_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_point_line_texgen;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_sharpen_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture4D;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_border_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_edge_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_filter4;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_lod;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_select;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_histogram;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_pixel;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_blend_alpha_minmax;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_clipmap;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_convolution_accuracy;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_depth_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_flush_raster;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_offset;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fragment_specular_lighting;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_framezoom;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_interlace;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ir_instrument1;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_list_priority;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture_bits;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_reference_plane;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_resample;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow_ambient;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_sprite;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_tag_sample_buffer;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_add_env;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_coordinate_clamp;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_lod_bias;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_multi_buffer;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_range;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_scale_bias;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip_hint;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ycrcb;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_matrix;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_table;
+GLEW_VAR_EXPORT GLboolean __GLEW_SGI_texture_color_table;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUNX_constant_data;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUN_convolution_border_modes;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUN_global_alpha;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUN_mesh_array;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUN_read_video_pixels;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUN_slice_accum;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUN_triangle_list;
+GLEW_VAR_EXPORT GLboolean __GLEW_SUN_vertex;
+GLEW_VAR_EXPORT GLboolean __GLEW_WIN_phong_shading;
+GLEW_VAR_EXPORT GLboolean __GLEW_WIN_specular_fog;
+GLEW_VAR_EXPORT GLboolean __GLEW_WIN_swap_hint;
+
+#ifdef GLEW_MX
+}; /* GLEWContextStruct */
+#endif /* GLEW_MX */
+
+/* ------------------------------------------------------------------------- */
+
+/* error codes */
+#define GLEW_OK 0
+#define GLEW_NO_ERROR 0
+#define GLEW_ERROR_NO_GL_VERSION 1 /* missing GL version */
+#define GLEW_ERROR_GL_VERSION_10_ONLY 2 /* Need at least OpenGL 1.1 */
+#define GLEW_ERROR_GLX_VERSION_11_ONLY 3 /* Need at least GLX 1.2 */
+
+/* string codes */
+#define GLEW_VERSION 1
+#define GLEW_VERSION_MAJOR 2
+#define GLEW_VERSION_MINOR 3
+#define GLEW_VERSION_MICRO 4
+
+/* API */
+#ifdef GLEW_MX
+
+typedef struct GLEWContextStruct GLEWContext;
+GLEWAPI GLenum glewContextInit (GLEWContext* ctx);
+GLEWAPI GLboolean glewContextIsSupported (const GLEWContext* ctx, const char* name);
+
+#define glewInit() glewContextInit(glewGetContext())
+#define glewIsSupported(x) glewContextIsSupported(glewGetContext(), x)
+#define glewIsExtensionSupported(x) glewIsSupported(x)
+
+#define GLEW_GET_VAR(x) (*(const GLboolean*)&(glewGetContext()->x))
+#ifdef _WIN32
+# define GLEW_GET_FUN(x) glewGetContext()->x
+#else
+# define GLEW_GET_FUN(x) x
+#endif
+
+#else /* GLEW_MX */
+
+GLEWAPI GLenum glewInit ();
+GLEWAPI GLboolean glewIsSupported (const char* name);
+#define glewIsExtensionSupported(x) glewIsSupported(x)
+
+#define GLEW_GET_VAR(x) (*(const GLboolean*)&x)
+#define GLEW_GET_FUN(x) x
+
+#endif /* GLEW_MX */
+
+GLEWAPI GLboolean glewExperimental;
+GLEWAPI GLboolean glewGetExtension (const char* name);
+GLEWAPI const GLubyte* glewGetErrorString (GLenum error);
+GLEWAPI const GLubyte* glewGetString (GLenum name);
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef GLEW_APIENTRY_DEFINED
+#undef GLEW_APIENTRY_DEFINED
+#undef APIENTRY
+#undef GLAPIENTRY
+#define GLAPIENTRY
+#endif
+
+#ifdef GLEW_CALLBACK_DEFINED
+#undef GLEW_CALLBACK_DEFINED
+#undef CALLBACK
+#endif
+
+#ifdef GLEW_WINGDIAPI_DEFINED
+#undef GLEW_WINGDIAPI_DEFINED
+#undef WINGDIAPI
+#endif
+
+#undef GLAPI
+/* #undef GLEWAPI */
+
+#endif /* __glew_h__ */
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glext.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glext.h
new file mode 100644
index 00000000..5a6dbc4c
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glext.h
@@ -0,0 +1,11163 @@
+#ifndef __glext_h_
+#define __glext_h_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2013-2014 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+/*
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+** http://www.opengl.org/registry/
+**
+** Khronos $Revision: 28221 $ on $Date: 2014-09-18 20:11:05 -0700 (Thu, 18 Sep 2014) $
+*/
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN 1
+#endif
+#include <windows.h>
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+#define GL_GLEXT_VERSION 20140918
+
+/* Generated C header for:
+ * API: gl
+ * Profile: compatibility
+ * Versions considered: .*
+ * Versions emitted: 1\.[2-9]|[234]\.[0-9]
+ * Default extensions included: gl
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
+
+#ifndef GL_VERSION_1_2
+#define GL_VERSION_1_2 1
+#define GL_UNSIGNED_BYTE_3_3_2 0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_INT_8_8_8_8 0x8035
+#define GL_UNSIGNED_INT_10_10_10_2 0x8036
+#define GL_TEXTURE_BINDING_3D 0x806A
+#define GL_PACK_SKIP_IMAGES 0x806B
+#define GL_PACK_IMAGE_HEIGHT 0x806C
+#define GL_UNPACK_SKIP_IMAGES 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT 0x806E
+#define GL_TEXTURE_3D 0x806F
+#define GL_PROXY_TEXTURE_3D 0x8070
+#define GL_TEXTURE_DEPTH 0x8071
+#define GL_TEXTURE_WRAP_R 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE 0x8073
+#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
+#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_BGR 0x80E0
+#define GL_BGRA 0x80E1
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_TEXTURE_MIN_LOD 0x813A
+#define GL_TEXTURE_MAX_LOD 0x813B
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+#define GL_RESCALE_NORMAL 0x803A
+#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8
+#define GL_SINGLE_COLOR 0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR 0x81FA
+#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_VERSION_1_2 */
+
+#ifndef GL_VERSION_1_3
+#define GL_VERSION_1_3 1
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_MULTISAMPLE 0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE 0x809F
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+#define GL_COMPRESSED_RGB 0x84ED
+#define GL_COMPRESSED_RGBA 0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT 0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0
+#define GL_TEXTURE_COMPRESSED 0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+#define GL_CLAMP_TO_BORDER 0x812D
+#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1
+#define GL_MAX_TEXTURE_UNITS 0x84E2
+#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6
+#define GL_MULTISAMPLE_BIT 0x20000000
+#define GL_NORMAL_MAP 0x8511
+#define GL_REFLECTION_MAP 0x8512
+#define GL_COMPRESSED_ALPHA 0x84E9
+#define GL_COMPRESSED_LUMINANCE 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB
+#define GL_COMPRESSED_INTENSITY 0x84EC
+#define GL_COMBINE 0x8570
+#define GL_COMBINE_RGB 0x8571
+#define GL_COMBINE_ALPHA 0x8572
+#define GL_SOURCE0_RGB 0x8580
+#define GL_SOURCE1_RGB 0x8581
+#define GL_SOURCE2_RGB 0x8582
+#define GL_SOURCE0_ALPHA 0x8588
+#define GL_SOURCE1_ALPHA 0x8589
+#define GL_SOURCE2_ALPHA 0x858A
+#define GL_OPERAND0_RGB 0x8590
+#define GL_OPERAND1_RGB 0x8591
+#define GL_OPERAND2_RGB 0x8592
+#define GL_OPERAND0_ALPHA 0x8598
+#define GL_OPERAND1_ALPHA 0x8599
+#define GL_OPERAND2_ALPHA 0x859A
+#define GL_RGB_SCALE 0x8573
+#define GL_ADD_SIGNED 0x8574
+#define GL_INTERPOLATE 0x8575
+#define GL_SUBTRACT 0x84E7
+#define GL_CONSTANT 0x8576
+#define GL_PRIMARY_COLOR 0x8577
+#define GL_PREVIOUS 0x8578
+#define GL_DOT3_RGB 0x86AE
+#define GL_DOT3_RGBA 0x86AF
+typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img);
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveTexture (GLenum texture);
+GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert);
+GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img);
+GLAPI void APIENTRY glClientActiveTexture (GLenum texture);
+GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s);
+GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s);
+GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s);
+GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s);
+GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t);
+GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t);
+GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t);
+GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t);
+GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r);
+GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r);
+GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q);
+GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m);
+GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m);
+GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m);
+GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m);
+#endif
+#endif /* GL_VERSION_1_3 */
+
+#ifndef GL_VERSION_1_4
+#define GL_VERSION_1_4 1
+#define GL_BLEND_DST_RGB 0x80C8
+#define GL_BLEND_SRC_RGB 0x80C9
+#define GL_BLEND_DST_ALPHA 0x80CA
+#define GL_BLEND_SRC_ALPHA 0x80CB
+#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128
+#define GL_DEPTH_COMPONENT16 0x81A5
+#define GL_DEPTH_COMPONENT24 0x81A6
+#define GL_DEPTH_COMPONENT32 0x81A7
+#define GL_MIRRORED_REPEAT 0x8370
+#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
+#define GL_TEXTURE_LOD_BIAS 0x8501
+#define GL_INCR_WRAP 0x8507
+#define GL_DECR_WRAP 0x8508
+#define GL_TEXTURE_DEPTH_SIZE 0x884A
+#define GL_TEXTURE_COMPARE_MODE 0x884C
+#define GL_TEXTURE_COMPARE_FUNC 0x884D
+#define GL_POINT_SIZE_MIN 0x8126
+#define GL_POINT_SIZE_MAX 0x8127
+#define GL_POINT_DISTANCE_ATTENUATION 0x8129
+#define GL_GENERATE_MIPMAP 0x8191
+#define GL_GENERATE_MIPMAP_HINT 0x8192
+#define GL_FOG_COORDINATE_SOURCE 0x8450
+#define GL_FOG_COORDINATE 0x8451
+#define GL_FRAGMENT_DEPTH 0x8452
+#define GL_CURRENT_FOG_COORDINATE 0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456
+#define GL_FOG_COORDINATE_ARRAY 0x8457
+#define GL_COLOR_SUM 0x8458
+#define GL_CURRENT_SECONDARY_COLOR 0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D
+#define GL_SECONDARY_COLOR_ARRAY 0x845E
+#define GL_TEXTURE_FILTER_CONTROL 0x8500
+#define GL_DEPTH_TEXTURE_MODE 0x884B
+#define GL_COMPARE_R_TO_TEXTURE 0x884E
+#define GL_FUNC_ADD 0x8006
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord);
+typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
+GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount);
+GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param);
+GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glFogCoordf (GLfloat coord);
+GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord);
+GLAPI void APIENTRY glFogCoordd (GLdouble coord);
+GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord);
+GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue);
+GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v);
+GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue);
+GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v);
+GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue);
+GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v);
+GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue);
+GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v);
+GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue);
+GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v);
+GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue);
+GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v);
+GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue);
+GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v);
+GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue);
+GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v);
+GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y);
+GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y);
+GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y);
+GLAPI void APIENTRY glWindowPos2iv (const GLint *v);
+GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y);
+GLAPI void APIENTRY glWindowPos2sv (const GLshort *v);
+GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glWindowPos3iv (const GLint *v);
+GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glWindowPos3sv (const GLshort *v);
+GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI void APIENTRY glBlendEquation (GLenum mode);
+#endif
+#endif /* GL_VERSION_1_4 */
+
+#ifndef GL_VERSION_1_5
+#define GL_VERSION_1_5 1
+#include <stddef.h>
+typedef ptrdiff_t GLsizeiptr;
+typedef ptrdiff_t GLintptr;
+#define GL_BUFFER_SIZE 0x8764
+#define GL_BUFFER_USAGE 0x8765
+#define GL_QUERY_COUNTER_BITS 0x8864
+#define GL_CURRENT_QUERY 0x8865
+#define GL_QUERY_RESULT 0x8866
+#define GL_QUERY_RESULT_AVAILABLE 0x8867
+#define GL_ARRAY_BUFFER 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER 0x8893
+#define GL_ARRAY_BUFFER_BINDING 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
+#define GL_READ_ONLY 0x88B8
+#define GL_WRITE_ONLY 0x88B9
+#define GL_READ_WRITE 0x88BA
+#define GL_BUFFER_ACCESS 0x88BB
+#define GL_BUFFER_MAPPED 0x88BC
+#define GL_BUFFER_MAP_POINTER 0x88BD
+#define GL_STREAM_DRAW 0x88E0
+#define GL_STREAM_READ 0x88E1
+#define GL_STREAM_COPY 0x88E2
+#define GL_STATIC_DRAW 0x88E4
+#define GL_STATIC_READ 0x88E5
+#define GL_STATIC_COPY 0x88E6
+#define GL_DYNAMIC_DRAW 0x88E8
+#define GL_DYNAMIC_READ 0x88E9
+#define GL_DYNAMIC_COPY 0x88EA
+#define GL_SAMPLES_PASSED 0x8914
+#define GL_SRC1_ALPHA 0x8589
+#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E
+#define GL_FOG_COORD_SRC 0x8450
+#define GL_FOG_COORD 0x8451
+#define GL_CURRENT_FOG_COORD 0x8453
+#define GL_FOG_COORD_ARRAY_TYPE 0x8454
+#define GL_FOG_COORD_ARRAY_STRIDE 0x8455
+#define GL_FOG_COORD_ARRAY_POINTER 0x8456
+#define GL_FOG_COORD_ARRAY 0x8457
+#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D
+#define GL_SRC0_RGB 0x8580
+#define GL_SRC1_RGB 0x8581
+#define GL_SRC2_RGB 0x8582
+#define GL_SRC0_ALPHA 0x8588
+#define GL_SRC2_ALPHA 0x858A
+typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
+typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data);
+typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids);
+GLAPI GLboolean APIENTRY glIsQuery (GLuint id);
+GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id);
+GLAPI void APIENTRY glEndQuery (GLenum target);
+GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer);
+GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);
+GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
+GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer);
+GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data);
+GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access);
+GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target);
+GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params);
+#endif
+#endif /* GL_VERSION_1_5 */
+
+#ifndef GL_VERSION_2_0
+#define GL_VERSION_2_0 1
+typedef char GLchar;
+#define GL_BLEND_EQUATION_RGB 0x8009
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
+#define GL_CURRENT_VERTEX_ATTRIB 0x8626
+#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
+#define GL_STENCIL_BACK_FUNC 0x8800
+#define GL_STENCIL_BACK_FAIL 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
+#define GL_MAX_DRAW_BUFFERS 0x8824
+#define GL_DRAW_BUFFER0 0x8825
+#define GL_DRAW_BUFFER1 0x8826
+#define GL_DRAW_BUFFER2 0x8827
+#define GL_DRAW_BUFFER3 0x8828
+#define GL_DRAW_BUFFER4 0x8829
+#define GL_DRAW_BUFFER5 0x882A
+#define GL_DRAW_BUFFER6 0x882B
+#define GL_DRAW_BUFFER7 0x882C
+#define GL_DRAW_BUFFER8 0x882D
+#define GL_DRAW_BUFFER9 0x882E
+#define GL_DRAW_BUFFER10 0x882F
+#define GL_DRAW_BUFFER11 0x8830
+#define GL_DRAW_BUFFER12 0x8831
+#define GL_DRAW_BUFFER13 0x8832
+#define GL_DRAW_BUFFER14 0x8833
+#define GL_DRAW_BUFFER15 0x8834
+#define GL_BLEND_EQUATION_ALPHA 0x883D
+#define GL_MAX_VERTEX_ATTRIBS 0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
+#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
+#define GL_FRAGMENT_SHADER 0x8B30
+#define GL_VERTEX_SHADER 0x8B31
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
+#define GL_MAX_VARYING_FLOATS 0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
+#define GL_SHADER_TYPE 0x8B4F
+#define GL_FLOAT_VEC2 0x8B50
+#define GL_FLOAT_VEC3 0x8B51
+#define GL_FLOAT_VEC4 0x8B52
+#define GL_INT_VEC2 0x8B53
+#define GL_INT_VEC3 0x8B54
+#define GL_INT_VEC4 0x8B55
+#define GL_BOOL 0x8B56
+#define GL_BOOL_VEC2 0x8B57
+#define GL_BOOL_VEC3 0x8B58
+#define GL_BOOL_VEC4 0x8B59
+#define GL_FLOAT_MAT2 0x8B5A
+#define GL_FLOAT_MAT3 0x8B5B
+#define GL_FLOAT_MAT4 0x8B5C
+#define GL_SAMPLER_1D 0x8B5D
+#define GL_SAMPLER_2D 0x8B5E
+#define GL_SAMPLER_3D 0x8B5F
+#define GL_SAMPLER_CUBE 0x8B60
+#define GL_SAMPLER_1D_SHADOW 0x8B61
+#define GL_SAMPLER_2D_SHADOW 0x8B62
+#define GL_DELETE_STATUS 0x8B80
+#define GL_COMPILE_STATUS 0x8B81
+#define GL_LINK_STATUS 0x8B82
+#define GL_VALIDATE_STATUS 0x8B83
+#define GL_INFO_LOG_LENGTH 0x8B84
+#define GL_ATTACHED_SHADERS 0x8B85
+#define GL_ACTIVE_UNIFORMS 0x8B86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
+#define GL_SHADER_SOURCE_LENGTH 0x8B88
+#define GL_ACTIVE_ATTRIBUTES 0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
+#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
+#define GL_CURRENT_PROGRAM 0x8B8D
+#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0
+#define GL_LOWER_LEFT 0x8CA1
+#define GL_UPPER_LEFT 0x8CA2
+#define GL_STENCIL_BACK_REF 0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
+#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643
+#define GL_POINT_SPRITE 0x8861
+#define GL_COORD_REPLACE 0x8862
+#define GL_MAX_TEXTURE_COORDS 0x8871
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);
+typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
+typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
+typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
+typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs);
+GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
+GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);
+GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader);
+GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
+GLAPI void APIENTRY glCompileShader (GLuint shader);
+GLAPI GLuint APIENTRY glCreateProgram (void);
+GLAPI GLuint APIENTRY glCreateShader (GLenum type);
+GLAPI void APIENTRY glDeleteProgram (GLuint program);
+GLAPI void APIENTRY glDeleteShader (GLuint shader);
+GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader);
+GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index);
+GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index);
+GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params);
+GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer);
+GLAPI GLboolean APIENTRY glIsProgram (GLuint program);
+GLAPI GLboolean APIENTRY glIsShader (GLuint shader);
+GLAPI void APIENTRY glLinkProgram (GLuint program);
+GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+GLAPI void APIENTRY glUseProgram (GLuint program);
+GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0);
+GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glUniform1i (GLint location, GLint v0);
+GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glValidateProgram (GLuint program);
+GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x);
+GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x);
+GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_VERSION_2_0 */
+
+#ifndef GL_VERSION_2_1
+#define GL_VERSION_2_1 1
+#define GL_PIXEL_PACK_BUFFER 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
+#define GL_FLOAT_MAT2x3 0x8B65
+#define GL_FLOAT_MAT2x4 0x8B66
+#define GL_FLOAT_MAT3x2 0x8B67
+#define GL_FLOAT_MAT3x4 0x8B68
+#define GL_FLOAT_MAT4x2 0x8B69
+#define GL_FLOAT_MAT4x3 0x8B6A
+#define GL_SRGB 0x8C40
+#define GL_SRGB8 0x8C41
+#define GL_SRGB_ALPHA 0x8C42
+#define GL_SRGB8_ALPHA8 0x8C43
+#define GL_COMPRESSED_SRGB 0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA 0x8C49
+#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F
+#define GL_SLUMINANCE_ALPHA 0x8C44
+#define GL_SLUMINANCE8_ALPHA8 0x8C45
+#define GL_SLUMINANCE 0x8C46
+#define GL_SLUMINANCE8 0x8C47
+#define GL_COMPRESSED_SLUMINANCE 0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#endif
+#endif /* GL_VERSION_2_1 */
+
+#ifndef GL_VERSION_3_0
+#define GL_VERSION_3_0 1
+typedef unsigned short GLhalf;
+#define GL_COMPARE_REF_TO_TEXTURE 0x884E
+#define GL_CLIP_DISTANCE0 0x3000
+#define GL_CLIP_DISTANCE1 0x3001
+#define GL_CLIP_DISTANCE2 0x3002
+#define GL_CLIP_DISTANCE3 0x3003
+#define GL_CLIP_DISTANCE4 0x3004
+#define GL_CLIP_DISTANCE5 0x3005
+#define GL_CLIP_DISTANCE6 0x3006
+#define GL_CLIP_DISTANCE7 0x3007
+#define GL_MAX_CLIP_DISTANCES 0x0D32
+#define GL_MAJOR_VERSION 0x821B
+#define GL_MINOR_VERSION 0x821C
+#define GL_NUM_EXTENSIONS 0x821D
+#define GL_CONTEXT_FLAGS 0x821E
+#define GL_COMPRESSED_RED 0x8225
+#define GL_COMPRESSED_RG 0x8226
+#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001
+#define GL_RGBA32F 0x8814
+#define GL_RGB32F 0x8815
+#define GL_RGBA16F 0x881A
+#define GL_RGB16F 0x881B
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD
+#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF
+#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905
+#define GL_CLAMP_READ_COLOR 0x891C
+#define GL_FIXED_ONLY 0x891D
+#define GL_MAX_VARYING_COMPONENTS 0x8B4B
+#define GL_TEXTURE_1D_ARRAY 0x8C18
+#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19
+#define GL_TEXTURE_2D_ARRAY 0x8C1A
+#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B
+#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C
+#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D
+#define GL_R11F_G11F_B10F 0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B
+#define GL_RGB9_E5 0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E
+#define GL_TEXTURE_SHARED_SIZE 0x8C3F
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85
+#define GL_PRIMITIVES_GENERATED 0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88
+#define GL_RASTERIZER_DISCARD 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS 0x8C8C
+#define GL_SEPARATE_ATTRIBS 0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F
+#define GL_RGBA32UI 0x8D70
+#define GL_RGB32UI 0x8D71
+#define GL_RGBA16UI 0x8D76
+#define GL_RGB16UI 0x8D77
+#define GL_RGBA8UI 0x8D7C
+#define GL_RGB8UI 0x8D7D
+#define GL_RGBA32I 0x8D82
+#define GL_RGB32I 0x8D83
+#define GL_RGBA16I 0x8D88
+#define GL_RGB16I 0x8D89
+#define GL_RGBA8I 0x8D8E
+#define GL_RGB8I 0x8D8F
+#define GL_RED_INTEGER 0x8D94
+#define GL_GREEN_INTEGER 0x8D95
+#define GL_BLUE_INTEGER 0x8D96
+#define GL_RGB_INTEGER 0x8D98
+#define GL_RGBA_INTEGER 0x8D99
+#define GL_BGR_INTEGER 0x8D9A
+#define GL_BGRA_INTEGER 0x8D9B
+#define GL_SAMPLER_1D_ARRAY 0x8DC0
+#define GL_SAMPLER_2D_ARRAY 0x8DC1
+#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3
+#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW 0x8DC5
+#define GL_UNSIGNED_INT_VEC2 0x8DC6
+#define GL_UNSIGNED_INT_VEC3 0x8DC7
+#define GL_UNSIGNED_INT_VEC4 0x8DC8
+#define GL_INT_SAMPLER_1D 0x8DC9
+#define GL_INT_SAMPLER_2D 0x8DCA
+#define GL_INT_SAMPLER_3D 0x8DCB
+#define GL_INT_SAMPLER_CUBE 0x8DCC
+#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE
+#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF
+#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7
+#define GL_QUERY_WAIT 0x8E13
+#define GL_QUERY_NO_WAIT 0x8E14
+#define GL_QUERY_BY_REGION_WAIT 0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16
+#define GL_BUFFER_ACCESS_FLAGS 0x911F
+#define GL_BUFFER_MAP_LENGTH 0x9120
+#define GL_BUFFER_MAP_OFFSET 0x9121
+#define GL_DEPTH_COMPONENT32F 0x8CAC
+#define GL_DEPTH32F_STENCIL8 0x8CAD
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
+#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
+#define GL_FRAMEBUFFER_DEFAULT 0x8218
+#define GL_FRAMEBUFFER_UNDEFINED 0x8219
+#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A
+#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
+#define GL_DEPTH_STENCIL 0x84F9
+#define GL_UNSIGNED_INT_24_8 0x84FA
+#define GL_DEPTH24_STENCIL8 0x88F0
+#define GL_TEXTURE_STENCIL_SIZE 0x88F1
+#define GL_TEXTURE_RED_TYPE 0x8C10
+#define GL_TEXTURE_GREEN_TYPE 0x8C11
+#define GL_TEXTURE_BLUE_TYPE 0x8C12
+#define GL_TEXTURE_ALPHA_TYPE 0x8C13
+#define GL_TEXTURE_DEPTH_TYPE 0x8C16
+#define GL_UNSIGNED_NORMALIZED 0x8C17
+#define GL_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_RENDERBUFFER_BINDING 0x8CA7
+#define GL_READ_FRAMEBUFFER 0x8CA8
+#define GL_DRAW_FRAMEBUFFER 0x8CA9
+#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA
+#define GL_RENDERBUFFER_SAMPLES 0x8CAB
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
+#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC
+#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
+#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF
+#define GL_COLOR_ATTACHMENT0 0x8CE0
+#define GL_COLOR_ATTACHMENT1 0x8CE1
+#define GL_COLOR_ATTACHMENT2 0x8CE2
+#define GL_COLOR_ATTACHMENT3 0x8CE3
+#define GL_COLOR_ATTACHMENT4 0x8CE4
+#define GL_COLOR_ATTACHMENT5 0x8CE5
+#define GL_COLOR_ATTACHMENT6 0x8CE6
+#define GL_COLOR_ATTACHMENT7 0x8CE7
+#define GL_COLOR_ATTACHMENT8 0x8CE8
+#define GL_COLOR_ATTACHMENT9 0x8CE9
+#define GL_COLOR_ATTACHMENT10 0x8CEA
+#define GL_COLOR_ATTACHMENT11 0x8CEB
+#define GL_COLOR_ATTACHMENT12 0x8CEC
+#define GL_COLOR_ATTACHMENT13 0x8CED
+#define GL_COLOR_ATTACHMENT14 0x8CEE
+#define GL_COLOR_ATTACHMENT15 0x8CEF
+#define GL_DEPTH_ATTACHMENT 0x8D00
+#define GL_STENCIL_ATTACHMENT 0x8D20
+#define GL_FRAMEBUFFER 0x8D40
+#define GL_RENDERBUFFER 0x8D41
+#define GL_RENDERBUFFER_WIDTH 0x8D42
+#define GL_RENDERBUFFER_HEIGHT 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44
+#define GL_STENCIL_INDEX1 0x8D46
+#define GL_STENCIL_INDEX4 0x8D47
+#define GL_STENCIL_INDEX8 0x8D48
+#define GL_STENCIL_INDEX16 0x8D49
+#define GL_RENDERBUFFER_RED_SIZE 0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
+#define GL_MAX_SAMPLES 0x8D57
+#define GL_INDEX 0x8222
+#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE 0x8C15
+#define GL_FRAMEBUFFER_SRGB 0x8DB9
+#define GL_HALF_FLOAT 0x140B
+#define GL_MAP_READ_BIT 0x0001
+#define GL_MAP_WRITE_BIT 0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
+#define GL_COMPRESSED_RED_RGTC1 0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC
+#define GL_COMPRESSED_RG_RGTC2 0x8DBD
+#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE
+#define GL_RG 0x8227
+#define GL_RG_INTEGER 0x8228
+#define GL_R8 0x8229
+#define GL_R16 0x822A
+#define GL_RG8 0x822B
+#define GL_RG16 0x822C
+#define GL_R16F 0x822D
+#define GL_R32F 0x822E
+#define GL_RG16F 0x822F
+#define GL_RG32F 0x8230
+#define GL_R8I 0x8231
+#define GL_R8UI 0x8232
+#define GL_R16I 0x8233
+#define GL_R16UI 0x8234
+#define GL_R32I 0x8235
+#define GL_R32UI 0x8236
+#define GL_RG8I 0x8237
+#define GL_RG8UI 0x8238
+#define GL_RG16I 0x8239
+#define GL_RG16UI 0x823A
+#define GL_RG32I 0x823B
+#define GL_RG32UI 0x823C
+#define GL_VERTEX_ARRAY_BINDING 0x85B5
+#define GL_CLAMP_VERTEX_COLOR 0x891A
+#define GL_CLAMP_FRAGMENT_COLOR 0x891B
+#define GL_ALPHA_INTEGER 0x8D97
+typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index);
+typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode);
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp);
+typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode);
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
+typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);
+typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
+typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
+typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays);
+typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data);
+GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data);
+GLAPI void APIENTRY glEnablei (GLenum target, GLuint index);
+GLAPI void APIENTRY glDisablei (GLenum target, GLuint index);
+GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index);
+GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode);
+GLAPI void APIENTRY glEndTransformFeedback (void);
+GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp);
+GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode);
+GLAPI void APIENTRY glEndConditionalRender (void);
+GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x);
+GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y);
+GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x);
+GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y);
+GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z);
+GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params);
+GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name);
+GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0);
+GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value);
+GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value);
+GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index);
+GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer);
+GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers);
+GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers);
+GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer);
+GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);
+GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers);
+GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers);
+GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target);
+GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGenerateMipmap (GLenum target);
+GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length);
+GLAPI void APIENTRY glBindVertexArray (GLuint array);
+GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays);
+GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays);
+GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array);
+#endif
+#endif /* GL_VERSION_3_0 */
+
+#ifndef GL_VERSION_3_1
+#define GL_VERSION_3_1 1
+#define GL_SAMPLER_2D_RECT 0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64
+#define GL_SAMPLER_BUFFER 0x8DC2
+#define GL_INT_SAMPLER_2D_RECT 0x8DCD
+#define GL_INT_SAMPLER_BUFFER 0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8
+#define GL_TEXTURE_BUFFER 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D
+#define GL_TEXTURE_RECTANGLE 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8
+#define GL_R8_SNORM 0x8F94
+#define GL_RG8_SNORM 0x8F95
+#define GL_RGB8_SNORM 0x8F96
+#define GL_RGBA8_SNORM 0x8F97
+#define GL_R16_SNORM 0x8F98
+#define GL_RG16_SNORM 0x8F99
+#define GL_RGB16_SNORM 0x8F9A
+#define GL_RGBA16_SNORM 0x8F9B
+#define GL_SIGNED_NORMALIZED 0x8F9C
+#define GL_PRIMITIVE_RESTART 0x8F9D
+#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E
+#define GL_COPY_READ_BUFFER 0x8F36
+#define GL_COPY_WRITE_BUFFER 0x8F37
+#define GL_UNIFORM_BUFFER 0x8A11
+#define GL_UNIFORM_BUFFER_BINDING 0x8A28
+#define GL_UNIFORM_BUFFER_START 0x8A29
+#define GL_UNIFORM_BUFFER_SIZE 0x8A2A
+#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C
+#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D
+#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E
+#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F
+#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30
+#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32
+#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
+#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
+#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
+#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36
+#define GL_UNIFORM_TYPE 0x8A37
+#define GL_UNIFORM_SIZE 0x8A38
+#define GL_UNIFORM_NAME_LENGTH 0x8A39
+#define GL_UNIFORM_BLOCK_INDEX 0x8A3A
+#define GL_UNIFORM_OFFSET 0x8A3B
+#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C
+#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D
+#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E
+#define GL_UNIFORM_BLOCK_BINDING 0x8A3F
+#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40
+#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
+#define GL_INVALID_INDEX 0xFFFFFFFFu
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index);
+GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName);
+GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+#endif
+#endif /* GL_VERSION_3_1 */
+
+#ifndef GL_VERSION_3_2
+#define GL_VERSION_3_2 1
+typedef struct __GLsync *GLsync;
+#ifndef GLEXT_64_TYPES_DEFINED
+/* This code block is duplicated in glxext.h, so must be protected */
+#define GLEXT_64_TYPES_DEFINED
+/* Define int32_t, int64_t, and uint64_t types for UST/MSC */
+/* (as used in the GL_EXT_timer_query extension). */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <inttypes.h>
+#elif defined(__sun__) || defined(__digital__)
+#include <inttypes.h>
+#if defined(__STDC__)
+#if defined(__arch64__) || defined(_LP64)
+typedef long int int64_t;
+typedef unsigned long int uint64_t;
+#else
+typedef long long int int64_t;
+typedef unsigned long long int uint64_t;
+#endif /* __arch64__ */
+#endif /* __STDC__ */
+#elif defined( __VMS ) || defined(__sgi)
+#include <inttypes.h>
+#elif defined(__SCO__) || defined(__USLC__)
+#include <stdint.h>
+#elif defined(__UNIXOS2__) || defined(__SOL64__)
+typedef long int int32_t;
+typedef long long int int64_t;
+typedef unsigned long long int uint64_t;
+#elif defined(_WIN32) && defined(__GNUC__)
+#include <stdint.h>
+#elif defined(_WIN32)
+typedef __int32 int32_t;
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+#else
+/* Fallback if nothing above works */
+#include <inttypes.h>
+#endif
+#endif
+typedef uint64_t GLuint64;
+typedef int64_t GLint64;
+#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001
+#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002
+#define GL_LINES_ADJACENCY 0x000A
+#define GL_LINE_STRIP_ADJACENCY 0x000B
+#define GL_TRIANGLES_ADJACENCY 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D
+#define GL_PROGRAM_POINT_SIZE 0x8642
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8
+#define GL_GEOMETRY_SHADER 0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT 0x8916
+#define GL_GEOMETRY_INPUT_TYPE 0x8917
+#define GL_GEOMETRY_OUTPUT_TYPE 0x8918
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1
+#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124
+#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125
+#define GL_CONTEXT_PROFILE_MASK 0x9126
+#define GL_DEPTH_CLAMP 0x864F
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C
+#define GL_FIRST_VERTEX_CONVENTION 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION 0x8E4E
+#define GL_PROVOKING_VERTEX 0x8E4F
+#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F
+#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
+#define GL_OBJECT_TYPE 0x9112
+#define GL_SYNC_CONDITION 0x9113
+#define GL_SYNC_STATUS 0x9114
+#define GL_SYNC_FLAGS 0x9115
+#define GL_SYNC_FENCE 0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
+#define GL_UNSIGNALED 0x9118
+#define GL_SIGNALED 0x9119
+#define GL_ALREADY_SIGNALED 0x911A
+#define GL_TIMEOUT_EXPIRED 0x911B
+#define GL_CONDITION_SATISFIED 0x911C
+#define GL_WAIT_FAILED 0x911D
+#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
+#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
+#define GL_SAMPLE_POSITION 0x8E50
+#define GL_SAMPLE_MASK 0x8E51
+#define GL_SAMPLE_MASK_VALUE 0x8E52
+#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59
+#define GL_TEXTURE_2D_MULTISAMPLE 0x9100
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105
+#define GL_TEXTURE_SAMPLES 0x9106
+#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107
+#define GL_SAMPLER_2D_MULTISAMPLE 0x9108
+#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A
+#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B
+#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D
+#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E
+#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F
+#define GL_MAX_INTEGER_SAMPLES 0x9110
+typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex);
+typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode);
+typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
+typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync);
+typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync);
+typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data);
+typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val);
+typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex);
+GLAPI void APIENTRY glProvokingVertex (GLenum mode);
+GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags);
+GLAPI GLboolean APIENTRY glIsSync (GLsync sync);
+GLAPI void APIENTRY glDeleteSync (GLsync sync);
+GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data);
+GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data);
+GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val);
+GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask);
+#endif
+#endif /* GL_VERSION_3_2 */
+
+#ifndef GL_VERSION_3_3
+#define GL_VERSION_3_3 1
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE
+#define GL_SRC1_COLOR 0x88F9
+#define GL_ONE_MINUS_SRC1_COLOR 0x88FA
+#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB
+#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC
+#define GL_ANY_SAMPLES_PASSED 0x8C2F
+#define GL_SAMPLER_BINDING 0x8919
+#define GL_RGB10_A2UI 0x906F
+#define GL_TEXTURE_SWIZZLE_R 0x8E42
+#define GL_TEXTURE_SWIZZLE_G 0x8E43
+#define GL_TEXTURE_SWIZZLE_B 0x8E44
+#define GL_TEXTURE_SWIZZLE_A 0x8E45
+#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46
+#define GL_TIME_ELAPSED 0x88BF
+#define GL_TIMESTAMP 0x8E28
+#define GL_INT_2_10_10_10_REV 0x8D9F
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers);
+typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers);
+typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler);
+typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color);
+typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers);
+GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers);
+GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler);
+GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler);
+GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param);
+GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param);
+GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param);
+GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param);
+GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param);
+GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target);
+GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params);
+GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor);
+GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color);
+GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color);
+GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color);
+#endif
+#endif /* GL_VERSION_3_3 */
+
+#ifndef GL_VERSION_4_0
+#define GL_VERSION_4_0 1
+#define GL_SAMPLE_SHADING 0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F
+#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B
+#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F
+#define GL_DRAW_INDIRECT_BUFFER 0x8F3F
+#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43
+#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D
+#define GL_MAX_VERTEX_STREAMS 0x8E71
+#define GL_DOUBLE_VEC2 0x8FFC
+#define GL_DOUBLE_VEC3 0x8FFD
+#define GL_DOUBLE_VEC4 0x8FFE
+#define GL_DOUBLE_MAT2 0x8F46
+#define GL_DOUBLE_MAT3 0x8F47
+#define GL_DOUBLE_MAT4 0x8F48
+#define GL_DOUBLE_MAT2x3 0x8F49
+#define GL_DOUBLE_MAT2x4 0x8F4A
+#define GL_DOUBLE_MAT3x2 0x8F4B
+#define GL_DOUBLE_MAT3x4 0x8F4C
+#define GL_DOUBLE_MAT4x2 0x8F4D
+#define GL_DOUBLE_MAT4x3 0x8F4E
+#define GL_ACTIVE_SUBROUTINES 0x8DE5
+#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47
+#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49
+#define GL_MAX_SUBROUTINES 0x8DE7
+#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8
+#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A
+#define GL_COMPATIBLE_SUBROUTINES 0x8E4B
+#define GL_PATCHES 0x000E
+#define GL_PATCH_VERTICES 0x8E72
+#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73
+#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74
+#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75
+#define GL_TESS_GEN_MODE 0x8E76
+#define GL_TESS_GEN_SPACING 0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER 0x8E78
+#define GL_TESS_GEN_POINT_MODE 0x8E79
+#define GL_ISOLINES 0x8E7A
+#define GL_FRACTIONAL_ODD 0x8E7B
+#define GL_FRACTIONAL_EVEN 0x8E7C
+#define GL_MAX_PATCH_VERTICES 0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL 0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1
+#define GL_TESS_EVALUATION_SHADER 0x8E87
+#define GL_TESS_CONTROL_SHADER 0x8E88
+#define GL_TRANSFORM_FEEDBACK 0x8E22
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25
+#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70
+typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect);
+typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x);
+typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params);
+typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name);
+typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices);
+typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values);
+typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids);
+typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream);
+typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMinSampleShading (GLfloat value);
+GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode);
+GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect);
+GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect);
+GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x);
+GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params);
+GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name);
+GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name);
+GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices);
+GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params);
+GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value);
+GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values);
+GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id);
+GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids);
+GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids);
+GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id);
+GLAPI void APIENTRY glPauseTransformFeedback (void);
+GLAPI void APIENTRY glResumeTransformFeedback (void);
+GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id);
+GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream);
+GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id);
+GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index);
+GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params);
+#endif
+#endif /* GL_VERSION_4_0 */
+
+#ifndef GL_VERSION_4_1
+#define GL_VERSION_4_1 1
+#define GL_FIXED 0x140C
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
+#define GL_LOW_FLOAT 0x8DF0
+#define GL_MEDIUM_FLOAT 0x8DF1
+#define GL_HIGH_FLOAT 0x8DF2
+#define GL_LOW_INT 0x8DF3
+#define GL_MEDIUM_INT 0x8DF4
+#define GL_HIGH_INT 0x8DF5
+#define GL_SHADER_COMPILER 0x8DFA
+#define GL_SHADER_BINARY_FORMATS 0x8DF8
+#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9
+#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
+#define GL_MAX_VARYING_VECTORS 0x8DFC
+#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD
+#define GL_RGB565 0x8D62
+#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
+#define GL_PROGRAM_BINARY_LENGTH 0x8741
+#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
+#define GL_PROGRAM_BINARY_FORMATS 0x87FF
+#define GL_VERTEX_SHADER_BIT 0x00000001
+#define GL_FRAGMENT_SHADER_BIT 0x00000002
+#define GL_GEOMETRY_SHADER_BIT 0x00000004
+#define GL_TESS_CONTROL_SHADER_BIT 0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010
+#define GL_ALL_SHADER_BITS 0xFFFFFFFF
+#define GL_PROGRAM_SEPARABLE 0x8258
+#define GL_ACTIVE_PROGRAM 0x8259
+#define GL_PROGRAM_PIPELINE_BINDING 0x825A
+#define GL_MAX_VIEWPORTS 0x825B
+#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C
+#define GL_VIEWPORT_BOUNDS_RANGE 0x825D
+#define GL_LAYER_PROVOKING_VERTEX 0x825E
+#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F
+#define GL_UNDEFINED_VERTEX 0x8260
+typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void);
+typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f);
+typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);
+typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program);
+typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings);
+typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines);
+typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v);
+typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f);
+typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReleaseShaderCompiler (void);
+GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f);
+GLAPI void APIENTRY glClearDepthf (GLfloat d);
+GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value);
+GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program);
+GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program);
+GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings);
+GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines);
+GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines);
+GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params);
+GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0);
+GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0);
+GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0);
+GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0);
+GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1);
+GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);
+GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v);
+GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f);
+GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data);
+GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data);
+#endif
+#endif /* GL_VERSION_4_1 */
+
+#ifndef GL_VERSION_4_2
+#define GL_VERSION_4_2 1
+#define GL_COPY_READ_BUFFER_BINDING 0x8F36
+#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37
+#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24
+#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23
+#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127
+#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128
+#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129
+#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A
+#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B
+#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C
+#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D
+#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E
+#define GL_NUM_SAMPLE_COUNTS 0x9380
+#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC
+#define GL_ATOMIC_COUNTER_BUFFER 0x92C0
+#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1
+#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2
+#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3
+#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB
+#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0
+#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1
+#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6
+#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC
+#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9
+#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA
+#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001
+#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002
+#define GL_UNIFORM_BARRIER_BIT 0x00000004
+#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020
+#define GL_COMMAND_BARRIER_BIT 0x00000040
+#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080
+#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100
+#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200
+#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800
+#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000
+#define GL_ALL_BARRIER_BITS 0xFFFFFFFF
+#define GL_MAX_IMAGE_UNITS 0x8F38
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39
+#define GL_IMAGE_BINDING_NAME 0x8F3A
+#define GL_IMAGE_BINDING_LEVEL 0x8F3B
+#define GL_IMAGE_BINDING_LAYERED 0x8F3C
+#define GL_IMAGE_BINDING_LAYER 0x8F3D
+#define GL_IMAGE_BINDING_ACCESS 0x8F3E
+#define GL_IMAGE_1D 0x904C
+#define GL_IMAGE_2D 0x904D
+#define GL_IMAGE_3D 0x904E
+#define GL_IMAGE_2D_RECT 0x904F
+#define GL_IMAGE_CUBE 0x9050
+#define GL_IMAGE_BUFFER 0x9051
+#define GL_IMAGE_1D_ARRAY 0x9052
+#define GL_IMAGE_2D_ARRAY 0x9053
+#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054
+#define GL_IMAGE_2D_MULTISAMPLE 0x9055
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056
+#define GL_INT_IMAGE_1D 0x9057
+#define GL_INT_IMAGE_2D 0x9058
+#define GL_INT_IMAGE_3D 0x9059
+#define GL_INT_IMAGE_2D_RECT 0x905A
+#define GL_INT_IMAGE_CUBE 0x905B
+#define GL_INT_IMAGE_BUFFER 0x905C
+#define GL_INT_IMAGE_1D_ARRAY 0x905D
+#define GL_INT_IMAGE_2D_ARRAY 0x905E
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F
+#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061
+#define GL_UNSIGNED_INT_IMAGE_1D 0x9062
+#define GL_UNSIGNED_INT_IMAGE_2D 0x9063
+#define GL_UNSIGNED_INT_IMAGE_3D 0x9064
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065
+#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066
+#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C
+#define GL_MAX_IMAGE_SAMPLES 0x906D
+#define GL_IMAGE_BINDING_FORMAT 0x906E
+#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9
+#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD
+#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE
+#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF
+#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C
+#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D
+#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E
+#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F
+#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
+typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers);
+typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
+GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
+GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
+GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params);
+GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers);
+GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount);
+GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);
+#endif
+#endif /* GL_VERSION_4_2 */
+
+#ifndef GL_VERSION_4_3
+#define GL_VERSION_4_3 1
+typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9
+#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E
+#define GL_COMPRESSED_RGB8_ETC2 0x9274
+#define GL_COMPRESSED_SRGB8_ETC2 0x9275
+#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
+#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277
+#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278
+#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279
+#define GL_COMPRESSED_R11_EAC 0x9270
+#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271
+#define GL_COMPRESSED_RG11_EAC 0x9272
+#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273
+#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A
+#define GL_MAX_ELEMENT_INDEX 0x8D6B
+#define GL_COMPUTE_SHADER 0x91B9
+#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB
+#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC
+#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD
+#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262
+#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263
+#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264
+#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265
+#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266
+#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB
+#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE
+#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF
+#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED
+#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE
+#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF
+#define GL_COMPUTE_SHADER_BIT 0x00000020
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION 0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245
+#define GL_DEBUG_SOURCE_API 0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249
+#define GL_DEBUG_SOURCE_APPLICATION 0x824A
+#define GL_DEBUG_SOURCE_OTHER 0x824B
+#define GL_DEBUG_TYPE_ERROR 0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E
+#define GL_DEBUG_TYPE_PORTABILITY 0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE 0x8250
+#define GL_DEBUG_TYPE_OTHER 0x8251
+#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144
+#define GL_DEBUG_LOGGED_MESSAGES 0x9145
+#define GL_DEBUG_SEVERITY_HIGH 0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM 0x9147
+#define GL_DEBUG_SEVERITY_LOW 0x9148
+#define GL_DEBUG_TYPE_MARKER 0x8268
+#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269
+#define GL_DEBUG_TYPE_POP_GROUP 0x826A
+#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B
+#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C
+#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D
+#define GL_BUFFER 0x82E0
+#define GL_SHADER 0x82E1
+#define GL_PROGRAM 0x82E2
+#define GL_QUERY 0x82E3
+#define GL_PROGRAM_PIPELINE 0x82E4
+#define GL_SAMPLER 0x82E6
+#define GL_MAX_LABEL_LENGTH 0x82E8
+#define GL_DEBUG_OUTPUT 0x92E0
+#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002
+#define GL_MAX_UNIFORM_LOCATIONS 0x826E
+#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310
+#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312
+#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313
+#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314
+#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315
+#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316
+#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317
+#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318
+#define GL_INTERNALFORMAT_SUPPORTED 0x826F
+#define GL_INTERNALFORMAT_PREFERRED 0x8270
+#define GL_INTERNALFORMAT_RED_SIZE 0x8271
+#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272
+#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273
+#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274
+#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275
+#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276
+#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277
+#define GL_INTERNALFORMAT_RED_TYPE 0x8278
+#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279
+#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A
+#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B
+#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C
+#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D
+#define GL_MAX_WIDTH 0x827E
+#define GL_MAX_HEIGHT 0x827F
+#define GL_MAX_DEPTH 0x8280
+#define GL_MAX_LAYERS 0x8281
+#define GL_MAX_COMBINED_DIMENSIONS 0x8282
+#define GL_COLOR_COMPONENTS 0x8283
+#define GL_DEPTH_COMPONENTS 0x8284
+#define GL_STENCIL_COMPONENTS 0x8285
+#define GL_COLOR_RENDERABLE 0x8286
+#define GL_DEPTH_RENDERABLE 0x8287
+#define GL_STENCIL_RENDERABLE 0x8288
+#define GL_FRAMEBUFFER_RENDERABLE 0x8289
+#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A
+#define GL_FRAMEBUFFER_BLEND 0x828B
+#define GL_READ_PIXELS 0x828C
+#define GL_READ_PIXELS_FORMAT 0x828D
+#define GL_READ_PIXELS_TYPE 0x828E
+#define GL_TEXTURE_IMAGE_FORMAT 0x828F
+#define GL_TEXTURE_IMAGE_TYPE 0x8290
+#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291
+#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292
+#define GL_MIPMAP 0x8293
+#define GL_MANUAL_GENERATE_MIPMAP 0x8294
+#define GL_AUTO_GENERATE_MIPMAP 0x8295
+#define GL_COLOR_ENCODING 0x8296
+#define GL_SRGB_READ 0x8297
+#define GL_SRGB_WRITE 0x8298
+#define GL_FILTER 0x829A
+#define GL_VERTEX_TEXTURE 0x829B
+#define GL_TESS_CONTROL_TEXTURE 0x829C
+#define GL_TESS_EVALUATION_TEXTURE 0x829D
+#define GL_GEOMETRY_TEXTURE 0x829E
+#define GL_FRAGMENT_TEXTURE 0x829F
+#define GL_COMPUTE_TEXTURE 0x82A0
+#define GL_TEXTURE_SHADOW 0x82A1
+#define GL_TEXTURE_GATHER 0x82A2
+#define GL_TEXTURE_GATHER_SHADOW 0x82A3
+#define GL_SHADER_IMAGE_LOAD 0x82A4
+#define GL_SHADER_IMAGE_STORE 0x82A5
+#define GL_SHADER_IMAGE_ATOMIC 0x82A6
+#define GL_IMAGE_TEXEL_SIZE 0x82A7
+#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8
+#define GL_IMAGE_PIXEL_FORMAT 0x82A9
+#define GL_IMAGE_PIXEL_TYPE 0x82AA
+#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC
+#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD
+#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE
+#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF
+#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1
+#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2
+#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3
+#define GL_CLEAR_BUFFER 0x82B4
+#define GL_TEXTURE_VIEW 0x82B5
+#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6
+#define GL_FULL_SUPPORT 0x82B7
+#define GL_CAVEAT_SUPPORT 0x82B8
+#define GL_IMAGE_CLASS_4_X_32 0x82B9
+#define GL_IMAGE_CLASS_2_X_32 0x82BA
+#define GL_IMAGE_CLASS_1_X_32 0x82BB
+#define GL_IMAGE_CLASS_4_X_16 0x82BC
+#define GL_IMAGE_CLASS_2_X_16 0x82BD
+#define GL_IMAGE_CLASS_1_X_16 0x82BE
+#define GL_IMAGE_CLASS_4_X_8 0x82BF
+#define GL_IMAGE_CLASS_2_X_8 0x82C0
+#define GL_IMAGE_CLASS_1_X_8 0x82C1
+#define GL_IMAGE_CLASS_11_11_10 0x82C2
+#define GL_IMAGE_CLASS_10_10_10_2 0x82C3
+#define GL_VIEW_CLASS_128_BITS 0x82C4
+#define GL_VIEW_CLASS_96_BITS 0x82C5
+#define GL_VIEW_CLASS_64_BITS 0x82C6
+#define GL_VIEW_CLASS_48_BITS 0x82C7
+#define GL_VIEW_CLASS_32_BITS 0x82C8
+#define GL_VIEW_CLASS_24_BITS 0x82C9
+#define GL_VIEW_CLASS_16_BITS 0x82CA
+#define GL_VIEW_CLASS_8_BITS 0x82CB
+#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC
+#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD
+#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE
+#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF
+#define GL_VIEW_CLASS_RGTC1_RED 0x82D0
+#define GL_VIEW_CLASS_RGTC2_RG 0x82D1
+#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2
+#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3
+#define GL_UNIFORM 0x92E1
+#define GL_UNIFORM_BLOCK 0x92E2
+#define GL_PROGRAM_INPUT 0x92E3
+#define GL_PROGRAM_OUTPUT 0x92E4
+#define GL_BUFFER_VARIABLE 0x92E5
+#define GL_SHADER_STORAGE_BLOCK 0x92E6
+#define GL_VERTEX_SUBROUTINE 0x92E8
+#define GL_TESS_CONTROL_SUBROUTINE 0x92E9
+#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA
+#define GL_GEOMETRY_SUBROUTINE 0x92EB
+#define GL_FRAGMENT_SUBROUTINE 0x92EC
+#define GL_COMPUTE_SUBROUTINE 0x92ED
+#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE
+#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF
+#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0
+#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1
+#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2
+#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3
+#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4
+#define GL_ACTIVE_RESOURCES 0x92F5
+#define GL_MAX_NAME_LENGTH 0x92F6
+#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7
+#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8
+#define GL_NAME_LENGTH 0x92F9
+#define GL_TYPE 0x92FA
+#define GL_ARRAY_SIZE 0x92FB
+#define GL_OFFSET 0x92FC
+#define GL_BLOCK_INDEX 0x92FD
+#define GL_ARRAY_STRIDE 0x92FE
+#define GL_MATRIX_STRIDE 0x92FF
+#define GL_IS_ROW_MAJOR 0x9300
+#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301
+#define GL_BUFFER_BINDING 0x9302
+#define GL_BUFFER_DATA_SIZE 0x9303
+#define GL_NUM_ACTIVE_VARIABLES 0x9304
+#define GL_ACTIVE_VARIABLES 0x9305
+#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308
+#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309
+#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A
+#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B
+#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C
+#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D
+#define GL_LOCATION 0x930E
+#define GL_LOCATION_INDEX 0x930F
+#define GL_IS_PER_PATCH 0x92E7
+#define GL_SHADER_STORAGE_BUFFER 0x90D2
+#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3
+#define GL_SHADER_STORAGE_BUFFER_START 0x90D4
+#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5
+#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9
+#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA
+#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB
+#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC
+#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD
+#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE
+#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF
+#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000
+#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39
+#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA
+#define GL_TEXTURE_BUFFER_OFFSET 0x919D
+#define GL_TEXTURE_BUFFER_SIZE 0x919E
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F
+#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB
+#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC
+#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD
+#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE
+#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
+#define GL_VERTEX_ATTRIB_BINDING 0x82D4
+#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5
+#define GL_VERTEX_BINDING_DIVISOR 0x82D6
+#define GL_VERTEX_BINDING_OFFSET 0x82D7
+#define GL_VERTEX_BINDING_STRIDE 0x82D8
+#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9
+#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA
+#define GL_VERTEX_BINDING_BUFFER 0x8F4F
+#define GL_DISPLAY_LIST 0x82E7
+typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect);
+typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params);
+typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding);
+typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex);
+typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam);
+typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void);
+typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label);
+typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect);
+GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params);
+GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level);
+GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length);
+GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer);
+GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
+GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name);
+GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name);
+GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name);
+GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding);
+GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex);
+GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor);
+GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam);
+GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+GLAPI void APIENTRY glPopDebugGroup (void);
+GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label);
+GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+#endif
+#endif /* GL_VERSION_4_3 */
+
+#ifndef GL_VERSION_4_4
+#define GL_VERSION_4_4 1
+#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5
+#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221
+#define GL_TEXTURE_BUFFER_BINDING 0x8C2A
+#define GL_MAP_PERSISTENT_BIT 0x0040
+#define GL_MAP_COHERENT_BIT 0x0080
+#define GL_DYNAMIC_STORAGE_BIT 0x0100
+#define GL_CLIENT_STORAGE_BIT 0x0200
+#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000
+#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F
+#define GL_BUFFER_STORAGE_FLAGS 0x8220
+#define GL_CLEAR_TEXTURE 0x9365
+#define GL_LOCATION_COMPONENT 0x934A
+#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B
+#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C
+#define GL_QUERY_BUFFER 0x9192
+#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000
+#define GL_QUERY_BUFFER_BINDING 0x9193
+#define GL_QUERY_RESULT_NO_WAIT 0x9194
+#define GL_MIRROR_CLAMP_TO_EDGE 0x8743
+typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags);
+typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers);
+typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes);
+typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures);
+typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers);
+typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures);
+typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags);
+GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers);
+GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes);
+GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures);
+GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers);
+GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures);
+GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);
+#endif
+#endif /* GL_VERSION_4_4 */
+
+#ifndef GL_VERSION_4_5
+#define GL_VERSION_4_5 1
+#define GL_CONTEXT_LOST 0x0507
+#define GL_NEGATIVE_ONE_TO_ONE 0x935E
+#define GL_ZERO_TO_ONE 0x935F
+#define GL_CLIP_ORIGIN 0x935C
+#define GL_CLIP_DEPTH_MODE 0x935D
+#define GL_QUERY_WAIT_INVERTED 0x8E17
+#define GL_QUERY_NO_WAIT_INVERTED 0x8E18
+#define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19
+#define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A
+#define GL_MAX_CULL_DISTANCES 0x82F9
+#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA
+#define GL_TEXTURE_TARGET 0x1006
+#define GL_QUERY_TARGET 0x82EA
+#define GL_TEXTURE_BINDING 0x82EB
+#define GL_GUILTY_CONTEXT_RESET 0x8253
+#define GL_INNOCENT_CONTEXT_RESET 0x8254
+#define GL_UNKNOWN_CONTEXT_RESET 0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY 0x8256
+#define GL_LOSE_CONTEXT_ON_RESET 0x8252
+#define GL_NO_RESET_NOTIFICATION 0x8261
+#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004
+#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB
+#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC
+typedef void (APIENTRYP PFNGLCLIPCONTROLPROC) (GLenum origin, GLenum depth);
+typedef void (APIENTRYP PFNGLCREATETRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC) (GLuint xfb, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC) (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKIVPROC) (GLuint xfb, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint *param);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param);
+typedef void (APIENTRYP PFNGLCREATEBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEPROC) (GLuint buffer, GLsizei size, const void *data, GLbitfield flags);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAPROC) (GLuint buffer, GLsizei size, const void *data, GLenum usage);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizei size, const void *data);
+typedef void (APIENTRYP PFNGLCOPYNAMEDBUFFERSUBDATAPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizei size);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizei size, GLenum format, GLenum type, const void *data);
+typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERPROC) (GLuint buffer, GLenum access);
+typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizei length, GLbitfield access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFERPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizei length);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVPROC) (GLuint buffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERI64VPROC) (GLuint buffer, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVPROC) (GLuint buffer, GLenum pname, void **params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizei size, void *data);
+typedef void (APIENTRYP PFNGLCREATEFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC) (GLuint framebuffer, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC) (GLuint framebuffer, GLenum buf);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC) (GLuint framebuffer, GLenum src);
+typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments);
+typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFIPROC) (GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil);
+typedef void (APIENTRYP PFNGLBLITNAMEDFRAMEBUFFERPROC) (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC) (GLuint framebuffer, GLenum target);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC) (GLuint framebuffer, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLCREATERENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC) (GLuint renderbuffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLCREATETEXTURESPROC) (GLenum target, GLsizei n, GLuint *textures);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFERPROC) (GLuint texture, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEPROC) (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizei size);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFPROC) (GLuint texture, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, const GLfloat *param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIPROC) (GLuint texture, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLBINDTEXTUREUNITPROC) (GLuint unit, GLuint texture);
+typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVPROC) (GLuint texture, GLint level, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVPROC) (GLuint texture, GLint level, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLCREATEVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index);
+typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index);
+typedef void (APIENTRYP PFNGLVERTEXARRAYELEMENTBUFFERPROC) (GLuint vaobj, GLuint buffer);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERSPROC) (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);
+typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBBINDINGPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBIFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBLFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYBINDINGDIVISORPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYIVPROC) (GLuint vaobj, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXEDIVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXED64IVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param);
+typedef void (APIENTRYP PFNGLCREATESAMPLERSPROC) (GLsizei n, GLuint *samplers);
+typedef void (APIENTRYP PFNGLCREATEPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines);
+typedef void (APIENTRYP PFNGLCREATEQUERIESPROC) (GLenum target, GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC) (GLbitfield barriers);
+typedef void (APIENTRYP PFNGLGETTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels);
+typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC) (void);
+typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETNTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETNUNIFORMDVPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMFVPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMUIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+typedef void (APIENTRYP PFNGLREADNPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+typedef void (APIENTRYP PFNGLGETNMAPDVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);
+typedef void (APIENTRYP PFNGLGETNMAPFVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);
+typedef void (APIENTRYP PFNGLGETNMAPIVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPFVPROC) (GLenum map, GLsizei bufSize, GLfloat *values);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVPROC) (GLenum map, GLsizei bufSize, GLuint *values);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVPROC) (GLenum map, GLsizei bufSize, GLushort *values);
+typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEPROC) (GLsizei bufSize, GLubyte *pattern);
+typedef void (APIENTRYP PFNGLGETNCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table);
+typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image);
+typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span);
+typedef void (APIENTRYP PFNGLGETNHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+typedef void (APIENTRYP PFNGLGETNMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+typedef void (APIENTRYP PFNGLTEXTUREBARRIERPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClipControl (GLenum origin, GLenum depth);
+GLAPI void APIENTRY glCreateTransformFeedbacks (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glTransformFeedbackBufferBase (GLuint xfb, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackBufferRange (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size);
+GLAPI void APIENTRY glGetTransformFeedbackiv (GLuint xfb, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetTransformFeedbacki_v (GLuint xfb, GLenum pname, GLuint index, GLint *param);
+GLAPI void APIENTRY glGetTransformFeedbacki64_v (GLuint xfb, GLenum pname, GLuint index, GLint64 *param);
+GLAPI void APIENTRY glCreateBuffers (GLsizei n, GLuint *buffers);
+GLAPI void APIENTRY glNamedBufferStorage (GLuint buffer, GLsizei size, const void *data, GLbitfield flags);
+GLAPI void APIENTRY glNamedBufferData (GLuint buffer, GLsizei size, const void *data, GLenum usage);
+GLAPI void APIENTRY glNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizei size, const void *data);
+GLAPI void APIENTRY glCopyNamedBufferSubData (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizei size);
+GLAPI void APIENTRY glClearNamedBufferData (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearNamedBufferSubData (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizei size, GLenum format, GLenum type, const void *data);
+GLAPI void *APIENTRY glMapNamedBuffer (GLuint buffer, GLenum access);
+GLAPI void *APIENTRY glMapNamedBufferRange (GLuint buffer, GLintptr offset, GLsizei length, GLbitfield access);
+GLAPI GLboolean APIENTRY glUnmapNamedBuffer (GLuint buffer);
+GLAPI void APIENTRY glFlushMappedNamedBufferRange (GLuint buffer, GLintptr offset, GLsizei length);
+GLAPI void APIENTRY glGetNamedBufferParameteriv (GLuint buffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetNamedBufferParameteri64v (GLuint buffer, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glGetNamedBufferPointerv (GLuint buffer, GLenum pname, void **params);
+GLAPI void APIENTRY glGetNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizei size, void *data);
+GLAPI void APIENTRY glCreateFramebuffers (GLsizei n, GLuint *framebuffers);
+GLAPI void APIENTRY glNamedFramebufferRenderbuffer (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glNamedFramebufferParameteri (GLuint framebuffer, GLenum pname, GLint param);
+GLAPI void APIENTRY glNamedFramebufferTexture (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTextureLayer (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void APIENTRY glNamedFramebufferDrawBuffer (GLuint framebuffer, GLenum buf);
+GLAPI void APIENTRY glNamedFramebufferDrawBuffers (GLuint framebuffer, GLsizei n, const GLenum *bufs);
+GLAPI void APIENTRY glNamedFramebufferReadBuffer (GLuint framebuffer, GLenum src);
+GLAPI void APIENTRY glInvalidateNamedFramebufferData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments);
+GLAPI void APIENTRY glInvalidateNamedFramebufferSubData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glClearNamedFramebufferiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value);
+GLAPI void APIENTRY glClearNamedFramebufferuiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value);
+GLAPI void APIENTRY glClearNamedFramebufferfv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value);
+GLAPI void APIENTRY glClearNamedFramebufferfi (GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil);
+GLAPI void APIENTRY glBlitNamedFramebuffer (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GLAPI GLenum APIENTRY glCheckNamedFramebufferStatus (GLuint framebuffer, GLenum target);
+GLAPI void APIENTRY glGetNamedFramebufferParameteriv (GLuint framebuffer, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameteriv (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glCreateRenderbuffers (GLsizei n, GLuint *renderbuffers);
+GLAPI void APIENTRY glNamedRenderbufferStorage (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisample (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetNamedRenderbufferParameteriv (GLuint renderbuffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glCreateTextures (GLenum target, GLsizei n, GLuint *textures);
+GLAPI void APIENTRY glTextureBuffer (GLuint texture, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glTextureBufferRange (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizei size);
+GLAPI void APIENTRY glTextureStorage1D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width);
+GLAPI void APIENTRY glTextureStorage2D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTextureStorage3D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glTextureStorage2DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureStorage3DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCompressedTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCopyTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glCopyTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTextureParameterf (GLuint texture, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glTextureParameterfv (GLuint texture, GLenum pname, const GLfloat *param);
+GLAPI void APIENTRY glTextureParameteri (GLuint texture, GLenum pname, GLint param);
+GLAPI void APIENTRY glTextureParameterIiv (GLuint texture, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTextureParameterIuiv (GLuint texture, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glTextureParameteriv (GLuint texture, GLenum pname, const GLint *param);
+GLAPI void APIENTRY glGenerateTextureMipmap (GLuint texture);
+GLAPI void APIENTRY glBindTextureUnit (GLuint unit, GLuint texture);
+GLAPI void APIENTRY glGetTextureImage (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+GLAPI void APIENTRY glGetCompressedTextureImage (GLuint texture, GLint level, GLsizei bufSize, void *pixels);
+GLAPI void APIENTRY glGetTextureLevelParameterfv (GLuint texture, GLint level, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTextureLevelParameteriv (GLuint texture, GLint level, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTextureParameterfv (GLuint texture, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTextureParameterIiv (GLuint texture, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTextureParameterIuiv (GLuint texture, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glGetTextureParameteriv (GLuint texture, GLenum pname, GLint *params);
+GLAPI void APIENTRY glCreateVertexArrays (GLsizei n, GLuint *arrays);
+GLAPI void APIENTRY glDisableVertexArrayAttrib (GLuint vaobj, GLuint index);
+GLAPI void APIENTRY glEnableVertexArrayAttrib (GLuint vaobj, GLuint index);
+GLAPI void APIENTRY glVertexArrayElementBuffer (GLuint vaobj, GLuint buffer);
+GLAPI void APIENTRY glVertexArrayVertexBuffer (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GLAPI void APIENTRY glVertexArrayVertexBuffers (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);
+GLAPI void APIENTRY glVertexArrayAttribBinding (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+GLAPI void APIENTRY glVertexArrayAttribFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayAttribIFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayAttribLFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayBindingDivisor (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+GLAPI void APIENTRY glGetVertexArrayiv (GLuint vaobj, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetVertexArrayIndexediv (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetVertexArrayIndexed64iv (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param);
+GLAPI void APIENTRY glCreateSamplers (GLsizei n, GLuint *samplers);
+GLAPI void APIENTRY glCreateProgramPipelines (GLsizei n, GLuint *pipelines);
+GLAPI void APIENTRY glCreateQueries (GLenum target, GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glMemoryBarrierByRegion (GLbitfield barriers);
+GLAPI void APIENTRY glGetTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+GLAPI void APIENTRY glGetCompressedTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels);
+GLAPI GLenum APIENTRY glGetGraphicsResetStatus (void);
+GLAPI void APIENTRY glGetnCompressedTexImage (GLenum target, GLint lod, GLsizei bufSize, void *pixels);
+GLAPI void APIENTRY glGetnTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+GLAPI void APIENTRY glGetnUniformdv (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+GLAPI void APIENTRY glGetnUniformfv (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+GLAPI void APIENTRY glGetnUniformiv (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+GLAPI void APIENTRY glGetnUniformuiv (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+GLAPI void APIENTRY glReadnPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+GLAPI void APIENTRY glGetnMapdv (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);
+GLAPI void APIENTRY glGetnMapfv (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);
+GLAPI void APIENTRY glGetnMapiv (GLenum target, GLenum query, GLsizei bufSize, GLint *v);
+GLAPI void APIENTRY glGetnPixelMapfv (GLenum map, GLsizei bufSize, GLfloat *values);
+GLAPI void APIENTRY glGetnPixelMapuiv (GLenum map, GLsizei bufSize, GLuint *values);
+GLAPI void APIENTRY glGetnPixelMapusv (GLenum map, GLsizei bufSize, GLushort *values);
+GLAPI void APIENTRY glGetnPolygonStipple (GLsizei bufSize, GLubyte *pattern);
+GLAPI void APIENTRY glGetnColorTable (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table);
+GLAPI void APIENTRY glGetnConvolutionFilter (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image);
+GLAPI void APIENTRY glGetnSeparableFilter (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span);
+GLAPI void APIENTRY glGetnHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+GLAPI void APIENTRY glGetnMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+GLAPI void APIENTRY glTextureBarrier (void);
+#endif
+#endif /* GL_VERSION_4_5 */
+
+#ifndef GL_ARB_ES2_compatibility
+#define GL_ARB_ES2_compatibility 1
+#endif /* GL_ARB_ES2_compatibility */
+
+#ifndef GL_ARB_ES3_1_compatibility
+#define GL_ARB_ES3_1_compatibility 1
+#endif /* GL_ARB_ES3_1_compatibility */
+
+#ifndef GL_ARB_ES3_compatibility
+#define GL_ARB_ES3_compatibility 1
+#endif /* GL_ARB_ES3_compatibility */
+
+#ifndef GL_ARB_arrays_of_arrays
+#define GL_ARB_arrays_of_arrays 1
+#endif /* GL_ARB_arrays_of_arrays */
+
+#ifndef GL_ARB_base_instance
+#define GL_ARB_base_instance 1
+#endif /* GL_ARB_base_instance */
+
+#ifndef GL_ARB_bindless_texture
+#define GL_ARB_bindless_texture 1
+typedef uint64_t GLuint64EXT;
+#define GL_UNSIGNED_INT64_ARB 0x140F
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture);
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle);
+typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle);
+typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture);
+GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler);
+GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle);
+GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle);
+GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access);
+GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle);
+GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value);
+GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value);
+GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle);
+GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle);
+GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x);
+GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params);
+#endif
+#endif /* GL_ARB_bindless_texture */
+
+#ifndef GL_ARB_blend_func_extended
+#define GL_ARB_blend_func_extended 1
+#endif /* GL_ARB_blend_func_extended */
+
+#ifndef GL_ARB_buffer_storage
+#define GL_ARB_buffer_storage 1
+#endif /* GL_ARB_buffer_storage */
+
+#ifndef GL_ARB_cl_event
+#define GL_ARB_cl_event 1
+struct _cl_context;
+struct _cl_event;
+#define GL_SYNC_CL_EVENT_ARB 0x8240
+#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241
+typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags);
+#endif
+#endif /* GL_ARB_cl_event */
+
+#ifndef GL_ARB_clear_buffer_object
+#define GL_ARB_clear_buffer_object 1
+#endif /* GL_ARB_clear_buffer_object */
+
+#ifndef GL_ARB_clear_texture
+#define GL_ARB_clear_texture 1
+#endif /* GL_ARB_clear_texture */
+
+#ifndef GL_ARB_clip_control
+#define GL_ARB_clip_control 1
+#endif /* GL_ARB_clip_control */
+
+#ifndef GL_ARB_color_buffer_float
+#define GL_ARB_color_buffer_float 1
+#define GL_RGBA_FLOAT_MODE_ARB 0x8820
+#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A
+#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B
+#define GL_CLAMP_READ_COLOR_ARB 0x891C
+#define GL_FIXED_ONLY_ARB 0x891D
+typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp);
+#endif
+#endif /* GL_ARB_color_buffer_float */
+
+#ifndef GL_ARB_compatibility
+#define GL_ARB_compatibility 1
+#endif /* GL_ARB_compatibility */
+
+#ifndef GL_ARB_compressed_texture_pixel_storage
+#define GL_ARB_compressed_texture_pixel_storage 1
+#endif /* GL_ARB_compressed_texture_pixel_storage */
+
+#ifndef GL_ARB_compute_shader
+#define GL_ARB_compute_shader 1
+#endif /* GL_ARB_compute_shader */
+
+#ifndef GL_ARB_compute_variable_group_size
+#define GL_ARB_compute_variable_group_size 1
+#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344
+#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB
+#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345
+#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF
+typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z);
+#endif
+#endif /* GL_ARB_compute_variable_group_size */
+
+#ifndef GL_ARB_conditional_render_inverted
+#define GL_ARB_conditional_render_inverted 1
+#endif /* GL_ARB_conditional_render_inverted */
+
+#ifndef GL_ARB_conservative_depth
+#define GL_ARB_conservative_depth 1
+#endif /* GL_ARB_conservative_depth */
+
+#ifndef GL_ARB_copy_buffer
+#define GL_ARB_copy_buffer 1
+#endif /* GL_ARB_copy_buffer */
+
+#ifndef GL_ARB_copy_image
+#define GL_ARB_copy_image 1
+#endif /* GL_ARB_copy_image */
+
+#ifndef GL_ARB_cull_distance
+#define GL_ARB_cull_distance 1
+#endif /* GL_ARB_cull_distance */
+
+#ifndef GL_ARB_debug_output
+#define GL_ARB_debug_output 1
+typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245
+#define GL_DEBUG_SOURCE_API_ARB 0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249
+#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A
+#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B
+#define GL_DEBUG_TYPE_ERROR_ARB 0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E
+#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250
+#define GL_DEBUG_TYPE_OTHER_ARB 0x8251
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144
+#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145
+#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147
+#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam);
+typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam);
+GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+#endif
+#endif /* GL_ARB_debug_output */
+
+#ifndef GL_ARB_depth_buffer_float
+#define GL_ARB_depth_buffer_float 1
+#endif /* GL_ARB_depth_buffer_float */
+
+#ifndef GL_ARB_depth_clamp
+#define GL_ARB_depth_clamp 1
+#endif /* GL_ARB_depth_clamp */
+
+#ifndef GL_ARB_depth_texture
+#define GL_ARB_depth_texture 1
+#define GL_DEPTH_COMPONENT16_ARB 0x81A5
+#define GL_DEPTH_COMPONENT24_ARB 0x81A6
+#define GL_DEPTH_COMPONENT32_ARB 0x81A7
+#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A
+#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B
+#endif /* GL_ARB_depth_texture */
+
+#ifndef GL_ARB_derivative_control
+#define GL_ARB_derivative_control 1
+#endif /* GL_ARB_derivative_control */
+
+#ifndef GL_ARB_direct_state_access
+#define GL_ARB_direct_state_access 1
+#endif /* GL_ARB_direct_state_access */
+
+#ifndef GL_ARB_draw_buffers
+#define GL_ARB_draw_buffers 1
+#define GL_MAX_DRAW_BUFFERS_ARB 0x8824
+#define GL_DRAW_BUFFER0_ARB 0x8825
+#define GL_DRAW_BUFFER1_ARB 0x8826
+#define GL_DRAW_BUFFER2_ARB 0x8827
+#define GL_DRAW_BUFFER3_ARB 0x8828
+#define GL_DRAW_BUFFER4_ARB 0x8829
+#define GL_DRAW_BUFFER5_ARB 0x882A
+#define GL_DRAW_BUFFER6_ARB 0x882B
+#define GL_DRAW_BUFFER7_ARB 0x882C
+#define GL_DRAW_BUFFER8_ARB 0x882D
+#define GL_DRAW_BUFFER9_ARB 0x882E
+#define GL_DRAW_BUFFER10_ARB 0x882F
+#define GL_DRAW_BUFFER11_ARB 0x8830
+#define GL_DRAW_BUFFER12_ARB 0x8831
+#define GL_DRAW_BUFFER13_ARB 0x8832
+#define GL_DRAW_BUFFER14_ARB 0x8833
+#define GL_DRAW_BUFFER15_ARB 0x8834
+typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs);
+#endif
+#endif /* GL_ARB_draw_buffers */
+
+#ifndef GL_ARB_draw_buffers_blend
+#define GL_ARB_draw_buffers_blend 1
+typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode);
+GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+#endif
+#endif /* GL_ARB_draw_buffers_blend */
+
+#ifndef GL_ARB_draw_elements_base_vertex
+#define GL_ARB_draw_elements_base_vertex 1
+#endif /* GL_ARB_draw_elements_base_vertex */
+
+#ifndef GL_ARB_draw_indirect
+#define GL_ARB_draw_indirect 1
+#endif /* GL_ARB_draw_indirect */
+
+#ifndef GL_ARB_draw_instanced
+#define GL_ARB_draw_instanced 1
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#endif
+#endif /* GL_ARB_draw_instanced */
+
+#ifndef GL_ARB_enhanced_layouts
+#define GL_ARB_enhanced_layouts 1
+#endif /* GL_ARB_enhanced_layouts */
+
+#ifndef GL_ARB_explicit_attrib_location
+#define GL_ARB_explicit_attrib_location 1
+#endif /* GL_ARB_explicit_attrib_location */
+
+#ifndef GL_ARB_explicit_uniform_location
+#define GL_ARB_explicit_uniform_location 1
+#endif /* GL_ARB_explicit_uniform_location */
+
+#ifndef GL_ARB_fragment_coord_conventions
+#define GL_ARB_fragment_coord_conventions 1
+#endif /* GL_ARB_fragment_coord_conventions */
+
+#ifndef GL_ARB_fragment_layer_viewport
+#define GL_ARB_fragment_layer_viewport 1
+#endif /* GL_ARB_fragment_layer_viewport */
+
+#ifndef GL_ARB_fragment_program
+#define GL_ARB_fragment_program 1
+#define GL_FRAGMENT_PROGRAM_ARB 0x8804
+#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875
+#define GL_PROGRAM_LENGTH_ARB 0x8627
+#define GL_PROGRAM_FORMAT_ARB 0x8876
+#define GL_PROGRAM_BINDING_ARB 0x8677
+#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0
+#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1
+#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2
+#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3
+#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4
+#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5
+#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6
+#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7
+#define GL_PROGRAM_PARAMETERS_ARB 0x88A8
+#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9
+#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA
+#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB
+#define GL_PROGRAM_ATTRIBS_ARB 0x88AC
+#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD
+#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE
+#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF
+#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4
+#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5
+#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6
+#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805
+#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806
+#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807
+#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808
+#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809
+#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A
+#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B
+#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C
+#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D
+#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E
+#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F
+#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810
+#define GL_PROGRAM_STRING_ARB 0x8628
+#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B
+#define GL_CURRENT_MATRIX_ARB 0x8641
+#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7
+#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
+#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F
+#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E
+#define GL_MAX_TEXTURE_COORDS_ARB 0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872
+#define GL_PROGRAM_ERROR_STRING_ARB 0x8874
+#define GL_MATRIX0_ARB 0x88C0
+#define GL_MATRIX1_ARB 0x88C1
+#define GL_MATRIX2_ARB 0x88C2
+#define GL_MATRIX3_ARB 0x88C3
+#define GL_MATRIX4_ARB 0x88C4
+#define GL_MATRIX5_ARB 0x88C5
+#define GL_MATRIX6_ARB 0x88C6
+#define GL_MATRIX7_ARB 0x88C7
+#define GL_MATRIX8_ARB 0x88C8
+#define GL_MATRIX9_ARB 0x88C9
+#define GL_MATRIX10_ARB 0x88CA
+#define GL_MATRIX11_ARB 0x88CB
+#define GL_MATRIX12_ARB 0x88CC
+#define GL_MATRIX13_ARB 0x88CD
+#define GL_MATRIX14_ARB 0x88CE
+#define GL_MATRIX15_ARB 0x88CF
+#define GL_MATRIX16_ARB 0x88D0
+#define GL_MATRIX17_ARB 0x88D1
+#define GL_MATRIX18_ARB 0x88D2
+#define GL_MATRIX19_ARB 0x88D3
+#define GL_MATRIX20_ARB 0x88D4
+#define GL_MATRIX21_ARB 0x88D5
+#define GL_MATRIX22_ARB 0x88D6
+#define GL_MATRIX23_ARB 0x88D7
+#define GL_MATRIX24_ARB 0x88D8
+#define GL_MATRIX25_ARB 0x88D9
+#define GL_MATRIX26_ARB 0x88DA
+#define GL_MATRIX27_ARB 0x88DB
+#define GL_MATRIX28_ARB 0x88DC
+#define GL_MATRIX29_ARB 0x88DD
+#define GL_MATRIX30_ARB 0x88DE
+#define GL_MATRIX31_ARB 0x88DF
+typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string);
+typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string);
+GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program);
+GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs);
+GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs);
+GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params);
+GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params);
+GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params);
+GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params);
+GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string);
+GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program);
+#endif
+#endif /* GL_ARB_fragment_program */
+
+#ifndef GL_ARB_fragment_program_shadow
+#define GL_ARB_fragment_program_shadow 1
+#endif /* GL_ARB_fragment_program_shadow */
+
+#ifndef GL_ARB_fragment_shader
+#define GL_ARB_fragment_shader 1
+#define GL_FRAGMENT_SHADER_ARB 0x8B30
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B
+#endif /* GL_ARB_fragment_shader */
+
+#ifndef GL_ARB_framebuffer_no_attachments
+#define GL_ARB_framebuffer_no_attachments 1
+#endif /* GL_ARB_framebuffer_no_attachments */
+
+#ifndef GL_ARB_framebuffer_object
+#define GL_ARB_framebuffer_object 1
+#endif /* GL_ARB_framebuffer_object */
+
+#ifndef GL_ARB_framebuffer_sRGB
+#define GL_ARB_framebuffer_sRGB 1
+#endif /* GL_ARB_framebuffer_sRGB */
+
+#ifndef GL_ARB_geometry_shader4
+#define GL_ARB_geometry_shader4 1
+#define GL_LINES_ADJACENCY_ARB 0x000A
+#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B
+#define GL_TRIANGLES_ADJACENCY_ARB 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D
+#define GL_PROGRAM_POINT_SIZE_ARB 0x8642
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9
+#define GL_GEOMETRY_SHADER_ARB 0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA
+#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value);
+GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#endif
+#endif /* GL_ARB_geometry_shader4 */
+
+#ifndef GL_ARB_get_program_binary
+#define GL_ARB_get_program_binary 1
+#endif /* GL_ARB_get_program_binary */
+
+#ifndef GL_ARB_get_texture_sub_image
+#define GL_ARB_get_texture_sub_image 1
+#endif /* GL_ARB_get_texture_sub_image */
+
+#ifndef GL_ARB_gpu_shader5
+#define GL_ARB_gpu_shader5 1
+#endif /* GL_ARB_gpu_shader5 */
+
+#ifndef GL_ARB_gpu_shader_fp64
+#define GL_ARB_gpu_shader_fp64 1
+#endif /* GL_ARB_gpu_shader_fp64 */
+
+#ifndef GL_ARB_half_float_pixel
+#define GL_ARB_half_float_pixel 1
+typedef unsigned short GLhalfARB;
+#define GL_HALF_FLOAT_ARB 0x140B
+#endif /* GL_ARB_half_float_pixel */
+
+#ifndef GL_ARB_half_float_vertex
+#define GL_ARB_half_float_vertex 1
+#endif /* GL_ARB_half_float_vertex */
+
+#ifndef GL_ARB_imaging
+#define GL_ARB_imaging 1
+#define GL_BLEND_COLOR 0x8005
+#define GL_BLEND_EQUATION 0x8009
+#define GL_CONVOLUTION_1D 0x8010
+#define GL_CONVOLUTION_2D 0x8011
+#define GL_SEPARABLE_2D 0x8012
+#define GL_CONVOLUTION_BORDER_MODE 0x8013
+#define GL_CONVOLUTION_FILTER_SCALE 0x8014
+#define GL_CONVOLUTION_FILTER_BIAS 0x8015
+#define GL_REDUCE 0x8016
+#define GL_CONVOLUTION_FORMAT 0x8017
+#define GL_CONVOLUTION_WIDTH 0x8018
+#define GL_CONVOLUTION_HEIGHT 0x8019
+#define GL_MAX_CONVOLUTION_WIDTH 0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT 0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS 0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023
+#define GL_HISTOGRAM 0x8024
+#define GL_PROXY_HISTOGRAM 0x8025
+#define GL_HISTOGRAM_WIDTH 0x8026
+#define GL_HISTOGRAM_FORMAT 0x8027
+#define GL_HISTOGRAM_RED_SIZE 0x8028
+#define GL_HISTOGRAM_GREEN_SIZE 0x8029
+#define GL_HISTOGRAM_BLUE_SIZE 0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE 0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C
+#define GL_HISTOGRAM_SINK 0x802D
+#define GL_MINMAX 0x802E
+#define GL_MINMAX_FORMAT 0x802F
+#define GL_MINMAX_SINK 0x8030
+#define GL_TABLE_TOO_LARGE 0x8031
+#define GL_COLOR_MATRIX 0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB
+#define GL_COLOR_TABLE 0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2
+#define GL_PROXY_COLOR_TABLE 0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5
+#define GL_COLOR_TABLE_SCALE 0x80D6
+#define GL_COLOR_TABLE_BIAS 0x80D7
+#define GL_COLOR_TABLE_FORMAT 0x80D8
+#define GL_COLOR_TABLE_WIDTH 0x80D9
+#define GL_COLOR_TABLE_RED_SIZE 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF
+#define GL_CONSTANT_BORDER 0x8151
+#define GL_REPLICATE_BORDER 0x8153
+#define GL_CONVOLUTION_BORDER_COLOR 0x8154
+typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span);
+typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table);
+GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table);
+GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image);
+GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image);
+GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params);
+GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params);
+GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image);
+GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span);
+GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column);
+GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glResetHistogram (GLenum target);
+GLAPI void APIENTRY glResetMinmax (GLenum target);
+#endif
+#endif /* GL_ARB_imaging */
+
+#ifndef GL_ARB_indirect_parameters
+#define GL_ARB_indirect_parameters 1
+#define GL_PARAMETER_BUFFER_ARB 0x80EE
+#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#endif
+#endif /* GL_ARB_indirect_parameters */
+
+#ifndef GL_ARB_instanced_arrays
+#define GL_ARB_instanced_arrays 1
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE
+typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor);
+#endif
+#endif /* GL_ARB_instanced_arrays */
+
+#ifndef GL_ARB_internalformat_query
+#define GL_ARB_internalformat_query 1
+#endif /* GL_ARB_internalformat_query */
+
+#ifndef GL_ARB_internalformat_query2
+#define GL_ARB_internalformat_query2 1
+#define GL_SRGB_DECODE_ARB 0x8299
+#endif /* GL_ARB_internalformat_query2 */
+
+#ifndef GL_ARB_invalidate_subdata
+#define GL_ARB_invalidate_subdata 1
+#endif /* GL_ARB_invalidate_subdata */
+
+#ifndef GL_ARB_map_buffer_alignment
+#define GL_ARB_map_buffer_alignment 1
+#endif /* GL_ARB_map_buffer_alignment */
+
+#ifndef GL_ARB_map_buffer_range
+#define GL_ARB_map_buffer_range 1
+#endif /* GL_ARB_map_buffer_range */
+
+#ifndef GL_ARB_matrix_palette
+#define GL_ARB_matrix_palette 1
+#define GL_MATRIX_PALETTE_ARB 0x8840
+#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841
+#define GL_MAX_PALETTE_MATRICES_ARB 0x8842
+#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843
+#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844
+#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845
+#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846
+#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847
+#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848
+#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849
+typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index);
+GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices);
+GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices);
+GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices);
+GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_ARB_matrix_palette */
+
+#ifndef GL_ARB_multi_bind
+#define GL_ARB_multi_bind 1
+#endif /* GL_ARB_multi_bind */
+
+#ifndef GL_ARB_multi_draw_indirect
+#define GL_ARB_multi_draw_indirect 1
+#endif /* GL_ARB_multi_draw_indirect */
+
+#ifndef GL_ARB_multisample
+#define GL_ARB_multisample 1
+#define GL_MULTISAMPLE_ARB 0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F
+#define GL_SAMPLE_COVERAGE_ARB 0x80A0
+#define GL_SAMPLE_BUFFERS_ARB 0x80A8
+#define GL_SAMPLES_ARB 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB
+#define GL_MULTISAMPLE_BIT_ARB 0x20000000
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert);
+#endif
+#endif /* GL_ARB_multisample */
+
+#ifndef GL_ARB_multitexture
+#define GL_ARB_multitexture 1
+#define GL_TEXTURE0_ARB 0x84C0
+#define GL_TEXTURE1_ARB 0x84C1
+#define GL_TEXTURE2_ARB 0x84C2
+#define GL_TEXTURE3_ARB 0x84C3
+#define GL_TEXTURE4_ARB 0x84C4
+#define GL_TEXTURE5_ARB 0x84C5
+#define GL_TEXTURE6_ARB 0x84C6
+#define GL_TEXTURE7_ARB 0x84C7
+#define GL_TEXTURE8_ARB 0x84C8
+#define GL_TEXTURE9_ARB 0x84C9
+#define GL_TEXTURE10_ARB 0x84CA
+#define GL_TEXTURE11_ARB 0x84CB
+#define GL_TEXTURE12_ARB 0x84CC
+#define GL_TEXTURE13_ARB 0x84CD
+#define GL_TEXTURE14_ARB 0x84CE
+#define GL_TEXTURE15_ARB 0x84CF
+#define GL_TEXTURE16_ARB 0x84D0
+#define GL_TEXTURE17_ARB 0x84D1
+#define GL_TEXTURE18_ARB 0x84D2
+#define GL_TEXTURE19_ARB 0x84D3
+#define GL_TEXTURE20_ARB 0x84D4
+#define GL_TEXTURE21_ARB 0x84D5
+#define GL_TEXTURE22_ARB 0x84D6
+#define GL_TEXTURE23_ARB 0x84D7
+#define GL_TEXTURE24_ARB 0x84D8
+#define GL_TEXTURE25_ARB 0x84D9
+#define GL_TEXTURE26_ARB 0x84DA
+#define GL_TEXTURE27_ARB 0x84DB
+#define GL_TEXTURE28_ARB 0x84DC
+#define GL_TEXTURE29_ARB 0x84DD
+#define GL_TEXTURE30_ARB 0x84DE
+#define GL_TEXTURE31_ARB 0x84DF
+#define GL_ACTIVE_TEXTURE_ARB 0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1
+#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2
+typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveTextureARB (GLenum texture);
+GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture);
+GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s);
+GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s);
+GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s);
+GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s);
+GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t);
+GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t);
+GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t);
+GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t);
+GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r);
+GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r);
+GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q);
+GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v);
+#endif
+#endif /* GL_ARB_multitexture */
+
+#ifndef GL_ARB_occlusion_query
+#define GL_ARB_occlusion_query 1
+#define GL_QUERY_COUNTER_BITS_ARB 0x8864
+#define GL_CURRENT_QUERY_ARB 0x8865
+#define GL_QUERY_RESULT_ARB 0x8866
+#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867
+#define GL_SAMPLES_PASSED_ARB 0x8914
+typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids);
+GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id);
+GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id);
+GLAPI void APIENTRY glEndQueryARB (GLenum target);
+GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params);
+#endif
+#endif /* GL_ARB_occlusion_query */
+
+#ifndef GL_ARB_occlusion_query2
+#define GL_ARB_occlusion_query2 1
+#endif /* GL_ARB_occlusion_query2 */
+
+#ifndef GL_ARB_pipeline_statistics_query
+#define GL_ARB_pipeline_statistics_query 1
+#define GL_VERTICES_SUBMITTED_ARB 0x82EE
+#define GL_PRIMITIVES_SUBMITTED_ARB 0x82EF
+#define GL_VERTEX_SHADER_INVOCATIONS_ARB 0x82F0
+#define GL_TESS_CONTROL_SHADER_PATCHES_ARB 0x82F1
+#define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB 0x82F2
+#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB 0x82F3
+#define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4
+#define GL_COMPUTE_SHADER_INVOCATIONS_ARB 0x82F5
+#define GL_CLIPPING_INPUT_PRIMITIVES_ARB 0x82F6
+#define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7
+#endif /* GL_ARB_pipeline_statistics_query */
+
+#ifndef GL_ARB_pixel_buffer_object
+#define GL_ARB_pixel_buffer_object 1
+#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF
+#endif /* GL_ARB_pixel_buffer_object */
+
+#ifndef GL_ARB_point_parameters
+#define GL_ARB_point_parameters 1
+#define GL_POINT_SIZE_MIN_ARB 0x8126
+#define GL_POINT_SIZE_MAX_ARB 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128
+#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params);
+#endif
+#endif /* GL_ARB_point_parameters */
+
+#ifndef GL_ARB_point_sprite
+#define GL_ARB_point_sprite 1
+#define GL_POINT_SPRITE_ARB 0x8861
+#define GL_COORD_REPLACE_ARB 0x8862
+#endif /* GL_ARB_point_sprite */
+
+#ifndef GL_ARB_program_interface_query
+#define GL_ARB_program_interface_query 1
+#endif /* GL_ARB_program_interface_query */
+
+#ifndef GL_ARB_provoking_vertex
+#define GL_ARB_provoking_vertex 1
+#endif /* GL_ARB_provoking_vertex */
+
+#ifndef GL_ARB_query_buffer_object
+#define GL_ARB_query_buffer_object 1
+#endif /* GL_ARB_query_buffer_object */
+
+#ifndef GL_ARB_robust_buffer_access_behavior
+#define GL_ARB_robust_buffer_access_behavior 1
+#endif /* GL_ARB_robust_buffer_access_behavior */
+
+#ifndef GL_ARB_robustness
+#define GL_ARB_robustness 1
+#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004
+#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252
+#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253
+#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254
+#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define GL_NO_RESET_NOTIFICATION_ARB 0x8261
+typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void);
+typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img);
+typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img);
+typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);
+typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);
+typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values);
+typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern);
+typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table);
+typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image);
+typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span);
+typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void);
+GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img);
+GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img);
+GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);
+GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);
+GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v);
+GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values);
+GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values);
+GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values);
+GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern);
+GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table);
+GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image);
+GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span);
+GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+#endif
+#endif /* GL_ARB_robustness */
+
+#ifndef GL_ARB_robustness_isolation
+#define GL_ARB_robustness_isolation 1
+#endif /* GL_ARB_robustness_isolation */
+
+#ifndef GL_ARB_sample_shading
+#define GL_ARB_sample_shading 1
+#define GL_SAMPLE_SHADING_ARB 0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37
+typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value);
+#endif
+#endif /* GL_ARB_sample_shading */
+
+#ifndef GL_ARB_sampler_objects
+#define GL_ARB_sampler_objects 1
+#endif /* GL_ARB_sampler_objects */
+
+#ifndef GL_ARB_seamless_cube_map
+#define GL_ARB_seamless_cube_map 1
+#endif /* GL_ARB_seamless_cube_map */
+
+#ifndef GL_ARB_seamless_cubemap_per_texture
+#define GL_ARB_seamless_cubemap_per_texture 1
+#endif /* GL_ARB_seamless_cubemap_per_texture */
+
+#ifndef GL_ARB_separate_shader_objects
+#define GL_ARB_separate_shader_objects 1
+#endif /* GL_ARB_separate_shader_objects */
+
+#ifndef GL_ARB_shader_atomic_counters
+#define GL_ARB_shader_atomic_counters 1
+#endif /* GL_ARB_shader_atomic_counters */
+
+#ifndef GL_ARB_shader_bit_encoding
+#define GL_ARB_shader_bit_encoding 1
+#endif /* GL_ARB_shader_bit_encoding */
+
+#ifndef GL_ARB_shader_draw_parameters
+#define GL_ARB_shader_draw_parameters 1
+#endif /* GL_ARB_shader_draw_parameters */
+
+#ifndef GL_ARB_shader_group_vote
+#define GL_ARB_shader_group_vote 1
+#endif /* GL_ARB_shader_group_vote */
+
+#ifndef GL_ARB_shader_image_load_store
+#define GL_ARB_shader_image_load_store 1
+#endif /* GL_ARB_shader_image_load_store */
+
+#ifndef GL_ARB_shader_image_size
+#define GL_ARB_shader_image_size 1
+#endif /* GL_ARB_shader_image_size */
+
+#ifndef GL_ARB_shader_objects
+#define GL_ARB_shader_objects 1
+#ifdef __APPLE__
+typedef void *GLhandleARB;
+#else
+typedef unsigned int GLhandleARB;
+#endif
+typedef char GLcharARB;
+#define GL_PROGRAM_OBJECT_ARB 0x8B40
+#define GL_SHADER_OBJECT_ARB 0x8B48
+#define GL_OBJECT_TYPE_ARB 0x8B4E
+#define GL_OBJECT_SUBTYPE_ARB 0x8B4F
+#define GL_FLOAT_VEC2_ARB 0x8B50
+#define GL_FLOAT_VEC3_ARB 0x8B51
+#define GL_FLOAT_VEC4_ARB 0x8B52
+#define GL_INT_VEC2_ARB 0x8B53
+#define GL_INT_VEC3_ARB 0x8B54
+#define GL_INT_VEC4_ARB 0x8B55
+#define GL_BOOL_ARB 0x8B56
+#define GL_BOOL_VEC2_ARB 0x8B57
+#define GL_BOOL_VEC3_ARB 0x8B58
+#define GL_BOOL_VEC4_ARB 0x8B59
+#define GL_FLOAT_MAT2_ARB 0x8B5A
+#define GL_FLOAT_MAT3_ARB 0x8B5B
+#define GL_FLOAT_MAT4_ARB 0x8B5C
+#define GL_SAMPLER_1D_ARB 0x8B5D
+#define GL_SAMPLER_2D_ARB 0x8B5E
+#define GL_SAMPLER_3D_ARB 0x8B5F
+#define GL_SAMPLER_CUBE_ARB 0x8B60
+#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61
+#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62
+#define GL_SAMPLER_2D_RECT_ARB 0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64
+#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80
+#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81
+#define GL_OBJECT_LINK_STATUS_ARB 0x8B82
+#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83
+#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84
+#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85
+#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86
+#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87
+#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88
+typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj);
+typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname);
+typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj);
+typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);
+typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length);
+typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj);
+typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void);
+typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
+typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj);
+typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj);
+typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
+typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params);
+typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj);
+GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname);
+GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj);
+GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType);
+GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length);
+GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj);
+GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void);
+GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj);
+GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj);
+GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj);
+GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj);
+GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0);
+GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0);
+GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
+GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
+GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name);
+GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params);
+GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params);
+GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
+#endif
+#endif /* GL_ARB_shader_objects */
+
+#ifndef GL_ARB_shader_precision
+#define GL_ARB_shader_precision 1
+#endif /* GL_ARB_shader_precision */
+
+#ifndef GL_ARB_shader_stencil_export
+#define GL_ARB_shader_stencil_export 1
+#endif /* GL_ARB_shader_stencil_export */
+
+#ifndef GL_ARB_shader_storage_buffer_object
+#define GL_ARB_shader_storage_buffer_object 1
+#endif /* GL_ARB_shader_storage_buffer_object */
+
+#ifndef GL_ARB_shader_subroutine
+#define GL_ARB_shader_subroutine 1
+#endif /* GL_ARB_shader_subroutine */
+
+#ifndef GL_ARB_shader_texture_image_samples
+#define GL_ARB_shader_texture_image_samples 1
+#endif /* GL_ARB_shader_texture_image_samples */
+
+#ifndef GL_ARB_shader_texture_lod
+#define GL_ARB_shader_texture_lod 1
+#endif /* GL_ARB_shader_texture_lod */
+
+#ifndef GL_ARB_shading_language_100
+#define GL_ARB_shading_language_100 1
+#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C
+#endif /* GL_ARB_shading_language_100 */
+
+#ifndef GL_ARB_shading_language_420pack
+#define GL_ARB_shading_language_420pack 1
+#endif /* GL_ARB_shading_language_420pack */
+
+#ifndef GL_ARB_shading_language_include
+#define GL_ARB_shading_language_include 1
+#define GL_SHADER_INCLUDE_ARB 0x8DAE
+#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9
+#define GL_NAMED_STRING_TYPE_ARB 0x8DEA
+typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string);
+typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name);
+typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length);
+typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string);
+typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string);
+GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name);
+GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length);
+GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name);
+GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string);
+GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params);
+#endif
+#endif /* GL_ARB_shading_language_include */
+
+#ifndef GL_ARB_shading_language_packing
+#define GL_ARB_shading_language_packing 1
+#endif /* GL_ARB_shading_language_packing */
+
+#ifndef GL_ARB_shadow
+#define GL_ARB_shadow 1
+#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C
+#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D
+#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E
+#endif /* GL_ARB_shadow */
+
+#ifndef GL_ARB_shadow_ambient
+#define GL_ARB_shadow_ambient 1
+#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF
+#endif /* GL_ARB_shadow_ambient */
+
+#ifndef GL_ARB_sparse_buffer
+#define GL_ARB_sparse_buffer 1
+#define GL_SPARSE_STORAGE_BIT_ARB 0x0400
+#define GL_SPARSE_BUFFER_PAGE_SIZE_ARB 0x82F8
+typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTARBPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferPageCommitmentARB (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit);
+GLAPI void APIENTRY glNamedBufferPageCommitmentEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit);
+GLAPI void APIENTRY glNamedBufferPageCommitmentARB (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit);
+#endif
+#endif /* GL_ARB_sparse_buffer */
+
+#ifndef GL_ARB_sparse_texture
+#define GL_ARB_sparse_texture 1
+#define GL_TEXTURE_SPARSE_ARB 0x91A6
+#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7
+#define GL_NUM_SPARSE_LEVELS_ARB 0x91AA
+#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8
+#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195
+#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196
+#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197
+#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198
+#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199
+#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A
+#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9
+typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident);
+#endif
+#endif /* GL_ARB_sparse_texture */
+
+#ifndef GL_ARB_stencil_texturing
+#define GL_ARB_stencil_texturing 1
+#endif /* GL_ARB_stencil_texturing */
+
+#ifndef GL_ARB_sync
+#define GL_ARB_sync 1
+#endif /* GL_ARB_sync */
+
+#ifndef GL_ARB_tessellation_shader
+#define GL_ARB_tessellation_shader 1
+#endif /* GL_ARB_tessellation_shader */
+
+#ifndef GL_ARB_texture_barrier
+#define GL_ARB_texture_barrier 1
+#endif /* GL_ARB_texture_barrier */
+
+#ifndef GL_ARB_texture_border_clamp
+#define GL_ARB_texture_border_clamp 1
+#define GL_CLAMP_TO_BORDER_ARB 0x812D
+#endif /* GL_ARB_texture_border_clamp */
+
+#ifndef GL_ARB_texture_buffer_object
+#define GL_ARB_texture_buffer_object 1
+#define GL_TEXTURE_BUFFER_ARB 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D
+#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E
+typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer);
+#endif
+#endif /* GL_ARB_texture_buffer_object */
+
+#ifndef GL_ARB_texture_buffer_object_rgb32
+#define GL_ARB_texture_buffer_object_rgb32 1
+#endif /* GL_ARB_texture_buffer_object_rgb32 */
+
+#ifndef GL_ARB_texture_buffer_range
+#define GL_ARB_texture_buffer_range 1
+#endif /* GL_ARB_texture_buffer_range */
+
+#ifndef GL_ARB_texture_compression
+#define GL_ARB_texture_compression 1
+#define GL_COMPRESSED_ALPHA_ARB 0x84E9
+#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB
+#define GL_COMPRESSED_INTENSITY_ARB 0x84EC
+#define GL_COMPRESSED_RGB_ARB 0x84ED
+#define GL_COMPRESSED_RGBA_ARB 0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0
+#define GL_TEXTURE_COMPRESSED_ARB 0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img);
+#endif
+#endif /* GL_ARB_texture_compression */
+
+#ifndef GL_ARB_texture_compression_bptc
+#define GL_ARB_texture_compression_bptc 1
+#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C
+#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D
+#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E
+#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F
+#endif /* GL_ARB_texture_compression_bptc */
+
+#ifndef GL_ARB_texture_compression_rgtc
+#define GL_ARB_texture_compression_rgtc 1
+#endif /* GL_ARB_texture_compression_rgtc */
+
+#ifndef GL_ARB_texture_cube_map
+#define GL_ARB_texture_cube_map 1
+#define GL_NORMAL_MAP_ARB 0x8511
+#define GL_REFLECTION_MAP_ARB 0x8512
+#define GL_TEXTURE_CUBE_MAP_ARB 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C
+#endif /* GL_ARB_texture_cube_map */
+
+#ifndef GL_ARB_texture_cube_map_array
+#define GL_ARB_texture_cube_map_array 1
+#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B
+#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F
+#endif /* GL_ARB_texture_cube_map_array */
+
+#ifndef GL_ARB_texture_env_add
+#define GL_ARB_texture_env_add 1
+#endif /* GL_ARB_texture_env_add */
+
+#ifndef GL_ARB_texture_env_combine
+#define GL_ARB_texture_env_combine 1
+#define GL_COMBINE_ARB 0x8570
+#define GL_COMBINE_RGB_ARB 0x8571
+#define GL_COMBINE_ALPHA_ARB 0x8572
+#define GL_SOURCE0_RGB_ARB 0x8580
+#define GL_SOURCE1_RGB_ARB 0x8581
+#define GL_SOURCE2_RGB_ARB 0x8582
+#define GL_SOURCE0_ALPHA_ARB 0x8588
+#define GL_SOURCE1_ALPHA_ARB 0x8589
+#define GL_SOURCE2_ALPHA_ARB 0x858A
+#define GL_OPERAND0_RGB_ARB 0x8590
+#define GL_OPERAND1_RGB_ARB 0x8591
+#define GL_OPERAND2_RGB_ARB 0x8592
+#define GL_OPERAND0_ALPHA_ARB 0x8598
+#define GL_OPERAND1_ALPHA_ARB 0x8599
+#define GL_OPERAND2_ALPHA_ARB 0x859A
+#define GL_RGB_SCALE_ARB 0x8573
+#define GL_ADD_SIGNED_ARB 0x8574
+#define GL_INTERPOLATE_ARB 0x8575
+#define GL_SUBTRACT_ARB 0x84E7
+#define GL_CONSTANT_ARB 0x8576
+#define GL_PRIMARY_COLOR_ARB 0x8577
+#define GL_PREVIOUS_ARB 0x8578
+#endif /* GL_ARB_texture_env_combine */
+
+#ifndef GL_ARB_texture_env_crossbar
+#define GL_ARB_texture_env_crossbar 1
+#endif /* GL_ARB_texture_env_crossbar */
+
+#ifndef GL_ARB_texture_env_dot3
+#define GL_ARB_texture_env_dot3 1
+#define GL_DOT3_RGB_ARB 0x86AE
+#define GL_DOT3_RGBA_ARB 0x86AF
+#endif /* GL_ARB_texture_env_dot3 */
+
+#ifndef GL_ARB_texture_float
+#define GL_ARB_texture_float 1
+#define GL_TEXTURE_RED_TYPE_ARB 0x8C10
+#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11
+#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12
+#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13
+#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15
+#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16
+#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17
+#define GL_RGBA32F_ARB 0x8814
+#define GL_RGB32F_ARB 0x8815
+#define GL_ALPHA32F_ARB 0x8816
+#define GL_INTENSITY32F_ARB 0x8817
+#define GL_LUMINANCE32F_ARB 0x8818
+#define GL_LUMINANCE_ALPHA32F_ARB 0x8819
+#define GL_RGBA16F_ARB 0x881A
+#define GL_RGB16F_ARB 0x881B
+#define GL_ALPHA16F_ARB 0x881C
+#define GL_INTENSITY16F_ARB 0x881D
+#define GL_LUMINANCE16F_ARB 0x881E
+#define GL_LUMINANCE_ALPHA16F_ARB 0x881F
+#endif /* GL_ARB_texture_float */
+
+#ifndef GL_ARB_texture_gather
+#define GL_ARB_texture_gather 1
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F
+#endif /* GL_ARB_texture_gather */
+
+#ifndef GL_ARB_texture_mirror_clamp_to_edge
+#define GL_ARB_texture_mirror_clamp_to_edge 1
+#endif /* GL_ARB_texture_mirror_clamp_to_edge */
+
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_ARB_texture_mirrored_repeat 1
+#define GL_MIRRORED_REPEAT_ARB 0x8370
+#endif /* GL_ARB_texture_mirrored_repeat */
+
+#ifndef GL_ARB_texture_multisample
+#define GL_ARB_texture_multisample 1
+#endif /* GL_ARB_texture_multisample */
+
+#ifndef GL_ARB_texture_non_power_of_two
+#define GL_ARB_texture_non_power_of_two 1
+#endif /* GL_ARB_texture_non_power_of_two */
+
+#ifndef GL_ARB_texture_query_levels
+#define GL_ARB_texture_query_levels 1
+#endif /* GL_ARB_texture_query_levels */
+
+#ifndef GL_ARB_texture_query_lod
+#define GL_ARB_texture_query_lod 1
+#endif /* GL_ARB_texture_query_lod */
+
+#ifndef GL_ARB_texture_rectangle
+#define GL_ARB_texture_rectangle 1
+#define GL_TEXTURE_RECTANGLE_ARB 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8
+#endif /* GL_ARB_texture_rectangle */
+
+#ifndef GL_ARB_texture_rg
+#define GL_ARB_texture_rg 1
+#endif /* GL_ARB_texture_rg */
+
+#ifndef GL_ARB_texture_rgb10_a2ui
+#define GL_ARB_texture_rgb10_a2ui 1
+#endif /* GL_ARB_texture_rgb10_a2ui */
+
+#ifndef GL_ARB_texture_stencil8
+#define GL_ARB_texture_stencil8 1
+#endif /* GL_ARB_texture_stencil8 */
+
+#ifndef GL_ARB_texture_storage
+#define GL_ARB_texture_storage 1
+#endif /* GL_ARB_texture_storage */
+
+#ifndef GL_ARB_texture_storage_multisample
+#define GL_ARB_texture_storage_multisample 1
+#endif /* GL_ARB_texture_storage_multisample */
+
+#ifndef GL_ARB_texture_swizzle
+#define GL_ARB_texture_swizzle 1
+#endif /* GL_ARB_texture_swizzle */
+
+#ifndef GL_ARB_texture_view
+#define GL_ARB_texture_view 1
+#endif /* GL_ARB_texture_view */
+
+#ifndef GL_ARB_timer_query
+#define GL_ARB_timer_query 1
+#endif /* GL_ARB_timer_query */
+
+#ifndef GL_ARB_transform_feedback2
+#define GL_ARB_transform_feedback2 1
+#endif /* GL_ARB_transform_feedback2 */
+
+#ifndef GL_ARB_transform_feedback3
+#define GL_ARB_transform_feedback3 1
+#endif /* GL_ARB_transform_feedback3 */
+
+#ifndef GL_ARB_transform_feedback_instanced
+#define GL_ARB_transform_feedback_instanced 1
+#endif /* GL_ARB_transform_feedback_instanced */
+
+#ifndef GL_ARB_transform_feedback_overflow_query
+#define GL_ARB_transform_feedback_overflow_query 1
+#define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC
+#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED
+#endif /* GL_ARB_transform_feedback_overflow_query */
+
+#ifndef GL_ARB_transpose_matrix
+#define GL_ARB_transpose_matrix 1
+#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m);
+GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m);
+GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m);
+GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m);
+#endif
+#endif /* GL_ARB_transpose_matrix */
+
+#ifndef GL_ARB_uniform_buffer_object
+#define GL_ARB_uniform_buffer_object 1
+#endif /* GL_ARB_uniform_buffer_object */
+
+#ifndef GL_ARB_vertex_array_bgra
+#define GL_ARB_vertex_array_bgra 1
+#endif /* GL_ARB_vertex_array_bgra */
+
+#ifndef GL_ARB_vertex_array_object
+#define GL_ARB_vertex_array_object 1
+#endif /* GL_ARB_vertex_array_object */
+
+#ifndef GL_ARB_vertex_attrib_64bit
+#define GL_ARB_vertex_attrib_64bit 1
+#endif /* GL_ARB_vertex_attrib_64bit */
+
+#ifndef GL_ARB_vertex_attrib_binding
+#define GL_ARB_vertex_attrib_binding 1
+#endif /* GL_ARB_vertex_attrib_binding */
+
+#ifndef GL_ARB_vertex_blend
+#define GL_ARB_vertex_blend 1
+#define GL_MAX_VERTEX_UNITS_ARB 0x86A4
+#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5
+#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6
+#define GL_VERTEX_BLEND_ARB 0x86A7
+#define GL_CURRENT_WEIGHT_ARB 0x86A8
+#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9
+#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA
+#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB
+#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC
+#define GL_WEIGHT_ARRAY_ARB 0x86AD
+#define GL_MODELVIEW0_ARB 0x1700
+#define GL_MODELVIEW1_ARB 0x850A
+#define GL_MODELVIEW2_ARB 0x8722
+#define GL_MODELVIEW3_ARB 0x8723
+#define GL_MODELVIEW4_ARB 0x8724
+#define GL_MODELVIEW5_ARB 0x8725
+#define GL_MODELVIEW6_ARB 0x8726
+#define GL_MODELVIEW7_ARB 0x8727
+#define GL_MODELVIEW8_ARB 0x8728
+#define GL_MODELVIEW9_ARB 0x8729
+#define GL_MODELVIEW10_ARB 0x872A
+#define GL_MODELVIEW11_ARB 0x872B
+#define GL_MODELVIEW12_ARB 0x872C
+#define GL_MODELVIEW13_ARB 0x872D
+#define GL_MODELVIEW14_ARB 0x872E
+#define GL_MODELVIEW15_ARB 0x872F
+#define GL_MODELVIEW16_ARB 0x8730
+#define GL_MODELVIEW17_ARB 0x8731
+#define GL_MODELVIEW18_ARB 0x8732
+#define GL_MODELVIEW19_ARB 0x8733
+#define GL_MODELVIEW20_ARB 0x8734
+#define GL_MODELVIEW21_ARB 0x8735
+#define GL_MODELVIEW22_ARB 0x8736
+#define GL_MODELVIEW23_ARB 0x8737
+#define GL_MODELVIEW24_ARB 0x8738
+#define GL_MODELVIEW25_ARB 0x8739
+#define GL_MODELVIEW26_ARB 0x873A
+#define GL_MODELVIEW27_ARB 0x873B
+#define GL_MODELVIEW28_ARB 0x873C
+#define GL_MODELVIEW29_ARB 0x873D
+#define GL_MODELVIEW30_ARB 0x873E
+#define GL_MODELVIEW31_ARB 0x873F
+typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights);
+typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights);
+typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights);
+typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights);
+typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights);
+typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights);
+GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights);
+GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights);
+GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights);
+GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights);
+GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights);
+GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights);
+GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights);
+GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glVertexBlendARB (GLint count);
+#endif
+#endif /* GL_ARB_vertex_blend */
+
+#ifndef GL_ARB_vertex_buffer_object
+#define GL_ARB_vertex_buffer_object 1
+typedef ptrdiff_t GLsizeiptrARB;
+typedef ptrdiff_t GLintptrARB;
+#define GL_BUFFER_SIZE_ARB 0x8764
+#define GL_BUFFER_USAGE_ARB 0x8765
+#define GL_ARRAY_BUFFER_ARB 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893
+#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
+#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F
+#define GL_READ_ONLY_ARB 0x88B8
+#define GL_WRITE_ONLY_ARB 0x88B9
+#define GL_READ_WRITE_ARB 0x88BA
+#define GL_BUFFER_ACCESS_ARB 0x88BB
+#define GL_BUFFER_MAPPED_ARB 0x88BC
+#define GL_BUFFER_MAP_POINTER_ARB 0x88BD
+#define GL_STREAM_DRAW_ARB 0x88E0
+#define GL_STREAM_READ_ARB 0x88E1
+#define GL_STREAM_COPY_ARB 0x88E2
+#define GL_STATIC_DRAW_ARB 0x88E4
+#define GL_STATIC_READ_ARB 0x88E5
+#define GL_STATIC_COPY_ARB 0x88E6
+#define GL_DYNAMIC_DRAW_ARB 0x88E8
+#define GL_DYNAMIC_READ_ARB 0x88E9
+#define GL_DYNAMIC_COPY_ARB 0x88EA
+typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
+typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
+typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage);
+typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data);
+typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data);
+typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer);
+GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers);
+GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers);
+GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer);
+GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage);
+GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data);
+GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data);
+GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access);
+GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target);
+GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params);
+#endif
+#endif /* GL_ARB_vertex_buffer_object */
+
+#ifndef GL_ARB_vertex_program
+#define GL_ARB_vertex_program 1
+#define GL_COLOR_SUM_ARB 0x8458
+#define GL_VERTEX_PROGRAM_ARB 0x8620
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625
+#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626
+#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
+#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A
+#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0
+#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1
+#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2
+#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x);
+GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x);
+GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index);
+GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index);
+GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer);
+#endif
+#endif /* GL_ARB_vertex_program */
+
+#ifndef GL_ARB_vertex_shader
+#define GL_ARB_vertex_shader 1
+#define GL_VERTEX_SHADER_ARB 0x8B31
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A
+#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D
+#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89
+#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A
+typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name);
+GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name);
+#endif
+#endif /* GL_ARB_vertex_shader */
+
+#ifndef GL_ARB_vertex_type_10f_11f_11f_rev
+#define GL_ARB_vertex_type_10f_11f_11f_rev 1
+#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */
+
+#ifndef GL_ARB_vertex_type_2_10_10_10_rev
+#define GL_ARB_vertex_type_2_10_10_10_rev 1
+#endif /* GL_ARB_vertex_type_2_10_10_10_rev */
+
+#ifndef GL_ARB_viewport_array
+#define GL_ARB_viewport_array 1
+#endif /* GL_ARB_viewport_array */
+
+#ifndef GL_ARB_window_pos
+#define GL_ARB_window_pos 1
+typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y);
+GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y);
+GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y);
+GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v);
+GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y);
+GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v);
+GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v);
+GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v);
+#endif
+#endif /* GL_ARB_window_pos */
+
+#ifndef GL_KHR_blend_equation_advanced
+#define GL_KHR_blend_equation_advanced 1
+#define GL_MULTIPLY_KHR 0x9294
+#define GL_SCREEN_KHR 0x9295
+#define GL_OVERLAY_KHR 0x9296
+#define GL_DARKEN_KHR 0x9297
+#define GL_LIGHTEN_KHR 0x9298
+#define GL_COLORDODGE_KHR 0x9299
+#define GL_COLORBURN_KHR 0x929A
+#define GL_HARDLIGHT_KHR 0x929B
+#define GL_SOFTLIGHT_KHR 0x929C
+#define GL_DIFFERENCE_KHR 0x929E
+#define GL_EXCLUSION_KHR 0x92A0
+#define GL_HSL_HUE_KHR 0x92AD
+#define GL_HSL_SATURATION_KHR 0x92AE
+#define GL_HSL_COLOR_KHR 0x92AF
+#define GL_HSL_LUMINOSITY_KHR 0x92B0
+typedef void (APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendBarrierKHR (void);
+#endif
+#endif /* GL_KHR_blend_equation_advanced */
+
+#ifndef GL_KHR_blend_equation_advanced_coherent
+#define GL_KHR_blend_equation_advanced_coherent 1
+#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285
+#endif /* GL_KHR_blend_equation_advanced_coherent */
+
+#ifndef GL_KHR_context_flush_control
+#define GL_KHR_context_flush_control 1
+#endif /* GL_KHR_context_flush_control */
+
+#ifndef GL_KHR_debug
+#define GL_KHR_debug 1
+#endif /* GL_KHR_debug */
+
+#ifndef GL_KHR_robust_buffer_access_behavior
+#define GL_KHR_robust_buffer_access_behavior 1
+#endif /* GL_KHR_robust_buffer_access_behavior */
+
+#ifndef GL_KHR_robustness
+#define GL_KHR_robustness 1
+#define GL_CONTEXT_ROBUST_ACCESS 0x90F3
+#endif /* GL_KHR_robustness */
+
+#ifndef GL_KHR_texture_compression_astc_hdr
+#define GL_KHR_texture_compression_astc_hdr 1
+#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0
+#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1
+#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2
+#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3
+#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4
+#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5
+#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6
+#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7
+#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8
+#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9
+#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA
+#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB
+#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC
+#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD
+#endif /* GL_KHR_texture_compression_astc_hdr */
+
+#ifndef GL_KHR_texture_compression_astc_ldr
+#define GL_KHR_texture_compression_astc_ldr 1
+#endif /* GL_KHR_texture_compression_astc_ldr */
+
+#ifndef GL_OES_byte_coordinates
+#define GL_OES_byte_coordinates 1
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s);
+typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t);
+typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r);
+typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x, GLbyte y);
+typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y, GLbyte z);
+typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z, GLbyte w);
+typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s);
+GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t);
+GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r);
+GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord1bOES (GLbyte s);
+GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t);
+GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r);
+GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glVertex2bOES (GLbyte x, GLbyte y);
+GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y, GLbyte z);
+GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z, GLbyte w);
+GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords);
+#endif
+#endif /* GL_OES_byte_coordinates */
+
+#ifndef GL_OES_compressed_paletted_texture
+#define GL_OES_compressed_paletted_texture 1
+#define GL_PALETTE4_RGB8_OES 0x8B90
+#define GL_PALETTE4_RGBA8_OES 0x8B91
+#define GL_PALETTE4_R5_G6_B5_OES 0x8B92
+#define GL_PALETTE4_RGBA4_OES 0x8B93
+#define GL_PALETTE4_RGB5_A1_OES 0x8B94
+#define GL_PALETTE8_RGB8_OES 0x8B95
+#define GL_PALETTE8_RGBA8_OES 0x8B96
+#define GL_PALETTE8_R5_G6_B5_OES 0x8B97
+#define GL_PALETTE8_RGBA4_OES 0x8B98
+#define GL_PALETTE8_RGB5_A1_OES 0x8B99
+#endif /* GL_OES_compressed_paletted_texture */
+
+#ifndef GL_OES_fixed_point
+#define GL_OES_fixed_point 1
+typedef GLint GLfixed;
+#define GL_FIXED_OES 0x140C
+typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref);
+typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth);
+typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation);
+typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f);
+typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param);
+typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation);
+typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param);
+typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width);
+typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param);
+typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz);
+typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size);
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units);
+typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEOESPROC) (GLfixed value, GLboolean invert);
+typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value);
+typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap);
+typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue);
+typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components);
+typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u);
+typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v);
+typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v);
+typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values);
+typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component);
+typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points);
+typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points);
+typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2);
+typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token);
+typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values);
+typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor);
+typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities);
+typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y);
+typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w);
+typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2);
+typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2);
+typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s);
+typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t);
+typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r);
+typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x);
+typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y);
+typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref);
+GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glClearDepthxOES (GLfixed depth);
+GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation);
+GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f);
+GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param);
+GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation);
+GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param);
+GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glLineWidthxOES (GLfixed width);
+GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param);
+GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz);
+GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glPointSizexOES (GLfixed size);
+GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units);
+GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glSampleCoverageOES (GLfixed value, GLboolean invert);
+GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value);
+GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap);
+GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue);
+GLAPI void APIENTRY glColor3xvOES (const GLfixed *components);
+GLAPI void APIENTRY glColor4xvOES (const GLfixed *components);
+GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u);
+GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v);
+GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer);
+GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v);
+GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values);
+GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glIndexxOES (GLfixed component);
+GLAPI void APIENTRY glIndexxvOES (const GLfixed *component);
+GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points);
+GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points);
+GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2);
+GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2);
+GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s);
+GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t);
+GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r);
+GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glPassThroughxOES (GLfixed token);
+GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values);
+GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor);
+GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities);
+GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y);
+GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w);
+GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2);
+GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2);
+GLAPI void APIENTRY glTexCoord1xOES (GLfixed s);
+GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t);
+GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r);
+GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glVertex2xOES (GLfixed x);
+GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y);
+GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords);
+#endif
+#endif /* GL_OES_fixed_point */
+
+#ifndef GL_OES_query_matrix
+#define GL_OES_query_matrix 1
+typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent);
+#endif
+#endif /* GL_OES_query_matrix */
+
+#ifndef GL_OES_read_format
+#define GL_OES_read_format 1
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B
+#endif /* GL_OES_read_format */
+
+#ifndef GL_OES_single_precision
+#define GL_OES_single_precision 1
+typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth);
+typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation);
+typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f);
+typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation);
+typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClearDepthfOES (GLclampf depth);
+GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation);
+GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f);
+GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation);
+GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+#endif
+#endif /* GL_OES_single_precision */
+
+#ifndef GL_3DFX_multisample
+#define GL_3DFX_multisample 1
+#define GL_MULTISAMPLE_3DFX 0x86B2
+#define GL_SAMPLE_BUFFERS_3DFX 0x86B3
+#define GL_SAMPLES_3DFX 0x86B4
+#define GL_MULTISAMPLE_BIT_3DFX 0x20000000
+#endif /* GL_3DFX_multisample */
+
+#ifndef GL_3DFX_tbuffer
+#define GL_3DFX_tbuffer 1
+typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask);
+#endif
+#endif /* GL_3DFX_tbuffer */
+
+#ifndef GL_3DFX_texture_compression_FXT1
+#define GL_3DFX_texture_compression_FXT1 1
+#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0
+#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1
+#endif /* GL_3DFX_texture_compression_FXT1 */
+
+#ifndef GL_AMD_blend_minmax_factor
+#define GL_AMD_blend_minmax_factor 1
+#define GL_FACTOR_MIN_AMD 0x901C
+#define GL_FACTOR_MAX_AMD 0x901D
+#endif /* GL_AMD_blend_minmax_factor */
+
+#ifndef GL_AMD_conservative_depth
+#define GL_AMD_conservative_depth 1
+#endif /* GL_AMD_conservative_depth */
+
+#ifndef GL_AMD_debug_output
+#define GL_AMD_debug_output 1
+typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam);
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144
+#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145
+#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147
+#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148
+#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149
+#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A
+#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B
+#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C
+#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D
+#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E
+#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F
+#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam);
+typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf);
+GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam);
+GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message);
+#endif
+#endif /* GL_AMD_debug_output */
+
+#ifndef GL_AMD_depth_clamp_separate
+#define GL_AMD_depth_clamp_separate 1
+#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E
+#define GL_DEPTH_CLAMP_FAR_AMD 0x901F
+#endif /* GL_AMD_depth_clamp_separate */
+
+#ifndef GL_AMD_draw_buffers_blend
+#define GL_AMD_draw_buffers_blend 1
+typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode);
+GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+#endif
+#endif /* GL_AMD_draw_buffers_blend */
+
+#ifndef GL_AMD_gcn_shader
+#define GL_AMD_gcn_shader 1
+#endif /* GL_AMD_gcn_shader */
+
+#ifndef GL_AMD_gpu_shader_int64
+#define GL_AMD_gpu_shader_int64 1
+typedef int64_t GLint64EXT;
+#define GL_INT64_NV 0x140E
+#define GL_UNSIGNED_INT64_NV 0x140F
+#define GL_INT8_NV 0x8FE0
+#define GL_INT8_VEC2_NV 0x8FE1
+#define GL_INT8_VEC3_NV 0x8FE2
+#define GL_INT8_VEC4_NV 0x8FE3
+#define GL_INT16_NV 0x8FE4
+#define GL_INT16_VEC2_NV 0x8FE5
+#define GL_INT16_VEC3_NV 0x8FE6
+#define GL_INT16_VEC4_NV 0x8FE7
+#define GL_INT64_VEC2_NV 0x8FE9
+#define GL_INT64_VEC3_NV 0x8FEA
+#define GL_INT64_VEC4_NV 0x8FEB
+#define GL_UNSIGNED_INT8_NV 0x8FEC
+#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED
+#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE
+#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF
+#define GL_UNSIGNED_INT16_NV 0x8FF0
+#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1
+#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2
+#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3
+#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5
+#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6
+#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7
+#define GL_FLOAT16_NV 0x8FF8
+#define GL_FLOAT16_VEC2_NV 0x8FF9
+#define GL_FLOAT16_VEC3_NV 0x8FFA
+#define GL_FLOAT16_VEC4_NV 0x8FFB
+typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x);
+typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x);
+GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x);
+GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params);
+GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params);
+GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x);
+GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x);
+GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#endif
+#endif /* GL_AMD_gpu_shader_int64 */
+
+#ifndef GL_AMD_interleaved_elements
+#define GL_AMD_interleaved_elements 1
+#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4
+#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param);
+#endif
+#endif /* GL_AMD_interleaved_elements */
+
+#ifndef GL_AMD_multi_draw_indirect
+#define GL_AMD_multi_draw_indirect 1
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride);
+#endif
+#endif /* GL_AMD_multi_draw_indirect */
+
+#ifndef GL_AMD_name_gen_delete
+#define GL_AMD_name_gen_delete 1
+#define GL_DATA_BUFFER_AMD 0x9151
+#define GL_PERFORMANCE_MONITOR_AMD 0x9152
+#define GL_QUERY_OBJECT_AMD 0x9153
+#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154
+#define GL_SAMPLER_OBJECT_AMD 0x9155
+typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names);
+typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names);
+typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names);
+GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names);
+GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name);
+#endif
+#endif /* GL_AMD_name_gen_delete */
+
+#ifndef GL_AMD_occlusion_query_event
+#define GL_AMD_occlusion_query_event 1
+#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F
+#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001
+#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002
+#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004
+#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008
+#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF
+typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param);
+#endif
+#endif /* GL_AMD_occlusion_query_event */
+
+#ifndef GL_AMD_performance_monitor
+#define GL_AMD_performance_monitor 1
+#define GL_COUNTER_TYPE_AMD 0x8BC0
+#define GL_COUNTER_RANGE_AMD 0x8BC1
+#define GL_UNSIGNED_INT64_AMD 0x8BC2
+#define GL_PERCENTAGE_AMD 0x8BC3
+#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4
+#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5
+#define GL_PERFMON_RESULT_AMD 0x8BC6
+typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
+typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data);
+typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
+typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
+typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);
+typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor);
+typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
+GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
+GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
+GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
+GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data);
+GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors);
+GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors);
+GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);
+GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor);
+GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor);
+GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
+#endif
+#endif /* GL_AMD_performance_monitor */
+
+#ifndef GL_AMD_pinned_memory
+#define GL_AMD_pinned_memory 1
+#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160
+#endif /* GL_AMD_pinned_memory */
+
+#ifndef GL_AMD_query_buffer_object
+#define GL_AMD_query_buffer_object 1
+#define GL_QUERY_BUFFER_AMD 0x9192
+#define GL_QUERY_BUFFER_BINDING_AMD 0x9193
+#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194
+#endif /* GL_AMD_query_buffer_object */
+
+#ifndef GL_AMD_sample_positions
+#define GL_AMD_sample_positions 1
+#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F
+typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val);
+#endif
+#endif /* GL_AMD_sample_positions */
+
+#ifndef GL_AMD_seamless_cubemap_per_texture
+#define GL_AMD_seamless_cubemap_per_texture 1
+#endif /* GL_AMD_seamless_cubemap_per_texture */
+
+#ifndef GL_AMD_shader_atomic_counter_ops
+#define GL_AMD_shader_atomic_counter_ops 1
+#endif /* GL_AMD_shader_atomic_counter_ops */
+
+#ifndef GL_AMD_shader_stencil_export
+#define GL_AMD_shader_stencil_export 1
+#endif /* GL_AMD_shader_stencil_export */
+
+#ifndef GL_AMD_shader_trinary_minmax
+#define GL_AMD_shader_trinary_minmax 1
+#endif /* GL_AMD_shader_trinary_minmax */
+
+#ifndef GL_AMD_sparse_texture
+#define GL_AMD_sparse_texture 1
+#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195
+#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196
+#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197
+#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198
+#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199
+#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A
+#define GL_MIN_SPARSE_LEVEL_AMD 0x919B
+#define GL_MIN_LOD_WARNING_AMD 0x919C
+#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001
+typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+#endif
+#endif /* GL_AMD_sparse_texture */
+
+#ifndef GL_AMD_stencil_operation_extended
+#define GL_AMD_stencil_operation_extended 1
+#define GL_SET_AMD 0x874A
+#define GL_REPLACE_VALUE_AMD 0x874B
+#define GL_STENCIL_OP_VALUE_AMD 0x874C
+#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D
+typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value);
+#endif
+#endif /* GL_AMD_stencil_operation_extended */
+
+#ifndef GL_AMD_texture_texture4
+#define GL_AMD_texture_texture4 1
+#endif /* GL_AMD_texture_texture4 */
+
+#ifndef GL_AMD_transform_feedback3_lines_triangles
+#define GL_AMD_transform_feedback3_lines_triangles 1
+#endif /* GL_AMD_transform_feedback3_lines_triangles */
+
+#ifndef GL_AMD_transform_feedback4
+#define GL_AMD_transform_feedback4 1
+#define GL_STREAM_RASTERIZATION_AMD 0x91A0
+#endif /* GL_AMD_transform_feedback4 */
+
+#ifndef GL_AMD_vertex_shader_layer
+#define GL_AMD_vertex_shader_layer 1
+#endif /* GL_AMD_vertex_shader_layer */
+
+#ifndef GL_AMD_vertex_shader_tessellator
+#define GL_AMD_vertex_shader_tessellator 1
+#define GL_SAMPLER_BUFFER_AMD 0x9001
+#define GL_INT_SAMPLER_BUFFER_AMD 0x9002
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003
+#define GL_TESSELLATION_MODE_AMD 0x9004
+#define GL_TESSELLATION_FACTOR_AMD 0x9005
+#define GL_DISCRETE_AMD 0x9006
+#define GL_CONTINUOUS_AMD 0x9007
+typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor);
+typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor);
+GLAPI void APIENTRY glTessellationModeAMD (GLenum mode);
+#endif
+#endif /* GL_AMD_vertex_shader_tessellator */
+
+#ifndef GL_AMD_vertex_shader_viewport_index
+#define GL_AMD_vertex_shader_viewport_index 1
+#endif /* GL_AMD_vertex_shader_viewport_index */
+
+#ifndef GL_APPLE_aux_depth_stencil
+#define GL_APPLE_aux_depth_stencil 1
+#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14
+#endif /* GL_APPLE_aux_depth_stencil */
+
+#ifndef GL_APPLE_client_storage
+#define GL_APPLE_client_storage 1
+#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2
+#endif /* GL_APPLE_client_storage */
+
+#ifndef GL_APPLE_element_array
+#define GL_APPLE_element_array 1
+#define GL_ELEMENT_ARRAY_APPLE 0x8A0C
+#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D
+#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E
+typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer);
+typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer);
+GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count);
+GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
+GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);
+#endif
+#endif /* GL_APPLE_element_array */
+
+#ifndef GL_APPLE_fence
+#define GL_APPLE_fence 1
+#define GL_DRAW_PIXELS_APPLE 0x8A0A
+#define GL_FENCE_APPLE 0x8A0B
+typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences);
+typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences);
+typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name);
+typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences);
+GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences);
+GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence);
+GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence);
+GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence);
+GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence);
+GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name);
+GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name);
+#endif
+#endif /* GL_APPLE_fence */
+
+#ifndef GL_APPLE_float_pixels
+#define GL_APPLE_float_pixels 1
+#define GL_HALF_APPLE 0x140B
+#define GL_RGBA_FLOAT32_APPLE 0x8814
+#define GL_RGB_FLOAT32_APPLE 0x8815
+#define GL_ALPHA_FLOAT32_APPLE 0x8816
+#define GL_INTENSITY_FLOAT32_APPLE 0x8817
+#define GL_LUMINANCE_FLOAT32_APPLE 0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819
+#define GL_RGBA_FLOAT16_APPLE 0x881A
+#define GL_RGB_FLOAT16_APPLE 0x881B
+#define GL_ALPHA_FLOAT16_APPLE 0x881C
+#define GL_INTENSITY_FLOAT16_APPLE 0x881D
+#define GL_LUMINANCE_FLOAT16_APPLE 0x881E
+#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F
+#define GL_COLOR_FLOAT_APPLE 0x8A0F
+#endif /* GL_APPLE_float_pixels */
+
+#ifndef GL_APPLE_flush_buffer_range
+#define GL_APPLE_flush_buffer_range 1
+#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12
+#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13
+typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size);
+#endif
+#endif /* GL_APPLE_flush_buffer_range */
+
+#ifndef GL_APPLE_object_purgeable
+#define GL_APPLE_object_purgeable 1
+#define GL_BUFFER_OBJECT_APPLE 0x85B3
+#define GL_RELEASED_APPLE 0x8A19
+#define GL_VOLATILE_APPLE 0x8A1A
+#define GL_RETAINED_APPLE 0x8A1B
+#define GL_UNDEFINED_APPLE 0x8A1C
+#define GL_PURGEABLE_APPLE 0x8A1D
+typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option);
+typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option);
+typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option);
+GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option);
+GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params);
+#endif
+#endif /* GL_APPLE_object_purgeable */
+
+#ifndef GL_APPLE_rgb_422
+#define GL_APPLE_rgb_422 1
+#define GL_RGB_422_APPLE 0x8A1F
+#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB
+#define GL_RGB_RAW_422_APPLE 0x8A51
+#endif /* GL_APPLE_rgb_422 */
+
+#ifndef GL_APPLE_row_bytes
+#define GL_APPLE_row_bytes 1
+#define GL_PACK_ROW_BYTES_APPLE 0x8A15
+#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16
+#endif /* GL_APPLE_row_bytes */
+
+#ifndef GL_APPLE_specular_vector
+#define GL_APPLE_specular_vector 1
+#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0
+#endif /* GL_APPLE_specular_vector */
+
+#ifndef GL_APPLE_texture_range
+#define GL_APPLE_texture_range 1
+#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7
+#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8
+#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC
+#define GL_STORAGE_PRIVATE_APPLE 0x85BD
+#define GL_STORAGE_CACHED_APPLE 0x85BE
+#define GL_STORAGE_SHARED_APPLE 0x85BF
+typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer);
+GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params);
+#endif
+#endif /* GL_APPLE_texture_range */
+
+#ifndef GL_APPLE_transform_hint
+#define GL_APPLE_transform_hint 1
+#define GL_TRANSFORM_HINT_APPLE 0x85B1
+#endif /* GL_APPLE_transform_hint */
+
+#ifndef GL_APPLE_vertex_array_object
+#define GL_APPLE_vertex_array_object 1
+#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5
+typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array);
+typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays);
+typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array);
+GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays);
+GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays);
+GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array);
+#endif
+#endif /* GL_APPLE_vertex_array_object */
+
+#ifndef GL_APPLE_vertex_array_range
+#define GL_APPLE_vertex_array_range 1
+#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E
+#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F
+#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521
+#define GL_STORAGE_CLIENT_APPLE 0x85B4
+typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer);
+typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer);
+typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer);
+GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer);
+GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param);
+#endif
+#endif /* GL_APPLE_vertex_array_range */
+
+#ifndef GL_APPLE_vertex_program_evaluators
+#define GL_APPLE_vertex_program_evaluators 1
+#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00
+#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01
+#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02
+#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03
+#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04
+#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05
+#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06
+#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07
+#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08
+#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname);
+typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname);
+GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname);
+GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname);
+GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
+GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
+GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
+GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
+#endif
+#endif /* GL_APPLE_vertex_program_evaluators */
+
+#ifndef GL_APPLE_ycbcr_422
+#define GL_APPLE_ycbcr_422 1
+#define GL_YCBCR_422_APPLE 0x85B9
+#endif /* GL_APPLE_ycbcr_422 */
+
+#ifndef GL_ATI_draw_buffers
+#define GL_ATI_draw_buffers 1
+#define GL_MAX_DRAW_BUFFERS_ATI 0x8824
+#define GL_DRAW_BUFFER0_ATI 0x8825
+#define GL_DRAW_BUFFER1_ATI 0x8826
+#define GL_DRAW_BUFFER2_ATI 0x8827
+#define GL_DRAW_BUFFER3_ATI 0x8828
+#define GL_DRAW_BUFFER4_ATI 0x8829
+#define GL_DRAW_BUFFER5_ATI 0x882A
+#define GL_DRAW_BUFFER6_ATI 0x882B
+#define GL_DRAW_BUFFER7_ATI 0x882C
+#define GL_DRAW_BUFFER8_ATI 0x882D
+#define GL_DRAW_BUFFER9_ATI 0x882E
+#define GL_DRAW_BUFFER10_ATI 0x882F
+#define GL_DRAW_BUFFER11_ATI 0x8830
+#define GL_DRAW_BUFFER12_ATI 0x8831
+#define GL_DRAW_BUFFER13_ATI 0x8832
+#define GL_DRAW_BUFFER14_ATI 0x8833
+#define GL_DRAW_BUFFER15_ATI 0x8834
+typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs);
+#endif
+#endif /* GL_ATI_draw_buffers */
+
+#ifndef GL_ATI_element_array
+#define GL_ATI_element_array 1
+#define GL_ELEMENT_ARRAY_ATI 0x8768
+#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769
+#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A
+typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer);
+typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer);
+GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count);
+GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count);
+#endif
+#endif /* GL_ATI_element_array */
+
+#ifndef GL_ATI_envmap_bumpmap
+#define GL_ATI_envmap_bumpmap 1
+#define GL_BUMP_ROT_MATRIX_ATI 0x8775
+#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776
+#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777
+#define GL_BUMP_TEX_UNITS_ATI 0x8778
+#define GL_DUDV_ATI 0x8779
+#define GL_DU8DV8_ATI 0x877A
+#define GL_BUMP_ENVMAP_ATI 0x877B
+#define GL_BUMP_TARGET_ATI 0x877C
+typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param);
+typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param);
+GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param);
+GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param);
+#endif
+#endif /* GL_ATI_envmap_bumpmap */
+
+#ifndef GL_ATI_fragment_shader
+#define GL_ATI_fragment_shader 1
+#define GL_FRAGMENT_SHADER_ATI 0x8920
+#define GL_REG_0_ATI 0x8921
+#define GL_REG_1_ATI 0x8922
+#define GL_REG_2_ATI 0x8923
+#define GL_REG_3_ATI 0x8924
+#define GL_REG_4_ATI 0x8925
+#define GL_REG_5_ATI 0x8926
+#define GL_REG_6_ATI 0x8927
+#define GL_REG_7_ATI 0x8928
+#define GL_REG_8_ATI 0x8929
+#define GL_REG_9_ATI 0x892A
+#define GL_REG_10_ATI 0x892B
+#define GL_REG_11_ATI 0x892C
+#define GL_REG_12_ATI 0x892D
+#define GL_REG_13_ATI 0x892E
+#define GL_REG_14_ATI 0x892F
+#define GL_REG_15_ATI 0x8930
+#define GL_REG_16_ATI 0x8931
+#define GL_REG_17_ATI 0x8932
+#define GL_REG_18_ATI 0x8933
+#define GL_REG_19_ATI 0x8934
+#define GL_REG_20_ATI 0x8935
+#define GL_REG_21_ATI 0x8936
+#define GL_REG_22_ATI 0x8937
+#define GL_REG_23_ATI 0x8938
+#define GL_REG_24_ATI 0x8939
+#define GL_REG_25_ATI 0x893A
+#define GL_REG_26_ATI 0x893B
+#define GL_REG_27_ATI 0x893C
+#define GL_REG_28_ATI 0x893D
+#define GL_REG_29_ATI 0x893E
+#define GL_REG_30_ATI 0x893F
+#define GL_REG_31_ATI 0x8940
+#define GL_CON_0_ATI 0x8941
+#define GL_CON_1_ATI 0x8942
+#define GL_CON_2_ATI 0x8943
+#define GL_CON_3_ATI 0x8944
+#define GL_CON_4_ATI 0x8945
+#define GL_CON_5_ATI 0x8946
+#define GL_CON_6_ATI 0x8947
+#define GL_CON_7_ATI 0x8948
+#define GL_CON_8_ATI 0x8949
+#define GL_CON_9_ATI 0x894A
+#define GL_CON_10_ATI 0x894B
+#define GL_CON_11_ATI 0x894C
+#define GL_CON_12_ATI 0x894D
+#define GL_CON_13_ATI 0x894E
+#define GL_CON_14_ATI 0x894F
+#define GL_CON_15_ATI 0x8950
+#define GL_CON_16_ATI 0x8951
+#define GL_CON_17_ATI 0x8952
+#define GL_CON_18_ATI 0x8953
+#define GL_CON_19_ATI 0x8954
+#define GL_CON_20_ATI 0x8955
+#define GL_CON_21_ATI 0x8956
+#define GL_CON_22_ATI 0x8957
+#define GL_CON_23_ATI 0x8958
+#define GL_CON_24_ATI 0x8959
+#define GL_CON_25_ATI 0x895A
+#define GL_CON_26_ATI 0x895B
+#define GL_CON_27_ATI 0x895C
+#define GL_CON_28_ATI 0x895D
+#define GL_CON_29_ATI 0x895E
+#define GL_CON_30_ATI 0x895F
+#define GL_CON_31_ATI 0x8960
+#define GL_MOV_ATI 0x8961
+#define GL_ADD_ATI 0x8963
+#define GL_MUL_ATI 0x8964
+#define GL_SUB_ATI 0x8965
+#define GL_DOT3_ATI 0x8966
+#define GL_DOT4_ATI 0x8967
+#define GL_MAD_ATI 0x8968
+#define GL_LERP_ATI 0x8969
+#define GL_CND_ATI 0x896A
+#define GL_CND0_ATI 0x896B
+#define GL_DOT2_ADD_ATI 0x896C
+#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D
+#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E
+#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F
+#define GL_NUM_PASSES_ATI 0x8970
+#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971
+#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972
+#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973
+#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974
+#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975
+#define GL_SWIZZLE_STR_ATI 0x8976
+#define GL_SWIZZLE_STQ_ATI 0x8977
+#define GL_SWIZZLE_STR_DR_ATI 0x8978
+#define GL_SWIZZLE_STQ_DQ_ATI 0x8979
+#define GL_SWIZZLE_STRQ_ATI 0x897A
+#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B
+#define GL_RED_BIT_ATI 0x00000001
+#define GL_GREEN_BIT_ATI 0x00000002
+#define GL_BLUE_BIT_ATI 0x00000004
+#define GL_2X_BIT_ATI 0x00000001
+#define GL_4X_BIT_ATI 0x00000002
+#define GL_8X_BIT_ATI 0x00000004
+#define GL_HALF_BIT_ATI 0x00000008
+#define GL_QUARTER_BIT_ATI 0x00000010
+#define GL_EIGHTH_BIT_ATI 0x00000020
+#define GL_SATURATE_BIT_ATI 0x00000040
+#define GL_COMP_BIT_ATI 0x00000002
+#define GL_NEGATE_BIT_ATI 0x00000004
+#define GL_BIAS_BIT_ATI 0x00000008
+typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range);
+typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void);
+typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void);
+typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle);
+typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range);
+GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id);
+GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id);
+GLAPI void APIENTRY glBeginFragmentShaderATI (void);
+GLAPI void APIENTRY glEndFragmentShaderATI (void);
+GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle);
+GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle);
+GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value);
+#endif
+#endif /* GL_ATI_fragment_shader */
+
+#ifndef GL_ATI_map_object_buffer
+#define GL_ATI_map_object_buffer 1
+typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer);
+GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer);
+#endif
+#endif /* GL_ATI_map_object_buffer */
+
+#ifndef GL_ATI_meminfo
+#define GL_ATI_meminfo 1
+#define GL_VBO_FREE_MEMORY_ATI 0x87FB
+#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC
+#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD
+#endif /* GL_ATI_meminfo */
+
+#ifndef GL_ATI_pixel_format_float
+#define GL_ATI_pixel_format_float 1
+#define GL_RGBA_FLOAT_MODE_ATI 0x8820
+#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835
+#endif /* GL_ATI_pixel_format_float */
+
+#ifndef GL_ATI_pn_triangles
+#define GL_ATI_pn_triangles 1
+#define GL_PN_TRIANGLES_ATI 0x87F0
+#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1
+#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2
+#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3
+#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4
+#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5
+#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6
+#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7
+#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8
+typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param);
+GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param);
+#endif
+#endif /* GL_ATI_pn_triangles */
+
+#ifndef GL_ATI_separate_stencil
+#define GL_ATI_separate_stencil 1
+#define GL_STENCIL_BACK_FUNC_ATI 0x8800
+#define GL_STENCIL_BACK_FAIL_ATI 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803
+typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+#endif
+#endif /* GL_ATI_separate_stencil */
+
+#ifndef GL_ATI_text_fragment_shader
+#define GL_ATI_text_fragment_shader 1
+#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200
+#endif /* GL_ATI_text_fragment_shader */
+
+#ifndef GL_ATI_texture_env_combine3
+#define GL_ATI_texture_env_combine3 1
+#define GL_MODULATE_ADD_ATI 0x8744
+#define GL_MODULATE_SIGNED_ADD_ATI 0x8745
+#define GL_MODULATE_SUBTRACT_ATI 0x8746
+#endif /* GL_ATI_texture_env_combine3 */
+
+#ifndef GL_ATI_texture_float
+#define GL_ATI_texture_float 1
+#define GL_RGBA_FLOAT32_ATI 0x8814
+#define GL_RGB_FLOAT32_ATI 0x8815
+#define GL_ALPHA_FLOAT32_ATI 0x8816
+#define GL_INTENSITY_FLOAT32_ATI 0x8817
+#define GL_LUMINANCE_FLOAT32_ATI 0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819
+#define GL_RGBA_FLOAT16_ATI 0x881A
+#define GL_RGB_FLOAT16_ATI 0x881B
+#define GL_ALPHA_FLOAT16_ATI 0x881C
+#define GL_INTENSITY_FLOAT16_ATI 0x881D
+#define GL_LUMINANCE_FLOAT16_ATI 0x881E
+#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F
+#endif /* GL_ATI_texture_float */
+
+#ifndef GL_ATI_texture_mirror_once
+#define GL_ATI_texture_mirror_once 1
+#define GL_MIRROR_CLAMP_ATI 0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743
+#endif /* GL_ATI_texture_mirror_once */
+
+#ifndef GL_ATI_vertex_array_object
+#define GL_ATI_vertex_array_object 1
+#define GL_STATIC_ATI 0x8760
+#define GL_DYNAMIC_ATI 0x8761
+#define GL_PRESERVE_ATI 0x8762
+#define GL_DISCARD_ATI 0x8763
+#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764
+#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765
+#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766
+#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767
+typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage);
+typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve);
+typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage);
+GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer);
+GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve);
+GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer);
+GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params);
+GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params);
+#endif
+#endif /* GL_ATI_vertex_array_object */
+
+#ifndef GL_ATI_vertex_attrib_array_object
+#define GL_ATI_vertex_attrib_array_object 1
+typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);
+GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params);
+#endif
+#endif /* GL_ATI_vertex_attrib_array_object */
+
+#ifndef GL_ATI_vertex_streams
+#define GL_ATI_vertex_streams 1
+#define GL_MAX_VERTEX_STREAMS_ATI 0x876B
+#define GL_VERTEX_STREAM0_ATI 0x876C
+#define GL_VERTEX_STREAM1_ATI 0x876D
+#define GL_VERTEX_STREAM2_ATI 0x876E
+#define GL_VERTEX_STREAM3_ATI 0x876F
+#define GL_VERTEX_STREAM4_ATI 0x8770
+#define GL_VERTEX_STREAM5_ATI 0x8771
+#define GL_VERTEX_STREAM6_ATI 0x8772
+#define GL_VERTEX_STREAM7_ATI 0x8773
+#define GL_VERTEX_SOURCE_ATI 0x8774
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream);
+typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x);
+GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x);
+GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x);
+GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x);
+GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y);
+GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);
+GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords);
+GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz);
+GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz);
+GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);
+GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);
+GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream);
+GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param);
+GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param);
+#endif
+#endif /* GL_ATI_vertex_streams */
+
+#ifndef GL_EXT_422_pixels
+#define GL_EXT_422_pixels 1
+#define GL_422_EXT 0x80CC
+#define GL_422_REV_EXT 0x80CD
+#define GL_422_AVERAGE_EXT 0x80CE
+#define GL_422_REV_AVERAGE_EXT 0x80CF
+#endif /* GL_EXT_422_pixels */
+
+#ifndef GL_EXT_abgr
+#define GL_EXT_abgr 1
+#define GL_ABGR_EXT 0x8000
+#endif /* GL_EXT_abgr */
+
+#ifndef GL_EXT_bgra
+#define GL_EXT_bgra 1
+#define GL_BGR_EXT 0x80E0
+#define GL_BGRA_EXT 0x80E1
+#endif /* GL_EXT_bgra */
+
+#ifndef GL_EXT_bindable_uniform
+#define GL_EXT_bindable_uniform 1
+#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2
+#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3
+#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4
+#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED
+#define GL_UNIFORM_BUFFER_EXT 0x8DEE
+#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF
+typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location);
+typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer);
+GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location);
+GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location);
+#endif
+#endif /* GL_EXT_bindable_uniform */
+
+#ifndef GL_EXT_blend_color
+#define GL_EXT_blend_color 1
+#define GL_CONSTANT_COLOR_EXT 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002
+#define GL_CONSTANT_ALPHA_EXT 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004
+#define GL_BLEND_COLOR_EXT 0x8005
+typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+#endif
+#endif /* GL_EXT_blend_color */
+
+#ifndef GL_EXT_blend_equation_separate
+#define GL_EXT_blend_equation_separate 1
+#define GL_BLEND_EQUATION_RGB_EXT 0x8009
+#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha);
+#endif
+#endif /* GL_EXT_blend_equation_separate */
+
+#ifndef GL_EXT_blend_func_separate
+#define GL_EXT_blend_func_separate 1
+#define GL_BLEND_DST_RGB_EXT 0x80C8
+#define GL_BLEND_SRC_RGB_EXT 0x80C9
+#define GL_BLEND_DST_ALPHA_EXT 0x80CA
+#define GL_BLEND_SRC_ALPHA_EXT 0x80CB
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#endif
+#endif /* GL_EXT_blend_func_separate */
+
+#ifndef GL_EXT_blend_logic_op
+#define GL_EXT_blend_logic_op 1
+#endif /* GL_EXT_blend_logic_op */
+
+#ifndef GL_EXT_blend_minmax
+#define GL_EXT_blend_minmax 1
+#define GL_MIN_EXT 0x8007
+#define GL_MAX_EXT 0x8008
+#define GL_FUNC_ADD_EXT 0x8006
+#define GL_BLEND_EQUATION_EXT 0x8009
+typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationEXT (GLenum mode);
+#endif
+#endif /* GL_EXT_blend_minmax */
+
+#ifndef GL_EXT_blend_subtract
+#define GL_EXT_blend_subtract 1
+#define GL_FUNC_SUBTRACT_EXT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B
+#endif /* GL_EXT_blend_subtract */
+
+#ifndef GL_EXT_clip_volume_hint
+#define GL_EXT_clip_volume_hint 1
+#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0
+#endif /* GL_EXT_clip_volume_hint */
+
+#ifndef GL_EXT_cmyka
+#define GL_EXT_cmyka 1
+#define GL_CMYK_EXT 0x800C
+#define GL_CMYKA_EXT 0x800D
+#define GL_PACK_CMYK_HINT_EXT 0x800E
+#define GL_UNPACK_CMYK_HINT_EXT 0x800F
+#endif /* GL_EXT_cmyka */
+
+#ifndef GL_EXT_color_subtable
+#define GL_EXT_color_subtable 1
+typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+#endif
+#endif /* GL_EXT_color_subtable */
+
+#ifndef GL_EXT_compiled_vertex_array
+#define GL_EXT_compiled_vertex_array 1
+#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8
+#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9
+typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count);
+GLAPI void APIENTRY glUnlockArraysEXT (void);
+#endif
+#endif /* GL_EXT_compiled_vertex_array */
+
+#ifndef GL_EXT_convolution
+#define GL_EXT_convolution 1
+#define GL_CONVOLUTION_1D_EXT 0x8010
+#define GL_CONVOLUTION_2D_EXT 0x8011
+#define GL_SEPARABLE_2D_EXT 0x8012
+#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013
+#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014
+#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015
+#define GL_REDUCE_EXT 0x8016
+#define GL_CONVOLUTION_FORMAT_EXT 0x8017
+#define GL_CONVOLUTION_WIDTH_EXT 0x8018
+#define GL_CONVOLUTION_HEIGHT_EXT 0x8019
+#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span);
+typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image);
+GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image);
+GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params);
+GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params);
+GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image);
+GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span);
+GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column);
+#endif
+#endif /* GL_EXT_convolution */
+
+#ifndef GL_EXT_coordinate_frame
+#define GL_EXT_coordinate_frame 1
+#define GL_TANGENT_ARRAY_EXT 0x8439
+#define GL_BINORMAL_ARRAY_EXT 0x843A
+#define GL_CURRENT_TANGENT_EXT 0x843B
+#define GL_CURRENT_BINORMAL_EXT 0x843C
+#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E
+#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F
+#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440
+#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441
+#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442
+#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443
+#define GL_MAP1_TANGENT_EXT 0x8444
+#define GL_MAP2_TANGENT_EXT 0x8445
+#define GL_MAP1_BINORMAL_EXT 0x8446
+#define GL_MAP2_BINORMAL_EXT 0x8447
+typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz);
+typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz);
+typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz);
+typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz);
+typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz);
+typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz);
+typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz);
+typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz);
+typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz);
+typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz);
+typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz);
+GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v);
+GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz);
+GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v);
+GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz);
+GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v);
+GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz);
+GLAPI void APIENTRY glTangent3ivEXT (const GLint *v);
+GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz);
+GLAPI void APIENTRY glTangent3svEXT (const GLshort *v);
+GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz);
+GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v);
+GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz);
+GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v);
+GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz);
+GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v);
+GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz);
+GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v);
+GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz);
+GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v);
+GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_EXT_coordinate_frame */
+
+#ifndef GL_EXT_copy_texture
+#define GL_EXT_copy_texture 1
+typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_EXT_copy_texture */
+
+#ifndef GL_EXT_cull_vertex
+#define GL_EXT_cull_vertex 1
+#define GL_CULL_VERTEX_EXT 0x81AA
+#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB
+#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC
+typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_EXT_cull_vertex */
+
+#ifndef GL_EXT_debug_label
+#define GL_EXT_debug_label 1
+#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F
+#define GL_PROGRAM_OBJECT_EXT 0x8B40
+#define GL_SHADER_OBJECT_EXT 0x8B48
+#define GL_BUFFER_OBJECT_EXT 0x9151
+#define GL_QUERY_OBJECT_EXT 0x9153
+#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154
+typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label);
+typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label);
+GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
+#endif
+#endif /* GL_EXT_debug_label */
+
+#ifndef GL_EXT_debug_marker
+#define GL_EXT_debug_marker 1
+typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker);
+typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker);
+typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker);
+GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker);
+GLAPI void APIENTRY glPopGroupMarkerEXT (void);
+#endif
+#endif /* GL_EXT_debug_marker */
+
+#ifndef GL_EXT_depth_bounds_test
+#define GL_EXT_depth_bounds_test 1
+#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890
+#define GL_DEPTH_BOUNDS_EXT 0x8891
+typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax);
+#endif
+#endif /* GL_EXT_depth_bounds_test */
+
+/* GL_EXT_direct_state_access */
+#ifndef GL_EXT_direct_state_access
+#define GL_EXT_direct_state_access 1
+#define GL_PROGRAM_MATRIX 0x8E2D
+#define GL_TRANSPOSE_PROGRAM_MATRIX 0x8E2E
+#define GL_PROGRAM_MATRIX_STACK_DEPTH 0x8E2F
+typedef void (APIENTRYP PFNGLMATRIXLOADFPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADDPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTFPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLMATRIXROTATEFPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXROTATEDPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXSCALEFPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXSCALEDPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXFRUSTUMPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLMATRIXORTHOPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLMATRIXPOPPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLMATRIXPUSHPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDPROC) (GLenum mode, const GLdouble *m);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMatrixLoadf (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoadd (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixMultf (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMultd (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixLoadIdentity (GLenum mode);
+GLAPI void APIENTRY glMatrixRotatef (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixRotated (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixScalef (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixScaled (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixTranslatef (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixTranslated (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixFrustum (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY glMatrixOrtho (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY glMatrixPop (GLenum mode);
+GLAPI void APIENTRY glMatrixPush (GLenum mode);
+GLAPI void APIENTRY glMatrixLoadTransposef (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoadTransposed (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixMultTransposef (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMultTransposed (GLenum mode, const GLdouble *m);
+#endif
+#endif /* GL_EXT_direct_state_access */
+
+#ifndef GL_EXT_draw_buffers2
+#define GL_EXT_draw_buffers2 1
+typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+#endif
+#endif /* GL_EXT_draw_buffers2 */
+
+#ifndef GL_EXT_draw_instanced
+#define GL_EXT_draw_instanced 1
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
+GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#endif
+#endif /* GL_EXT_draw_instanced */
+
+#ifndef GL_EXT_draw_range_elements
+#define GL_EXT_draw_range_elements 1
+#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8
+#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+#endif
+#endif /* GL_EXT_draw_range_elements */
+
+#ifndef GL_EXT_fog_coord
+#define GL_EXT_fog_coord 1
+#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450
+#define GL_FOG_COORDINATE_EXT 0x8451
+#define GL_FRAGMENT_DEPTH_EXT 0x8452
+#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456
+#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457
+typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord);
+typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord);
+GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord);
+GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord);
+GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord);
+GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_EXT_fog_coord */
+
+#ifndef GL_EXT_framebuffer_blit
+#define GL_EXT_framebuffer_blit 1
+#define GL_READ_FRAMEBUFFER_EXT 0x8CA8
+#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9
+#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6
+#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA
+typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif
+#endif /* GL_EXT_framebuffer_blit */
+
+#ifndef GL_EXT_framebuffer_multisample
+#define GL_EXT_framebuffer_multisample 1
+#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56
+#define GL_MAX_SAMPLES_EXT 0x8D57
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_EXT_framebuffer_multisample */
+
+#ifndef GL_EXT_framebuffer_multisample_blit_scaled
+#define GL_EXT_framebuffer_multisample_blit_scaled 1
+#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA
+#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB
+#endif /* GL_EXT_framebuffer_multisample_blit_scaled */
+
+#ifndef GL_EXT_framebuffer_object
+#define GL_EXT_framebuffer_object 1
+#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506
+#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8
+#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6
+#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4
+#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9
+#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC
+#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD
+#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF
+#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
+#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1
+#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2
+#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3
+#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4
+#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5
+#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6
+#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7
+#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8
+#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9
+#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA
+#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB
+#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC
+#define GL_COLOR_ATTACHMENT13_EXT 0x8CED
+#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE
+#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF
+#define GL_DEPTH_ATTACHMENT_EXT 0x8D00
+#define GL_STENCIL_ATTACHMENT_EXT 0x8D20
+#define GL_FRAMEBUFFER_EXT 0x8D40
+#define GL_RENDERBUFFER_EXT 0x8D41
+#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42
+#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44
+#define GL_STENCIL_INDEX1_EXT 0x8D46
+#define GL_STENCIL_INDEX4_EXT 0x8D47
+#define GL_STENCIL_INDEX8_EXT 0x8D48
+#define GL_STENCIL_INDEX16_EXT 0x8D49
+#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55
+typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer);
+typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer);
+typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers);
+typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer);
+GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers);
+GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers);
+GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer);
+GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer);
+GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers);
+GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers);
+GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target);
+GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target);
+#endif
+#endif /* GL_EXT_framebuffer_object */
+
+#ifndef GL_EXT_framebuffer_sRGB
+#define GL_EXT_framebuffer_sRGB 1
+#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
+#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA
+#endif /* GL_EXT_framebuffer_sRGB */
+
+#ifndef GL_EXT_geometry_shader4
+#define GL_EXT_geometry_shader4 1
+#define GL_GEOMETRY_SHADER_EXT 0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA
+#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE
+#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1
+#define GL_LINES_ADJACENCY_EXT 0x000A
+#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B
+#define GL_TRIANGLES_ADJACENCY_EXT 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4
+#define GL_PROGRAM_POINT_SIZE_EXT 0x8642
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value);
+#endif
+#endif /* GL_EXT_geometry_shader4 */
+
+#ifndef GL_EXT_gpu_program_parameters
+#define GL_EXT_gpu_program_parameters 1
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+#endif
+#endif /* GL_EXT_gpu_program_parameters */
+
+#ifndef GL_EXT_gpu_shader4
+#define GL_EXT_gpu_shader4 1
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD
+#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0
+#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1
+#define GL_SAMPLER_BUFFER_EXT 0x8DC2
+#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3
+#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5
+#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6
+#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7
+#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8
+#define GL_INT_SAMPLER_1D_EXT 0x8DC9
+#define GL_INT_SAMPLER_2D_EXT 0x8DCA
+#define GL_INT_SAMPLER_3D_EXT 0x8DCB
+#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC
+#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD
+#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE
+#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF
+#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8
+#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905
+typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params);
+GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name);
+GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0);
+GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value);
+#endif
+#endif /* GL_EXT_gpu_shader4 */
+
+#ifndef GL_EXT_histogram
+#define GL_EXT_histogram 1
+#define GL_HISTOGRAM_EXT 0x8024
+#define GL_PROXY_HISTOGRAM_EXT 0x8025
+#define GL_HISTOGRAM_WIDTH_EXT 0x8026
+#define GL_HISTOGRAM_FORMAT_EXT 0x8027
+#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028
+#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029
+#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C
+#define GL_HISTOGRAM_SINK_EXT 0x802D
+#define GL_MINMAX_EXT 0x802E
+#define GL_MINMAX_FORMAT_EXT 0x802F
+#define GL_MINMAX_SINK_EXT 0x8030
+#define GL_TABLE_TOO_LARGE_EXT 0x8031
+typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glResetHistogramEXT (GLenum target);
+GLAPI void APIENTRY glResetMinmaxEXT (GLenum target);
+#endif
+#endif /* GL_EXT_histogram */
+
+#ifndef GL_EXT_index_array_formats
+#define GL_EXT_index_array_formats 1
+#define GL_IUI_V2F_EXT 0x81AD
+#define GL_IUI_V3F_EXT 0x81AE
+#define GL_IUI_N3F_V2F_EXT 0x81AF
+#define GL_IUI_N3F_V3F_EXT 0x81B0
+#define GL_T2F_IUI_V2F_EXT 0x81B1
+#define GL_T2F_IUI_V3F_EXT 0x81B2
+#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3
+#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4
+#endif /* GL_EXT_index_array_formats */
+
+#ifndef GL_EXT_index_func
+#define GL_EXT_index_func 1
+#define GL_INDEX_TEST_EXT 0x81B5
+#define GL_INDEX_TEST_FUNC_EXT 0x81B6
+#define GL_INDEX_TEST_REF_EXT 0x81B7
+typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref);
+#endif
+#endif /* GL_EXT_index_func */
+
+#ifndef GL_EXT_index_material
+#define GL_EXT_index_material 1
+#define GL_INDEX_MATERIAL_EXT 0x81B8
+#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9
+#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA
+typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode);
+#endif
+#endif /* GL_EXT_index_material */
+
+#ifndef GL_EXT_index_texture
+#define GL_EXT_index_texture 1
+#endif /* GL_EXT_index_texture */
+
+#ifndef GL_EXT_light_texture
+#define GL_EXT_light_texture 1
+#define GL_FRAGMENT_MATERIAL_EXT 0x8349
+#define GL_FRAGMENT_NORMAL_EXT 0x834A
+#define GL_FRAGMENT_COLOR_EXT 0x834C
+#define GL_ATTENUATION_EXT 0x834D
+#define GL_SHADOW_ATTENUATION_EXT 0x834E
+#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F
+#define GL_TEXTURE_LIGHT_EXT 0x8350
+#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351
+#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352
+typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname);
+typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glApplyTextureEXT (GLenum mode);
+GLAPI void APIENTRY glTextureLightEXT (GLenum pname);
+GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode);
+#endif
+#endif /* GL_EXT_light_texture */
+
+#ifndef GL_EXT_misc_attribute
+#define GL_EXT_misc_attribute 1
+#endif /* GL_EXT_misc_attribute */
+
+#ifndef GL_EXT_multi_draw_arrays
+#define GL_EXT_multi_draw_arrays 1
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount);
+#endif
+#endif /* GL_EXT_multi_draw_arrays */
+
+#ifndef GL_EXT_multisample
+#define GL_EXT_multisample 1
+#define GL_MULTISAMPLE_EXT 0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F
+#define GL_SAMPLE_MASK_EXT 0x80A0
+#define GL_1PASS_EXT 0x80A1
+#define GL_2PASS_0_EXT 0x80A2
+#define GL_2PASS_1_EXT 0x80A3
+#define GL_4PASS_0_EXT 0x80A4
+#define GL_4PASS_1_EXT 0x80A5
+#define GL_4PASS_2_EXT 0x80A6
+#define GL_4PASS_3_EXT 0x80A7
+#define GL_SAMPLE_BUFFERS_EXT 0x80A8
+#define GL_SAMPLES_EXT 0x80A9
+#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA
+#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB
+#define GL_SAMPLE_PATTERN_EXT 0x80AC
+#define GL_MULTISAMPLE_BIT_EXT 0x20000000
+typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert);
+GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern);
+#endif
+#endif /* GL_EXT_multisample */
+
+#ifndef GL_EXT_packed_depth_stencil
+#define GL_EXT_packed_depth_stencil 1
+#define GL_DEPTH_STENCIL_EXT 0x84F9
+#define GL_UNSIGNED_INT_24_8_EXT 0x84FA
+#define GL_DEPTH24_STENCIL8_EXT 0x88F0
+#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1
+#endif /* GL_EXT_packed_depth_stencil */
+
+#ifndef GL_EXT_packed_float
+#define GL_EXT_packed_float 1
+#define GL_R11F_G11F_B10F_EXT 0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B
+#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C
+#endif /* GL_EXT_packed_float */
+
+#ifndef GL_EXT_packed_pixels
+#define GL_EXT_packed_pixels 1
+#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034
+#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035
+#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036
+#endif /* GL_EXT_packed_pixels */
+
+#ifndef GL_EXT_paletted_texture
+#define GL_EXT_paletted_texture 1
+#define GL_COLOR_INDEX1_EXT 0x80E2
+#define GL_COLOR_INDEX2_EXT 0x80E3
+#define GL_COLOR_INDEX4_EXT 0x80E4
+#define GL_COLOR_INDEX8_EXT 0x80E5
+#define GL_COLOR_INDEX12_EXT 0x80E6
+#define GL_COLOR_INDEX16_EXT 0x80E7
+#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED
+typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table);
+GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data);
+GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_EXT_paletted_texture */
+
+#ifndef GL_EXT_pixel_buffer_object
+#define GL_EXT_pixel_buffer_object 1
+#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF
+#endif /* GL_EXT_pixel_buffer_object */
+
+#ifndef GL_EXT_pixel_transform
+#define GL_EXT_pixel_transform 1
+#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330
+#define GL_PIXEL_MAG_FILTER_EXT 0x8331
+#define GL_PIXEL_MIN_FILTER_EXT 0x8332
+#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333
+#define GL_CUBIC_EXT 0x8334
+#define GL_AVERAGE_EXT 0x8335
+#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336
+#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337
+#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_EXT_pixel_transform */
+
+#ifndef GL_EXT_pixel_transform_color_table
+#define GL_EXT_pixel_transform_color_table 1
+#endif /* GL_EXT_pixel_transform_color_table */
+
+#ifndef GL_EXT_point_parameters
+#define GL_EXT_point_parameters 1
+#define GL_POINT_SIZE_MIN_EXT 0x8126
+#define GL_POINT_SIZE_MAX_EXT 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128
+#define GL_DISTANCE_ATTENUATION_EXT 0x8129
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params);
+#endif
+#endif /* GL_EXT_point_parameters */
+
+#ifndef GL_EXT_polygon_offset
+#define GL_EXT_polygon_offset 1
+#define GL_POLYGON_OFFSET_EXT 0x8037
+#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038
+#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias);
+#endif
+#endif /* GL_EXT_polygon_offset */
+
+#ifndef GL_EXT_polygon_offset_clamp
+#define GL_EXT_polygon_offset_clamp 1
+#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp);
+#endif
+#endif /* GL_EXT_polygon_offset_clamp */
+
+#ifndef GL_EXT_provoking_vertex
+#define GL_EXT_provoking_vertex 1
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C
+#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E
+#define GL_PROVOKING_VERTEX_EXT 0x8E4F
+typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode);
+#endif
+#endif /* GL_EXT_provoking_vertex */
+
+#ifndef GL_EXT_rescale_normal
+#define GL_EXT_rescale_normal 1
+#define GL_RESCALE_NORMAL_EXT 0x803A
+#endif /* GL_EXT_rescale_normal */
+
+#ifndef GL_EXT_secondary_color
+#define GL_EXT_secondary_color 1
+#define GL_COLOR_SUM_EXT 0x8458
+#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D
+#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue);
+GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v);
+GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue);
+GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v);
+GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue);
+GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v);
+GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue);
+GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v);
+GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue);
+GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v);
+GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue);
+GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v);
+GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue);
+GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v);
+GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue);
+GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v);
+GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_EXT_secondary_color */
+
+#ifndef GL_EXT_separate_shader_objects
+#define GL_EXT_separate_shader_objects 1
+#define GL_ACTIVE_PROGRAM_EXT 0x8B8D
+typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program);
+typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program);
+GLAPI void APIENTRY glActiveProgramEXT (GLuint program);
+GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string);
+#endif
+#endif /* GL_EXT_separate_shader_objects */
+
+#ifndef GL_EXT_separate_specular_color
+#define GL_EXT_separate_specular_color 1
+#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8
+#define GL_SINGLE_COLOR_EXT 0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA
+#endif /* GL_EXT_separate_specular_color */
+
+#ifndef GL_EXT_shader_image_load_formatted
+#define GL_EXT_shader_image_load_formatted 1
+#endif /* GL_EXT_shader_image_load_formatted */
+
+#ifndef GL_EXT_shader_image_load_store
+#define GL_EXT_shader_image_load_store 1
+#define GL_MAX_IMAGE_UNITS_EXT 0x8F38
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39
+#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A
+#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B
+#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C
+#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D
+#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E
+#define GL_IMAGE_1D_EXT 0x904C
+#define GL_IMAGE_2D_EXT 0x904D
+#define GL_IMAGE_3D_EXT 0x904E
+#define GL_IMAGE_2D_RECT_EXT 0x904F
+#define GL_IMAGE_CUBE_EXT 0x9050
+#define GL_IMAGE_BUFFER_EXT 0x9051
+#define GL_IMAGE_1D_ARRAY_EXT 0x9052
+#define GL_IMAGE_2D_ARRAY_EXT 0x9053
+#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054
+#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056
+#define GL_INT_IMAGE_1D_EXT 0x9057
+#define GL_INT_IMAGE_2D_EXT 0x9058
+#define GL_INT_IMAGE_3D_EXT 0x9059
+#define GL_INT_IMAGE_2D_RECT_EXT 0x905A
+#define GL_INT_IMAGE_CUBE_EXT 0x905B
+#define GL_INT_IMAGE_BUFFER_EXT 0x905C
+#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D
+#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F
+#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061
+#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062
+#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063
+#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065
+#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066
+#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C
+#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D
+#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001
+#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002
+#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004
+#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020
+#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040
+#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080
+#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100
+#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200
+#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800
+#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000
+#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF
+typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format);
+typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format);
+GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers);
+#endif
+#endif /* GL_EXT_shader_image_load_store */
+
+#ifndef GL_EXT_shader_integer_mix
+#define GL_EXT_shader_integer_mix 1
+#endif /* GL_EXT_shader_integer_mix */
+
+#ifndef GL_EXT_shadow_funcs
+#define GL_EXT_shadow_funcs 1
+#endif /* GL_EXT_shadow_funcs */
+
+#ifndef GL_EXT_shared_texture_palette
+#define GL_EXT_shared_texture_palette 1
+#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB
+#endif /* GL_EXT_shared_texture_palette */
+
+#ifndef GL_EXT_stencil_clear_tag
+#define GL_EXT_stencil_clear_tag 1
+#define GL_STENCIL_TAG_BITS_EXT 0x88F2
+#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3
+typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag);
+#endif
+#endif /* GL_EXT_stencil_clear_tag */
+
+#ifndef GL_EXT_stencil_two_side
+#define GL_EXT_stencil_two_side 1
+#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910
+#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911
+typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face);
+#endif
+#endif /* GL_EXT_stencil_two_side */
+
+#ifndef GL_EXT_stencil_wrap
+#define GL_EXT_stencil_wrap 1
+#define GL_INCR_WRAP_EXT 0x8507
+#define GL_DECR_WRAP_EXT 0x8508
+#endif /* GL_EXT_stencil_wrap */
+
+#ifndef GL_EXT_subtexture
+#define GL_EXT_subtexture 1
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+#endif
+#endif /* GL_EXT_subtexture */
+
+#ifndef GL_EXT_texture
+#define GL_EXT_texture 1
+#define GL_ALPHA4_EXT 0x803B
+#define GL_ALPHA8_EXT 0x803C
+#define GL_ALPHA12_EXT 0x803D
+#define GL_ALPHA16_EXT 0x803E
+#define GL_LUMINANCE4_EXT 0x803F
+#define GL_LUMINANCE8_EXT 0x8040
+#define GL_LUMINANCE12_EXT 0x8041
+#define GL_LUMINANCE16_EXT 0x8042
+#define GL_LUMINANCE4_ALPHA4_EXT 0x8043
+#define GL_LUMINANCE6_ALPHA2_EXT 0x8044
+#define GL_LUMINANCE8_ALPHA8_EXT 0x8045
+#define GL_LUMINANCE12_ALPHA4_EXT 0x8046
+#define GL_LUMINANCE12_ALPHA12_EXT 0x8047
+#define GL_LUMINANCE16_ALPHA16_EXT 0x8048
+#define GL_INTENSITY_EXT 0x8049
+#define GL_INTENSITY4_EXT 0x804A
+#define GL_INTENSITY8_EXT 0x804B
+#define GL_INTENSITY12_EXT 0x804C
+#define GL_INTENSITY16_EXT 0x804D
+#define GL_RGB2_EXT 0x804E
+#define GL_RGB4_EXT 0x804F
+#define GL_RGB5_EXT 0x8050
+#define GL_RGB8_EXT 0x8051
+#define GL_RGB10_EXT 0x8052
+#define GL_RGB12_EXT 0x8053
+#define GL_RGB16_EXT 0x8054
+#define GL_RGBA2_EXT 0x8055
+#define GL_RGBA4_EXT 0x8056
+#define GL_RGB5_A1_EXT 0x8057
+#define GL_RGBA8_EXT 0x8058
+#define GL_RGB10_A2_EXT 0x8059
+#define GL_RGBA12_EXT 0x805A
+#define GL_RGBA16_EXT 0x805B
+#define GL_TEXTURE_RED_SIZE_EXT 0x805C
+#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D
+#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E
+#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060
+#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061
+#define GL_REPLACE_EXT 0x8062
+#define GL_PROXY_TEXTURE_1D_EXT 0x8063
+#define GL_PROXY_TEXTURE_2D_EXT 0x8064
+#define GL_TEXTURE_TOO_LARGE_EXT 0x8065
+#endif /* GL_EXT_texture */
+
+#ifndef GL_EXT_texture3D
+#define GL_EXT_texture3D 1
+#define GL_PACK_SKIP_IMAGES_EXT 0x806B
+#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C
+#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E
+#define GL_TEXTURE_3D_EXT 0x806F
+#define GL_PROXY_TEXTURE_3D_EXT 0x8070
+#define GL_TEXTURE_DEPTH_EXT 0x8071
+#define GL_TEXTURE_WRAP_R_EXT 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073
+typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+#endif
+#endif /* GL_EXT_texture3D */
+
+#ifndef GL_EXT_texture_array
+#define GL_EXT_texture_array 1
+#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18
+#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19
+#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A
+#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B
+#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C
+#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D
+#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF
+#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+#endif
+#endif /* GL_EXT_texture_array */
+
+#ifndef GL_EXT_texture_buffer_object
+#define GL_EXT_texture_buffer_object 1
+#define GL_TEXTURE_BUFFER_EXT 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D
+#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E
+typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer);
+#endif
+#endif /* GL_EXT_texture_buffer_object */
+
+#ifndef GL_EXT_texture_compression_latc
+#define GL_EXT_texture_compression_latc 1
+#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70
+#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71
+#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72
+#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73
+#endif /* GL_EXT_texture_compression_latc */
+
+#ifndef GL_EXT_texture_compression_rgtc
+#define GL_EXT_texture_compression_rgtc 1
+#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC
+#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD
+#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE
+#endif /* GL_EXT_texture_compression_rgtc */
+
+#ifndef GL_EXT_texture_compression_s3tc
+#define GL_EXT_texture_compression_s3tc 1
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
+#endif /* GL_EXT_texture_compression_s3tc */
+
+#ifndef GL_EXT_texture_cube_map
+#define GL_EXT_texture_cube_map 1
+#define GL_NORMAL_MAP_EXT 0x8511
+#define GL_REFLECTION_MAP_EXT 0x8512
+#define GL_TEXTURE_CUBE_MAP_EXT 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C
+#endif /* GL_EXT_texture_cube_map */
+
+#ifndef GL_EXT_texture_env_add
+#define GL_EXT_texture_env_add 1
+#endif /* GL_EXT_texture_env_add */
+
+#ifndef GL_EXT_texture_env_combine
+#define GL_EXT_texture_env_combine 1
+#define GL_COMBINE_EXT 0x8570
+#define GL_COMBINE_RGB_EXT 0x8571
+#define GL_COMBINE_ALPHA_EXT 0x8572
+#define GL_RGB_SCALE_EXT 0x8573
+#define GL_ADD_SIGNED_EXT 0x8574
+#define GL_INTERPOLATE_EXT 0x8575
+#define GL_CONSTANT_EXT 0x8576
+#define GL_PRIMARY_COLOR_EXT 0x8577
+#define GL_PREVIOUS_EXT 0x8578
+#define GL_SOURCE0_RGB_EXT 0x8580
+#define GL_SOURCE1_RGB_EXT 0x8581
+#define GL_SOURCE2_RGB_EXT 0x8582
+#define GL_SOURCE0_ALPHA_EXT 0x8588
+#define GL_SOURCE1_ALPHA_EXT 0x8589
+#define GL_SOURCE2_ALPHA_EXT 0x858A
+#define GL_OPERAND0_RGB_EXT 0x8590
+#define GL_OPERAND1_RGB_EXT 0x8591
+#define GL_OPERAND2_RGB_EXT 0x8592
+#define GL_OPERAND0_ALPHA_EXT 0x8598
+#define GL_OPERAND1_ALPHA_EXT 0x8599
+#define GL_OPERAND2_ALPHA_EXT 0x859A
+#endif /* GL_EXT_texture_env_combine */
+
+#ifndef GL_EXT_texture_env_dot3
+#define GL_EXT_texture_env_dot3 1
+#define GL_DOT3_RGB_EXT 0x8740
+#define GL_DOT3_RGBA_EXT 0x8741
+#endif /* GL_EXT_texture_env_dot3 */
+
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_EXT_texture_filter_anisotropic 1
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
+#endif /* GL_EXT_texture_filter_anisotropic */
+
+#ifndef GL_EXT_texture_integer
+#define GL_EXT_texture_integer 1
+#define GL_RGBA32UI_EXT 0x8D70
+#define GL_RGB32UI_EXT 0x8D71
+#define GL_ALPHA32UI_EXT 0x8D72
+#define GL_INTENSITY32UI_EXT 0x8D73
+#define GL_LUMINANCE32UI_EXT 0x8D74
+#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75
+#define GL_RGBA16UI_EXT 0x8D76
+#define GL_RGB16UI_EXT 0x8D77
+#define GL_ALPHA16UI_EXT 0x8D78
+#define GL_INTENSITY16UI_EXT 0x8D79
+#define GL_LUMINANCE16UI_EXT 0x8D7A
+#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B
+#define GL_RGBA8UI_EXT 0x8D7C
+#define GL_RGB8UI_EXT 0x8D7D
+#define GL_ALPHA8UI_EXT 0x8D7E
+#define GL_INTENSITY8UI_EXT 0x8D7F
+#define GL_LUMINANCE8UI_EXT 0x8D80
+#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81
+#define GL_RGBA32I_EXT 0x8D82
+#define GL_RGB32I_EXT 0x8D83
+#define GL_ALPHA32I_EXT 0x8D84
+#define GL_INTENSITY32I_EXT 0x8D85
+#define GL_LUMINANCE32I_EXT 0x8D86
+#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87
+#define GL_RGBA16I_EXT 0x8D88
+#define GL_RGB16I_EXT 0x8D89
+#define GL_ALPHA16I_EXT 0x8D8A
+#define GL_INTENSITY16I_EXT 0x8D8B
+#define GL_LUMINANCE16I_EXT 0x8D8C
+#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D
+#define GL_RGBA8I_EXT 0x8D8E
+#define GL_RGB8I_EXT 0x8D8F
+#define GL_ALPHA8I_EXT 0x8D90
+#define GL_INTENSITY8I_EXT 0x8D91
+#define GL_LUMINANCE8I_EXT 0x8D92
+#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93
+#define GL_RED_INTEGER_EXT 0x8D94
+#define GL_GREEN_INTEGER_EXT 0x8D95
+#define GL_BLUE_INTEGER_EXT 0x8D96
+#define GL_ALPHA_INTEGER_EXT 0x8D97
+#define GL_RGB_INTEGER_EXT 0x8D98
+#define GL_RGBA_INTEGER_EXT 0x8D99
+#define GL_BGR_INTEGER_EXT 0x8D9A
+#define GL_BGRA_INTEGER_EXT 0x8D9B
+#define GL_LUMINANCE_INTEGER_EXT 0x8D9C
+#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D
+#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E
+typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha);
+typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha);
+GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha);
+#endif
+#endif /* GL_EXT_texture_integer */
+
+#ifndef GL_EXT_texture_lod_bias
+#define GL_EXT_texture_lod_bias 1
+#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD
+#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500
+#define GL_TEXTURE_LOD_BIAS_EXT 0x8501
+#endif /* GL_EXT_texture_lod_bias */
+
+#ifndef GL_EXT_texture_mirror_clamp
+#define GL_EXT_texture_mirror_clamp 1
+#define GL_MIRROR_CLAMP_EXT 0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743
+#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912
+#endif /* GL_EXT_texture_mirror_clamp */
+
+#ifndef GL_EXT_texture_object
+#define GL_EXT_texture_object 1
+#define GL_TEXTURE_PRIORITY_EXT 0x8066
+#define GL_TEXTURE_RESIDENT_EXT 0x8067
+#define GL_TEXTURE_1D_BINDING_EXT 0x8068
+#define GL_TEXTURE_2D_BINDING_EXT 0x8069
+#define GL_TEXTURE_3D_BINDING_EXT 0x806A
+typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences);
+typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture);
+typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures);
+typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures);
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences);
+GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture);
+GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures);
+GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures);
+GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture);
+GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities);
+#endif
+#endif /* GL_EXT_texture_object */
+
+#ifndef GL_EXT_texture_perturb_normal
+#define GL_EXT_texture_perturb_normal 1
+#define GL_PERTURB_EXT 0x85AE
+#define GL_TEXTURE_NORMAL_EXT 0x85AF
+typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureNormalEXT (GLenum mode);
+#endif
+#endif /* GL_EXT_texture_perturb_normal */
+
+#ifndef GL_EXT_texture_sRGB
+#define GL_EXT_texture_sRGB 1
+#define GL_SRGB_EXT 0x8C40
+#define GL_SRGB8_EXT 0x8C41
+#define GL_SRGB_ALPHA_EXT 0x8C42
+#define GL_SRGB8_ALPHA8_EXT 0x8C43
+#define GL_SLUMINANCE_ALPHA_EXT 0x8C44
+#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45
+#define GL_SLUMINANCE_EXT 0x8C46
+#define GL_SLUMINANCE8_EXT 0x8C47
+#define GL_COMPRESSED_SRGB_EXT 0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49
+#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F
+#endif /* GL_EXT_texture_sRGB */
+
+#ifndef GL_EXT_texture_sRGB_decode
+#define GL_EXT_texture_sRGB_decode 1
+#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48
+#define GL_DECODE_EXT 0x8A49
+#define GL_SKIP_DECODE_EXT 0x8A4A
+#endif /* GL_EXT_texture_sRGB_decode */
+
+#ifndef GL_EXT_texture_shared_exponent
+#define GL_EXT_texture_shared_exponent 1
+#define GL_RGB9_E5_EXT 0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E
+#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F
+#endif /* GL_EXT_texture_shared_exponent */
+
+#ifndef GL_EXT_texture_snorm
+#define GL_EXT_texture_snorm 1
+#define GL_ALPHA_SNORM 0x9010
+#define GL_LUMINANCE_SNORM 0x9011
+#define GL_LUMINANCE_ALPHA_SNORM 0x9012
+#define GL_INTENSITY_SNORM 0x9013
+#define GL_ALPHA8_SNORM 0x9014
+#define GL_LUMINANCE8_SNORM 0x9015
+#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016
+#define GL_INTENSITY8_SNORM 0x9017
+#define GL_ALPHA16_SNORM 0x9018
+#define GL_LUMINANCE16_SNORM 0x9019
+#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A
+#define GL_INTENSITY16_SNORM 0x901B
+#define GL_RED_SNORM 0x8F90
+#define GL_RG_SNORM 0x8F91
+#define GL_RGB_SNORM 0x8F92
+#define GL_RGBA_SNORM 0x8F93
+#endif /* GL_EXT_texture_snorm */
+
+#ifndef GL_EXT_texture_swizzle
+#define GL_EXT_texture_swizzle 1
+#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42
+#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43
+#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44
+#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45
+#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46
+#endif /* GL_EXT_texture_swizzle */
+
+#ifndef GL_EXT_timer_query
+#define GL_EXT_timer_query 1
+#define GL_TIME_ELAPSED_EXT 0x88BF
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params);
+#endif
+#endif /* GL_EXT_timer_query */
+
+#ifndef GL_EXT_transform_feedback
+#define GL_EXT_transform_feedback 1
+#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F
+#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C
+#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D
+#define GL_PRIMITIVES_GENERATED_EXT 0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88
+#define GL_RASTERIZER_DISCARD_EXT 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76
+typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode);
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void);
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode);
+GLAPI void APIENTRY glEndTransformFeedbackEXT (void);
+GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+#endif
+#endif /* GL_EXT_transform_feedback */
+
+#ifndef GL_EXT_vertex_array
+#define GL_EXT_vertex_array 1
+#define GL_VERTEX_ARRAY_EXT 0x8074
+#define GL_NORMAL_ARRAY_EXT 0x8075
+#define GL_COLOR_ARRAY_EXT 0x8076
+#define GL_INDEX_ARRAY_EXT 0x8077
+#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078
+#define GL_EDGE_FLAG_ARRAY_EXT 0x8079
+#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A
+#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B
+#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C
+#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D
+#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E
+#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F
+#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080
+#define GL_COLOR_ARRAY_SIZE_EXT 0x8081
+#define GL_COLOR_ARRAY_TYPE_EXT 0x8082
+#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083
+#define GL_COLOR_ARRAY_COUNT_EXT 0x8084
+#define GL_INDEX_ARRAY_TYPE_EXT 0x8085
+#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086
+#define GL_INDEX_ARRAY_COUNT_EXT 0x8087
+#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A
+#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B
+#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C
+#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D
+#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E
+#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F
+#define GL_COLOR_ARRAY_POINTER_EXT 0x8090
+#define GL_INDEX_ARRAY_POINTER_EXT 0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093
+typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i);
+typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer);
+typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params);
+typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glArrayElementEXT (GLint i);
+GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count);
+GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer);
+GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params);
+GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+#endif
+#endif /* GL_EXT_vertex_array */
+
+#ifndef GL_EXT_vertex_array_bgra
+#define GL_EXT_vertex_array_bgra 1
+#endif /* GL_EXT_vertex_array_bgra */
+
+#ifndef GL_EXT_vertex_attrib_64bit
+#define GL_EXT_vertex_attrib_64bit 1
+#define GL_DOUBLE_VEC2_EXT 0x8FFC
+#define GL_DOUBLE_VEC3_EXT 0x8FFD
+#define GL_DOUBLE_VEC4_EXT 0x8FFE
+#define GL_DOUBLE_MAT2_EXT 0x8F46
+#define GL_DOUBLE_MAT3_EXT 0x8F47
+#define GL_DOUBLE_MAT4_EXT 0x8F48
+#define GL_DOUBLE_MAT2x3_EXT 0x8F49
+#define GL_DOUBLE_MAT2x4_EXT 0x8F4A
+#define GL_DOUBLE_MAT3x2_EXT 0x8F4B
+#define GL_DOUBLE_MAT3x4_EXT 0x8F4C
+#define GL_DOUBLE_MAT4x2_EXT 0x8F4D
+#define GL_DOUBLE_MAT4x3_EXT 0x8F4E
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params);
+#endif
+#endif /* GL_EXT_vertex_attrib_64bit */
+
+#ifndef GL_EXT_vertex_shader
+#define GL_EXT_vertex_shader 1
+#define GL_VERTEX_SHADER_EXT 0x8780
+#define GL_VERTEX_SHADER_BINDING_EXT 0x8781
+#define GL_OP_INDEX_EXT 0x8782
+#define GL_OP_NEGATE_EXT 0x8783
+#define GL_OP_DOT3_EXT 0x8784
+#define GL_OP_DOT4_EXT 0x8785
+#define GL_OP_MUL_EXT 0x8786
+#define GL_OP_ADD_EXT 0x8787
+#define GL_OP_MADD_EXT 0x8788
+#define GL_OP_FRAC_EXT 0x8789
+#define GL_OP_MAX_EXT 0x878A
+#define GL_OP_MIN_EXT 0x878B
+#define GL_OP_SET_GE_EXT 0x878C
+#define GL_OP_SET_LT_EXT 0x878D
+#define GL_OP_CLAMP_EXT 0x878E
+#define GL_OP_FLOOR_EXT 0x878F
+#define GL_OP_ROUND_EXT 0x8790
+#define GL_OP_EXP_BASE_2_EXT 0x8791
+#define GL_OP_LOG_BASE_2_EXT 0x8792
+#define GL_OP_POWER_EXT 0x8793
+#define GL_OP_RECIP_EXT 0x8794
+#define GL_OP_RECIP_SQRT_EXT 0x8795
+#define GL_OP_SUB_EXT 0x8796
+#define GL_OP_CROSS_PRODUCT_EXT 0x8797
+#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798
+#define GL_OP_MOV_EXT 0x8799
+#define GL_OUTPUT_VERTEX_EXT 0x879A
+#define GL_OUTPUT_COLOR0_EXT 0x879B
+#define GL_OUTPUT_COLOR1_EXT 0x879C
+#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D
+#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E
+#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F
+#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0
+#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1
+#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2
+#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3
+#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4
+#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5
+#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6
+#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7
+#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8
+#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9
+#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA
+#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB
+#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC
+#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD
+#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE
+#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF
+#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0
+#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1
+#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2
+#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3
+#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4
+#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5
+#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6
+#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7
+#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8
+#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9
+#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA
+#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB
+#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC
+#define GL_OUTPUT_FOG_EXT 0x87BD
+#define GL_SCALAR_EXT 0x87BE
+#define GL_VECTOR_EXT 0x87BF
+#define GL_MATRIX_EXT 0x87C0
+#define GL_VARIANT_EXT 0x87C1
+#define GL_INVARIANT_EXT 0x87C2
+#define GL_LOCAL_CONSTANT_EXT 0x87C3
+#define GL_LOCAL_EXT 0x87C4
+#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5
+#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6
+#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7
+#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8
+#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE
+#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF
+#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0
+#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1
+#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2
+#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3
+#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4
+#define GL_X_EXT 0x87D5
+#define GL_Y_EXT 0x87D6
+#define GL_Z_EXT 0x87D7
+#define GL_W_EXT 0x87D8
+#define GL_NEGATIVE_X_EXT 0x87D9
+#define GL_NEGATIVE_Y_EXT 0x87DA
+#define GL_NEGATIVE_Z_EXT 0x87DB
+#define GL_NEGATIVE_W_EXT 0x87DC
+#define GL_ZERO_EXT 0x87DD
+#define GL_ONE_EXT 0x87DE
+#define GL_NEGATIVE_ONE_EXT 0x87DF
+#define GL_NORMALIZED_RANGE_EXT 0x87E0
+#define GL_FULL_RANGE_EXT 0x87E1
+#define GL_CURRENT_VERTEX_EXT 0x87E2
+#define GL_MVP_MATRIX_EXT 0x87E3
+#define GL_VARIANT_VALUE_EXT 0x87E4
+#define GL_VARIANT_DATATYPE_EXT 0x87E5
+#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6
+#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7
+#define GL_VARIANT_ARRAY_EXT 0x87E8
+#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9
+#define GL_INVARIANT_VALUE_EXT 0x87EA
+#define GL_INVARIANT_DATATYPE_EXT 0x87EB
+#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC
+#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED
+typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void);
+typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void);
+typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id);
+typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range);
+typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1);
+typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2);
+typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);
+typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);
+typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr);
+typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr);
+typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr);
+typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr);
+typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr);
+typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr);
+typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr);
+typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr);
+typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr);
+typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr);
+typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr);
+typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value);
+typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap);
+typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data);
+typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginVertexShaderEXT (void);
+GLAPI void APIENTRY glEndVertexShaderEXT (void);
+GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id);
+GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range);
+GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id);
+GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1);
+GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2);
+GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);
+GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num);
+GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num);
+GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);
+GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr);
+GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr);
+GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr);
+GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr);
+GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr);
+GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr);
+GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr);
+GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr);
+GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr);
+GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr);
+GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr);
+GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id);
+GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id);
+GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value);
+GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value);
+GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value);
+GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value);
+GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value);
+GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap);
+GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);
+GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data);
+GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data);
+GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data);
+GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);
+GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data);
+GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data);
+GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);
+GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data);
+GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data);
+#endif
+#endif /* GL_EXT_vertex_shader */
+
+#ifndef GL_EXT_vertex_weighting
+#define GL_EXT_vertex_weighting 1
+#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3
+#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502
+#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6
+#define GL_MODELVIEW1_MATRIX_EXT 0x8506
+#define GL_VERTEX_WEIGHTING_EXT 0x8509
+#define GL_MODELVIEW0_EXT 0x1700
+#define GL_MODELVIEW1_EXT 0x850A
+#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B
+#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C
+#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D
+#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E
+#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F
+#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight);
+GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight);
+GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_EXT_vertex_weighting */
+
+#ifndef GL_EXT_x11_sync_object
+#define GL_EXT_x11_sync_object 1
+#define GL_SYNC_X11_FENCE_EXT 0x90E1
+typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags);
+#endif
+#endif /* GL_EXT_x11_sync_object */
+
+#ifndef GL_GREMEDY_frame_terminator
+#define GL_GREMEDY_frame_terminator 1
+typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFrameTerminatorGREMEDY (void);
+#endif
+#endif /* GL_GREMEDY_frame_terminator */
+
+#ifndef GL_GREMEDY_string_marker
+#define GL_GREMEDY_string_marker 1
+typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string);
+#endif
+#endif /* GL_GREMEDY_string_marker */
+
+#ifndef GL_HP_convolution_border_modes
+#define GL_HP_convolution_border_modes 1
+#define GL_IGNORE_BORDER_HP 0x8150
+#define GL_CONSTANT_BORDER_HP 0x8151
+#define GL_REPLICATE_BORDER_HP 0x8153
+#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154
+#endif /* GL_HP_convolution_border_modes */
+
+#ifndef GL_HP_image_transform
+#define GL_HP_image_transform 1
+#define GL_IMAGE_SCALE_X_HP 0x8155
+#define GL_IMAGE_SCALE_Y_HP 0x8156
+#define GL_IMAGE_TRANSLATE_X_HP 0x8157
+#define GL_IMAGE_TRANSLATE_Y_HP 0x8158
+#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159
+#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A
+#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B
+#define GL_IMAGE_MAG_FILTER_HP 0x815C
+#define GL_IMAGE_MIN_FILTER_HP 0x815D
+#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E
+#define GL_CUBIC_HP 0x815F
+#define GL_AVERAGE_HP 0x8160
+#define GL_IMAGE_TRANSFORM_2D_HP 0x8161
+#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162
+#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_HP_image_transform */
+
+#ifndef GL_HP_occlusion_test
+#define GL_HP_occlusion_test 1
+#define GL_OCCLUSION_TEST_HP 0x8165
+#define GL_OCCLUSION_TEST_RESULT_HP 0x8166
+#endif /* GL_HP_occlusion_test */
+
+#ifndef GL_HP_texture_lighting
+#define GL_HP_texture_lighting 1
+#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167
+#define GL_TEXTURE_POST_SPECULAR_HP 0x8168
+#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169
+#endif /* GL_HP_texture_lighting */
+
+#ifndef GL_IBM_cull_vertex
+#define GL_IBM_cull_vertex 1
+#define GL_CULL_VERTEX_IBM 103050
+#endif /* GL_IBM_cull_vertex */
+
+#ifndef GL_IBM_multimode_draw_arrays
+#define GL_IBM_multimode_draw_arrays 1
+typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
+typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
+GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride);
+#endif
+#endif /* GL_IBM_multimode_draw_arrays */
+
+#ifndef GL_IBM_rasterpos_clip
+#define GL_IBM_rasterpos_clip 1
+#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262
+#endif /* GL_IBM_rasterpos_clip */
+
+#ifndef GL_IBM_static_data
+#define GL_IBM_static_data 1
+#define GL_ALL_STATIC_DATA_IBM 103060
+#define GL_STATIC_VERTEX_ARRAY_IBM 103061
+typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target);
+#endif
+#endif /* GL_IBM_static_data */
+
+#ifndef GL_IBM_texture_mirrored_repeat
+#define GL_IBM_texture_mirrored_repeat 1
+#define GL_MIRRORED_REPEAT_IBM 0x8370
+#endif /* GL_IBM_texture_mirrored_repeat */
+
+#ifndef GL_IBM_vertex_array_lists
+#define GL_IBM_vertex_array_lists 1
+#define GL_VERTEX_ARRAY_LIST_IBM 103070
+#define GL_NORMAL_ARRAY_LIST_IBM 103071
+#define GL_COLOR_ARRAY_LIST_IBM 103072
+#define GL_INDEX_ARRAY_LIST_IBM 103073
+#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074
+#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075
+#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076
+#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077
+#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080
+#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081
+#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082
+#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083
+#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084
+#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085
+#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086
+#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087
+typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride);
+GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+#endif
+#endif /* GL_IBM_vertex_array_lists */
+
+#ifndef GL_INGR_blend_func_separate
+#define GL_INGR_blend_func_separate 1
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#endif
+#endif /* GL_INGR_blend_func_separate */
+
+#ifndef GL_INGR_color_clamp
+#define GL_INGR_color_clamp 1
+#define GL_RED_MIN_CLAMP_INGR 0x8560
+#define GL_GREEN_MIN_CLAMP_INGR 0x8561
+#define GL_BLUE_MIN_CLAMP_INGR 0x8562
+#define GL_ALPHA_MIN_CLAMP_INGR 0x8563
+#define GL_RED_MAX_CLAMP_INGR 0x8564
+#define GL_GREEN_MAX_CLAMP_INGR 0x8565
+#define GL_BLUE_MAX_CLAMP_INGR 0x8566
+#define GL_ALPHA_MAX_CLAMP_INGR 0x8567
+#endif /* GL_INGR_color_clamp */
+
+#ifndef GL_INGR_interlace_read
+#define GL_INGR_interlace_read 1
+#define GL_INTERLACE_READ_INGR 0x8568
+#endif /* GL_INGR_interlace_read */
+
+#ifndef GL_INTEL_fragment_shader_ordering
+#define GL_INTEL_fragment_shader_ordering 1
+#endif /* GL_INTEL_fragment_shader_ordering */
+
+#ifndef GL_INTEL_map_texture
+#define GL_INTEL_map_texture 1
+#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF
+#define GL_LAYOUT_DEFAULT_INTEL 0
+#define GL_LAYOUT_LINEAR_INTEL 1
+#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2
+typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level);
+typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture);
+GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level);
+GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout);
+#endif
+#endif /* GL_INTEL_map_texture */
+
+#ifndef GL_INTEL_parallel_arrays
+#define GL_INTEL_parallel_arrays 1
+#define GL_PARALLEL_ARRAYS_INTEL 0x83F4
+#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5
+#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6
+#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7
+#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8
+typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer);
+typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer);
+typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer);
+GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer);
+GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer);
+GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer);
+#endif
+#endif /* GL_INTEL_parallel_arrays */
+
+#ifndef GL_INTEL_performance_query
+#define GL_INTEL_performance_query 1
+#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000
+#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001
+#define GL_PERFQUERY_WAIT_INTEL 0x83FB
+#define GL_PERFQUERY_FLUSH_INTEL 0x83FA
+#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9
+#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0
+#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1
+#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2
+#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3
+#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4
+#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5
+#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8
+#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9
+#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA
+#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB
+#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC
+#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD
+#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE
+#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF
+#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500
+typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle);
+typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId);
+typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId);
+typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
+typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten);
+typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId);
+typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle);
+GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle);
+GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle);
+GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle);
+GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId);
+GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId);
+GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
+GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten);
+GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId);
+GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask);
+#endif
+#endif /* GL_INTEL_performance_query */
+
+#ifndef GL_MESAX_texture_stack
+#define GL_MESAX_texture_stack 1
+#define GL_TEXTURE_1D_STACK_MESAX 0x8759
+#define GL_TEXTURE_2D_STACK_MESAX 0x875A
+#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B
+#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C
+#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D
+#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E
+#endif /* GL_MESAX_texture_stack */
+
+#ifndef GL_MESA_pack_invert
+#define GL_MESA_pack_invert 1
+#define GL_PACK_INVERT_MESA 0x8758
+#endif /* GL_MESA_pack_invert */
+
+#ifndef GL_MESA_resize_buffers
+#define GL_MESA_resize_buffers 1
+typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glResizeBuffersMESA (void);
+#endif
+#endif /* GL_MESA_resize_buffers */
+
+#ifndef GL_MESA_window_pos
+#define GL_MESA_window_pos 1
+typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y);
+GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y);
+GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y);
+GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v);
+GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y);
+GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v);
+GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v);
+GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v);
+GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v);
+GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v);
+#endif
+#endif /* GL_MESA_window_pos */
+
+#ifndef GL_MESA_ycbcr_texture
+#define GL_MESA_ycbcr_texture 1
+#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB
+#define GL_YCBCR_MESA 0x8757
+#endif /* GL_MESA_ycbcr_texture */
+
+#ifndef GL_NVX_conditional_render
+#define GL_NVX_conditional_render 1
+typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id);
+GLAPI void APIENTRY glEndConditionalRenderNVX (void);
+#endif
+#endif /* GL_NVX_conditional_render */
+
+#ifndef GL_NVX_gpu_memory_info
+#define GL_NVX_gpu_memory_info 1
+#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047
+#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048
+#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049
+#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A
+#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B
+#endif /* GL_NVX_gpu_memory_info */
+
+#ifndef GL_NV_bindless_multi_draw_indirect
+#define GL_NV_bindless_multi_draw_indirect 1
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+#endif
+#endif /* GL_NV_bindless_multi_draw_indirect */
+
+#ifndef GL_NV_bindless_multi_draw_indirect_count
+#define GL_NV_bindless_multi_draw_indirect_count 1
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessCountNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessCountNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+#endif
+#endif /* GL_NV_bindless_multi_draw_indirect_count */
+
+#ifndef GL_NV_bindless_texture
+#define GL_NV_bindless_texture 1
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture);
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle);
+typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);
+typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture);
+GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler);
+GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle);
+GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle);
+GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access);
+GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle);
+GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value);
+GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value);
+GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle);
+GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle);
+#endif
+#endif /* GL_NV_bindless_texture */
+
+#ifndef GL_NV_blend_equation_advanced
+#define GL_NV_blend_equation_advanced 1
+#define GL_BLEND_OVERLAP_NV 0x9281
+#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280
+#define GL_BLUE_NV 0x1905
+#define GL_COLORBURN_NV 0x929A
+#define GL_COLORDODGE_NV 0x9299
+#define GL_CONJOINT_NV 0x9284
+#define GL_CONTRAST_NV 0x92A1
+#define GL_DARKEN_NV 0x9297
+#define GL_DIFFERENCE_NV 0x929E
+#define GL_DISJOINT_NV 0x9283
+#define GL_DST_ATOP_NV 0x928F
+#define GL_DST_IN_NV 0x928B
+#define GL_DST_NV 0x9287
+#define GL_DST_OUT_NV 0x928D
+#define GL_DST_OVER_NV 0x9289
+#define GL_EXCLUSION_NV 0x92A0
+#define GL_GREEN_NV 0x1904
+#define GL_HARDLIGHT_NV 0x929B
+#define GL_HARDMIX_NV 0x92A9
+#define GL_HSL_COLOR_NV 0x92AF
+#define GL_HSL_HUE_NV 0x92AD
+#define GL_HSL_LUMINOSITY_NV 0x92B0
+#define GL_HSL_SATURATION_NV 0x92AE
+#define GL_INVERT_OVG_NV 0x92B4
+#define GL_INVERT_RGB_NV 0x92A3
+#define GL_LIGHTEN_NV 0x9298
+#define GL_LINEARBURN_NV 0x92A5
+#define GL_LINEARDODGE_NV 0x92A4
+#define GL_LINEARLIGHT_NV 0x92A7
+#define GL_MINUS_CLAMPED_NV 0x92B3
+#define GL_MINUS_NV 0x929F
+#define GL_MULTIPLY_NV 0x9294
+#define GL_OVERLAY_NV 0x9296
+#define GL_PINLIGHT_NV 0x92A8
+#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2
+#define GL_PLUS_CLAMPED_NV 0x92B1
+#define GL_PLUS_DARKER_NV 0x9292
+#define GL_PLUS_NV 0x9291
+#define GL_RED_NV 0x1903
+#define GL_SCREEN_NV 0x9295
+#define GL_SOFTLIGHT_NV 0x929C
+#define GL_SRC_ATOP_NV 0x928E
+#define GL_SRC_IN_NV 0x928A
+#define GL_SRC_NV 0x9286
+#define GL_SRC_OUT_NV 0x928C
+#define GL_SRC_OVER_NV 0x9288
+#define GL_UNCORRELATED_NV 0x9282
+#define GL_VIVIDLIGHT_NV 0x92A6
+#define GL_XOR_NV 0x1506
+typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value);
+GLAPI void APIENTRY glBlendBarrierNV (void);
+#endif
+#endif /* GL_NV_blend_equation_advanced */
+
+#ifndef GL_NV_blend_equation_advanced_coherent
+#define GL_NV_blend_equation_advanced_coherent 1
+#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285
+#endif /* GL_NV_blend_equation_advanced_coherent */
+
+#ifndef GL_NV_blend_square
+#define GL_NV_blend_square 1
+#endif /* GL_NV_blend_square */
+
+#ifndef GL_NV_compute_program5
+#define GL_NV_compute_program5 1
+#define GL_COMPUTE_PROGRAM_NV 0x90FB
+#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC
+#endif /* GL_NV_compute_program5 */
+
+#ifndef GL_NV_conditional_render
+#define GL_NV_conditional_render 1
+#define GL_QUERY_WAIT_NV 0x8E13
+#define GL_QUERY_NO_WAIT_NV 0x8E14
+#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16
+typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode);
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode);
+GLAPI void APIENTRY glEndConditionalRenderNV (void);
+#endif
+#endif /* GL_NV_conditional_render */
+
+#ifndef GL_NV_copy_depth_to_color
+#define GL_NV_copy_depth_to_color 1
+#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E
+#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F
+#endif /* GL_NV_copy_depth_to_color */
+
+#ifndef GL_NV_copy_image
+#define GL_NV_copy_image 1
+typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+#endif /* GL_NV_copy_image */
+
+#ifndef GL_NV_deep_texture3D
+#define GL_NV_deep_texture3D 1
+#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0
+#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1
+#endif /* GL_NV_deep_texture3D */
+
+#ifndef GL_NV_depth_buffer_float
+#define GL_NV_depth_buffer_float 1
+#define GL_DEPTH_COMPONENT32F_NV 0x8DAB
+#define GL_DEPTH32F_STENCIL8_NV 0x8DAC
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD
+#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF
+typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth);
+typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY glClearDepthdNV (GLdouble depth);
+GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax);
+#endif
+#endif /* GL_NV_depth_buffer_float */
+
+#ifndef GL_NV_depth_clamp
+#define GL_NV_depth_clamp 1
+#define GL_DEPTH_CLAMP_NV 0x864F
+#endif /* GL_NV_depth_clamp */
+
+#ifndef GL_NV_draw_texture
+#define GL_NV_draw_texture 1
+typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+#endif
+#endif /* GL_NV_draw_texture */
+
+#ifndef GL_NV_evaluators
+#define GL_NV_evaluators 1
+#define GL_EVAL_2D_NV 0x86C0
+#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1
+#define GL_MAP_TESSELLATION_NV 0x86C2
+#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3
+#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4
+#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5
+#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6
+#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7
+#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8
+#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9
+#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA
+#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB
+#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC
+#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD
+#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE
+#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF
+#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0
+#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1
+#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2
+#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3
+#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4
+#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5
+#define GL_MAX_MAP_TESSELLATION_NV 0x86D6
+#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7
+typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points);
+typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points);
+typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points);
+GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points);
+GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode);
+#endif
+#endif /* GL_NV_evaluators */
+
+#ifndef GL_NV_explicit_multisample
+#define GL_NV_explicit_multisample 1
+#define GL_SAMPLE_POSITION_NV 0x8E50
+#define GL_SAMPLE_MASK_NV 0x8E51
+#define GL_SAMPLE_MASK_VALUE_NV 0x8E52
+#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53
+#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54
+#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55
+#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56
+#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57
+#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58
+#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59
+typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val);
+typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask);
+typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val);
+GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask);
+GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer);
+#endif
+#endif /* GL_NV_explicit_multisample */
+
+#ifndef GL_NV_fence
+#define GL_NV_fence 1
+#define GL_ALL_COMPLETED_NV 0x84F2
+#define GL_FENCE_STATUS_NV 0x84F3
+#define GL_FENCE_CONDITION_NV 0x84F4
+typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);
+typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);
+typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences);
+GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences);
+GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence);
+GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence);
+GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params);
+GLAPI void APIENTRY glFinishFenceNV (GLuint fence);
+GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition);
+#endif
+#endif /* GL_NV_fence */
+
+#ifndef GL_NV_float_buffer
+#define GL_NV_float_buffer 1
+#define GL_FLOAT_R_NV 0x8880
+#define GL_FLOAT_RG_NV 0x8881
+#define GL_FLOAT_RGB_NV 0x8882
+#define GL_FLOAT_RGBA_NV 0x8883
+#define GL_FLOAT_R16_NV 0x8884
+#define GL_FLOAT_R32_NV 0x8885
+#define GL_FLOAT_RG16_NV 0x8886
+#define GL_FLOAT_RG32_NV 0x8887
+#define GL_FLOAT_RGB16_NV 0x8888
+#define GL_FLOAT_RGB32_NV 0x8889
+#define GL_FLOAT_RGBA16_NV 0x888A
+#define GL_FLOAT_RGBA32_NV 0x888B
+#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C
+#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D
+#define GL_FLOAT_RGBA_MODE_NV 0x888E
+#endif /* GL_NV_float_buffer */
+
+#ifndef GL_NV_fog_distance
+#define GL_NV_fog_distance 1
+#define GL_FOG_DISTANCE_MODE_NV 0x855A
+#define GL_EYE_RADIAL_NV 0x855B
+#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C
+#endif /* GL_NV_fog_distance */
+
+#ifndef GL_NV_fragment_program
+#define GL_NV_fragment_program 1
+#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868
+#define GL_FRAGMENT_PROGRAM_NV 0x8870
+#define GL_MAX_TEXTURE_COORDS_NV 0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872
+#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873
+#define GL_PROGRAM_ERROR_STRING_NV 0x8874
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v);
+typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v);
+GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v);
+GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);
+GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);
+#endif
+#endif /* GL_NV_fragment_program */
+
+#ifndef GL_NV_fragment_program2
+#define GL_NV_fragment_program2 1
+#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4
+#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5
+#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6
+#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7
+#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8
+#endif /* GL_NV_fragment_program2 */
+
+#ifndef GL_NV_fragment_program4
+#define GL_NV_fragment_program4 1
+#endif /* GL_NV_fragment_program4 */
+
+#ifndef GL_NV_fragment_program_option
+#define GL_NV_fragment_program_option 1
+#endif /* GL_NV_fragment_program_option */
+
+#ifndef GL_NV_framebuffer_multisample_coverage
+#define GL_NV_framebuffer_multisample_coverage 1
+#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB
+#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10
+#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11
+#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_NV_framebuffer_multisample_coverage */
+
+#ifndef GL_NV_geometry_program4
+#define GL_NV_geometry_program4 1
+#define GL_GEOMETRY_PROGRAM_NV 0x8C26
+#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27
+#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28
+typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit);
+GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#endif
+#endif /* GL_NV_geometry_program4 */
+
+#ifndef GL_NV_geometry_shader4
+#define GL_NV_geometry_shader4 1
+#endif /* GL_NV_geometry_shader4 */
+
+#ifndef GL_NV_gpu_program4
+#define GL_NV_gpu_program4 1
+#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905
+#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906
+#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907
+#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908
+#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909
+#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5
+#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params);
+GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params);
+GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params);
+GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params);
+GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params);
+GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params);
+GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params);
+GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params);
+#endif
+#endif /* GL_NV_gpu_program4 */
+
+#ifndef GL_NV_gpu_program5
+#define GL_NV_gpu_program5 1
+#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C
+#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F
+#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44
+#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45
+typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param);
+#endif
+#endif /* GL_NV_gpu_program5 */
+
+#ifndef GL_NV_gpu_program5_mem_extended
+#define GL_NV_gpu_program5_mem_extended 1
+#endif /* GL_NV_gpu_program5_mem_extended */
+
+#ifndef GL_NV_gpu_shader5
+#define GL_NV_gpu_shader5 1
+#endif /* GL_NV_gpu_shader5 */
+
+#ifndef GL_NV_half_float
+#define GL_NV_half_float 1
+typedef unsigned short GLhalfNV;
+#define GL_HALF_FLOAT_NV 0x140B
+typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y);
+typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);
+typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);
+typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s);
+typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t);
+typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog);
+typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y);
+GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z);
+GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);
+GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);
+GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s);
+GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t);
+GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r);
+GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s);
+GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t);
+GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);
+GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog);
+GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog);
+GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight);
+GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight);
+GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x);
+GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y);
+GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);
+GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+#endif
+#endif /* GL_NV_half_float */
+
+#ifndef GL_NV_light_max_exponent
+#define GL_NV_light_max_exponent 1
+#define GL_MAX_SHININESS_NV 0x8504
+#define GL_MAX_SPOT_EXPONENT_NV 0x8505
+#endif /* GL_NV_light_max_exponent */
+
+#ifndef GL_NV_multisample_coverage
+#define GL_NV_multisample_coverage 1
+#define GL_COLOR_SAMPLES_NV 0x8E20
+#endif /* GL_NV_multisample_coverage */
+
+#ifndef GL_NV_multisample_filter_hint
+#define GL_NV_multisample_filter_hint 1
+#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534
+#endif /* GL_NV_multisample_filter_hint */
+
+#ifndef GL_NV_occlusion_query
+#define GL_NV_occlusion_query 1
+#define GL_PIXEL_COUNTER_BITS_NV 0x8864
+#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865
+#define GL_PIXEL_COUNT_NV 0x8866
+#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867
+typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void);
+typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids);
+GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id);
+GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id);
+GLAPI void APIENTRY glEndOcclusionQueryNV (void);
+GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params);
+#endif
+#endif /* GL_NV_occlusion_query */
+
+#ifndef GL_NV_packed_depth_stencil
+#define GL_NV_packed_depth_stencil 1
+#define GL_DEPTH_STENCIL_NV 0x84F9
+#define GL_UNSIGNED_INT_24_8_NV 0x84FA
+#endif /* GL_NV_packed_depth_stencil */
+
+#ifndef GL_NV_parameter_buffer_object
+#define GL_NV_parameter_buffer_object 1
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1
+#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2
+#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3
+#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4
+typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params);
+GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params);
+#endif
+#endif /* GL_NV_parameter_buffer_object */
+
+#ifndef GL_NV_parameter_buffer_object2
+#define GL_NV_parameter_buffer_object2 1
+#endif /* GL_NV_parameter_buffer_object2 */
+
+#ifndef GL_NV_path_rendering
+#define GL_NV_path_rendering 1
+#define GL_PATH_FORMAT_SVG_NV 0x9070
+#define GL_PATH_FORMAT_PS_NV 0x9071
+#define GL_STANDARD_FONT_NAME_NV 0x9072
+#define GL_SYSTEM_FONT_NAME_NV 0x9073
+#define GL_FILE_NAME_NV 0x9074
+#define GL_PATH_STROKE_WIDTH_NV 0x9075
+#define GL_PATH_END_CAPS_NV 0x9076
+#define GL_PATH_INITIAL_END_CAP_NV 0x9077
+#define GL_PATH_TERMINAL_END_CAP_NV 0x9078
+#define GL_PATH_JOIN_STYLE_NV 0x9079
+#define GL_PATH_MITER_LIMIT_NV 0x907A
+#define GL_PATH_DASH_CAPS_NV 0x907B
+#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C
+#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D
+#define GL_PATH_DASH_OFFSET_NV 0x907E
+#define GL_PATH_CLIENT_LENGTH_NV 0x907F
+#define GL_PATH_FILL_MODE_NV 0x9080
+#define GL_PATH_FILL_MASK_NV 0x9081
+#define GL_PATH_FILL_COVER_MODE_NV 0x9082
+#define GL_PATH_STROKE_COVER_MODE_NV 0x9083
+#define GL_PATH_STROKE_MASK_NV 0x9084
+#define GL_COUNT_UP_NV 0x9088
+#define GL_COUNT_DOWN_NV 0x9089
+#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A
+#define GL_CONVEX_HULL_NV 0x908B
+#define GL_BOUNDING_BOX_NV 0x908D
+#define GL_TRANSLATE_X_NV 0x908E
+#define GL_TRANSLATE_Y_NV 0x908F
+#define GL_TRANSLATE_2D_NV 0x9090
+#define GL_TRANSLATE_3D_NV 0x9091
+#define GL_AFFINE_2D_NV 0x9092
+#define GL_AFFINE_3D_NV 0x9094
+#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096
+#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098
+#define GL_UTF8_NV 0x909A
+#define GL_UTF16_NV 0x909B
+#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C
+#define GL_PATH_COMMAND_COUNT_NV 0x909D
+#define GL_PATH_COORD_COUNT_NV 0x909E
+#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F
+#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0
+#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1
+#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2
+#define GL_SQUARE_NV 0x90A3
+#define GL_ROUND_NV 0x90A4
+#define GL_TRIANGULAR_NV 0x90A5
+#define GL_BEVEL_NV 0x90A6
+#define GL_MITER_REVERT_NV 0x90A7
+#define GL_MITER_TRUNCATE_NV 0x90A8
+#define GL_SKIP_MISSING_GLYPH_NV 0x90A9
+#define GL_USE_MISSING_GLYPH_NV 0x90AA
+#define GL_PATH_ERROR_POSITION_NV 0x90AB
+#define GL_PATH_FOG_GEN_MODE_NV 0x90AC
+#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD
+#define GL_ADJACENT_PAIRS_NV 0x90AE
+#define GL_FIRST_TO_REST_NV 0x90AF
+#define GL_PATH_GEN_MODE_NV 0x90B0
+#define GL_PATH_GEN_COEFF_NV 0x90B1
+#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2
+#define GL_PATH_GEN_COMPONENTS_NV 0x90B3
+#define GL_PATH_STENCIL_FUNC_NV 0x90B7
+#define GL_PATH_STENCIL_REF_NV 0x90B8
+#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9
+#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD
+#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE
+#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF
+#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4
+#define GL_MOVE_TO_RESETS_NV 0x90B5
+#define GL_MOVE_TO_CONTINUES_NV 0x90B6
+#define GL_CLOSE_PATH_NV 0x00
+#define GL_MOVE_TO_NV 0x02
+#define GL_RELATIVE_MOVE_TO_NV 0x03
+#define GL_LINE_TO_NV 0x04
+#define GL_RELATIVE_LINE_TO_NV 0x05
+#define GL_HORIZONTAL_LINE_TO_NV 0x06
+#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07
+#define GL_VERTICAL_LINE_TO_NV 0x08
+#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09
+#define GL_QUADRATIC_CURVE_TO_NV 0x0A
+#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B
+#define GL_CUBIC_CURVE_TO_NV 0x0C
+#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D
+#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E
+#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F
+#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10
+#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11
+#define GL_SMALL_CCW_ARC_TO_NV 0x12
+#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13
+#define GL_SMALL_CW_ARC_TO_NV 0x14
+#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15
+#define GL_LARGE_CCW_ARC_TO_NV 0x16
+#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17
+#define GL_LARGE_CW_ARC_TO_NV 0x18
+#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19
+#define GL_RESTART_PATH_NV 0xF0
+#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2
+#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4
+#define GL_RECT_NV 0xF6
+#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8
+#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA
+#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC
+#define GL_ARC_TO_NV 0xFE
+#define GL_RELATIVE_ARC_TO_NV 0xFF
+#define GL_BOLD_BIT_NV 0x01
+#define GL_ITALIC_BIT_NV 0x02
+#define GL_GLYPH_WIDTH_BIT_NV 0x01
+#define GL_GLYPH_HEIGHT_BIT_NV 0x02
+#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04
+#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08
+#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10
+#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20
+#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40
+#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80
+#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100
+#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000
+#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000
+#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000
+#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000
+#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000
+#define GL_FONT_ASCENDER_BIT_NV 0x00200000
+#define GL_FONT_DESCENDER_BIT_NV 0x00400000
+#define GL_FONT_HEIGHT_BIT_NV 0x00800000
+#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000
+#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000
+#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000
+#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000
+#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000
+#define GL_PRIMARY_COLOR_NV 0x852C
+#define GL_SECONDARY_COLOR_NV 0x852D
+#define GL_ROUNDED_RECT_NV 0xE8
+#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9
+#define GL_ROUNDED_RECT2_NV 0xEA
+#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB
+#define GL_ROUNDED_RECT4_NV 0xEC
+#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED
+#define GL_ROUNDED_RECT8_NV 0xEE
+#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF
+#define GL_RELATIVE_RECT_NV 0xF7
+#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368
+#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369
+#define GL_FONT_UNAVAILABLE_NV 0x936A
+#define GL_FONT_UNINTELLIGIBLE_NV 0x936B
+#define GL_CONIC_CURVE_TO_NV 0x1A
+#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B
+#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000
+#define GL_STANDARD_FONT_FORMAT_NV 0x936C
+#define GL_2_BYTES_NV 0x1407
+#define GL_3_BYTES_NV 0x1408
+#define GL_4_BYTES_NV 0x1409
+#define GL_EYE_LINEAR_NV 0x2400
+#define GL_OBJECT_LINEAR_NV 0x2401
+#define GL_CONSTANT_NV 0x8576
+#define GL_PATH_PROJECTION_NV 0x1701
+#define GL_PATH_MODELVIEW_NV 0x1700
+#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3
+#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6
+#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36
+#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3
+#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4
+#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7
+#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38
+#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4
+#define GL_FRAGMENT_INPUT_NV 0x936D
+typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range);
+typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range);
+typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path);
+typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString);
+typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath);
+typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value);
+typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units);
+typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func);
+typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs);
+typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs);
+typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode);
+typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value);
+typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value);
+typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands);
+typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords);
+typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray);
+typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value);
+typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value);
+typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value);
+typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value);
+typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y);
+typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments);
+typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+typedef void (APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]);
+typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef GLenum (APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs);
+typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range);
+GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range);
+GLAPI GLboolean APIENTRY glIsPathNV (GLuint path);
+GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString);
+GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath);
+GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value);
+GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value);
+GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value);
+GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value);
+GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask);
+GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units);
+GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask);
+GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask);
+GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func);
+GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs);
+GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs);
+GLAPI void APIENTRY glPathFogGenNV (GLenum genMode);
+GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode);
+GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode);
+GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value);
+GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value);
+GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands);
+GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords);
+GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray);
+GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value);
+GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value);
+GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value);
+GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value);
+GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y);
+GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments);
+GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+GLAPI void APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+GLAPI void APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+GLAPI void APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI GLenum APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]);
+GLAPI GLenum APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI GLenum APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI void APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs);
+GLAPI void APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params);
+#endif
+#endif /* GL_NV_path_rendering */
+
+#ifndef GL_NV_pixel_data_range
+#define GL_NV_pixel_data_range 1
+#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878
+#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879
+#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A
+#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B
+#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C
+#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D
+typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer);
+typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer);
+GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target);
+#endif
+#endif /* GL_NV_pixel_data_range */
+
+#ifndef GL_NV_point_sprite
+#define GL_NV_point_sprite 1
+#define GL_POINT_SPRITE_NV 0x8861
+#define GL_COORD_REPLACE_NV 0x8862
+#define GL_POINT_SPRITE_R_MODE_NV 0x8863
+typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param);
+GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params);
+#endif
+#endif /* GL_NV_point_sprite */
+
+#ifndef GL_NV_present_video
+#define GL_NV_present_video 1
+#define GL_FRAME_NV 0x8E26
+#define GL_FIELDS_NV 0x8E27
+#define GL_CURRENT_TIME_NV 0x8E28
+#define GL_NUM_FILL_STREAMS_NV 0x8E29
+#define GL_PRESENT_TIME_NV 0x8E2A
+#define GL_PRESENT_DURATION_NV 0x8E2B
+typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1);
+typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3);
+typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1);
+GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3);
+GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params);
+GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params);
+#endif
+#endif /* GL_NV_present_video */
+
+#ifndef GL_NV_primitive_restart
+#define GL_NV_primitive_restart 1
+#define GL_PRIMITIVE_RESTART_NV 0x8558
+#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void);
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPrimitiveRestartNV (void);
+GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index);
+#endif
+#endif /* GL_NV_primitive_restart */
+
+#ifndef GL_NV_register_combiners
+#define GL_NV_register_combiners 1
+#define GL_REGISTER_COMBINERS_NV 0x8522
+#define GL_VARIABLE_A_NV 0x8523
+#define GL_VARIABLE_B_NV 0x8524
+#define GL_VARIABLE_C_NV 0x8525
+#define GL_VARIABLE_D_NV 0x8526
+#define GL_VARIABLE_E_NV 0x8527
+#define GL_VARIABLE_F_NV 0x8528
+#define GL_VARIABLE_G_NV 0x8529
+#define GL_CONSTANT_COLOR0_NV 0x852A
+#define GL_CONSTANT_COLOR1_NV 0x852B
+#define GL_SPARE0_NV 0x852E
+#define GL_SPARE1_NV 0x852F
+#define GL_DISCARD_NV 0x8530
+#define GL_E_TIMES_F_NV 0x8531
+#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
+#define GL_UNSIGNED_IDENTITY_NV 0x8536
+#define GL_UNSIGNED_INVERT_NV 0x8537
+#define GL_EXPAND_NORMAL_NV 0x8538
+#define GL_EXPAND_NEGATE_NV 0x8539
+#define GL_HALF_BIAS_NORMAL_NV 0x853A
+#define GL_HALF_BIAS_NEGATE_NV 0x853B
+#define GL_SIGNED_IDENTITY_NV 0x853C
+#define GL_SIGNED_NEGATE_NV 0x853D
+#define GL_SCALE_BY_TWO_NV 0x853E
+#define GL_SCALE_BY_FOUR_NV 0x853F
+#define GL_SCALE_BY_ONE_HALF_NV 0x8540
+#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541
+#define GL_COMBINER_INPUT_NV 0x8542
+#define GL_COMBINER_MAPPING_NV 0x8543
+#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544
+#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545
+#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546
+#define GL_COMBINER_MUX_SUM_NV 0x8547
+#define GL_COMBINER_SCALE_NV 0x8548
+#define GL_COMBINER_BIAS_NV 0x8549
+#define GL_COMBINER_AB_OUTPUT_NV 0x854A
+#define GL_COMBINER_CD_OUTPUT_NV 0x854B
+#define GL_COMBINER_SUM_OUTPUT_NV 0x854C
+#define GL_MAX_GENERAL_COMBINERS_NV 0x854D
+#define GL_NUM_GENERAL_COMBINERS_NV 0x854E
+#define GL_COLOR_SUM_CLAMP_NV 0x854F
+#define GL_COMBINER0_NV 0x8550
+#define GL_COMBINER1_NV 0x8551
+#define GL_COMBINER2_NV 0x8552
+#define GL_COMBINER3_NV 0x8553
+#define GL_COMBINER4_NV 0x8554
+#define GL_COMBINER5_NV 0x8555
+#define GL_COMBINER6_NV 0x8556
+#define GL_COMBINER7_NV 0x8557
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param);
+GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params);
+#endif
+#endif /* GL_NV_register_combiners */
+
+#ifndef GL_NV_register_combiners2
+#define GL_NV_register_combiners2 1
+#define GL_PER_STAGE_CONSTANTS_NV 0x8535
+typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_NV_register_combiners2 */
+
+#ifndef GL_NV_shader_atomic_counters
+#define GL_NV_shader_atomic_counters 1
+#endif /* GL_NV_shader_atomic_counters */
+
+#ifndef GL_NV_shader_atomic_float
+#define GL_NV_shader_atomic_float 1
+#endif /* GL_NV_shader_atomic_float */
+
+#ifndef GL_NV_shader_atomic_int64
+#define GL_NV_shader_atomic_int64 1
+#endif /* GL_NV_shader_atomic_int64 */
+
+#ifndef GL_NV_shader_buffer_load
+#define GL_NV_shader_buffer_load 1
+#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D
+#define GL_GPU_ADDRESS_NV 0x8F34
+#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35
+typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access);
+typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access);
+typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer);
+typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result);
+typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value);
+typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access);
+GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target);
+GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target);
+GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access);
+GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer);
+GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer);
+GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result);
+GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value);
+GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value);
+GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#endif
+#endif /* GL_NV_shader_buffer_load */
+
+#ifndef GL_NV_shader_buffer_store
+#define GL_NV_shader_buffer_store 1
+#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010
+#endif /* GL_NV_shader_buffer_store */
+
+#ifndef GL_NV_shader_storage_buffer_object
+#define GL_NV_shader_storage_buffer_object 1
+#endif /* GL_NV_shader_storage_buffer_object */
+
+#ifndef GL_NV_shader_thread_group
+#define GL_NV_shader_thread_group 1
+#define GL_WARP_SIZE_NV 0x9339
+#define GL_WARPS_PER_SM_NV 0x933A
+#define GL_SM_COUNT_NV 0x933B
+#endif /* GL_NV_shader_thread_group */
+
+#ifndef GL_NV_shader_thread_shuffle
+#define GL_NV_shader_thread_shuffle 1
+#endif /* GL_NV_shader_thread_shuffle */
+
+#ifndef GL_NV_tessellation_program5
+#define GL_NV_tessellation_program5 1
+#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8
+#define GL_TESS_CONTROL_PROGRAM_NV 0x891E
+#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F
+#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74
+#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75
+#endif /* GL_NV_tessellation_program5 */
+
+#ifndef GL_NV_texgen_emboss
+#define GL_NV_texgen_emboss 1
+#define GL_EMBOSS_LIGHT_NV 0x855D
+#define GL_EMBOSS_CONSTANT_NV 0x855E
+#define GL_EMBOSS_MAP_NV 0x855F
+#endif /* GL_NV_texgen_emboss */
+
+#ifndef GL_NV_texgen_reflection
+#define GL_NV_texgen_reflection 1
+#define GL_NORMAL_MAP_NV 0x8511
+#define GL_REFLECTION_MAP_NV 0x8512
+#endif /* GL_NV_texgen_reflection */
+
+#ifndef GL_NV_texture_barrier
+#define GL_NV_texture_barrier 1
+typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureBarrierNV (void);
+#endif
+#endif /* GL_NV_texture_barrier */
+
+#ifndef GL_NV_texture_compression_vtc
+#define GL_NV_texture_compression_vtc 1
+#endif /* GL_NV_texture_compression_vtc */
+
+#ifndef GL_NV_texture_env_combine4
+#define GL_NV_texture_env_combine4 1
+#define GL_COMBINE4_NV 0x8503
+#define GL_SOURCE3_RGB_NV 0x8583
+#define GL_SOURCE3_ALPHA_NV 0x858B
+#define GL_OPERAND3_RGB_NV 0x8593
+#define GL_OPERAND3_ALPHA_NV 0x859B
+#endif /* GL_NV_texture_env_combine4 */
+
+#ifndef GL_NV_texture_expand_normal
+#define GL_NV_texture_expand_normal 1
+#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F
+#endif /* GL_NV_texture_expand_normal */
+
+#ifndef GL_NV_texture_multisample
+#define GL_NV_texture_multisample 1
+#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045
+#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046
+typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+#endif
+#endif /* GL_NV_texture_multisample */
+
+#ifndef GL_NV_texture_rectangle
+#define GL_NV_texture_rectangle 1
+#define GL_TEXTURE_RECTANGLE_NV 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8
+#endif /* GL_NV_texture_rectangle */
+
+#ifndef GL_NV_texture_shader
+#define GL_NV_texture_shader 1
+#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C
+#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D
+#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E
+#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB
+#define GL_DSDT_MAG_INTENSITY_NV 0x86DC
+#define GL_SHADER_CONSISTENT_NV 0x86DD
+#define GL_TEXTURE_SHADER_NV 0x86DE
+#define GL_SHADER_OPERATION_NV 0x86DF
+#define GL_CULL_MODES_NV 0x86E0
+#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1
+#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2
+#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3
+#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1
+#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2
+#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3
+#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4
+#define GL_CONST_EYE_NV 0x86E5
+#define GL_PASS_THROUGH_NV 0x86E6
+#define GL_CULL_FRAGMENT_NV 0x86E7
+#define GL_OFFSET_TEXTURE_2D_NV 0x86E8
+#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9
+#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA
+#define GL_DOT_PRODUCT_NV 0x86EC
+#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED
+#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE
+#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0
+#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1
+#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2
+#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3
+#define GL_HILO_NV 0x86F4
+#define GL_DSDT_NV 0x86F5
+#define GL_DSDT_MAG_NV 0x86F6
+#define GL_DSDT_MAG_VIB_NV 0x86F7
+#define GL_HILO16_NV 0x86F8
+#define GL_SIGNED_HILO_NV 0x86F9
+#define GL_SIGNED_HILO16_NV 0x86FA
+#define GL_SIGNED_RGBA_NV 0x86FB
+#define GL_SIGNED_RGBA8_NV 0x86FC
+#define GL_SIGNED_RGB_NV 0x86FE
+#define GL_SIGNED_RGB8_NV 0x86FF
+#define GL_SIGNED_LUMINANCE_NV 0x8701
+#define GL_SIGNED_LUMINANCE8_NV 0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704
+#define GL_SIGNED_ALPHA_NV 0x8705
+#define GL_SIGNED_ALPHA8_NV 0x8706
+#define GL_SIGNED_INTENSITY_NV 0x8707
+#define GL_SIGNED_INTENSITY8_NV 0x8708
+#define GL_DSDT8_NV 0x8709
+#define GL_DSDT8_MAG8_NV 0x870A
+#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D
+#define GL_HI_SCALE_NV 0x870E
+#define GL_LO_SCALE_NV 0x870F
+#define GL_DS_SCALE_NV 0x8710
+#define GL_DT_SCALE_NV 0x8711
+#define GL_MAGNITUDE_SCALE_NV 0x8712
+#define GL_VIBRANCE_SCALE_NV 0x8713
+#define GL_HI_BIAS_NV 0x8714
+#define GL_LO_BIAS_NV 0x8715
+#define GL_DS_BIAS_NV 0x8716
+#define GL_DT_BIAS_NV 0x8717
+#define GL_MAGNITUDE_BIAS_NV 0x8718
+#define GL_VIBRANCE_BIAS_NV 0x8719
+#define GL_TEXTURE_BORDER_VALUES_NV 0x871A
+#define GL_TEXTURE_HI_SIZE_NV 0x871B
+#define GL_TEXTURE_LO_SIZE_NV 0x871C
+#define GL_TEXTURE_DS_SIZE_NV 0x871D
+#define GL_TEXTURE_DT_SIZE_NV 0x871E
+#define GL_TEXTURE_MAG_SIZE_NV 0x871F
+#endif /* GL_NV_texture_shader */
+
+#ifndef GL_NV_texture_shader2
+#define GL_NV_texture_shader2 1
+#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF
+#endif /* GL_NV_texture_shader2 */
+
+#ifndef GL_NV_texture_shader3
+#define GL_NV_texture_shader3 1
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853
+#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854
+#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857
+#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858
+#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859
+#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A
+#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B
+#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C
+#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D
+#define GL_HILO8_NV 0x885E
+#define GL_SIGNED_HILO8_NV 0x885F
+#define GL_FORCE_BLUE_TO_ONE_NV 0x8860
+#endif /* GL_NV_texture_shader3 */
+
+#ifndef GL_NV_transform_feedback
+#define GL_NV_transform_feedback 1
+#define GL_BACK_PRIMARY_COLOR_NV 0x8C77
+#define GL_BACK_SECONDARY_COLOR_NV 0x8C78
+#define GL_TEXTURE_COORD_NV 0x8C79
+#define GL_CLIP_DISTANCE_NV 0x8C7A
+#define GL_VERTEX_ID_NV 0x8C7B
+#define GL_PRIMITIVE_ID_NV 0x8C7C
+#define GL_GENERIC_ATTRIB_NV 0x8C7D
+#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80
+#define GL_ACTIVE_VARYINGS_NV 0x8C81
+#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85
+#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86
+#define GL_PRIMITIVES_GENERATED_NV 0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88
+#define GL_RASTERIZER_DISCARD_NV 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C
+#define GL_SEPARATE_ATTRIBS_NV 0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F
+#define GL_LAYER_NV 0x8DAA
+#define GL_NEXT_BUFFER_NV -2
+#define GL_SKIP_COMPONENTS4_NV -3
+#define GL_SKIP_COMPONENTS3_NV -4
+#define GL_SKIP_COMPONENTS2_NV -5
+#define GL_SKIP_COMPONENTS1_NV -6
+typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode);
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode);
+GLAPI void APIENTRY glEndTransformFeedbackNV (void);
+GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLsizei count, const GLint *attribs, GLenum bufferMode);
+GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode);
+GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name);
+GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location);
+GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode);
+#endif
+#endif /* GL_NV_transform_feedback */
+
+#ifndef GL_NV_transform_feedback2
+#define GL_NV_transform_feedback2 1
+#define GL_TRANSFORM_FEEDBACK_NV 0x8E22
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25
+typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids);
+typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void);
+typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id);
+GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids);
+GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids);
+GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id);
+GLAPI void APIENTRY glPauseTransformFeedbackNV (void);
+GLAPI void APIENTRY glResumeTransformFeedbackNV (void);
+GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id);
+#endif
+#endif /* GL_NV_transform_feedback2 */
+
+#ifndef GL_NV_uniform_buffer_unified_memory
+#define GL_NV_uniform_buffer_unified_memory 1
+#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E
+#define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F
+#define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370
+#endif /* GL_NV_uniform_buffer_unified_memory */
+
+#ifndef GL_NV_vdpau_interop
+#define GL_NV_vdpau_interop 1
+typedef GLintptr GLvdpauSurfaceNV;
+#define GL_SURFACE_STATE_NV 0x86EB
+#define GL_SURFACE_REGISTERED_NV 0x86FD
+#define GL_SURFACE_MAPPED_NV 0x8700
+#define GL_WRITE_DISCARD_NV 0x88BE
+typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress);
+typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void);
+typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface);
+typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface);
+typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access);
+typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces);
+typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress);
+GLAPI void APIENTRY glVDPAUFiniNV (void);
+GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface);
+GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface);
+GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access);
+GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces);
+GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces);
+#endif
+#endif /* GL_NV_vdpau_interop */
+
+#ifndef GL_NV_vertex_array_range
+#define GL_NV_vertex_array_range 1
+#define GL_VERTEX_ARRAY_RANGE_NV 0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E
+#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F
+#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520
+#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521
+typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);
+typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushVertexArrayRangeNV (void);
+GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer);
+#endif
+#endif /* GL_NV_vertex_array_range */
+
+#ifndef GL_NV_vertex_array_range2
+#define GL_NV_vertex_array_range2 1
+#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533
+#endif /* GL_NV_vertex_array_range2 */
+
+#ifndef GL_NV_vertex_attrib_integer_64bit
+#define GL_NV_vertex_attrib_integer_64bit 1
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x);
+GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x);
+GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params);
+GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride);
+#endif
+#endif /* GL_NV_vertex_attrib_integer_64bit */
+
+#ifndef GL_NV_vertex_buffer_unified_memory
+#define GL_NV_vertex_buffer_unified_memory 1
+#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E
+#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F
+#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20
+#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21
+#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22
+#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23
+#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24
+#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25
+#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26
+#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27
+#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28
+#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29
+#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A
+#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B
+#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C
+#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D
+#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E
+#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F
+#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30
+#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31
+#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32
+#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33
+#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40
+#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41
+#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42
+typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length);
+GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride);
+GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result);
+#endif
+#endif /* GL_NV_vertex_buffer_unified_memory */
+
+#ifndef GL_NV_vertex_program
+#define GL_NV_vertex_program 1
+#define GL_VERTEX_PROGRAM_NV 0x8620
+#define GL_VERTEX_STATE_PROGRAM_NV 0x8621
+#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623
+#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624
+#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625
+#define GL_CURRENT_ATTRIB_NV 0x8626
+#define GL_PROGRAM_LENGTH_NV 0x8627
+#define GL_PROGRAM_STRING_NV 0x8628
+#define GL_MODELVIEW_PROJECTION_NV 0x8629
+#define GL_IDENTITY_NV 0x862A
+#define GL_INVERSE_NV 0x862B
+#define GL_TRANSPOSE_NV 0x862C
+#define GL_INVERSE_TRANSPOSE_NV 0x862D
+#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E
+#define GL_MAX_TRACK_MATRICES_NV 0x862F
+#define GL_MATRIX0_NV 0x8630
+#define GL_MATRIX1_NV 0x8631
+#define GL_MATRIX2_NV 0x8632
+#define GL_MATRIX3_NV 0x8633
+#define GL_MATRIX4_NV 0x8634
+#define GL_MATRIX5_NV 0x8635
+#define GL_MATRIX6_NV 0x8636
+#define GL_MATRIX7_NV 0x8637
+#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640
+#define GL_CURRENT_MATRIX_NV 0x8641
+#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643
+#define GL_PROGRAM_PARAMETER_NV 0x8644
+#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645
+#define GL_PROGRAM_TARGET_NV 0x8646
+#define GL_PROGRAM_RESIDENT_NV 0x8647
+#define GL_TRACK_MATRIX_NV 0x8648
+#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649
+#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A
+#define GL_PROGRAM_ERROR_POSITION_NV 0x864B
+#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650
+#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651
+#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652
+#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653
+#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654
+#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655
+#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656
+#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657
+#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658
+#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659
+#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A
+#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B
+#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C
+#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D
+#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E
+#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F
+#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660
+#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661
+#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662
+#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663
+#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664
+#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665
+#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666
+#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667
+#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668
+#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669
+#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A
+#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B
+#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C
+#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D
+#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E
+#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F
+#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670
+#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671
+#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672
+#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673
+#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674
+#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675
+#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676
+#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677
+#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678
+#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679
+#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A
+#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B
+#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C
+#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D
+#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E
+#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F
+typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences);
+typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs);
+typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program);
+typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences);
+GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id);
+GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs);
+GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params);
+GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs);
+GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program);
+GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer);
+GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id);
+GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program);
+GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs);
+GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform);
+GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x);
+GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x);
+GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v);
+#endif
+#endif /* GL_NV_vertex_program */
+
+#ifndef GL_NV_vertex_program1_1
+#define GL_NV_vertex_program1_1 1
+#endif /* GL_NV_vertex_program1_1 */
+
+#ifndef GL_NV_vertex_program2
+#define GL_NV_vertex_program2 1
+#endif /* GL_NV_vertex_program2 */
+
+#ifndef GL_NV_vertex_program2_option
+#define GL_NV_vertex_program2_option 1
+#endif /* GL_NV_vertex_program2_option */
+
+#ifndef GL_NV_vertex_program3
+#define GL_NV_vertex_program3 1
+#endif /* GL_NV_vertex_program3 */
+
+#ifndef GL_NV_vertex_program4
+#define GL_NV_vertex_program4 1
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x);
+GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y);
+GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x);
+GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y);
+GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z);
+GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params);
+#endif
+#endif /* GL_NV_vertex_program4 */
+
+#ifndef GL_NV_video_capture
+#define GL_NV_video_capture 1
+#define GL_VIDEO_BUFFER_NV 0x9020
+#define GL_VIDEO_BUFFER_BINDING_NV 0x9021
+#define GL_FIELD_UPPER_NV 0x9022
+#define GL_FIELD_LOWER_NV 0x9023
+#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024
+#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025
+#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026
+#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027
+#define GL_VIDEO_BUFFER_PITCH_NV 0x9028
+#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029
+#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A
+#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B
+#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C
+#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D
+#define GL_PARTIAL_SUCCESS_NV 0x902E
+#define GL_SUCCESS_NV 0x902F
+#define GL_FAILURE_NV 0x9030
+#define GL_YCBYCR8_422_NV 0x9031
+#define GL_YCBAYCR8A_4224_NV 0x9032
+#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033
+#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034
+#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035
+#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036
+#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037
+#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038
+#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039
+#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A
+#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B
+#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C
+typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot);
+typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset);
+typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture);
+typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params);
+typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time);
+typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot);
+GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset);
+GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture);
+GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot);
+GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params);
+GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time);
+GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params);
+#endif
+#endif /* GL_NV_video_capture */
+
+#ifndef GL_OML_interlace
+#define GL_OML_interlace 1
+#define GL_INTERLACE_OML 0x8980
+#define GL_INTERLACE_READ_OML 0x8981
+#endif /* GL_OML_interlace */
+
+#ifndef GL_OML_resample
+#define GL_OML_resample 1
+#define GL_PACK_RESAMPLE_OML 0x8984
+#define GL_UNPACK_RESAMPLE_OML 0x8985
+#define GL_RESAMPLE_REPLICATE_OML 0x8986
+#define GL_RESAMPLE_ZERO_FILL_OML 0x8987
+#define GL_RESAMPLE_AVERAGE_OML 0x8988
+#define GL_RESAMPLE_DECIMATE_OML 0x8989
+#endif /* GL_OML_resample */
+
+#ifndef GL_OML_subsample
+#define GL_OML_subsample 1
+#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982
+#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983
+#endif /* GL_OML_subsample */
+
+#ifndef GL_PGI_misc_hints
+#define GL_PGI_misc_hints 1
+#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8
+#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD
+#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE
+#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202
+#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203
+#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204
+#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C
+#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D
+#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E
+#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F
+#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210
+#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211
+#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216
+#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217
+#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218
+#define GL_FULL_STIPPLE_HINT_PGI 0x1A219
+#define GL_CLIP_NEAR_HINT_PGI 0x1A220
+#define GL_CLIP_FAR_HINT_PGI 0x1A221
+#define GL_WIDE_LINE_HINT_PGI 0x1A222
+#define GL_BACK_NORMALS_HINT_PGI 0x1A223
+typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode);
+#endif
+#endif /* GL_PGI_misc_hints */
+
+#ifndef GL_PGI_vertex_hints
+#define GL_PGI_vertex_hints 1
+#define GL_VERTEX_DATA_HINT_PGI 0x1A22A
+#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B
+#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C
+#define GL_MAX_VERTEX_HINT_PGI 0x1A22D
+#define GL_COLOR3_BIT_PGI 0x00010000
+#define GL_COLOR4_BIT_PGI 0x00020000
+#define GL_EDGEFLAG_BIT_PGI 0x00040000
+#define GL_INDEX_BIT_PGI 0x00080000
+#define GL_MAT_AMBIENT_BIT_PGI 0x00100000
+#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000
+#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000
+#define GL_MAT_EMISSION_BIT_PGI 0x00800000
+#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000
+#define GL_MAT_SHININESS_BIT_PGI 0x02000000
+#define GL_MAT_SPECULAR_BIT_PGI 0x04000000
+#define GL_NORMAL_BIT_PGI 0x08000000
+#define GL_TEXCOORD1_BIT_PGI 0x10000000
+#define GL_TEXCOORD2_BIT_PGI 0x20000000
+#define GL_TEXCOORD3_BIT_PGI 0x40000000
+#define GL_TEXCOORD4_BIT_PGI 0x80000000
+#define GL_VERTEX23_BIT_PGI 0x00000004
+#define GL_VERTEX4_BIT_PGI 0x00000008
+#endif /* GL_PGI_vertex_hints */
+
+#ifndef GL_REND_screen_coordinates
+#define GL_REND_screen_coordinates 1
+#define GL_SCREEN_COORDINATES_REND 0x8490
+#define GL_INVERTED_SCREEN_W_REND 0x8491
+#endif /* GL_REND_screen_coordinates */
+
+#ifndef GL_S3_s3tc
+#define GL_S3_s3tc 1
+#define GL_RGB_S3TC 0x83A0
+#define GL_RGB4_S3TC 0x83A1
+#define GL_RGBA_S3TC 0x83A2
+#define GL_RGBA4_S3TC 0x83A3
+#define GL_RGBA_DXT5_S3TC 0x83A4
+#define GL_RGBA4_DXT5_S3TC 0x83A5
+#endif /* GL_S3_s3tc */
+
+#ifndef GL_SGIS_detail_texture
+#define GL_SGIS_detail_texture 1
+#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095
+#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096
+#define GL_LINEAR_DETAIL_SGIS 0x8097
+#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098
+#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099
+#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A
+#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B
+#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C
+typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points);
+GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points);
+#endif
+#endif /* GL_SGIS_detail_texture */
+
+#ifndef GL_SGIS_fog_function
+#define GL_SGIS_fog_function 1
+#define GL_FOG_FUNC_SGIS 0x812A
+#define GL_FOG_FUNC_POINTS_SGIS 0x812B
+#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C
+typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points);
+GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points);
+#endif
+#endif /* GL_SGIS_fog_function */
+
+#ifndef GL_SGIS_generate_mipmap
+#define GL_SGIS_generate_mipmap 1
+#define GL_GENERATE_MIPMAP_SGIS 0x8191
+#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192
+#endif /* GL_SGIS_generate_mipmap */
+
+#ifndef GL_SGIS_multisample
+#define GL_SGIS_multisample 1
+#define GL_MULTISAMPLE_SGIS 0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F
+#define GL_SAMPLE_MASK_SGIS 0x80A0
+#define GL_1PASS_SGIS 0x80A1
+#define GL_2PASS_0_SGIS 0x80A2
+#define GL_2PASS_1_SGIS 0x80A3
+#define GL_4PASS_0_SGIS 0x80A4
+#define GL_4PASS_1_SGIS 0x80A5
+#define GL_4PASS_2_SGIS 0x80A6
+#define GL_4PASS_3_SGIS 0x80A7
+#define GL_SAMPLE_BUFFERS_SGIS 0x80A8
+#define GL_SAMPLES_SGIS 0x80A9
+#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA
+#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB
+#define GL_SAMPLE_PATTERN_SGIS 0x80AC
+typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert);
+GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern);
+#endif
+#endif /* GL_SGIS_multisample */
+
+#ifndef GL_SGIS_pixel_texture
+#define GL_SGIS_pixel_texture 1
+#define GL_PIXEL_TEXTURE_SGIS 0x8353
+#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354
+#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355
+#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param);
+GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_SGIS_pixel_texture */
+
+#ifndef GL_SGIS_point_line_texgen
+#define GL_SGIS_point_line_texgen 1
+#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0
+#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1
+#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2
+#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3
+#define GL_EYE_POINT_SGIS 0x81F4
+#define GL_OBJECT_POINT_SGIS 0x81F5
+#define GL_EYE_LINE_SGIS 0x81F6
+#define GL_OBJECT_LINE_SGIS 0x81F7
+#endif /* GL_SGIS_point_line_texgen */
+
+#ifndef GL_SGIS_point_parameters
+#define GL_SGIS_point_parameters 1
+#define GL_POINT_SIZE_MIN_SGIS 0x8126
+#define GL_POINT_SIZE_MAX_SGIS 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128
+#define GL_DISTANCE_ATTENUATION_SGIS 0x8129
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params);
+#endif
+#endif /* GL_SGIS_point_parameters */
+
+#ifndef GL_SGIS_sharpen_texture
+#define GL_SGIS_sharpen_texture 1
+#define GL_LINEAR_SHARPEN_SGIS 0x80AD
+#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE
+#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF
+#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0
+typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points);
+GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points);
+#endif
+#endif /* GL_SGIS_sharpen_texture */
+
+#ifndef GL_SGIS_texture4D
+#define GL_SGIS_texture4D 1
+#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130
+#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131
+#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132
+#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133
+#define GL_TEXTURE_4D_SGIS 0x8134
+#define GL_PROXY_TEXTURE_4D_SGIS 0x8135
+#define GL_TEXTURE_4DSIZE_SGIS 0x8136
+#define GL_TEXTURE_WRAP_Q_SGIS 0x8137
+#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138
+#define GL_TEXTURE_4D_BINDING_SGIS 0x814F
+typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels);
+#endif
+#endif /* GL_SGIS_texture4D */
+
+#ifndef GL_SGIS_texture_border_clamp
+#define GL_SGIS_texture_border_clamp 1
+#define GL_CLAMP_TO_BORDER_SGIS 0x812D
+#endif /* GL_SGIS_texture_border_clamp */
+
+#ifndef GL_SGIS_texture_color_mask
+#define GL_SGIS_texture_color_mask 1
+#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF
+typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+#endif
+#endif /* GL_SGIS_texture_color_mask */
+
+#ifndef GL_SGIS_texture_edge_clamp
+#define GL_SGIS_texture_edge_clamp 1
+#define GL_CLAMP_TO_EDGE_SGIS 0x812F
+#endif /* GL_SGIS_texture_edge_clamp */
+
+#ifndef GL_SGIS_texture_filter4
+#define GL_SGIS_texture_filter4 1
+#define GL_FILTER4_SGIS 0x8146
+#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147
+typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights);
+typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights);
+GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);
+#endif
+#endif /* GL_SGIS_texture_filter4 */
+
+#ifndef GL_SGIS_texture_lod
+#define GL_SGIS_texture_lod 1
+#define GL_TEXTURE_MIN_LOD_SGIS 0x813A
+#define GL_TEXTURE_MAX_LOD_SGIS 0x813B
+#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C
+#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D
+#endif /* GL_SGIS_texture_lod */
+
+#ifndef GL_SGIS_texture_select
+#define GL_SGIS_texture_select 1
+#define GL_DUAL_ALPHA4_SGIS 0x8110
+#define GL_DUAL_ALPHA8_SGIS 0x8111
+#define GL_DUAL_ALPHA12_SGIS 0x8112
+#define GL_DUAL_ALPHA16_SGIS 0x8113
+#define GL_DUAL_LUMINANCE4_SGIS 0x8114
+#define GL_DUAL_LUMINANCE8_SGIS 0x8115
+#define GL_DUAL_LUMINANCE12_SGIS 0x8116
+#define GL_DUAL_LUMINANCE16_SGIS 0x8117
+#define GL_DUAL_INTENSITY4_SGIS 0x8118
+#define GL_DUAL_INTENSITY8_SGIS 0x8119
+#define GL_DUAL_INTENSITY12_SGIS 0x811A
+#define GL_DUAL_INTENSITY16_SGIS 0x811B
+#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C
+#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D
+#define GL_QUAD_ALPHA4_SGIS 0x811E
+#define GL_QUAD_ALPHA8_SGIS 0x811F
+#define GL_QUAD_LUMINANCE4_SGIS 0x8120
+#define GL_QUAD_LUMINANCE8_SGIS 0x8121
+#define GL_QUAD_INTENSITY4_SGIS 0x8122
+#define GL_QUAD_INTENSITY8_SGIS 0x8123
+#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124
+#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125
+#endif /* GL_SGIS_texture_select */
+
+#ifndef GL_SGIX_async
+#define GL_SGIX_async 1
+#define GL_ASYNC_MARKER_SGIX 0x8329
+typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker);
+typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp);
+typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp);
+typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range);
+typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range);
+typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker);
+GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp);
+GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp);
+GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range);
+GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range);
+GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker);
+#endif
+#endif /* GL_SGIX_async */
+
+#ifndef GL_SGIX_async_histogram
+#define GL_SGIX_async_histogram 1
+#define GL_ASYNC_HISTOGRAM_SGIX 0x832C
+#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D
+#endif /* GL_SGIX_async_histogram */
+
+#ifndef GL_SGIX_async_pixel
+#define GL_SGIX_async_pixel 1
+#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C
+#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D
+#define GL_ASYNC_READ_PIXELS_SGIX 0x835E
+#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F
+#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360
+#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361
+#endif /* GL_SGIX_async_pixel */
+
+#ifndef GL_SGIX_blend_alpha_minmax
+#define GL_SGIX_blend_alpha_minmax 1
+#define GL_ALPHA_MIN_SGIX 0x8320
+#define GL_ALPHA_MAX_SGIX 0x8321
+#endif /* GL_SGIX_blend_alpha_minmax */
+
+#ifndef GL_SGIX_calligraphic_fragment
+#define GL_SGIX_calligraphic_fragment 1
+#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183
+#endif /* GL_SGIX_calligraphic_fragment */
+
+#ifndef GL_SGIX_clipmap
+#define GL_SGIX_clipmap 1
+#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170
+#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171
+#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172
+#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173
+#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174
+#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175
+#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176
+#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177
+#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178
+#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D
+#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E
+#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F
+#endif /* GL_SGIX_clipmap */
+
+#ifndef GL_SGIX_convolution_accuracy
+#define GL_SGIX_convolution_accuracy 1
+#define GL_CONVOLUTION_HINT_SGIX 0x8316
+#endif /* GL_SGIX_convolution_accuracy */
+
+#ifndef GL_SGIX_depth_pass_instrument
+#define GL_SGIX_depth_pass_instrument 1
+#endif /* GL_SGIX_depth_pass_instrument */
+
+#ifndef GL_SGIX_depth_texture
+#define GL_SGIX_depth_texture 1
+#define GL_DEPTH_COMPONENT16_SGIX 0x81A5
+#define GL_DEPTH_COMPONENT24_SGIX 0x81A6
+#define GL_DEPTH_COMPONENT32_SGIX 0x81A7
+#endif /* GL_SGIX_depth_texture */
+
+#ifndef GL_SGIX_flush_raster
+#define GL_SGIX_flush_raster 1
+typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushRasterSGIX (void);
+#endif
+#endif /* GL_SGIX_flush_raster */
+
+#ifndef GL_SGIX_fog_offset
+#define GL_SGIX_fog_offset 1
+#define GL_FOG_OFFSET_SGIX 0x8198
+#define GL_FOG_OFFSET_VALUE_SGIX 0x8199
+#endif /* GL_SGIX_fog_offset */
+
+#ifndef GL_SGIX_fragment_lighting
+#define GL_SGIX_fragment_lighting 1
+#define GL_FRAGMENT_LIGHTING_SGIX 0x8400
+#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401
+#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402
+#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403
+#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404
+#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405
+#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406
+#define GL_LIGHT_ENV_MODE_SGIX 0x8407
+#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408
+#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409
+#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A
+#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B
+#define GL_FRAGMENT_LIGHT0_SGIX 0x840C
+#define GL_FRAGMENT_LIGHT1_SGIX 0x840D
+#define GL_FRAGMENT_LIGHT2_SGIX 0x840E
+#define GL_FRAGMENT_LIGHT3_SGIX 0x840F
+#define GL_FRAGMENT_LIGHT4_SGIX 0x8410
+#define GL_FRAGMENT_LIGHT5_SGIX 0x8411
+#define GL_FRAGMENT_LIGHT6_SGIX 0x8412
+#define GL_FRAGMENT_LIGHT7_SGIX 0x8413
+typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode);
+GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param);
+GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param);
+GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param);
+GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params);
+GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param);
+#endif
+#endif /* GL_SGIX_fragment_lighting */
+
+#ifndef GL_SGIX_framezoom
+#define GL_SGIX_framezoom 1
+#define GL_FRAMEZOOM_SGIX 0x818B
+#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C
+#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D
+typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFrameZoomSGIX (GLint factor);
+#endif
+#endif /* GL_SGIX_framezoom */
+
+#ifndef GL_SGIX_igloo_interface
+#define GL_SGIX_igloo_interface 1
+typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params);
+#endif
+#endif /* GL_SGIX_igloo_interface */
+
+#ifndef GL_SGIX_instruments
+#define GL_SGIX_instruments 1
+#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180
+#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181
+typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void);
+typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer);
+typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p);
+typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker);
+typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void);
+typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLint APIENTRY glGetInstrumentsSGIX (void);
+GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer);
+GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p);
+GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker);
+GLAPI void APIENTRY glStartInstrumentsSGIX (void);
+GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker);
+#endif
+#endif /* GL_SGIX_instruments */
+
+#ifndef GL_SGIX_interlace
+#define GL_SGIX_interlace 1
+#define GL_INTERLACE_SGIX 0x8094
+#endif /* GL_SGIX_interlace */
+
+#ifndef GL_SGIX_ir_instrument1
+#define GL_SGIX_ir_instrument1 1
+#define GL_IR_INSTRUMENT1_SGIX 0x817F
+#endif /* GL_SGIX_ir_instrument1 */
+
+#ifndef GL_SGIX_list_priority
+#define GL_SGIX_list_priority 1
+#define GL_LIST_PRIORITY_SGIX 0x8182
+typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params);
+GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param);
+GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params);
+#endif
+#endif /* GL_SGIX_list_priority */
+
+#ifndef GL_SGIX_pixel_texture
+#define GL_SGIX_pixel_texture 1
+#define GL_PIXEL_TEX_GEN_SGIX 0x8139
+#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B
+typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode);
+#endif
+#endif /* GL_SGIX_pixel_texture */
+
+#ifndef GL_SGIX_pixel_tiles
+#define GL_SGIX_pixel_tiles 1
+#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E
+#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F
+#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140
+#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141
+#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142
+#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143
+#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144
+#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145
+#endif /* GL_SGIX_pixel_tiles */
+
+#ifndef GL_SGIX_polynomial_ffd
+#define GL_SGIX_polynomial_ffd 1
+#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001
+#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002
+#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194
+#define GL_TEXTURE_DEFORMATION_SGIX 0x8195
+#define GL_DEFORMATIONS_MASK_SGIX 0x8196
+#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197
+typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);
+typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);
+typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);
+GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);
+GLAPI void APIENTRY glDeformSGIX (GLbitfield mask);
+GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask);
+#endif
+#endif /* GL_SGIX_polynomial_ffd */
+
+#ifndef GL_SGIX_reference_plane
+#define GL_SGIX_reference_plane 1
+#define GL_REFERENCE_PLANE_SGIX 0x817D
+#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E
+typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation);
+#endif
+#endif /* GL_SGIX_reference_plane */
+
+#ifndef GL_SGIX_resample
+#define GL_SGIX_resample 1
+#define GL_PACK_RESAMPLE_SGIX 0x842C
+#define GL_UNPACK_RESAMPLE_SGIX 0x842D
+#define GL_RESAMPLE_REPLICATE_SGIX 0x842E
+#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F
+#define GL_RESAMPLE_DECIMATE_SGIX 0x8430
+#endif /* GL_SGIX_resample */
+
+#ifndef GL_SGIX_scalebias_hint
+#define GL_SGIX_scalebias_hint 1
+#define GL_SCALEBIAS_HINT_SGIX 0x8322
+#endif /* GL_SGIX_scalebias_hint */
+
+#ifndef GL_SGIX_shadow
+#define GL_SGIX_shadow 1
+#define GL_TEXTURE_COMPARE_SGIX 0x819A
+#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B
+#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C
+#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D
+#endif /* GL_SGIX_shadow */
+
+#ifndef GL_SGIX_shadow_ambient
+#define GL_SGIX_shadow_ambient 1
+#define GL_SHADOW_AMBIENT_SGIX 0x80BF
+#endif /* GL_SGIX_shadow_ambient */
+
+#ifndef GL_SGIX_sprite
+#define GL_SGIX_sprite 1
+#define GL_SPRITE_SGIX 0x8148
+#define GL_SPRITE_MODE_SGIX 0x8149
+#define GL_SPRITE_AXIS_SGIX 0x814A
+#define GL_SPRITE_TRANSLATION_SGIX 0x814B
+#define GL_SPRITE_AXIAL_SGIX 0x814C
+#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D
+#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param);
+GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params);
+#endif
+#endif /* GL_SGIX_sprite */
+
+#ifndef GL_SGIX_subsample
+#define GL_SGIX_subsample 1
+#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0
+#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1
+#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2
+#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3
+#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4
+#endif /* GL_SGIX_subsample */
+
+#ifndef GL_SGIX_tag_sample_buffer
+#define GL_SGIX_tag_sample_buffer 1
+typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTagSampleBufferSGIX (void);
+#endif
+#endif /* GL_SGIX_tag_sample_buffer */
+
+#ifndef GL_SGIX_texture_add_env
+#define GL_SGIX_texture_add_env 1
+#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE
+#endif /* GL_SGIX_texture_add_env */
+
+#ifndef GL_SGIX_texture_coordinate_clamp
+#define GL_SGIX_texture_coordinate_clamp 1
+#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369
+#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A
+#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B
+#endif /* GL_SGIX_texture_coordinate_clamp */
+
+#ifndef GL_SGIX_texture_lod_bias
+#define GL_SGIX_texture_lod_bias 1
+#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E
+#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F
+#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190
+#endif /* GL_SGIX_texture_lod_bias */
+
+#ifndef GL_SGIX_texture_multi_buffer
+#define GL_SGIX_texture_multi_buffer 1
+#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E
+#endif /* GL_SGIX_texture_multi_buffer */
+
+#ifndef GL_SGIX_texture_scale_bias
+#define GL_SGIX_texture_scale_bias 1
+#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179
+#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A
+#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B
+#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C
+#endif /* GL_SGIX_texture_scale_bias */
+
+#ifndef GL_SGIX_vertex_preclip
+#define GL_SGIX_vertex_preclip 1
+#define GL_VERTEX_PRECLIP_SGIX 0x83EE
+#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF
+#endif /* GL_SGIX_vertex_preclip */
+
+#ifndef GL_SGIX_ycrcb
+#define GL_SGIX_ycrcb 1
+#define GL_YCRCB_422_SGIX 0x81BB
+#define GL_YCRCB_444_SGIX 0x81BC
+#endif /* GL_SGIX_ycrcb */
+
+#ifndef GL_SGIX_ycrcb_subsample
+#define GL_SGIX_ycrcb_subsample 1
+#endif /* GL_SGIX_ycrcb_subsample */
+
+#ifndef GL_SGIX_ycrcba
+#define GL_SGIX_ycrcba 1
+#define GL_YCRCB_SGIX 0x8318
+#define GL_YCRCBA_SGIX 0x8319
+#endif /* GL_SGIX_ycrcba */
+
+#ifndef GL_SGI_color_matrix
+#define GL_SGI_color_matrix 1
+#define GL_COLOR_MATRIX_SGI 0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB
+#endif /* GL_SGI_color_matrix */
+
+#ifndef GL_SGI_color_table
+#define GL_SGI_color_table 1
+#define GL_COLOR_TABLE_SGI 0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2
+#define GL_PROXY_COLOR_TABLE_SGI 0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5
+#define GL_COLOR_TABLE_SCALE_SGI 0x80D6
+#define GL_COLOR_TABLE_BIAS_SGI 0x80D7
+#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8
+#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9
+#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF
+typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table);
+GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table);
+GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params);
+#endif
+#endif /* GL_SGI_color_table */
+
+#ifndef GL_SGI_texture_color_table
+#define GL_SGI_texture_color_table 1
+#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC
+#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD
+#endif /* GL_SGI_texture_color_table */
+
+#ifndef GL_SUNX_constant_data
+#define GL_SUNX_constant_data 1
+#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5
+#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6
+typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFinishTextureSUNX (void);
+#endif
+#endif /* GL_SUNX_constant_data */
+
+#ifndef GL_SUN_convolution_border_modes
+#define GL_SUN_convolution_border_modes 1
+#define GL_WRAP_BORDER_SUN 0x81D4
+#endif /* GL_SUN_convolution_border_modes */
+
+#ifndef GL_SUN_global_alpha
+#define GL_SUN_global_alpha 1
+#define GL_GLOBAL_ALPHA_SUN 0x81D9
+#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor);
+GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor);
+GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor);
+GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor);
+GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor);
+GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor);
+GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor);
+GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor);
+#endif
+#endif /* GL_SUN_global_alpha */
+
+#ifndef GL_SUN_mesh_array
+#define GL_SUN_mesh_array 1
+#define GL_QUAD_MESH_SUN 0x8614
+#define GL_TRIANGLE_MESH_SUN 0x8615
+typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width);
+#endif
+#endif /* GL_SUN_mesh_array */
+
+#ifndef GL_SUN_slice_accum
+#define GL_SUN_slice_accum 1
+#define GL_SLICE_ACCUM_SUN 0x85CC
+#endif /* GL_SUN_slice_accum */
+
+#ifndef GL_SUN_triangle_list
+#define GL_SUN_triangle_list 1
+#define GL_RESTART_SUN 0x0001
+#define GL_REPLACE_MIDDLE_SUN 0x0002
+#define GL_REPLACE_OLDEST_SUN 0x0003
+#define GL_TRIANGLE_LIST_SUN 0x81D7
+#define GL_REPLACEMENT_CODE_SUN 0x81D8
+#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0
+#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1
+#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2
+#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3
+#define GL_R1UI_V3F_SUN 0x85C4
+#define GL_R1UI_C4UB_V3F_SUN 0x85C5
+#define GL_R1UI_C3F_V3F_SUN 0x85C6
+#define GL_R1UI_N3F_V3F_SUN 0x85C7
+#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8
+#define GL_R1UI_T2F_V3F_SUN 0x85C9
+#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA
+#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code);
+GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code);
+GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code);
+GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code);
+GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code);
+GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code);
+GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer);
+#endif
+#endif /* GL_SUN_triangle_list */
+
+#ifndef GL_SUN_vertex
+#define GL_SUN_vertex 1
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v);
+GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+#endif
+#endif /* GL_SUN_vertex */
+
+#ifndef GL_WIN_phong_shading
+#define GL_WIN_phong_shading 1
+#define GL_PHONG_WIN 0x80EA
+#define GL_PHONG_HINT_WIN 0x80EB
+#endif /* GL_WIN_phong_shading */
+
+#ifndef GL_WIN_specular_fog
+#define GL_WIN_specular_fog 1
+#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC
+#endif /* GL_WIN_specular_fog */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glfuncdef.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glfuncdef.h
new file mode 100644
index 00000000..cd50a3a3
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glfuncdef.h
@@ -0,0 +1,343 @@
+// Notice
+// NVIDIA Corporation and its licensors retain all intellectual property and
+// proprietary rights in and to this software and related documentation and
+// any modifications thereto. Any use, reproduction, disclosure, or
+// distribution of this software and related documentation without an express
+// license agreement from NVIDIA Corporation is strictly prohibited.
+//
+// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES
+// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
+// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT,
+// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
+//
+// Information and code furnished is believed to be accurate and reliable.
+// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such
+// information or for any infringement of patents or other rights of third parties that may
+// result from its use. No license is granted by implication or otherwise Under any patent
+// or patent rights of NVIDIA Corporation. Details are subject to change without notice.
+// This code supersedes and replaces all information previously supplied.
+// NVIDIA Corporation products are not authorized for use as critical
+// components in life support devices or systems without express written approval of
+// NVIDIA Corporation.
+//
+// Copyright (c) 2008-2012 NVIDIA Corporation. All rights reserved.
+
+/*
+** Copyright (c) 2013-2016 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+/*
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+** http://www.opengl.org/registry/
+*/
+
+
+/// @file glfuncdef.h
+/// this is our internal OpenGL function header define
+
+#ifndef __gl_func_def_h_
+#define __gl_func_def_h_
+
+#include <GLES2/gl2platform.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*-------------------------------------------------------------------------
+ * GL2 core functions.
+ *-----------------------------------------------------------------------*/
+
+GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture);
+GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader);
+GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const char* name);
+GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer);
+GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);
+GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);
+GL_APICALL void GL_APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+GL_APICALL void GL_APIENTRY glBlendEquation ( GLenum mode );
+GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
+GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void* data, GLenum usage);
+GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void* data);
+GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target);
+GL_APICALL void GL_APIENTRY glClearDepthf (GLclampf depth);
+GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader);
+GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data);
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data);
+GL_APICALL GLuint GL_APIENTRY glCreateProgram (void);
+GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type);
+GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers);
+GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers);
+GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers);
+GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader);
+GL_APICALL void GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar);
+GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader);
+GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index);
+GL_APICALL void GL_APIENTRY glDrawBuffers( GLsizei n, const GLenum *bufs);
+GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index);
+GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers);
+GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target);
+GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers);
+GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers);
+GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name);
+GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name);
+GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
+GL_APICALL int GL_APIENTRY glGetAttribLocation (GLuint program, const char* name);
+GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params);
+GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params);
+GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params);
+GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, char* infolog);
+GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params);
+GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params);
+GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog);
+GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
+GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, char* source);
+GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params);
+GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params);
+GL_APICALL int GL_APIENTRY glGetUniformLocation (GLuint program, const char* name);
+GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params);
+GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void** pointer);
+GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer);
+GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer);
+GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program);
+GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer);
+GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader);
+GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void);
+GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert);
+GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length);
+GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const char** string, const GLint* length);
+GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
+GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat x);
+GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v);
+GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint x);
+GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v);
+GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y);
+GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v);
+GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y);
+GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v);
+GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z);
+GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v);
+GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z);
+GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v);
+GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v);
+GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w);
+GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v);
+GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+GL_APICALL void GL_APIENTRY glUseProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program);
+GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x);
+GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values);
+GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y);
+GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values);
+GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z);
+GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values);
+GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values);
+GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr);
+
+/*-------------------------------------------------------------------------
+ * GL3 core functions.
+ *-----------------------------------------------------------------------*/
+
+GL_APICALL void GL_APIENTRY glBeginQuery (GLenum target, GLuint id);
+GL_APICALL void GL_APIENTRY glBindBufferBase(GLenum target, GLuint index, GLuint buffer);
+GL_APICALL void GL_APIENTRY glBindFragDataLocation (GLuint program, GLuint colorNumber, const GLchar * name);
+GL_APICALL void GL_APIENTRY glBindVertexArray (GLuint array);
+GL_APICALL void GL_APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GL_APICALL GLenum GL_APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GL_APICALL void GL_APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids);
+GL_APICALL void GL_APIENTRY glDeleteSync (GLsync sync);
+GL_APICALL void GL_APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays);
+GL_APICALL void GL_APIENTRY glEndQuery (GLenum target);
+GL_APICALL GLsync GL_APIENTRY glFenceSync (GLenum condition, GLbitfield flags);
+GL_APICALL void GL_APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GL_APICALL void GL_APIENTRY glGenQueries (GLsizei n, GLuint *ids);
+GL_APICALL void GL_APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays);
+GL_APICALL void GL_APIENTRY glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+GL_APICALL void GL_APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params);
+GL_APICALL void GL_APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params);
+GL_APICALL const GLubyte* GL_APIENTRY glGetStringi (GLenum name, GLuint index);
+GL_APICALL void GL_APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+GL_APICALL GLuint GL_APIENTRY glGetUniformBlockIndex( GLuint program, const GLchar *uniformBlockName);
+GL_APICALL GLvoid* GL_APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GL_APICALL void GL_APIENTRY glQueryCounter (GLuint id, GLenum target);
+GL_APICALL void GL_APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GL_APICALL void GL_APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GL_APICALL void GL_APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+GL_APICALL GLboolean GL_APIENTRY glUnmapBuffer (GLenum target);
+GL_APICALL void GL_APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+
+/*-------------------------------------------------------------------------
+ * GL4 core functions.
+ *-----------------------------------------------------------------------*/
+
+GL_APICALL void GL_APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program);
+GL_APICALL void GL_APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+GL_APICALL void GL_APIENTRY glBindProgramPipeline (GLuint pipeline);
+GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings);
+GL_APICALL void GL_APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines);
+GL_APICALL void GL_APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+GL_APICALL void GL_APIENTRY glDispatchComputeIndirect (GLintptr indirect);
+GL_APICALL void GL_APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect);
+GL_APICALL void GL_APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect);
+GL_APICALL void GL_APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines);
+GL_APICALL void GL_APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val );
+GL_APICALL void GL_APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+GL_APICALL void GL_APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value);
+GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GL_APICALL void GL_APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params);
+GL_APICALL GLuint GL_APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+GL_APICALL GLint GL_APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name);
+GL_APICALL GLint GL_APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name);
+GL_APICALL void GL_APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+GL_APICALL void GL_APIENTRY glMemoryBarrier (GLbitfield barriers);
+GL_APICALL void GL_APIENTRY glMinSampleShading (GLfloat value );
+GL_APICALL void GL_APIENTRY glPatchParameteri (GLenum pname, GLint value );
+GL_APICALL void GL_APIENTRY glPatchParameterfv (GLenum pname, GLint value );
+GL_APICALL void GL_APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GL_APICALL void GL_APIENTRY glTexStorage2DMultisample (GLint target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+GL_APICALL void GL_APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0);
+GL_APICALL void GL_APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1);
+GL_APICALL void GL_APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GL_APICALL void GL_APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GL_APICALL void GL_APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0);
+GL_APICALL void GL_APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1);
+GL_APICALL void GL_APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GL_APICALL void GL_APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GL_APICALL void GL_APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0);
+GL_APICALL void GL_APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GL_APICALL void GL_APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GL_APICALL void GL_APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GL_APICALL void GL_APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GL_APICALL void GL_APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program);
+GL_APICALL void GL_APIENTRY glValidateProgramPipeline (GLuint pipeline);
+
+
+/*-------------------------------------------------------------------------
+ * GL4 NV extensions
+ *-----------------------------------------------------------------------*/
+
+GL_APICALL GLuint GL_APIENTRY glGenPathsNV (GLsizei range);
+GL_APICALL void GL_APIENTRY glDeletePathsNV (GLuint path, GLsizei range);
+GL_APICALL GLboolean GL_APIENTRY glIsPathNV (GLuint path);
+GL_APICALL void GL_APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+GL_APICALL void GL_APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords);
+GL_APICALL void GL_APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+GL_APICALL void GL_APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords);
+GL_APICALL void GL_APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString);
+GL_APICALL void GL_APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GL_APICALL void GL_APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GL_APICALL void GL_APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+GL_APICALL void GL_APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath);
+GL_APICALL void GL_APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+GL_APICALL void GL_APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value);
+GL_APICALL void GL_APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value);
+GL_APICALL void GL_APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value);
+GL_APICALL void GL_APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value);
+GL_APICALL void GL_APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+GL_APICALL void GL_APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask);
+GL_APICALL void GL_APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units);
+GL_APICALL void GL_APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask);
+GL_APICALL void GL_APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glPathCoverDepthFuncNV (GLenum func);
+GL_APICALL void GL_APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs);
+GL_APICALL void GL_APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs);
+GL_APICALL void GL_APIENTRY glPathFogGenNV (GLenum genMode);
+GL_APICALL void GL_APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value);
+GL_APICALL void GL_APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value);
+GL_APICALL void GL_APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands);
+GL_APICALL void GL_APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords);
+GL_APICALL void GL_APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray);
+GL_APICALL void GL_APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+GL_APICALL void GL_APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+GL_APICALL void GL_APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+GL_APICALL void GL_APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value);
+GL_APICALL void GL_APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value);
+GL_APICALL void GL_APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value);
+GL_APICALL void GL_APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value);
+GL_APICALL GLboolean GL_APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+GL_APICALL GLboolean GL_APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y);
+GL_APICALL GLfloat GL_APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments);
+GL_APICALL GLboolean GL_APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+GL_APICALL void GL_APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GL_APICALL GLenum GL_APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]);
+GL_APICALL GLenum GL_APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GL_APICALL GLenum GL_APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GL_APICALL void GL_APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs);
+GL_APICALL void GL_APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params);
+GL_APICALL void GL_APIENTRY glMatrixLoadf (GLenum mode, const GLfloat *m);
+GL_APICALL void GL_APIENTRY glBlendBarrierNV( void );
+GL_APICALL void GL_APIENTRY glBlendParameteriNV( GLenum pname, GLint value );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __gl_func_def_h_ */
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glu.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glu.h
new file mode 100644
index 00000000..54bc52bc
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glu.h
@@ -0,0 +1,607 @@
+/*++ BUILD Version: 0004 // Increment this if a change has global effects
+
+Copyright (c) 1985-95, Microsoft Corporation
+
+Module Name:
+
+ glu.h
+
+Abstract:
+
+ Procedure declarations, constant definitions and macros for the OpenGL
+ Utility Library.
+
+--*/
+
+#ifndef __glu_h__
+#ifndef __GLU_H__
+
+#define __glu_h__
+#define __GLU_H__
+
+#include <GL/gl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright 1991-1993, Silicon Graphics, Inc.
+** All Rights Reserved.
+**
+** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
+** the contents of this file may not be disclosed to third parties, copied or
+** duplicated in any form, in whole or in part, without the prior written
+** permission of Silicon Graphics, Inc.
+**
+** RESTRICTED RIGHTS LEGEND:
+** Use, duplication or disclosure by the Government is subject to restrictions
+** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
+** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
+** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
+** rights reserved under the Copyright Laws of the United States.
+*/
+
+/*
+** Return the error string associated with a particular error code.
+** This will return 0 for an invalid error code.
+**
+** The generic function prototype that can be compiled for ANSI or Unicode
+** is defined as follows:
+**
+** LPCTSTR APIENTRY gluErrorStringWIN (GLenum errCode);
+*/
+#ifdef UNICODE
+#define gluErrorStringWIN(errCode) ((LPCSTR) gluErrorUnicodeStringEXT(errCode))
+#else
+#define gluErrorStringWIN(errCode) ((LPCWSTR) gluErrorString(errCode))
+#endif
+
+/* XXX APIENTRY and CALLBACK defined added by aritger */
+#ifndef APIENTRY
+# define APIENTRY
+#endif
+
+#ifndef CALLBACK
+# define CALLBACK
+#endif
+
+const GLubyte* APIENTRY gluErrorString (
+ GLenum errCode);
+
+/* XXX aritger: gluErrorUnicodeStringEXT() appears to be a MicroSoft addition */
+#if defined(_WIN32)
+const wchar_t* APIENTRY gluErrorUnicodeStringEXT (
+ GLenum errCode);
+#endif
+
+const GLubyte* APIENTRY gluGetString (
+ GLenum name);
+
+void APIENTRY gluOrtho2D (
+ GLdouble left,
+ GLdouble right,
+ GLdouble bottom,
+ GLdouble top);
+
+void APIENTRY gluPerspective (
+ GLdouble fovy,
+ GLdouble aspect,
+ GLdouble zNear,
+ GLdouble zFar);
+
+void APIENTRY gluPickMatrix (
+ GLdouble x,
+ GLdouble y,
+ GLdouble width,
+ GLdouble height,
+ GLint viewport[4]);
+
+void APIENTRY gluLookAt (
+ GLdouble eyex,
+ GLdouble eyey,
+ GLdouble eyez,
+ GLdouble centerx,
+ GLdouble centery,
+ GLdouble centerz,
+ GLdouble upx,
+ GLdouble upy,
+ GLdouble upz);
+
+int APIENTRY gluProject (
+ GLdouble objx,
+ GLdouble objy,
+ GLdouble objz,
+ const GLdouble modelMatrix[16],
+ const GLdouble projMatrix[16],
+ const GLint viewport[4],
+ GLdouble *winx,
+ GLdouble *winy,
+ GLdouble *winz);
+
+int APIENTRY gluUnProject (
+ GLdouble winx,
+ GLdouble winy,
+ GLdouble winz,
+ const GLdouble modelMatrix[16],
+ const GLdouble projMatrix[16],
+ const GLint viewport[4],
+ GLdouble *objx,
+ GLdouble *objy,
+ GLdouble *objz);
+
+
+int APIENTRY gluScaleImage (
+ GLenum format,
+ GLint widthin,
+ GLint heightin,
+ GLenum typein,
+ const void *datain,
+ GLint widthout,
+ GLint heightout,
+ GLenum typeout,
+ void *dataout);
+
+
+int APIENTRY gluBuild1DMipmaps (
+ GLenum target,
+ GLint components,
+ GLint width,
+ GLenum format,
+ GLenum type,
+ const void *data);
+
+int APIENTRY gluBuild2DMipmaps (
+ GLenum target,
+ GLint components,
+ GLint width,
+ GLint height,
+ GLenum format,
+ GLenum type,
+ const void *data);
+
+#ifdef __cplusplus
+
+class GLUnurbs;
+class GLUquadric;
+class GLUtesselator;
+
+/* backwards compatibility: */
+typedef class GLUnurbs GLUnurbsObj;
+typedef class GLUquadric GLUquadricObj;
+typedef class GLUtesselator GLUtesselatorObj;
+typedef class GLUtesselator GLUtriangulatorObj;
+
+#else
+
+typedef struct GLUnurbs GLUnurbs;
+typedef struct GLUquadric GLUquadric;
+typedef struct GLUtesselator GLUtesselator;
+
+/* backwards compatibility: */
+typedef struct GLUnurbs GLUnurbsObj;
+typedef struct GLUquadric GLUquadricObj;
+typedef struct GLUtesselator GLUtesselatorObj;
+typedef struct GLUtesselator GLUtriangulatorObj;
+
+#endif
+
+// (NVIDIA change: pbrown) GLUcallbackFuncPtr is a general-purpose function
+// pointer type for GLU callbacks. We declare a "void" argument list in the
+// prototype as a least-common-denominator to avoid "function declaration
+// isn't a prototype" warnings from GCC (which until late 2010 didn't have a
+// good way to temporarily change warning state via #pragma). Most, but not
+// all, GLU callbacks do take one or more arguments, so will likely need
+// manual casts. The fundamental problem is that the actual argument list is
+// typically a function of the <which> argument in the
+// glu{Tess,Nurbs}Callback, so there is no good way to check for correctness
+// at compile time.
+typedef void (CALLBACK* GLUcallbackFuncPtr)(void);
+
+GLUquadric* APIENTRY gluNewQuadric (void);
+void APIENTRY gluDeleteQuadric (
+ GLUquadric *state);
+
+void APIENTRY gluQuadricNormals (
+ GLUquadric *quadObject,
+ GLenum normals);
+
+void APIENTRY gluQuadricTexture (
+ GLUquadric *quadObject,
+ GLboolean textureCoords);
+
+void APIENTRY gluQuadricOrientation (
+ GLUquadric *quadObject,
+ GLenum orientation);
+
+void APIENTRY gluQuadricDrawStyle (
+ GLUquadric *quadObject,
+ GLenum drawStyle);
+
+void APIENTRY gluCylinder (
+ GLUquadric *qobj,
+ GLdouble baseRadius,
+ GLdouble topRadius,
+ GLdouble height,
+ GLint slices,
+ GLint stacks);
+
+void APIENTRY gluDisk (
+ GLUquadric *qobj,
+ GLdouble innerRadius,
+ GLdouble outerRadius,
+ GLint slices,
+ GLint loops);
+
+void APIENTRY gluPartialDisk (
+ GLUquadric *qobj,
+ GLdouble innerRadius,
+ GLdouble outerRadius,
+ GLint slices,
+ GLint loops,
+ GLdouble startAngle,
+ GLdouble sweepAngle);
+
+void APIENTRY gluSphere (
+ GLUquadric *qobj,
+ GLdouble radius,
+ GLint slices,
+ GLint stacks);
+
+void APIENTRY gluQuadricCallback (
+ GLUquadric *qobj,
+ GLenum which,
+ GLUcallbackFuncPtr fn );
+
+GLUtesselator* APIENTRY gluNewTess(
+ void );
+
+void APIENTRY gluDeleteTess(
+ GLUtesselator *tess );
+
+void APIENTRY gluTessBeginPolygon(
+ GLUtesselator *tess,
+ void *polygon_data );
+
+void APIENTRY gluTessBeginContour(
+ GLUtesselator *tess );
+
+void APIENTRY gluTessVertex(
+ GLUtesselator *tess,
+ GLdouble coords[3],
+ void *data );
+
+void APIENTRY gluTessEndContour(
+ GLUtesselator *tess );
+
+void APIENTRY gluTessEndPolygon(
+ GLUtesselator *tess );
+
+void APIENTRY gluTessProperty(
+ GLUtesselator *tess,
+ GLenum which,
+ GLdouble value );
+
+void APIENTRY gluTessNormal(
+ GLUtesselator *tess,
+ GLdouble x,
+ GLdouble y,
+ GLdouble z );
+
+void APIENTRY gluTessCallback(
+ GLUtesselator *tess,
+ GLenum which,
+ GLUcallbackFuncPtr fn );
+
+void APIENTRY gluGetTessProperty(
+ GLUtesselator *tess,
+ GLenum which,
+ GLdouble *value );
+
+GLUnurbs* APIENTRY gluNewNurbsRenderer (void);
+
+void APIENTRY gluDeleteNurbsRenderer (
+ GLUnurbs *nobj);
+
+void APIENTRY gluBeginSurface (
+ GLUnurbs *nobj);
+
+void APIENTRY gluBeginCurve (
+ GLUnurbs *nobj);
+
+void APIENTRY gluEndCurve (
+ GLUnurbs *nobj);
+
+void APIENTRY gluEndSurface (
+ GLUnurbs *nobj);
+
+void APIENTRY gluBeginTrim (
+ GLUnurbs *nobj);
+
+void APIENTRY gluEndTrim (
+ GLUnurbs *nobj);
+
+void APIENTRY gluPwlCurve (
+ GLUnurbs *nobj,
+ GLint count,
+ GLfloat *array,
+ GLint stride,
+ GLenum type);
+
+void APIENTRY gluNurbsCurve (
+ GLUnurbs *nobj,
+ GLint nknots,
+ GLfloat *knot,
+ GLint stride,
+ GLfloat *ctlarray,
+ GLint order,
+ GLenum type);
+
+void APIENTRY
+gluNurbsSurface(
+ GLUnurbs *nobj,
+ GLint sknot_count,
+ float *sknot,
+ GLint tknot_count,
+ GLfloat *tknot,
+ GLint s_stride,
+ GLint t_stride,
+ GLfloat *ctlarray,
+ GLint sorder,
+ GLint torder,
+ GLenum type);
+
+void APIENTRY
+gluLoadSamplingMatrices (
+ GLUnurbs *nobj,
+ const GLfloat modelMatrix[16],
+ const GLfloat projMatrix[16],
+ const GLint viewport[4] );
+
+void APIENTRY
+gluNurbsProperty (
+ GLUnurbs *nobj,
+ GLenum property,
+ GLfloat value );
+
+void APIENTRY
+gluGetNurbsProperty (
+ GLUnurbs *nobj,
+ GLenum property,
+ GLfloat *value );
+
+void APIENTRY
+gluNurbsCallback (
+ GLUnurbs *nobj,
+ GLenum which,
+ GLUcallbackFuncPtr fn );
+
+
+/**** Callback function prototypes ****/
+
+/* gluQuadricCallback */
+typedef void (CALLBACK* GLUquadricErrorProc) (GLenum);
+
+/* gluTessCallback */
+typedef void (CALLBACK* GLUtessBeginProc) (GLenum);
+typedef void (CALLBACK* GLUtessEdgeFlagProc) (GLboolean);
+typedef void (CALLBACK* GLUtessVertexProc) (void *);
+typedef void (CALLBACK* GLUtessEndProc) (void);
+typedef void (CALLBACK* GLUtessErrorProc) (GLenum);
+typedef void (CALLBACK* GLUtessCombineProc) (GLdouble[3],
+ void*[4],
+ GLfloat[4],
+ void** );
+typedef void (CALLBACK* GLUtessBeginDataProc) (GLenum, void *);
+typedef void (CALLBACK* GLUtessEdgeFlagDataProc) (GLboolean, void *);
+typedef void (CALLBACK* GLUtessVertexDataProc) (void *, void *);
+typedef void (CALLBACK* GLUtessEndDataProc) (void *);
+typedef void (CALLBACK* GLUtessErrorDataProc) (GLenum, void *);
+typedef void (CALLBACK* GLUtessCombineDataProc) (GLdouble[3],
+ void*[4],
+ GLfloat[4],
+ void**,
+ void* );
+
+/* gluNurbsCallback */
+typedef void (CALLBACK* GLUnurbsErrorProc) (GLenum);
+
+
+/**** Generic constants ****/
+
+/* Version */
+#define GLU_VERSION_1_1 1
+#define GLU_VERSION_1_2 1
+
+/* Errors: (return value 0 = no error) */
+#define GLU_INVALID_ENUM 100900
+#define GLU_INVALID_VALUE 100901
+#define GLU_OUT_OF_MEMORY 100902
+#define GLU_INCOMPATIBLE_GL_VERSION 100903
+
+/* StringName */
+#define GLU_VERSION 100800
+#define GLU_EXTENSIONS 100801
+
+/* Boolean */
+#define GLU_TRUE GL_TRUE
+#define GLU_FALSE GL_FALSE
+
+
+/**** Quadric constants ****/
+
+/* QuadricNormal */
+#define GLU_SMOOTH 100000
+#define GLU_FLAT 100001
+#define GLU_NONE 100002
+
+/* QuadricDrawStyle */
+#define GLU_POINT 100010
+#define GLU_LINE 100011
+#define GLU_FILL 100012
+#define GLU_SILHOUETTE 100013
+
+/* QuadricOrientation */
+#define GLU_OUTSIDE 100020
+#define GLU_INSIDE 100021
+
+/* Callback types: */
+/* GLU_ERROR 100103 */
+
+
+/**** Tesselation constants ****/
+
+#define GLU_TESS_MAX_COORD 1.0e150
+
+/* TessProperty */
+#define GLU_TESS_WINDING_RULE 100140
+#define GLU_TESS_BOUNDARY_ONLY 100141
+#define GLU_TESS_TOLERANCE 100142
+
+/* TessWinding */
+#define GLU_TESS_WINDING_ODD 100130
+#define GLU_TESS_WINDING_NONZERO 100131
+#define GLU_TESS_WINDING_POSITIVE 100132
+#define GLU_TESS_WINDING_NEGATIVE 100133
+#define GLU_TESS_WINDING_ABS_GEQ_TWO 100134
+
+/* TessCallback */
+#define GLU_TESS_BEGIN 100100 /* void (CALLBACK*)(GLenum type) */
+#define GLU_TESS_VERTEX 100101 /* void (CALLBACK*)(void *data) */
+#define GLU_TESS_END 100102 /* void (CALLBACK*)(void) */
+#define GLU_TESS_ERROR 100103 /* void (CALLBACK*)(GLenum errno) */
+#define GLU_TESS_EDGE_FLAG 100104 /* void (CALLBACK*)(GLboolean boundaryEdge) */
+#define GLU_TESS_COMBINE 100105 /* void (CALLBACK*)(GLdouble coords[3],
+ void *data[4],
+ GLfloat weight[4],
+ void **dataOut) */
+#define GLU_TESS_BEGIN_DATA 100106 /* void (CALLBACK*)(GLenum type,
+ void *polygon_data) */
+#define GLU_TESS_VERTEX_DATA 100107 /* void (CALLBACK*)(void *data,
+ void *polygon_data) */
+#define GLU_TESS_END_DATA 100108 /* void (CALLBACK*)(void *polygon_data) */
+#define GLU_TESS_ERROR_DATA 100109 /* void (CALLBACK*)(GLenum errno,
+ void *polygon_data) */
+#define GLU_TESS_EDGE_FLAG_DATA 100110 /* void (CALLBACK*)(GLboolean boundaryEdge,
+ void *polygon_data) */
+#define GLU_TESS_COMBINE_DATA 100111 /* void (CALLBACK*)(GLdouble coords[3],
+ void *data[4],
+ GLfloat weight[4],
+ void **dataOut,
+ void *polygon_data) */
+
+/* TessError */
+#define GLU_TESS_ERROR1 100151
+#define GLU_TESS_ERROR2 100152
+#define GLU_TESS_ERROR3 100153
+#define GLU_TESS_ERROR4 100154
+#define GLU_TESS_ERROR5 100155
+#define GLU_TESS_ERROR6 100156
+#define GLU_TESS_ERROR7 100157
+#define GLU_TESS_ERROR8 100158
+
+#define GLU_TESS_MISSING_BEGIN_POLYGON GLU_TESS_ERROR1
+#define GLU_TESS_MISSING_BEGIN_CONTOUR GLU_TESS_ERROR2
+#define GLU_TESS_MISSING_END_POLYGON GLU_TESS_ERROR3
+#define GLU_TESS_MISSING_END_CONTOUR GLU_TESS_ERROR4
+#define GLU_TESS_COORD_TOO_LARGE GLU_TESS_ERROR5
+#define GLU_TESS_NEED_COMBINE_CALLBACK GLU_TESS_ERROR6
+
+/**** NURBS constants ****/
+
+/* NurbsProperty */
+#define GLU_AUTO_LOAD_MATRIX 100200
+#define GLU_CULLING 100201
+#define GLU_SAMPLING_TOLERANCE 100203
+#define GLU_DISPLAY_MODE 100204
+#define GLU_PARAMETRIC_TOLERANCE 100202
+#define GLU_SAMPLING_METHOD 100205
+#define GLU_U_STEP 100206
+#define GLU_V_STEP 100207
+
+/* NurbsSampling */
+#define GLU_PATH_LENGTH 100215
+#define GLU_PARAMETRIC_ERROR 100216
+#define GLU_DOMAIN_DISTANCE 100217
+
+
+/* NurbsTrim */
+#define GLU_MAP1_TRIM_2 100210
+#define GLU_MAP1_TRIM_3 100211
+
+/* NurbsDisplay */
+/* GLU_FILL 100012 */
+#define GLU_OUTLINE_POLYGON 100240
+#define GLU_OUTLINE_PATCH 100241
+
+/* NurbsCallback */
+/* GLU_ERROR 100103 */
+
+/* NurbsErrors */
+#define GLU_NURBS_ERROR1 100251
+#define GLU_NURBS_ERROR2 100252
+#define GLU_NURBS_ERROR3 100253
+#define GLU_NURBS_ERROR4 100254
+#define GLU_NURBS_ERROR5 100255
+#define GLU_NURBS_ERROR6 100256
+#define GLU_NURBS_ERROR7 100257
+#define GLU_NURBS_ERROR8 100258
+#define GLU_NURBS_ERROR9 100259
+#define GLU_NURBS_ERROR10 100260
+#define GLU_NURBS_ERROR11 100261
+#define GLU_NURBS_ERROR12 100262
+#define GLU_NURBS_ERROR13 100263
+#define GLU_NURBS_ERROR14 100264
+#define GLU_NURBS_ERROR15 100265
+#define GLU_NURBS_ERROR16 100266
+#define GLU_NURBS_ERROR17 100267
+#define GLU_NURBS_ERROR18 100268
+#define GLU_NURBS_ERROR19 100269
+#define GLU_NURBS_ERROR20 100270
+#define GLU_NURBS_ERROR21 100271
+#define GLU_NURBS_ERROR22 100272
+#define GLU_NURBS_ERROR23 100273
+#define GLU_NURBS_ERROR24 100274
+#define GLU_NURBS_ERROR25 100275
+#define GLU_NURBS_ERROR26 100276
+#define GLU_NURBS_ERROR27 100277
+#define GLU_NURBS_ERROR28 100278
+#define GLU_NURBS_ERROR29 100279
+#define GLU_NURBS_ERROR30 100280
+#define GLU_NURBS_ERROR31 100281
+#define GLU_NURBS_ERROR32 100282
+#define GLU_NURBS_ERROR33 100283
+#define GLU_NURBS_ERROR34 100284
+#define GLU_NURBS_ERROR35 100285
+#define GLU_NURBS_ERROR36 100286
+#define GLU_NURBS_ERROR37 100287
+
+/**** Backwards compatibility for old tesselator ****/
+
+void APIENTRY gluBeginPolygon( GLUtesselator *tess );
+
+void APIENTRY gluNextContour( GLUtesselator *tess,
+ GLenum type );
+
+void APIENTRY gluEndPolygon( GLUtesselator *tess );
+
+/* Contours types -- obsolete! */
+#define GLU_CW 100120
+#define GLU_CCW 100121
+#define GLU_INTERIOR 100122
+#define GLU_EXTERIOR 100123
+#define GLU_UNKNOWN 100124
+
+/* Names without "TESS_" prefix */
+#define GLU_BEGIN GLU_TESS_BEGIN
+#define GLU_VERTEX GLU_TESS_VERTEX
+#define GLU_END GLU_TESS_END
+#define GLU_ERROR GLU_TESS_ERROR
+#define GLU_EDGE_FLAG GLU_TESS_EDGE_FLAG
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __GLU_H__ */
+#endif /* __glu_h__ */
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glut.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glut.h
new file mode 100644
index 00000000..65fd748d
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glut.h
@@ -0,0 +1,771 @@
+#ifndef __glut_h__
+#define __glut_h__
+
+/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998, 2000. */
+
+/* This program is freely distributable without licensing fees and is
+ provided without guarantee or warrantee expressed or implied. This
+ program is -not- in the public domain. */
+
+#ifdef _WIN32
+
+/* GLUT 3.7 now tries to avoid including <windows.h>
+ to avoid name space pollution, but Win32's <GL/gl.h>
+ needs APIENTRY and WINGDIAPI defined properly. */
+# if 0
+ /* This would put tons of macros and crap in our clean name space. */
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# else
+ /* XXX This is from Win32's <windef.h> */
+# ifndef APIENTRY
+# define GLUT_APIENTRY_DEFINED
+ /* Cygwin and MingW32 are two free GNU-based Open Source compilation
+ environments for Win32. Note that __CYGWIN32__ is deprecated
+ in favor of simply __CYGWIN__. */
+# if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__CYGWIN__)
+# ifdef i386
+# define APIENTRY __attribute__ ((stdcall))
+# else
+# define APIENTRY
+# endif
+# else
+# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
+# define APIENTRY __stdcall
+# else
+# define APIENTRY
+# endif
+# endif
+# endif
+ /* XXX This is from Win32's <winnt.h> */
+# ifndef CALLBACK
+# if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__CYGWIN__)
+# define CALLBACK __attribute__ ((stdcall))
+# else
+# if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64)) && !defined(MIDL_PASS)
+# define CALLBACK __stdcall
+# else
+# define CALLBACK
+# endif
+# endif
+# endif
+ /* XXX This is from Win32's <wingdi.h> and <winnt.h> */
+# ifndef WINGDIAPI
+# define GLUT_WINGDIAPI_DEFINED
+# if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__CYGWIN__)
+# define WINGDIAPI
+# else
+# define WINGDIAPI __declspec(dllimport)
+# endif
+# endif
+# if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__CYGWIN__)
+ /* Rely on Cygwin32/MingW32 <stddef.h> to set wchar_t. */
+ /* XXX Warning. The Cygwin32/MingW32 definition for wchar_t
+ is an "int" instead of the "short" used by Windows. */
+# include <stddef.h>
+# else
+ /* XXX This is from Win32's <ctype.h> */
+# ifndef _WCHAR_T_DEFINED
+typedef unsigned short wchar_t;
+# define _WCHAR_T_DEFINED
+# endif
+# endif
+# endif
+
+/* To disable automatic library usage for GLUT, define GLUT_NO_LIB_PRAGMA
+ in your compile preprocessor options. */
+# if !defined(GLUT_BUILDING_LIB) && !defined(GLUT_NO_LIB_PRAGMA)
+# pragma comment (lib, "winmm.lib") /* link with Windows MultiMedia lib */
+# pragma comment (lib, "user32.lib") /* link with Windows User lib */
+# pragma comment (lib, "gdi32.lib") /* link with Windows GDI lib */
+/* To enable automatic SGI OpenGL for Windows library usage for GLUT,
+ define GLUT_USE_SGI_OPENGL in your compile preprocessor options. */
+# ifdef GLUT_USE_SGI_OPENGL
+# pragma comment (lib, "opengl.lib") /* link with SGI OpenGL for Windows lib */
+# pragma comment (lib, "glu.lib") /* link with SGI OpenGL Utility lib */
+# if defined(GLUT_STATIC_LIB)
+# pragma comment (lib, "glutstatic.lib") /* link with static Win32 GLUT lib */
+# else
+# pragma comment (lib, "glut.lib") /* link with Win32 GLUT lib */
+# endif
+# else
+# pragma comment (lib, "opengl32.lib") /* link with Microsoft OpenGL lib */
+# pragma comment (lib, "glustatic.lib") /* link with Microsoft OpenGL Utility lib */
+# if defined(GLUT_STATIC_LIB)
+# pragma comment (lib, "glutstatic.lib") /* link with static Win32 GLUT lib */
+# else
+# pragma comment (lib, "glut32.lib") /* link with Win32 GLUT lib */
+# endif
+# endif
+# endif
+
+/* To disable supression of annoying warnings about floats being promoted
+ to doubles, define GLUT_NO_WARNING_DISABLE in your compile preprocessor
+ options. */
+# if defined(_MSC_VER) && !defined(GLUT_NO_WARNING_DISABLE)
+# pragma warning (disable:4244) /* Disable bogus VC++ 4.2 conversion warnings. */
+# pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */
+# endif
+
+/* Win32 has an annoying issue where there are multiple C run-time
+ libraries (CRTs). If the executable is linked with a different CRT
+ from the GLUT DLL, the GLUT DLL will not share the same CRT static
+ data seen by the executable. In particular, atexit callbacks registered
+ in the executable will not be called if GLUT calls its (different)
+ exit routine). GLUT is typically built with the
+ "/MD" option (the CRT with multithreading DLL support), but the Visual
+ C++ linker default is "/ML" (the single threaded CRT).
+
+ One workaround to this issue is requiring users to always link with
+ the same CRT as GLUT is compiled with. That requires users supply a
+ non-standard option. GLUT 3.7 has its own built-in workaround where
+ the executable's "exit" function pointer is covertly passed to GLUT.
+ GLUT then calls the executable's exit function pointer to ensure that
+ any "atexit" calls registered by the application are called if GLUT
+ needs to exit.
+
+ Note that the __glut*WithExit routines should NEVER be called directly.
+ To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */
+
+/* XXX This is from Win32's <process.h> */
+# if !defined(_MSC_VER) && !defined(__cdecl)
+ /* Define __cdecl for non-Microsoft compilers. */
+# define __cdecl
+# define GLUT_DEFINED___CDECL
+# endif
+# ifndef _CRTIMP
+# ifdef _NTSDK
+ /* Definition compatible with NT SDK */
+# define _CRTIMP
+# else
+ /* Current definition */
+# ifdef _DLL
+# define _CRTIMP __declspec(dllimport)
+# else
+# define _CRTIMP
+# endif
+# endif
+# define GLUT_DEFINED__CRTIMP
+# endif
+
+/* GLUT API entry point declarations for Win32. */
+# ifdef GLUT_BUILDING_LIB
+# define GLUTAPI __declspec(dllexport)
+# else
+# ifdef _DLL
+# define GLUTAPI __declspec(dllimport)
+# else
+# define GLUTAPI extern
+# endif
+# endif
+
+/* GLUT callback calling convention for Win32. */
+# define GLUTCALLBACK __cdecl
+
+#endif /* _WIN32 */
+
+#include <GL/gl.h>
+#include <GL/glu.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _WIN32
+# ifndef GLUT_BUILDING_LIB
+# if __BORLANDC__
+# if defined(_BUILDRTLDLL)
+void __cdecl __export exit(int __status);
+# else
+void __cdecl exit(int __status);
+# endif
+# else
+# if _MSC_VER >= 1200
+ extern _CRTIMP __declspec(noreturn) void __cdecl exit(int);
+# else
+ extern _CRTIMP void __cdecl exit(int);
+# endif
+# endif
+# endif
+#else
+/* non-Win32 case. */
+/* Define APIENTRY and CALLBACK to nothing if we aren't on Win32. */
+# define APIENTRY
+# define GLUT_APIENTRY_DEFINED
+# define CALLBACK
+/* Define GLUTAPI and GLUTCALLBACK as below if we aren't on Win32. */
+# define GLUTAPI extern
+# define GLUTCALLBACK
+/* Prototype exit for the non-Win32 case (see above). */
+# ifdef __GNUC__
+extern void exit(int __status) __attribute__((__noreturn__));
+# else
+extern void exit(int);
+# endif
+#endif
+
+/**
+ GLUT API revision history:
+
+ GLUT_API_VERSION is updated to reflect incompatible GLUT
+ API changes (interface changes, semantic changes, deletions,
+ or additions).
+
+ GLUT_API_VERSION=1 First public release of GLUT. 11/29/94
+
+ GLUT_API_VERSION=2 Added support for OpenGL/GLX multisampling,
+ extension. Supports new input devices like tablet, dial and button
+ box, and Spaceball. Easy to query OpenGL extensions.
+
+ GLUT_API_VERSION=3 glutMenuStatus added.
+
+ GLUT_API_VERSION=4 glutInitDisplayString, glutWarpPointer,
+ glutBitmapLength, glutStrokeLength, glutWindowStatusFunc, dynamic
+ video resize subAPI, glutPostWindowRedisplay, glutKeyboardUpFunc,
+ glutSpecialUpFunc, glutIgnoreKeyRepeat, glutSetKeyRepeat,
+ glutJoystickFunc, glutForceJoystickFunc, glutStrokeWidthf,
+ glutStrokeLengthf (NOT FINALIZED!).
+**/
+#ifndef GLUT_API_VERSION /* allow this to be overriden */
+#define GLUT_API_VERSION 3
+#endif
+
+/**
+ GLUT implementation revision history:
+
+ GLUT_XLIB_IMPLEMENTATION is updated to reflect both GLUT
+ API revisions and implementation revisions (ie, bug fixes).
+
+ GLUT_XLIB_IMPLEMENTATION=1 mjk's first public release of
+ GLUT Xlib-based implementation. 11/29/94
+
+ GLUT_XLIB_IMPLEMENTATION=2 mjk's second public release of
+ GLUT Xlib-based implementation providing GLUT version 2
+ interfaces.
+
+ GLUT_XLIB_IMPLEMENTATION=3 mjk's GLUT 2.2 images. 4/17/95
+
+ GLUT_XLIB_IMPLEMENTATION=4 mjk's GLUT 2.3 images. 6/?/95
+
+ GLUT_XLIB_IMPLEMENTATION=5 mjk's GLUT 3.0 images. 10/?/95
+
+ GLUT_XLIB_IMPLEMENTATION=7 mjk's GLUT 3.1+ with glutWarpPoitner. 7/24/96
+
+ GLUT_XLIB_IMPLEMENTATION=8 mjk's GLUT 3.1+ with glutWarpPoitner
+ and video resize. 1/3/97
+
+ GLUT_XLIB_IMPLEMENTATION=9 mjk's GLUT 3.4 release with early GLUT 4 routines.
+
+ GLUT_XLIB_IMPLEMENTATION=11 Mesa 2.5's GLUT 3.6 release.
+
+ GLUT_XLIB_IMPLEMENTATION=12 mjk's GLUT 3.6 release with early GLUT 4 routines + signal handling.
+
+ GLUT_XLIB_IMPLEMENTATION=13 mjk's GLUT 3.7 beta with GameGLUT support.
+
+ GLUT_XLIB_IMPLEMENTATION=14 mjk's GLUT 3.7 beta with f90gl friend interface.
+
+ GLUT_XLIB_IMPLEMENTATION=15 mjk's GLUT 3.7 beta sync'ed with Mesa <GL/glut.h>
+
+ GLUT_XLIB_IMPLEMENTATION=16 mjk's early GLUT 3.8
+
+ GLUT_XLIB_IMPLEMENTATION=17 mjk's GLUT 3.8 with glutStrokeWidthf and glutStrokeLengthf
+**/
+#ifndef GLUT_XLIB_IMPLEMENTATION /* Allow this to be overriden. */
+#define GLUT_XLIB_IMPLEMENTATION 17
+#endif
+
+/* Display mode bit masks. */
+#define GLUT_RGB 0
+#define GLUT_RGBA GLUT_RGB
+#define GLUT_INDEX 1
+#define GLUT_SINGLE 0
+#define GLUT_DOUBLE 2
+#define GLUT_ACCUM 4
+#define GLUT_ALPHA 8
+#define GLUT_DEPTH 16
+#define GLUT_STENCIL 32
+#if (GLUT_API_VERSION >= 2)
+#define GLUT_MULTISAMPLE 128
+#define GLUT_STEREO 256
+#endif
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_LUMINANCE 512
+#endif
+
+/* Mouse buttons. */
+#define GLUT_LEFT_BUTTON 0
+#define GLUT_MIDDLE_BUTTON 1
+#define GLUT_RIGHT_BUTTON 2
+
+/* Mouse button state. */
+#define GLUT_DOWN 0
+#define GLUT_UP 1
+
+#if (GLUT_API_VERSION >= 2)
+/* function keys */
+#define GLUT_KEY_F1 1
+#define GLUT_KEY_F2 2
+#define GLUT_KEY_F3 3
+#define GLUT_KEY_F4 4
+#define GLUT_KEY_F5 5
+#define GLUT_KEY_F6 6
+#define GLUT_KEY_F7 7
+#define GLUT_KEY_F8 8
+#define GLUT_KEY_F9 9
+#define GLUT_KEY_F10 10
+#define GLUT_KEY_F11 11
+#define GLUT_KEY_F12 12
+/* directional keys */
+#define GLUT_KEY_LEFT 100
+#define GLUT_KEY_UP 101
+#define GLUT_KEY_RIGHT 102
+#define GLUT_KEY_DOWN 103
+#define GLUT_KEY_PAGE_UP 104
+#define GLUT_KEY_PAGE_DOWN 105
+#define GLUT_KEY_HOME 106
+#define GLUT_KEY_END 107
+#define GLUT_KEY_INSERT 108
+#endif
+
+/* Entry/exit state. */
+#define GLUT_LEFT 0
+#define GLUT_ENTERED 1
+
+/* Menu usage state. */
+#define GLUT_MENU_NOT_IN_USE 0
+#define GLUT_MENU_IN_USE 1
+
+/* Visibility state. */
+#define GLUT_NOT_VISIBLE 0
+#define GLUT_VISIBLE 1
+
+/* Window status state. */
+#define GLUT_HIDDEN 0
+#define GLUT_FULLY_RETAINED 1
+#define GLUT_PARTIALLY_RETAINED 2
+#define GLUT_FULLY_COVERED 3
+
+/* Color index component selection values. */
+#define GLUT_RED 0
+#define GLUT_GREEN 1
+#define GLUT_BLUE 2
+
+#ifdef _WIN32
+/* Stroke font constants (use these in GLUT program). */
+#define GLUT_STROKE_ROMAN ((void*)0)
+#define GLUT_STROKE_MONO_ROMAN ((void*)1)
+
+/* Bitmap font constants (use these in GLUT program). */
+#define GLUT_BITMAP_9_BY_15 ((void*)2)
+#define GLUT_BITMAP_8_BY_13 ((void*)3)
+#define GLUT_BITMAP_TIMES_ROMAN_10 ((void*)4)
+#define GLUT_BITMAP_TIMES_ROMAN_24 ((void*)5)
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_BITMAP_HELVETICA_10 ((void*)6)
+#define GLUT_BITMAP_HELVETICA_12 ((void*)7)
+#define GLUT_BITMAP_HELVETICA_18 ((void*)8)
+#endif
+#else
+/* Stroke font opaque addresses (use constants instead in source code). */
+GLUTAPI void *glutStrokeRoman;
+GLUTAPI void *glutStrokeMonoRoman;
+
+/* Stroke font constants (use these in GLUT program). */
+#define GLUT_STROKE_ROMAN (&glutStrokeRoman)
+#define GLUT_STROKE_MONO_ROMAN (&glutStrokeMonoRoman)
+
+/* Bitmap font opaque addresses (use constants instead in source code). */
+GLUTAPI void *glutBitmap9By15;
+GLUTAPI void *glutBitmap8By13;
+GLUTAPI void *glutBitmapTimesRoman10;
+GLUTAPI void *glutBitmapTimesRoman24;
+GLUTAPI void *glutBitmapHelvetica10;
+GLUTAPI void *glutBitmapHelvetica12;
+GLUTAPI void *glutBitmapHelvetica18;
+
+/* Bitmap font constants (use these in GLUT program). */
+#define GLUT_BITMAP_9_BY_15 (&glutBitmap9By15)
+#define GLUT_BITMAP_8_BY_13 (&glutBitmap8By13)
+#define GLUT_BITMAP_TIMES_ROMAN_10 (&glutBitmapTimesRoman10)
+#define GLUT_BITMAP_TIMES_ROMAN_24 (&glutBitmapTimesRoman24)
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_BITMAP_HELVETICA_10 (&glutBitmapHelvetica10)
+#define GLUT_BITMAP_HELVETICA_12 (&glutBitmapHelvetica12)
+#define GLUT_BITMAP_HELVETICA_18 (&glutBitmapHelvetica18)
+#endif
+#endif
+
+/* glutGet parameters. */
+#define GLUT_WINDOW_X ((GLenum) 100)
+#define GLUT_WINDOW_Y ((GLenum) 101)
+#define GLUT_WINDOW_WIDTH ((GLenum) 102)
+#define GLUT_WINDOW_HEIGHT ((GLenum) 103)
+#define GLUT_WINDOW_BUFFER_SIZE ((GLenum) 104)
+#define GLUT_WINDOW_STENCIL_SIZE ((GLenum) 105)
+#define GLUT_WINDOW_DEPTH_SIZE ((GLenum) 106)
+#define GLUT_WINDOW_RED_SIZE ((GLenum) 107)
+#define GLUT_WINDOW_GREEN_SIZE ((GLenum) 108)
+#define GLUT_WINDOW_BLUE_SIZE ((GLenum) 109)
+#define GLUT_WINDOW_ALPHA_SIZE ((GLenum) 110)
+#define GLUT_WINDOW_ACCUM_RED_SIZE ((GLenum) 111)
+#define GLUT_WINDOW_ACCUM_GREEN_SIZE ((GLenum) 112)
+#define GLUT_WINDOW_ACCUM_BLUE_SIZE ((GLenum) 113)
+#define GLUT_WINDOW_ACCUM_ALPHA_SIZE ((GLenum) 114)
+#define GLUT_WINDOW_DOUBLEBUFFER ((GLenum) 115)
+#define GLUT_WINDOW_RGBA ((GLenum) 116)
+#define GLUT_WINDOW_PARENT ((GLenum) 117)
+#define GLUT_WINDOW_NUM_CHILDREN ((GLenum) 118)
+#define GLUT_WINDOW_COLORMAP_SIZE ((GLenum) 119)
+#if (GLUT_API_VERSION >= 2)
+#define GLUT_WINDOW_NUM_SAMPLES ((GLenum) 120)
+#define GLUT_WINDOW_STEREO ((GLenum) 121)
+#endif
+#if (GLUT_API_VERSION >= 3)
+#define GLUT_WINDOW_CURSOR ((GLenum) 122)
+#endif
+#define GLUT_SCREEN_WIDTH ((GLenum) 200)
+#define GLUT_SCREEN_HEIGHT ((GLenum) 201)
+#define GLUT_SCREEN_WIDTH_MM ((GLenum) 202)
+#define GLUT_SCREEN_HEIGHT_MM ((GLenum) 203)
+#define GLUT_MENU_NUM_ITEMS ((GLenum) 300)
+#define GLUT_DISPLAY_MODE_POSSIBLE ((GLenum) 400)
+#define GLUT_INIT_WINDOW_X ((GLenum) 500)
+#define GLUT_INIT_WINDOW_Y ((GLenum) 501)
+#define GLUT_INIT_WINDOW_WIDTH ((GLenum) 502)
+#define GLUT_INIT_WINDOW_HEIGHT ((GLenum) 503)
+#define GLUT_INIT_DISPLAY_MODE ((GLenum) 504)
+#if (GLUT_API_VERSION >= 2)
+#define GLUT_ELAPSED_TIME ((GLenum) 700)
+#endif
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+#define GLUT_WINDOW_FORMAT_ID ((GLenum) 123)
+#endif
+
+#if (GLUT_API_VERSION >= 2)
+/* glutDeviceGet parameters. */
+#define GLUT_HAS_KEYBOARD ((GLenum) 600)
+#define GLUT_HAS_MOUSE ((GLenum) 601)
+#define GLUT_HAS_SPACEBALL ((GLenum) 602)
+#define GLUT_HAS_DIAL_AND_BUTTON_BOX ((GLenum) 603)
+#define GLUT_HAS_TABLET ((GLenum) 604)
+#define GLUT_NUM_MOUSE_BUTTONS ((GLenum) 605)
+#define GLUT_NUM_SPACEBALL_BUTTONS ((GLenum) 606)
+#define GLUT_NUM_BUTTON_BOX_BUTTONS ((GLenum) 607)
+#define GLUT_NUM_DIALS ((GLenum) 608)
+#define GLUT_NUM_TABLET_BUTTONS ((GLenum) 609)
+#endif
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+#define GLUT_DEVICE_IGNORE_KEY_REPEAT ((GLenum) 610)
+#define GLUT_DEVICE_KEY_REPEAT ((GLenum) 611)
+#define GLUT_HAS_JOYSTICK ((GLenum) 612)
+#define GLUT_OWNS_JOYSTICK ((GLenum) 613)
+#define GLUT_JOYSTICK_BUTTONS ((GLenum) 614)
+#define GLUT_JOYSTICK_AXES ((GLenum) 615)
+#define GLUT_JOYSTICK_POLL_RATE ((GLenum) 616)
+#endif
+
+#if (GLUT_API_VERSION >= 3)
+/* glutLayerGet parameters. */
+#define GLUT_OVERLAY_POSSIBLE ((GLenum) 800)
+#define GLUT_LAYER_IN_USE ((GLenum) 801)
+#define GLUT_HAS_OVERLAY ((GLenum) 802)
+#define GLUT_TRANSPARENT_INDEX ((GLenum) 803)
+#define GLUT_NORMAL_DAMAGED ((GLenum) 804)
+#define GLUT_OVERLAY_DAMAGED ((GLenum) 805)
+
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+/* glutVideoResizeGet parameters. */
+#define GLUT_VIDEO_RESIZE_POSSIBLE ((GLenum) 900)
+#define GLUT_VIDEO_RESIZE_IN_USE ((GLenum) 901)
+#define GLUT_VIDEO_RESIZE_X_DELTA ((GLenum) 902)
+#define GLUT_VIDEO_RESIZE_Y_DELTA ((GLenum) 903)
+#define GLUT_VIDEO_RESIZE_WIDTH_DELTA ((GLenum) 904)
+#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA ((GLenum) 905)
+#define GLUT_VIDEO_RESIZE_X ((GLenum) 906)
+#define GLUT_VIDEO_RESIZE_Y ((GLenum) 907)
+#define GLUT_VIDEO_RESIZE_WIDTH ((GLenum) 908)
+#define GLUT_VIDEO_RESIZE_HEIGHT ((GLenum) 909)
+#endif
+
+/* glutUseLayer parameters. */
+#define GLUT_NORMAL ((GLenum) 0)
+#define GLUT_OVERLAY ((GLenum) 1)
+
+/* glutGetModifiers return mask. */
+#define GLUT_ACTIVE_SHIFT 1
+#define GLUT_ACTIVE_CTRL 2
+#define GLUT_ACTIVE_ALT 4
+
+/* glutSetCursor parameters. */
+/* Basic arrows. */
+#define GLUT_CURSOR_RIGHT_ARROW 0
+#define GLUT_CURSOR_LEFT_ARROW 1
+/* Symbolic cursor shapes. */
+#define GLUT_CURSOR_INFO 2
+#define GLUT_CURSOR_DESTROY 3
+#define GLUT_CURSOR_HELP 4
+#define GLUT_CURSOR_CYCLE 5
+#define GLUT_CURSOR_SPRAY 6
+#define GLUT_CURSOR_WAIT 7
+#define GLUT_CURSOR_TEXT 8
+#define GLUT_CURSOR_CROSSHAIR 9
+/* Directional cursors. */
+#define GLUT_CURSOR_UP_DOWN 10
+#define GLUT_CURSOR_LEFT_RIGHT 11
+/* Sizing cursors. */
+#define GLUT_CURSOR_TOP_SIDE 12
+#define GLUT_CURSOR_BOTTOM_SIDE 13
+#define GLUT_CURSOR_LEFT_SIDE 14
+#define GLUT_CURSOR_RIGHT_SIDE 15
+#define GLUT_CURSOR_TOP_LEFT_CORNER 16
+#define GLUT_CURSOR_TOP_RIGHT_CORNER 17
+#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER 18
+#define GLUT_CURSOR_BOTTOM_LEFT_CORNER 19
+/* Inherit from parent window. */
+#define GLUT_CURSOR_INHERIT 100
+/* Blank cursor. */
+#define GLUT_CURSOR_NONE 101
+/* Fullscreen crosshair (if available). */
+#define GLUT_CURSOR_FULL_CROSSHAIR 102
+#endif
+
+/* GLUT initialization sub-API. */
+GLUTAPI void APIENTRY glutInit(int *argcp, char **argv);
+#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
+GLUTAPI void APIENTRY __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int));
+#ifndef GLUT_BUILDING_LIB
+static void APIENTRY glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); }
+#define glutInit glutInit_ATEXIT_HACK
+#endif
+#endif
+GLUTAPI void APIENTRY glutInitDisplayMode(unsigned int mode);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+GLUTAPI void APIENTRY glutInitDisplayString(const char *string);
+#endif
+GLUTAPI void APIENTRY glutInitWindowPosition(int x, int y);
+GLUTAPI void APIENTRY glutInitWindowSize(int width, int height);
+GLUTAPI void APIENTRY glutMainLoop(void);
+
+/* GLUT window sub-API. */
+GLUTAPI int APIENTRY glutCreateWindow(const char *title);
+#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
+GLUTAPI int APIENTRY __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int));
+#ifndef GLUT_BUILDING_LIB
+static int APIENTRY glutCreateWindow_ATEXIT_HACK(const char *title) { return __glutCreateWindowWithExit(title, exit); }
+#define glutCreateWindow glutCreateWindow_ATEXIT_HACK
+#endif
+#endif
+GLUTAPI int APIENTRY glutCreateSubWindow(int win, int x, int y, int width, int height);
+GLUTAPI void APIENTRY glutDestroyWindow(int win);
+GLUTAPI void APIENTRY glutPostRedisplay(void);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11)
+GLUTAPI void APIENTRY glutPostWindowRedisplay(int win);
+#endif
+GLUTAPI void APIENTRY glutSwapBuffers(void);
+GLUTAPI int APIENTRY glutGetWindow(void);
+GLUTAPI void APIENTRY glutSetWindow(int win);
+GLUTAPI void APIENTRY glutSetWindowTitle(const char *title);
+GLUTAPI void APIENTRY glutSetIconTitle(const char *title);
+GLUTAPI void APIENTRY glutPositionWindow(int x, int y);
+GLUTAPI void APIENTRY glutReshapeWindow(int width, int height);
+GLUTAPI void APIENTRY glutPopWindow(void);
+GLUTAPI void APIENTRY glutPushWindow(void);
+GLUTAPI void APIENTRY glutIconifyWindow(void);
+GLUTAPI void APIENTRY glutShowWindow(void);
+GLUTAPI void APIENTRY glutHideWindow(void);
+#if (GLUT_API_VERSION >= 3)
+GLUTAPI void APIENTRY glutFullScreen(void);
+GLUTAPI void APIENTRY glutSetCursor(int cursor);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+GLUTAPI void APIENTRY glutWarpPointer(int x, int y);
+#endif
+
+/* GLUT overlay sub-API. */
+GLUTAPI void APIENTRY glutEstablishOverlay(void);
+GLUTAPI void APIENTRY glutRemoveOverlay(void);
+GLUTAPI void APIENTRY glutUseLayer(GLenum layer);
+GLUTAPI void APIENTRY glutPostOverlayRedisplay(void);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11)
+GLUTAPI void APIENTRY glutPostWindowOverlayRedisplay(int win);
+#endif
+GLUTAPI void APIENTRY glutShowOverlay(void);
+GLUTAPI void APIENTRY glutHideOverlay(void);
+#endif
+
+/* GLUT menu sub-API. */
+GLUTAPI int APIENTRY glutCreateMenu(void (GLUTCALLBACK *func)(int));
+#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
+GLUTAPI int APIENTRY __glutCreateMenuWithExit(void (GLUTCALLBACK *func)(int), void (__cdecl *exitfunc)(int));
+#ifndef GLUT_BUILDING_LIB
+static int APIENTRY glutCreateMenu_ATEXIT_HACK(void (GLUTCALLBACK *func)(int)) { return __glutCreateMenuWithExit(func, exit); }
+#define glutCreateMenu glutCreateMenu_ATEXIT_HACK
+#endif
+#endif
+GLUTAPI void APIENTRY glutDestroyMenu(int menu);
+GLUTAPI int APIENTRY glutGetMenu(void);
+GLUTAPI void APIENTRY glutSetMenu(int menu);
+GLUTAPI void APIENTRY glutAddMenuEntry(const char *label, int value);
+GLUTAPI void APIENTRY glutAddSubMenu(const char *label, int submenu);
+GLUTAPI void APIENTRY glutChangeToMenuEntry(int item, const char *label, int value);
+GLUTAPI void APIENTRY glutChangeToSubMenu(int item, const char *label, int submenu);
+GLUTAPI void APIENTRY glutRemoveMenuItem(int item);
+GLUTAPI void APIENTRY glutAttachMenu(int button);
+GLUTAPI void APIENTRY glutDetachMenu(int button);
+
+/* GLUT window callback sub-API. */
+GLUTAPI void APIENTRY glutDisplayFunc(void (GLUTCALLBACK *func)(void));
+GLUTAPI void APIENTRY glutReshapeFunc(void (GLUTCALLBACK *func)(int width, int height));
+GLUTAPI void APIENTRY glutKeyboardFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y));
+GLUTAPI void APIENTRY glutMouseFunc(void (GLUTCALLBACK *func)(int button, int state, int x, int y));
+GLUTAPI void APIENTRY glutMotionFunc(void (GLUTCALLBACK *func)(int x, int y));
+GLUTAPI void APIENTRY glutPassiveMotionFunc(void (GLUTCALLBACK *func)(int x, int y));
+GLUTAPI void APIENTRY glutEntryFunc(void (GLUTCALLBACK *func)(int state));
+GLUTAPI void APIENTRY glutVisibilityFunc(void (GLUTCALLBACK *func)(int state));
+GLUTAPI void APIENTRY glutIdleFunc(void (GLUTCALLBACK *func)(void));
+GLUTAPI void APIENTRY glutTimerFunc(unsigned int millis, void (GLUTCALLBACK *func)(int value), int value);
+GLUTAPI void APIENTRY glutMenuStateFunc(void (GLUTCALLBACK *func)(int state));
+#if (GLUT_API_VERSION >= 2)
+GLUTAPI void APIENTRY glutSpecialFunc(void (GLUTCALLBACK *func)(int key, int x, int y));
+GLUTAPI void APIENTRY glutSpaceballMotionFunc(void (GLUTCALLBACK *func)(int x, int y, int z));
+GLUTAPI void APIENTRY glutSpaceballRotateFunc(void (GLUTCALLBACK *func)(int x, int y, int z));
+GLUTAPI void APIENTRY glutSpaceballButtonFunc(void (GLUTCALLBACK *func)(int button, int state));
+GLUTAPI void APIENTRY glutButtonBoxFunc(void (GLUTCALLBACK *func)(int button, int state));
+GLUTAPI void APIENTRY glutDialsFunc(void (GLUTCALLBACK *func)(int dial, int value));
+GLUTAPI void APIENTRY glutTabletMotionFunc(void (GLUTCALLBACK *func)(int x, int y));
+GLUTAPI void APIENTRY glutTabletButtonFunc(void (GLUTCALLBACK *func)(int button, int state, int x, int y));
+#if (GLUT_API_VERSION >= 3)
+GLUTAPI void APIENTRY glutMenuStatusFunc(void (GLUTCALLBACK *func)(int status, int x, int y));
+GLUTAPI void APIENTRY glutOverlayDisplayFunc(void (GLUTCALLBACK *func)(void));
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+GLUTAPI void APIENTRY glutWindowStatusFunc(void (GLUTCALLBACK *func)(int state));
+#endif
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+GLUTAPI void APIENTRY glutKeyboardUpFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y));
+GLUTAPI void APIENTRY glutSpecialUpFunc(void (GLUTCALLBACK *func)(int key, int x, int y));
+GLUTAPI void APIENTRY glutJoystickFunc(void (GLUTCALLBACK *func)(unsigned int buttonMask, int x, int y, int z), int pollInterval);
+#endif
+#endif
+#endif
+
+/* GLUT color index sub-API. */
+GLUTAPI void APIENTRY glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue);
+GLUTAPI GLfloat APIENTRY glutGetColor(int ndx, int component);
+GLUTAPI void APIENTRY glutCopyColormap(int win);
+
+/* GLUT state retrieval sub-API. */
+GLUTAPI int APIENTRY glutGet(GLenum type);
+GLUTAPI int APIENTRY glutDeviceGet(GLenum type);
+#if (GLUT_API_VERSION >= 2)
+/* GLUT extension support sub-API */
+GLUTAPI int APIENTRY glutExtensionSupported(const char *name);
+#endif
+#if (GLUT_API_VERSION >= 3)
+GLUTAPI int APIENTRY glutGetModifiers(void);
+GLUTAPI int APIENTRY glutLayerGet(GLenum type);
+#endif
+
+/* GLUT font sub-API */
+GLUTAPI void APIENTRY glutBitmapCharacter(void *font, int character);
+GLUTAPI int APIENTRY glutBitmapWidth(void *font, int character);
+GLUTAPI void APIENTRY glutStrokeCharacter(void *font, int character);
+GLUTAPI int APIENTRY glutStrokeWidth(void *font, int character);
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+GLUTAPI int APIENTRY glutBitmapLength(void *font, const unsigned char *string);
+GLUTAPI int APIENTRY glutStrokeLength(void *font, const unsigned char *string);
+#endif
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 17)
+GLUTAPI float APIENTRY glutStrokeWidthf(void *font, int character);
+GLUTAPI float APIENTRY glutStrokeLengthf(void *font, const unsigned char *string);
+#endif
+
+/* GLUT pre-built models sub-API */
+GLUTAPI void APIENTRY glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
+GLUTAPI void APIENTRY glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
+GLUTAPI void APIENTRY glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
+GLUTAPI void APIENTRY glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
+GLUTAPI void APIENTRY glutWireCube(GLdouble size);
+GLUTAPI void APIENTRY glutSolidCube(GLdouble size);
+GLUTAPI void APIENTRY glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
+GLUTAPI void APIENTRY glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
+GLUTAPI void APIENTRY glutWireDodecahedron(void);
+GLUTAPI void APIENTRY glutSolidDodecahedron(void);
+GLUTAPI void APIENTRY glutWireTeapot(GLdouble size);
+GLUTAPI void APIENTRY glutSolidTeapot(GLdouble size);
+GLUTAPI void APIENTRY glutWireOctahedron(void);
+GLUTAPI void APIENTRY glutSolidOctahedron(void);
+GLUTAPI void APIENTRY glutWireTetrahedron(void);
+GLUTAPI void APIENTRY glutSolidTetrahedron(void);
+GLUTAPI void APIENTRY glutWireIcosahedron(void);
+GLUTAPI void APIENTRY glutSolidIcosahedron(void);
+
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)
+/* GLUT video resize sub-API. */
+GLUTAPI int APIENTRY glutVideoResizeGet(GLenum param);
+GLUTAPI void APIENTRY glutSetupVideoResizing(void);
+GLUTAPI void APIENTRY glutStopVideoResizing(void);
+GLUTAPI void APIENTRY glutVideoResize(int x, int y, int width, int height);
+GLUTAPI void APIENTRY glutVideoPan(int x, int y, int width, int height);
+
+/* GLUT debugging sub-API. */
+GLUTAPI void APIENTRY glutReportErrors(void);
+#endif
+
+#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
+/* GLUT device control sub-API. */
+/* glutSetKeyRepeat modes. */
+#define GLUT_KEY_REPEAT_OFF 0
+#define GLUT_KEY_REPEAT_ON 1
+#define GLUT_KEY_REPEAT_DEFAULT 2
+
+/* Joystick button masks. */
+#define GLUT_JOYSTICK_BUTTON_A 1
+#define GLUT_JOYSTICK_BUTTON_B 2
+#define GLUT_JOYSTICK_BUTTON_C 4
+#define GLUT_JOYSTICK_BUTTON_D 8
+
+GLUTAPI void APIENTRY glutIgnoreKeyRepeat(int ignore);
+GLUTAPI void APIENTRY glutSetKeyRepeat(int repeatMode);
+GLUTAPI void APIENTRY glutForceJoystickFunc(void);
+
+/* GLUT game mode sub-API. */
+/* glutGameModeGet. */
+#define GLUT_GAME_MODE_ACTIVE ((GLenum) 0)
+#define GLUT_GAME_MODE_POSSIBLE ((GLenum) 1)
+#define GLUT_GAME_MODE_WIDTH ((GLenum) 2)
+#define GLUT_GAME_MODE_HEIGHT ((GLenum) 3)
+#define GLUT_GAME_MODE_PIXEL_DEPTH ((GLenum) 4)
+#define GLUT_GAME_MODE_REFRESH_RATE ((GLenum) 5)
+#define GLUT_GAME_MODE_DISPLAY_CHANGED ((GLenum) 6)
+
+GLUTAPI void APIENTRY glutGameModeString(const char *string);
+GLUTAPI int APIENTRY glutEnterGameMode(void);
+GLUTAPI void APIENTRY glutLeaveGameMode(void);
+GLUTAPI int APIENTRY glutGameModeGet(GLenum mode);
+#endif
+
+#ifdef __cplusplus
+}
+
+#endif
+
+#ifdef GLUT_APIENTRY_DEFINED
+# undef GLUT_APIENTRY_DEFINED
+# undef APIENTRY
+#endif
+
+#ifdef GLUT_WINGDIAPI_DEFINED
+# undef GLUT_WINGDIAPI_DEFINED
+# undef WINGDIAPI
+#endif
+
+#ifdef GLUT_DEFINED___CDECL
+# undef GLUT_DEFINED___CDECL
+# undef __cdecl
+#endif
+
+#ifdef GLUT_DEFINED__CRTIMP
+# undef GLUT_DEFINED__CRTIMP
+# undef _CRTIMP
+#endif
+
+#endif /* __glut_h__ */
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glx.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glx.h
new file mode 100644
index 00000000..66ad53c6
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glx.h
@@ -0,0 +1,357 @@
+#ifndef __glx_h__
+#define __glx_h__
+
+/*
+** The contents of this file are subject to the GLX Public License Version 1.0
+** (the "License"). You may not use this file except in compliance with the
+** License. You may obtain a copy of the License at Silicon Graphics, Inc.,
+** attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA 94043
+** or at http://www.sgi.com/software/opensource/glx/license.html.
+**
+** Software distributed under the License is distributed on an "AS IS"
+** basis. ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY
+** IMPLIED WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR
+** PURPOSE OR OF NON- INFRINGEMENT. See the License for the specific
+** language governing rights and limitations under the License.
+**
+** The Original Software is GLX version 1.2 source code, released February,
+** 1999. The developer of the Original Software is Silicon Graphics, Inc.
+** Those portions of the Subject Software created by Silicon Graphics, Inc.
+** are Copyright (c) 1991-9 Silicon Graphics, Inc. All Rights Reserved.
+**
+** $Header: //sw/main/drivers/OpenGL/win/glx/include/glx.h#21 $
+*/
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <GL/gl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Names for attributes to glXGetConfig.
+ */
+#define GLX_USE_GL 1 /* support GLX rendering */
+#define GLX_BUFFER_SIZE 2 /* depth of the color buffer */
+#define GLX_LEVEL 3 /* level in plane stacking */
+#define GLX_RGBA 4 /* true if RGBA mode */
+#define GLX_DOUBLEBUFFER 5 /* double buffering supported */
+#define GLX_STEREO 6 /* stereo buffering supported */
+#define GLX_AUX_BUFFERS 7 /* number of aux buffers */
+#define GLX_RED_SIZE 8 /* number of red component bits */
+#define GLX_GREEN_SIZE 9 /* number of green component bits */
+#define GLX_BLUE_SIZE 10 /* number of blue component bits */
+#define GLX_ALPHA_SIZE 11 /* number of alpha component bits */
+#define GLX_DEPTH_SIZE 12 /* number of depth bits */
+#define GLX_STENCIL_SIZE 13 /* number of stencil bits */
+#define GLX_ACCUM_RED_SIZE 14 /* number of red accum bits */
+#define GLX_ACCUM_GREEN_SIZE 15 /* number of green accum bits */
+#define GLX_ACCUM_BLUE_SIZE 16 /* number of blue accum bits */
+#define GLX_ACCUM_ALPHA_SIZE 17 /* number of alpha accum bits */
+
+/*
+ * Error return values from glXGetConfig. Success is indicated by
+ * a value of 0.
+ */
+#define GLX_BAD_SCREEN 1 /* screen # is bad */
+#define GLX_BAD_ATTRIBUTE 2 /* attribute to get is bad */
+#define GLX_NO_EXTENSION 3 /* no glx extension on server */
+#define GLX_BAD_VISUAL 4 /* visual # not known by GLX */
+#define GLX_BAD_CONTEXT 5
+#define GLX_BAD_VALUE 6
+#define GLX_BAD_ENUM 7
+
+/*
+ * Names for attributes to glXGetClientString.
+ */
+#define GLX_VENDOR 0x1
+#define GLX_VERSION 0x2
+#define GLX_EXTENSIONS 0x3
+
+#ifndef GLX_VERSION_1_3
+#define GLX_WINDOW_BIT 0x00000001
+#define GLX_PIXMAP_BIT 0x00000002
+#define GLX_PBUFFER_BIT 0x00000004
+#define GLX_RGBA_BIT 0x00000001
+#define GLX_COLOR_INDEX_BIT 0x00000002
+#define GLX_PBUFFER_CLOBBER_MASK 0x08000000
+#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001
+#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002
+#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004
+#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008
+#define GLX_AUX_BUFFERS_BIT 0x00000010
+#define GLX_DEPTH_BUFFER_BIT 0x00000020
+#define GLX_STENCIL_BUFFER_BIT 0x00000040
+#define GLX_ACCUM_BUFFER_BIT 0x00000080
+#define GLX_CONFIG_CAVEAT 0x20
+#define GLX_X_VISUAL_TYPE 0x22
+#define GLX_TRANSPARENT_TYPE 0x23
+#define GLX_TRANSPARENT_INDEX_VALUE 0x24
+#define GLX_TRANSPARENT_RED_VALUE 0x25
+#define GLX_TRANSPARENT_GREEN_VALUE 0x26
+#define GLX_TRANSPARENT_BLUE_VALUE 0x27
+#define GLX_TRANSPARENT_ALPHA_VALUE 0x28
+#define GLX_DONT_CARE 0xFFFFFFFF
+#define GLX_NONE 0x8000
+#define GLX_SLOW_CONFIG 0x8001
+#define GLX_TRUE_COLOR 0x8002
+#define GLX_DIRECT_COLOR 0x8003
+#define GLX_PSEUDO_COLOR 0x8004
+#define GLX_STATIC_COLOR 0x8005
+#define GLX_GRAY_SCALE 0x8006
+#define GLX_STATIC_GRAY 0x8007
+#define GLX_TRANSPARENT_RGB 0x8008
+#define GLX_TRANSPARENT_INDEX 0x8009
+#define GLX_VISUAL_ID 0x800B
+#define GLX_SCREEN 0x800C
+#define GLX_NON_CONFORMANT_CONFIG 0x800D
+#define GLX_DRAWABLE_TYPE 0x8010
+#define GLX_RENDER_TYPE 0x8011
+#define GLX_X_RENDERABLE 0x8012
+#define GLX_FBCONFIG_ID 0x8013
+#define GLX_RGBA_TYPE 0x8014
+#define GLX_COLOR_INDEX_TYPE 0x8015
+#define GLX_MAX_PBUFFER_WIDTH 0x8016
+#define GLX_MAX_PBUFFER_HEIGHT 0x8017
+#define GLX_MAX_PBUFFER_PIXELS 0x8018
+#define GLX_PRESERVED_CONTENTS 0x801B
+#define GLX_LARGEST_PBUFFER 0x801C
+#define GLX_WIDTH 0x801D
+#define GLX_HEIGHT 0x801E
+#define GLX_EVENT_MASK 0x801F
+#define GLX_DAMAGED 0x8020
+#define GLX_SAVED 0x8021
+#define GLX_WINDOW 0x8022
+#define GLX_PBUFFER 0x8023
+#define GLX_PBUFFER_HEIGHT 0x8040
+#define GLX_PBUFFER_WIDTH 0x8041
+#endif
+
+#ifndef GLX_VERSION_1_4
+#define GLX_SAMPLE_BUFFERS 0x186a0
+#define GLX_SAMPLES 0x186a1
+#endif
+
+#ifndef GLX_ARB_get_proc_address
+typedef void (*__GLXextFuncPtr)(void);
+#endif
+
+/*
+ * GLX resources.
+ */
+typedef XID GLXContextID;
+typedef XID GLXPixmap;
+typedef XID GLXDrawable;
+typedef XID GLXPbuffer;
+typedef XID GLXWindow;
+typedef XID GLXFBConfigID;
+
+/*
+ * GLXContext is a pointer to opaque data.
+ */
+typedef struct __GLXcontextRec *GLXContext;
+
+/*
+ * GLXFBConfig is a pointer to opaque data.
+ */
+typedef struct __GLXFBConfigRec *GLXFBConfig;
+
+
+/**********************************************************************/
+
+/*
+ * GLX 1.0 functions.
+ */
+extern XVisualInfo* glXChooseVisual(Display *dpy, int screen,
+ int *attrib_list);
+
+extern void glXCopyContext(Display *dpy, GLXContext src,
+ GLXContext dst, unsigned long mask);
+
+extern GLXContext glXCreateContext(Display *dpy, XVisualInfo *vis,
+ GLXContext share_list, Bool direct);
+
+extern GLXPixmap glXCreateGLXPixmap(Display *dpy, XVisualInfo *vis,
+ Pixmap pixmap);
+
+extern void glXDestroyContext(Display *dpy, GLXContext ctx);
+
+extern void glXDestroyGLXPixmap(Display *dpy, GLXPixmap pix);
+
+extern int glXGetConfig(Display *dpy, XVisualInfo *vis,
+ int attrib, int *value);
+
+extern GLXContext glXGetCurrentContext(void);
+
+extern GLXDrawable glXGetCurrentDrawable(void);
+
+extern Bool glXIsDirect(Display *dpy, GLXContext ctx);
+
+extern Bool glXMakeCurrent(Display *dpy, GLXDrawable drawable,
+ GLXContext ctx);
+
+extern Bool glXQueryExtension(Display *dpy, int *error_base, int *event_base);
+
+extern Bool glXQueryVersion(Display *dpy, int *major, int *minor);
+
+extern void glXSwapBuffers(Display *dpy, GLXDrawable drawable);
+
+extern void glXUseXFont(Font font, int first, int count, int list_base);
+
+extern void glXWaitGL(void);
+
+extern void glXWaitX(void);
+
+
+#ifndef GLX_VERSION_1_1
+#define GLX_VERSION_1_1 1
+/*
+ * GLX 1.1 functions.
+ */
+extern const char *glXGetClientString(Display *dpy, int name);
+
+extern const char *glXQueryServerString(Display *dpy, int screen, int name);
+
+extern const char *glXQueryExtensionsString(Display *dpy, int screen);
+#endif
+
+
+#ifndef GLX_VERSION_1_2
+#define GLX_VERSION_1_2 1
+/*
+ * GLX 1.2 functions.
+ */
+extern Display *glXGetCurrentDisplay(void);
+#endif
+
+#ifndef GLX_VERSION_1_3
+#define GLX_VERSION_1_3 1
+/*
+ * GLX 1.3 functions.
+ */
+extern GLXFBConfig *glXChooseFBConfig(Display *dpy, int screen,
+ const int *attrib_list, int *nelements);
+
+extern GLXContext glXCreateNewContext(Display *dpy, GLXFBConfig config,
+ int render_type, GLXContext share_list,
+ Bool direct);
+
+extern GLXPbuffer glXCreatePbuffer(Display *dpy, GLXFBConfig config,
+ const int *attrib_list);
+
+extern GLXPixmap glXCreatePixmap(Display *dpy, GLXFBConfig config,
+ Pixmap pixmap, const int *attrib_list);
+
+extern GLXWindow glXCreateWindow(Display *dpy, GLXFBConfig config,
+ Window win, const int *attrib_list);
+
+extern void glXDestroyPbuffer(Display *dpy, GLXPbuffer pbuf);
+
+extern void glXDestroyPixmap(Display *dpy, GLXPixmap pixmap);
+
+extern void glXDestroyWindow(Display *dpy, GLXWindow win);
+
+extern GLXDrawable glXGetCurrentReadDrawable(void);
+
+extern int glXGetFBConfigAttrib(Display *dpy, GLXFBConfig config,
+ int attribute, int *value);
+
+extern GLXFBConfig *glXGetFBConfigs(Display *dpy, int screen, int *nelements);
+
+extern void glXGetSelectedEvent(Display *dpy, GLXDrawable draw,
+ unsigned long *event_mask);
+
+extern XVisualInfo *glXGetVisualFromFBConfig(Display *dpy, GLXFBConfig config);
+
+extern Bool glXMakeContextCurrent(Display *display, GLXDrawable draw,
+ GLXDrawable read, GLXContext ctx);
+
+extern int glXQueryContext(Display *dpy, GLXContext ctx,
+ int attribute, int *value);
+
+extern void glXQueryDrawable(Display *dpy, GLXDrawable draw,
+ int attribute, unsigned int *value);
+
+extern void glXSelectEvent(Display *dpy, GLXDrawable draw,
+ unsigned long event_mask);
+
+typedef GLXFBConfig * ( * PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements);
+typedef GLXFBConfig * ( * PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
+typedef int ( * PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);
+typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config);
+typedef GLXWindow ( * PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
+typedef void ( * PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win);
+typedef GLXPixmap ( * PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
+typedef void ( * PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap);
+typedef GLXPbuffer ( * PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);
+typedef void ( * PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf);
+typedef void ( * PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
+typedef GLXContext ( * PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
+typedef Bool ( * PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLEPROC) (void);
+typedef Display * ( * PFNGLXGETCURRENTDISPLAYPROC) (void);
+typedef int ( * PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
+typedef void ( * PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);
+typedef void ( * PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
+#endif
+
+
+#ifndef GLX_VERSION_1_4
+#define GLX_VERSION_1_4 1
+/*
+ * GLX 1.4 functions and typedefs.
+ */
+extern __GLXextFuncPtr glXGetProcAddress (const GLubyte *);
+typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSPROC) (const GLubyte *procName);
+#endif
+
+
+
+/**********************************************************************/
+
+/*
+ * ARB_get_proc_address
+ */
+#ifndef GLX_ARB_get_proc_address
+#define GLX_ARB_get_proc_address 1
+/* Don't wrap this in GLX_GLXEXT_PROTOTYPES! */
+extern void (*glXGetProcAddressARB(const GLubyte *procName))(void);
+typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSARBPROC) (const GLubyte *procName);
+#endif
+
+/**********************************************************************/
+
+/*** Should these go here, or in another header? */
+/*
+ * GLX Events
+ */
+typedef struct {
+ int event_type; /* GLX_DAMAGED or GLX_SAVED */
+ int draw_type; /* GLX_WINDOW or GLX_PBUFFER */
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came for SendEvent request */
+ Display *display; /* display the event was read from */
+ GLXDrawable drawable; /* XID of Drawable */
+ unsigned int buffer_mask; /* mask indicating which buffers are affected */
+ unsigned int aux_buffer; /* which aux buffer was affected */
+ int x, y;
+ int width, height;
+ int count; /* if nonzero, at least this many more */
+} GLXPbufferClobberEvent;
+
+typedef union __GLXEvent {
+ GLXPbufferClobberEvent glxpbufferclobber;
+ long pad[24];
+} GLXEvent;
+
+#ifndef GLX_GLXEXT_LEGACY
+#include <GL/glxext.h>
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !__glx_h__ */
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glxew.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glxew.h
new file mode 100644
index 00000000..6d249f73
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glxew.h
@@ -0,0 +1,1587 @@
+/*
+** The OpenGL Extension Wrangler Library
+** Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
+** Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
+** Copyright (C) 2002, Lev Povalahev
+** All rights reserved.
+**
+** Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are met:
+**
+** * Redistributions of source code must retain the above copyright notice,
+** this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright notice,
+** this list of conditions and the following disclaimer in the documentation
+** and/or other materials provided with the distribution.
+** * The name of the author may be used to endorse or promote products
+** derived from this software without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+** THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+ * Mesa 3-D graphics library
+ * Version: 7.0
+ *
+ * Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+** Copyright (c) 2007 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+#ifndef __glxew_h__
+#define __glxew_h__
+#define __GLXEW_H__
+
+#ifdef __glxext_h_
+#error glxext.h included before glxew.h
+#endif
+
+#if defined(GLX_H) || defined(__GLX_glx_h__) || defined(__glx_h__)
+#error glx.h included before glxew.h
+#endif
+
+#define __glxext_h_
+
+#define GLX_H
+#define __GLX_glx_h__
+#define __glx_h__
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xmd.h>
+#include <GL/glew.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ---------------------------- GLX_VERSION_1_0 --------------------------- */
+
+#ifndef GLX_VERSION_1_0
+#define GLX_VERSION_1_0 1
+
+#define GLX_USE_GL 1
+#define GLX_BUFFER_SIZE 2
+#define GLX_LEVEL 3
+#define GLX_RGBA 4
+#define GLX_DOUBLEBUFFER 5
+#define GLX_STEREO 6
+#define GLX_AUX_BUFFERS 7
+#define GLX_RED_SIZE 8
+#define GLX_GREEN_SIZE 9
+#define GLX_BLUE_SIZE 10
+#define GLX_ALPHA_SIZE 11
+#define GLX_DEPTH_SIZE 12
+#define GLX_STENCIL_SIZE 13
+#define GLX_ACCUM_RED_SIZE 14
+#define GLX_ACCUM_GREEN_SIZE 15
+#define GLX_ACCUM_BLUE_SIZE 16
+#define GLX_ACCUM_ALPHA_SIZE 17
+#define GLX_BAD_SCREEN 1
+#define GLX_BAD_ATTRIBUTE 2
+#define GLX_NO_EXTENSION 3
+#define GLX_BAD_VISUAL 4
+#define GLX_BAD_CONTEXT 5
+#define GLX_BAD_VALUE 6
+#define GLX_BAD_ENUM 7
+
+typedef XID GLXDrawable;
+typedef XID GLXPixmap;
+#ifdef __sun
+typedef struct __glXContextRec *GLXContext;
+#else
+typedef struct __GLXcontextRec *GLXContext;
+#endif
+
+typedef unsigned int GLXVideoDeviceNV;
+
+extern Bool glXQueryExtension (Display *dpy, int *errorBase, int *eventBase);
+extern Bool glXQueryVersion (Display *dpy, int *major, int *minor);
+extern int glXGetConfig (Display *dpy, XVisualInfo *vis, int attrib, int *value);
+extern XVisualInfo* glXChooseVisual (Display *dpy, int screen, int *attribList);
+extern GLXPixmap glXCreateGLXPixmap (Display *dpy, XVisualInfo *vis, Pixmap pixmap);
+extern void glXDestroyGLXPixmap (Display *dpy, GLXPixmap pix);
+extern GLXContext glXCreateContext (Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct);
+extern void glXDestroyContext (Display *dpy, GLXContext ctx);
+extern Bool glXIsDirect (Display *dpy, GLXContext ctx);
+extern void glXCopyContext (Display *dpy, GLXContext src, GLXContext dst, GLulong mask);
+extern Bool glXMakeCurrent (Display *dpy, GLXDrawable drawable, GLXContext ctx);
+extern GLXContext glXGetCurrentContext (void);
+extern GLXDrawable glXGetCurrentDrawable (void);
+extern void glXWaitGL (void);
+extern void glXWaitX (void);
+extern void glXSwapBuffers (Display *dpy, GLXDrawable drawable);
+extern void glXUseXFont (Font font, int first, int count, int listBase);
+
+#define GLXEW_VERSION_1_0 GLXEW_GET_VAR(__GLXEW_VERSION_1_0)
+
+#endif /* GLX_VERSION_1_0 */
+
+/* ---------------------------- GLX_VERSION_1_1 --------------------------- */
+
+#ifndef GLX_VERSION_1_1
+#define GLX_VERSION_1_1
+
+#define GLX_VENDOR 0x1
+#define GLX_VERSION 0x2
+#define GLX_EXTENSIONS 0x3
+
+extern const char* glXQueryExtensionsString (Display *dpy, int screen);
+extern const char* glXGetClientString (Display *dpy, int name);
+extern const char* glXQueryServerString (Display *dpy, int screen, int name);
+
+#define GLXEW_VERSION_1_1 GLXEW_GET_VAR(__GLXEW_VERSION_1_1)
+
+#endif /* GLX_VERSION_1_1 */
+
+/* ---------------------------- GLX_VERSION_1_2 ---------------------------- */
+
+#ifndef GLX_VERSION_1_2
+#define GLX_VERSION_1_2 1
+
+typedef Display* ( * PFNGLXGETCURRENTDISPLAYPROC) (void);
+
+#define glXGetCurrentDisplay GLXEW_GET_FUN(__glewXGetCurrentDisplay)
+
+#define GLXEW_VERSION_1_2 GLXEW_GET_VAR(__GLXEW_VERSION_1_2)
+
+#endif /* GLX_VERSION_1_2 */
+
+/* ---------------------------- GLX_VERSION_1_3 ---------------------------- */
+
+#ifndef GLX_VERSION_1_3
+#define GLX_VERSION_1_3 1
+
+#define GLX_RGBA_BIT 0x00000001
+#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001
+#define GLX_WINDOW_BIT 0x00000001
+#define GLX_COLOR_INDEX_BIT 0x00000002
+#define GLX_PIXMAP_BIT 0x00000002
+#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002
+#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004
+#define GLX_PBUFFER_BIT 0x00000004
+#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008
+#define GLX_AUX_BUFFERS_BIT 0x00000010
+#define GLX_CONFIG_CAVEAT 0x20
+#define GLX_DEPTH_BUFFER_BIT 0x00000020
+#define GLX_X_VISUAL_TYPE 0x22
+#define GLX_TRANSPARENT_TYPE 0x23
+#define GLX_TRANSPARENT_INDEX_VALUE 0x24
+#define GLX_TRANSPARENT_RED_VALUE 0x25
+#define GLX_TRANSPARENT_GREEN_VALUE 0x26
+#define GLX_TRANSPARENT_BLUE_VALUE 0x27
+#define GLX_TRANSPARENT_ALPHA_VALUE 0x28
+#define GLX_STENCIL_BUFFER_BIT 0x00000040
+#define GLX_ACCUM_BUFFER_BIT 0x00000080
+#define GLX_NONE 0x8000
+#define GLX_SLOW_CONFIG 0x8001
+#define GLX_TRUE_COLOR 0x8002
+#define GLX_DIRECT_COLOR 0x8003
+#define GLX_PSEUDO_COLOR 0x8004
+#define GLX_STATIC_COLOR 0x8005
+#define GLX_GRAY_SCALE 0x8006
+#define GLX_STATIC_GRAY 0x8007
+#define GLX_TRANSPARENT_RGB 0x8008
+#define GLX_TRANSPARENT_INDEX 0x8009
+#define GLX_VISUAL_ID 0x800B
+#define GLX_SCREEN 0x800C
+#define GLX_NON_CONFORMANT_CONFIG 0x800D
+#define GLX_DRAWABLE_TYPE 0x8010
+#define GLX_RENDER_TYPE 0x8011
+#define GLX_X_RENDERABLE 0x8012
+#define GLX_FBCONFIG_ID 0x8013
+#define GLX_RGBA_TYPE 0x8014
+#define GLX_COLOR_INDEX_TYPE 0x8015
+#define GLX_MAX_PBUFFER_WIDTH 0x8016
+#define GLX_MAX_PBUFFER_HEIGHT 0x8017
+#define GLX_MAX_PBUFFER_PIXELS 0x8018
+#define GLX_PRESERVED_CONTENTS 0x801B
+#define GLX_LARGEST_PBUFFER 0x801C
+#define GLX_WIDTH 0x801D
+#define GLX_HEIGHT 0x801E
+#define GLX_EVENT_MASK 0x801F
+#define GLX_DAMAGED 0x8020
+#define GLX_SAVED 0x8021
+#define GLX_WINDOW 0x8022
+#define GLX_PBUFFER 0x8023
+#define GLX_PBUFFER_HEIGHT 0x8040
+#define GLX_PBUFFER_WIDTH 0x8041
+#define GLX_PBUFFER_CLOBBER_MASK 0x08000000
+#define GLX_DONT_CARE 0xFFFFFFFF
+
+typedef XID GLXFBConfigID;
+typedef XID GLXPbuffer;
+typedef XID GLXWindow;
+typedef struct __GLXFBConfigRec *GLXFBConfig;
+
+typedef struct {
+ int event_type;
+ int draw_type;
+ unsigned long serial;
+ Bool send_event;
+ Display *display;
+ GLXDrawable drawable;
+ unsigned int buffer_mask;
+ unsigned int aux_buffer;
+ int x, y;
+ int width, height;
+ int count;
+} GLXPbufferClobberEvent;
+typedef union __GLXEvent {
+ GLXPbufferClobberEvent glxpbufferclobber;
+ long pad[24];
+} GLXEvent;
+
+typedef GLXFBConfig* ( * PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
+typedef GLXContext ( * PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
+typedef GLXPbuffer ( * PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);
+typedef GLXPixmap ( * PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
+typedef GLXWindow ( * PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
+typedef void ( * PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf);
+typedef void ( * PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap);
+typedef void ( * PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win);
+typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLEPROC) (void);
+typedef int ( * PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);
+typedef GLXFBConfig* ( * PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements);
+typedef void ( * PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
+typedef XVisualInfo* ( * PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config);
+typedef Bool ( * PFNGLXMAKECONTEXTCURRENTPROC) (Display *display, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+typedef int ( * PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
+typedef void ( * PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
+typedef void ( * PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);
+
+#define glXChooseFBConfig GLXEW_GET_FUN(__glewXChooseFBConfig)
+#define glXCreateNewContext GLXEW_GET_FUN(__glewXCreateNewContext)
+#define glXCreatePbuffer GLXEW_GET_FUN(__glewXCreatePbuffer)
+#define glXCreatePixmap GLXEW_GET_FUN(__glewXCreatePixmap)
+#define glXCreateWindow GLXEW_GET_FUN(__glewXCreateWindow)
+#define glXDestroyPbuffer GLXEW_GET_FUN(__glewXDestroyPbuffer)
+#define glXDestroyPixmap GLXEW_GET_FUN(__glewXDestroyPixmap)
+#define glXDestroyWindow GLXEW_GET_FUN(__glewXDestroyWindow)
+#define glXGetCurrentReadDrawable GLXEW_GET_FUN(__glewXGetCurrentReadDrawable)
+#define glXGetFBConfigAttrib GLXEW_GET_FUN(__glewXGetFBConfigAttrib)
+#define glXGetFBConfigs GLXEW_GET_FUN(__glewXGetFBConfigs)
+#define glXGetSelectedEvent GLXEW_GET_FUN(__glewXGetSelectedEvent)
+#define glXGetVisualFromFBConfig GLXEW_GET_FUN(__glewXGetVisualFromFBConfig)
+#define glXMakeContextCurrent GLXEW_GET_FUN(__glewXMakeContextCurrent)
+#define glXQueryContext GLXEW_GET_FUN(__glewXQueryContext)
+#define glXQueryDrawable GLXEW_GET_FUN(__glewXQueryDrawable)
+#define glXSelectEvent GLXEW_GET_FUN(__glewXSelectEvent)
+
+#define GLXEW_VERSION_1_3 GLXEW_GET_VAR(__GLXEW_VERSION_1_3)
+
+#endif /* GLX_VERSION_1_3 */
+
+/* ---------------------------- GLX_VERSION_1_4 ---------------------------- */
+
+#ifndef GLX_VERSION_1_4
+#define GLX_VERSION_1_4 1
+
+#define GLX_SAMPLE_BUFFERS 100000
+#define GLX_SAMPLES 100001
+
+extern void ( * glXGetProcAddress (const GLubyte *procName)) (void);
+
+#define GLXEW_VERSION_1_4 GLXEW_GET_VAR(__GLXEW_VERSION_1_4)
+
+#endif /* GLX_VERSION_1_4 */
+
+/* -------------------------- GLX_3DFX_multisample ------------------------- */
+
+#ifndef GLX_3DFX_multisample
+#define GLX_3DFX_multisample 1
+
+#define GLX_SAMPLE_BUFFERS_3DFX 0x8050
+#define GLX_SAMPLES_3DFX 0x8051
+
+#define GLXEW_3DFX_multisample GLXEW_GET_VAR(__GLXEW_3DFX_multisample)
+
+#endif /* GLX_3DFX_multisample */
+
+/* ------------------------ GLX_AMD_gpu_association ------------------------ */
+
+#ifndef GLX_AMD_gpu_association
+#define GLX_AMD_gpu_association 1
+
+#define GLX_GPU_VENDOR_AMD 0x1F00
+#define GLX_GPU_RENDERER_STRING_AMD 0x1F01
+#define GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02
+#define GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2
+#define GLX_GPU_RAM_AMD 0x21A3
+#define GLX_GPU_CLOCK_AMD 0x21A4
+#define GLX_GPU_NUM_PIPES_AMD 0x21A5
+#define GLX_GPU_NUM_SIMD_AMD 0x21A6
+#define GLX_GPU_NUM_RB_AMD 0x21A7
+#define GLX_GPU_NUM_SPI_AMD 0x21A8
+
+#define GLXEW_AMD_gpu_association GLXEW_GET_VAR(__GLXEW_AMD_gpu_association)
+
+#endif /* GLX_AMD_gpu_association */
+
+/* ------------------------- GLX_ARB_create_context ------------------------ */
+
+#ifndef GLX_ARB_create_context
+#define GLX_ARB_create_context 1
+
+#define GLX_CONTEXT_DEBUG_BIT_ARB 0x0001
+#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002
+#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
+#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
+#define GLX_CONTEXT_FLAGS_ARB 0x2094
+
+typedef GLXContext ( * PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display* dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
+
+#define glXCreateContextAttribsARB GLXEW_GET_FUN(__glewXCreateContextAttribsARB)
+
+#define GLXEW_ARB_create_context GLXEW_GET_VAR(__GLXEW_ARB_create_context)
+
+#endif /* GLX_ARB_create_context */
+
+/* --------------------- GLX_ARB_create_context_profile -------------------- */
+
+#ifndef GLX_ARB_create_context_profile
+#define GLX_ARB_create_context_profile 1
+
+#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
+#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
+#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126
+
+#define GLXEW_ARB_create_context_profile GLXEW_GET_VAR(__GLXEW_ARB_create_context_profile)
+
+#endif /* GLX_ARB_create_context_profile */
+
+/* ------------------- GLX_ARB_create_context_robustness ------------------- */
+
+#ifndef GLX_ARB_create_context_robustness
+#define GLX_ARB_create_context_robustness 1
+
+#define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
+#define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252
+#define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define GLX_NO_RESET_NOTIFICATION_ARB 0x8261
+
+#define GLXEW_ARB_create_context_robustness GLXEW_GET_VAR(__GLXEW_ARB_create_context_robustness)
+
+#endif /* GLX_ARB_create_context_robustness */
+
+/* ------------------------- GLX_ARB_fbconfig_float ------------------------ */
+
+#ifndef GLX_ARB_fbconfig_float
+#define GLX_ARB_fbconfig_float 1
+
+#define GLX_RGBA_FLOAT_BIT 0x00000004
+#define GLX_RGBA_FLOAT_TYPE 0x20B9
+
+#define GLXEW_ARB_fbconfig_float GLXEW_GET_VAR(__GLXEW_ARB_fbconfig_float)
+
+#endif /* GLX_ARB_fbconfig_float */
+
+/* ------------------------ GLX_ARB_framebuffer_sRGB ----------------------- */
+
+#ifndef GLX_ARB_framebuffer_sRGB
+#define GLX_ARB_framebuffer_sRGB 1
+
+#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2
+
+#define GLXEW_ARB_framebuffer_sRGB GLXEW_GET_VAR(__GLXEW_ARB_framebuffer_sRGB)
+
+#endif /* GLX_ARB_framebuffer_sRGB */
+
+/* ------------------------ GLX_ARB_get_proc_address ----------------------- */
+
+#ifndef GLX_ARB_get_proc_address
+#define GLX_ARB_get_proc_address 1
+
+extern void ( * glXGetProcAddressARB (const GLubyte *procName)) (void);
+
+#define GLXEW_ARB_get_proc_address GLXEW_GET_VAR(__GLXEW_ARB_get_proc_address)
+
+#endif /* GLX_ARB_get_proc_address */
+
+/* -------------------------- GLX_ARB_multisample -------------------------- */
+
+#ifndef GLX_ARB_multisample
+#define GLX_ARB_multisample 1
+
+#define GLX_SAMPLE_BUFFERS_ARB 100000
+#define GLX_SAMPLES_ARB 100001
+
+#define GLXEW_ARB_multisample GLXEW_GET_VAR(__GLXEW_ARB_multisample)
+
+#endif /* GLX_ARB_multisample */
+
+/* ---------------------- GLX_ARB_vertex_buffer_object --------------------- */
+
+#ifndef GLX_ARB_vertex_buffer_object
+#define GLX_ARB_vertex_buffer_object 1
+
+#define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095
+
+#define GLXEW_ARB_vertex_buffer_object GLXEW_GET_VAR(__GLXEW_ARB_vertex_buffer_object)
+
+#endif /* GLX_ARB_vertex_buffer_object */
+
+/* ----------------------- GLX_ATI_pixel_format_float ---------------------- */
+
+#ifndef GLX_ATI_pixel_format_float
+#define GLX_ATI_pixel_format_float 1
+
+#define GLX_RGBA_FLOAT_ATI_BIT 0x00000100
+
+#define GLXEW_ATI_pixel_format_float GLXEW_GET_VAR(__GLXEW_ATI_pixel_format_float)
+
+#endif /* GLX_ATI_pixel_format_float */
+
+/* ------------------------- GLX_ATI_render_texture ------------------------ */
+
+#ifndef GLX_ATI_render_texture
+#define GLX_ATI_render_texture 1
+
+#define GLX_BIND_TO_TEXTURE_RGB_ATI 0x9800
+#define GLX_BIND_TO_TEXTURE_RGBA_ATI 0x9801
+#define GLX_TEXTURE_FORMAT_ATI 0x9802
+#define GLX_TEXTURE_TARGET_ATI 0x9803
+#define GLX_MIPMAP_TEXTURE_ATI 0x9804
+#define GLX_TEXTURE_RGB_ATI 0x9805
+#define GLX_TEXTURE_RGBA_ATI 0x9806
+#define GLX_NO_TEXTURE_ATI 0x9807
+#define GLX_TEXTURE_CUBE_MAP_ATI 0x9808
+#define GLX_TEXTURE_1D_ATI 0x9809
+#define GLX_TEXTURE_2D_ATI 0x980A
+#define GLX_MIPMAP_LEVEL_ATI 0x980B
+#define GLX_CUBE_MAP_FACE_ATI 0x980C
+#define GLX_TEXTURE_CUBE_MAP_POSITIVE_X_ATI 0x980D
+#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_X_ATI 0x980E
+#define GLX_TEXTURE_CUBE_MAP_POSITIVE_Y_ATI 0x980F
+#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_Y_ATI 0x9810
+#define GLX_TEXTURE_CUBE_MAP_POSITIVE_Z_ATI 0x9811
+#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_Z_ATI 0x9812
+#define GLX_FRONT_LEFT_ATI 0x9813
+#define GLX_FRONT_RIGHT_ATI 0x9814
+#define GLX_BACK_LEFT_ATI 0x9815
+#define GLX_BACK_RIGHT_ATI 0x9816
+#define GLX_AUX0_ATI 0x9817
+#define GLX_AUX1_ATI 0x9818
+#define GLX_AUX2_ATI 0x9819
+#define GLX_AUX3_ATI 0x981A
+#define GLX_AUX4_ATI 0x981B
+#define GLX_AUX5_ATI 0x981C
+#define GLX_AUX6_ATI 0x981D
+#define GLX_AUX7_ATI 0x981E
+#define GLX_AUX8_ATI 0x981F
+#define GLX_AUX9_ATI 0x9820
+#define GLX_BIND_TO_TEXTURE_LUMINANCE_ATI 0x9821
+#define GLX_BIND_TO_TEXTURE_INTENSITY_ATI 0x9822
+
+typedef void ( * PFNGLXBINDTEXIMAGEATIPROC) (Display *dpy, GLXPbuffer pbuf, int buffer);
+typedef void ( * PFNGLXDRAWABLEATTRIBATIPROC) (Display *dpy, GLXDrawable draw, const int *attrib_list);
+typedef void ( * PFNGLXRELEASETEXIMAGEATIPROC) (Display *dpy, GLXPbuffer pbuf, int buffer);
+
+#define glXBindTexImageATI GLXEW_GET_FUN(__glewXBindTexImageATI)
+#define glXDrawableAttribATI GLXEW_GET_FUN(__glewXDrawableAttribATI)
+#define glXReleaseTexImageATI GLXEW_GET_FUN(__glewXReleaseTexImageATI)
+
+#define GLXEW_ATI_render_texture GLXEW_GET_VAR(__GLXEW_ATI_render_texture)
+
+#endif /* GLX_ATI_render_texture */
+
+/* ------------------- GLX_EXT_create_context_es2_profile ------------------ */
+
+#ifndef GLX_EXT_create_context_es2_profile
+#define GLX_EXT_create_context_es2_profile 1
+
+#define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004
+
+#define GLXEW_EXT_create_context_es2_profile GLXEW_GET_VAR(__GLXEW_EXT_create_context_es2_profile)
+
+#endif /* GLX_EXT_create_context_es2_profile */
+
+/* --------------------- GLX_EXT_fbconfig_packed_float --------------------- */
+
+#ifndef GLX_EXT_fbconfig_packed_float
+#define GLX_EXT_fbconfig_packed_float 1
+
+#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008
+#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1
+
+#define GLXEW_EXT_fbconfig_packed_float GLXEW_GET_VAR(__GLXEW_EXT_fbconfig_packed_float)
+
+#endif /* GLX_EXT_fbconfig_packed_float */
+
+/* ------------------------ GLX_EXT_framebuffer_sRGB ----------------------- */
+
+#ifndef GLX_EXT_framebuffer_sRGB
+#define GLX_EXT_framebuffer_sRGB 1
+
+#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2
+
+#define GLXEW_EXT_framebuffer_sRGB GLXEW_GET_VAR(__GLXEW_EXT_framebuffer_sRGB)
+
+#endif /* GLX_EXT_framebuffer_sRGB */
+
+/* ------------------------- GLX_EXT_import_context ------------------------ */
+
+#ifndef GLX_EXT_import_context
+#define GLX_EXT_import_context 1
+
+#define GLX_SHARE_CONTEXT_EXT 0x800A
+#define GLX_VISUAL_ID_EXT 0x800B
+#define GLX_SCREEN_EXT 0x800C
+
+typedef XID GLXContextID;
+
+typedef void ( * PFNGLXFREECONTEXTEXTPROC) (Display* dpy, GLXContext context);
+typedef GLXContextID ( * PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context);
+typedef GLXContext ( * PFNGLXIMPORTCONTEXTEXTPROC) (Display* dpy, GLXContextID contextID);
+typedef int ( * PFNGLXQUERYCONTEXTINFOEXTPROC) (Display* dpy, GLXContext context, int attribute,int *value);
+
+#define glXFreeContextEXT GLXEW_GET_FUN(__glewXFreeContextEXT)
+#define glXGetContextIDEXT GLXEW_GET_FUN(__glewXGetContextIDEXT)
+#define glXImportContextEXT GLXEW_GET_FUN(__glewXImportContextEXT)
+#define glXQueryContextInfoEXT GLXEW_GET_FUN(__glewXQueryContextInfoEXT)
+
+#define GLXEW_EXT_import_context GLXEW_GET_VAR(__GLXEW_EXT_import_context)
+
+#endif /* GLX_EXT_import_context */
+
+/* -------------------------- GLX_EXT_scene_marker ------------------------- */
+
+#ifndef GLX_EXT_scene_marker
+#define GLX_EXT_scene_marker 1
+
+#define GLXEW_EXT_scene_marker GLXEW_GET_VAR(__GLXEW_EXT_scene_marker)
+
+#endif /* GLX_EXT_scene_marker */
+
+/* -------------------------- GLX_EXT_swap_control ------------------------- */
+
+#ifndef GLX_EXT_swap_control
+#define GLX_EXT_swap_control 1
+
+#define GLX_SWAP_INTERVAL_EXT 0x20F1
+#define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2
+
+typedef void ( * PFNGLXSWAPINTERVALEXTPROC) (Display* dpy, GLXDrawable drawable, int interval);
+
+#define glXSwapIntervalEXT GLXEW_GET_FUN(__glewXSwapIntervalEXT)
+
+#define GLXEW_EXT_swap_control GLXEW_GET_VAR(__GLXEW_EXT_swap_control)
+
+#endif /* GLX_EXT_swap_control */
+
+/* ---------------------- GLX_EXT_texture_from_pixmap ---------------------- */
+
+#ifndef GLX_EXT_texture_from_pixmap
+#define GLX_EXT_texture_from_pixmap 1
+
+#define GLX_TEXTURE_1D_BIT_EXT 0x00000001
+#define GLX_TEXTURE_2D_BIT_EXT 0x00000002
+#define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004
+#define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0
+#define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1
+#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2
+#define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3
+#define GLX_Y_INVERTED_EXT 0x20D4
+#define GLX_TEXTURE_FORMAT_EXT 0x20D5
+#define GLX_TEXTURE_TARGET_EXT 0x20D6
+#define GLX_MIPMAP_TEXTURE_EXT 0x20D7
+#define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8
+#define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9
+#define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA
+#define GLX_TEXTURE_1D_EXT 0x20DB
+#define GLX_TEXTURE_2D_EXT 0x20DC
+#define GLX_TEXTURE_RECTANGLE_EXT 0x20DD
+#define GLX_FRONT_LEFT_EXT 0x20DE
+#define GLX_FRONT_RIGHT_EXT 0x20DF
+#define GLX_BACK_LEFT_EXT 0x20E0
+#define GLX_BACK_RIGHT_EXT 0x20E1
+#define GLX_AUX0_EXT 0x20E2
+#define GLX_AUX1_EXT 0x20E3
+#define GLX_AUX2_EXT 0x20E4
+#define GLX_AUX3_EXT 0x20E5
+#define GLX_AUX4_EXT 0x20E6
+#define GLX_AUX5_EXT 0x20E7
+#define GLX_AUX6_EXT 0x20E8
+#define GLX_AUX7_EXT 0x20E9
+#define GLX_AUX8_EXT 0x20EA
+#define GLX_AUX9_EXT 0x20EB
+
+typedef void ( * PFNGLXBINDTEXIMAGEEXTPROC) (Display* display, GLXDrawable drawable, int buffer, const int *attrib_list);
+typedef void ( * PFNGLXRELEASETEXIMAGEEXTPROC) (Display* display, GLXDrawable drawable, int buffer);
+
+#define glXBindTexImageEXT GLXEW_GET_FUN(__glewXBindTexImageEXT)
+#define glXReleaseTexImageEXT GLXEW_GET_FUN(__glewXReleaseTexImageEXT)
+
+#define GLXEW_EXT_texture_from_pixmap GLXEW_GET_VAR(__GLXEW_EXT_texture_from_pixmap)
+
+#endif /* GLX_EXT_texture_from_pixmap */
+
+/* -------------------------- GLX_EXT_visual_info -------------------------- */
+
+#ifndef GLX_EXT_visual_info
+#define GLX_EXT_visual_info 1
+
+#define GLX_X_VISUAL_TYPE_EXT 0x22
+#define GLX_TRANSPARENT_TYPE_EXT 0x23
+#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24
+#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25
+#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26
+#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27
+#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28
+#define GLX_NONE_EXT 0x8000
+#define GLX_TRUE_COLOR_EXT 0x8002
+#define GLX_DIRECT_COLOR_EXT 0x8003
+#define GLX_PSEUDO_COLOR_EXT 0x8004
+#define GLX_STATIC_COLOR_EXT 0x8005
+#define GLX_GRAY_SCALE_EXT 0x8006
+#define GLX_STATIC_GRAY_EXT 0x8007
+#define GLX_TRANSPARENT_RGB_EXT 0x8008
+#define GLX_TRANSPARENT_INDEX_EXT 0x8009
+
+#define GLXEW_EXT_visual_info GLXEW_GET_VAR(__GLXEW_EXT_visual_info)
+
+#endif /* GLX_EXT_visual_info */
+
+/* ------------------------- GLX_EXT_visual_rating ------------------------- */
+
+#ifndef GLX_EXT_visual_rating
+#define GLX_EXT_visual_rating 1
+
+#define GLX_VISUAL_CAVEAT_EXT 0x20
+#define GLX_SLOW_VISUAL_EXT 0x8001
+#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D
+
+#define GLXEW_EXT_visual_rating GLXEW_GET_VAR(__GLXEW_EXT_visual_rating)
+
+#endif /* GLX_EXT_visual_rating */
+
+/* -------------------------- GLX_INTEL_swap_event ------------------------- */
+
+#ifndef GLX_INTEL_swap_event
+#define GLX_INTEL_swap_event 1
+
+#define GLX_EXCHANGE_COMPLETE_INTEL 0x8180
+#define GLX_COPY_COMPLETE_INTEL 0x8181
+#define GLX_FLIP_COMPLETE_INTEL 0x8182
+#define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000
+
+#define GLXEW_INTEL_swap_event GLXEW_GET_VAR(__GLXEW_INTEL_swap_event)
+
+#endif /* GLX_INTEL_swap_event */
+
+/* -------------------------- GLX_MESA_agp_offset -------------------------- */
+
+#ifndef GLX_MESA_agp_offset
+#define GLX_MESA_agp_offset 1
+
+typedef unsigned int ( * PFNGLXGETAGPOFFSETMESAPROC) (const void* pointer);
+
+#define glXGetAGPOffsetMESA GLXEW_GET_FUN(__glewXGetAGPOffsetMESA)
+
+#define GLXEW_MESA_agp_offset GLXEW_GET_VAR(__GLXEW_MESA_agp_offset)
+
+#endif /* GLX_MESA_agp_offset */
+
+/* ------------------------ GLX_MESA_copy_sub_buffer ----------------------- */
+
+#ifndef GLX_MESA_copy_sub_buffer
+#define GLX_MESA_copy_sub_buffer 1
+
+typedef void ( * PFNGLXCOPYSUBBUFFERMESAPROC) (Display* dpy, GLXDrawable drawable, int x, int y, int width, int height);
+
+#define glXCopySubBufferMESA GLXEW_GET_FUN(__glewXCopySubBufferMESA)
+
+#define GLXEW_MESA_copy_sub_buffer GLXEW_GET_VAR(__GLXEW_MESA_copy_sub_buffer)
+
+#endif /* GLX_MESA_copy_sub_buffer */
+
+/* ------------------------ GLX_MESA_pixmap_colormap ----------------------- */
+
+#ifndef GLX_MESA_pixmap_colormap
+#define GLX_MESA_pixmap_colormap 1
+
+typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPMESAPROC) (Display* dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);
+
+#define glXCreateGLXPixmapMESA GLXEW_GET_FUN(__glewXCreateGLXPixmapMESA)
+
+#define GLXEW_MESA_pixmap_colormap GLXEW_GET_VAR(__GLXEW_MESA_pixmap_colormap)
+
+#endif /* GLX_MESA_pixmap_colormap */
+
+/* ------------------------ GLX_MESA_release_buffers ----------------------- */
+
+#ifndef GLX_MESA_release_buffers
+#define GLX_MESA_release_buffers 1
+
+typedef Bool ( * PFNGLXRELEASEBUFFERSMESAPROC) (Display* dpy, GLXDrawable d);
+
+#define glXReleaseBuffersMESA GLXEW_GET_FUN(__glewXReleaseBuffersMESA)
+
+#define GLXEW_MESA_release_buffers GLXEW_GET_VAR(__GLXEW_MESA_release_buffers)
+
+#endif /* GLX_MESA_release_buffers */
+
+/* ------------------------- GLX_MESA_set_3dfx_mode ------------------------ */
+
+#ifndef GLX_MESA_set_3dfx_mode
+#define GLX_MESA_set_3dfx_mode 1
+
+#define GLX_3DFX_WINDOW_MODE_MESA 0x1
+#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2
+
+typedef GLboolean ( * PFNGLXSET3DFXMODEMESAPROC) (GLint mode);
+
+#define glXSet3DfxModeMESA GLXEW_GET_FUN(__glewXSet3DfxModeMESA)
+
+#define GLXEW_MESA_set_3dfx_mode GLXEW_GET_VAR(__GLXEW_MESA_set_3dfx_mode)
+
+#endif /* GLX_MESA_set_3dfx_mode */
+
+/* ------------------------- GLX_MESA_swap_control ------------------------- */
+
+#ifndef GLX_MESA_swap_control
+#define GLX_MESA_swap_control 1
+
+typedef int ( * PFNGLXGETSWAPINTERVALMESAPROC) (void);
+typedef int ( * PFNGLXSWAPINTERVALMESAPROC) (unsigned int interval);
+
+#define glXGetSwapIntervalMESA GLXEW_GET_FUN(__glewXGetSwapIntervalMESA)
+#define glXSwapIntervalMESA GLXEW_GET_FUN(__glewXSwapIntervalMESA)
+
+#define GLXEW_MESA_swap_control GLXEW_GET_VAR(__GLXEW_MESA_swap_control)
+
+#endif /* GLX_MESA_swap_control */
+
+/* --------------------------- GLX_NV_copy_image --------------------------- */
+
+#ifndef GLX_NV_copy_image
+#define GLX_NV_copy_image 1
+
+typedef void ( * PFNGLXCOPYIMAGESUBDATANVPROC) (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+
+#define glXCopyImageSubDataNV GLXEW_GET_FUN(__glewXCopyImageSubDataNV)
+
+#define GLXEW_NV_copy_image GLXEW_GET_VAR(__GLXEW_NV_copy_image)
+
+#endif /* GLX_NV_copy_image */
+
+/* -------------------------- GLX_NV_float_buffer -------------------------- */
+
+#ifndef GLX_NV_float_buffer
+#define GLX_NV_float_buffer 1
+
+#define GLX_FLOAT_COMPONENTS_NV 0x20B0
+
+#define GLXEW_NV_float_buffer GLXEW_GET_VAR(__GLXEW_NV_float_buffer)
+
+#endif /* GLX_NV_float_buffer */
+
+/* ---------------------- GLX_NV_multisample_coverage ---------------------- */
+
+#ifndef GLX_NV_multisample_coverage
+#define GLX_NV_multisample_coverage 1
+
+#define GLX_COLOR_SAMPLES_NV 0x20B3
+#define GLX_COVERAGE_SAMPLES_NV 100001
+
+#define GLXEW_NV_multisample_coverage GLXEW_GET_VAR(__GLXEW_NV_multisample_coverage)
+
+#endif /* GLX_NV_multisample_coverage */
+
+/* -------------------------- GLX_NV_present_video ------------------------- */
+
+#ifndef GLX_NV_present_video
+#define GLX_NV_present_video 1
+
+#define GLX_NUM_VIDEO_SLOTS_NV 0x20F0
+
+typedef int ( * PFNGLXBINDVIDEODEVICENVPROC) (Display* dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list);
+typedef unsigned int* ( * PFNGLXENUMERATEVIDEODEVICESNVPROC) (Display *dpy, int screen, int *nelements);
+
+#define glXBindVideoDeviceNV GLXEW_GET_FUN(__glewXBindVideoDeviceNV)
+#define glXEnumerateVideoDevicesNV GLXEW_GET_FUN(__glewXEnumerateVideoDevicesNV)
+
+#define GLXEW_NV_present_video GLXEW_GET_VAR(__GLXEW_NV_present_video)
+
+#endif /* GLX_NV_present_video */
+
+/* --------------------------- GLX_NV_swap_group --------------------------- */
+
+#ifndef GLX_NV_swap_group
+#define GLX_NV_swap_group 1
+
+typedef Bool ( * PFNGLXBINDSWAPBARRIERNVPROC) (Display* dpy, GLuint group, GLuint barrier);
+typedef Bool ( * PFNGLXJOINSWAPGROUPNVPROC) (Display* dpy, GLXDrawable drawable, GLuint group);
+typedef Bool ( * PFNGLXQUERYFRAMECOUNTNVPROC) (Display* dpy, int screen, GLuint *count);
+typedef Bool ( * PFNGLXQUERYMAXSWAPGROUPSNVPROC) (Display* dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers);
+typedef Bool ( * PFNGLXQUERYSWAPGROUPNVPROC) (Display* dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier);
+typedef Bool ( * PFNGLXRESETFRAMECOUNTNVPROC) (Display* dpy, int screen);
+
+#define glXBindSwapBarrierNV GLXEW_GET_FUN(__glewXBindSwapBarrierNV)
+#define glXJoinSwapGroupNV GLXEW_GET_FUN(__glewXJoinSwapGroupNV)
+#define glXQueryFrameCountNV GLXEW_GET_FUN(__glewXQueryFrameCountNV)
+#define glXQueryMaxSwapGroupsNV GLXEW_GET_FUN(__glewXQueryMaxSwapGroupsNV)
+#define glXQuerySwapGroupNV GLXEW_GET_FUN(__glewXQuerySwapGroupNV)
+#define glXResetFrameCountNV GLXEW_GET_FUN(__glewXResetFrameCountNV)
+
+#define GLXEW_NV_swap_group GLXEW_GET_VAR(__GLXEW_NV_swap_group)
+
+#endif /* GLX_NV_swap_group */
+
+/* ----------------------- GLX_NV_vertex_array_range ----------------------- */
+
+#ifndef GLX_NV_vertex_array_range
+#define GLX_NV_vertex_array_range 1
+
+typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority);
+typedef void ( * PFNGLXFREEMEMORYNVPROC) (void *pointer);
+
+#define glXAllocateMemoryNV GLXEW_GET_FUN(__glewXAllocateMemoryNV)
+#define glXFreeMemoryNV GLXEW_GET_FUN(__glewXFreeMemoryNV)
+
+#define GLXEW_NV_vertex_array_range GLXEW_GET_VAR(__GLXEW_NV_vertex_array_range)
+
+#endif /* GLX_NV_vertex_array_range */
+
+/* -------------------------- GLX_NV_video_capture ------------------------- */
+
+#ifndef GLX_NV_video_capture
+#define GLX_NV_video_capture 1
+
+#define GLX_DEVICE_ID_NV 0x20CD
+#define GLX_UNIQUE_ID_NV 0x20CE
+#define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF
+
+typedef XID GLXVideoCaptureDeviceNV;
+
+typedef int ( * PFNGLXBINDVIDEOCAPTUREDEVICENVPROC) (Display* dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device);
+typedef GLXVideoCaptureDeviceNV * ( * PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC) (Display* dpy, int screen, int *nelements);
+typedef void ( * PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC) (Display* dpy, GLXVideoCaptureDeviceNV device);
+typedef int ( * PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC) (Display* dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value);
+typedef void ( * PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) (Display* dpy, GLXVideoCaptureDeviceNV device);
+
+#define glXBindVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXBindVideoCaptureDeviceNV)
+#define glXEnumerateVideoCaptureDevicesNV GLXEW_GET_FUN(__glewXEnumerateVideoCaptureDevicesNV)
+#define glXLockVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXLockVideoCaptureDeviceNV)
+#define glXQueryVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXQueryVideoCaptureDeviceNV)
+#define glXReleaseVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXReleaseVideoCaptureDeviceNV)
+
+#define GLXEW_NV_video_capture GLXEW_GET_VAR(__GLXEW_NV_video_capture)
+
+#endif /* GLX_NV_video_capture */
+
+/* -------------------------- GLX_NV_video_output -------------------------- */
+
+#ifndef GLX_NV_video_output
+#define GLX_NV_video_output 1
+
+#define GLX_VIDEO_OUT_COLOR_NV 0x20C3
+#define GLX_VIDEO_OUT_ALPHA_NV 0x20C4
+#define GLX_VIDEO_OUT_DEPTH_NV 0x20C5
+#define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6
+#define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7
+#define GLX_VIDEO_OUT_FRAME_NV 0x20C8
+#define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9
+#define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA
+#define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB
+#define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC
+
+typedef int ( * PFNGLXBINDVIDEOIMAGENVPROC) (Display* dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer);
+typedef int ( * PFNGLXGETVIDEODEVICENVPROC) (Display* dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice);
+typedef int ( * PFNGLXGETVIDEOINFONVPROC) (Display* dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+typedef int ( * PFNGLXRELEASEVIDEODEVICENVPROC) (Display* dpy, int screen, GLXVideoDeviceNV VideoDevice);
+typedef int ( * PFNGLXRELEASEVIDEOIMAGENVPROC) (Display* dpy, GLXPbuffer pbuf);
+typedef int ( * PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display* dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock);
+
+#define glXBindVideoImageNV GLXEW_GET_FUN(__glewXBindVideoImageNV)
+#define glXGetVideoDeviceNV GLXEW_GET_FUN(__glewXGetVideoDeviceNV)
+#define glXGetVideoInfoNV GLXEW_GET_FUN(__glewXGetVideoInfoNV)
+#define glXReleaseVideoDeviceNV GLXEW_GET_FUN(__glewXReleaseVideoDeviceNV)
+#define glXReleaseVideoImageNV GLXEW_GET_FUN(__glewXReleaseVideoImageNV)
+#define glXSendPbufferToVideoNV GLXEW_GET_FUN(__glewXSendPbufferToVideoNV)
+
+#define GLXEW_NV_video_output GLXEW_GET_VAR(__GLXEW_NV_video_output)
+
+#endif /* GLX_NV_video_output */
+
+/* -------------------------- GLX_OML_swap_method -------------------------- */
+
+#ifndef GLX_OML_swap_method
+#define GLX_OML_swap_method 1
+
+#define GLX_SWAP_METHOD_OML 0x8060
+#define GLX_SWAP_EXCHANGE_OML 0x8061
+#define GLX_SWAP_COPY_OML 0x8062
+#define GLX_SWAP_UNDEFINED_OML 0x8063
+
+#define GLXEW_OML_swap_method GLXEW_GET_VAR(__GLXEW_OML_swap_method)
+
+#endif /* GLX_OML_swap_method */
+
+/* -------------------------- GLX_OML_sync_control ------------------------- */
+
+#ifndef GLX_OML_sync_control
+#define GLX_OML_sync_control 1
+
+typedef Bool ( * PFNGLXGETMSCRATEOMLPROC) (Display* dpy, GLXDrawable drawable, int32_t* numerator, int32_t* denominator);
+typedef Bool ( * PFNGLXGETSYNCVALUESOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t* ust, int64_t* msc, int64_t* sbc);
+typedef int64_t ( * PFNGLXSWAPBUFFERSMSCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder);
+typedef Bool ( * PFNGLXWAITFORMSCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t* ust, int64_t* msc, int64_t* sbc);
+typedef Bool ( * PFNGLXWAITFORSBCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_sbc, int64_t* ust, int64_t* msc, int64_t* sbc);
+
+#define glXGetMscRateOML GLXEW_GET_FUN(__glewXGetMscRateOML)
+#define glXGetSyncValuesOML GLXEW_GET_FUN(__glewXGetSyncValuesOML)
+#define glXSwapBuffersMscOML GLXEW_GET_FUN(__glewXSwapBuffersMscOML)
+#define glXWaitForMscOML GLXEW_GET_FUN(__glewXWaitForMscOML)
+#define glXWaitForSbcOML GLXEW_GET_FUN(__glewXWaitForSbcOML)
+
+#define GLXEW_OML_sync_control GLXEW_GET_VAR(__GLXEW_OML_sync_control)
+
+#endif /* GLX_OML_sync_control */
+
+/* ------------------------ GLX_SGIS_blended_overlay ----------------------- */
+
+#ifndef GLX_SGIS_blended_overlay
+#define GLX_SGIS_blended_overlay 1
+
+#define GLX_BLENDED_RGBA_SGIS 0x8025
+
+#define GLXEW_SGIS_blended_overlay GLXEW_GET_VAR(__GLXEW_SGIS_blended_overlay)
+
+#endif /* GLX_SGIS_blended_overlay */
+
+/* -------------------------- GLX_SGIS_color_range ------------------------- */
+
+#ifndef GLX_SGIS_color_range
+#define GLX_SGIS_color_range 1
+
+#define GLX_MIN_RED_SGIS 0
+#define GLX_MAX_GREEN_SGIS 0
+#define GLX_MIN_BLUE_SGIS 0
+#define GLX_MAX_ALPHA_SGIS 0
+#define GLX_MIN_GREEN_SGIS 0
+#define GLX_MIN_ALPHA_SGIS 0
+#define GLX_MAX_RED_SGIS 0
+#define GLX_EXTENDED_RANGE_SGIS 0
+#define GLX_MAX_BLUE_SGIS 0
+
+#define GLXEW_SGIS_color_range GLXEW_GET_VAR(__GLXEW_SGIS_color_range)
+
+#endif /* GLX_SGIS_color_range */
+
+/* -------------------------- GLX_SGIS_multisample ------------------------- */
+
+#ifndef GLX_SGIS_multisample
+#define GLX_SGIS_multisample 1
+
+#define GLX_SAMPLE_BUFFERS_SGIS 100000
+#define GLX_SAMPLES_SGIS 100001
+
+#define GLXEW_SGIS_multisample GLXEW_GET_VAR(__GLXEW_SGIS_multisample)
+
+#endif /* GLX_SGIS_multisample */
+
+/* ---------------------- GLX_SGIS_shared_multisample ---------------------- */
+
+#ifndef GLX_SGIS_shared_multisample
+#define GLX_SGIS_shared_multisample 1
+
+#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026
+#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027
+
+#define GLXEW_SGIS_shared_multisample GLXEW_GET_VAR(__GLXEW_SGIS_shared_multisample)
+
+#endif /* GLX_SGIS_shared_multisample */
+
+/* --------------------------- GLX_SGIX_fbconfig --------------------------- */
+
+#ifndef GLX_SGIX_fbconfig
+#define GLX_SGIX_fbconfig 1
+
+#define GLX_WINDOW_BIT_SGIX 0x00000001
+#define GLX_RGBA_BIT_SGIX 0x00000001
+#define GLX_PIXMAP_BIT_SGIX 0x00000002
+#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002
+#define GLX_SCREEN_EXT 0x800C
+#define GLX_DRAWABLE_TYPE_SGIX 0x8010
+#define GLX_RENDER_TYPE_SGIX 0x8011
+#define GLX_X_RENDERABLE_SGIX 0x8012
+#define GLX_FBCONFIG_ID_SGIX 0x8013
+#define GLX_RGBA_TYPE_SGIX 0x8014
+#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015
+
+typedef XID GLXFBConfigIDSGIX;
+typedef struct __GLXFBConfigRec *GLXFBConfigSGIX;
+
+typedef GLXFBConfigSGIX* ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
+typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display* dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
+typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display* dpy, GLXFBConfig config, Pixmap pixmap);
+typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display* dpy, GLXFBConfigSGIX config, int attribute, int *value);
+typedef GLXFBConfigSGIX ( * PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display* dpy, XVisualInfo *vis);
+typedef XVisualInfo* ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfig config);
+
+#define glXChooseFBConfigSGIX GLXEW_GET_FUN(__glewXChooseFBConfigSGIX)
+#define glXCreateContextWithConfigSGIX GLXEW_GET_FUN(__glewXCreateContextWithConfigSGIX)
+#define glXCreateGLXPixmapWithConfigSGIX GLXEW_GET_FUN(__glewXCreateGLXPixmapWithConfigSGIX)
+#define glXGetFBConfigAttribSGIX GLXEW_GET_FUN(__glewXGetFBConfigAttribSGIX)
+#define glXGetFBConfigFromVisualSGIX GLXEW_GET_FUN(__glewXGetFBConfigFromVisualSGIX)
+#define glXGetVisualFromFBConfigSGIX GLXEW_GET_FUN(__glewXGetVisualFromFBConfigSGIX)
+
+#define GLXEW_SGIX_fbconfig GLXEW_GET_VAR(__GLXEW_SGIX_fbconfig)
+
+#endif /* GLX_SGIX_fbconfig */
+
+/* --------------------------- GLX_SGIX_hyperpipe -------------------------- */
+
+#ifndef GLX_SGIX_hyperpipe
+#define GLX_SGIX_hyperpipe 1
+
+#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001
+#define GLX_PIPE_RECT_SGIX 0x00000001
+#define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002
+#define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002
+#define GLX_HYPERPIPE_STEREO_SGIX 0x00000003
+#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004
+#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80
+#define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91
+#define GLX_BAD_HYPERPIPE_SGIX 92
+#define GLX_HYPERPIPE_ID_SGIX 0x8030
+
+typedef struct {
+ char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+ int networkId;
+} GLXHyperpipeNetworkSGIX;
+typedef struct {
+ char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+ int XOrigin;
+ int YOrigin;
+ int maxHeight;
+ int maxWidth;
+} GLXPipeRectLimits;
+typedef struct {
+ char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+ int channel;
+ unsigned int participationType;
+ int timeSlice;
+} GLXHyperpipeConfigSGIX;
+typedef struct {
+ char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+ int srcXOrigin;
+ int srcYOrigin;
+ int srcWidth;
+ int srcHeight;
+ int destXOrigin;
+ int destYOrigin;
+ int destWidth;
+ int destHeight;
+} GLXPipeRect;
+
+typedef int ( * PFNGLXBINDHYPERPIPESGIXPROC) (Display *dpy, int hpId);
+typedef int ( * PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId);
+typedef int ( * PFNGLXHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList);
+typedef int ( * PFNGLXHYPERPIPECONFIGSGIXPROC) (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId);
+typedef int ( * PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList);
+typedef int ( * PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList);
+typedef GLXHyperpipeConfigSGIX * ( * PFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId, int *npipes);
+typedef GLXHyperpipeNetworkSGIX * ( * PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display *dpy, int *npipes);
+
+#define glXBindHyperpipeSGIX GLXEW_GET_FUN(__glewXBindHyperpipeSGIX)
+#define glXDestroyHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXDestroyHyperpipeConfigSGIX)
+#define glXHyperpipeAttribSGIX GLXEW_GET_FUN(__glewXHyperpipeAttribSGIX)
+#define glXHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXHyperpipeConfigSGIX)
+#define glXQueryHyperpipeAttribSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeAttribSGIX)
+#define glXQueryHyperpipeBestAttribSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeBestAttribSGIX)
+#define glXQueryHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeConfigSGIX)
+#define glXQueryHyperpipeNetworkSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeNetworkSGIX)
+
+#define GLXEW_SGIX_hyperpipe GLXEW_GET_VAR(__GLXEW_SGIX_hyperpipe)
+
+#endif /* GLX_SGIX_hyperpipe */
+
+/* ---------------------------- GLX_SGIX_pbuffer --------------------------- */
+
+#ifndef GLX_SGIX_pbuffer
+#define GLX_SGIX_pbuffer 1
+
+#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001
+#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002
+#define GLX_PBUFFER_BIT_SGIX 0x00000004
+#define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004
+#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008
+#define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010
+#define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020
+#define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040
+#define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080
+#define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100
+#define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016
+#define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017
+#define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018
+#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019
+#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A
+#define GLX_PRESERVED_CONTENTS_SGIX 0x801B
+#define GLX_LARGEST_PBUFFER_SGIX 0x801C
+#define GLX_WIDTH_SGIX 0x801D
+#define GLX_HEIGHT_SGIX 0x801E
+#define GLX_EVENT_MASK_SGIX 0x801F
+#define GLX_DAMAGED_SGIX 0x8020
+#define GLX_SAVED_SGIX 0x8021
+#define GLX_WINDOW_SGIX 0x8022
+#define GLX_PBUFFER_SGIX 0x8023
+#define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000
+
+typedef XID GLXPbufferSGIX;
+typedef struct { int type; unsigned long serial; Bool send_event; Display *display; GLXDrawable drawable; int event_type; int draw_type; unsigned int mask; int x, y; int width, height; int count; } GLXBufferClobberEventSGIX;
+
+typedef GLXPbuffer ( * PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display* dpy, GLXFBConfig config, unsigned int width, unsigned int height, int *attrib_list);
+typedef void ( * PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display* dpy, GLXPbuffer pbuf);
+typedef void ( * PFNGLXGETSELECTEDEVENTSGIXPROC) (Display* dpy, GLXDrawable drawable, unsigned long *mask);
+typedef void ( * PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display* dpy, GLXPbuffer pbuf, int attribute, unsigned int *value);
+typedef void ( * PFNGLXSELECTEVENTSGIXPROC) (Display* dpy, GLXDrawable drawable, unsigned long mask);
+
+#define glXCreateGLXPbufferSGIX GLXEW_GET_FUN(__glewXCreateGLXPbufferSGIX)
+#define glXDestroyGLXPbufferSGIX GLXEW_GET_FUN(__glewXDestroyGLXPbufferSGIX)
+#define glXGetSelectedEventSGIX GLXEW_GET_FUN(__glewXGetSelectedEventSGIX)
+#define glXQueryGLXPbufferSGIX GLXEW_GET_FUN(__glewXQueryGLXPbufferSGIX)
+#define glXSelectEventSGIX GLXEW_GET_FUN(__glewXSelectEventSGIX)
+
+#define GLXEW_SGIX_pbuffer GLXEW_GET_VAR(__GLXEW_SGIX_pbuffer)
+
+#endif /* GLX_SGIX_pbuffer */
+
+/* ------------------------- GLX_SGIX_swap_barrier ------------------------- */
+
+#ifndef GLX_SGIX_swap_barrier
+#define GLX_SGIX_swap_barrier 1
+
+typedef void ( * PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier);
+typedef Bool ( * PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max);
+
+#define glXBindSwapBarrierSGIX GLXEW_GET_FUN(__glewXBindSwapBarrierSGIX)
+#define glXQueryMaxSwapBarriersSGIX GLXEW_GET_FUN(__glewXQueryMaxSwapBarriersSGIX)
+
+#define GLXEW_SGIX_swap_barrier GLXEW_GET_VAR(__GLXEW_SGIX_swap_barrier)
+
+#endif /* GLX_SGIX_swap_barrier */
+
+/* -------------------------- GLX_SGIX_swap_group -------------------------- */
+
+#ifndef GLX_SGIX_swap_group
+#define GLX_SGIX_swap_group 1
+
+typedef void ( * PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member);
+
+#define glXJoinSwapGroupSGIX GLXEW_GET_FUN(__glewXJoinSwapGroupSGIX)
+
+#define GLXEW_SGIX_swap_group GLXEW_GET_VAR(__GLXEW_SGIX_swap_group)
+
+#endif /* GLX_SGIX_swap_group */
+
+/* ------------------------- GLX_SGIX_video_resize ------------------------- */
+
+#ifndef GLX_SGIX_video_resize
+#define GLX_SGIX_video_resize 1
+
+#define GLX_SYNC_FRAME_SGIX 0x00000000
+#define GLX_SYNC_SWAP_SGIX 0x00000001
+
+typedef int ( * PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display* display, int screen, int channel, Window window);
+typedef int ( * PFNGLXCHANNELRECTSGIXPROC) (Display* display, int screen, int channel, int x, int y, int w, int h);
+typedef int ( * PFNGLXCHANNELRECTSYNCSGIXPROC) (Display* display, int screen, int channel, GLenum synctype);
+typedef int ( * PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display* display, int screen, int channel, int *x, int *y, int *w, int *h);
+typedef int ( * PFNGLXQUERYCHANNELRECTSGIXPROC) (Display* display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);
+
+#define glXBindChannelToWindowSGIX GLXEW_GET_FUN(__glewXBindChannelToWindowSGIX)
+#define glXChannelRectSGIX GLXEW_GET_FUN(__glewXChannelRectSGIX)
+#define glXChannelRectSyncSGIX GLXEW_GET_FUN(__glewXChannelRectSyncSGIX)
+#define glXQueryChannelDeltasSGIX GLXEW_GET_FUN(__glewXQueryChannelDeltasSGIX)
+#define glXQueryChannelRectSGIX GLXEW_GET_FUN(__glewXQueryChannelRectSGIX)
+
+#define GLXEW_SGIX_video_resize GLXEW_GET_VAR(__GLXEW_SGIX_video_resize)
+
+#endif /* GLX_SGIX_video_resize */
+
+/* ---------------------- GLX_SGIX_visual_select_group --------------------- */
+
+#ifndef GLX_SGIX_visual_select_group
+#define GLX_SGIX_visual_select_group 1
+
+#define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028
+
+#define GLXEW_SGIX_visual_select_group GLXEW_GET_VAR(__GLXEW_SGIX_visual_select_group)
+
+#endif /* GLX_SGIX_visual_select_group */
+
+/* ---------------------------- GLX_SGI_cushion ---------------------------- */
+
+#ifndef GLX_SGI_cushion
+#define GLX_SGI_cushion 1
+
+typedef void ( * PFNGLXCUSHIONSGIPROC) (Display* dpy, Window window, float cushion);
+
+#define glXCushionSGI GLXEW_GET_FUN(__glewXCushionSGI)
+
+#define GLXEW_SGI_cushion GLXEW_GET_VAR(__GLXEW_SGI_cushion)
+
+#endif /* GLX_SGI_cushion */
+
+/* ----------------------- GLX_SGI_make_current_read ----------------------- */
+
+#ifndef GLX_SGI_make_current_read
+#define GLX_SGI_make_current_read 1
+
+typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void);
+typedef Bool ( * PFNGLXMAKECURRENTREADSGIPROC) (Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+
+#define glXGetCurrentReadDrawableSGI GLXEW_GET_FUN(__glewXGetCurrentReadDrawableSGI)
+#define glXMakeCurrentReadSGI GLXEW_GET_FUN(__glewXMakeCurrentReadSGI)
+
+#define GLXEW_SGI_make_current_read GLXEW_GET_VAR(__GLXEW_SGI_make_current_read)
+
+#endif /* GLX_SGI_make_current_read */
+
+/* -------------------------- GLX_SGI_swap_control ------------------------- */
+
+#ifndef GLX_SGI_swap_control
+#define GLX_SGI_swap_control 1
+
+typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval);
+
+#define glXSwapIntervalSGI GLXEW_GET_FUN(__glewXSwapIntervalSGI)
+
+#define GLXEW_SGI_swap_control GLXEW_GET_VAR(__GLXEW_SGI_swap_control)
+
+#endif /* GLX_SGI_swap_control */
+
+/* --------------------------- GLX_SGI_video_sync -------------------------- */
+
+#ifndef GLX_SGI_video_sync
+#define GLX_SGI_video_sync 1
+
+typedef int ( * PFNGLXGETVIDEOSYNCSGIPROC) (unsigned int* count);
+typedef int ( * PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int* count);
+
+#define glXGetVideoSyncSGI GLXEW_GET_FUN(__glewXGetVideoSyncSGI)
+#define glXWaitVideoSyncSGI GLXEW_GET_FUN(__glewXWaitVideoSyncSGI)
+
+#define GLXEW_SGI_video_sync GLXEW_GET_VAR(__GLXEW_SGI_video_sync)
+
+#endif /* GLX_SGI_video_sync */
+
+/* --------------------- GLX_SUN_get_transparent_index --------------------- */
+
+#ifndef GLX_SUN_get_transparent_index
+#define GLX_SUN_get_transparent_index 1
+
+typedef Status ( * PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display* dpy, Window overlay, Window underlay, unsigned long *pTransparentIndex);
+
+#define glXGetTransparentIndexSUN GLXEW_GET_FUN(__glewXGetTransparentIndexSUN)
+
+#define GLXEW_SUN_get_transparent_index GLXEW_GET_VAR(__GLXEW_SUN_get_transparent_index)
+
+#endif /* GLX_SUN_get_transparent_index */
+
+/* -------------------------- GLX_SUN_video_resize ------------------------- */
+
+#ifndef GLX_SUN_video_resize
+#define GLX_SUN_video_resize 1
+
+#define GLX_VIDEO_RESIZE_SUN 0x8171
+#define GL_VIDEO_RESIZE_COMPENSATION_SUN 0x85CD
+
+typedef int ( * PFNGLXGETVIDEORESIZESUNPROC) (Display* display, GLXDrawable window, float* factor);
+typedef int ( * PFNGLXVIDEORESIZESUNPROC) (Display* display, GLXDrawable window, float factor);
+
+#define glXGetVideoResizeSUN GLXEW_GET_FUN(__glewXGetVideoResizeSUN)
+#define glXVideoResizeSUN GLXEW_GET_FUN(__glewXVideoResizeSUN)
+
+#define GLXEW_SUN_video_resize GLXEW_GET_VAR(__GLXEW_SUN_video_resize)
+
+#endif /* GLX_SUN_video_resize */
+
+/* ------------------------------------------------------------------------- */
+
+#ifdef GLEW_MX
+#define GLXEW_EXPORT
+#else
+#define GLXEW_EXPORT extern
+#endif /* GLEW_MX */
+
+extern PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay;
+
+extern PFNGLXCHOOSEFBCONFIGPROC __glewXChooseFBConfig;
+extern PFNGLXCREATENEWCONTEXTPROC __glewXCreateNewContext;
+extern PFNGLXCREATEPBUFFERPROC __glewXCreatePbuffer;
+extern PFNGLXCREATEPIXMAPPROC __glewXCreatePixmap;
+extern PFNGLXCREATEWINDOWPROC __glewXCreateWindow;
+extern PFNGLXDESTROYPBUFFERPROC __glewXDestroyPbuffer;
+extern PFNGLXDESTROYPIXMAPPROC __glewXDestroyPixmap;
+extern PFNGLXDESTROYWINDOWPROC __glewXDestroyWindow;
+extern PFNGLXGETCURRENTREADDRAWABLEPROC __glewXGetCurrentReadDrawable;
+extern PFNGLXGETFBCONFIGATTRIBPROC __glewXGetFBConfigAttrib;
+extern PFNGLXGETFBCONFIGSPROC __glewXGetFBConfigs;
+extern PFNGLXGETSELECTEDEVENTPROC __glewXGetSelectedEvent;
+extern PFNGLXGETVISUALFROMFBCONFIGPROC __glewXGetVisualFromFBConfig;
+extern PFNGLXMAKECONTEXTCURRENTPROC __glewXMakeContextCurrent;
+extern PFNGLXQUERYCONTEXTPROC __glewXQueryContext;
+extern PFNGLXQUERYDRAWABLEPROC __glewXQueryDrawable;
+extern PFNGLXSELECTEVENTPROC __glewXSelectEvent;
+
+extern PFNGLXCREATECONTEXTATTRIBSARBPROC __glewXCreateContextAttribsARB;
+
+extern PFNGLXBINDTEXIMAGEATIPROC __glewXBindTexImageATI;
+extern PFNGLXDRAWABLEATTRIBATIPROC __glewXDrawableAttribATI;
+extern PFNGLXRELEASETEXIMAGEATIPROC __glewXReleaseTexImageATI;
+
+extern PFNGLXFREECONTEXTEXTPROC __glewXFreeContextEXT;
+extern PFNGLXGETCONTEXTIDEXTPROC __glewXGetContextIDEXT;
+extern PFNGLXIMPORTCONTEXTEXTPROC __glewXImportContextEXT;
+extern PFNGLXQUERYCONTEXTINFOEXTPROC __glewXQueryContextInfoEXT;
+
+extern PFNGLXSWAPINTERVALEXTPROC __glewXSwapIntervalEXT;
+
+extern PFNGLXBINDTEXIMAGEEXTPROC __glewXBindTexImageEXT;
+extern PFNGLXRELEASETEXIMAGEEXTPROC __glewXReleaseTexImageEXT;
+
+extern PFNGLXGETAGPOFFSETMESAPROC __glewXGetAGPOffsetMESA;
+
+extern PFNGLXCOPYSUBBUFFERMESAPROC __glewXCopySubBufferMESA;
+
+extern PFNGLXCREATEGLXPIXMAPMESAPROC __glewXCreateGLXPixmapMESA;
+
+extern PFNGLXRELEASEBUFFERSMESAPROC __glewXReleaseBuffersMESA;
+
+extern PFNGLXSET3DFXMODEMESAPROC __glewXSet3DfxModeMESA;
+
+extern PFNGLXGETSWAPINTERVALMESAPROC __glewXGetSwapIntervalMESA;
+extern PFNGLXSWAPINTERVALMESAPROC __glewXSwapIntervalMESA;
+
+extern PFNGLXCOPYIMAGESUBDATANVPROC __glewXCopyImageSubDataNV;
+
+extern PFNGLXBINDVIDEODEVICENVPROC __glewXBindVideoDeviceNV;
+extern PFNGLXENUMERATEVIDEODEVICESNVPROC __glewXEnumerateVideoDevicesNV;
+
+extern PFNGLXBINDSWAPBARRIERNVPROC __glewXBindSwapBarrierNV;
+extern PFNGLXJOINSWAPGROUPNVPROC __glewXJoinSwapGroupNV;
+extern PFNGLXQUERYFRAMECOUNTNVPROC __glewXQueryFrameCountNV;
+extern PFNGLXQUERYMAXSWAPGROUPSNVPROC __glewXQueryMaxSwapGroupsNV;
+extern PFNGLXQUERYSWAPGROUPNVPROC __glewXQuerySwapGroupNV;
+extern PFNGLXRESETFRAMECOUNTNVPROC __glewXResetFrameCountNV;
+
+extern PFNGLXALLOCATEMEMORYNVPROC __glewXAllocateMemoryNV;
+extern PFNGLXFREEMEMORYNVPROC __glewXFreeMemoryNV;
+
+extern PFNGLXBINDVIDEOCAPTUREDEVICENVPROC __glewXBindVideoCaptureDeviceNV;
+extern PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC __glewXEnumerateVideoCaptureDevicesNV;
+extern PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC __glewXLockVideoCaptureDeviceNV;
+extern PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC __glewXQueryVideoCaptureDeviceNV;
+extern PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC __glewXReleaseVideoCaptureDeviceNV;
+
+extern PFNGLXBINDVIDEOIMAGENVPROC __glewXBindVideoImageNV;
+extern PFNGLXGETVIDEODEVICENVPROC __glewXGetVideoDeviceNV;
+extern PFNGLXGETVIDEOINFONVPROC __glewXGetVideoInfoNV;
+extern PFNGLXRELEASEVIDEODEVICENVPROC __glewXReleaseVideoDeviceNV;
+extern PFNGLXRELEASEVIDEOIMAGENVPROC __glewXReleaseVideoImageNV;
+extern PFNGLXSENDPBUFFERTOVIDEONVPROC __glewXSendPbufferToVideoNV;
+
+extern PFNGLXGETMSCRATEOMLPROC __glewXGetMscRateOML;
+extern PFNGLXGETSYNCVALUESOMLPROC __glewXGetSyncValuesOML;
+extern PFNGLXSWAPBUFFERSMSCOMLPROC __glewXSwapBuffersMscOML;
+extern PFNGLXWAITFORMSCOMLPROC __glewXWaitForMscOML;
+extern PFNGLXWAITFORSBCOMLPROC __glewXWaitForSbcOML;
+
+extern PFNGLXCHOOSEFBCONFIGSGIXPROC __glewXChooseFBConfigSGIX;
+extern PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC __glewXCreateContextWithConfigSGIX;
+extern PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC __glewXCreateGLXPixmapWithConfigSGIX;
+extern PFNGLXGETFBCONFIGATTRIBSGIXPROC __glewXGetFBConfigAttribSGIX;
+extern PFNGLXGETFBCONFIGFROMVISUALSGIXPROC __glewXGetFBConfigFromVisualSGIX;
+extern PFNGLXGETVISUALFROMFBCONFIGSGIXPROC __glewXGetVisualFromFBConfigSGIX;
+
+extern PFNGLXBINDHYPERPIPESGIXPROC __glewXBindHyperpipeSGIX;
+extern PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC __glewXDestroyHyperpipeConfigSGIX;
+extern PFNGLXHYPERPIPEATTRIBSGIXPROC __glewXHyperpipeAttribSGIX;
+extern PFNGLXHYPERPIPECONFIGSGIXPROC __glewXHyperpipeConfigSGIX;
+extern PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC __glewXQueryHyperpipeAttribSGIX;
+extern PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC __glewXQueryHyperpipeBestAttribSGIX;
+extern PFNGLXQUERYHYPERPIPECONFIGSGIXPROC __glewXQueryHyperpipeConfigSGIX;
+extern PFNGLXQUERYHYPERPIPENETWORKSGIXPROC __glewXQueryHyperpipeNetworkSGIX;
+
+extern PFNGLXCREATEGLXPBUFFERSGIXPROC __glewXCreateGLXPbufferSGIX;
+extern PFNGLXDESTROYGLXPBUFFERSGIXPROC __glewXDestroyGLXPbufferSGIX;
+extern PFNGLXGETSELECTEDEVENTSGIXPROC __glewXGetSelectedEventSGIX;
+extern PFNGLXQUERYGLXPBUFFERSGIXPROC __glewXQueryGLXPbufferSGIX;
+extern PFNGLXSELECTEVENTSGIXPROC __glewXSelectEventSGIX;
+
+extern PFNGLXBINDSWAPBARRIERSGIXPROC __glewXBindSwapBarrierSGIX;
+extern PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC __glewXQueryMaxSwapBarriersSGIX;
+
+extern PFNGLXJOINSWAPGROUPSGIXPROC __glewXJoinSwapGroupSGIX;
+
+extern PFNGLXBINDCHANNELTOWINDOWSGIXPROC __glewXBindChannelToWindowSGIX;
+extern PFNGLXCHANNELRECTSGIXPROC __glewXChannelRectSGIX;
+extern PFNGLXCHANNELRECTSYNCSGIXPROC __glewXChannelRectSyncSGIX;
+extern PFNGLXQUERYCHANNELDELTASSGIXPROC __glewXQueryChannelDeltasSGIX;
+extern PFNGLXQUERYCHANNELRECTSGIXPROC __glewXQueryChannelRectSGIX;
+
+extern PFNGLXCUSHIONSGIPROC __glewXCushionSGI;
+
+extern PFNGLXGETCURRENTREADDRAWABLESGIPROC __glewXGetCurrentReadDrawableSGI;
+extern PFNGLXMAKECURRENTREADSGIPROC __glewXMakeCurrentReadSGI;
+
+extern PFNGLXSWAPINTERVALSGIPROC __glewXSwapIntervalSGI;
+
+extern PFNGLXGETVIDEOSYNCSGIPROC __glewXGetVideoSyncSGI;
+extern PFNGLXWAITVIDEOSYNCSGIPROC __glewXWaitVideoSyncSGI;
+
+extern PFNGLXGETTRANSPARENTINDEXSUNPROC __glewXGetTransparentIndexSUN;
+
+extern PFNGLXGETVIDEORESIZESUNPROC __glewXGetVideoResizeSUN;
+extern PFNGLXVIDEORESIZESUNPROC __glewXVideoResizeSUN;
+
+#if defined(GLEW_MX)
+struct GLXEWContextStruct
+{
+#endif /* GLEW_MX */
+
+GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_0;
+GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_1;
+GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_2;
+GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_3;
+GLXEW_EXPORT GLboolean __GLXEW_VERSION_1_4;
+GLXEW_EXPORT GLboolean __GLXEW_3DFX_multisample;
+GLXEW_EXPORT GLboolean __GLXEW_AMD_gpu_association;
+GLXEW_EXPORT GLboolean __GLXEW_ARB_create_context;
+GLXEW_EXPORT GLboolean __GLXEW_ARB_create_context_profile;
+GLXEW_EXPORT GLboolean __GLXEW_ARB_create_context_robustness;
+GLXEW_EXPORT GLboolean __GLXEW_ARB_fbconfig_float;
+GLXEW_EXPORT GLboolean __GLXEW_ARB_framebuffer_sRGB;
+GLXEW_EXPORT GLboolean __GLXEW_ARB_get_proc_address;
+GLXEW_EXPORT GLboolean __GLXEW_ARB_multisample;
+GLXEW_EXPORT GLboolean __GLXEW_ARB_vertex_buffer_object;
+GLXEW_EXPORT GLboolean __GLXEW_ATI_pixel_format_float;
+GLXEW_EXPORT GLboolean __GLXEW_ATI_render_texture;
+GLXEW_EXPORT GLboolean __GLXEW_EXT_create_context_es2_profile;
+GLXEW_EXPORT GLboolean __GLXEW_EXT_fbconfig_packed_float;
+GLXEW_EXPORT GLboolean __GLXEW_EXT_framebuffer_sRGB;
+GLXEW_EXPORT GLboolean __GLXEW_EXT_import_context;
+GLXEW_EXPORT GLboolean __GLXEW_EXT_scene_marker;
+GLXEW_EXPORT GLboolean __GLXEW_EXT_swap_control;
+GLXEW_EXPORT GLboolean __GLXEW_EXT_texture_from_pixmap;
+GLXEW_EXPORT GLboolean __GLXEW_EXT_visual_info;
+GLXEW_EXPORT GLboolean __GLXEW_EXT_visual_rating;
+GLXEW_EXPORT GLboolean __GLXEW_INTEL_swap_event;
+GLXEW_EXPORT GLboolean __GLXEW_MESA_agp_offset;
+GLXEW_EXPORT GLboolean __GLXEW_MESA_copy_sub_buffer;
+GLXEW_EXPORT GLboolean __GLXEW_MESA_pixmap_colormap;
+GLXEW_EXPORT GLboolean __GLXEW_MESA_release_buffers;
+GLXEW_EXPORT GLboolean __GLXEW_MESA_set_3dfx_mode;
+GLXEW_EXPORT GLboolean __GLXEW_MESA_swap_control;
+GLXEW_EXPORT GLboolean __GLXEW_NV_copy_image;
+GLXEW_EXPORT GLboolean __GLXEW_NV_float_buffer;
+GLXEW_EXPORT GLboolean __GLXEW_NV_multisample_coverage;
+GLXEW_EXPORT GLboolean __GLXEW_NV_present_video;
+GLXEW_EXPORT GLboolean __GLXEW_NV_swap_group;
+GLXEW_EXPORT GLboolean __GLXEW_NV_vertex_array_range;
+GLXEW_EXPORT GLboolean __GLXEW_NV_video_capture;
+GLXEW_EXPORT GLboolean __GLXEW_NV_video_output;
+GLXEW_EXPORT GLboolean __GLXEW_OML_swap_method;
+GLXEW_EXPORT GLboolean __GLXEW_OML_sync_control;
+GLXEW_EXPORT GLboolean __GLXEW_SGIS_blended_overlay;
+GLXEW_EXPORT GLboolean __GLXEW_SGIS_color_range;
+GLXEW_EXPORT GLboolean __GLXEW_SGIS_multisample;
+GLXEW_EXPORT GLboolean __GLXEW_SGIS_shared_multisample;
+GLXEW_EXPORT GLboolean __GLXEW_SGIX_fbconfig;
+GLXEW_EXPORT GLboolean __GLXEW_SGIX_hyperpipe;
+GLXEW_EXPORT GLboolean __GLXEW_SGIX_pbuffer;
+GLXEW_EXPORT GLboolean __GLXEW_SGIX_swap_barrier;
+GLXEW_EXPORT GLboolean __GLXEW_SGIX_swap_group;
+GLXEW_EXPORT GLboolean __GLXEW_SGIX_video_resize;
+GLXEW_EXPORT GLboolean __GLXEW_SGIX_visual_select_group;
+GLXEW_EXPORT GLboolean __GLXEW_SGI_cushion;
+GLXEW_EXPORT GLboolean __GLXEW_SGI_make_current_read;
+GLXEW_EXPORT GLboolean __GLXEW_SGI_swap_control;
+GLXEW_EXPORT GLboolean __GLXEW_SGI_video_sync;
+GLXEW_EXPORT GLboolean __GLXEW_SUN_get_transparent_index;
+GLXEW_EXPORT GLboolean __GLXEW_SUN_video_resize;
+
+#ifdef GLEW_MX
+}; /* GLXEWContextStruct */
+#endif /* GLEW_MX */
+
+/* ------------------------------------------------------------------------ */
+
+#ifdef GLEW_MX
+
+typedef struct GLXEWContextStruct GLXEWContext;
+extern GLenum glxewContextInit (GLXEWContext* ctx);
+extern GLboolean glxewContextIsSupported (const GLXEWContext* ctx, const char* name);
+
+#define glxewInit() glxewContextInit(glxewGetContext())
+#define glxewIsSupported(x) glxewContextIsSupported(glxewGetContext(), x)
+
+#define GLXEW_GET_VAR(x) (*(const GLboolean*)&(glxewGetContext()->x))
+#define GLXEW_GET_FUN(x) x
+
+#else /* GLEW_MX */
+
+#define GLXEW_GET_VAR(x) (*(const GLboolean*)&x)
+#define GLXEW_GET_FUN(x) x
+
+extern GLboolean glxewIsSupported (const char* name);
+
+#endif /* GLEW_MX */
+
+extern GLboolean glxewGetExtension (const char* name);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __glxew_h__ */
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glxext.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glxext.h
new file mode 100644
index 00000000..cccee18d
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/glxext.h
@@ -0,0 +1,941 @@
+#ifndef __glxext_h_
+#define __glxext_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** License Applicability. Except to the extent portions of this file are
+** made subject to an alternative license as permitted in the SGI Free
+** Software License B, Version 1.1 (the "License"), the contents of this
+** file are subject only to the provisions of the License. You may not use
+** this file except in compliance with the License. You may obtain a copy
+** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
+** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
+**
+** http://oss.sgi.com/projects/FreeB
+**
+** Note that, as provided in the License, the Software is distributed on an
+** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
+** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
+** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
+** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
+**
+** Original Code. The Original Code is: OpenGL Sample Implementation,
+** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
+** Inc. The Original Code is Copyright (c) 1991-2004 Silicon Graphics, Inc.
+** Copyright in any portions created by third parties is as indicated
+** elsewhere herein. All Rights Reserved.
+**
+** Additional Notice Provisions: This software was created using the
+** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has
+** not been independently verified as being compliant with the OpenGL(R)
+** version 1.2.1 Specification.
+*/
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#define WIN32_LEAN_AND_MEAN 1
+#include <windows.h>
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+/*************************************************************/
+
+/* Header file version number, required by OpenGL ABI for Linux */
+/* glxext.h last updated 2009/01/08 */
+/* Current version at http://www.opengl.org/registry/ */
+#define GLX_GLXEXT_VERSION 21
+
+#ifndef GLX_ARB_get_proc_address
+#endif
+
+#ifndef GLX_ARB_multisample
+#define GLX_SAMPLE_BUFFERS_ARB 100000
+#define GLX_SAMPLES_ARB 100001
+#endif
+
+#ifndef GLX_ARB_fbconfig_float
+#define GLX_RGBA_FLOAT_TYPE_ARB 0x20B9
+#define GLX_RGBA_FLOAT_BIT_ARB 0x00000004
+#endif
+
+#ifndef GLX_ARB_create_context
+#define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001
+#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
+#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
+#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
+#define GLX_CONTEXT_FLAGS_ARB 0x2094
+#endif
+
+#ifndef GLX_SGIS_multisample
+#define GLX_SAMPLE_BUFFERS_SGIS 100000
+#define GLX_SAMPLES_SGIS 100001
+#endif
+
+#ifndef GLX_EXT_visual_info
+#define GLX_X_VISUAL_TYPE_EXT 0x22
+#define GLX_TRANSPARENT_TYPE_EXT 0x23
+#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24
+#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25
+#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26
+#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27
+#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28
+#define GLX_NONE_EXT 0x8000
+#define GLX_TRUE_COLOR_EXT 0x8002
+#define GLX_DIRECT_COLOR_EXT 0x8003
+#define GLX_PSEUDO_COLOR_EXT 0x8004
+#define GLX_STATIC_COLOR_EXT 0x8005
+#define GLX_GRAY_SCALE_EXT 0x8006
+#define GLX_STATIC_GRAY_EXT 0x8007
+#define GLX_TRANSPARENT_RGB_EXT 0x8008
+#define GLX_TRANSPARENT_INDEX_EXT 0x8009
+#endif
+
+#ifndef GLX_SGI_swap_control
+#endif
+
+#ifndef GLX_SGI_video_sync
+#endif
+
+#ifndef GLX_SGI_make_current_read
+#endif
+
+#ifndef GLX_SGIX_video_source
+#endif
+
+#ifndef GLX_EXT_visual_rating
+#define GLX_VISUAL_CAVEAT_EXT 0x20
+#define GLX_SLOW_VISUAL_EXT 0x8001
+#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D
+/* reuse GLX_NONE_EXT */
+#endif
+
+#ifndef GLX_EXT_import_context
+#define GLX_SHARE_CONTEXT_EXT 0x800A
+#define GLX_VISUAL_ID_EXT 0x800B
+#define GLX_SCREEN_EXT 0x800C
+#endif
+
+#ifndef GLX_SGIX_fbconfig
+#define GLX_WINDOW_BIT_SGIX 0x00000001
+#define GLX_PIXMAP_BIT_SGIX 0x00000002
+#define GLX_RGBA_BIT_SGIX 0x00000001
+#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002
+#define GLX_DRAWABLE_TYPE_SGIX 0x8010
+#define GLX_RENDER_TYPE_SGIX 0x8011
+#define GLX_X_RENDERABLE_SGIX 0x8012
+#define GLX_FBCONFIG_ID_SGIX 0x8013
+#define GLX_RGBA_TYPE_SGIX 0x8014
+#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015
+/* reuse GLX_SCREEN_EXT */
+#endif
+
+#ifndef GLX_SGIX_pbuffer
+#define GLX_PBUFFER_BIT_SGIX 0x00000004
+#define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000
+#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001
+#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002
+#define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004
+#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008
+#define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010
+#define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020
+#define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040
+#define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080
+#define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100
+#define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016
+#define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017
+#define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018
+#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019
+#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A
+#define GLX_PRESERVED_CONTENTS_SGIX 0x801B
+#define GLX_LARGEST_PBUFFER_SGIX 0x801C
+#define GLX_WIDTH_SGIX 0x801D
+#define GLX_HEIGHT_SGIX 0x801E
+#define GLX_EVENT_MASK_SGIX 0x801F
+#define GLX_DAMAGED_SGIX 0x8020
+#define GLX_SAVED_SGIX 0x8021
+#define GLX_WINDOW_SGIX 0x8022
+#define GLX_PBUFFER_SGIX 0x8023
+#endif
+
+#ifndef GLX_SGI_cushion
+#endif
+
+#ifndef GLX_SGIX_video_resize
+#define GLX_SYNC_FRAME_SGIX 0x00000000
+#define GLX_SYNC_SWAP_SGIX 0x00000001
+#endif
+
+#ifndef GLX_SGIX_dmbuffer
+#define GLX_DIGITAL_MEDIA_PBUFFER_SGIX 0x8024
+#endif
+
+#ifndef GLX_SGIX_swap_group
+#endif
+
+#ifndef GLX_SGIX_swap_barrier
+#endif
+
+#ifndef GLX_SGIS_blended_overlay
+#define GLX_BLENDED_RGBA_SGIS 0x8025
+#endif
+
+#ifndef GLX_SGIS_shared_multisample
+#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026
+#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027
+#endif
+
+#ifndef GLX_SUN_get_transparent_index
+#endif
+
+#ifndef GLX_3DFX_multisample
+#define GLX_SAMPLE_BUFFERS_3DFX 0x8050
+#define GLX_SAMPLES_3DFX 0x8051
+#endif
+
+#ifndef GLX_MESA_copy_sub_buffer
+#endif
+
+#ifndef GLX_MESA_pixmap_colormap
+#endif
+
+#ifndef GLX_MESA_release_buffers
+#endif
+
+#ifndef GLX_MESA_set_3dfx_mode
+#define GLX_3DFX_WINDOW_MODE_MESA 0x1
+#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2
+#endif
+
+#ifndef GLX_SGIX_visual_select_group
+#define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028
+#endif
+
+#ifndef GLX_OML_swap_method
+#define GLX_SWAP_METHOD_OML 0x8060
+#define GLX_SWAP_EXCHANGE_OML 0x8061
+#define GLX_SWAP_COPY_OML 0x8062
+#define GLX_SWAP_UNDEFINED_OML 0x8063
+#endif
+
+#ifndef GLX_OML_sync_control
+#endif
+
+#ifndef GLX_NV_float_buffer
+#define GLX_FLOAT_COMPONENTS_NV 0x20B0
+#endif
+
+#ifndef GLX_SGIX_hyperpipe
+#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80
+#define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91
+#define GLX_BAD_HYPERPIPE_SGIX 92
+#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001
+#define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002
+#define GLX_PIPE_RECT_SGIX 0x00000001
+#define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002
+#define GLX_HYPERPIPE_STEREO_SGIX 0x00000003
+#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004
+#define GLX_HYPERPIPE_ID_SGIX 0x8030
+#endif
+
+#ifndef GLX_MESA_agp_offset
+#endif
+
+
+/*************************************************************/
+
+#ifndef GLX_ARB_get_proc_address
+/*
+ * Linux OpenGL ABI specifies glXGetProcAddressARB should be
+ * in glx.h moving related defines there as well.
+ */
+#endif
+
+#ifndef GLX_SGIX_video_source
+typedef XID GLXVideoSourceSGIX;
+#endif
+
+#ifndef GLX_SGIX_fbconfig
+typedef XID GLXFBConfigIDSGIX;
+typedef struct __GLXFBConfigRec *GLXFBConfigSGIX;
+#endif
+
+#ifndef GLX_SGIX_pbuffer
+typedef XID GLXPbufferSGIX;
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came for SendEvent request */
+ Display *display; /* display the event was read from */
+ GLXDrawable drawable; /* i.d. of Drawable */
+ int event_type; /* GLX_DAMAGED_SGIX or GLX_SAVED_SGIX */
+ int draw_type; /* GLX_WINDOW_SGIX or GLX_PBUFFER_SGIX */
+ unsigned int mask; /* mask indicating which buffers are affected*/
+ int x, y;
+ int width, height;
+ int count; /* if nonzero, at least this many more */
+} GLXBufferClobberEventSGIX;
+#endif
+
+#ifndef GLX_NV_swap_group
+#endif
+
+#ifndef GLX_NV_video_out
+/*
+ * GLXVideoDeviceNV is an opaque handle to a video device (part of the
+ * GLX_NV_video_out extension).
+ */
+typedef unsigned int GLXVideoDeviceNV;
+
+/* glXBindVideoImageNV iVideoBuffer values (NV_video_out) */
+#define GLX_VIDEO_OUT_COLOR_NV 0x20C3
+#define GLX_VIDEO_OUT_ALPHA_NV 0x20C4
+#define GLX_VIDEO_OUT_DEPTH_NV 0x20C5
+#define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6
+#define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7
+
+/* glXSendPbufferToVideoNV iBufferType values (NV_video_out) */
+#define GLX_VIDEO_OUT_FRAME_NV 0x20C8
+#define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9
+#define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA
+#define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB
+#define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC
+#endif
+
+#ifndef GLX_EXT_fbconfig_packed_float
+#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1
+#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008
+#endif
+
+#ifndef GLX_EXT_framebuffer_sRGB
+#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2
+#endif
+
+#ifndef GLX_EXT_texture_from_pixmap
+/* New glXGetFBConfigAttrib <attrib_list> tokens */
+#define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0
+#define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1
+#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2
+#define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3
+#define GLX_Y_INVERTED_EXT 0x20D4
+
+/* New glXCreatePixmap attributes and glXQueryDrawable attributes */
+#define GLX_TEXTURE_FORMAT_EXT 0x20D5
+#define GLX_TEXTURE_TARGET_EXT 0x20D6
+#define GLX_MIPMAP_TEXTURE_EXT 0x20D7
+
+/* Values for GLX_TEXTURE_FORMAT_EXT */
+#define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8
+#define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9
+#define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA
+
+/* Bits for GLX_BIND_TO_TEXTURE_TARGETS_EXT mask */
+#define GLX_TEXTURE_1D_BIT_EXT 0x00000001
+#define GLX_TEXTURE_2D_BIT_EXT 0x00000002
+#define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004
+
+/* Values for GLX_TEXTURE_TARGET_EXT */
+#define GLX_TEXTURE_1D_EXT 0x20DB
+#define GLX_TEXTURE_2D_EXT 0x20DC
+#define GLX_TEXTURE_RECTANGLE_EXT 0x20DD
+
+/*
+ * Values for the buffer parameter of glXBindTexImageEXT and
+ * glXReleaseTexImageEXT
+ */
+#define GLX_FRONT_LEFT_EXT 0x20DE
+#define GLX_FRONT_RIGHT_EXT 0x20DF
+#define GLX_BACK_LEFT_EXT 0x20E0
+#define GLX_BACK_RIGHT_EXT 0x20E1
+#define GLX_FRONT_EXT GLX_FRONT_LEFT_EXT
+#define GLX_BACK_EXT GLX_BACK_LEFT_EXT
+#define GLX_AUX0_EXT 0x20E2
+#define GLX_AUX1_EXT 0x20E3
+#define GLX_AUX2_EXT 0x20E4
+#define GLX_AUX3_EXT 0x20E5
+#define GLX_AUX4_EXT 0x20E6
+#define GLX_AUX5_EXT 0x20E7
+#define GLX_AUX6_EXT 0x20E8
+#define GLX_AUX7_EXT 0x20E9
+#define GLX_AUX8_EXT 0x20EA
+#define GLX_AUX9_EXT 0x20EB
+
+#endif
+
+#ifndef GLX_NV_multisample_coverage
+#define GLX_COVERAGE_SAMPLES_NV GLX_SAMPLES_ARB
+#define GLX_COLOR_SAMPLES_NV 0x20B3
+#endif
+
+#ifndef GLX_NV_video_capture
+typedef struct GLXVideoCaptureDeviceNVRec *GLXVideoCaptureDeviceNV;
+
+#define GLX_DEVICE_ID_NV 0x20CD
+#define GLX_UNIQUE_ID_NV 0x20CE
+#endif
+
+#ifndef GLX_EXT_swap_control
+#define GLX_SWAP_INTERVAL_EXT 0x20F1
+#define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2
+#endif
+
+#ifndef GLX_EXT_swap_control_tear
+#define GLX_LATE_SWAPS_TEAR_EXT 0x20F3
+#endif
+
+/* Define int32_t and int64_t types for UST/MSC */
+/* (as used in the GLX_OML_sync_control extension). */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <inttypes.h>
+#elif defined( __VMS ) || defined(__FreeBSD__)
+#include <inttypes.h>
+#elif (defined(__sun__) && defined(__svr4__)) || (defined(__sun) && defined(__SVR4))
+#include <inttypes.h>
+#elif defined(__SCO__) || defined(__USLC__) || defined(__linux__)
+#include <stdint.h>
+#elif defined(__UNIXOS2__) || defined(__SOL64__)
+typedef long int int32_t;
+typedef long long int int64_t;
+#else
+#error "int32_t and int64_t are undefined!"
+#endif
+
+#ifndef GLX_ARB_get_proc_address
+/* Moved to glx.h */
+#endif
+
+#ifndef GLX_ARB_multisample
+#define GLX_ARB_multisample 1
+#endif
+
+#ifndef GLX_ARB_fbconfig_float
+#define GLX_ARB_fbconfig_float 1
+#endif
+
+#ifndef GLX_ARB_create_context
+#define GLX_ARB_create_context 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXContext glXCreateContextAttribsARB (Display *, GLXFBConfig, GLXContext, Bool, const int *);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXContext ( * PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
+#endif
+
+#ifndef GLX_SGIS_multisample
+#define GLX_SGIS_multisample 1
+#endif
+
+#ifndef GLX_EXT_visual_info
+#define GLX_EXT_visual_info 1
+#endif
+
+#ifndef GLX_SGI_swap_control
+#define GLX_SGI_swap_control 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXSwapIntervalSGI (int);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval);
+#endif
+
+#ifndef GLX_EXT_swap_control
+#define GLX_EXT_swap_control 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXSwapIntervalEXT (Display *dpy, GLXDrawable drawable, int interval);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXSWAPINTERVALEXTPROC) (Display *dpy, GLXDrawable drawable, int interval);
+#endif
+
+#ifndef GLX_EXT_swap_control_tear
+#define GLX_EXT_swap_control_tear 1
+#endif
+
+#ifndef GLX_SGI_video_sync
+#define GLX_SGI_video_sync 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXGetVideoSyncSGI (unsigned int *);
+extern int glXWaitVideoSyncSGI (int, int, unsigned int *);
+extern int glXGetRefreshRateSGI(unsigned int *);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXGETVIDEOSYNCSGIPROC) (unsigned int *count);
+typedef int ( * PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int *count);
+typedef int ( * PFNGLXGETREFRESHRATESGIPROC) (unsigned int *);
+#endif
+
+#ifndef GLX_SGI_make_current_read
+#define GLX_SGI_make_current_read 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXMakeCurrentReadSGI (Display *, GLXDrawable, GLXDrawable, GLXContext);
+extern GLXDrawable glXGetCurrentReadDrawableSGI (void);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXMAKECURRENTREADSGIPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void);
+#endif
+
+#ifndef GLX_SGIX_video_source
+#define GLX_SGIX_video_source 1
+#ifdef _VL_H
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXVideoSourceSGIX glXCreateGLXVideoSourceSGIX (Display *, int, VLServer, VLPath, int, VLNode);
+extern void glXDestroyGLXVideoSourceSGIX (Display *, GLXVideoSourceSGIX);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXVideoSourceSGIX ( * PFNGLXCREATEGLXVIDEOSOURCESGIXPROC) (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode);
+typedef void ( * PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC) (Display *dpy, GLXVideoSourceSGIX glxvideosource);
+#endif /* _VL_H */
+#endif
+
+#ifndef GLX_EXT_visual_rating
+#define GLX_EXT_visual_rating 1
+#endif
+
+#ifndef GLX_EXT_import_context
+#define GLX_EXT_import_context 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Display * glXGetCurrentDisplayEXT (void);
+extern int glXQueryContextInfoEXT (Display *, GLXContext, int, int *);
+extern GLXContextID glXGetContextIDEXT (const GLXContext);
+extern GLXContext glXImportContextEXT (Display *, GLXContextID);
+extern void glXFreeContextEXT (Display *, GLXContext);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Display * ( * PFNGLXGETCURRENTDISPLAYEXTPROC) (void);
+typedef int ( * PFNGLXQUERYCONTEXTINFOEXTPROC) (Display *dpy, GLXContext context, int attribute, int *value);
+typedef GLXContextID ( * PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context);
+typedef GLXContext ( * PFNGLXIMPORTCONTEXTEXTPROC) (Display *dpy, GLXContextID contextID);
+typedef void ( * PFNGLXFREECONTEXTEXTPROC) (Display *dpy, GLXContext context);
+#endif
+
+#ifndef GLX_SGIX_fbconfig
+#define GLX_SGIX_fbconfig 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXGetFBConfigAttribSGIX (Display *, GLXFBConfigSGIX, int, int *);
+extern GLXFBConfigSGIX * glXChooseFBConfigSGIX (Display *, int, int *, int *);
+extern GLXPixmap glXCreateGLXPixmapWithConfigSGIX (Display *, GLXFBConfigSGIX, Pixmap);
+extern GLXContext glXCreateContextWithConfigSGIX (Display *, GLXFBConfigSGIX, int, GLXContext, Bool);
+extern XVisualInfo * glXGetVisualFromFBConfigSGIX (Display *, GLXFBConfigSGIX);
+extern GLXFBConfigSGIX glXGetFBConfigFromVisualSGIX (Display *, XVisualInfo *);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);
+typedef GLXFBConfigSGIX * ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, int *attrib_list, int *nelements);
+typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap);
+typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);
+typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config);
+typedef GLXFBConfigSGIX ( * PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display *dpy, XVisualInfo *vis);
+#endif
+
+#ifndef GLX_SGIX_pbuffer
+#define GLX_SGIX_pbuffer 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXPbufferSGIX glXCreateGLXPbufferSGIX (Display *, GLXFBConfigSGIX, unsigned int, unsigned int, int *);
+extern void glXDestroyGLXPbufferSGIX (Display *, GLXPbufferSGIX);
+extern int glXQueryGLXPbufferSGIX (Display *, GLXPbufferSGIX, int, unsigned int *);
+extern void glXSelectEventSGIX (Display *, GLXDrawable, unsigned long);
+extern void glXGetSelectedEventSGIX (Display *, GLXDrawable, unsigned long *);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXPbufferSGIX ( * PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list);
+typedef void ( * PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf);
+typedef int ( * PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value);
+typedef void ( * PFNGLXSELECTEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long mask);
+typedef void ( * PFNGLXGETSELECTEDEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long *mask);
+#endif
+
+#ifndef GLX_SGI_cushion
+#define GLX_SGI_cushion 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXCushionSGI (Display *, Window, float);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXCUSHIONSGIPROC) (Display *dpy, Window window, float cushion);
+#endif
+
+#ifndef GLX_SGIX_video_resize
+#define GLX_SGIX_video_resize 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXBindChannelToWindowSGIX (Display *, int, int, Window);
+extern int glXChannelRectSGIX (Display *, int, int, int, int, int, int);
+extern int glXQueryChannelRectSGIX (Display *, int, int, int *, int *, int *, int *);
+extern int glXQueryChannelDeltasSGIX (Display *, int, int, int *, int *, int *, int *);
+extern int glXChannelRectSyncSGIX (Display *, int, int, GLenum);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display *display, int screen, int channel, Window window);
+typedef int ( * PFNGLXCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int x, int y, int w, int h);
+typedef int ( * PFNGLXQUERYCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);
+typedef int ( * PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display *display, int screen, int channel, int *x, int *y, int *w, int *h);
+typedef int ( * PFNGLXCHANNELRECTSYNCSGIXPROC) (Display *display, int screen, int channel, GLenum synctype);
+#endif
+
+#ifndef GLX_SGIX_dmbuffer
+#define GLX_SGIX_dmbuffer 1
+#ifdef _DM_BUFFER_H_
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXAssociateDMPbufferSGIX (Display *, GLXPbufferSGIX, DMparams *, DMbuffer);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXASSOCIATEDMPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer);
+#endif /* _DM_BUFFER_H_ */
+#endif
+
+#ifndef GLX_SGIX_swap_group
+#define GLX_SGIX_swap_group 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXJoinSwapGroupSGIX (Display *, GLXDrawable, GLXDrawable);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member);
+#endif
+
+#ifndef GLX_SGIX_swap_barrier
+#define GLX_SGIX_swap_barrier 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXBindSwapBarrierSGIX (Display *, GLXDrawable, int);
+extern Bool glXQueryMaxSwapBarriersSGIX (Display *, int, int *);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier);
+typedef Bool ( * PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max);
+#endif
+
+#ifndef GLX_SUN_get_transparent_index
+#define GLX_SUN_get_transparent_index 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Status glXGetTransparentIndexSUN (Display *, Window, Window, long *);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Status ( * PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex);
+#endif
+
+#ifndef GLX_MESA_copy_sub_buffer
+#define GLX_MESA_copy_sub_buffer 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXCopySubBufferMESA (Display *, GLXDrawable, int, int, int, int);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXCOPYSUBBUFFERMESAPROC) (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);
+#endif
+
+#ifndef GLX_MESA_pixmap_colormap
+#define GLX_MESA_pixmap_colormap 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXPixmap glXCreateGLXPixmapMESA (Display *, XVisualInfo *, Pixmap, Colormap);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPMESAPROC) (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);
+#endif
+
+#ifndef GLX_MESA_release_buffers
+#define GLX_MESA_release_buffers 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXReleaseBuffersMESA (Display *, GLXDrawable);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXRELEASEBUFFERSMESAPROC) (Display *dpy, GLXDrawable drawable);
+#endif
+
+#ifndef GLX_MESA_set_3dfx_mode
+#define GLX_MESA_set_3dfx_mode 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXSet3DfxModeMESA (int);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXSET3DFXMODEMESAPROC) (int mode);
+#endif
+
+#ifndef GLX_SGIX_visual_select_group
+#define GLX_SGIX_visual_select_group 1
+#endif
+
+#ifndef GLX_OML_swap_method
+#define GLX_OML_swap_method 1
+#endif
+
+#ifndef GLX_OML_sync_control
+#define GLX_OML_sync_control 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXGetSyncValuesOML (Display *, GLXDrawable, int64_t *, int64_t *, int64_t *);
+extern Bool glXGetMscRateOML (Display *, GLXDrawable, int32_t *, int32_t *);
+extern int64_t glXSwapBuffersMscOML (Display *, GLXDrawable, int64_t, int64_t, int64_t);
+extern Bool glXWaitForMscOML (Display *, GLXDrawable, int64_t, int64_t, int64_t, int64_t *, int64_t *, int64_t *);
+extern Bool glXWaitForSbcOML (Display *, GLXDrawable, int64_t, int64_t *, int64_t *, int64_t *);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXGETSYNCVALUESOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc);
+typedef Bool ( * PFNGLXGETMSCRATEOMLPROC) (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator);
+typedef int64_t ( * PFNGLXSWAPBUFFERSMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder);
+typedef Bool ( * PFNGLXWAITFORMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc);
+typedef Bool ( * PFNGLXWAITFORSBCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc);
+#endif
+
+#ifndef GLX_NV_float_buffer
+#define GLX_NV_float_buffer 1
+#endif
+
+#ifndef GLX_SGIX_hyperpipe
+#define GLX_SGIX_hyperpipe 1
+
+typedef struct {
+ char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+ int networkId;
+} GLXHyperpipeNetworkSGIX;
+
+typedef struct {
+ char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+ int channel;
+ unsigned int
+ participationType;
+ int timeSlice;
+} GLXHyperpipeConfigSGIX;
+
+typedef struct {
+ char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+ int srcXOrigin, srcYOrigin, srcWidth, srcHeight;
+ int destXOrigin, destYOrigin, destWidth, destHeight;
+} GLXPipeRect;
+
+typedef struct {
+ char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+ int XOrigin, YOrigin, maxHeight, maxWidth;
+} GLXPipeRectLimits;
+
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXHyperpipeNetworkSGIX * glXQueryHyperpipeNetworkSGIX (Display *, int *);
+extern int glXHyperpipeConfigSGIX (Display *, int, int, GLXHyperpipeConfigSGIX *, int *);
+extern GLXHyperpipeConfigSGIX * glXQueryHyperpipeConfigSGIX (Display *, int, int *);
+extern int glXDestroyHyperpipeConfigSGIX (Display *, int);
+extern int glXBindHyperpipeSGIX (Display *, int);
+extern int glXQueryHyperpipeBestAttribSGIX (Display *, int, int, int, void *, void *);
+extern int glXHyperpipeAttribSGIX (Display *, int, int, int, void *);
+extern int glXQueryHyperpipeAttribSGIX (Display *, int, int, int, void *);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXHyperpipeNetworkSGIX * ( * PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display *dpy, int *npipes);
+typedef int ( * PFNGLXHYPERPIPECONFIGSGIXPROC) (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId);
+typedef GLXHyperpipeConfigSGIX * ( * PFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId, int *npipes);
+typedef int ( * PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId);
+typedef int ( * PFNGLXBINDHYPERPIPESGIXPROC) (Display *dpy, int hpId);
+typedef int ( * PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList);
+typedef int ( * PFNGLXHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList);
+typedef int ( * PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList);
+#endif
+
+#ifndef GLX_MESA_agp_offset
+#define GLX_MESA_agp_offset 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern unsigned int glXGetAGPOffsetMESA (const void *);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef unsigned int ( * PFNGLXGETAGPOFFSETMESAPROC) (const void *pointer);
+#endif
+
+/*
+ * GLX_NV_vertex_array_range is not a real extension name...
+ */
+#ifndef GLX_NV_vertex_array_range
+#define GLX_NV_vertex_array_range 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void *glXAllocateMemoryNV(GLsizei size, GLfloat readfreq,
+ GLfloat writefreq, GLfloat priority);
+
+extern void glXFreeMemoryNV(GLvoid *pointer);
+#endif
+typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size,
+ GLfloat readfreq,
+ GLfloat writefreq,
+ GLfloat priority);
+
+typedef void ( * PFNGLXFREEMEMORYNVPROC) (GLvoid *pointer);
+#endif
+
+#ifndef GLX_NV_swap_group
+#define GLX_NV_swap_group 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXJoinSwapGroupNV(Display *dpy, GLXDrawable drawable,
+ GLuint group);
+
+extern Bool glXBindSwapBarrierNV(Display *dpy, GLuint group, GLuint barrier);
+
+extern Bool glXQuerySwapGroupNV(Display *dpy, GLXDrawable drawable,
+ GLuint *group, GLuint *barrier);
+
+extern Bool glXQueryMaxSwapGroupsNV(Display *dpy, int screen,
+ GLuint *maxGroups, GLuint *maxBarriers);
+
+extern Bool glXQueryFrameCountNV(Display *dpy, int screen, GLuint *count);
+
+extern Bool glXResetFrameCountNV(Display *dpy, int screen);
+#endif
+typedef Bool ( * PFNGLXJOINSWAPGROUPNVPROC) (Display *dpy,
+ GLXDrawable drawable,
+ GLuint group);
+
+typedef Bool ( * PFNGLXBINDSWAPBARRIERNVPROC) (Display *dpy,
+ GLuint group,
+ GLuint barrier);
+
+typedef Bool ( * PFNGLXQUERYSWAPGROUPNVPROC) (Display *dpy,
+ GLXDrawable drawable,
+ GLuint *group,
+ GLuint *barrier);
+
+typedef Bool ( * PFNGLXQUERYMAXSWAPGROUPSNVPROC) (Display *dpy,
+ int screen,
+ GLuint *maxGroups,
+ GLuint *maxBarriers);
+
+typedef Bool ( * PFNGLXQUERYFRAMECOUNTNVPROC) (Display *dpy,
+ int screen,
+ GLuint *count);
+
+typedef Bool ( * PFNGLXRESETFRAMECOUNTNVPROC) (Display *dpy, int screen);
+#endif
+
+#ifndef GLX_NV_video_out
+#define GLX_NV_video_out 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXGetVideoDeviceNV(Display *dpy, int screen, int numVideoDevices,
+ GLXVideoDeviceNV *pVideoDevice);
+
+extern int glXReleaseVideoDeviceNV(Display *dpy, int screen,
+ GLXVideoDeviceNV VideoDevice);
+
+extern int glXBindVideoImageNV(Display *dpy, GLXVideoDeviceNV VideoDevice,
+ GLXPbuffer pbuf, int iVideoBuffer);
+
+extern int glXReleaseVideoImageNV(Display *dpy, GLXPbuffer pbuf);
+
+extern int glXSendPbufferToVideoNV(Display *dpy, GLXPbuffer pbuf,
+ int iBufferType,
+ unsigned long *pulCounterPbuffer,
+ GLboolean bBlock);
+
+extern int glXGetVideoInfoNV(Display *dpy, int screen,
+ GLXVideoDeviceNV VideoDevice,
+ unsigned long *pulCounterOutputPbuffer,
+ unsigned long *pulCounterOutputVideo);
+#endif
+typedef int ( * PFNGLXGETVIDEODEVICENVPROC) (Display *dpy,
+ int screen,
+ int numVideoDevices,
+ GLXVideoDeviceNV *pVideoDevice);
+
+typedef int ( * PFNGLXRELEASEVIDEODEVICENVPROC) (Display *dpy,
+ int screen,
+ GLXVideoDeviceNV VideoDevice);
+
+typedef int ( * PFNGLXBINDVIDEOIMAGENVPROC) (Display *dpy,
+ GLXVideoDeviceNV VideoDevice,
+ GLXPbuffer pbuf,
+ int iVideoBuffer);
+
+typedef int ( * PFNGLXRELEASEVIDEOIMAGENVPROC) (Display *dpy,
+ GLXPbuffer pbuf);
+
+typedef int ( * PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display *dpy,
+ GLXPbuffer pbuf,
+ int iBufferType,
+ unsigned long *pulCounterPbuffer,
+ GLboolean bBlock);
+
+typedef int ( * PFNGLXGETVIDEOINFONVPROC) (Display *dpy, int screen,
+ GLXVideoDeviceNV VideoDevice,
+ unsigned long *pulCounterOutputPbuffer,
+ unsigned long *pulCounterOutputVideo);
+#endif
+
+#ifndef GLX_EXT_fbconfig_packed_float
+#define GLX_EXT_fbconfig_packed_float 1
+#endif
+
+#ifndef GLX_EXT_framebuffer_sRGB
+#define GLX_EXT_framebuffer_sRGB 1
+#endif
+
+#ifndef GLX_EXT_texture_from_pixmap
+#define GLX_EXT_texture_from_pixmap
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXBindTexImageEXT(Display *dpy, GLXDrawable drawable,
+ int buffer, const int *attrib_list);
+extern void glXReleaseTexImageEXT(Display *dpy, GLXDrawable drawable,
+ int buffer);
+#endif
+typedef void ( * PFNGLXBINDTEXIMAGEEXTPROC) (Display *dpy,
+ GLXDrawable drawable,
+ int buffer,
+ const int *attrib_list);
+typedef void ( * PFNGLXRELEASETEXIMAGEEXTPROC) (Display *dpy,
+ GLXDrawable drawable,
+ int buffer);
+#endif
+
+#ifndef GLX_NV_present_video
+#define GLX_NV_present_video
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern unsigned int *glXEnumerateVideoDevicesNV(Display *dpy,
+ int screen,
+ int *nelements);
+extern int glXBindVideoDeviceNV(Display *dpy,
+ unsigned int video_slot,
+ unsigned int video_device,
+ const int *attrib_list);
+#endif
+typedef unsigned int* ( * PFNGLXENUMERATEVIDEODEVICESNVPROC) (Display *dpy,
+ int screen,
+ int *nelements);
+typedef int ( * PFNGLXBINDVIDEODEVICENVPROC) (Display *dpy,
+ unsigned int video_slot,
+ unsigned int video_device,
+ const int *attrib_list);
+#endif
+
+#ifndef GLX_NV_multisample_coverage
+#define GLX_NV_multisample_coverage 1
+#endif
+
+#ifndef GLX_NV_video_capture
+#define GLX_NV_video_capture
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXVideoCaptureDeviceNV*
+ glXEnumerateVideoCaptureDevicesNV(Display *dpy,
+ int screen,
+ int *nelements);
+extern void glXLockVideoCaptureDeviceNV(Display *dpy,
+ GLXVideoCaptureDeviceNV device);
+extern void glXReleaseVideoCaptureDeviceNV(Display *dpy,
+ GLXVideoCaptureDeviceNV device);
+extern int glXBindVideoCaptureDeviceNV(Display *dpy,
+ unsigned int video_capture_slot,
+ GLXVideoCaptureDeviceNV device);
+extern int glXQueryVideoCaptureDeviceNV(Display *dpy,
+ GLXVideoCaptureDeviceNV device,
+ int attribute,
+ int *value);
+#endif
+typedef GLXVideoCaptureDeviceNV* ( * PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC)
+ (Display *dpy,
+ int screen,
+ int *nelements);
+typedef void ( * PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC)
+ (Display *dpy,
+ GLXVideoCaptureDeviceNV device);
+
+typedef void ( * PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC)
+ (Display *dpy,
+ GLXVideoCaptureDeviceNV device);
+typedef int ( * PFNGLXBINDVIDEOCAPTUREDEVICENVPROC)
+ (Display *dpy,
+ unsigned int video_capture_slot,
+ GLXVideoCaptureDeviceNV device);
+typedef int ( * PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC)
+ (Display *dpy,
+ GLXVideoCaptureDeviceNV device,
+ int attribute,
+ int *value);
+#endif
+
+#ifndef GLX_NV_copy_image
+#define GLX_NV_copy_image 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXCopyImageSubDataNV (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXCOPYIMAGESUBDATANVPROC) (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/nvogldebug.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/nvogldebug.h
new file mode 100644
index 00000000..10e43b4b
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/nvogldebug.h
@@ -0,0 +1,794 @@
+/****************************************************************************
+**
+** Copyright (C) 2005 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*
+* This file defines the "__NvOglDebugConfig" and NVX_debug_control interfaces.
+* Its purpose is to aid debugging and development by providing a simple way for
+* applications to control global "debug variables" in the driver.
+*/
+
+#ifndef __nvogldebug_h_
+#define __nvogldebug_h_
+
+// An OpenGL implementation can have combinations of internal driver
+// and hardware state that are difficult to achieve by clever use of
+// the extended OpenGL API alone. This extension provides for
+// arbitrary modifications to driver state and behavior at runtime.
+// The exact driver behaviors that can be modified are not specified
+// here, but may be specified by layered extensions.
+
+typedef enum __GLdebugControlFunctionEnum {
+ GL_DEBUG_CONTROL_FUNCTION_IS_SUPPORTED_NVX = 10,
+ GL_DEBUG_CONTROL_FUNCTION_EVICT_OBJECT_NVX = 11,
+ GL_DEBUG_CONTROL_FUNCTION_GET_BUGFIX_PRESENT = 12,
+ GL_DEBUG_CONTROL_FUNCTION_ENABLES = 13,
+ GL_DEBUG_CONTROL_FUNCTION_DETECT_FALLBACK = 14,
+ GL_DEBUG_CONTROL_FUNCTION_CLAW = 15,
+ GL_DEBUG_CONTROL_FUNCTION_GET_STATISTIC = 16,
+ GL_DEBUG_CONTROL_FUNCTION_DO_QUADRO_SLOWDOWN = 17,
+ GL_DEBUG_CONTROL_FUNCTION_BUFFER_OBJECT = 18,
+ GL_DEBUG_CONTROL_FUNCTION_GET_CAPS = 19,
+ GL_DEBUG_CONTROL_FUNCTION_DO_QUADRO_SLOWDOWN_US = 20,
+ GL_DEBUG_CONTROL_FUNCTION_GET_GENERIC_STATISTIC = 21,
+ GL_DEBUG_CONTROL_FUNCTION_INJECT_RC_ERROR = 22,
+ GL_DEBUG_CONTROL_FUNCTION_FORCE_MEMSTRATEGY = 23,
+ GL_DEBUG_CONTROL_FUNCTION_QUERY_APPDB = 24,
+ GL_DEBUG_CONTROL_FUNCTION_SEND_3D_METHOD = 25,
+ GL_DEBUG_CONTROL_FUNCTION_GL_VERSION_3_2 = 26,
+ GL_DEBUG_CONTROL_FUNCTION_SET_CYCLESTATS_STATE = 27,
+ GL_DEBUG_CONTROL_FUNCTION_WWMP = 28,
+ GL_DEBUG_CONTROL_FUNCTION_SET_STATE_OBJECT_GPU = 29,
+ GL_DEBUG_CONTROL_FUNCTION_NVOGTEST_TEST_START = 30,
+ GL_DEBUG_CONTROL_FUNCTION_DUAL_CORE = 31,
+ GL_DEBUG_CONTROL_FUNCTION_THREADING_OPTIMIZATIONS = 32,
+ GL_DEBUG_CONTROL_FUNCTION_NX6PLUSMODE_FORCE_SYNC = 33,
+ GL_DEBUG_CONTROL_FUNCTION_LOOP_ENHANCE = 34,
+ GL_DEBUG_CONTROL_FUNCTION_APICOGL = 35,
+ GL_DEBUG_CONTROL_FUNCTION_GET_GPU_ADDRESS = 36,
+ GL_DEBUG_CONTROL_FUNCTION_EXTRA_CGC_OPTIONS = 37,
+ GL_DEBUG_CONTROL_FUNCTION_ES2_READ_BUFFER_AUTO_STEREO = 38,
+ GL_DEBUG_CONTROL_FUNCTION_ES2_SET_STEREO_PARAMS = 39,
+ GL_DEBUG_CONTROL_FUNCTION_ES2_DISK_CACHE_ENABLE = 40,
+ GL_DEBUG_CONTROL_FUNCTION_INDEX_REORDERING_CONFIG = 41,
+ GL_DEBUG_CONTROL_FUNCTION_INDEX_REORDERING_STATS = 42,
+} __GLdebugControlFunction;
+
+typedef struct __GLdebugControlIsSupportedRec {
+ __GLdebugControlFunction function; // [IN]
+ GLboolean isSupported; // [OUT]
+} __GLdebugControlIsSupported;
+
+typedef struct __GLdebugControlEvictObjectRec {
+ GLuint objType; // [IN]
+ GLuint id; // [IN]
+} __GLdebugControlEvictObject;
+
+typedef enum {
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_393272 = 1, // memhdrs not locked properly on download/eviction
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_LAYERED_CLEAR_PUSHBUFFER_OVERFLOW = 2,
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_395052 = 3, // xfb falls back when raster disabled
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_399272 = 4, // geometry program output size hardware bug
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_391451 = 5, // xfb can't capture layer
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_389986 = 6, // invalid shader uniform array element being updated
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_393139 = 7, // General Vista fixes, especially multi-threading related
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_412399 = 8, // ZCull GL_NEVER bug.
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_369989 = 9, // update internal bindings in PopClientAttribs()
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_424295 = 10, // CopyTexImage path crashed when reading from a source with S8D24 internal buffer but no stencil image bound
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_429286 = 11, // __glGenerateMipmaps copies texture level specification correctly
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_426399 = 12, // ActiveTexture produces GL_INVALID_ENUM, not GL_INVALID_OPERATION for invalid textures
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_431407 = 13, // CopyTexSubImage crashed when the texture was not initialized
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_438799 = 14, // NP2 texture base_level bugs.
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_440068 = 15, // AA pbuffers incorrectly swapped
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_441074 = 16, // GetRenderbufferParameteriv returns 0 for STENCIL_SIZE
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_416094 = 17, // corruption in primitive restart
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_462805 = 18, // wrong memspace for PBO texsubimage
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_468172 = 19, // DSA uniform calls crash with invalid program ID
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_469086 = 20, // VBO pulling of an edge flag array crashes
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_MAP_BUFFER_RANGE = 21, // Assorted MBR bugs from first implementation
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_466357 = 22, // UINT variable modifier is supported
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_455345 = 23, // Texture API target mismatch bug (tested by tex_match nvogtest)
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_306875 = 24, // Erroneous in-band updates to constant buffers (PaBO)
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_480517 = 25, // glMatrixMode returns GL_INVALID_OPERATION when active texture is out of range
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_482923 = 26, // Bufferobject counter normalization bug
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_445457 = 27, // Texture array mipmap generation bug
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_489472 = 28, // Shared VBO data store changes not handled
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_458167 = 29, // Dangling gc->buffers.fbo.zeroObject->dp pointer
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_SHADEBLO_GLSL = 30, // ShadeBLo GLSL support, developed after the extension string was added
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_491100 = 31, // Failing to download missing mip levels when BASE_LEVEL is changed
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_VBUM_CLIENTATTRIB = 32, // Interaction between VBUM and ClientAttribDefault
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_505040 = 33, // Interop counters cleanup
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_502904 = 34, // EXT_texture_swizzle interaction with sRGB
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_502904_VTG = 35, // Vertex/Tess/Geometry program EXT_texture_swizzle interaction with sRGB
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_TEX_MAXSIZE_BDR = 36, // cubemap and array textures don't handle border properly
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_489261 = 37, // Unbind a VBO from a VAO
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_430878 = 38, // Fall out of SFR for a 3D blit
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_MODS_CLIPID_TEST = 39, // driver has a MODS hack to force the use of clip IDs for basic functional testing (GL_DEBUG_CONTROL_ENABLE_MODS_CLIPID_TEST)
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_505040_2 = 40, // changes for state machine of VBO memory allocation strategy (state_init)
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_505040_3 = 41, // changes for state machine of VBO memory allocation strategy (state_vid)
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_LOD_FP_ONLY = 42, // Only allow the LOD instruction in fragment programs
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_522575 = 43, // Keep track of lockedCount in the mutex table for GL_DEBUG_CONTROL_GET_GENERIC_STATISTIC_MUTEX_WORD
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_515687 = 44, // ARB_texture_rg: GL_RED should be legal GL_DEPTH_TEXTURE_MODE
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_EXPMS_VCAA = 45, // VCAA depth surface can now be fetch by explicit_multisample
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_VBUM_MBR = 46, // MapBufferRange orphan+discard doesn't work with vbum/shadeblo
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_MAPPED_BUFFER_CRASH = 47, // Deleting a context while a buffer is mapped will crash
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_MAPPED_BUFFER_CRASH_NV4X = 48, // Deleting a context while a buffer is mapped will crash (on NV4X)
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_NULL_COMPRESSED_TEXIMG = 49, // Allow NULL for glCompressedTexImage*D
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_SHADER_SUBROUTINE_CHANGE = 50, // Change to NV_shader_subroutine API
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_DSA_TOKENHELPER_BUG_560077 = 51,
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_571236 = 52, // Interactions of dualcore, client-state, and deprecation
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_578086 = 53, // Fixes for max attrib fragment programs
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_SEAMLESS_CUBEMAP = 54, // seamless cubemap enum changed
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_GL32_MAX_COMPONENTS_QUERIES = 55, // driver implements new GL3.2 MAX_*_COMPONENTS queries
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_GL32_GETBUFFERPARAMETERI64V = 56, // driver implements missing 64b buffer parameter query
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_576302 = 57,
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_LOADIM_MULTISAMPLE_TEX = 58, // image_load_store converted to use GL3.2 multisample texture syntax
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_VOTE_IMPLEMENTED = 59, // does NV_gpu_program5 code include support for TGALL/TGANY/TGEQ?
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_424330 = 60,
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_ALPHA_CB_FIX = 61, // Set alpha circular buffer size for gf10y
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_GETINTEGER64I_V = 62, // glGetInteger64i_v is present.
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_2DMSARRAY_RENAMED = 63, // Assembly token 2DMSARRAY has been renamed to ARRAY2DMS
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_607673 = 64, // Assembler properly rejects POPA with a CC mask
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_599222 = 65, // Disabled vbo slots are still remembered across context switches.
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_TEXBO_GETTEXLEVELPARAM = 66, // Support gettexlevelparameter on buffer textures
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_618201 = 67, // Subsequent VBO ArrayElement calls with different enables cause crash
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_INT64_DIV_MOD = 68, // Supports 64 bit integer DIV and MOD instructions
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_635764 = 69, // Draw without attrib 0 enabled
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_PIXELPATH_PACKED_PIXELS = 71, // support for packed pixel types in the pixel path, part of ARB_texture_rgb10_a2ui
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BEGINQUERYINDEXED = 72, // XFB3 change from using separate query targets to using indexed query targets
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_INDEXED_TXWAR = 73, // Support texture format WAR on indexed texture
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_SHADER_SUBROUTINE_CHANGE2 = 74,// Further shader subroutine changes
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_FRAGMENT_SMID = 75, // Supports the "fragment.smid" binding for MODS (bug 663067).
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BIND_SAMPLER_UINT = 76, // ARB_sampler_objects' BindSampler implementation accepts a uint (bug 668718).
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_MISC_GL33_GL40_FIXES = 77, // Contains fixes for miscellaneous OpenGL 3.3/4.0 impl. bugs
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_663779 = 78, // Support IPA instruction on FPOS attribute
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_368610 = 79, // Sharing FBOs between display connections and closing owning connection
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_674780 = 80, // Driver does not crash when given negative values for sampler texture indices
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_681447 = 81, // glGetIntegerv() support for GL_COPY_READ_BUFFER and GL_COPY_WRITE_BUFFER
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_SUBROUTINE_QUERY_CRASH = 82, // querying information about compatible subroutines from an unbound program crashes
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_IPA_FOGCOORD = 83, // Support IPA instruction on fogcoord
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_710489 = 84, // DSA + VAO fixes, mostly for glGetVertexArrayIntegeri_vEXT
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_PPO_FIXES = 85, // Deleting a bound user pipeline updates properly and bindprogrampipeline updates active programs
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_676759 = 86, // Linker fixes for uniform arrays with 64-bit components.
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_741073 = 87, // Linker handles Cg bug in handling matrix uniform arrays where only the last element is used.
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_664244 = 88, // Problems with arrays of GLSL subroutine uniforms, crashes on R256 x64
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_744350 = 89, // Problems with FL-predicated subroutine calls
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_751609 = 90, // Crash can occur when doing too many CE operations back-to-back.
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_728033 = 91, // New format support for cuda interop has been added to R270 and above.
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_762723 = 92, // UBO only allows 12 bindings
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_763409 = 93, // Supports DX11 - OGL interop, R270 and above.
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_747891 = 94, // Errors during GLX context creation can cause a hang without this fix.
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_758921 = 95, // ClientAttribDefault resets the primitive restart state.
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_762974 = 96, // Bad interaction of UBO and EXT_bindable_uniform in the same program.
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_779707 = 97, // BPTC textures don't require CompressedSubImage3D on 4 block boundaries
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_746642 = 98, // Addresses returned by VBUM are made virtual to allow modeswitching with XP
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_790472 = 99, // Querying GLSL uniform array names returns "foo[0]" and UBO uniforms return locations of -1
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_792522 = 100, // Fix issue with aa downsample of fbo with mixed dimensions attachments
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_796862 = 101, // Context creation of version 1.0 should result in latest OpenGL version
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_625498 = 102, // Fix dual-core issue with glCallLists (see dlist_hell nvogtest)
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_809142 = 103, // Incorrect restore of the program binary refcount causes memory leak
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_800902 = 104, // X crashes when making current to GLX window whose X window is gone
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_362397 = 105, // DivByZero expection when a Buffer attached to a texbo is resized to less than 1px.
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_826092 = 106, // GL_ARB_pixel_buffer_object: check if GL errors are correctly set
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_822935 = 107, // LoopEnhance nvogtest support
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_857702 = 108, // driver good enough to handle glsl_ils_fmt* tests
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_845118 = 109, // Need to look at read drawable during read fbo validation
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_856656 = 110, // no known compiler exceptions on glsl_ils_misc* (can run test)
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_852161 = 111, // glMaterial doesn't update GLSL material built-in inside dlist
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_860989 = 112, // program tracking bits not updated by glPopAttrib
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_870498 = 113, // If drawbuffer settings do not match FBO attachment causes a crash
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_876641 = 114, // crash binding the same FBO to two threads simultaneously
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_879671 = 115, // drawElementsInstanced might crash if we copy not enabled vertex data
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_906242 = 116, // glFramebufferTexture and friends are not setting a GL error when the <texture> argument is zero
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_909200 = 117, // assembly CBUFFER and BUFFER4 arrays are sized with correct units
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_918415 = 118, // glMakeBufferNonResidentNV doesn't ensure the buffer is resident before doing its business
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_874617 = 119, // Fix for use-after-delete using FBO
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_920825 = 120, // Fix crash on calling glReadPixels with invalid parameters
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_930245 = 121, // Fix crash on calling glGetBufferPointervOES if buffer object name 0 is bound to target
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_930248 = 122, // Fix crash on glCopyTexSubImage3DOES when x or y is negative value
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_930253 = 123, // Fix crash on glDrawBuffersNV when <bufs> is NULL
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_930290 = 124, // call to glEGLImageTargetTexture2DOES when texture target is 0 excutes without error
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_934987 = 125, // Properly round non-antialiased line widths
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_874933 = 126, // LDDM non-CUDA-interop buffers allocated within CUDA reserved address range
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_936396 = 127, // Linux: Damage events are not generated on parents of GL drawables when GL drawable is created after the Damage object
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_882002 = 128, // Fix mip-mapped compressed NPOT texture's edges
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_937411 = 129, // Fix issues with drawElementeInstanced path and usage of vertex attrib divisor
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_940255 = 130, // Fix crash on querying EGL_STEREO_LAYOUT_NVX surface attribute value using eglQuerySurface
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_945327 = 131, // Fixed MT event and thread handle leaks
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_IS_OBJECT = 132, // The IsObject routines behave correct in that they return FALSE until first bind
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_953084 = 133, // Fix texture completeness check for EGLImage creation
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_960878 = 134, // NV_path_rendering is broken when programmable shaders are in use
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_874652 = 135, // [Cg/AR20] Illegit shader compiles without error: Illegit unreferenced function does not fail to compile
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_952196 = 136, // [Cg/AR20] Assert in vertex shader compilation when same attribute is assigned to multiple varyings
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_968228 = 137, // Default state for UNIFORM_BUFFER_{START,SIZE} is fixed to 0, instead of original -1.
+ GL_DEBUG_CONTROL_GET_BUGFIX_PRESENT_BUG_968768 = 138, // Early Z logic is broken for stencil func GL_NEVER
+} __GLdebugControlGetBugfixPresentEnum;
+
+typedef struct __GLdebugControlGetBugfixPresentRec {
+ __GLdebugControlGetBugfixPresentEnum bugfix; // [IN]
+ GLboolean isSupported; // [OUT]
+} __GLdebugControlGetBugfixPresent;
+
+typedef enum {
+ GL_DEBUG_CONTROL_ENABLE_AGGRESSIVE_EVICTION = 1,
+ GL_DEBUG_CONTROL_ENABLE_MODS_CLIPID_TEST = 2,
+ GL_DEBUG_CONTROL_ENABLE_WSPERF_PUSH = 3,
+ GL_DEBUG_CONTROL_ENABLE_WSPERF_POP = 4,
+ GL_DEBUG_CONTROL_ENABLE_WSPERF_REINIT_GC = 5, // Required before changes take affect
+ GL_DEBUG_CONTROL_ENABLE_WS_VARRAY = 6,
+ GL_DEBUG_CONTROL_ENABLE_SDDR = 7,
+ GL_DEBUG_CONTROL_ENABLE_SDSR = 8,
+ GL_DEBUG_CONTROL_ENABLE_LAZY_VBUM = 9,
+ GL_DEBUG_CONTROL_ENABLE_LOOP_ENHANCE = 10,
+ GL_DEBUG_CONTROL_ENABLE_VAB_IMMEDIATE_MODE = 11,
+ GL_DEBUG_CONTROL_ENABLE_VAB_VERTEXARRAY = 12,
+ GL_DEBUG_CONTROL_ENABLE_CLAW = 13,
+} __GLdebugControlEnableEnum;
+
+// may return an error if the enable isn't supported
+typedef struct __GLdebugControlEnablesRec {
+ __GLdebugControlEnableEnum cap; // [IN]
+ GLboolean enable; // [IN]
+ GLboolean success; // [OUT]
+} __GLdebugControlEnables;
+
+typedef enum {
+ GL_DEBUG_CONTROL_DETECT_FALLBACK_SOFTWARE_VALIDATE = 1,
+} __GLdebugControlDetectFallbackType;
+
+typedef struct __GLdebugControlDetectFallbackRec {
+ // If a fallback of the specified type has occurred since the last reset,
+ // this operation returns GL_TRUE in <result>. If <reset> is GL_TRUE, the
+ // fallback flag will be reset.
+ __GLdebugControlDetectFallbackType type; // [IN]
+ GLboolean reset; // [IN]
+ GLboolean result; // [OUT]
+} __GLdebugControlDetectFallback;
+
+typedef enum {
+ GL_DEBUG_CONTROL_DUAL_CORE_CMD_CHECK_POSSIBLE = 1,
+ GL_DEBUG_CONTROL_DUAL_CORE_CMD_CURRENT_MODE,
+ GL_DEBUG_CONTROL_DUAL_CORE_CMD_ENTER,
+ GL_DEBUG_CONTROL_DUAL_CORE_CMD_LEAVE
+} __GLdebugControlDualCoreCmd;
+
+typedef struct __GLdebugControlDualCoreRec {
+ int size; // [IN] size of this struct; the cmd is ignored if there is a size mismatch
+ __GLdebugControlDualCoreCmd cmd; // [IN]
+ GLint arg1; // [IN]
+ GLint result; // [OUT]
+ GLint success; // [OUT]
+} __GLdebugControlDualCore;
+
+
+typedef enum {
+ GL_DEBUG_CONTROL_LE_INIT,
+ GL_DEBUG_CONTROL_LE_GET_LOOP,
+ GL_DEBUG_CONTROL_LE_CHECK_LOOP,
+ GL_DEBUG_CONTROL_LE_RESET_LOOP,
+ GL_DEBUG_CONTROL_LE_DESTROY
+} __GLdebugControlLEcmd;
+
+typedef enum {
+ GL_DEBUG_CONTROL_LE_SUCCESS,
+ GL_DEBUG_CONTROL_LE_LOOP_REPLACED,
+ GL_DEBUG_CONTROL_LE_NO_MORE_AVAILABLE, // indicates no more loops or applicatiosns available
+ GL_DEBUG_CONTROL_LE_FAIL,
+ GL_DEBUG_CONTROL_LE_FAIL_DUE_TO_OGL32,
+ GL_DEBUG_CONTROL_LE_FAIL_STRUCT_MISMATCH,
+} __GLdebugControlLEreturnCodes;
+
+
+typedef struct __GLdebugControlLERec {
+ __GLdebugControlLEcmd cmd; // [IN]
+ int structSize; // [IN]
+ __GLdebugControlLEreturnCodes result; // [OUT]
+ union {
+ struct {
+ int appNumber; // [IN]
+ } init;
+ struct {
+ int loopNumber; // [IN]
+ void *pFunction; // [OUT]
+ GLboolean color; // [OUT]
+ GLboolean texture; // [OUT]
+ GLboolean index; // [OUT]
+ } getLoop;
+ } u;
+} __GLdebugControlLE;
+
+
+typedef struct __GLdebugControlApicOglRec {
+ void (*callbackProcDrawArrays)(void* basePtr, const GLint *first, const GLsizei *count, GLsizei primcount); // [IN]
+} __GLdebugControlApicOgl;
+
+typedef enum {
+ GL_DEBUG_CONTROL_THREADING_OPT_CMD_DISABLE_ALL = 1,
+ GL_DEBUG_CONTROL_THREADING_OPT_CMD_GET_GLSL_CACHE,
+ GL_DEBUG_CONTROL_THREADING_OPT_CMD_SET_GLSL_CACHE,
+ GL_DEBUG_CONTROL_THREADING_OPT_CMD_GET_VIEWPORT_CACHE,
+ GL_DEBUG_CONTROL_THREADING_OPT_CMD_SET_VIEWPORT_CACHE,
+ GL_DEBUG_CONTROL_THREADING_OPT_CMD_GET_MATRIX_CACHE,
+ GL_DEBUG_CONTROL_THREADING_OPT_CMD_SET_MATRIX_CACHE,
+ GL_DEBUG_CONTROL_THREADING_OPT_CMD_GET_GLSTATE_CACHE,
+ GL_DEBUG_CONTROL_THREADING_OPT_CMD_SET_GLSTATE_CACHE,
+ GL_DEBUG_CONTROL_THREADING_OPT_CMD_GET_FB_STATUS_CACHE,
+ GL_DEBUG_CONTROL_THREADING_OPT_CMD_SET_FB_STATUS_CACHE,
+ GL_DEBUG_CONTROL_THREADING_OPT_CMD_ENABLE_ALL = 0x0000FFFF,
+} __GLdebugControlThreadingOptimizationsCmd;
+
+typedef struct __GLdebugControlThreadingOptimizationsRec {
+ int size; // [IN] size of this struct; the cmd is ignored if there is a size mismatch
+ __GLdebugControlThreadingOptimizationsCmd cmd; // [IN]
+ GLint arg1; // [IN]
+ GLint result; // [OUT]
+ GLint success; // [OUT]
+} __GLdebugControlThreadingOptimizations;
+
+typedef enum {
+ GL_DEBUG_CONTROL_CLAW_CMD_RESET = 1,
+ GL_DEBUG_CONTROL_CLAW_CMD_GET_ENABLES,
+ GL_DEBUG_CONTROL_CLAW_CMD_SET_ENABLES_AND_RESET,
+ GL_DEBUG_CONTROL_CLAW_CMD_DISALLOW,
+ GL_DEBUG_CONTROL_CLAW_CMD_SET_OVERRIDE_ENABLES_AND_RESET,
+} __GLdebugControlClawCmd;
+
+typedef struct __GLdebugControlClawRec {
+ int size; // [IN] size of this struct; the cmd is ignored if there is a size mismatch
+ __GLdebugControlClawCmd cmd; // [IN]
+ GLint arg1; // [IN]
+ GLint result; // [OUT]
+ GLint error; // [OUT]
+} __GLdebugControlClaw;
+
+typedef enum {
+ // nvogtest test tagging
+ GL_DEBUG_CONTROL_GET_GENERIC_STATISTIC_TAG_TEST = 0,
+ GL_DEBUG_CONTROL_GET_GENERIC_STATISTIC_MUTEX_WORD = 1,
+} __GLdebugControlGetGenericStatisticType;
+
+typedef struct __GLdebugControlGetGenericStatisticRec {
+ // If a fallback of the specified type has occurred since the last reset,
+ // this operation returns GL_TRUE in <result>. If <reset> is GL_TRUE, the
+ // fallback flag will be reset. If the driver understands the type, <success>
+ // will be set to GL_TRUE, GL_FALSE otherwise.
+ __GLdebugControlGetGenericStatisticType type; // [IN]
+ GLboolean reset; // [IN]
+ GLboolean success; // [OUT]
+ unsigned int result; // [OUT]
+} __GLdebugControlGetGenericStatistic;
+
+typedef enum {
+ // for blits (copypixels, drawpixels, readpixels, pbo teximage, copyteximage),
+ // report which path performed the blit. Also count number of shaders
+ // replaced, and fragment shaders that use constant color rendering.
+ GL_DEBUG_CONTROL_GET_STATISTIC_BLIT_2D = 1,
+ GL_DEBUG_CONTROL_GET_STATISTIC_BLIT_3D = 2,
+ GL_DEBUG_CONTROL_GET_STATISTIC_BLIT_CE = 3,
+ GL_DEBUG_CONTROL_GET_STATISTIC_BLIT_M2M = 4,
+ GL_DEBUG_CONTROL_GET_STATISTIC_SHADER_REPLACEMENT = 5,
+ GL_DEBUG_CONTROL_GET_STATISTIC_CONSTANT_COLOR_RENDERING = 6,
+ GL_DEBUG_CONTROL_GET_STATISTIC_BLIT_3D_PFM = 7, // PixelsFromMemory in 3D class (GK20A+)
+} __GLdebugControlGetStatisticType;
+
+typedef struct __GLdebugControlGetStatisticRec {
+ // If a fallback of the specified type has occurred since the last reset,
+ // this operation returns GL_TRUE in <result>. If <reset> is GL_TRUE, the
+ // fallback flag will be reset.
+ __GLdebugControlGetStatisticType type; // [IN]
+ GLboolean reset; // [IN]
+ unsigned int result; // [OUT]
+} __GLdebugControlGetStatistic;
+
+typedef struct __GLdebugControlDoQuadroSlowdownRec {
+ // Activates a test which will hang if the card is a GeForce.
+ // when used with GL_DEBUG_CONTROL_FUNCTION_DO_QUADRO_SLOWDOWN_US, value used as microseconds
+ // when used with GL_DEBUG_CONTROL_FUNCTION_DO_QUADRO_SLOWDOWN, value used as clock ticks
+ unsigned int value; // [IN]
+} __GLdebugControlDoQuadroSlowdown;
+
+typedef enum {
+ __GL_DEBUG_CONTROL_BUFFER_OBJECT_STATE_INIT,
+ __GL_DEBUG_CONTROL_BUFFER_OBJECT_STATE_STREAM_VID,
+ __GL_DEBUG_CONTROL_BUFFER_OBJECT_STATE_STREAM_SYSHEAP,
+ __GL_DEBUG_CONTROL_BUFFER_OBJECT_STATE_MAP_FOR_READ,
+ __GL_DEBUG_CONTROL_BUFFER_OBJECT_STATE_FALLBACK,
+ __GL_DEBUG_CONTROL_BUFFER_OBJECT_STATE_MIGHT_STALL,
+ __GL_DEBUG_CONTROL_BUFFER_OBJECT_STATE_INTEROP
+} __GLdebugControlBufferObjectState;
+
+typedef enum {
+ __GL_DEBUG_CONTROL_BUFFER_COUNTER_GPU_READ_VTX = 0,
+ __GL_DEBUG_CONTROL_BUFFER_COUNTER_GPU_READ_INDEX,
+ __GL_DEBUG_CONTROL_BUFFER_COUNTER_GPU_READ_BLIT,
+ __GL_DEBUG_CONTROL_BUFFER_COUNTER_CPU_READ,
+ __GL_DEBUG_CONTROL_BUFFER_COUNTER_CPU_WRITE,
+ __GL_DEBUG_CONTROL_BUFFER_COUNTER_GPU_WRITE_BLIT,
+ __GL_DEBUG_CONTROL_BUFFER_COUNTER_USER_MAP_AS_UPDATE,
+ __GL_DEBUG_CONTROL_BUFFER_COUNTER_USER_MAP_AS_READ,
+ __GL_DEBUG_CONTROL_BUFFER_COUNTER_SYNC_UPDATE_STALL,
+ __GL_DEBUG_CONTROL_BUFFER_COUNTER_GPU_WRITE_BLIT_NONCOHERENT,
+ __GL_DEBUG_CONTROL_BUFFER_COUNTER_GPU_HIGH_PRIORITY,
+ __GL_DEBUG_CONTROL_BUFFER_COUNTER_INTEROP_VIDMEM,
+ __GL_DEBUG_CONTROL_BUFFER_COUNTER_INTEROP_SYSMEM,
+ __GL_DEBUG_CONTROL_BUFFER_COUNTER_COUNT
+} __GLdebugControlBufferCounter;
+
+typedef enum {
+ __GL_DEBUG_CONTROL_BUFFER_ALLOC_STRATEGY_INVALID = 0,
+ __GL_DEBUG_CONTROL_BUFFER_ALLOC_STRATEGY_MALLOC,
+ __GL_DEBUG_CONTROL_BUFFER_ALLOC_STRATEGY_SYSHEAP,
+ __GL_DEBUG_CONTROL_BUFFER_ALLOC_STRATEGY_DMA_CACHED,
+ __GL_DEBUG_CONTROL_BUFFER_ALLOC_STRATEGY_DMA_CACHED_NONCOHERENT,
+ __GL_DEBUG_CONTROL_BUFFER_ALLOC_STRATEGY_VID_ONLY,
+ __GL_DEBUG_CONTROL_BUFFER_ALLOC_STRATEGY_VID_PLUS_MALLOC,
+ __GL_DEBUG_CONTROL_BUFFER_ALLOC_STRATEGY_VID_PLUS_SYSHEAP,
+
+ __GL_DEBUG_CONTROL_BUFFER_ALLOC_STRATEGY_ANY_GPU_PREFER_SYSHEAP,
+ __GL_DEBUG_CONTROL_BUFFER_ALLOC_STRATEGY_ANY_GPU_PREFER_VID,
+ __GL_DEBUG_CONTROL_BUFFER_ALLOC_STRATEGY_ANY_GPU_PREFER_CACHED,
+
+ __GL_DEBUG_CONTROL_BUFFER_ALLOC_STRATEGY_COUNT,
+} __GLdebugControlBufferAllocStrategy;
+
+typedef enum {
+ GL_DEBUG_CONTROL_BUFFER_OBJECT_SET_STALLING = 1,
+ GL_DEBUG_CONTROL_BUFFER_OBJECT_GET_STATE = 2,
+ GL_DEBUG_CONTROL_BUFFER_OBJECT_HIDE_STALLING = 3,
+ GL_DEBUG_CONTROL_BUFFER_OBJECT_TAP_COUNTER = 4,
+ GL_DEBUG_CONTROL_BUFFER_OBJECT_SET_COUNTER = 5,
+} __GLdebugControlBufferObjectCmd;
+
+typedef struct __GLdebugControlBufferObjectRec {
+ __GLdebugControlBufferObjectCmd cmd; // [IN]
+ unsigned int bit; // [IN]
+ unsigned int inc; // [IN]
+ GLenum target; // [IN]
+ GLboolean hideStalling; // [IN]
+ unsigned int state; // [OUT]
+} __GLdebugControlBufferObject;
+
+typedef enum {
+ GL_DEBUG_CONTROL_INDEX_REORDERING_CONFIG_READ,
+ GL_DEBUG_CONTROL_INDEX_REORDERING_CONFIG_WRITE,
+} __GLdebugControlIndexReorderingConfigCmd;
+
+typedef struct __GLdebugControlIndexReorderingConfigRec {
+ __GLdebugControlIndexReorderingConfigCmd cmd; // [IN]
+ unsigned int enabled;
+ unsigned int minHitCnt;
+ unsigned int minIndCnt;
+ unsigned int synchronous;
+ unsigned int subranges;
+ float margin;
+ float thresholdACMR;
+ unsigned int ignoreThreshold; //Mostly for testing
+ unsigned int forceReorder; //Mostly for testing
+ unsigned int postTransformCacheSize;
+ unsigned int cacheModel;
+} __GLdebugControlIndexReorderingConfig;
+
+typedef struct __GLdebugControlIndexReorderingStatsRec {
+ unsigned int count;
+} __GLdebugControlIndexReorderingStats;
+
+typedef enum {
+ // Capability types to be returned by GL_DEBUG_CONTROL_FUNCTION_GET_CAPS.
+ // The type of <result> depends on the requested capability. The comment
+ // after the type specifies the return type.
+ GL_DEBUG_CONTROL_GET_CAPS_IS_QUADRO = 1, // Out Type: GLboolean
+ GL_DEBUG_CONTROL_GET_CAPS_IS_FORCED_SYSMEM = 2, // Out Type: GLboolean
+ GL_DEBUG_CONTROL_GET_CAPS_HAS_SHADOW_MAPPING_BUG_280195 = 3, // Out Type: GLboolean
+
+ GL_DEBUG_CONTROL_GET_CAPS_HAS_INDEX_LIMIT = 4, // Out Type: GLboolean
+} __GLdebugControlGetCapsType;
+
+typedef struct __GLdebugControlGetCapsRec {
+ // Returns internal data directly from the driver. <success> is set to
+ // GL_TRUE if the operation was successful.
+ // The type of <result> depends upon the capability that is requested.
+ __GLdebugControlGetCapsType type; // [IN]
+ GLboolean success; // [OUT]
+ void* result; // [OUT]
+} __GLdebugControlGetCaps;
+
+typedef enum {
+ GL_DEBUG_CONTROL_INJECT_RC_ERROR_PARSE_ERROR,
+ GL_DEBUG_CONTROL_INJECT_RC_ERROR_DATA_ERROR,
+} __GLdebugControlInjectRcErrorType;
+
+typedef struct __GLdebugControlInjectRcErrorRec {
+ __GLdebugControlInjectRcErrorType type; // [IN]
+ GLboolean success; // [OUT]
+} __GLdebugControlInjectRcError;
+
+typedef struct __GLdebugControlQueryAppdbRec {
+ GLuint *size; // [IN / OUT]
+ GLchar *data; // [OUT, optional]
+} __GLdebugControlQueryAppdb;
+
+// Sends a 3D subchannel method
+// **DO NOT CALL IN CHECKED IN TESTS**
+typedef struct __GLdebugControlSend3DMethod {
+ GLuint method; // [IN]
+ GLuint data; // [IN]
+} __GLdebugControlSend3DMethod;
+
+typedef struct __GLdebugControlSetCycleStatsState {
+ GLuint stateIndex; // [IN]
+ GLuint stateValue; // [IN]
+} __GLdebugControlSetCycleStatsState;
+
+typedef enum {
+ GL_DEBUG_CONTROL_WWMP_INSTALL_SIGNAL_HANDLER,
+ GL_DEBUG_CONTROL_WWMP_ADD_WRITE_WATCH,
+ GL_DEBUG_CONTROL_WWMP_DISABLE,
+ GL_DEBUG_CONTROL_WWMP_GET_STATE,
+} __GLdebugControlWWMPCmd;
+
+typedef struct __GLdebugControlWWMPRec {
+ __GLdebugControlWWMPCmd cmd; // [IN]
+ union {
+ struct {
+ GLboolean result; // [OUT]
+ void* trackAdr; // [IN]
+ volatile GLintptr **watchAdr; // [OUT]
+ volatile GLintptr *watchValue; // [OUT]
+ void** trackDat; // [OUT]
+ GLboolean *isTracked; // [OUT]
+ } addWriteWatch;
+ struct {
+ GLboolean enabled; // [OUT]
+ int sigactionPending; // [OUT]
+ int sigactionInitialized; // [OUT]
+ }getState;
+ } u;
+} __GLdebugControlWWMP;
+
+typedef struct __GLdebugControlSetStateObjectGPURec {
+ GLuint64EXT handle; // [IN]
+ GLint dynamiccount; // [IN]
+ const GLvoid *dynamicprops; // [IN]
+} __GLdebugControlSetStateObjectGPU;
+
+typedef enum {
+ GL_DEBUG_CONTROL_GET_GPU_ADDRESS_BUFFER_OBJECT = 0,
+} __GLdebugControlGetGPUAddressObjectType;
+
+typedef struct __GLdebugControlGetGPUAddressRec {
+ __GLdebugControlGetGPUAddressObjectType objectType; // [IN]
+ GLenum target; // [IN]
+ GLboolean success; // [OUT]
+ GLuint64EXT address; // [OUT]
+ GLuint64EXT size; // [OUT]
+} __GLdebugControlGetGPUAddress;
+
+typedef struct __GLdebugControlExtraCgcOptionsRec {
+ GLuint argc; // [IN]
+ GLchar **argv; // [IN]
+ GLboolean success; // [OUT]
+} __GLdebugControlExtraCgcOptions;
+
+typedef struct __GLdebugControlNvogtestTestStartRec {
+ GLboolean dcWasRestored; // [OUT]
+} __GLdebugControlNvogtestTestStart;
+
+typedef enum {
+ GL_DEBUG_CONTROL_ES2_LEFT_EYE,
+ GL_DEBUG_CONTROL_ES2_RIGHT_EYE,
+} __GLdebugControlES2StereoEye;
+
+typedef struct __GLdebugControlES2ReadBufferAutoStereoRec {
+ GLuint eye; // [IN]
+ GLenum mode; // [IN]
+} __GLdebugControlES2ReadBufferAutoStereo;
+
+typedef struct __GLdebugControlES2SetStereoParamsRec {
+ GLuint control; // 0 => Stereo Disabled, else Enabled
+ GLuint method; // NvGlStereoMethod
+ GLuint changeSep;
+ float separation;
+ float convergence;
+ float cutoff;
+ float cutoffDir;
+ GLuint screenWidth;
+} __GLdebugControlES2SetStereoParams;
+
+typedef struct __GLdebugControlES2DiskCacheCtrl {
+ GLboolean enable;
+ GLuint numEntries;
+ GLuint numHits;
+ GLboolean deleteCachedFiles;
+ GLboolean blobEnable;
+ GLuint numBlobEntries;
+ GLuint numBlobHits;
+} __GLdebugControlES2DiskCacheCtrl;
+
+struct __GLdebugControlParametersRec
+{
+ __GLdebugControlFunction function;
+
+ // Note: This union is only aligned to 4B. Adding a member with a uint64 in it
+ // will cause it to be aligned to 8B and break compatibility.
+ union
+ {
+ __GLdebugControlIsSupported isSupported;
+ __GLdebugControlEvictObject evictObject;
+ __GLdebugControlGetBugfixPresent getBugfixPresent;
+ __GLdebugControlEnables enables;
+ __GLdebugControlDetectFallback detectFallback;
+ __GLdebugControlClaw claw;
+ __GLdebugControlGetGenericStatistic getGenericStatistic;
+ __GLdebugControlGetStatistic getStatistic;
+ __GLdebugControlDoQuadroSlowdown slowdown;
+ __GLdebugControlBufferObject bufObject;
+ __GLdebugControlGetCaps getCaps;
+ __GLdebugControlInjectRcError injectRcError;
+ __GLdebugControlQueryAppdb queryAppdb;
+ __GLdebugControlSend3DMethod send3DMethod;
+ __GLdebugControlSetCycleStatsState setCycleStatsState;
+ __GLdebugControlWWMP wwmp;
+ // Add new entries to u2 instead of u.
+ } u;
+
+ // This union is 8B-aligned.
+ union
+ {
+ GLuint64EXT x; // force 8B alignment.
+ __GLdebugControlSetStateObjectGPU setStateObjectGPU;
+ __GLdebugControlThreadingOptimizations threadOptimizations;
+ __GLdebugControlDualCore dualCore;
+ __GLdebugControlLE loopEnhance;
+ __GLdebugControlApicOgl apicOgl;
+ __GLdebugControlGetGPUAddress getGPUAddress;
+ __GLdebugControlExtraCgcOptions extraCgcOptions;
+ __GLdebugControlNvogtestTestStart nvogtestTestStart;
+ __GLdebugControlES2ReadBufferAutoStereo readBufferAutoStereo;
+ __GLdebugControlES2SetStereoParams setStereoParams;
+ __GLdebugControlES2DiskCacheCtrl diskCacheCtrl;
+ __GLdebugControlIndexReorderingConfig ibrCfg;
+ __GLdebugControlIndexReorderingStats ibrStats;
+ } u2;
+};
+
+
+// All implementations that export this entrypoint support the function
+// IS_SUPPORTED. Whether or not other functions are supported is
+// implementation defined.
+//
+// The correct usage is as follows. Let's say you want to use the function
+// EVICT_OBJECT:
+//
+// 1) glDebugControlNVX( {IS_SUPPORTED, EVICT_OBJECT, &result} );
+// 2) stop if result is FALSE
+// 3) glDebugControlNVX( {EVICT_OBJECT, objType, id} );
+//
+#define PROC_DebugControlNVX gl6813513874685413
+
+
+// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+//
+// The remainder of this file is the legacy interface. It is still used by
+// nvogtest and nvapi. Eventually uses of the old interface will be ported to
+// the new interface, at which time the old interface will be removed.
+//
+// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+// bump this every time you change the list of recognized <pname> values.
+#define __NVOGLDEBUG_ENUM_VERSION 3
+
+// The following values may be passed as <pname> to
+// __NvOglDebugSeti and __NvOglDebugGeti.
+//
+// __NVOGLDEBUG_USER_1 and __NVOGLDEBUG_USER_2 should never be used in
+// checked-in code. Their purpose is for quick hacks while debugging or
+// developing new code. By including them here a priori, an engineer can
+// quickly use them without modifying a key .h file that causes recompilation
+// of the world.
+//
+// __NVOGLDEBUG_NVTRACE_LEVEL refers to the nvTraceLevel.
+//
+#define __NVOGLDEBUG_USER_1 0x8C50
+#define __NVOGLDEBUG_USER_2 0x8C51
+#define __NVOGLDEBUG_NVTRACE_LEVEL 0x8C52
+#define __NVOGLDEBUG_NVTRACE_OPTIONS 0x8C53
+#define __NVOGLDEBUG_VERSION 0x8C54
+#define __NVOGLDEBUG_TAG_TEST 0x8C55
+
+#define __NVOGLDEBUG_NVEXPERT_LEVEL 0x8C56
+#define __NVOGLDEBUG_NVEXPERT_CALLBACK 0x8C57
+#define __NVOGLDEBUG_NVEXPERT_MASK0 0x8C58
+
+#define __NVOGLDEBUG_TEMP0 0x8C59
+#define __NVOGLDEBUG_TEMP1 0x8C5A
+#define __NVOGLDEBUG_TEMP2 0x8C5B
+#define __NVOGLDEBUG_TEMP3 0x8C5C
+#define __NVOGLDEBUG_TEMP4 0x8C5D
+#define __NVOGLDEBUG_INSTRUMENTATION_ENABLED 0x8C5E
+#define __NVOGLDEBUG_OPTIONS 0x8C5F
+
+#define __NVOGLDEBUG_NVTRACE_MASK0 0x8C60
+#define __NVOGLDEBUG_NVTRACE_MASK1 0x8C61
+#define __NVOGLDEBUG_NVTRACE_MASK2 0x8C62
+#define __NVOGLDEBUG_NVTRACE_MASK3 0x8C63
+#define __NVOGLDEBUG_NVTRACE_MASK4 0x8C64
+#define __NVOGLDEBUG_NVTRACE_MASK5 0x8C65
+#define __NVOGLDEBUG_NVTRACE_MASK6 0x8C66
+#define __NVOGLDEBUG_NVTRACE_MASK7 0x8C67
+#define __NVOGLDEBUG_NVTRACE_MASK8 0x8C68
+#define __NVOGLDEBUG_NVTRACE_MASK9 0x8C69
+#define __NVOGLDEBUG_NVTRACE_MASK10 0x8C6A
+#define __NVOGLDEBUG_NVTRACE_MASK11 0x8C6B
+#define __NVOGLDEBUG_NVTRACE_MASK12 0x8C6C
+#define __NVOGLDEBUG_NVTRACE_MASK13 0x8C6D
+#define __NVOGLDEBUG_NVTRACE_MASK14 0x8C6E
+#define __NVOGLDEBUG_NVTRACE_MASK15 0x8C6F
+
+
+// Used to set the value of a debug variable. Returns the old value.
+// XXX deprecated, do not use
+int GLAPIENTRY __NvOglDebugSeti (unsigned int pname, int param);
+typedef int (GLAPIENTRY * PFN__NVOGLDEBUGSETIPROC) (unsigned int pname, int param);
+
+// Used to get the value of a debug variable.
+// XXX deprecated, do not use
+int GLAPIENTRY __NvOglDebugGeti (unsigned int pname);
+typedef int (GLAPIENTRY * PFN__NVOGLDEBUGGETIPROC) (unsigned int pname);
+
+// Used to set the value of a debug variable. Returns the old value.
+// XXX deprecated, do not use
+void* GLAPIENTRY __NvOglDebugSetv (unsigned int pname, void* param);
+typedef void* (GLAPIENTRY * PFN__NVOGLDEBUGSETVPROC) (unsigned int pname, void* param);
+
+// Used to get the value of a debug variable.
+// XXX deprecated, do not use
+void* GLAPIENTRY __NvOglDebugGetv (unsigned int pname);
+typedef void* (GLAPIENTRY * PFN__NVOGLDEBUGGETVPROC) (unsigned int pname);
+
+// keep this in sync with the ogl driver!!!
+#define OGL_PERF_STRAT_CLAW_ENABLED 0x00000001
+#define OGL_PERF_STRAT_CLAW_IGNORE_TRASH 0x00000040
+#define OGL_PERF_STRAT_CLAW_FORCE_EXECUTE_BLOCK 0x00000200
+#define OGL_PERF_STRAT_CLAW_FORCE_EXECUTE_PIKACHOU 0x00000400
+#define OGL_PERF_STRAT_CLAW_PIXEL_ACCURATE 0x00008000
+
+#if defined(QT3DS_MACINTOSH_OSX)
+
+// Used to emulate the debug control API via gldSetInteger. Values of 5000 or greater
+// are reserved for internal driver use.
+enum GLDVendorIntegerParameter
+{
+ GLD_NVIDIA_DEBUG_CONTROL = 5000,
+};
+
+#endif
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/wglew.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/wglew.h
new file mode 100644
index 00000000..05f054fc
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/wglew.h
@@ -0,0 +1,1363 @@
+/*
+** The OpenGL Extension Wrangler Library
+** Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
+** Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
+** Copyright (C) 2002, Lev Povalahev
+** All rights reserved.
+**
+** Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are met:
+**
+** * Redistributions of source code must retain the above copyright notice,
+** this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright notice,
+** this list of conditions and the following disclaimer in the documentation
+** and/or other materials provided with the distribution.
+** * The name of the author may be used to endorse or promote products
+** derived from this software without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+** THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+** Copyright (c) 2007 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+#ifndef __wglew_h__
+#define __wglew_h__
+#define __WGLEW_H__
+
+#ifdef __wglext_h_
+#error wglext.h included before wglew.h
+#endif
+
+#define __wglext_h_
+
+#if !defined(WINAPI)
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN 1
+# endif
+#include <windows.h>
+# undef WIN32_LEAN_AND_MEAN
+#endif
+
+/*
+ * GLEW_STATIC needs to be set when using the static version.
+ * GLEW_BUILD is set when building the DLL version.
+ */
+#ifdef GLEW_STATIC
+# define GLEWAPI extern
+#else
+# ifdef GLEW_BUILD
+# define GLEWAPI extern __declspec(dllexport)
+# else
+# define GLEWAPI extern __declspec(dllimport)
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* -------------------------- WGL_3DFX_multisample ------------------------- */
+
+#ifndef WGL_3DFX_multisample
+#define WGL_3DFX_multisample 1
+
+#define WGL_SAMPLE_BUFFERS_3DFX 0x2060
+#define WGL_SAMPLES_3DFX 0x2061
+
+#define WGLEW_3DFX_multisample WGLEW_GET_VAR(__WGLEW_3DFX_multisample)
+
+#endif /* WGL_3DFX_multisample */
+
+/* ------------------------- WGL_3DL_stereo_control ------------------------ */
+
+#ifndef WGL_3DL_stereo_control
+#define WGL_3DL_stereo_control 1
+
+#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055
+#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056
+#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057
+#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058
+
+typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState);
+
+#define wglSetStereoEmitterState3DL WGLEW_GET_FUN(__wglewSetStereoEmitterState3DL)
+
+#define WGLEW_3DL_stereo_control WGLEW_GET_VAR(__WGLEW_3DL_stereo_control)
+
+#endif /* WGL_3DL_stereo_control */
+
+/* ------------------------ WGL_AMD_gpu_association ------------------------ */
+
+#ifndef WGL_AMD_gpu_association
+#define WGL_AMD_gpu_association 1
+
+#define WGL_GPU_VENDOR_AMD 0x1F00
+#define WGL_GPU_RENDERER_STRING_AMD 0x1F01
+#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02
+#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2
+#define WGL_GPU_RAM_AMD 0x21A3
+#define WGL_GPU_CLOCK_AMD 0x21A4
+#define WGL_GPU_NUM_PIPES_AMD 0x21A5
+#define WGL_GPU_NUM_SIMD_AMD 0x21A6
+#define WGL_GPU_NUM_RB_AMD 0x21A7
+#define WGL_GPU_NUM_SPI_AMD 0x21A8
+
+typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id);
+typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int* attribList);
+typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc);
+typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc);
+typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void);
+typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT* ids);
+typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, INT property, GLenum dataType, UINT size, void* data);
+typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc);
+
+#define wglBlitContextFramebufferAMD WGLEW_GET_FUN(__wglewBlitContextFramebufferAMD)
+#define wglCreateAssociatedContextAMD WGLEW_GET_FUN(__wglewCreateAssociatedContextAMD)
+#define wglCreateAssociatedContextAttribsAMD WGLEW_GET_FUN(__wglewCreateAssociatedContextAttribsAMD)
+#define wglDeleteAssociatedContextAMD WGLEW_GET_FUN(__wglewDeleteAssociatedContextAMD)
+#define wglGetContextGPUIDAMD WGLEW_GET_FUN(__wglewGetContextGPUIDAMD)
+#define wglGetCurrentAssociatedContextAMD WGLEW_GET_FUN(__wglewGetCurrentAssociatedContextAMD)
+#define wglGetGPUIDsAMD WGLEW_GET_FUN(__wglewGetGPUIDsAMD)
+#define wglGetGPUInfoAMD WGLEW_GET_FUN(__wglewGetGPUInfoAMD)
+#define wglMakeAssociatedContextCurrentAMD WGLEW_GET_FUN(__wglewMakeAssociatedContextCurrentAMD)
+
+#define WGLEW_AMD_gpu_association WGLEW_GET_VAR(__WGLEW_AMD_gpu_association)
+
+#endif /* WGL_AMD_gpu_association */
+
+/* ------------------------- WGL_ARB_buffer_region ------------------------- */
+
+#ifndef WGL_ARB_buffer_region
+#define WGL_ARB_buffer_region 1
+
+#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001
+#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002
+#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004
+#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008
+
+typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType);
+typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion);
+typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
+typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height);
+
+#define wglCreateBufferRegionARB WGLEW_GET_FUN(__wglewCreateBufferRegionARB)
+#define wglDeleteBufferRegionARB WGLEW_GET_FUN(__wglewDeleteBufferRegionARB)
+#define wglRestoreBufferRegionARB WGLEW_GET_FUN(__wglewRestoreBufferRegionARB)
+#define wglSaveBufferRegionARB WGLEW_GET_FUN(__wglewSaveBufferRegionARB)
+
+#define WGLEW_ARB_buffer_region WGLEW_GET_VAR(__WGLEW_ARB_buffer_region)
+
+#endif /* WGL_ARB_buffer_region */
+
+/* ------------------------- WGL_ARB_create_context ------------------------ */
+
+#ifndef WGL_ARB_create_context
+#define WGL_ARB_create_context 1
+
+#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001
+#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002
+#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
+#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092
+#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093
+#define WGL_CONTEXT_FLAGS_ARB 0x2094
+#define ERROR_INVALID_VERSION_ARB 0x2095
+#define ERROR_INVALID_PROFILE_ARB 0x2096
+
+typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int* attribList);
+
+#define wglCreateContextAttribsARB WGLEW_GET_FUN(__wglewCreateContextAttribsARB)
+
+#define WGLEW_ARB_create_context WGLEW_GET_VAR(__WGLEW_ARB_create_context)
+
+#endif /* WGL_ARB_create_context */
+
+/* --------------------- WGL_ARB_create_context_profile -------------------- */
+
+#ifndef WGL_ARB_create_context_profile
+#define WGL_ARB_create_context_profile 1
+
+#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
+#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
+#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126
+
+#define WGLEW_ARB_create_context_profile WGLEW_GET_VAR(__WGLEW_ARB_create_context_profile)
+
+#endif /* WGL_ARB_create_context_profile */
+
+/* ------------------- WGL_ARB_create_context_robustness ------------------- */
+
+#ifndef WGL_ARB_create_context_robustness
+#define WGL_ARB_create_context_robustness 1
+
+#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
+#define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252
+#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define WGL_NO_RESET_NOTIFICATION_ARB 0x8261
+
+#define WGLEW_ARB_create_context_robustness WGLEW_GET_VAR(__WGLEW_ARB_create_context_robustness)
+
+#endif /* WGL_ARB_create_context_robustness */
+
+/* ----------------------- WGL_ARB_extensions_string ----------------------- */
+
+#ifndef WGL_ARB_extensions_string
+#define WGL_ARB_extensions_string 1
+
+typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
+
+#define wglGetExtensionsStringARB WGLEW_GET_FUN(__wglewGetExtensionsStringARB)
+
+#define WGLEW_ARB_extensions_string WGLEW_GET_VAR(__WGLEW_ARB_extensions_string)
+
+#endif /* WGL_ARB_extensions_string */
+
+/* ------------------------ WGL_ARB_framebuffer_sRGB ----------------------- */
+
+#ifndef WGL_ARB_framebuffer_sRGB
+#define WGL_ARB_framebuffer_sRGB 1
+
+#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9
+
+#define WGLEW_ARB_framebuffer_sRGB WGLEW_GET_VAR(__WGLEW_ARB_framebuffer_sRGB)
+
+#endif /* WGL_ARB_framebuffer_sRGB */
+
+/* ----------------------- WGL_ARB_make_current_read ----------------------- */
+
+#ifndef WGL_ARB_make_current_read
+#define WGL_ARB_make_current_read 1
+
+#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043
+#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054
+
+typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (VOID);
+typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+
+#define wglGetCurrentReadDCARB WGLEW_GET_FUN(__wglewGetCurrentReadDCARB)
+#define wglMakeContextCurrentARB WGLEW_GET_FUN(__wglewMakeContextCurrentARB)
+
+#define WGLEW_ARB_make_current_read WGLEW_GET_VAR(__WGLEW_ARB_make_current_read)
+
+#endif /* WGL_ARB_make_current_read */
+
+/* -------------------------- WGL_ARB_multisample -------------------------- */
+
+#ifndef WGL_ARB_multisample
+#define WGL_ARB_multisample 1
+
+#define WGL_SAMPLE_BUFFERS_ARB 0x2041
+#define WGL_SAMPLES_ARB 0x2042
+
+#define WGLEW_ARB_multisample WGLEW_GET_VAR(__WGLEW_ARB_multisample)
+
+#endif /* WGL_ARB_multisample */
+
+/* ---------------------------- WGL_ARB_pbuffer ---------------------------- */
+
+#ifndef WGL_ARB_pbuffer
+#define WGL_ARB_pbuffer 1
+
+#define WGL_DRAW_TO_PBUFFER_ARB 0x202D
+#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E
+#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030
+#define WGL_PBUFFER_LARGEST_ARB 0x2033
+#define WGL_PBUFFER_WIDTH_ARB 0x2034
+#define WGL_PBUFFER_HEIGHT_ARB 0x2035
+#define WGL_PBUFFER_LOST_ARB 0x2036
+
+DECLARE_HANDLE(HPBUFFERARB);
+
+typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList);
+typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer);
+typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer);
+typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int* piValue);
+typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC);
+
+#define wglCreatePbufferARB WGLEW_GET_FUN(__wglewCreatePbufferARB)
+#define wglDestroyPbufferARB WGLEW_GET_FUN(__wglewDestroyPbufferARB)
+#define wglGetPbufferDCARB WGLEW_GET_FUN(__wglewGetPbufferDCARB)
+#define wglQueryPbufferARB WGLEW_GET_FUN(__wglewQueryPbufferARB)
+#define wglReleasePbufferDCARB WGLEW_GET_FUN(__wglewReleasePbufferDCARB)
+
+#define WGLEW_ARB_pbuffer WGLEW_GET_VAR(__WGLEW_ARB_pbuffer)
+
+#endif /* WGL_ARB_pbuffer */
+
+/* -------------------------- WGL_ARB_pixel_format ------------------------- */
+
+#ifndef WGL_ARB_pixel_format
+#define WGL_ARB_pixel_format 1
+
+#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000
+#define WGL_DRAW_TO_WINDOW_ARB 0x2001
+#define WGL_DRAW_TO_BITMAP_ARB 0x2002
+#define WGL_ACCELERATION_ARB 0x2003
+#define WGL_NEED_PALETTE_ARB 0x2004
+#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005
+#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006
+#define WGL_SWAP_METHOD_ARB 0x2007
+#define WGL_NUMBER_OVERLAYS_ARB 0x2008
+#define WGL_NUMBER_UNDERLAYS_ARB 0x2009
+#define WGL_TRANSPARENT_ARB 0x200A
+#define WGL_SHARE_DEPTH_ARB 0x200C
+#define WGL_SHARE_STENCIL_ARB 0x200D
+#define WGL_SHARE_ACCUM_ARB 0x200E
+#define WGL_SUPPORT_GDI_ARB 0x200F
+#define WGL_SUPPORT_OPENGL_ARB 0x2010
+#define WGL_DOUBLE_BUFFER_ARB 0x2011
+#define WGL_STEREO_ARB 0x2012
+#define WGL_PIXEL_TYPE_ARB 0x2013
+#define WGL_COLOR_BITS_ARB 0x2014
+#define WGL_RED_BITS_ARB 0x2015
+#define WGL_RED_SHIFT_ARB 0x2016
+#define WGL_GREEN_BITS_ARB 0x2017
+#define WGL_GREEN_SHIFT_ARB 0x2018
+#define WGL_BLUE_BITS_ARB 0x2019
+#define WGL_BLUE_SHIFT_ARB 0x201A
+#define WGL_ALPHA_BITS_ARB 0x201B
+#define WGL_ALPHA_SHIFT_ARB 0x201C
+#define WGL_ACCUM_BITS_ARB 0x201D
+#define WGL_ACCUM_RED_BITS_ARB 0x201E
+#define WGL_ACCUM_GREEN_BITS_ARB 0x201F
+#define WGL_ACCUM_BLUE_BITS_ARB 0x2020
+#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021
+#define WGL_DEPTH_BITS_ARB 0x2022
+#define WGL_STENCIL_BITS_ARB 0x2023
+#define WGL_AUX_BUFFERS_ARB 0x2024
+#define WGL_NO_ACCELERATION_ARB 0x2025
+#define WGL_GENERIC_ACCELERATION_ARB 0x2026
+#define WGL_FULL_ACCELERATION_ARB 0x2027
+#define WGL_SWAP_EXCHANGE_ARB 0x2028
+#define WGL_SWAP_COPY_ARB 0x2029
+#define WGL_SWAP_UNDEFINED_ARB 0x202A
+#define WGL_TYPE_RGBA_ARB 0x202B
+#define WGL_TYPE_COLORINDEX_ARB 0x202C
+#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037
+#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
+#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
+#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A
+#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B
+
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, int *piValues);
+
+#define wglChoosePixelFormatARB WGLEW_GET_FUN(__wglewChoosePixelFormatARB)
+#define wglGetPixelFormatAttribfvARB WGLEW_GET_FUN(__wglewGetPixelFormatAttribfvARB)
+#define wglGetPixelFormatAttribivARB WGLEW_GET_FUN(__wglewGetPixelFormatAttribivARB)
+
+#define WGLEW_ARB_pixel_format WGLEW_GET_VAR(__WGLEW_ARB_pixel_format)
+
+#endif /* WGL_ARB_pixel_format */
+
+/* ----------------------- WGL_ARB_pixel_format_float ---------------------- */
+
+#ifndef WGL_ARB_pixel_format_float
+#define WGL_ARB_pixel_format_float 1
+
+#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0
+
+#define WGLEW_ARB_pixel_format_float WGLEW_GET_VAR(__WGLEW_ARB_pixel_format_float)
+
+#endif /* WGL_ARB_pixel_format_float */
+
+/* ------------------------- WGL_ARB_render_texture ------------------------ */
+
+#ifndef WGL_ARB_render_texture
+#define WGL_ARB_render_texture 1
+
+#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070
+#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071
+#define WGL_TEXTURE_FORMAT_ARB 0x2072
+#define WGL_TEXTURE_TARGET_ARB 0x2073
+#define WGL_MIPMAP_TEXTURE_ARB 0x2074
+#define WGL_TEXTURE_RGB_ARB 0x2075
+#define WGL_TEXTURE_RGBA_ARB 0x2076
+#define WGL_NO_TEXTURE_ARB 0x2077
+#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078
+#define WGL_TEXTURE_1D_ARB 0x2079
+#define WGL_TEXTURE_2D_ARB 0x207A
+#define WGL_MIPMAP_LEVEL_ARB 0x207B
+#define WGL_CUBE_MAP_FACE_ARB 0x207C
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082
+#define WGL_FRONT_LEFT_ARB 0x2083
+#define WGL_FRONT_RIGHT_ARB 0x2084
+#define WGL_BACK_LEFT_ARB 0x2085
+#define WGL_BACK_RIGHT_ARB 0x2086
+#define WGL_AUX0_ARB 0x2087
+#define WGL_AUX1_ARB 0x2088
+#define WGL_AUX2_ARB 0x2089
+#define WGL_AUX3_ARB 0x208A
+#define WGL_AUX4_ARB 0x208B
+#define WGL_AUX5_ARB 0x208C
+#define WGL_AUX6_ARB 0x208D
+#define WGL_AUX7_ARB 0x208E
+#define WGL_AUX8_ARB 0x208F
+#define WGL_AUX9_ARB 0x2090
+
+typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int* piAttribList);
+
+#define wglBindTexImageARB WGLEW_GET_FUN(__wglewBindTexImageARB)
+#define wglReleaseTexImageARB WGLEW_GET_FUN(__wglewReleaseTexImageARB)
+#define wglSetPbufferAttribARB WGLEW_GET_FUN(__wglewSetPbufferAttribARB)
+
+#define WGLEW_ARB_render_texture WGLEW_GET_VAR(__WGLEW_ARB_render_texture)
+
+#endif /* WGL_ARB_render_texture */
+
+/* ----------------------- WGL_ATI_pixel_format_float ---------------------- */
+
+#ifndef WGL_ATI_pixel_format_float
+#define WGL_ATI_pixel_format_float 1
+
+#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0
+#define GL_RGBA_FLOAT_MODE_ATI 0x8820
+#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835
+
+#define WGLEW_ATI_pixel_format_float WGLEW_GET_VAR(__WGLEW_ATI_pixel_format_float)
+
+#endif /* WGL_ATI_pixel_format_float */
+
+/* -------------------- WGL_ATI_render_texture_rectangle ------------------- */
+
+#ifndef WGL_ATI_render_texture_rectangle
+#define WGL_ATI_render_texture_rectangle 1
+
+#define WGL_TEXTURE_RECTANGLE_ATI 0x21A5
+
+#define WGLEW_ATI_render_texture_rectangle WGLEW_GET_VAR(__WGLEW_ATI_render_texture_rectangle)
+
+#endif /* WGL_ATI_render_texture_rectangle */
+
+/* ------------------- WGL_EXT_create_context_es2_profile ------------------ */
+
+#ifndef WGL_EXT_create_context_es2_profile
+#define WGL_EXT_create_context_es2_profile 1
+
+#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004
+
+#define WGLEW_EXT_create_context_es2_profile WGLEW_GET_VAR(__WGLEW_EXT_create_context_es2_profile)
+
+#endif /* WGL_EXT_create_context_es2_profile */
+
+/* -------------------------- WGL_EXT_depth_float -------------------------- */
+
+#ifndef WGL_EXT_depth_float
+#define WGL_EXT_depth_float 1
+
+#define WGL_DEPTH_FLOAT_EXT 0x2040
+
+#define WGLEW_EXT_depth_float WGLEW_GET_VAR(__WGLEW_EXT_depth_float)
+
+#endif /* WGL_EXT_depth_float */
+
+/* ---------------------- WGL_EXT_display_color_table ---------------------- */
+
+#ifndef WGL_EXT_display_color_table
+#define WGL_EXT_display_color_table 1
+
+typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef void (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (GLushort* table, GLuint length);
+
+#define wglBindDisplayColorTableEXT WGLEW_GET_FUN(__wglewBindDisplayColorTableEXT)
+#define wglCreateDisplayColorTableEXT WGLEW_GET_FUN(__wglewCreateDisplayColorTableEXT)
+#define wglDestroyDisplayColorTableEXT WGLEW_GET_FUN(__wglewDestroyDisplayColorTableEXT)
+#define wglLoadDisplayColorTableEXT WGLEW_GET_FUN(__wglewLoadDisplayColorTableEXT)
+
+#define WGLEW_EXT_display_color_table WGLEW_GET_VAR(__WGLEW_EXT_display_color_table)
+
+#endif /* WGL_EXT_display_color_table */
+
+/* ----------------------- WGL_EXT_extensions_string ----------------------- */
+
+#ifndef WGL_EXT_extensions_string
+#define WGL_EXT_extensions_string 1
+
+typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void);
+
+#define wglGetExtensionsStringEXT WGLEW_GET_FUN(__wglewGetExtensionsStringEXT)
+
+#define WGLEW_EXT_extensions_string WGLEW_GET_VAR(__WGLEW_EXT_extensions_string)
+
+#endif /* WGL_EXT_extensions_string */
+
+/* ------------------------ WGL_EXT_framebuffer_sRGB ----------------------- */
+
+#ifndef WGL_EXT_framebuffer_sRGB
+#define WGL_EXT_framebuffer_sRGB 1
+
+#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9
+
+#define WGLEW_EXT_framebuffer_sRGB WGLEW_GET_VAR(__WGLEW_EXT_framebuffer_sRGB)
+
+#endif /* WGL_EXT_framebuffer_sRGB */
+
+/* ----------------------- WGL_EXT_make_current_read ----------------------- */
+
+#ifndef WGL_EXT_make_current_read
+#define WGL_EXT_make_current_read 1
+
+#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043
+
+typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (VOID);
+typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+
+#define wglGetCurrentReadDCEXT WGLEW_GET_FUN(__wglewGetCurrentReadDCEXT)
+#define wglMakeContextCurrentEXT WGLEW_GET_FUN(__wglewMakeContextCurrentEXT)
+
+#define WGLEW_EXT_make_current_read WGLEW_GET_VAR(__WGLEW_EXT_make_current_read)
+
+#endif /* WGL_EXT_make_current_read */
+
+/* -------------------------- WGL_EXT_multisample -------------------------- */
+
+#ifndef WGL_EXT_multisample
+#define WGL_EXT_multisample 1
+
+#define WGL_SAMPLE_BUFFERS_EXT 0x2041
+#define WGL_SAMPLES_EXT 0x2042
+
+#define WGLEW_EXT_multisample WGLEW_GET_VAR(__WGLEW_EXT_multisample)
+
+#endif /* WGL_EXT_multisample */
+
+/* ---------------------------- WGL_EXT_pbuffer ---------------------------- */
+
+#ifndef WGL_EXT_pbuffer
+#define WGL_EXT_pbuffer 1
+
+#define WGL_DRAW_TO_PBUFFER_EXT 0x202D
+#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E
+#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030
+#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031
+#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032
+#define WGL_PBUFFER_LARGEST_EXT 0x2033
+#define WGL_PBUFFER_WIDTH_EXT 0x2034
+#define WGL_PBUFFER_HEIGHT_EXT 0x2035
+
+DECLARE_HANDLE(HPBUFFEREXT);
+
+typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList);
+typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer);
+typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer);
+typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int* piValue);
+typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC);
+
+#define wglCreatePbufferEXT WGLEW_GET_FUN(__wglewCreatePbufferEXT)
+#define wglDestroyPbufferEXT WGLEW_GET_FUN(__wglewDestroyPbufferEXT)
+#define wglGetPbufferDCEXT WGLEW_GET_FUN(__wglewGetPbufferDCEXT)
+#define wglQueryPbufferEXT WGLEW_GET_FUN(__wglewQueryPbufferEXT)
+#define wglReleasePbufferDCEXT WGLEW_GET_FUN(__wglewReleasePbufferDCEXT)
+
+#define WGLEW_EXT_pbuffer WGLEW_GET_VAR(__WGLEW_EXT_pbuffer)
+
+#endif /* WGL_EXT_pbuffer */
+
+/* -------------------------- WGL_EXT_pixel_format ------------------------- */
+
+#ifndef WGL_EXT_pixel_format
+#define WGL_EXT_pixel_format 1
+
+#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000
+#define WGL_DRAW_TO_WINDOW_EXT 0x2001
+#define WGL_DRAW_TO_BITMAP_EXT 0x2002
+#define WGL_ACCELERATION_EXT 0x2003
+#define WGL_NEED_PALETTE_EXT 0x2004
+#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005
+#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006
+#define WGL_SWAP_METHOD_EXT 0x2007
+#define WGL_NUMBER_OVERLAYS_EXT 0x2008
+#define WGL_NUMBER_UNDERLAYS_EXT 0x2009
+#define WGL_TRANSPARENT_EXT 0x200A
+#define WGL_TRANSPARENT_VALUE_EXT 0x200B
+#define WGL_SHARE_DEPTH_EXT 0x200C
+#define WGL_SHARE_STENCIL_EXT 0x200D
+#define WGL_SHARE_ACCUM_EXT 0x200E
+#define WGL_SUPPORT_GDI_EXT 0x200F
+#define WGL_SUPPORT_OPENGL_EXT 0x2010
+#define WGL_DOUBLE_BUFFER_EXT 0x2011
+#define WGL_STEREO_EXT 0x2012
+#define WGL_PIXEL_TYPE_EXT 0x2013
+#define WGL_COLOR_BITS_EXT 0x2014
+#define WGL_RED_BITS_EXT 0x2015
+#define WGL_RED_SHIFT_EXT 0x2016
+#define WGL_GREEN_BITS_EXT 0x2017
+#define WGL_GREEN_SHIFT_EXT 0x2018
+#define WGL_BLUE_BITS_EXT 0x2019
+#define WGL_BLUE_SHIFT_EXT 0x201A
+#define WGL_ALPHA_BITS_EXT 0x201B
+#define WGL_ALPHA_SHIFT_EXT 0x201C
+#define WGL_ACCUM_BITS_EXT 0x201D
+#define WGL_ACCUM_RED_BITS_EXT 0x201E
+#define WGL_ACCUM_GREEN_BITS_EXT 0x201F
+#define WGL_ACCUM_BLUE_BITS_EXT 0x2020
+#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021
+#define WGL_DEPTH_BITS_EXT 0x2022
+#define WGL_STENCIL_BITS_EXT 0x2023
+#define WGL_AUX_BUFFERS_EXT 0x2024
+#define WGL_NO_ACCELERATION_EXT 0x2025
+#define WGL_GENERIC_ACCELERATION_EXT 0x2026
+#define WGL_FULL_ACCELERATION_EXT 0x2027
+#define WGL_SWAP_EXCHANGE_EXT 0x2028
+#define WGL_SWAP_COPY_EXT 0x2029
+#define WGL_SWAP_UNDEFINED_EXT 0x202A
+#define WGL_TYPE_RGBA_EXT 0x202B
+#define WGL_TYPE_COLORINDEX_EXT 0x202C
+
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, int *piValues);
+
+#define wglChoosePixelFormatEXT WGLEW_GET_FUN(__wglewChoosePixelFormatEXT)
+#define wglGetPixelFormatAttribfvEXT WGLEW_GET_FUN(__wglewGetPixelFormatAttribfvEXT)
+#define wglGetPixelFormatAttribivEXT WGLEW_GET_FUN(__wglewGetPixelFormatAttribivEXT)
+
+#define WGLEW_EXT_pixel_format WGLEW_GET_VAR(__WGLEW_EXT_pixel_format)
+
+#endif /* WGL_EXT_pixel_format */
+
+/* ------------------- WGL_EXT_pixel_format_packed_float ------------------- */
+
+#ifndef WGL_EXT_pixel_format_packed_float
+#define WGL_EXT_pixel_format_packed_float 1
+
+#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8
+
+#define WGLEW_EXT_pixel_format_packed_float WGLEW_GET_VAR(__WGLEW_EXT_pixel_format_packed_float)
+
+#endif /* WGL_EXT_pixel_format_packed_float */
+
+/* -------------------------- WGL_EXT_swap_control ------------------------- */
+
+#ifndef WGL_EXT_swap_control
+#define WGL_EXT_swap_control 1
+
+typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void);
+typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
+
+#define wglGetSwapIntervalEXT WGLEW_GET_FUN(__wglewGetSwapIntervalEXT)
+#define wglSwapIntervalEXT WGLEW_GET_FUN(__wglewSwapIntervalEXT)
+
+#define WGLEW_EXT_swap_control WGLEW_GET_VAR(__WGLEW_EXT_swap_control)
+
+#endif /* WGL_EXT_swap_control */
+
+/* --------------------- WGL_I3D_digital_video_control --------------------- */
+
+#ifndef WGL_I3D_digital_video_control
+#define WGL_I3D_digital_video_control 1
+
+#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050
+#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051
+#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052
+#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053
+
+typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int* piValue);
+typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int* piValue);
+
+#define wglGetDigitalVideoParametersI3D WGLEW_GET_FUN(__wglewGetDigitalVideoParametersI3D)
+#define wglSetDigitalVideoParametersI3D WGLEW_GET_FUN(__wglewSetDigitalVideoParametersI3D)
+
+#define WGLEW_I3D_digital_video_control WGLEW_GET_VAR(__WGLEW_I3D_digital_video_control)
+
+#endif /* WGL_I3D_digital_video_control */
+
+/* ----------------------------- WGL_I3D_gamma ----------------------------- */
+
+#ifndef WGL_I3D_gamma
+#define WGL_I3D_gamma 1
+
+#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E
+#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F
+
+typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT* puRed, USHORT *puGreen, USHORT *puBlue);
+typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int* piValue);
+typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT* puRed, const USHORT *puGreen, const USHORT *puBlue);
+typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int* piValue);
+
+#define wglGetGammaTableI3D WGLEW_GET_FUN(__wglewGetGammaTableI3D)
+#define wglGetGammaTableParametersI3D WGLEW_GET_FUN(__wglewGetGammaTableParametersI3D)
+#define wglSetGammaTableI3D WGLEW_GET_FUN(__wglewSetGammaTableI3D)
+#define wglSetGammaTableParametersI3D WGLEW_GET_FUN(__wglewSetGammaTableParametersI3D)
+
+#define WGLEW_I3D_gamma WGLEW_GET_VAR(__WGLEW_I3D_gamma)
+
+#endif /* WGL_I3D_gamma */
+
+/* ---------------------------- WGL_I3D_genlock ---------------------------- */
+
+#ifndef WGL_I3D_genlock
+#define WGL_I3D_genlock 1
+
+#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044
+#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045
+#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046
+#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047
+#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048
+#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049
+#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A
+#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B
+#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C
+
+typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC);
+typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT* uRate);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT* uDelay);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT* uEdge);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT* uSource);
+typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL* pFlag);
+typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT* uMaxLineDelay, UINT *uMaxPixelDelay);
+
+#define wglDisableGenlockI3D WGLEW_GET_FUN(__wglewDisableGenlockI3D)
+#define wglEnableGenlockI3D WGLEW_GET_FUN(__wglewEnableGenlockI3D)
+#define wglGenlockSampleRateI3D WGLEW_GET_FUN(__wglewGenlockSampleRateI3D)
+#define wglGenlockSourceDelayI3D WGLEW_GET_FUN(__wglewGenlockSourceDelayI3D)
+#define wglGenlockSourceEdgeI3D WGLEW_GET_FUN(__wglewGenlockSourceEdgeI3D)
+#define wglGenlockSourceI3D WGLEW_GET_FUN(__wglewGenlockSourceI3D)
+#define wglGetGenlockSampleRateI3D WGLEW_GET_FUN(__wglewGetGenlockSampleRateI3D)
+#define wglGetGenlockSourceDelayI3D WGLEW_GET_FUN(__wglewGetGenlockSourceDelayI3D)
+#define wglGetGenlockSourceEdgeI3D WGLEW_GET_FUN(__wglewGetGenlockSourceEdgeI3D)
+#define wglGetGenlockSourceI3D WGLEW_GET_FUN(__wglewGetGenlockSourceI3D)
+#define wglIsEnabledGenlockI3D WGLEW_GET_FUN(__wglewIsEnabledGenlockI3D)
+#define wglQueryGenlockMaxSourceDelayI3D WGLEW_GET_FUN(__wglewQueryGenlockMaxSourceDelayI3D)
+
+#define WGLEW_I3D_genlock WGLEW_GET_VAR(__WGLEW_I3D_genlock)
+
+#endif /* WGL_I3D_genlock */
+
+/* -------------------------- WGL_I3D_image_buffer ------------------------- */
+
+#ifndef WGL_I3D_image_buffer
+#define WGL_I3D_image_buffer 1
+
+#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001
+#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002
+
+typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hdc, HANDLE* pEvent, LPVOID *pAddress, DWORD *pSize, UINT count);
+typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags);
+typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress);
+typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hdc, LPVOID* pAddress, UINT count);
+
+#define wglAssociateImageBufferEventsI3D WGLEW_GET_FUN(__wglewAssociateImageBufferEventsI3D)
+#define wglCreateImageBufferI3D WGLEW_GET_FUN(__wglewCreateImageBufferI3D)
+#define wglDestroyImageBufferI3D WGLEW_GET_FUN(__wglewDestroyImageBufferI3D)
+#define wglReleaseImageBufferEventsI3D WGLEW_GET_FUN(__wglewReleaseImageBufferEventsI3D)
+
+#define WGLEW_I3D_image_buffer WGLEW_GET_VAR(__WGLEW_I3D_image_buffer)
+
+#endif /* WGL_I3D_image_buffer */
+
+/* ------------------------ WGL_I3D_swap_frame_lock ------------------------ */
+
+#ifndef WGL_I3D_swap_frame_lock
+#define WGL_I3D_swap_frame_lock 1
+
+typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (VOID);
+typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (VOID);
+typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL* pFlag);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL* pFlag);
+
+#define wglDisableFrameLockI3D WGLEW_GET_FUN(__wglewDisableFrameLockI3D)
+#define wglEnableFrameLockI3D WGLEW_GET_FUN(__wglewEnableFrameLockI3D)
+#define wglIsEnabledFrameLockI3D WGLEW_GET_FUN(__wglewIsEnabledFrameLockI3D)
+#define wglQueryFrameLockMasterI3D WGLEW_GET_FUN(__wglewQueryFrameLockMasterI3D)
+
+#define WGLEW_I3D_swap_frame_lock WGLEW_GET_VAR(__WGLEW_I3D_swap_frame_lock)
+
+#endif /* WGL_I3D_swap_frame_lock */
+
+/* ------------------------ WGL_I3D_swap_frame_usage ----------------------- */
+
+#ifndef WGL_I3D_swap_frame_usage
+#define WGL_I3D_swap_frame_usage 1
+
+typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float* pUsage);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD* pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
+
+#define wglBeginFrameTrackingI3D WGLEW_GET_FUN(__wglewBeginFrameTrackingI3D)
+#define wglEndFrameTrackingI3D WGLEW_GET_FUN(__wglewEndFrameTrackingI3D)
+#define wglGetFrameUsageI3D WGLEW_GET_FUN(__wglewGetFrameUsageI3D)
+#define wglQueryFrameTrackingI3D WGLEW_GET_FUN(__wglewQueryFrameTrackingI3D)
+
+#define WGLEW_I3D_swap_frame_usage WGLEW_GET_VAR(__WGLEW_I3D_swap_frame_usage)
+
+#endif /* WGL_I3D_swap_frame_usage */
+
+/* --------------------------- WGL_NV_DX_interop --------------------------- */
+
+#ifndef WGL_NV_DX_interop
+#define WGL_NV_DX_interop 1
+
+#define WGL_ACCESS_READ_ONLY_NV 0x0000
+#define WGL_ACCESS_READ_WRITE_NV 0x0001
+#define WGL_ACCESS_WRITE_DISCARD_NV 0x0002
+
+typedef BOOL (WINAPI * PFNWGLDXCLOSEDEVICENVPROC) (HANDLE hDevice);
+typedef BOOL (WINAPI * PFNWGLDXLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE* hObjects);
+typedef BOOL (WINAPI * PFNWGLDXOBJECTACCESSNVPROC) (HANDLE hObject, GLenum access);
+typedef HANDLE (WINAPI * PFNWGLDXOPENDEVICENVPROC) (void* dxDevice);
+typedef HANDLE (WINAPI * PFNWGLDXREGISTEROBJECTNVPROC) (HANDLE hDevice, void* dxObject, GLuint name, GLenum type, GLenum access);
+typedef BOOL (WINAPI * PFNWGLDXSETRESOURCESHAREHANDLENVPROC) (void* dxObject, HANDLE shareHandle);
+typedef BOOL (WINAPI * PFNWGLDXUNLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE* hObjects);
+typedef BOOL (WINAPI * PFNWGLDXUNREGISTEROBJECTNVPROC) (HANDLE hDevice, HANDLE hObject);
+
+#define wglDXCloseDeviceNV WGLEW_GET_FUN(__wglewDXCloseDeviceNV)
+#define wglDXLockObjectsNV WGLEW_GET_FUN(__wglewDXLockObjectsNV)
+#define wglDXObjectAccessNV WGLEW_GET_FUN(__wglewDXObjectAccessNV)
+#define wglDXOpenDeviceNV WGLEW_GET_FUN(__wglewDXOpenDeviceNV)
+#define wglDXRegisterObjectNV WGLEW_GET_FUN(__wglewDXRegisterObjectNV)
+#define wglDXSetResourceShareHandleNV WGLEW_GET_FUN(__wglewDXSetResourceShareHandleNV)
+#define wglDXUnlockObjectsNV WGLEW_GET_FUN(__wglewDXUnlockObjectsNV)
+#define wglDXUnregisterObjectNV WGLEW_GET_FUN(__wglewDXUnregisterObjectNV)
+
+#define WGLEW_NV_DX_interop WGLEW_GET_VAR(__WGLEW_NV_DX_interop)
+
+#endif /* WGL_NV_DX_interop */
+
+/* --------------------------- WGL_NV_copy_image --------------------------- */
+
+#ifndef WGL_NV_copy_image
+#define WGL_NV_copy_image 1
+
+typedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+
+#define wglCopyImageSubDataNV WGLEW_GET_FUN(__wglewCopyImageSubDataNV)
+
+#define WGLEW_NV_copy_image WGLEW_GET_VAR(__WGLEW_NV_copy_image)
+
+#endif /* WGL_NV_copy_image */
+
+/* -------------------------- WGL_NV_float_buffer -------------------------- */
+
+#ifndef WGL_NV_float_buffer
+#define WGL_NV_float_buffer 1
+
+#define WGL_FLOAT_COMPONENTS_NV 0x20B0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4
+#define WGL_TEXTURE_FLOAT_R_NV 0x20B5
+#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6
+#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7
+#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8
+
+#define WGLEW_NV_float_buffer WGLEW_GET_VAR(__WGLEW_NV_float_buffer)
+
+#endif /* WGL_NV_float_buffer */
+
+/* -------------------------- WGL_NV_gpu_affinity -------------------------- */
+
+#ifndef WGL_NV_gpu_affinity
+#define WGL_NV_gpu_affinity 1
+
+#define WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0
+#define WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1
+
+DECLARE_HANDLE(HGPUNV);
+typedef struct _GPU_DEVICE {
+ DWORD cb;
+ CHAR DeviceName[32];
+ CHAR DeviceString[128];
+ DWORD Flags;
+ RECT rcVirtualScreen;
+} GPU_DEVICE, *PGPU_DEVICE;
+
+typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList);
+typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc);
+typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);
+typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);
+typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu);
+
+#define wglCreateAffinityDCNV WGLEW_GET_FUN(__wglewCreateAffinityDCNV)
+#define wglDeleteDCNV WGLEW_GET_FUN(__wglewDeleteDCNV)
+#define wglEnumGpuDevicesNV WGLEW_GET_FUN(__wglewEnumGpuDevicesNV)
+#define wglEnumGpusFromAffinityDCNV WGLEW_GET_FUN(__wglewEnumGpusFromAffinityDCNV)
+#define wglEnumGpusNV WGLEW_GET_FUN(__wglewEnumGpusNV)
+
+#define WGLEW_NV_gpu_affinity WGLEW_GET_VAR(__WGLEW_NV_gpu_affinity)
+
+#endif /* WGL_NV_gpu_affinity */
+
+/* ---------------------- WGL_NV_multisample_coverage ---------------------- */
+
+#ifndef WGL_NV_multisample_coverage
+#define WGL_NV_multisample_coverage 1
+
+#define WGL_COVERAGE_SAMPLES_NV 0x2042
+#define WGL_COLOR_SAMPLES_NV 0x20B9
+
+#define WGLEW_NV_multisample_coverage WGLEW_GET_VAR(__WGLEW_NV_multisample_coverage)
+
+#endif /* WGL_NV_multisample_coverage */
+
+/* -------------------------- WGL_NV_present_video ------------------------- */
+
+#ifndef WGL_NV_present_video
+#define WGL_NV_present_video 1
+
+#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0
+
+DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV);
+
+typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDc, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int* piAttribList);
+typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDc, HVIDEOOUTPUTDEVICENV* phDeviceList);
+typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int* piValue);
+
+#define wglBindVideoDeviceNV WGLEW_GET_FUN(__wglewBindVideoDeviceNV)
+#define wglEnumerateVideoDevicesNV WGLEW_GET_FUN(__wglewEnumerateVideoDevicesNV)
+#define wglQueryCurrentContextNV WGLEW_GET_FUN(__wglewQueryCurrentContextNV)
+
+#define WGLEW_NV_present_video WGLEW_GET_VAR(__WGLEW_NV_present_video)
+
+#endif /* WGL_NV_present_video */
+
+/* ---------------------- WGL_NV_render_depth_texture ---------------------- */
+
+#ifndef WGL_NV_render_depth_texture
+#define WGL_NV_render_depth_texture 1
+
+#define WGL_NO_TEXTURE_ARB 0x2077
+#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4
+#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5
+#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6
+#define WGL_DEPTH_COMPONENT_NV 0x20A7
+
+#define WGLEW_NV_render_depth_texture WGLEW_GET_VAR(__WGLEW_NV_render_depth_texture)
+
+#endif /* WGL_NV_render_depth_texture */
+
+/* -------------------- WGL_NV_render_texture_rectangle -------------------- */
+
+#ifndef WGL_NV_render_texture_rectangle
+#define WGL_NV_render_texture_rectangle 1
+
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1
+#define WGL_TEXTURE_RECTANGLE_NV 0x20A2
+
+#define WGLEW_NV_render_texture_rectangle WGLEW_GET_VAR(__WGLEW_NV_render_texture_rectangle)
+
+#endif /* WGL_NV_render_texture_rectangle */
+
+/* --------------------------- WGL_NV_swap_group --------------------------- */
+
+#ifndef WGL_NV_swap_group
+#define WGL_NV_swap_group 1
+
+typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier);
+typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint* count);
+typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint* maxGroups, GLuint *maxBarriers);
+typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint* group, GLuint *barrier);
+typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC);
+
+#define wglBindSwapBarrierNV WGLEW_GET_FUN(__wglewBindSwapBarrierNV)
+#define wglJoinSwapGroupNV WGLEW_GET_FUN(__wglewJoinSwapGroupNV)
+#define wglQueryFrameCountNV WGLEW_GET_FUN(__wglewQueryFrameCountNV)
+#define wglQueryMaxSwapGroupsNV WGLEW_GET_FUN(__wglewQueryMaxSwapGroupsNV)
+#define wglQuerySwapGroupNV WGLEW_GET_FUN(__wglewQuerySwapGroupNV)
+#define wglResetFrameCountNV WGLEW_GET_FUN(__wglewResetFrameCountNV)
+
+#define WGLEW_NV_swap_group WGLEW_GET_VAR(__WGLEW_NV_swap_group)
+
+#endif /* WGL_NV_swap_group */
+
+/* ----------------------- WGL_NV_vertex_array_range ----------------------- */
+
+#ifndef WGL_NV_vertex_array_range
+#define WGL_NV_vertex_array_range 1
+
+typedef void * (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority);
+typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer);
+
+#define wglAllocateMemoryNV WGLEW_GET_FUN(__wglewAllocateMemoryNV)
+#define wglFreeMemoryNV WGLEW_GET_FUN(__wglewFreeMemoryNV)
+
+#define WGLEW_NV_vertex_array_range WGLEW_GET_VAR(__WGLEW_NV_vertex_array_range)
+
+#endif /* WGL_NV_vertex_array_range */
+
+/* -------------------------- WGL_NV_video_capture ------------------------- */
+
+#ifndef WGL_NV_video_capture
+#define WGL_NV_video_capture 1
+
+#define WGL_UNIQUE_ID_NV 0x20CE
+#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF
+
+DECLARE_HANDLE(HVIDEOINPUTDEVICENV);
+
+typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);
+typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV* phDeviceList);
+typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int* piValue);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+
+#define wglBindVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewBindVideoCaptureDeviceNV)
+#define wglEnumerateVideoCaptureDevicesNV WGLEW_GET_FUN(__wglewEnumerateVideoCaptureDevicesNV)
+#define wglLockVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewLockVideoCaptureDeviceNV)
+#define wglQueryVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewQueryVideoCaptureDeviceNV)
+#define wglReleaseVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewReleaseVideoCaptureDeviceNV)
+
+#define WGLEW_NV_video_capture WGLEW_GET_VAR(__WGLEW_NV_video_capture)
+
+#endif /* WGL_NV_video_capture */
+
+/* -------------------------- WGL_NV_video_output -------------------------- */
+
+#ifndef WGL_NV_video_output
+#define WGL_NV_video_output 1
+
+#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0
+#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1
+#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2
+#define WGL_VIDEO_OUT_COLOR_NV 0x20C3
+#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4
+#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5
+#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6
+#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7
+#define WGL_VIDEO_OUT_FRAME 0x20C8
+#define WGL_VIDEO_OUT_FIELD_1 0x20C9
+#define WGL_VIDEO_OUT_FIELD_2 0x20CA
+#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB
+#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC
+
+DECLARE_HANDLE(HPVIDEODEV);
+
+typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);
+typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV* hVideoDevice);
+typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long* pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer);
+typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long* pulCounterPbuffer, BOOL bBlock);
+
+#define wglBindVideoImageNV WGLEW_GET_FUN(__wglewBindVideoImageNV)
+#define wglGetVideoDeviceNV WGLEW_GET_FUN(__wglewGetVideoDeviceNV)
+#define wglGetVideoInfoNV WGLEW_GET_FUN(__wglewGetVideoInfoNV)
+#define wglReleaseVideoDeviceNV WGLEW_GET_FUN(__wglewReleaseVideoDeviceNV)
+#define wglReleaseVideoImageNV WGLEW_GET_FUN(__wglewReleaseVideoImageNV)
+#define wglSendPbufferToVideoNV WGLEW_GET_FUN(__wglewSendPbufferToVideoNV)
+
+#define WGLEW_NV_video_output WGLEW_GET_VAR(__WGLEW_NV_video_output)
+
+#endif /* WGL_NV_video_output */
+
+/* -------------------------- WGL_OML_sync_control ------------------------- */
+
+#ifndef WGL_OML_sync_control
+#define WGL_OML_sync_control 1
+
+typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32* numerator, INT32 *denominator);
+typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64* ust, INT64 *msc, INT64 *sbc);
+typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
+typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, INT fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
+typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64* ust, INT64 *msc, INT64 *sbc);
+typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64* ust, INT64 *msc, INT64 *sbc);
+
+#define wglGetMscRateOML WGLEW_GET_FUN(__wglewGetMscRateOML)
+#define wglGetSyncValuesOML WGLEW_GET_FUN(__wglewGetSyncValuesOML)
+#define wglSwapBuffersMscOML WGLEW_GET_FUN(__wglewSwapBuffersMscOML)
+#define wglSwapLayerBuffersMscOML WGLEW_GET_FUN(__wglewSwapLayerBuffersMscOML)
+#define wglWaitForMscOML WGLEW_GET_FUN(__wglewWaitForMscOML)
+#define wglWaitForSbcOML WGLEW_GET_FUN(__wglewWaitForSbcOML)
+
+#define WGLEW_OML_sync_control WGLEW_GET_VAR(__WGLEW_OML_sync_control)
+
+#endif /* WGL_OML_sync_control */
+
+/* ------------------------------------------------------------------------- */
+
+#ifdef GLEW_MX
+#define WGLEW_EXPORT
+#else
+#define WGLEW_EXPORT GLEWAPI
+#endif /* GLEW_MX */
+
+#ifdef GLEW_MX
+struct WGLEWContextStruct
+{
+#endif /* GLEW_MX */
+
+WGLEW_EXPORT PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL;
+
+WGLEW_EXPORT PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC __wglewBlitContextFramebufferAMD;
+WGLEW_EXPORT PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC __wglewCreateAssociatedContextAMD;
+WGLEW_EXPORT PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC __wglewCreateAssociatedContextAttribsAMD;
+WGLEW_EXPORT PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC __wglewDeleteAssociatedContextAMD;
+WGLEW_EXPORT PFNWGLGETCONTEXTGPUIDAMDPROC __wglewGetContextGPUIDAMD;
+WGLEW_EXPORT PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC __wglewGetCurrentAssociatedContextAMD;
+WGLEW_EXPORT PFNWGLGETGPUIDSAMDPROC __wglewGetGPUIDsAMD;
+WGLEW_EXPORT PFNWGLGETGPUINFOAMDPROC __wglewGetGPUInfoAMD;
+WGLEW_EXPORT PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC __wglewMakeAssociatedContextCurrentAMD;
+
+WGLEW_EXPORT PFNWGLCREATEBUFFERREGIONARBPROC __wglewCreateBufferRegionARB;
+WGLEW_EXPORT PFNWGLDELETEBUFFERREGIONARBPROC __wglewDeleteBufferRegionARB;
+WGLEW_EXPORT PFNWGLRESTOREBUFFERREGIONARBPROC __wglewRestoreBufferRegionARB;
+WGLEW_EXPORT PFNWGLSAVEBUFFERREGIONARBPROC __wglewSaveBufferRegionARB;
+
+WGLEW_EXPORT PFNWGLCREATECONTEXTATTRIBSARBPROC __wglewCreateContextAttribsARB;
+
+WGLEW_EXPORT PFNWGLGETEXTENSIONSSTRINGARBPROC __wglewGetExtensionsStringARB;
+
+WGLEW_EXPORT PFNWGLGETCURRENTREADDCARBPROC __wglewGetCurrentReadDCARB;
+WGLEW_EXPORT PFNWGLMAKECONTEXTCURRENTARBPROC __wglewMakeContextCurrentARB;
+
+WGLEW_EXPORT PFNWGLCREATEPBUFFERARBPROC __wglewCreatePbufferARB;
+WGLEW_EXPORT PFNWGLDESTROYPBUFFERARBPROC __wglewDestroyPbufferARB;
+WGLEW_EXPORT PFNWGLGETPBUFFERDCARBPROC __wglewGetPbufferDCARB;
+WGLEW_EXPORT PFNWGLQUERYPBUFFERARBPROC __wglewQueryPbufferARB;
+WGLEW_EXPORT PFNWGLRELEASEPBUFFERDCARBPROC __wglewReleasePbufferDCARB;
+
+WGLEW_EXPORT PFNWGLCHOOSEPIXELFORMATARBPROC __wglewChoosePixelFormatARB;
+WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBFVARBPROC __wglewGetPixelFormatAttribfvARB;
+WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBIVARBPROC __wglewGetPixelFormatAttribivARB;
+
+WGLEW_EXPORT PFNWGLBINDTEXIMAGEARBPROC __wglewBindTexImageARB;
+WGLEW_EXPORT PFNWGLRELEASETEXIMAGEARBPROC __wglewReleaseTexImageARB;
+WGLEW_EXPORT PFNWGLSETPBUFFERATTRIBARBPROC __wglewSetPbufferAttribARB;
+
+WGLEW_EXPORT PFNWGLBINDDISPLAYCOLORTABLEEXTPROC __wglewBindDisplayColorTableEXT;
+WGLEW_EXPORT PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC __wglewCreateDisplayColorTableEXT;
+WGLEW_EXPORT PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC __wglewDestroyDisplayColorTableEXT;
+WGLEW_EXPORT PFNWGLLOADDISPLAYCOLORTABLEEXTPROC __wglewLoadDisplayColorTableEXT;
+
+WGLEW_EXPORT PFNWGLGETEXTENSIONSSTRINGEXTPROC __wglewGetExtensionsStringEXT;
+
+WGLEW_EXPORT PFNWGLGETCURRENTREADDCEXTPROC __wglewGetCurrentReadDCEXT;
+WGLEW_EXPORT PFNWGLMAKECONTEXTCURRENTEXTPROC __wglewMakeContextCurrentEXT;
+
+WGLEW_EXPORT PFNWGLCREATEPBUFFEREXTPROC __wglewCreatePbufferEXT;
+WGLEW_EXPORT PFNWGLDESTROYPBUFFEREXTPROC __wglewDestroyPbufferEXT;
+WGLEW_EXPORT PFNWGLGETPBUFFERDCEXTPROC __wglewGetPbufferDCEXT;
+WGLEW_EXPORT PFNWGLQUERYPBUFFEREXTPROC __wglewQueryPbufferEXT;
+WGLEW_EXPORT PFNWGLRELEASEPBUFFERDCEXTPROC __wglewReleasePbufferDCEXT;
+
+WGLEW_EXPORT PFNWGLCHOOSEPIXELFORMATEXTPROC __wglewChoosePixelFormatEXT;
+WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBFVEXTPROC __wglewGetPixelFormatAttribfvEXT;
+WGLEW_EXPORT PFNWGLGETPIXELFORMATATTRIBIVEXTPROC __wglewGetPixelFormatAttribivEXT;
+
+WGLEW_EXPORT PFNWGLGETSWAPINTERVALEXTPROC __wglewGetSwapIntervalEXT;
+WGLEW_EXPORT PFNWGLSWAPINTERVALEXTPROC __wglewSwapIntervalEXT;
+
+WGLEW_EXPORT PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC __wglewGetDigitalVideoParametersI3D;
+WGLEW_EXPORT PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC __wglewSetDigitalVideoParametersI3D;
+
+WGLEW_EXPORT PFNWGLGETGAMMATABLEI3DPROC __wglewGetGammaTableI3D;
+WGLEW_EXPORT PFNWGLGETGAMMATABLEPARAMETERSI3DPROC __wglewGetGammaTableParametersI3D;
+WGLEW_EXPORT PFNWGLSETGAMMATABLEI3DPROC __wglewSetGammaTableI3D;
+WGLEW_EXPORT PFNWGLSETGAMMATABLEPARAMETERSI3DPROC __wglewSetGammaTableParametersI3D;
+
+WGLEW_EXPORT PFNWGLDISABLEGENLOCKI3DPROC __wglewDisableGenlockI3D;
+WGLEW_EXPORT PFNWGLENABLEGENLOCKI3DPROC __wglewEnableGenlockI3D;
+WGLEW_EXPORT PFNWGLGENLOCKSAMPLERATEI3DPROC __wglewGenlockSampleRateI3D;
+WGLEW_EXPORT PFNWGLGENLOCKSOURCEDELAYI3DPROC __wglewGenlockSourceDelayI3D;
+WGLEW_EXPORT PFNWGLGENLOCKSOURCEEDGEI3DPROC __wglewGenlockSourceEdgeI3D;
+WGLEW_EXPORT PFNWGLGENLOCKSOURCEI3DPROC __wglewGenlockSourceI3D;
+WGLEW_EXPORT PFNWGLGETGENLOCKSAMPLERATEI3DPROC __wglewGetGenlockSampleRateI3D;
+WGLEW_EXPORT PFNWGLGETGENLOCKSOURCEDELAYI3DPROC __wglewGetGenlockSourceDelayI3D;
+WGLEW_EXPORT PFNWGLGETGENLOCKSOURCEEDGEI3DPROC __wglewGetGenlockSourceEdgeI3D;
+WGLEW_EXPORT PFNWGLGETGENLOCKSOURCEI3DPROC __wglewGetGenlockSourceI3D;
+WGLEW_EXPORT PFNWGLISENABLEDGENLOCKI3DPROC __wglewIsEnabledGenlockI3D;
+WGLEW_EXPORT PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC __wglewQueryGenlockMaxSourceDelayI3D;
+
+WGLEW_EXPORT PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC __wglewAssociateImageBufferEventsI3D;
+WGLEW_EXPORT PFNWGLCREATEIMAGEBUFFERI3DPROC __wglewCreateImageBufferI3D;
+WGLEW_EXPORT PFNWGLDESTROYIMAGEBUFFERI3DPROC __wglewDestroyImageBufferI3D;
+WGLEW_EXPORT PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC __wglewReleaseImageBufferEventsI3D;
+
+WGLEW_EXPORT PFNWGLDISABLEFRAMELOCKI3DPROC __wglewDisableFrameLockI3D;
+WGLEW_EXPORT PFNWGLENABLEFRAMELOCKI3DPROC __wglewEnableFrameLockI3D;
+WGLEW_EXPORT PFNWGLISENABLEDFRAMELOCKI3DPROC __wglewIsEnabledFrameLockI3D;
+WGLEW_EXPORT PFNWGLQUERYFRAMELOCKMASTERI3DPROC __wglewQueryFrameLockMasterI3D;
+
+WGLEW_EXPORT PFNWGLBEGINFRAMETRACKINGI3DPROC __wglewBeginFrameTrackingI3D;
+WGLEW_EXPORT PFNWGLENDFRAMETRACKINGI3DPROC __wglewEndFrameTrackingI3D;
+WGLEW_EXPORT PFNWGLGETFRAMEUSAGEI3DPROC __wglewGetFrameUsageI3D;
+WGLEW_EXPORT PFNWGLQUERYFRAMETRACKINGI3DPROC __wglewQueryFrameTrackingI3D;
+
+WGLEW_EXPORT PFNWGLDXCLOSEDEVICENVPROC __wglewDXCloseDeviceNV;
+WGLEW_EXPORT PFNWGLDXLOCKOBJECTSNVPROC __wglewDXLockObjectsNV;
+WGLEW_EXPORT PFNWGLDXOBJECTACCESSNVPROC __wglewDXObjectAccessNV;
+WGLEW_EXPORT PFNWGLDXOPENDEVICENVPROC __wglewDXOpenDeviceNV;
+WGLEW_EXPORT PFNWGLDXREGISTEROBJECTNVPROC __wglewDXRegisterObjectNV;
+WGLEW_EXPORT PFNWGLDXSETRESOURCESHAREHANDLENVPROC __wglewDXSetResourceShareHandleNV;
+WGLEW_EXPORT PFNWGLDXUNLOCKOBJECTSNVPROC __wglewDXUnlockObjectsNV;
+WGLEW_EXPORT PFNWGLDXUNREGISTEROBJECTNVPROC __wglewDXUnregisterObjectNV;
+
+WGLEW_EXPORT PFNWGLCOPYIMAGESUBDATANVPROC __wglewCopyImageSubDataNV;
+
+WGLEW_EXPORT PFNWGLCREATEAFFINITYDCNVPROC __wglewCreateAffinityDCNV;
+WGLEW_EXPORT PFNWGLDELETEDCNVPROC __wglewDeleteDCNV;
+WGLEW_EXPORT PFNWGLENUMGPUDEVICESNVPROC __wglewEnumGpuDevicesNV;
+WGLEW_EXPORT PFNWGLENUMGPUSFROMAFFINITYDCNVPROC __wglewEnumGpusFromAffinityDCNV;
+WGLEW_EXPORT PFNWGLENUMGPUSNVPROC __wglewEnumGpusNV;
+
+WGLEW_EXPORT PFNWGLBINDVIDEODEVICENVPROC __wglewBindVideoDeviceNV;
+WGLEW_EXPORT PFNWGLENUMERATEVIDEODEVICESNVPROC __wglewEnumerateVideoDevicesNV;
+WGLEW_EXPORT PFNWGLQUERYCURRENTCONTEXTNVPROC __wglewQueryCurrentContextNV;
+
+WGLEW_EXPORT PFNWGLBINDSWAPBARRIERNVPROC __wglewBindSwapBarrierNV;
+WGLEW_EXPORT PFNWGLJOINSWAPGROUPNVPROC __wglewJoinSwapGroupNV;
+WGLEW_EXPORT PFNWGLQUERYFRAMECOUNTNVPROC __wglewQueryFrameCountNV;
+WGLEW_EXPORT PFNWGLQUERYMAXSWAPGROUPSNVPROC __wglewQueryMaxSwapGroupsNV;
+WGLEW_EXPORT PFNWGLQUERYSWAPGROUPNVPROC __wglewQuerySwapGroupNV;
+WGLEW_EXPORT PFNWGLRESETFRAMECOUNTNVPROC __wglewResetFrameCountNV;
+
+WGLEW_EXPORT PFNWGLALLOCATEMEMORYNVPROC __wglewAllocateMemoryNV;
+WGLEW_EXPORT PFNWGLFREEMEMORYNVPROC __wglewFreeMemoryNV;
+
+WGLEW_EXPORT PFNWGLBINDVIDEOCAPTUREDEVICENVPROC __wglewBindVideoCaptureDeviceNV;
+WGLEW_EXPORT PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC __wglewEnumerateVideoCaptureDevicesNV;
+WGLEW_EXPORT PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC __wglewLockVideoCaptureDeviceNV;
+WGLEW_EXPORT PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC __wglewQueryVideoCaptureDeviceNV;
+WGLEW_EXPORT PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC __wglewReleaseVideoCaptureDeviceNV;
+
+WGLEW_EXPORT PFNWGLBINDVIDEOIMAGENVPROC __wglewBindVideoImageNV;
+WGLEW_EXPORT PFNWGLGETVIDEODEVICENVPROC __wglewGetVideoDeviceNV;
+WGLEW_EXPORT PFNWGLGETVIDEOINFONVPROC __wglewGetVideoInfoNV;
+WGLEW_EXPORT PFNWGLRELEASEVIDEODEVICENVPROC __wglewReleaseVideoDeviceNV;
+WGLEW_EXPORT PFNWGLRELEASEVIDEOIMAGENVPROC __wglewReleaseVideoImageNV;
+WGLEW_EXPORT PFNWGLSENDPBUFFERTOVIDEONVPROC __wglewSendPbufferToVideoNV;
+
+WGLEW_EXPORT PFNWGLGETMSCRATEOMLPROC __wglewGetMscRateOML;
+WGLEW_EXPORT PFNWGLGETSYNCVALUESOMLPROC __wglewGetSyncValuesOML;
+WGLEW_EXPORT PFNWGLSWAPBUFFERSMSCOMLPROC __wglewSwapBuffersMscOML;
+WGLEW_EXPORT PFNWGLSWAPLAYERBUFFERSMSCOMLPROC __wglewSwapLayerBuffersMscOML;
+WGLEW_EXPORT PFNWGLWAITFORMSCOMLPROC __wglewWaitForMscOML;
+WGLEW_EXPORT PFNWGLWAITFORSBCOMLPROC __wglewWaitForSbcOML;
+WGLEW_EXPORT GLboolean __WGLEW_3DFX_multisample;
+WGLEW_EXPORT GLboolean __WGLEW_3DL_stereo_control;
+WGLEW_EXPORT GLboolean __WGLEW_AMD_gpu_association;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_buffer_region;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_create_context;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_create_context_profile;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_create_context_robustness;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_extensions_string;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_framebuffer_sRGB;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_make_current_read;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_multisample;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_pbuffer;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_pixel_format;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_pixel_format_float;
+WGLEW_EXPORT GLboolean __WGLEW_ARB_render_texture;
+WGLEW_EXPORT GLboolean __WGLEW_ATI_pixel_format_float;
+WGLEW_EXPORT GLboolean __WGLEW_ATI_render_texture_rectangle;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_create_context_es2_profile;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_depth_float;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_display_color_table;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_extensions_string;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_framebuffer_sRGB;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_make_current_read;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_multisample;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_pbuffer;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_pixel_format;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_pixel_format_packed_float;
+WGLEW_EXPORT GLboolean __WGLEW_EXT_swap_control;
+WGLEW_EXPORT GLboolean __WGLEW_I3D_digital_video_control;
+WGLEW_EXPORT GLboolean __WGLEW_I3D_gamma;
+WGLEW_EXPORT GLboolean __WGLEW_I3D_genlock;
+WGLEW_EXPORT GLboolean __WGLEW_I3D_image_buffer;
+WGLEW_EXPORT GLboolean __WGLEW_I3D_swap_frame_lock;
+WGLEW_EXPORT GLboolean __WGLEW_I3D_swap_frame_usage;
+WGLEW_EXPORT GLboolean __WGLEW_NV_DX_interop;
+WGLEW_EXPORT GLboolean __WGLEW_NV_copy_image;
+WGLEW_EXPORT GLboolean __WGLEW_NV_float_buffer;
+WGLEW_EXPORT GLboolean __WGLEW_NV_gpu_affinity;
+WGLEW_EXPORT GLboolean __WGLEW_NV_multisample_coverage;
+WGLEW_EXPORT GLboolean __WGLEW_NV_present_video;
+WGLEW_EXPORT GLboolean __WGLEW_NV_render_depth_texture;
+WGLEW_EXPORT GLboolean __WGLEW_NV_render_texture_rectangle;
+WGLEW_EXPORT GLboolean __WGLEW_NV_swap_group;
+WGLEW_EXPORT GLboolean __WGLEW_NV_vertex_array_range;
+WGLEW_EXPORT GLboolean __WGLEW_NV_video_capture;
+WGLEW_EXPORT GLboolean __WGLEW_NV_video_output;
+WGLEW_EXPORT GLboolean __WGLEW_OML_sync_control;
+
+#ifdef GLEW_MX
+}; /* WGLEWContextStruct */
+#endif /* GLEW_MX */
+
+/* ------------------------------------------------------------------------- */
+
+#ifdef GLEW_MX
+
+typedef struct WGLEWContextStruct WGLEWContext;
+GLEWAPI GLenum wglewContextInit (WGLEWContext* ctx);
+GLEWAPI GLboolean wglewContextIsSupported (const WGLEWContext* ctx, const char* name);
+
+#define wglewInit() wglewContextInit(wglewGetContext())
+#define wglewIsSupported(x) wglewContextIsSupported(wglewGetContext(), x)
+
+#define WGLEW_GET_VAR(x) (*(const GLboolean*)&(wglewGetContext()->x))
+#define WGLEW_GET_FUN(x) wglewGetContext()->x
+
+#else /* GLEW_MX */
+
+#define WGLEW_GET_VAR(x) (*(const GLboolean*)&x)
+#define WGLEW_GET_FUN(x) x
+
+GLEWAPI GLboolean wglewIsSupported (const char* name);
+
+#endif /* GLEW_MX */
+
+GLEWAPI GLboolean wglewGetExtension (const char* name);
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef GLEWAPI
+
+#endif /* __wglew_h__ */
diff --git a/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/wglext.h b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/wglext.h
new file mode 100644
index 00000000..ac632cce
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/3rdparty/platformspecific/Windows/PlatformLibs/GL/wglext.h
@@ -0,0 +1,421 @@
+#ifndef __wglext_h_
+#define __wglext_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2013-2016 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+/*
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+** http://www.opengl.org/registry/
+*/
+
+#ifndef GLAPI
+# define GLAPI __stdcall
+# define __DEFINED_GLAPI
+#endif
+
+DECLARE_HANDLE(HPBUFFERARB);
+DECLARE_HANDLE(HPVIDEODEVICE);
+DECLARE_HANDLE(HGPUNV);
+DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV);
+DECLARE_HANDLE(HVIDEOINPUTDEVICENV);
+
+ /* WGL_NV_gpu_affinity */
+typedef struct _GPU_DEVICE {
+ DWORD cb;
+ CHAR DeviceName[32];
+ CHAR DeviceString[128];
+ DWORD Flags;
+ RECT rcVirtualScreen;
+} GPU_DEVICE, *PGPU_DEVICE;
+
+/*************************************************************/
+
+/* Extensions */
+#define WGL_ARB_buffer_region 1
+#define WGL_ARB_create_context_robustness 1
+#define WGL_ARB_extensions_string 1
+#define WGL_ARB_make_current_read 1
+#define WGL_ARB_multisample 1
+#define WGL_ARB_pbuffer 1
+#define WGL_ARB_pixel_format 1
+#define WGL_ARB_pixel_format_float 1
+#define WGL_ARB_render_texture 1
+#define WGL_ATI_pixel_format_float 1
+#define WGL_EXT_create_context_es2_profile 1
+#define WGL_EXT_extensions_string 1
+#define WGL_EXT_framebuffer_sRGB 1
+#define WGL_EXT_pixel_format_packed_float 1
+#define WGL_EXT_swap_control 1
+#define WGL_NV_allocate_memory 1
+#define WGL_NV_copy_image 1
+#define WGL_NV_float_buffer 1
+#define WGL_NV_multisample_coverage 1
+#define WGL_NV_render_depth_texture 1
+#define WGL_NV_render_texture_rectangle 1
+#define WGL_NV_video_output 1
+#define WGL_KTX_buffer_region 1
+#define WGL_I3D_genlock 1
+#define WGL_NV_swap_group 1
+#define WGL_NV_gpu_affinity 1
+#define WGL_NV_present_video 1
+#define WGL_ARB_create_context 1
+#define WGL_NV_video_capture 1
+
+/* ARB_buffer_region */
+#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001
+#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002
+#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004
+#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008
+
+/* ARB_pixel_format */
+#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000
+#define WGL_DRAW_TO_WINDOW_ARB 0x2001
+#define WGL_DRAW_TO_BITMAP_ARB 0x2002
+#define WGL_ACCELERATION_ARB 0x2003
+#define WGL_NEED_PALETTE_ARB 0x2004
+#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005
+#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006
+#define WGL_SWAP_METHOD_ARB 0x2007
+#define WGL_NUMBER_OVERLAYS_ARB 0x2008
+#define WGL_NUMBER_UNDERLAYS_ARB 0x2009
+#define WGL_TRANSPARENT_ARB 0x200A
+#define WGL_SHARE_DEPTH_ARB 0x200C
+#define WGL_SHARE_STENCIL_ARB 0x200D
+#define WGL_SHARE_ACCUM_ARB 0x200E
+#define WGL_SUPPORT_GDI_ARB 0x200F
+#define WGL_SUPPORT_OPENGL_ARB 0x2010
+#define WGL_DOUBLE_BUFFER_ARB 0x2011
+#define WGL_STEREO_ARB 0x2012
+#define WGL_PIXEL_TYPE_ARB 0x2013
+#define WGL_COLOR_BITS_ARB 0x2014
+#define WGL_RED_BITS_ARB 0x2015
+#define WGL_RED_SHIFT_ARB 0x2016
+#define WGL_GREEN_BITS_ARB 0x2017
+#define WGL_GREEN_SHIFT_ARB 0x2018
+#define WGL_BLUE_BITS_ARB 0x2019
+#define WGL_BLUE_SHIFT_ARB 0x201A
+#define WGL_ALPHA_BITS_ARB 0x201B
+#define WGL_ALPHA_SHIFT_ARB 0x201C
+#define WGL_ACCUM_BITS_ARB 0x201D
+#define WGL_ACCUM_RED_BITS_ARB 0x201E
+#define WGL_ACCUM_GREEN_BITS_ARB 0x201F
+#define WGL_ACCUM_BLUE_BITS_ARB 0x2020
+#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021
+#define WGL_DEPTH_BITS_ARB 0x2022
+#define WGL_STENCIL_BITS_ARB 0x2023
+#define WGL_AUX_BUFFERS_ARB 0x2024
+#define WGL_NO_ACCELERATION_ARB 0x2025
+#define WGL_GENERIC_ACCELERATION_ARB 0x2026
+#define WGL_FULL_ACCELERATION_ARB 0x2027
+#define WGL_SWAP_EXCHANGE_ARB 0x2028
+#define WGL_SWAP_COPY_ARB 0x2029
+#define WGL_SWAP_UNDEFINED_ARB 0x202A
+#define WGL_TYPE_RGBA_ARB 0x202B
+#define WGL_TYPE_COLORINDEX_ARB 0x202C
+#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037
+#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
+#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
+#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A
+#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B
+
+/* ARB_pbuffer */
+#define WGL_DRAW_TO_PBUFFER_ARB 0x202D
+#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E
+#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030
+#define WGL_PBUFFER_LARGEST_ARB 0x2033
+#define WGL_PBUFFER_WIDTH_ARB 0x2034
+#define WGL_PBUFFER_HEIGHT_ARB 0x2035
+#define WGL_PBUFFER_LOST_ARB 0x2036
+
+/* ARB_multisample */
+#define WGL_SAMPLE_BUFFERS_ARB 0x2041
+#define WGL_SAMPLES_ARB 0x2042
+
+/* I3D_genlock */
+#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044
+#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045
+#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046
+#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047
+#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048
+#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049
+#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A
+#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B
+#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C
+
+/* ARB_render_texture */
+#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070
+#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071
+#define WGL_TEXTURE_FORMAT_ARB 0x2072
+#define WGL_TEXTURE_TARGET_ARB 0x2073
+#define WGL_MIPMAP_TEXTURE_ARB 0x2074
+#define WGL_TEXTURE_RGB_ARB 0x2075
+#define WGL_TEXTURE_RGBA_ARB 0x2076
+#define WGL_NO_TEXTURE_ARB 0x2077
+#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078
+#define WGL_TEXTURE_1D_ARB 0x2079
+#define WGL_TEXTURE_2D_ARB 0x207A
+#define WGL_MIPMAP_LEVEL_ARB 0x207B
+#define WGL_CUBE_MAP_FACE_ARB 0x207C
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082
+#define WGL_FRONT_LEFT_ARB 0x2083
+#define WGL_FRONT_RIGHT_ARB 0x2084
+#define WGL_BACK_LEFT_ARB 0x2085
+#define WGL_BACK_RIGHT_ARB 0x2086
+#define WGL_AUX0_ARB 0x2087
+#define WGL_AUX1_ARB 0x2088
+#define WGL_AUX2_ARB 0x2089
+#define WGL_AUX3_ARB 0x208A
+#define WGL_AUX4_ARB 0x208B
+#define WGL_AUX5_ARB 0x208C
+#define WGL_AUX6_ARB 0x208D
+#define WGL_AUX7_ARB 0x208E
+#define WGL_AUX8_ARB 0x208F
+#define WGL_AUX9_ARB 0x2090
+
+/* NV_render_depth_texture */
+#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4
+#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5
+#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6
+#define WGL_DEPTH_COMPONENT_NV 0x20A7
+
+/* NV_float_buffer */
+#define WGL_FLOAT_COMPONENTS_NV 0x20B0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4
+#define WGL_TEXTURE_FLOAT_R_NV 0x20B5
+#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6
+#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7
+#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8
+
+/* NV_render_texture_rectangle */
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1
+#define WGL_TEXTURE_RECTANGLE_NV 0x20A2
+
+/* ARB_make_current_read */
+#define WGL_ERROR_INVALID_PIXEL_TYPE_ARB 0x2043
+#define WGL_ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054
+
+/* ATI_pixel_format_float */
+#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0
+
+/* WGL_NV_video_output */
+#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0
+#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1
+#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2
+#define WGL_VIDEO_OUT_COLOR_NV 0x20C3
+#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4
+#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5
+#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6
+#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7
+#define WGL_VIDEO_OUT_FRAME_NV 0x20C8
+#define WGL_VIDEO_OUT_FIELD_1_NV 0x20C9
+#define WGL_VIDEO_OUT_FIELD_2_NV 0x20CA
+#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB
+#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC
+
+/* ARB_pixel_format_float */
+#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0
+
+/* EXT_pixel_format_packed_float */
+#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8
+
+/* NV_gpu_affinity */
+#define WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0
+#define WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1
+
+/* EXT_framebuffer_sRGB */
+#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9
+
+/* NV_multisample_coverage */
+#define WGL_COVERAGE_SAMPLES_NV 0x2042
+#define WGL_COLOR_SAMPLES_NV 0x20B9
+
+/* NV_present_video */
+#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0
+
+/* ARB_create_context */
+#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001
+#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002
+#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
+#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092
+#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093
+#define WGL_CONTEXT_FLAGS_ARB 0x2094
+#define WGL_ERROR_INVALID_VERSION_ARB 0x2095
+
+/* NV_video_capture */
+#define WGL_UNIQUE_ID_NV 0x20CE
+
+/* EXT_create_context_es2_profile */
+#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x0004
+
+/* ARB_create_context_robustness */
+#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x0004
+#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define WGL_NO_RESET_NOTIFICATION_ARB 0x8261
+#define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252
+
+
+/*************************************************************/
+
+
+/* WGL_ARB_buffer_region */
+typedef HANDLE (GLAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hdc, int iLayerPlane, UINT uType);
+typedef void (GLAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion);
+typedef BOOL (GLAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height);
+typedef BOOL (GLAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
+
+/* WGL_ARB_create_context */
+typedef HGLRC (APIENTRY * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC, HGLRC, const int *);
+
+/* WGL_ARB_extensions_string */
+typedef const char * (GLAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
+
+/* WGL_ARB_pbuffer */
+typedef HPBUFFERARB (GLAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hdc, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+typedef HDC (GLAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer);
+typedef int (GLAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hdc);
+typedef BOOL (GLAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer);
+typedef BOOL (GLAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
+
+/* WGL_ARB_render_texture */
+typedef BOOL (GLAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (GLAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (GLAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int * piAttribList);
+
+/* WGL_NV_video_output */
+typedef BOOL (GLAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, INT iVideoStreams, HPVIDEODEVICE* phpVideoDevice);
+typedef BOOL (GLAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEVICE hpVideoDevice);
+typedef BOOL (GLAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEVICE hpVideoDevice, HPBUFFERARB hPbuffer, INT iVideoBuffer);
+typedef BOOL (GLAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, INT iVideoBuffer);
+typedef BOOL (GLAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, INT iBufferType, unsigned long * pulCounterPbuffer, BOOL bBlock);
+typedef BOOL (GLAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEVICE hpVideoDevice, unsigned long * pulCounterOutputVideo, unsigned long * pulCounterOutputPbuffer);
+
+/* WGL_ARB_pixel_format */
+typedef BOOL (GLAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+typedef BOOL (GLAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+typedef BOOL (GLAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+
+/* WGL_EXT_extensions_string */
+typedef const char * (GLAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void);
+
+/* WGL_EXT_swap_control */
+typedef int (GLAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
+typedef int (GLAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void);
+
+/* WGL_NV_allocate_memory */
+typedef void * (GLAPI * PFNWGLALLOCATEMEMORYNVPROC) (int size, float readfreq, float writefreq, float priority);
+typedef void (GLAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer);
+
+/* WGL_KTX_buffer_region */
+typedef UINT (GLAPI * PFNWGLNEWBUFFERREGIONPROC) (UINT type);
+typedef void (GLAPI * PFNWGLDELETEBUFFERREGIONPROC) (UINT region);
+typedef void (GLAPI * PFNWGLREADBUFFERREGIONPROC) (UINT region, int x, int y, GLint width, GLint height);
+typedef void (GLAPI * PFNWGLDRAWBUFFERREGIONPROC) (UINT region, int x, int y, GLint width, GLint height, int xDest, int yDest);
+typedef UINT (GLAPI * PFNWGLBUFFERREGIONENABLEDPROC) (void);
+
+/* WGL_I3D_genlock */
+typedef BOOL (GLAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hdc);
+typedef BOOL (GLAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hdc);
+typedef BOOL (GLAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hdc, BOOL * pFlag);
+typedef BOOL (GLAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hdc, UINT uSource);
+typedef BOOL (GLAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hdc, UINT * uSource);
+typedef BOOL (GLAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hdc, UINT uEdge);
+typedef BOOL (GLAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hdc, UINT * uEdge);
+typedef BOOL (GLAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hdc, UINT uRate);
+typedef BOOL (GLAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hdc, UINT * uRate);
+typedef BOOL (GLAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hdc, UINT uDelay);
+typedef BOOL (GLAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hdc, UINT * uDelay);
+typedef BOOL (GLAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hdc, UINT * uMaxLineDelay, UINT * uMaxPixelDelay);
+
+/* WGL_NV_swap_group */
+typedef BOOL (GLAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group);
+typedef BOOL (GLAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier);
+typedef BOOL (GLAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint * group, GLuint * barrier);
+typedef BOOL (GLAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint * maxGroups, GLuint * maxBarriers);
+typedef BOOL (GLAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint * count);
+typedef BOOL (GLAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC);
+
+/* WGL_ARB_make_current_read */
+typedef BOOL (GLAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+typedef HDC (GLAPI * PFNWGLGETCURRENTREADDCARBPROC) (void);
+
+/* WGL_NV_copy_image */
+typedef BOOL (GLAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+
+/* WGL_NV_gpu_affinity */
+typedef BOOL (GLAPI * PFNWGLENUMGPUSNVPROC) (UINT iIndex, HGPUNV *hGpu);
+typedef BOOL (GLAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iIndex, PGPU_DEVICE pGpuDevice);
+typedef HDC (GLAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *pGpuList);
+typedef BOOL (GLAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iIndex, HGPUNV *hGpu);
+typedef BOOL (GLAPI * PFNWGLDELETEDCNVPROC) (HDC hAffinityDC);
+
+/* WGL_NV_present_video */
+typedef INT (GLAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList);
+typedef BOOL (GLAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDC, UINT uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int * piAttribList);
+typedef BOOL (GLAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (INT iAttribute, INT *piValue);
+
+/* WGL_NV_video_capture */
+typedef BOOL (GLAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hVideoDevice);
+typedef UINT (GLAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDC, HVIDEOINPUTDEVICENV *phDeviceList);
+typedef BOOL (GLAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDC, HVIDEOINPUTDEVICENV hDevice);
+typedef BOOL (GLAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDC, HVIDEOINPUTDEVICENV hDevice, INT iAttribute, INT *piValue);
+typedef BOOL (GLAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDC, HVIDEOINPUTDEVICENV hDevice);
+
+/* WGL_NVX_DX_interop */
+#define WGL_ACCESS_READ_ONLY_NVX 0x0000
+#define WGL_ACCESS_READ_WRITE_NVX 0x0001
+#define WGL_ACCESS_WRITE_DISCARD_NVX 0x0002
+typedef HANDLE (GLAPI * PFNWGLDXOPENDEVICENVXPROC) (void *dxDevice);
+typedef BOOL (GLAPI * PFNWGLDXCLOSEDEVICENVXPROC) (HANDLE hDevice);
+typedef HANDLE (GLAPI * PFNWGLDXREGISTEROBJECTNVXPROC) (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access);
+typedef BOOL (GLAPI * PFNWGLDXUNREGISTEROBJECTNVXPROC) (HANDLE hDevice, HANDLE hObject);
+typedef BOOL (GLAPI * PFNWGLDXOBJECTACCESSNVXPROC) (HANDLE hObject, GLenum access);
+typedef BOOL (GLAPI * PFNWGLDXLOCKOBJECTSNVXPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects);
+typedef BOOL (GLAPI * PFNWGLDXUNLOCKOBJECTSNVXPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects);
+
+#ifdef __DEFINED_GLAPI
+# undef GLAPI
+# undef __DEFINED_GLAPI
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __wglext_h_ */
diff --git a/src/Runtime/api/api.pro b/src/Runtime/ogl-runtime/src/api/api.pro
index 7d5b27d0..7d5b27d0 100644
--- a/src/Runtime/api/api.pro
+++ b/src/Runtime/ogl-runtime/src/api/api.pro
diff --git a/src/Runtime/api/studio3d/q3dscommandqueue.cpp b/src/Runtime/ogl-runtime/src/api/studio3d/q3dscommandqueue.cpp
index 550dc24f..550dc24f 100644
--- a/src/Runtime/api/studio3d/q3dscommandqueue.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dscommandqueue.cpp
diff --git a/src/Runtime/api/studio3d/q3dscommandqueue_p.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dscommandqueue_p.h
index 12d1b7e3..12d1b7e3 100644
--- a/src/Runtime/api/studio3d/q3dscommandqueue_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dscommandqueue_p.h
diff --git a/src/Runtime/ogl-runtime/src/api/studio3d/q3dsdatainput.cpp b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsdatainput.cpp
new file mode 100644
index 00000000..2e6281e6
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsdatainput.cpp
@@ -0,0 +1,403 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "q3dsdatainput_p.h"
+#include "q3dspresentation_p.h"
+#include "q3dscommandqueue_p.h"
+
+#include <QtCore/qdebug.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \qmltype DataInput
+ \instantiates Q3DSDataInput
+ \inqmlmodule Qt3DStudio
+ \ingroup OpenGLRuntime
+ \brief Controls a data input entry in a Qt 3D Studio presentation.
+ This class is a convenience class for controlling a data input in a presentation.
+ DataInput provides a clean contract between the presentation design and the code.
+ It hides the presentation details from the code while providing a contractual access
+ point to code for controlling aspects of the presentation (e.g. timeline of a
+ subpresentation). It also allows the design to use a single DataInput to drive
+ multiple aspects of the design (e.g. DataInput for speed can change the color of
+ the speedometer, angle of the needle).
+
+ \note There is a performance cost for each registered DataInput, so try to avoid
+ creating unnecessary DataInputs.
+
+ \sa Presentation, DataOutput, Presentation::slideExited, Presentation::slideEntered
+ \sa Presentation::customSignalEmitted
+*/
+
+/*!
+ \class Q3DSDataInput
+ \inmodule OpenGLRuntime
+ \since Qt 3D Studio 2.0
+ \brief Controls a data input entry in a Qt 3D Studio presentation.
+ This class is a convenience class for controlling a data input in a presentation.
+ DataInput provides a clean contract between the presentation design and the code.
+ It hides the presentation details from the code while providing a contractual access
+ point to code for controlling aspects of the presentation (e.g. timeline of a
+ subpresentation). It also allows the design to use a single DataInput to drive
+ multiple aspects of the design (e.g. DataInput for speed can change the color of
+ the speedometer, angle of the needle).
+
+ \note There is a performance cost for each registered DataInput, so try to avoid
+ creating unnecessary DataInputs.
+
+ For other integration points between code and presentation see:
+ \sa Q3DSPresentation::customSignalEmitted
+ \sa Q3DSPresentation::slideEntered
+ \sa Q3DSPresentation::slideExited
+ \sa Q3DSDataOutput
+
+ \sa Q3DSPresentation
+*/
+
+/*!
+ \internal
+ */
+Q3DSDataInput::Q3DSDataInput(QObject *parent)
+ : QObject(parent)
+ , d_ptr(new Q3DSDataInputPrivate(this))
+{
+}
+
+/*!
+ \internal
+ */
+Q3DSDataInput::Q3DSDataInput(const QString &name, QObject *parent)
+ : QObject(parent)
+ , d_ptr(new Q3DSDataInputPrivate(this))
+{
+ d_ptr->m_name = name;
+}
+
+/*!
+ Constructs a Q3DSDataInput instance and initializes the \a name. The
+ constructed instance is automatically associated with the specified \a
+ presentation. An optional \a parent object can be specified.
+ */
+Q3DSDataInput::Q3DSDataInput(Q3DSPresentation *presentation, const QString &name, QObject *parent)
+ : QObject(parent)
+ , d_ptr(new Q3DSDataInputPrivate(this))
+{
+ d_ptr->m_name = name;
+ d_ptr->m_presentation = presentation;
+ if (presentation)
+ presentation->registerDataInput(this);
+}
+
+/*!
+ \internal
+ */
+Q3DSDataInput::Q3DSDataInput(Q3DSDataInputPrivate *d, Q3DSPresentation *presentation,
+ const QString &name, QObject *parent)
+ : QObject(parent)
+ , d_ptr(d)
+{
+ d_ptr->m_name = name;
+ d_ptr->m_presentation = presentation;
+ if (presentation)
+ presentation->registerDataInput(this);
+}
+
+/*!
+ Destructor.
+ */
+Q3DSDataInput::~Q3DSDataInput()
+{
+ delete d_ptr;
+}
+
+/*!
+ \qmlproperty string DataInput::name
+
+ Specifies the name of the controlled data input element in the
+ presentation. The name must match a name of a data input defined
+ in the presentation. This property must be set before setting the
+ value property.
+ */
+
+/*!
+ \property Q3DSDataInput::name
+
+ Specifies the name of the controlled data input element in the
+ presentation. The name must match a name of a data input defined
+ in the presentation.
+
+ This property must be set before setting the value property.
+ The initial value is provided via the constructor, but the name
+ can also be changed later on.
+ */
+QString Q3DSDataInput::name() const
+{
+ return d_ptr->m_name;
+}
+
+void Q3DSDataInput::setName(const QString &name)
+{
+ if (d_ptr->m_name != name) {
+ d_ptr->m_name = name;
+ if (d_ptr->m_presentation)
+ d_ptr->m_presentation->registerDataInput(this);
+ Q_EMIT nameChanged();
+ }
+}
+
+/*!
+ \qmlproperty variant DataInput::value
+
+ Specifies the value of the controlled data input element in the
+ presentation.
+
+ The value of this property only accounts for changes done via the same
+ Q3DSDataInput instance. If the value of the same data input in the
+ presentation is changed elsewhere, for example via animations or
+ Q3DSPresentation::setAttribute(), those changes are not reflected in the
+ value of this property. Due to this uncertainty, this property treats all
+ value sets as changes even if the newly set value is the same value as the
+ previous value.
+
+ To get actual values from the presentation, use DataOutput.
+ \sa DataOutput
+*/
+/*!
+ \property Q3DSDataInput::value
+
+ Specifies the value of the controlled data input element in the
+ presentation.
+
+ The value of this property only accounts for changes done via the same
+ Q3DSDataInput instance. If the value of the same data input in the
+ presentation is changed elsewhere, for example via animations or
+ Q3DSPresentation::setAttribute(), those changes are not reflected in the
+ value of this property. Due to this uncertainty, this property treats all
+ value sets as changes even if the newly set value is the same value as the
+ previous value.
+
+ To get actual values from the presentation, use DataOutput.
+ \sa DataOutput
+*/
+QVariant Q3DSDataInput::value() const
+{
+ return d_ptr->m_value;
+}
+
+/*!
+ \property Q3DSDataInput::min
+
+ Contains the minimum range value for datainput. Returned value is zero
+ for datainput types other than \e {Ranged Number}.
+
+ \note This value is read-only.
+ */
+float Q3DSDataInput::min() const
+{
+ if (!d_ptr->m_presentation)
+ return 0.0f;
+
+ return d_ptr->m_presentation->d_ptr->dataInputMin(d_ptr->m_name);
+}
+
+/*!
+ \property Q3DSDataInput::max
+
+ Contains the maximum range value for datainput. Returned value is zero
+ for datainput types other than \e {Ranged Number}.
+
+ \note This value is read-only.
+ */
+float Q3DSDataInput::max() const
+{
+ if (!d_ptr->m_presentation)
+ return 0.0f;
+
+ return d_ptr->m_presentation->d_ptr->dataInputMax(d_ptr->m_name);
+}
+
+/*!
+ Returns true if presentation (or its subpresentation) associated with
+ this datainput has a datainput definition with a matching name. Returns
+ false if the datainput has no associated presentation, or if a match is not found.
+ */
+bool Q3DSDataInput::isValid() const
+{
+ if (d_ptr->m_presentation)
+ return d_ptr->m_presentation->d_ptr->isValidDataInput(this);
+ else
+ return false;
+}
+
+/*!
+ \brief Q3DSDataInput::setValue Set value of the data input.
+ \param value New value to be set.
+ \note For performance reasons do not call setValue unnecessarily.
+ */
+void Q3DSDataInput::setValue(const QVariant &value)
+{
+ // Since properties controlled by data inputs can change without the current value being
+ // reflected on the value of the DataInput element, we allow setting the value to the
+ // same one it was previously and still consider it a change.
+ // For example, when controlling timeline, the value set to DataInput will only be
+ // the current value for one frame if presentation has a running animation.
+ // In order to track an element property, see DataOutput API.
+ d_ptr->setValue(value, ValueRole::Value);
+ Q_EMIT valueChanged();
+}
+
+void Q3DSDataInputPrivate::setPresentation(Q3DSPresentation *presentation)
+{
+ m_presentation = presentation;
+}
+
+Q3DSDataInputPrivate::Q3DSDataInputPrivate(Q3DSDataInput *parent)
+ : q_ptr(parent)
+{
+}
+
+Q3DSDataInputPrivate::~Q3DSDataInputPrivate()
+{
+ if (m_presentation)
+ m_presentation->unregisterDataInput(q_ptr);
+}
+
+void Q3DSDataInputPrivate::setValue(const QVariant &value, Q3DSDataInput::ValueRole valueRole)
+{
+ m_value = value;
+ if (m_presentation)
+ m_presentation->setDataInputValue(m_name, m_value, valueRole);
+}
+
+void Q3DSDataInputPrivate::setViewerApp(Q3DSViewer::Q3DSViewerApp *app)
+{
+ m_viewerApp = app;
+
+ if (m_viewerApp && m_value.isValid())
+ setValue(m_value);
+}
+
+void Q3DSDataInputPrivate::setCommandQueue(CommandQueue *queue)
+{
+ m_commandQueue = queue;
+
+ if (m_commandQueue && m_value.isValid())
+ setValue(m_value);
+}
+
+
+/*!
+ \qmltype DataInput
+ \instantiates Q3DSDataInput
+ \inqmlmodule QtStudio3D
+ \ingroup OpenGLRuntime
+
+ \brief Controls a data input entry in a Qt 3D Studio presentation.
+
+ This type is a convenience for controlling a data in a presentation. Its functionality is
+ equivalent to \c{Presentation::setDataInputValue()}, however it has a big advantage
+ of being able to use QML property bindings, thus avoiding the need to having to resort
+ to a JavaScript function call for every value change.
+
+ As an example:
+
+ \qml
+ Studio3D {
+ ...
+ Presentation {
+ id: presentation
+ ...
+ property string text: ""
+ DataInput {
+ name: "inputForSomeTextNode"
+ value: presentation.text
+ }
+ }
+ }
+
+ Button {
+ onClicked: presentation.text = "Hello World"
+ }
+ \endqml
+
+ The example assumes that a data input connection was made in Qt 3D Studio
+ presentation using Qt 3D Studio editor between the \c textstring property of
+ target property and a data input name \c inputForSomeTextNode. As the value
+ is now set via a property, the full set of QML property bindings techniques
+ are available.
+
+ \sa Studio3D, Presentation
+*/
+
+/*!
+ \qmlproperty string DataInput::name
+
+ Specifies the name of the controlled data input element in the
+ presentation. This property must be set as part of DataInput declaration,
+ although it is changeable afterwards, if desired.
+*/
+
+/*!
+ \qmlproperty variant DataInput::value
+
+ Specifies the value of the controlled data input element in the presentation.
+
+ The value of this property only accounts for changes done via the same
+ DataInput instance. If the value of the underlying attribute in the
+ presentation is changed elsewhere, for example via animations or
+ Presentation::setAttribute(), those changes are not reflected in the value
+ of this property. Due to this uncertainty, this property treats all value
+ sets as changes even if the newly set value is the same value as the
+ previous value.
+*/
+
+/*!
+ \qmlproperty real DataInput::min
+
+ Contains the minimum value of the controlled data input element range.
+
+ This property is applicable only to data input type \e {Ranged Number}. For other
+ types, value returned is zero.
+
+ \note This value is read-only.
+*/
+
+/*!
+ \qmlproperty real DataInput::max
+
+ Contains the maximum value of the controlled data input element range.
+
+ This property is applicable only to data input type \e {Ranged Number}. For other
+ types, value returned is zero.
+
+ \note This value is read-only.
+*/
+
+QT_END_NAMESPACE
diff --git a/src/Runtime/api/studio3d/q3dsdatainput.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsdatainput.h
index d57b5f18..4504e5d2 100644
--- a/src/Runtime/api/studio3d/q3dsdatainput.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsdatainput.h
@@ -46,8 +46,8 @@ class Q_STUDIO3D_EXPORT Q3DSDataInput : public QObject
Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged)
- Q_PROPERTY(float max READ max WRITE setMax NOTIFY maxChanged)
- Q_PROPERTY(float min READ min WRITE setMin NOTIFY minChanged)
+ Q_PROPERTY(float max READ max CONSTANT)
+ Q_PROPERTY(float min READ min CONSTANT)
public:
explicit Q3DSDataInput(QObject *parent = nullptr);
explicit Q3DSDataInput(const QString &name, QObject *parent = nullptr);
@@ -71,14 +71,10 @@ public:
public Q_SLOTS:
void setName(const QString &name);
void setValue(const QVariant &value);
- void setMin(float min);
- void setMax(float max);
Q_SIGNALS:
void nameChanged();
void valueChanged();
- void minChanged();
- void maxChanged();
protected:
explicit Q3DSDataInput(Q3DSDataInputPrivate *d, Q3DSPresentation *presentation,
@@ -88,6 +84,7 @@ protected:
private:
Q_DISABLE_COPY(Q3DSDataInput)
friend class Q3DSPresentationPrivate;
+ friend class Q3DSRenderer;
};
QT_END_NAMESPACE
diff --git a/src/Runtime/api/studio3d/q3dsdatainput_p.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsdatainput_p.h
index 8f5be06f..6107add9 100644
--- a/src/Runtime/api/studio3d/q3dsdatainput_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsdatainput_p.h
@@ -75,6 +75,7 @@ protected:
float m_min = 0;
friend class Q3DSPresentationPrivate;
+ friend class Q3DSRenderer;
};
QT_END_NAMESPACE
diff --git a/src/Runtime/ogl-runtime/src/api/studio3d/q3dsdataoutput.cpp b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsdataoutput.cpp
new file mode 100644
index 00000000..3cb13a0e
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsdataoutput.cpp
@@ -0,0 +1,225 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "q3dsdataoutput_p.h"
+#include "q3dspresentation_p.h"
+#include "q3dscommandqueue_p.h"
+
+/*!
+ \qmltype DataOutput
+ \instantiates Q3DSDataOutput
+ \inqmlmodule Qt3DStudio
+ \ingroup OpenGLRuntime
+ \brief Provides notifications from data output entries in Qt 3D Studio presentation.
+ This class is a convenience class for listening for changes in the Qt 3D Studio
+ presentation attributes. DataOutput provides a clean contract between the presentation
+ design and the code. It hides the presentation details from the code while providing a
+ contractual access point to code to be notified when aspects of the presentation change
+ (e.g. movement of an element in the presentation due to timeline animation).
+
+ DataOutput can be attached to same attributes in the design as DataInput is, including
+ presentation timeline. Only exception is slide changes. Slide changes are already notified
+ through \c{Presentation::slideEntered} and \c{Presentation::slideExited} signals.
+
+ \note There is a performance cost for each registered DataOutput, so try to avoid
+ creating unnecessary DataOutputs.
+
+ \sa Presentation, DataInput, Presentation::slideExited, Presentation::slideEntered
+ \sa Presentation::customSignalEmitted
+*/
+
+/*!
+ \class Q3DSDataOutput
+ \inmodule OpenGLRuntime
+ \since Qt 3D Studio 2.4
+ \brief Provides notifications from data output entries in Qt 3D Studio presentation.
+ This class is a convenience class for listening for changes in the Qt 3D Studio
+ presentation attributes. DataOutput provides a clean contract between the presentation
+ design and the code. It hides the presentation details from the code while providing a
+ contractual access point to code to be notified when aspects of the presentation change
+ (e.g. movement of an element in the presentation due to timeline animation).
+
+ DataOutput can be attached to same attributes in the design as DataInput is, including
+ presentation timeline. Only excaption is slide changes Slide changes are already notified
+ through \c{Q3DSPresentation::slideEntered} and \c{Q3DSPresentation::slideExited} signals.
+
+ \note There is a performance cost for each registered DataOutput, so try to avoid
+ creating unnecessary DataOutputs.
+
+ For other integration points between code and presentation see:
+ \sa Q3DSPresentation::customSignalEmitted
+ \sa Q3DSPresentation::slideEntered
+ \sa Q3DSPresentation::slideExited
+ \sa Q3DSDataInput
+
+ \sa Q3DSPresentation
+*/
+Q3DSDataOutput::Q3DSDataOutput(QObject *parent)
+ : QObject(parent)
+ , d_ptr(new Q3DSDataOutputPrivate(this))
+{
+
+}
+
+Q3DSDataOutput::Q3DSDataOutput(const QString &name, QObject *parent)
+ : QObject(parent)
+ , d_ptr(new Q3DSDataOutputPrivate(this))
+{
+ d_ptr->m_name = name;
+}
+
+Q3DSDataOutput::~Q3DSDataOutput()
+{
+ delete d_ptr;
+}
+
+/*!
+ \qmlproperty string DataOutput::name
+
+ Specifies the name of the observed data output element in the
+ presentation. The name must match a name of a data output defined
+ in the presentation. This property must be set before setting the value
+ property.
+ */
+
+/*!
+ \property Q3DSDataOutput::name
+
+ Specifies the name of the observed data output element in the
+ presentation. The name must match a name of a data output defined
+ in the presentation.
+
+ This property must be set before setting the value property.
+ The initial value is provided via the constructor, but the name
+ can also be changed later on.
+ */
+QString Q3DSDataOutput::name() const
+{
+ return d_ptr->m_name;
+}
+
+void Q3DSDataOutput::setName(const QString &name)
+{
+ if (d_ptr->m_name != name) {
+ d_ptr->m_name = name;
+ if (d_ptr->m_presentation)
+ d_ptr->m_presentation->registerDataOutput(this);
+ Q_EMIT nameChanged(name);
+ }
+}
+
+/*!
+ \qmlproperty DataOutput::value
+
+ Contains the read-only value of the controlled data output element in the
+ presentation.
+
+ The value of this property accounts for actual value in the last processed
+ frame of the presentation. This includes animation timeline driven changes,
+ changes done via DataInput and changes done via Behavior scripts.
+*/
+
+/*!
+ \property Q3DSDataOutput::value
+
+ Contains the read-only value of the controlled data output element in the
+ presentation.
+
+ The value of this property accounts for actual value in the last processed
+ frame of the presentation. This includes animation timeline driven changes,
+ changes done via DataInput and changes done via Behavior scripts.
+*/
+QVariant Q3DSDataOutput::value() const
+{
+ return d_ptr->m_value;
+}
+
+/*!
+ * \qmlsignal DataOutput::valueChanged
+ Emitted when the value of the observed DataOutput has changed in the
+ presentation.
+ \param newValue The new value of the observed DataOutput.
+ */
+
+/*!
+ \fn Q3DSDataOutput::valueChanged
+ Emitted when the value of the observed DataOutput has changed in the
+ presentation.
+ \param newValue The new value of the observed DataOutput.
+ */
+
+/*!
+ * \internal
+ */
+void Q3DSDataOutput::setValue(const QVariant &value)
+{
+ if (d_ptr->m_value == value)
+ return;
+
+ d_ptr->m_value = value;
+ Q_EMIT valueChanged(value);
+}
+
+void Q3DSDataOutputPrivate::setPresentation(Q3DSPresentation *presentation)
+{
+ m_presentation = presentation;
+}
+
+Q3DSDataOutputPrivate::Q3DSDataOutputPrivate(Q3DSDataOutput *parent)
+ : q_ptr(parent)
+{
+}
+
+Q3DSDataOutputPrivate::~Q3DSDataOutputPrivate()
+{
+ if (m_presentation)
+ m_presentation->unregisterDataOutput(q_ptr);
+}
+
+void Q3DSDataOutputPrivate::setValue(const QVariant &value)
+{
+ m_value = value;
+ Q_EMIT q_ptr->valueChanged(value);
+}
+
+void Q3DSDataOutputPrivate::setViewerApp(Q3DSViewer::Q3DSViewerApp *app)
+{
+ m_viewerApp = app;
+
+ if (m_viewerApp && m_value.isValid())
+ setValue(m_value);
+}
+
+void Q3DSDataOutputPrivate::setCommandQueue(CommandQueue *queue)
+{
+ m_commandQueue = queue;
+
+ if (m_commandQueue && m_value.isValid())
+ setValue(m_value);
+}
diff --git a/src/Runtime/api/studio3d/q3dsdataoutput.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsdataoutput.h
index 93f74267..93f74267 100644
--- a/src/Runtime/api/studio3d/q3dsdataoutput.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsdataoutput.h
diff --git a/src/Runtime/api/studio3d/q3dsdataoutput_p.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsdataoutput_p.h
index c4745bfb..c4745bfb 100644
--- a/src/Runtime/api/studio3d/q3dsdataoutput_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsdataoutput_p.h
diff --git a/src/Runtime/api/studio3d/q3dselement.cpp b/src/Runtime/ogl-runtime/src/api/studio3d/q3dselement.cpp
index ac3221dd..16ae1102 100644
--- a/src/Runtime/api/studio3d/q3dselement.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dselement.cpp
@@ -37,12 +37,58 @@
QT_BEGIN_NAMESPACE
+/*!
+ \qmltype Element
+ \instantiates Q3DSElement
+ \inqmlmodule Qt3DStudio
+ \ingroup OpenGLRuntime
+ \brief Control type for elements in a Qt 3D Studio presentation.
+
+ This class is provided for backwards compatibility. We recommend using
+ DataInput and DataOutput APIs for contractual and clean API between
+ the design and the code.
+
+ \sa DataInput, DataOutput
+
+ This type is a convenience for controlling the properties of a scene object
+ (such as, model, material, camera, layer) in a Qt 3D Studio presentation.
+
+ \note The functionality of Element is equivalent to
+ Presentation::setAttribute() and Presentation::fireEvent().
+
+ \sa Studio3D, SceneElement, Presentation, DataInput, DataOutput
+*/
+
+/*!
+ \class Q3DSElement
+ \inmodule OpenGLRuntime
+ \since Qt 3D Studio 2.0
+
+ \brief Controls a scene object (node) in a Qt 3D Studio presentation.
+
+ This class is provided for backwards compatibility. We recommend using
+ DataInput and DataOutput APIs for contractual and clean API between
+ the design and the code.
+
+ This class is a convenience class for controlling the properties of a scene
+ object (such as, model, material, camera, layer) in a Qt 3D Studio
+ presentation.
+
+ \sa Q3DSWidget, Q3DSSurfaceViewer, Q3DSSceneElement
+ */
+
+/*!
+ \internal
+ */
Q3DSElement::Q3DSElement(QObject *parent)
: QObject(parent)
, d_ptr(new Q3DSElementPrivate(this))
{
}
+/*!
+ \internal
+ */
Q3DSElement::Q3DSElement(const QString &elementPath, QObject *parent)
: QObject(parent)
, d_ptr(new Q3DSElementPrivate(this))
@@ -50,6 +96,12 @@ Q3DSElement::Q3DSElement(const QString &elementPath, QObject *parent)
d_ptr->m_elementPath = elementPath;
}
+/*!
+ Constructs a Q3DSElement instance controlling the scene object specified by
+ \a elementPath. An optional \a parent object can be specified. The
+ constructed instance is automatically associated with the specified \a
+ presentation. An optional \a parent object can be specified.
+ */
Q3DSElement::Q3DSElement(Q3DSPresentation *presentation, const QString &elementPath,
QObject *parent)
: QObject(parent)
@@ -60,6 +112,9 @@ Q3DSElement::Q3DSElement(Q3DSPresentation *presentation, const QString &elementP
presentation->registerElement(this);
}
+/*!
+ \internal
+ */
Q3DSElement::Q3DSElement(Q3DSElementPrivate *d, Q3DSPresentation *presentation,
const QString &elementPath, QObject *parent)
: QObject(parent)
@@ -70,12 +125,54 @@ Q3DSElement::Q3DSElement(Q3DSElementPrivate *d, Q3DSPresentation *presentation,
presentation->registerElement(this);
}
+/*!
+ Destructor.
+ */
Q3DSElement::~Q3DSElement()
{
// Private class isn't QObject, so we need to delete it explicitly
delete d_ptr;
}
+/*!
+ \qmlproperty string Element::elementPath
+
+ Holds the element path of the presentation element.
+
+ An element path refers to an object in the scene by name, for example,
+ \c{Scene.Layer.Camera}. Here the right camera object gets chosen even if
+ the scene contains other layers with the default camera names (for instance
+ \c{Scene.Layer2.Camera}).
+
+ To reference an object stored in a property of another object, the dot
+ syntax can be used. The most typical example of this is changing the source
+ of a texture map by changing the \c sourcepath property on the object
+ selected by \c{SomeMaterial.diffusemap}.
+
+ To access an object in a sub-presentation, prepend the name of the
+ sub-presentation followed by a colon, for example,
+ \c{SubPresentationOne:Scene.Layer.Camera}.
+ */
+
+/*!
+ \property Q3DSElement::elementPath
+
+ Holds the element path of the presentation element.
+
+ An element path refers to an object in the scene by name, for example,
+ \c{Scene.Layer.Camera}. Here the right camera object gets chosen even if
+ the scene contains other layers with the default camera names (for instance
+ \c{Scene.Layer2.Camera}).
+
+ To reference an object stored in a property of another object, the dot
+ syntax can be used. The most typical example of this is changing the source
+ of a texture map by changing the \c sourcepath property on the object
+ selected by \c{SomeMaterial.diffusemap}.
+
+ To access an object in a sub-presentation, prepend the name of the
+ sub-presentation followed by a colon, for example,
+ \c{SubPresentationOne:Scene.Layer.Camera}.
+ */
QString Q3DSElement::elementPath() const
{
return d_ptr->m_elementPath;
@@ -89,6 +186,20 @@ void Q3DSElement::setElementPath(const QString &elementPath)
}
}
+/*!
+ \qmlmethod void Element::setAttribute(string attributeName, variant value)
+
+ Sets the \a value of an attribute (property) of the scene object specified
+ by this Element instance. The \a attributeName is the \l{Attribute
+ Names}{scripting name} of the attribute.
+*/
+
+/*!
+ Sets the \a value of an attribute (property) of the scene object
+ specified by elementPath.
+
+ The \a attributeName is the \l{Attribute Names}{scripting name} of the attribute.
+ */
void Q3DSElement::setAttribute(const QString &attributeName, const QVariant &value)
{
if (d_ptr->m_presentation)
@@ -97,6 +208,25 @@ void Q3DSElement::setAttribute(const QString &attributeName, const QVariant &val
qWarning() << __FUNCTION__ << "Element is not registered to any presentation!";
}
+/*!
+ \qmlmethod void Element::fireEvent(string eventName)
+
+ Dispatches an event with \a eventName on the scene object
+ specified by elementPath.
+
+ Appropriate actions created in Qt 3D Studio or callbacks registered using
+ the registerForEvent() method in attached \c{behavior scripts} will be
+ executed in response to the event.
+*/
+
+/*!
+ Dispatches an event with \a eventName on the scene object
+ specified by elementPath.
+
+ Appropriate actions created in Qt 3D Studio or callbacks registered using
+ the registerForEvent() method in attached (behavior) scripts will be
+ executed in response to the event.
+ */
void Q3DSElement::fireEvent(const QString &eventName)
{
if (d_ptr->m_presentation)
diff --git a/src/Runtime/api/studio3d/q3dselement.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dselement.h
index 04c43f52..04c43f52 100644
--- a/src/Runtime/api/studio3d/q3dselement.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dselement.h
diff --git a/src/Runtime/api/studio3d/q3dselement_p.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dselement_p.h
index d4e77b1c..d4e77b1c 100644
--- a/src/Runtime/api/studio3d/q3dselement_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dselement_p.h
diff --git a/src/Runtime/api/studio3d/q3dsgeometry.cpp b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsgeometry.cpp
index bfc66a96..bfc66a96 100644
--- a/src/Runtime/api/studio3d/q3dsgeometry.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsgeometry.cpp
diff --git a/src/Runtime/api/studio3d/q3dsgeometry.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsgeometry.h
index b9b66e98..b9b66e98 100644
--- a/src/Runtime/api/studio3d/q3dsgeometry.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsgeometry.h
diff --git a/src/Runtime/api/studio3d/q3dsgeometry_p.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsgeometry_p.h
index 586b0d7b..586b0d7b 100644
--- a/src/Runtime/api/studio3d/q3dsgeometry_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsgeometry_p.h
diff --git a/src/Runtime/api/studio3d/q3dsimagesequencegenerator.cpp b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsimagesequencegenerator.cpp
index d0b8251b..d0b8251b 100644
--- a/src/Runtime/api/studio3d/q3dsimagesequencegenerator.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsimagesequencegenerator.cpp
diff --git a/src/Runtime/api/studio3d/q3dsimagesequencegenerator_p.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsimagesequencegenerator_p.h
index bc56fb1e..bc56fb1e 100644
--- a/src/Runtime/api/studio3d/q3dsimagesequencegenerator_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsimagesequencegenerator_p.h
diff --git a/src/Runtime/api/studio3d/q3dsimagesequencegeneratorthread.cpp b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsimagesequencegeneratorthread.cpp
index 40bb95b9..0968e3f1 100644
--- a/src/Runtime/api/studio3d/q3dsimagesequencegeneratorthread.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsimagesequencegeneratorthread.cpp
@@ -131,7 +131,7 @@ void Q3DSImageSequenceGeneratorThread::run() {
viewer.setAutoSize(false);
viewer.setSize(size);
- if (!viewer.initialize(m_surface, m_context, fbo.handle())) {
+ if (!viewer.create(m_surface, m_context, fbo.handle())) {
QString error = QObject::tr("Viewer initialization failed.");
qWarning() << "Generating image sequence failed -" << error;
Q_EMIT generationFinished(false, error);
diff --git a/src/Runtime/api/studio3d/q3dsimagesequencegeneratorthread_p.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsimagesequencegeneratorthread_p.h
index 45869a69..45869a69 100644
--- a/src/Runtime/api/studio3d/q3dsimagesequencegeneratorthread_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsimagesequencegeneratorthread_p.h
diff --git a/src/Runtime/api/studio3d/q3dspresentation.cpp b/src/Runtime/ogl-runtime/src/api/studio3d/q3dspresentation.cpp
index 8370dbb6..204b2035 100644
--- a/src/Runtime/api/studio3d/q3dspresentation.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dspresentation.cpp
@@ -42,71 +42,266 @@
QT_BEGIN_NAMESPACE
+/*!
+ \class Q3DSPresentation
+ \inmodule OpenGLRuntime
+ \since Qt 3D Studio 2.0
+
+ \brief Represents a Qt 3D Studio presentation.
+
+ This class provides properties and methods for controlling a
+ presentation.
+
+ Qt 3D Studio supports multiple presentations in one project. There
+ is always a main presentation and zero or more
+ subpresentations. The subpresentations are composed into the
+ main presentations either as contents of Qt 3D Studio layers or as
+ texture maps.
+
+ In the filesystem each presentation corresponds to one \c{.uip}
+ presentation file. When present, the \c{.uia} project file ties
+ these together by specifying a name for each of the
+ (sub-)presentations and specifies which one is the main one.
+
+ The \c{.uia} project also defines \l{DataInput}s and
+ \l{DataOutput}s that are exported by the presentations.
+ \l{DataInput}s provide a way to provide input to the presentation
+ to e.g. control a timeline of a subpresentation from code.
+ \c{DataOutput}s provide a way to get notified when an attribute
+ is changed in the presentation by animation timeline,
+ by behavior scripts or by a \l{DataInput}.
+
+ From the API point of view Q3DSPresentation corresponds to the
+ main presentation. The source property can refer either to a
+ \c{.uia} or \c{.uip} file. When specifying a file with \c{.uip}
+ extension and a \c{.uia} is present with the same name, the
+ \c{.uia} is loaded automatically and thus sub-presentation
+ information is available regardless.
+
+ \note This class should not be instantiated directly when working with the
+ C++ APIs. Q3DSSurfaceViewer and Q3DSWidget create a Q3DSPresentation
+ instance implicitly. This can be queried via
+ Q3DSSurfaceViewer::presentation() or Q3DSWidget::presentation().
+ */
+
+/*!
+ Constructs a new Q3DSPresentation with the given \a parent.
+ */
Q3DSPresentation::Q3DSPresentation(QObject *parent)
: QObject(parent)
, d_ptr(new Q3DSPresentationPrivate(this))
{
}
+/*!
+ Destructor.
+ */
Q3DSPresentation::~Q3DSPresentation()
{
}
+/*!
+ \qmlproperty string Presentation::source
+
+ Holds the name of the main presentation file (\c{*.uia} or
+ \c{*.uip}). This may be either a local file or qrc URL.
+
+ The names of all further assets (image files for texture maps, qml
+ behavior scripts, mesh files) will be resolved relative to the
+ location of the presentation, unless they use absolute paths. This
+ allows bundling all assets next to the presentation in the Qt
+ resource system.
+
+ Currently set \c{variantList} property will modify which variant groups
+ and tags are loaded from the presentations. See
+ Q3DSPresentation::variantList property.
+*/
+
+/*!
+ \property Q3DSPresentation::source
+
+ Holds the name of the main presentation file (\c{*.uia} or
+ \c{*.uip}). This may be either a local file or qrc URL.
+
+ The names of all further assets (image files for texture maps, qml
+ behavior scripts, mesh files) will be resolved relative to the
+ location of the presentation, unless they use absolute paths. This
+ allows bundling all assets next to the presentation in the Qt
+ resource system.
+
+ Currently set variantList will modify which variant groups
+ and tags are loaded from the presentations. See
+ Q3DSPresentation::variantList property.
+*/
QUrl Q3DSPresentation::source() const
{
return d_ptr->m_source;
}
+void Q3DSPresentation::setSource(const QUrl &source)
+{
+ if (d_ptr->m_source != source) {
+ d_ptr->setSource(source);
+ Q_EMIT sourceChanged(source);
+ }
+}
+
+/*!
+ \qmlproperty variant Presentation::variantList
+
+ Holds a list of (variant group):(variant) tags that are loaded when the
+ \c{source} property is set. If this list is left empty (default), no variant
+ filtering is applied and all items are loaded regardless of variant tags in
+ the presentation. Variant mechanism allows one presentation project to
+ contain multiple variants of the presentation and the decision which variant
+ set is loaded is determined during runtime based on the \c{variantList}.
+
+ Variants are divided to variant groups, e.g. one variant group could be
+ \c{region} and the variants within that group could be e.g. \c{US, EU, CH}.
+ Another variant group could be e.g. \c{power} and variants within that could
+ be e.g. \c{gas, electric, diesel}. To filter in this example an electric
+ variant for the EU region, the variantList needs to contain two strings
+ "region:EU" and "power:electric". Also of course the presentation project
+ needs to contain these variant groups and tags applied appropriately to the
+ presentation content.
+
+ When variant filters are used, the decision what gets loaded and what is not
+ loaded is based on checking every item in the presentation:
+ \list
+ \li If the item has no variant tags, it will be loaded.
+ \li If the item has no tags defined for the checked variant group(s),
+ it will be loaded.
+ \li If the item has tag(s) for the variant group, any of those tags must
+ match any of the variants defined in the filter for that group.
+ \endlist
+
+ If the item doesn't fulfill the above rules it will not be loaded.
+*/
+
+/*!
+ \property Q3DSPresentation::variantList
+
+ Holds a list of (variant group):(variant) tags that are loaded when the
+ \c{source} property is set. If this list is left empty (default), no variant
+ filtering is applied and all items are loaded regardless of variant tags in
+ the presentation. Variant mechanism allows one presentation project to
+ contain multiple variants of the presentation and the decision which variant
+ set is loaded is determined during runtime based on the \c{variantList}.
+
+ Variants are divided to variant groups, e.g. one variant group could be
+ \c{region} and the variants within that group could be e.g. \c{US, EU, CH}.
+ Another variant group could be e.g. \c{power} and variants within that could
+ be e.g. \c{gas, electric, diesel}. To filter in this example an electric
+ variant for the EU region, the variantList needs to contain two strings
+ "region:EU" and "power:electric". Also of course the presentation project
+ needs to contain these variant groups and tags applied appropriately to the
+ presentation content.
+
+ When variant filters are used, the decision what gets loaded and what is not
+ loaded is based on checking every item in the presentation:
+ \list
+ \li If the item has no variant tags, it will be loaded.
+ \li If the item has no tags defined for the checked variant group(s),
+ it will be loaded.
+ \li If the item has tag(s) for the variant group, any of those tags must
+ match any of the variants defined in the filter for that group.
+ \endlist
+
+ If the item doesn't fulfill the above rules it will not be loaded.
+*/
QStringList Q3DSPresentation::variantList() const
{
return d_ptr->m_variantList;
}
+void Q3DSPresentation::setVariantList(const QStringList &variantList)
+{
+ if (d_ptr->m_variantList != variantList) {
+ d_ptr->setVariantList(variantList);
+ Q_EMIT variantListChanged(variantList);
+ }
+}
+
+/*!
+ \internal
+ */
void Q3DSPresentation::registerElement(Q3DSElement *element)
{
d_ptr->registerElement(element);
}
+/*!
+ \internal
+ */
void Q3DSPresentation::unregisterElement(Q3DSElement *element)
{
d_ptr->unregisterElement(element);
}
+/*!
+ \internal
+ */
Q3DSElement *Q3DSPresentation::registeredElement(const QString &elementPath) const
{
return d_ptr->m_elements.value(elementPath, nullptr);
}
+/*!
+ \internal
+ */
void Q3DSPresentation::registerDataInput(Q3DSDataInput *dataInput)
{
d_ptr->registerDataInput(dataInput);
}
+/*!
+ \internal
+ */
void Q3DSPresentation::unregisterDataInput(Q3DSDataInput *dataInput)
{
d_ptr->unregisterDataInput(dataInput);
}
+/*!
+ \internal
+ */
Q3DSDataInput *Q3DSPresentation::registeredDataInput(const QString &name) const
{
return d_ptr->m_dataInputs.value(name, nullptr);
}
+/*!
+ \internal
+ */
void Q3DSPresentation::registerDataOutput(Q3DSDataOutput *dataOutput)
{
d_ptr->registerDataOutput(dataOutput);
}
+/*!
+ \internal
+ */
void Q3DSPresentation::unregisterDataOutput(Q3DSDataOutput *dataOutput)
{
d_ptr->unregisterDataOutput(dataOutput);
}
+/*!
+ \internal
+ */
Q3DSDataOutput *Q3DSPresentation::registeredDataOutput(const QString &name) const
{
return d_ptr->m_dataOutputs.value(name, nullptr);
}
+/*!
+ Returns a list of datainputs defined for this presentation. Use setDataInputValue()
+ interface to set a datainput value using datainput name, or call Q3DSDataInput::setValue
+ directly for a specific datainput.
+
+ \sa setDataInputValue
+ \sa Q3DSDataInput
+ */
QVector<Q3DSDataInput *> Q3DSPresentation::dataInputs() const
{
QVector<Q3DSDataInput *> ret;
@@ -117,17 +312,41 @@ QVector<Q3DSDataInput *> Q3DSPresentation::dataInputs() const
return ret;
}
-QVariantList Q3DSPresentation::getDataOutputs() const
+/*!
+ \qmlmethod variant Presentation::getDataInputs
+ Returns a list of datainputs defined for this presentation. Use setDataInputValue()
+ interface to set a datainput value using datainput name, or call Q3DSDataInput::setValue
+ directly for a specific datainput.
+
+ \sa DataInput
+ */
+
+/*!
+ Returns a list of datainputs defined for this presentation. Use setDataInputValue()
+ interface to set a datainput value using datainput name, or call Q3DSDataInput::setValue
+ directly for a specific datainput.
+
+ \sa setDataInputValue
+ \sa Q3DSDataInput
+ */
+QVariantList Q3DSPresentation::getDataInputs() const
{
QVariantList ret;
- const auto dataoutputs = dataOutputs();
+ const auto datainputs = dataInputs();
- for (const auto &it : dataoutputs)
+ for (const auto &it : datainputs)
ret.append(QVariant::fromValue(it));
return ret;
}
+/*!
+ Returns a list of dataoutputs defined for this presentation. Use Qt's connect() method
+ to connect slots to the valueChanged() signal in the required \l{DataOutput}s to get notified
+ when the value tracked by the DataOutput is changed.
+
+ \sa Q3DSDataOutput
+ */
QVector<Q3DSDataOutput *> Q3DSPresentation::dataOutputs() const
{
QVector<Q3DSDataOutput *> ret;
@@ -138,33 +357,59 @@ QVector<Q3DSDataOutput *> Q3DSPresentation::dataOutputs() const
return ret;
}
-QVariantList Q3DSPresentation::getDataInputs() const
+/*!
+ \qmlmethod variant Presentation::getDataOutputs
+
+ Returns a list of dataoutputs defined for this presentation. Connect slots to the
+ \c{valueChanged()} signal in the required \l{DataOutput}s to get notified
+ when the value tracked by the DataOutput is changed.
+
+ \sa SDataOutput
+ */
+/*!
+ * \brief Q3DSPresentation::getDataOutputs Returns \l{DataOutput}s.
+ Returns a list of dataoutputs defined for this presentation. Use Qt's connect() method
+ to connect slots to the valueChanged() signal in the required \l{DataOutput}s to get notified
+ when the value tracked by the DataOutput is changed.
+
+ \sa Q3DSDataOutput
+ */
+QVariantList Q3DSPresentation::getDataOutputs() const
{
QVariantList ret;
- const auto datainputs = dataInputs();
+ const auto dataoutputs = dataOutputs();
- for (const auto &it : datainputs)
+ for (const auto &it : dataoutputs)
ret.append(QVariant::fromValue(it));
return ret;
}
-void Q3DSPresentation::setSource(const QUrl &source)
-{
- if (d_ptr->m_source != source) {
- d_ptr->setSource(source);
- Q_EMIT sourceChanged(source);
- }
-}
+/*!
+ \qmlproperty bool Presentation::delayedLoading
-void Q3DSPresentation::setVariantList(const QStringList &variantList)
-{
- if (d_ptr->m_variantList != variantList) {
- d_ptr->setVariantList(variantList);
- Q_EMIT variantListChanged(variantList);
- }
-}
+ This property controls whether the presentation resources are loaded while loading
+ the presentation(false) or afterwards when they are actually used in the presentation(true).
+ The resources are loaded per slide basis so that all resources required by a slide will be
+ loaded at once.
+
+ The resources can be images, subpresentations, materials, effects and meshes.
+
+ Default is \c{false}.
+ */
+
+/*!
+ \property Q3DSPresentation::delayedLoading
+
+ This property controls whether the presentation resources are loaded while loading
+ the presentation(false) or afterwards when they are actually used in the presentation(true).
+ The resources are loaded per slide basis so that all resources required by a slide will be
+ loaded at once.
+ The resources can be images, subpresentations, materials, effects and meshes.
+
+ Default is \c{false}.
+ */
bool Q3DSPresentation::delayedLoading() const
{
return d_ptr->m_delayedLoading;
@@ -178,6 +423,18 @@ void Q3DSPresentation::setDelayedLoading(bool enable)
}
}
+/*!
+ \qmlmethod Presentation::preloadSlide
+ Preloads slide resources to memory. All resources required by the given slide will be
+ loaded in the background. This function has effect only when delayed loading is enabled.
+ \param elementPath
+ */
+/*!
+ \brief Q3DSPresentation::preloadSlide
+ Preloads slide resources to memory. All resources required by the given slide will be
+ loaded in the background. This function has effect only when delayed loading is enabled.
+ \param elementPath
+ */
void Q3DSPresentation::preloadSlide(const QString &elementPath)
{
if (d_ptr->m_viewerApp)
@@ -186,6 +443,19 @@ void Q3DSPresentation::preloadSlide(const QString &elementPath)
d_ptr->m_commandQueue->queueCommand(elementPath, CommandType_PreloadSlide);
}
+/*!
+ \qmlmethod Presentation::unloadSlide
+ Unloads slide resources from memory. If the slide is current, then the resources are unloaded
+ when the slide is changed. This function has effect only when delayed loading is enabled.
+ \param elementPath
+ */
+
+/*!
+ \brief Q3DSPresentation::unloadSlide
+ Unloads slide resources from memory. If the slide is current, then the resources are unloaded
+ when the slide is changed. This function has effect only when delayed loading is enabled.
+ \param elementPath
+ */
void Q3DSPresentation::unloadSlide(const QString &elementPath)
{
if (d_ptr->m_viewerApp)
@@ -194,6 +464,21 @@ void Q3DSPresentation::unloadSlide(const QString &elementPath)
d_ptr->m_commandQueue->queueCommand(elementPath, CommandType_UnloadSlide);
}
+/*!
+ This API is for backwards compatibility. We recommend using \l{DataInput}s to control
+ slide changes. \l{DataInput} provides stronger contract between the design and
+ code as it avoids use of elementPath (a reference to design's internal structure).
+
+ Requests a time context (a Scene or a Component object) to change
+ to a specific slide by \a index. If the context is already on that
+ slide, playback will start over.
+
+ If \a elementPath points to a time context, that element is
+ controlled. For all other element types the time context owning
+ that element is controlled instead. You can target the command to
+ a specific sub-presentation by adding "SubPresentationId:" in
+ front of the element path, for example \c{"SubPresentationOne:Scene"}.
+ */
void Q3DSPresentation::goToSlide(const QString &elementPath, unsigned int index)
{
if (d_ptr->m_viewerApp) {
@@ -204,6 +489,21 @@ void Q3DSPresentation::goToSlide(const QString &elementPath, unsigned int index)
}
}
+/*!
+ This API is for backwards compatibility. We recommend using \l{DataInput}s to control
+ slide changes. \l{DataInput} provides stronger contract between the design and
+ code as it avoids use of elementPath (a reference to design's internal structure).
+
+ Requests a time context (a Scene or a Component object) to change
+ to a specific slide by \a name. If the context is already on that
+ slide, playback will start over.
+
+ If \a elementPath points to a time context, that element is
+ controlled. For all other element types the time context owning
+ that element is controlled instead. You can target the command to
+ a specific sub-presentation by adding "SubPresentationId:" in
+ front of the element path, for example \c{"SubPresentationOne:Scene"}.
+ */
void Q3DSPresentation::goToSlide(const QString &elementPath, const QString &name)
{
if (d_ptr->m_viewerApp) {
@@ -215,6 +515,22 @@ void Q3DSPresentation::goToSlide(const QString &elementPath, const QString &name
}
}
+/*!
+ This API is for backwards compatibility. We recommend using \l{DataInput}s to control
+ slide changes. \l{DataInput} provides stronger contract between the design and
+ code as it avoids use of elementPath (a reference to design's internal structure).
+
+ Requests a time context (a Scene or a Component object) to change to the
+ next or previous slide, depending on the value of \a next. If the context
+ is already at the last or first slide, \a wrap defines if wrapping over to
+ the first or last slide, respectively, occurs.
+
+ If \a elementPath points to a time context, that element is controlled. For
+ all other element types the time context owning that element is controlled
+ instead. You can target the command to a specific sub-presentation by
+ adding "SubPresentationId:" in front of the element path, for example
+ \c{"SubPresentationOne:Scene"}.
+ */
void Q3DSPresentation::goToSlide(const QString &elementPath, bool next, bool wrap)
{
if (d_ptr->m_viewerApp) {
@@ -226,6 +542,36 @@ void Q3DSPresentation::goToSlide(const QString &elementPath, bool next, bool wra
}
}
+/*!
+ This API is for backwards compatibility. We recommend using \l{DataInput}s to control
+ slide changes. \l{DataInput} provides stronger contract between the design and
+ code as it avoids use of elementPath (a reference to design's internal structure).
+
+ Moves the timeline for a time context (a Scene or a Component element) to a
+ specific position. The position is given in seconds in \a timeSeconds.
+
+ If \a elementPath points to a time context, that element is
+ controlled. For all other element types the time context owning
+ that element is controlled instead. You can target the command to
+ a specific sub-presentation by adding "SubPresentationId:" in
+ front of the element path, for example
+ \c{"SubPresentationOne:Scene"}.
+
+ The behavior when specifying a time before 0 or after the end time
+ for the current slide depends on the play mode of the slide:
+
+ \list
+ \li \c{Stop at End} - values outside the valid time range instead clamp to the boundaries.
+ For example, going to time -5 is the same as going to time 0.
+ \li \c{Looping} - values outside the valid time range mod into the valid range. For example,
+ going to time -4 on a 10 second slide is the same as going to time 6.
+ \li \c{Ping Pong} - values outside the valid time range bounce off the ends. For example,
+ going to time -4 is the same as going to time 4 (assuming the time context is at least 4 seconds
+ long), while going to time 12 on a 10 second slide is the same as going to time 8.
+ \li \c{Ping} - values less than 0 are treated as time 0, while values greater than the endtime
+ bounce off the end (eventually hitting 0.)
+ \endlist
+ */
void Q3DSPresentation::goToTime(const QString &elementPath, float time)
{
if (d_ptr->m_viewerApp) {
@@ -236,6 +582,30 @@ void Q3DSPresentation::goToTime(const QString &elementPath, float time)
}
}
+/*!
+ This API is for backwards compatibility. We recommend using \l{DataInput}s to control
+ attributes in the presentation. \l{DataInput} provides stronger contract between the
+ design and code as it avoids use of elementPath (a reference to design's
+ internal structure).
+
+ Sets the \a value of an attribute (property) on the object specified by
+ \a elementPath. The \a attributeName is the \l{Attribute Names}{scripting
+ name} of the attribute.
+
+ An element path refers to an object in the scene by name, for example,
+ \c{Scene.Layer.Camera}. Here the right camera object gets chosen even if
+ the scene contains other layers with the default camera names (for instance
+ \c{Scene.Layer2.Camera}).
+
+ To reference an object stored in a property of another object, the dot
+ syntax can be used. The most typical example of this is changing the source
+ of a texture map by changing the \c sourcepath property on the object
+ selected by \c{SomeMaterial.diffusemap}.
+
+ To access an object in a sub-presentation, prepend the name of the
+ sub-presentation followed by a colon, for example,
+ \c{SubPresentationOne:Scene.Layer.Camera}.
+ */
void Q3DSPresentation::setAttribute(const QString &elementPath, const QString &attributeName,
const QVariant &value)
{
@@ -268,6 +638,12 @@ void Q3DSPresentation::setAttribute(const QString &elementPath, const QString &a
}
}
+// #TODO: QT3DS-3558
+/*!
+ \brief Q3DSPresentation::setPresentationActive
+ \param id
+ \param active
+ */
void Q3DSPresentation::setPresentationActive(const QString &id, bool active)
{
if (d_ptr->m_viewerApp) {
@@ -278,6 +654,15 @@ void Q3DSPresentation::setPresentationActive(const QString &id, bool active)
}
}
+/*!
+ Dispatches a Qt 3D Studio presentation event with \a eventName on
+ scene object specified by \a elementPath. These events provide a
+ way to communicate with the \c .qml based \c{behavior scripts}
+ attached to scene objects since they can register to be notified
+ via Behavior::registerForEvent().
+
+ See setAttribute() for a description of \a elementPath.
+ */
void Q3DSPresentation::fireEvent(const QString &elementPath, const QString &eventName)
{
if (d_ptr->m_viewerApp) {
@@ -289,6 +674,11 @@ void Q3DSPresentation::fireEvent(const QString &elementPath, const QString &even
}
}
+// #TODO: QT3DS-3559
+/*!
+ \brief Q3DSPresentation::setGlobalAnimationTime
+ \param milliseconds
+ */
void Q3DSPresentation::setGlobalAnimationTime(qint64 milliseconds)
{
if (d_ptr->m_viewerApp) {
@@ -299,6 +689,23 @@ void Q3DSPresentation::setGlobalAnimationTime(qint64 milliseconds)
}
}
+/*!
+ Sets the \a value of a data input element \a name in the presentation.
+
+ Data input provides a higher level, designer-driven alternative to
+ Q3DSElement and setAttribute(). Instead of exposing a large set of
+ properties with their internal engine names, data input allows designers to
+ decide which properties should be writable by the application, and can
+ assign custom names to these data input entries, thus forming a
+ well-defined contract between the designer and the developer.
+
+ In addition, data input also allows controlling the time line and the
+ current slide for time context objects (Scene or Component). Therefore it
+ is also an alternative to the goToSlide() and goToTime() family of APIs and
+ to Q3DSSceneElement.
+
+ \sa DataInput
+ */
void Q3DSPresentation::setDataInputValue(const QString &name, const QVariant &value,
Q3DSDataInput::ValueRole valueRole)
{
@@ -311,13 +718,14 @@ void Q3DSPresentation::setDataInputValue(const QString &name, const QVariant &va
}
}
-/**
- Adds a new child element for the element specified by parentElementPath to the slide specified
- with slideName. Only model element creation is currently supported.
+/*!
+ * \brief Q3DSPresentation::createElement Adds a new child element for the specified element.
+ Adds a new child element for the element specified by parentElementPath to the slide
+ specified with slideName. Only model element creation is currently supported.
A referenced material element is also created for the new model element. The source material
name can be specified with custom "material" property in the properties hash.
The source material must exist in the material container of the presentation.
-*/
+ */
void Q3DSPresentation::createElement(const QString &parentElementPath, const QString &slideName,
const QHash<QString, QVariant> &properties)
{
@@ -326,6 +734,13 @@ void Q3DSPresentation::createElement(const QString &parentElementPath, const QSt
createElements(parentElementPath, slideName, theProperties);
}
+// #TODO: QT3DS-3560
+/*!
+ \brief Q3DSPresentation::createElements
+ \param parentElementPath
+ \param slideName
+ \param properties
+ */
void Q3DSPresentation::createElements(const QString &parentElementPath, const QString &slideName,
const QVector<QHash<QString, QVariant>> &properties)
{
@@ -340,9 +755,11 @@ void Q3DSPresentation::createElements(const QString &parentElementPath, const QS
}
}
-/**
+/*!
+ \brief Q3DSPresentation::deleteElement
Removes an element added by createElement and all its child elements.
-*/
+ \param elementPath
+ */
void Q3DSPresentation::deleteElement(const QString &elementPath)
{
QStringList elementPaths;
@@ -350,6 +767,11 @@ void Q3DSPresentation::deleteElement(const QString &elementPath)
deleteElements(elementPaths);
}
+/*!
+ \brief Q3DSPresentation::deleteElements
+ Removes the given list of elements added by createElement and all their child elements.
+ \param elementPaths QStringList containing the elementPaths of dynamically created objects.
+ */
void Q3DSPresentation::deleteElements(const QStringList &elementPaths)
{
if (d_ptr->m_viewerApp) {
@@ -361,13 +783,16 @@ void Q3DSPresentation::deleteElements(const QStringList &elementPaths)
}
}
-/**
+/*!
+ \brief Q3DSPresentation::createMaterial
Creates a material specified by the materialDefinition parameter into the material
container of the presentation that owns the element specified by the elementPath parameter.
After creation, the material can be used for new elements created via createElement.
The materialDefinition parameter can contain either the file path to a material definition
file or a material definition in the Qt 3D Studion material data format.
-*/
+ \param elementPath
+ \param materialDefinition
+ */
void Q3DSPresentation::createMaterial(const QString &elementPath,
const QString &materialDefinition)
{
@@ -376,6 +801,12 @@ void Q3DSPresentation::createMaterial(const QString &elementPath,
createMaterials(elementPath, materialDefinitions);
}
+/*!
+ \brief Q3DSPresentation::createMaterials
+ Same as createMaterial, but creates multiple materials.
+ \param elementPath
+ \param materialDefinitions
+ */
void Q3DSPresentation::createMaterials(const QString &elementPath,
const QStringList &materialDefinitions)
{
@@ -467,6 +898,9 @@ void Q3DSPresentation::mousePressEvent(QMouseEvent *e)
}
}
+/*!
+ * \internal
+ */
void Q3DSPresentation::mouseReleaseEvent(QMouseEvent *e)
{
if (d_ptr->m_viewerApp) {
@@ -477,6 +911,9 @@ void Q3DSPresentation::mouseReleaseEvent(QMouseEvent *e)
}
}
+/*!
+ * \internal
+ */
void Q3DSPresentation::mouseMoveEvent(QMouseEvent *e)
{
if (d_ptr->m_viewerApp) {
@@ -487,6 +924,9 @@ void Q3DSPresentation::mouseMoveEvent(QMouseEvent *e)
}
}
+/*!
+ * \internal
+ */
void Q3DSPresentation::wheelEvent(QWheelEvent *e)
{
QPoint pixelData = e->pixelDelta();
@@ -516,6 +956,9 @@ void Q3DSPresentation::wheelEvent(QWheelEvent *e)
}
}
+/*!
+ * \internal
+ */
void Q3DSPresentation::keyPressEvent(QKeyEvent *e)
{
if (d_ptr->m_viewerApp) {
@@ -526,6 +969,9 @@ void Q3DSPresentation::keyPressEvent(QKeyEvent *e)
}
}
+/*!
+ * \internal
+ */
void Q3DSPresentation::keyReleaseEvent(QKeyEvent *e)
{
if (d_ptr->m_viewerApp) {
@@ -536,6 +982,97 @@ void Q3DSPresentation::keyReleaseEvent(QKeyEvent *e)
}
}
+// #TODO: QT3DS-3562 Most Presentation signals missing documentation
+/*!
+ * \qmlsignal Presentation::slideEntered
+ * Emitted when
+ * \param elementPath
+ * \param index
+ * \param name
+ */
+
+/*!
+ * \fn Q3DSPresentation::slideEntered
+ * Emitted when
+ * \param elementPath
+ * \param index
+ * \param name
+ */
+
+/*!
+ * \qmlsignal Presentation::slideExited
+ * Emitted when
+ * \param elementPath
+ * \param index
+ * \param name
+ */
+
+/*!
+ * \fn Q3DSPresentation::slideExited
+ * Emitted when
+ * \param elementPath
+ * \param index
+ * \param name
+ */
+
+/*!
+ * \fn Q3DSPresentation::dataInputsReady
+ * Emitted when \l{DataInput}s in the Studio project have been parsed and data inputs are available
+ * through dataInputs() and getDataInputs() methods.
+ */
+
+/*!
+ * \fn Q3DSPresentation::dataOutputsReady
+ * Emitted when \l{DataOutput}s in the Studio project have been parsed and data outputs are available
+ * through dataOutputs() and getDataOutputs() methods.
+ */
+
+/*!
+ * \qmlsignal Presentation::customSignalEmitted
+ * Emitted when
+ * \param elementPath
+ * \param name
+ */
+
+/*!
+ * \fn Q3DSPresentation::customSignalEmitted
+ * Emitted when
+ * \param elementPath
+ * \param name
+ */
+
+/*!
+ * \qmlsignal Presentation::elementsCreated
+ * Emitted when
+ * \param elementPaths
+ * \param error
+ */
+
+/*!
+ * \fn Q3DSPresentation::elementsCreated
+ * Emitted when
+ * \param elementPaths
+ * \param error
+ */
+
+/*!
+ * \qmlsignal Presentation::materialsCreated
+ * Emitted when
+ * \param materialNames
+ * \param error
+ */
+
+/*!
+ * \fn Q3DSPresentation::materialsCreated
+ * Emitted when
+ * \param materialNames
+ * \param error
+ */
+
+
+/*!
+ * \internal
+ */
Q3DSPresentationPrivate::Q3DSPresentationPrivate(Q3DSPresentation *q)
: QObject(q)
, q_ptr(q)
@@ -672,14 +1209,17 @@ void Q3DSPresentationPrivate::requestResponseHandler(CommandType commandType, vo
// Check and append to QML-side list if the (UIA) presentation has additional datainputs
// that are not explicitly defined in QML code.
auto receivedDI = response->at(i).value<Q3DSDataInput *>();
+ // For QML behind async command queue, we cache min/max values in addition
+ // to name, in order to be able to return values initially set in UIA file (in QML
+ // getters).
if (!m_dataInputs.contains(receivedDI->name())) {
- // For QML behind async command queue, we cache min/max values in addition
- // to name, in order to be able to return values initially set in UIA file (in QML
- // setter/getters).
auto newDI = new Q3DSDataInput(receivedDI->name(), nullptr);
newDI->d_ptr->m_min = receivedDI->d_ptr->m_min;
newDI->d_ptr->m_max = receivedDI->d_ptr->m_max;
registerDataInput(newDI);
+ } else {
+ m_dataInputs[receivedDI->name()]->d_ptr->m_min = receivedDI->d_ptr->m_min;
+ m_dataInputs[receivedDI->name()]->d_ptr->m_max = receivedDI->d_ptr->m_max;
}
}
delete response;
diff --git a/src/Runtime/api/studio3d/q3dspresentation.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dspresentation.h
index 60191be2..436e6844 100644
--- a/src/Runtime/api/studio3d/q3dspresentation.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dspresentation.h
@@ -128,9 +128,6 @@ Q_SIGNALS:
void sourceChanged(const QUrl &source);
void slideEntered(const QString &elementPath, unsigned int index, const QString &name);
void slideExited(const QString &elementPath, unsigned int index, const QString &name);
- // Indicates that data input and output definitions in the Studio project have been parsed
- // and datainputs/dataoutputs are available through dataInputs() / getDataInputs().
- // and datainputs are available through dataInputs() / getDataInputs().
void dataInputsReady();
void dataOutputsReady();
void customSignalEmitted(const QString &elementPath, const QString &name);
@@ -145,7 +142,6 @@ private:
friend class Q3DSPresentationItem;
friend class Q3DSSurfaceViewerPrivate;
- friend class Q3DSWidgetPrivate;
friend class Q3DSRenderer;
friend class Q3DSStudio3D;
friend class Q3DSDataInput;
diff --git a/src/Runtime/api/studio3d/q3dspresentation_p.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dspresentation_p.h
index 7b4877d9..7b4877d9 100644
--- a/src/Runtime/api/studio3d/q3dspresentation_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dspresentation_p.h
diff --git a/src/Runtime/api/studio3d/q3dssceneelement.cpp b/src/Runtime/ogl-runtime/src/api/studio3d/q3dssceneelement.cpp
index 2eef5d00..3f860d65 100644
--- a/src/Runtime/api/studio3d/q3dssceneelement.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dssceneelement.cpp
@@ -37,16 +37,63 @@
QT_BEGIN_NAMESPACE
+/*!
+ \qmltype SceneElement
+ \instantiates Q3DSSceneElement
+ \inqmlmodule Qt3DStudio
+ \ingroup OpenGLRuntime
+ \brief Controls the special Scene or Component scene objects in a Qt 3D
+ Studio presentation.
+
+ This class is a convenience class for controlling the properties of Scene
+ and Component objects in the scene. These are special since they have a
+ time context, meaning they control a timeline and a set of associated
+ slides.
+
+ \sa Studio3D, Element, Presentation
+*/
+
+/*!
+ \class Q3DSSceneElement
+ \inherits Q3DSElement
+ \inmodule OpenGLRuntime
+ \since Qt 3D Studio 2.0
+
+ \brief Controls the special Scene or Component scene objects in a Qt 3D
+ Studio presentation.
+
+ This class is a convenience class for controlling the properties of Scene
+ and Component objects in the scene. These are special since they have a
+ time context, meaning they control a timline and a set of associated
+ slides.
+
+ \note The functionality of Q3DSSceneElement is equivalent to
+ Q3DSPresentation::goToTime() and Q3DSPresentation::goToSlide().
+
+ \sa Q3DSPresentation, Q3DSWidget, Q3DSSurfaceViewer, Q3DSElement
+ */
+
+/*!
+ \internal
+ */
Q3DSSceneElement::Q3DSSceneElement(QObject *parent)
: Q3DSElement(new Q3DSSceneElementPrivate(this), nullptr, QString(), parent)
{
}
+/*!
+ \internal
+ */
Q3DSSceneElement::Q3DSSceneElement(const QString &elementPath, QObject *parent)
: Q3DSElement(new Q3DSSceneElementPrivate(this), nullptr, elementPath, parent)
{
}
+/*!
+ Constructs a Q3DSSceneElement instance and associated it with the object
+ specified by \a elementPath and the given \a presentation. An optional \a
+ parent object can be specified.
+ */
Q3DSSceneElement::Q3DSSceneElement(Q3DSPresentation *presentation, const QString &elementPath,
QObject *parent)
: Q3DSElement(new Q3DSSceneElementPrivate(this), presentation, elementPath, parent)
@@ -54,32 +101,42 @@ Q3DSSceneElement::Q3DSSceneElement(Q3DSPresentation *presentation, const QString
}
+/*!
+ Destructor.
+ */
Q3DSSceneElement::~Q3DSSceneElement()
{
}
-int Q3DSSceneElement::currentSlideIndex() const
-{
- Q_D(const Q3DSSceneElement);
- return d->m_currentSlideIndex;
-}
+/*!
+ \qmlproperty int SceneElement::currentSlideIndex
-int Q3DSSceneElement::previousSlideIndex() const
-{
- Q_D(const Q3DSSceneElement);
- return d->m_previousSlideIndex;
-}
+ Holds the index of the currently active slide of the tracked time context.
-QString Q3DSSceneElement::currentSlideName() const
-{
- Q_D(const Q3DSSceneElement);
- return d->m_currentSlideName;
-}
+ \note If this property is set to something else than the default slide for
+ the scene at the initial declaration of SceneElement, a changed signal for
+ the default slide may still be emitted before the slide changes to the
+ desired one. This happens in order to ensure we end up with the index of
+ the slide that is actually shown even if the slide specified in the initial
+ declaration is invalid.
+*/
-QString Q3DSSceneElement::previousSlideName() const
+/*!
+ \property Q3DSSceneElement::currentSlideIndex
+
+ Holds the index of the currently active slide of the tracked time context.
+
+ \note If this property is set to something else than the default slide for
+ the scene at the initial declaration of SceneElement, a changed signal for
+ the default slide may still be emitted before the slide changes to the
+ desired one. This happens in order to ensure we end up with the index of
+ the slide that is actually shown even if the slide specified in the initial
+ declaration is invalid.
+*/
+int Q3DSSceneElement::currentSlideIndex() const
{
Q_D(const Q3DSSceneElement);
- return d->m_previousSlideName;
+ return d->m_currentSlideIndex;
}
void Q3DSSceneElement::setCurrentSlideIndex(int currentSlideIndex)
@@ -98,6 +155,57 @@ void Q3DSSceneElement::setCurrentSlideIndex(int currentSlideIndex)
}
}
+/*!
+ \property int SceneElement::previousSlideIndex
+
+ Holds the index of the previously active slide of the tracked time context.
+
+ Note: This property is read-only.
+*/
+/*!
+ \property Q3DSSceneElement::previousSlideIndex
+
+ Holds the index of the previously active slide of the tracked time context.
+
+ This property is read-only.
+*/
+int Q3DSSceneElement::previousSlideIndex() const
+{
+ Q_D(const Q3DSSceneElement);
+ return d->m_previousSlideIndex;
+}
+
+/*!
+ \qmlproperty string SceneElement::currentSlideName
+
+ Holds the name of the currently active slide of the tracked time context.
+
+ \note If this property is set to something else than the default slide for
+ the scene at the initial declaration of SceneElement, a changed signal for
+ the default slide may still be emitted before the slide changes to the
+ desired one. This happens in order to ensure we end up with the index of
+ the slide that is actually shown even if the slide specified in the initial
+ declaration is invalid.
+*/
+
+/*!
+ \property Q3DSSceneElement::currentSlideName
+
+ Holds the name of the currently active slide of the tracked time context.
+
+ \note If this property is set to something else than the default slide for
+ the scene at the initial declaration of SceneElement, a changed signal for
+ the default slide may still be emitted before the slide changes to the
+ desired one. This happens in order to ensure we end up with the index of
+ the slide that is actually shown even if the slide specified in the initial
+ declaration is invalid.
+*/
+QString Q3DSSceneElement::currentSlideName() const
+{
+ Q_D(const Q3DSSceneElement);
+ return d->m_currentSlideName;
+}
+
void Q3DSSceneElement::setCurrentSlideName(const QString &currentSlideName)
{
Q_D(Q3DSSceneElement);
@@ -115,18 +223,52 @@ void Q3DSSceneElement::setCurrentSlideName(const QString &currentSlideName)
}
}
+/*!
+ \qmlmproperty string SceneElement::previousSlideName
+
+ Holds the name of the previously active slide of the tracked time context.
+
+ Note: This property is read-only.
+*/
+/*!
+ \property Q3DSSceneElement::previousSlideName
+
+ Holds the name of the previously active slide of the tracked time context.
+
+ This property is read-only.
+*/
+QString Q3DSSceneElement::previousSlideName() const
+{
+ Q_D(const Q3DSSceneElement);
+ return d->m_previousSlideName;
+}
+
+/*!
+ Requests a time context (a Scene or a Component object) to change to the
+ next or previous slide, depending on the value of \a next. If the context
+ is already at the last or first slide, \a wrap defines if wrapping over to
+ the first or last slide, respectively, occurs.
+ */
void Q3DSSceneElement::goToSlide(bool next, bool wrap)
{
Q_D(Q3DSSceneElement);
d->goToSlide(next, wrap);
}
+/*!
+ Moves the timeline for a time context (a Scene or a Component element) to a
+ specific position. The position is given in seconds in \a timeSeconds.
+ */
void Q3DSSceneElement::goToTime(float time)
{
Q_D(Q3DSSceneElement);
d->goToTime(time);
}
+
+/*!
+ \internal
+ */
Q3DSSceneElementPrivate::Q3DSSceneElementPrivate(Q3DSSceneElement *parent)
: Q3DSElementPrivate(parent)
, m_currentSlideIndex(0)
@@ -136,10 +278,16 @@ Q3DSSceneElementPrivate::Q3DSSceneElementPrivate(Q3DSSceneElement *parent)
{
}
+/*!
+ \internal
+ */
Q3DSSceneElementPrivate::~Q3DSSceneElementPrivate()
{
}
+/*!
+ \internal
+ */
void Q3DSSceneElementPrivate::handleSlideEntered(int index, const QString &name)
{
Q_Q(Q3DSSceneElement);
@@ -175,6 +323,9 @@ void Q3DSSceneElementPrivate::handleSlideEntered(int index, const QString &name)
}
}
+/*!
+ \internal
+ */
void Q3DSSceneElementPrivate::goToSlide(bool next, bool wrap)
{
if (m_presentation)
@@ -183,6 +334,9 @@ void Q3DSSceneElementPrivate::goToSlide(bool next, bool wrap)
qWarning() << __FUNCTION__ << "Element is not registered to any presentation!";
}
+/*!
+ \internal
+ */
void Q3DSSceneElementPrivate::goToTime(float time)
{
if (m_presentation)
@@ -191,6 +345,9 @@ void Q3DSSceneElementPrivate::goToTime(float time)
qWarning() << __FUNCTION__ << "Element is not registered to any presentation!";
}
+/*!
+ \internal
+ */
void Q3DSSceneElementPrivate::setViewerApp(Q3DSViewer::Q3DSViewerApp *app)
{
Q_Q(Q3DSSceneElement);
@@ -221,6 +378,9 @@ void Q3DSSceneElementPrivate::setViewerApp(Q3DSViewer::Q3DSViewerApp *app)
}
}
+/*!
+ \internal
+ */
void Q3DSSceneElementPrivate::setCommandQueue(CommandQueue *queue)
{
Q_Q(Q3DSSceneElement);
@@ -248,6 +408,9 @@ void Q3DSSceneElementPrivate::setCommandQueue(CommandQueue *queue)
}
}
+/*!
+ \internal
+ */
void Q3DSSceneElementPrivate::requestResponseHandler(CommandType commandType, void *requestData)
{
switch (commandType) {
diff --git a/src/Runtime/api/studio3d/q3dssceneelement.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dssceneelement.h
index 2d96255c..2d96255c 100644
--- a/src/Runtime/api/studio3d/q3dssceneelement.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dssceneelement.h
diff --git a/src/Runtime/api/studio3d/q3dssceneelement_p.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dssceneelement_p.h
index 02d2bdff..02d2bdff 100644
--- a/src/Runtime/api/studio3d/q3dssceneelement_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dssceneelement_p.h
diff --git a/src/Runtime/api/studio3d/q3dssurfaceviewer.cpp b/src/Runtime/ogl-runtime/src/api/studio3d/q3dssurfaceviewer.cpp
index cea764e7..23782f2f 100644
--- a/src/Runtime/api/studio3d/q3dssurfaceviewer.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dssurfaceviewer.cpp
@@ -47,42 +47,146 @@ using namespace Q3DSViewer;
QT_BEGIN_NAMESPACE
+/*!
+ \class Q3DSSurfaceViewer
+ \inmodule OpenGLRuntime
+ \since Qt 3D Studio 2.0
+
+ \brief Renders a Qt 3D Studio presentation on a QWindow or an offscreen
+ render target using OpenGL.
+
+ Q3DSSurfaceViewer is used to render Qt 3D Studio presentations onto a
+ QSurface. In practice this means two types of uses: rendering to an
+ on-screen QWindow, or rendering to an offscreen render target (typically an
+ OpenGL texture via a framebuffer object and a QOffscreenSurface).
+
+ \section2 Example Usage
+
+ \code
+ int main(int argc, char *argv[])
+ {
+ QGuiApplication app(argc, argv);
+
+ QOpenGLContext context;
+ context.create();
+
+ QWindow window;
+ window.setSurfaceType(QSurface::OpenGLSurface);
+ window.setFormat(context.format());
+ window.create();
+
+ Q3DSSurfaceViewer viewer;
+ viewer.presentation()->setSource(QUrl(QStringLiteral("qrc:/my_presentation.uip")));
+ viewer.setUpdateInterval(0); // enable automatic updates
+
+ // Register a scene object for slide management (optional)
+ Q3DSSceneElement scene(viewer.presentation(), QStringLiteral("Scene"));
+
+ // Register an element object for attribute setting (optional)
+ Q3DSElement element(viewer.presentation(), QStringLiteral("Scene.Layer.myCarModel"));
+
+ viewer.create(&window, &context);
+
+ w.resize(1024, 768);
+ w.show();
+
+ return app.exec();
+ }
+ \endcode
+
+ \sa Q3DSWidget
+ */
+
+/*!
+ * \brief Q3DSSurfaceViewer::Q3DSSurfaceViewer Constructor.
+ * \param parent Optional parent of the object.
+ */
Q3DSSurfaceViewer::Q3DSSurfaceViewer(QObject *parent)
: QObject(parent)
, d_ptr(new Q3DSSurfaceViewerPrivate(this))
{
}
+/*!
+ * \brief Q3DSSurfaceViewer::~Q3DSSurfaceViewer Destructor
+ */
Q3DSSurfaceViewer::~Q3DSSurfaceViewer()
{
delete d_ptr;
}
-bool Q3DSSurfaceViewer::initialize(QSurface *surface, QOpenGLContext *context, GLuint fboId)
+/*!
+ Initializes Q3DSSurfaceViewer to render the presentation to the given
+ \a surface using the \a context.
+
+ The source property of the attached presentation must be set before the
+ viewer can be initialized.
+
+ Returns whether the initialization succeeded.
+
+ \sa running, Q3DSPresentation::source, presentation()
+*/
+bool Q3DSSurfaceViewer::create(QSurface *surface, QOpenGLContext *context)
{
- return d_ptr->initialize(surface, context, fboId);
+ // #TODO: QT3DS-3531 Fix this to behave as in RT2
+ return create(surface, context, 0);
}
-void Q3DSSurfaceViewer::shutdown()
+
+/*!
+ Initializes Q3DSSurfaceViewer to render the presentation to the given
+ \a surface using the \a context and optional framebuffer id (\a fboId). If
+ \a fboId is omitted, it defaults to zero.
+
+ The source property of the attached presentation must be set before the
+ viewer can be initialized.
+
+ Returns whether the initialization succeeded.
+
+ \sa running, Q3DSPresentation::source, presentation()
+*/
+bool Q3DSSurfaceViewer::create(QSurface *surface, QOpenGLContext *context, GLuint fboId)
{
- d_ptr->shutdown();
+ return d_ptr->initialize(surface, context, fboId);
}
-void Q3DSSurfaceViewer::reset()
+/*!
+ Releases the presentation and all related resources.
+ The Q3DSSurfaceViewer instance can be reused by calling create() again.
+ */
+void Q3DSSurfaceViewer::destroy()
{
- d_ptr->reset();
+ d_ptr->destroy();
}
+/*!
+ Updates the surface viewer with a new frame.
+*/
void Q3DSSurfaceViewer::update()
{
d_ptr->update();
}
+/*!
+ Grabs the data rendered to the framebuffer into an image using the given \a
+ rect. The \a rect parameter is optional. If it is omitted, the whole
+ framebuffer is captured.
+
+ \note This is a potentially expensive operation.
+*/
QImage Q3DSSurfaceViewer::grab(const QRect &rect)
{
return d_ptr->grab(rect);
}
+/*!
+ \property Q3DSSurfaceViewer::size
+
+ Holds the desired size of the presentation. Relevant only when
+ autoSize is set to \c false.
+
+ \sa autoSize
+*/
QSize Q3DSSurfaceViewer::size() const
{
return d_ptr->m_size;
@@ -93,6 +197,22 @@ void Q3DSSurfaceViewer::setSize(const QSize &size)
d_ptr->setSize(size);
}
+/*!
+ \property Q3DSSurfaceViewer::autoSize
+
+ Specifies whether the viewer should change the size of the presentation
+ automatically to match the surface size when surface size changes. The
+ \l{Q3DSSurfaceViewer::size}{size} property is updated automatically
+ whenever the viewer is \l{Q3DSSurfaceViewer::update()}{updated} if this
+ property value is \c{true}.
+
+ When rendering offscreen, via a QOffscreenSurface, this property must be
+ set to \c{false} by the application since it is then up to the application
+ to provide a QOpenGLFramebufferObject with the desired size. The size of
+ the Q3DSSurfaceViewer must be set to the same value.
+
+ The default value is \c{true}.
+*/
bool Q3DSSurfaceViewer::autoSize() const
{
return d_ptr->m_autoSize;
@@ -106,6 +226,17 @@ void Q3DSSurfaceViewer::setAutoSize(bool autoSize)
}
}
+/*!
+ \property Q3DSSurfaceViewer::updateInterval
+
+ Holds the viewer update interval in milliseconds. If the value is negative,
+ the viewer doesn't update the presentation automatically.
+
+ The default value is -1, meaning there are no automatic updates and
+ update() must be called manually.
+
+ \sa update()
+*/
int Q3DSSurfaceViewer::updateInterval() const
{
return d_ptr->m_updateInterval;
@@ -116,41 +247,78 @@ void Q3DSSurfaceViewer::setUpdateInterval(int interval)
d_ptr->setUpdateInterval(interval);
}
+/*!
+ \property Q3DSSurfaceViewer::running
+
+ The value of this property is \c true when the presentation has been loaded
+ and is ready to be shown.
+
+ This property is read-only.
+*/
bool Q3DSSurfaceViewer::isRunning() const
{
return d_ptr->m_viewerApp != nullptr;
}
+// #TODO QT3DS-3534
+
+/*!
+ \property Q3DSSurfaceViewer::presentationId
+ */
QString Q3DSSurfaceViewer::presentationId() const
{
return d_ptr->m_id;
}
+/*!
+ Returns the framebuffer id given in initialization.
+
+ \sa create()
+*/
int Q3DSSurfaceViewer::fboId() const
{
return d_ptr->m_fboId;
}
+/*!
+ Returns the surface given in initialization.
+
+ \sa create()
+*/
QSurface *Q3DSSurfaceViewer::surface() const
{
return d_ptr->m_surface;
}
+/*!
+ Returns the context given in initialization.
+
+ \sa create()
+*/
QOpenGLContext *Q3DSSurfaceViewer::context() const
{
return d_ptr->m_context;
}
+/*!
+ Returns the settings object used by the Q3DSSurfaceViewer.
+*/
Q3DSViewerSettings *Q3DSSurfaceViewer::settings() const
{
return d_ptr->m_settings;
}
+/*!
+ Returns the presentation object used by the Q3DSSurfaceViewer.
+*/
Q3DSPresentation *Q3DSSurfaceViewer::presentation() const
{
return d_ptr->m_presentation;
}
+/*!
+ * \internal
+ */
void Q3DSSurfaceViewer::setPresentationId(const QString &id)
{
if (d_ptr->m_id != id) {
@@ -161,6 +329,51 @@ void Q3DSSurfaceViewer::setPresentationId(const QString &id)
}
}
+// TODO: QT3DS-3563
+
+/*!
+ * \brief Q3DSSurfaceViewer::qmlEngine
+ * \return
+ */
+QQmlEngine *Q3DSSurfaceViewer::qmlEngine() const
+{
+ Q_D(const Q3DSSurfaceViewer);
+ return d->qmlEngine;
+}
+
+/*!
+ * \brief Q3DSSurfaceViewer::setQmlEngine
+ * \param qmlEngine
+ */
+void Q3DSSurfaceViewer::setQmlEngine(QQmlEngine *qmlEngine)
+{
+ Q_D(Q3DSSurfaceViewer);
+ d->qmlEngine = qmlEngine;
+}
+
+
+/*!
+ \fn Q3DSSurfaceViewer::frameUpdate()
+
+ Emitted each time a frame has been rendered.
+*/
+
+/*!
+ \fn Q3DSSurfaceViewer::presentationLoaded()
+
+ Emitted when the presentation has been loaded and is ready
+ to be shown.
+*/
+
+/*!
+ \fn Q3DSSurfaceViewer::presentationReady()
+ Emitted when first frame is about to be shown. DataInputs and setAttribute
+ are ready to be used after this signal.
+ */
+
+/*!
+ * \internal
+ */
Q3DSSurfaceViewerPrivate::Q3DSSurfaceViewerPrivate(Q3DSSurfaceViewer *q)
: QObject(q)
, q_ptr(q)
@@ -180,6 +393,9 @@ Q3DSSurfaceViewerPrivate::Q3DSSurfaceViewerPrivate(Q3DSSurfaceViewer *q)
this, &Q3DSSurfaceViewerPrivate::reset);
}
+/*!
+ * \internal
+ */
Q3DSSurfaceViewerPrivate::~Q3DSSurfaceViewerPrivate()
{
releaseRuntime();
@@ -187,14 +403,9 @@ Q3DSSurfaceViewerPrivate::~Q3DSSurfaceViewerPrivate()
delete m_timer;
}
-void Q3DSSurfaceViewerPrivate::reset()
-{
- if (m_viewerApp) {
- releaseRuntime();
- initializeRuntime();
- }
-}
-
+/*!
+ * \internal
+ */
void Q3DSSurfaceViewerPrivate::setSize(const QSize &size)
{
if (m_size != size) {
@@ -210,6 +421,9 @@ void Q3DSSurfaceViewerPrivate::setSize(const QSize &size)
}
}
+/*!
+ * \internal
+ */
void Q3DSSurfaceViewerPrivate::setUpdateInterval(int interval)
{
if (m_updateInterval != interval) {
@@ -219,6 +433,9 @@ void Q3DSSurfaceViewerPrivate::setUpdateInterval(int interval)
}
}
+/*!
+ * \internal
+ */
bool Q3DSSurfaceViewerPrivate::initialize(QSurface *surface, QOpenGLContext *context, GLuint fboId)
{
Q_ASSERT(context);
@@ -237,7 +454,7 @@ bool Q3DSSurfaceViewerPrivate::initialize(QSurface *surface, QOpenGLContext *con
return false;
}
- shutdown();
+ destroy();
m_surface = surface;
m_context = context;
@@ -247,7 +464,7 @@ bool Q3DSSurfaceViewerPrivate::initialize(QSurface *surface, QOpenGLContext *con
surfaceObject()->installEventFilter(this);
- connect(context, &QOpenGLContext::aboutToBeDestroyed, this, &Q3DSSurfaceViewerPrivate::shutdown);
+ connect(context, &QOpenGLContext::aboutToBeDestroyed, this, &Q3DSSurfaceViewerPrivate::destroy);
bool success = initializeRuntime();
@@ -257,14 +474,16 @@ bool Q3DSSurfaceViewerPrivate::initialize(QSurface *surface, QOpenGLContext *con
return success;
}
-
-void Q3DSSurfaceViewerPrivate::shutdown()
+/*!
+ * \internal
+ */
+void Q3DSSurfaceViewerPrivate::destroy()
{
bool oldInitialized = (m_viewerApp != nullptr);
if (m_context) {
disconnect(m_context, &QOpenGLContext::aboutToBeDestroyed,
- this, &Q3DSSurfaceViewerPrivate::shutdown);
+ this, &Q3DSSurfaceViewerPrivate::destroy);
}
if (m_surface)
@@ -280,7 +499,9 @@ void Q3DSSurfaceViewerPrivate::shutdown()
Q_EMIT q_ptr->runningChanged(false);
}
-
+/*!
+ * \internal
+ */
void Q3DSSurfaceViewerPrivate::update()
{
if (m_viewerApp && m_viewerApp->IsInitialised()) {
@@ -302,6 +523,9 @@ void Q3DSSurfaceViewerPrivate::update()
extern Q_GUI_EXPORT QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format,
bool include_alpha);
+/*!
+ * \internal
+ */
QImage Q3DSSurfaceViewerPrivate::grab(const QRect &rect)
{
QRect captureRect;
@@ -341,30 +565,35 @@ QImage Q3DSSurfaceViewerPrivate::grab(const QRect &rect)
return image;
}
-QQmlEngine *Q3DSSurfaceViewer::qmlEngine() const
-{
- Q_D(const Q3DSSurfaceViewer);
- return d->qmlEngine;
-}
-
-void Q3DSSurfaceViewer::setQmlEngine(QQmlEngine *qmlEngine)
-{
- Q_D(Q3DSSurfaceViewer);
- d->qmlEngine = qmlEngine;
-}
-
+/*!
+ * \internal
+ */
bool Q3DSSurfaceViewerPrivate::eventFilter(QObject *obj, QEvent *e)
{
if (m_surface && e->type() == QEvent::PlatformSurface) {
if (surfaceObject() == obj) {
QPlatformSurfaceEvent *ev = static_cast<QPlatformSurfaceEvent *>(e);
if (ev->surfaceEventType() == QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed)
- shutdown();
+ destroy();
}
}
return QObject::eventFilter(obj, e);
}
+/*!
+ * \internal
+ */
+void Q3DSSurfaceViewerPrivate::reset()
+{
+ if (m_viewerApp) {
+ releaseRuntime();
+ initializeRuntime();
+ }
+}
+
+/*!
+ * \internal
+ */
bool Q3DSSurfaceViewerPrivate::initializeRuntime()
{
Q_ASSERT(!m_viewerApp);
@@ -407,6 +636,9 @@ bool Q3DSSurfaceViewerPrivate::initializeRuntime()
return true;
}
+/*!
+ * \internal
+ */
void Q3DSSurfaceViewerPrivate::releaseRuntime()
{
m_settings->d_ptr->setViewerApp(nullptr);
@@ -423,6 +655,9 @@ void Q3DSSurfaceViewerPrivate::releaseRuntime()
resetUpdateTimer();
}
+/*!
+ * \internal
+ */
void Q3DSSurfaceViewerPrivate::resetUpdateTimer()
{
if (m_viewerApp && m_updateInterval >= 0) {
@@ -436,6 +671,9 @@ void Q3DSSurfaceViewerPrivate::resetUpdateTimer()
}
}
+/*!
+ * \internal
+ */
QObject *Q3DSSurfaceViewerPrivate::surfaceObject()
{
if (m_surface) {
diff --git a/src/Runtime/api/studio3d/q3dssurfaceviewer.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dssurfaceviewer.h
index c0ae05a0..5c166af9 100644
--- a/src/Runtime/api/studio3d/q3dssurfaceviewer.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dssurfaceviewer.h
@@ -50,55 +50,61 @@ class Q_STUDIO3D_EXPORT Q3DSSurfaceViewer : public QObject
{
Q_OBJECT
Q_DECLARE_PRIVATE(Q3DSSurfaceViewer)
+
+ // #TODO: QT3DS-3532 SurfaceViewer API missing error string
+ //Q_PROPERTY(QString error READ error NOTIFY errorChanged)
+ Q_PROPERTY(bool running READ isRunning NOTIFY runningChanged)
Q_PROPERTY(QSize size READ size WRITE setSize NOTIFY sizeChanged)
Q_PROPERTY(bool autoSize READ autoSize WRITE setAutoSize NOTIFY autoSizeChanged)
Q_PROPERTY(int updateInterval READ updateInterval WRITE setUpdateInterval NOTIFY updateIntervalChanged)
- Q_PROPERTY(bool running READ isRunning NOTIFY runningChanged)
Q_PROPERTY(QString presentationId READ presentationId WRITE setPresentationId NOTIFY presentationIdChanged)
public:
explicit Q3DSSurfaceViewer(QObject *parent = nullptr);
~Q3DSSurfaceViewer();
- bool initialize(QSurface *surface, QOpenGLContext *context, GLuint fboId = 0);
+ bool create(QSurface *surface, QOpenGLContext *context);
+ bool create(QSurface *surface, QOpenGLContext *context, GLuint fboId);
+ void destroy();
- QImage grab(const QRect &rect = QRect());
+ Q3DSPresentation *presentation() const;
+ Q3DSViewerSettings *settings() const;
- QQmlEngine *qmlEngine() const;
- void setQmlEngine(QQmlEngine *qmlEngine);
+ bool isRunning() const;
- // Property accessors
QSize size() const;
+ void setSize(const QSize &size);
+
bool autoSize() const;
+ void setAutoSize(bool autoSize);
+
int updateInterval() const;
- bool isRunning() const;
- QString presentationId() const;
+ void setUpdateInterval(int interval);
int fboId() const;
QSurface *surface() const;
QOpenGLContext *context() const;
- Q3DSViewerSettings *settings() const;
- Q3DSPresentation *presentation() const;
+ QImage grab(const QRect &rect = QRect());
+
+ QQmlEngine *qmlEngine() const;
+ void setQmlEngine(QQmlEngine *qmlEngine);
+ QString presentationId() const;
public Q_SLOTS:
- void setSize(const QSize &size);
- void setAutoSize(bool autoSize);
- void setUpdateInterval(int interval);
void update();
- void shutdown();
- void reset();
void setPresentationId(const QString &id);
Q_SIGNALS:
void presentationLoaded();
void presentationReady();
+ void frameUpdate();
+
+ void presentationIdChanged(const QString &id);
void sizeChanged(const QSize &size);
void autoSizeChanged(bool autoSize);
void updateIntervalChanged(bool autoUpdate);
void runningChanged(bool initialized);
- void frameUpdate();
- void presentationIdChanged(const QString &id);
private:
Q_DISABLE_COPY(Q3DSSurfaceViewer)
diff --git a/src/Runtime/api/studio3d/q3dssurfaceviewer_p.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dssurfaceviewer_p.h
index 656d139c..fc6b4cc8 100644
--- a/src/Runtime/api/studio3d/q3dssurfaceviewer_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dssurfaceviewer_p.h
@@ -62,7 +62,6 @@ public:
explicit Q3DSSurfaceViewerPrivate(Q3DSSurfaceViewer *parent = nullptr);
~Q3DSSurfaceViewerPrivate();
- void reset();
void setSize(const QSize &size);
void setUpdateInterval(int interval);
bool initialize(QSurface *surface, QOpenGLContext *context, GLuint fboId);
@@ -71,12 +70,13 @@ public:
QImage grab(const QRect &rect);
private Q_SLOTS:
- void shutdown();
+ void destroy();
protected:
bool eventFilter(QObject *obj, QEvent *e) override;
private:
+ void reset();
bool initializeRuntime();
void releaseRuntime();
void resetUpdateTimer();
diff --git a/src/Runtime/api/studio3d/q3dsviewersettings.cpp b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsviewersettings.cpp
index b6660c84..187729a0 100644
--- a/src/Runtime/api/studio3d/q3dsviewersettings.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsviewersettings.cpp
@@ -37,46 +37,79 @@
QT_BEGIN_NAMESPACE
+/*!
+ \qmltype ViewerSettings
+ \instantiates Q3DSViewerSettings
+ \inqmlmodule Qt3DStudio
+ \ingroup OpenGLRuntime
+ \brief Qt 3D Studio presentation viewer settings.
+
+ This type provides properties to define presentation independent viewer settings.
+
+ \note ViewerSettings are only applicable when \l Studio3D is used in the
+ default mode, showing the final, composed image from the Qt 3D Studio
+ renderer.
+
+ \sa Studio3D
+*/
+
+/*!
+ \class Q3DSViewerSettings
+ \inmodule OpenGLRuntime
+ \since Qt 3D Studio 2.0
+
+ \brief Qt 3D Studio presentation viewer settings.
+
+ Q3DSViewerSettings provides properties to define presentation independent
+ viewer settings.
+
+ \note This class should not be instantiated directly when working with the
+ C++ APIs. Q3DSSurfaceViewer and Q3DSWidget create a Q3DSViewerSettings
+ instance implicitly. This can be queried via Q3DSSurfaceViewer::settings()
+ or Q3DSWidget::settings().
+ */
+
+/*!
+ * \internal
+ */
Q3DSViewerSettings::Q3DSViewerSettings(QObject *parent)
: QObject(parent)
, d_ptr(new Q3DSViewerSettingsPrivate(this))
{
}
+/*!
+ * \internal
+ */
Q3DSViewerSettings::~Q3DSViewerSettings()
{
}
-QColor Q3DSViewerSettings::matteColor() const
-{
- return d_ptr->m_matteColor;
-}
+/*!
+ \enum Q3DSViewerSettings::ScaleMode
-bool Q3DSViewerSettings::isShowRenderStats() const
-{
- return d_ptr->m_showRenderStats;
-}
+ This enumeration specifies the possible scaling modes.
-Q3DSViewerSettings::ShadeMode Q3DSViewerSettings::shadeMode() const
-{
- return d_ptr->m_shadeMode;
-}
+ \value ScaleModeFit Scales the presentation to fit the output area.
+ \value ScaleModeFill Scales the presentation to completely fill the output area.
+ This is the default.
+ \value ScaleModeCenter Centers the presentation in the output area without scaling it.
+*/
-Q3DSViewerSettings::ScaleMode Q3DSViewerSettings::scaleMode() const
-{
- return d_ptr->m_scaleMode;
-}
+/*!
+ \qmlproperty QColor ViewerSettings::matteColor
-void Q3DSViewerSettings::save(const QString &group, const QString &organization,
- const QString &application)
-{
- d_ptr->save(group, organization, application);
-}
+ Specifies the matte color.
+ */
-void Q3DSViewerSettings::load(const QString &group, const QString &organization,
- const QString &application)
+/*!
+ \property Q3DSViewerSettings::matteColor
+
+ Specifies the matte color.
+ */
+QColor Q3DSViewerSettings::matteColor() const
{
- d_ptr->load(group, organization, application);
+ return d_ptr->m_matteColor;
}
void Q3DSViewerSettings::setMatteColor(const QColor &color)
@@ -87,6 +120,34 @@ void Q3DSViewerSettings::setMatteColor(const QColor &color)
}
}
+/*!
+ \qmlproperty bool ViewerSettings::showRenderStats
+
+ If this property is set to \c true, the simple profile
+ view is displayed in-scene, on top of the 3D content.
+
+ \note this feature can be disabled at build time, in which case this
+ property has no effect.
+
+ The default value is \c{false}.
+*/
+
+/*!
+ \property Q3DSViewerSettings::showRenderStats
+
+ When this property is \c{true}, the simple profile
+ view is displayed in-scene, on top of the 3D content.
+
+ \note This feature can be disabled at build time, in which case this
+ property has no effect.
+
+ Default value is \c{false}.
+*/
+bool Q3DSViewerSettings::isShowRenderStats() const
+{
+ return d_ptr->m_showRenderStats;
+}
+
void Q3DSViewerSettings::setShowRenderStats(bool show)
{
if (d_ptr->m_showRenderStats != show) {
@@ -95,13 +156,65 @@ void Q3DSViewerSettings::setShowRenderStats(bool show)
}
}
+/*!
+ \qmlproperty ViewerSettings::shadeMode
+ */
+
+/*!
+ \property Q3DSViewerSettings::shadeMode
+ */
+Q3DSViewerSettings::ShadeMode Q3DSViewerSettings::shadeMode() const
+{
+ return d_ptr->m_shadeMode;
+}
+
void Q3DSViewerSettings::setShadeMode(Q3DSViewerSettings::ShadeMode mode)
{
if (d_ptr->m_shadeMode != mode) {
d_ptr->setShadeMode(mode);
Q_EMIT shadeModeChanged(mode);
}
+}
+
+/*!
+ \qmlproperty enumeration ViewerSettings::scaleMode
+
+ Specifies the scaling mode. The default value \c is ScaleModeFill where the
+ size of the presentation on-screen follows and fills the size of the output
+ area (the window, the screen, or the area occupied by the Studio3D
+ element).
+
+ During the design phase it can be valuable to see the presentation with
+ some other scaling approach. For example, the Qt 3D Studio Viewer
+ application uses ScaleModeCenter by default.
+
+ \value ScaleModeFit Scales the presentation to fit the output area.
+ \value ScaleModeFill Scales the presentation to completely fill the output area.
+ \value ScaleModeCenter Centers the presentation in the output area without scaling it.
+ The default value is \c{ScaleModeFill}.
+*/
+/*!
+ \property Q3DSViewerSettings::scaleMode
+
+ Specifies the scaling mode. The default value \c is ScaleModeFill where the
+ size of the presentation on-screen follows and fills the size of the output
+ area (the window, the screen, or the area occupied by the \l Studio3D
+ element).
+
+ During the design phase it can be valuable to see the presentation with
+ some other scaling approach. For example, the Qt 3D Studio Viewer
+ application uses ScaleModeCenter by default.
+
+ \value ScaleModeFit Scales the presentation to fit the output area.
+ \value ScaleModeFill Scales the presentation to completely fill the output area.
+ \value ScaleModeCenter Centers the presentation in the output area without scaling it.
+
+ The default value is \c{ScaleModeFill}.
+ */
+Q3DSViewerSettings::ScaleMode Q3DSViewerSettings::scaleMode() const
+{
+ return d_ptr->m_scaleMode;
}
void Q3DSViewerSettings::setScaleMode(Q3DSViewerSettings::ScaleMode mode)
@@ -112,6 +225,50 @@ void Q3DSViewerSettings::setScaleMode(Q3DSViewerSettings::ScaleMode mode)
}
}
+/*!
+ \qmmlmethod ViewerSettings::save
+ Persistently saves the viewer \l{QSettings}{settings} using \a group, \a organization and
+ \a application.
+ \param group
+ \param organization
+ \param application
+ */
+/*!
+ * \brief Q3DSViewerSettings::save Persistently saves the viewer \l{QSettings}{settings}
+ Persistently saves the viewer \l{QSettings}{settings} using \a group, \a organization and
+ \a application.
+ \param group
+ \param organization
+ \param application
+ */
+void Q3DSViewerSettings::save(const QString &group, const QString &organization,
+ const QString &application)
+{
+ d_ptr->save(group, organization, application);
+}
+
+/*!
+ \qmlmethod ViewerSettings::load
+ Loads previously saved viewer \l{QSettings}{settings} using \a group, \a organization and
+ \a application.
+ \param group
+ \param organization
+ \param application
+ */
+/*!
+ * \brief Q3DSViewerSettings::load Loads previously saved viewer \l{QSettings}{settings}
+ Loads previously saved viewer \l{QSettings}{settings} using \a group, \a organization and
+ \a application.
+ \param group
+ \param organization
+ \param application
+ */
+void Q3DSViewerSettings::load(const QString &group, const QString &organization,
+ const QString &application)
+{
+ d_ptr->load(group, organization, application);
+}
+
Q3DSViewerSettingsPrivate::Q3DSViewerSettingsPrivate(Q3DSViewerSettings *q)
: QObject(q)
, q_ptr(q)
diff --git a/src/Runtime/api/studio3d/q3dsviewersettings.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsviewersettings.h
index 82d7d62e..5d7abf68 100644
--- a/src/Runtime/api/studio3d/q3dsviewersettings.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsviewersettings.h
@@ -44,9 +44,12 @@ class Q_STUDIO3D_EXPORT Q3DSViewerSettings : public QObject
Q_DECLARE_PRIVATE(Q3DSViewerSettings)
Q_ENUMS(ShadeMode)
Q_ENUMS(ScaleMode)
+
+// #TODO: QT3DS-3542 Q3DSViewerSettings API is missing property matteEnabled compared to 2.3
+// Q_PROPERTY(bool matteEnabled READ matteEnabled WRITE setMatteEnabled NOTIFY matteEnabledChanged)
+
Q_PROPERTY(QColor matteColor READ matteColor WRITE setMatteColor NOTIFY matteColorChanged)
Q_PROPERTY(bool showRenderStats READ isShowRenderStats WRITE setShowRenderStats NOTIFY showRenderStatsChanged)
- Q_PROPERTY(ShadeMode shadeMode READ shadeMode WRITE setShadeMode NOTIFY shadeModeChanged)
Q_PROPERTY(ScaleMode scaleMode READ scaleMode WRITE setScaleMode NOTIFY scaleModeChanged)
public:
@@ -66,7 +69,6 @@ public:
QColor matteColor() const;
bool isShowRenderStats() const;
- ShadeMode shadeMode() const;
ScaleMode scaleMode() const;
Q_INVOKABLE void save(const QString &group, const QString &organization = QString(),
@@ -77,7 +79,6 @@ public:
public Q_SLOTS:
void setMatteColor(const QColor &color);
void setShowRenderStats(bool show);
- void setShadeMode(ShadeMode mode);
void setScaleMode(ScaleMode mode);
Q_SIGNALS:
@@ -90,8 +91,10 @@ private:
Q_DISABLE_COPY(Q3DSViewerSettings)
Q3DSViewerSettingsPrivate *d_ptr;
+ ShadeMode shadeMode() const;
+ void setShadeMode(ShadeMode mode);
+
friend class Q3DSSurfaceViewerPrivate;
- friend class Q3DSWidgetPrivate;
friend class Q3DSRenderer;
friend class Q3DSStudio3D;
};
diff --git a/src/Runtime/api/studio3d/q3dsviewersettings_p.h b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsviewersettings_p.h
index 48fbae3a..48fbae3a 100644
--- a/src/Runtime/api/studio3d/q3dsviewersettings_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/q3dsviewersettings_p.h
diff --git a/src/Runtime/api/studio3d/qstudio3dglobal.h b/src/Runtime/ogl-runtime/src/api/studio3d/qstudio3dglobal.h
index d1960634..d1960634 100644
--- a/src/Runtime/api/studio3d/qstudio3dglobal.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/qstudio3dglobal.h
diff --git a/src/Runtime/api/studio3d/studio3d.pro b/src/Runtime/ogl-runtime/src/api/studio3d/studio3d.pro
index e2592426..62d0613f 100644
--- a/src/Runtime/api/studio3d/studio3d.pro
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/studio3d.pro
@@ -16,8 +16,6 @@ LIBS += \
HEADERS += \
q3dsdataoutput.h \
q3dsdataoutput_p.h \
- q3dswidget.h \
- q3dswidget_p.h \
q3dssurfaceviewer.h \
q3dssurfaceviewer_p.h \
qstudio3dglobal.h \
@@ -39,8 +37,7 @@ HEADERS += \
q3dsgeometry.h \
q3dsgeometry_p.h
-SOURCES += q3dswidget.cpp \
- q3dsdataoutput.cpp \
+SOURCES += q3dsdataoutput.cpp \
q3dssurfaceviewer.cpp \
viewerqmlstreamproxy.cpp \
q3dsviewersettings.cpp \
diff --git a/src/Runtime/api/studio3d/studioutils.cpp b/src/Runtime/ogl-runtime/src/api/studio3d/studioutils.cpp
index 9156be7f..9156be7f 100644
--- a/src/Runtime/api/studio3d/studioutils.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/studioutils.cpp
diff --git a/src/Runtime/api/studio3d/studioutils_p.h b/src/Runtime/ogl-runtime/src/api/studio3d/studioutils_p.h
index afec688c..afec688c 100644
--- a/src/Runtime/api/studio3d/studioutils_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/studioutils_p.h
diff --git a/src/Runtime/api/studio3d/viewerqmlstreamproxy.cpp b/src/Runtime/ogl-runtime/src/api/studio3d/viewerqmlstreamproxy.cpp
index 520dc8c6..520dc8c6 100644
--- a/src/Runtime/api/studio3d/viewerqmlstreamproxy.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/viewerqmlstreamproxy.cpp
diff --git a/src/Runtime/api/studio3d/viewerqmlstreamproxy_p.h b/src/Runtime/ogl-runtime/src/api/studio3d/viewerqmlstreamproxy_p.h
index 16569c1c..16569c1c 100644
--- a/src/Runtime/api/studio3d/viewerqmlstreamproxy_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3d/viewerqmlstreamproxy_p.h
diff --git a/src/Runtime/api/studio3dqml/q3dsplugin.cpp b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsplugin.cpp
index 640018f4..640018f4 100644
--- a/src/Runtime/api/studio3dqml/q3dsplugin.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsplugin.cpp
diff --git a/src/Runtime/api/studio3dqml/q3dsplugin.h b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsplugin.h
index 04f69429..04f69429 100644
--- a/src/Runtime/api/studio3dqml/q3dsplugin.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsplugin.h
diff --git a/src/Runtime/api/studio3dqml/q3dspresentationitem.cpp b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dspresentationitem.cpp
index cb571d87..407739e5 100644
--- a/src/Runtime/api/studio3dqml/q3dspresentationitem.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dspresentationitem.cpp
@@ -37,6 +37,45 @@
QT_BEGIN_NAMESPACE
+/*!
+ \qmltype Presentation
+ \instantiates Q3DSPresentationItem
+ \inqmlmodule QtStudio3D
+ \ingroup OpenGLRuntime
+ \inherits Q3DSPresentation
+ \keyword Studio3D
+
+ \brief Represents a Qt 3D Studio presentation.
+
+ This item provides properties and methods for controlling a
+ presentation.
+
+ Qt 3D Studio supports multiple presentations in one project. There
+ is always a main presentation and zero or more
+ sub-presentations. The sub-presentations are composed into the
+ main presentations either as contents of Qt 3D Studio layers or as
+ texture maps.
+
+ In the filesystem each presentation corresponds to one \c{.uip}
+ presentation file. When present, the \c{.uia} project file ties
+ these together by specifying a name for each of the
+ (sub-)presentations and specifies which one is the main one.
+
+ The \c{.uia} project also defines \l{DataInput}s and
+ \l{DataOutput}s that are exported by the presentations.
+ \l{DataInput}s provide a way to provide input to the presentation
+ to e.g. control a timeline of a subpresentation from code.
+ \l{DataOutput}s provide a way to get notified when an attribute
+ is changed in the presentation by animation timeline,
+ by behavior scripts or by a \l{DataInput}.
+
+ From the API point of view Presentation corresponds to the
+ main presentation. The source property can refer either to a
+ \c{.uia} or \c{.uip} file. When specifying a file with \c{.uip}
+ extension and a \c{.uia} is present with the same name, the
+ \c{.uia} is loaded automatically and thus sub-presentation
+ information is available regardless.
+ */
Q3DSPresentationItem::Q3DSPresentationItem(QObject *parent)
: Q3DSPresentation(parent)
, m_subPresentationSettings(nullptr)
@@ -47,6 +86,12 @@ Q3DSPresentationItem::~Q3DSPresentationItem()
{
}
+// #TODO: QT3DS-3565 subPresentationSettings is missing documentation
+/*!
+ \qmlproperty SubPresentationSettings Presentation::subPresentationSettings
+
+ Note: This property is read-only.
+ */
Q3DSSubPresentationSettings *Q3DSPresentationItem::subPresentationSettings() const
{
return m_subPresentationSettings;
diff --git a/src/Runtime/api/studio3dqml/q3dspresentationitem_p.h b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dspresentationitem_p.h
index 757f34fa..757f34fa 100644
--- a/src/Runtime/api/studio3dqml/q3dspresentationitem_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dspresentationitem_p.h
diff --git a/src/Runtime/api/studio3dqml/q3dsrenderer.cpp b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsrenderer.cpp
index a3d7b2d8..bbfee502 100644
--- a/src/Runtime/api/studio3dqml/q3dsrenderer.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsrenderer.cpp
@@ -37,6 +37,7 @@
#include <QtStudio3D/private/q3dsviewersettings_p.h>
#include <QtStudio3D/private/q3dspresentation_p.h>
#include <QtStudio3D/private/studioutils_p.h>
+#include <QtStudio3D/private/q3dsdatainput_p.h>
#include <QtCore/qdebug.h>
#include <QtGui/qwindow.h>
@@ -413,11 +414,16 @@ void Q3DSRenderer::processCommands()
}
case CommandType_RequestDataInputs: {
QVariantList *requestData = new QVariantList();
- if (m_presentation) {
- const auto diList = m_presentation->dataInputs();
+ if (m_runtime) {
+ const auto diList = m_runtime->dataInputs();
- for (const auto &it : diList)
- requestData->append(QVariant::fromValue(it));
+ for (const auto &it : diList) {
+ Q3DSDataInput *newIt = new Q3DSDataInput(it, nullptr);
+ newIt->d_ptr->m_max = m_runtime->dataInputMax(it);
+ newIt->d_ptr->m_min = m_runtime->dataInputMin(it);
+
+ requestData->append(QVariant::fromValue(newIt));
+ }
}
Q_EMIT requestResponse(cmd.m_elementPath, cmd.m_commandType, requestData);
diff --git a/src/Runtime/api/studio3dqml/q3dsrenderer_p.h b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsrenderer_p.h
index 6d044ff7..6d044ff7 100644
--- a/src/Runtime/api/studio3dqml/q3dsrenderer_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsrenderer_p.h
diff --git a/src/Runtime/api/studio3dqml/q3dsstudio3d.cpp b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsstudio3d.cpp
index 41f59f44..3d48babc 100644
--- a/src/Runtime/api/studio3dqml/q3dsstudio3d.cpp
+++ b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsstudio3d.cpp
@@ -43,37 +43,154 @@
QT_BEGIN_NAMESPACE
+/*!
+ \qmltype Studio3D
+ \instantiates Q3DSStudio3D
+ \inqmlmodule QtStudio3D
+ \ingroup OpenGLRuntime
+ \inherits Item
+ \keyword Studio3D
+
+ \brief Qt 3D Studio presentation viewer.
+
+ This type enables developers to embed Qt 3D Studio presentations in Qt
+ Quick.
+
+ \section2 Example Usage
+
+ \qml
+ Studio3D {
+ id: studio3D
+ anchors.fill: parent
+
+ Presentation {
+ source: "qrc:///presentation.uia"
+ SceneElement {
+ id: scene
+ elementPath: "Scene"
+ currentSlideIndex: 2
+ }
+ Element {
+ id: textLabel
+ elementPath: "Scene.Layer.myLabel"
+ }
+ }
+ ViewerSettings {
+ showRenderStats: true
+ }
+ onRunningChanged: {
+ console.log("Presentation ready!");
+ }
+ }
+ \endqml
+
+ \section2 Controlling the presentation
+
+ Like the example above suggests, Studio3D and the other types under the
+ QtStudio3D import offer more than simply rendering the animated Qt 3D
+ Studio presentation. They also offer scene manipulation, including
+
+ \list
+
+ \li querying and changing scene object properties (for example, the
+ transform of a model, colors and other settings of a material, etc.) via
+ Presentation::getAttribute(), Presentation::setAttribute(), \l Element, and
+ \l DataInput,
+
+ \li changing slides (and thus starting the relevant animations and applying
+ the scene object property changes associated with the new slide) via
+ Presentation::goToSlide(), \l SceneElement, and \l DataInput,
+
+ \li and controlling the timeline (the current playback position for the
+ key-frame based animations) both on the main scene and on individual
+ Component nodes via Presentation::goToTime(), \l SceneElement, and \l DataInput.
+
+ \endlist
+
+ \sa Presentation
+*/
+
+/*!
+ \qmlsignal Studio3D::frameUpdate()
+
+ This signal is emitted each time a frame has been rendered.
+*/
+
+/*!
+ \qmlsignal Studio3D::presentationLoaded()
+
+ This signal is emitted when the presentation has been loaded and is ready
+ to be shown.
+*/
+
+/*!
+ \qmlsignal Studio3D::presentationReady()
+
+ This signal is emitted when the presentation has fully initialized its 3D
+ scene for the first frame.
+
+ The difference to presentationLoaded() is that this signal is emitted only
+ when the asynchronous operations needed to build to 3D scene and the first
+ frame have completed.
+
+ When implementing splash screens via Loader items and the Item::visible
+ property, this is the signal that should be used to trigger hiding the
+ splash screen.
+*/
+
Q3DSStudio3D::Q3DSStudio3D()
: m_viewerSettings(nullptr)
, m_presentation(nullptr)
, m_emitRunningChange(false)
, m_isRunning(false)
- , m_ignoreMouseEvents(false)
- , m_ignoreWheelEvents(false)
- , m_ignoreKeyboardEvents(false)
+ , m_eventIgnoreFlags(EnableAllEvents)
, m_pixelRatio(1.0)
{
setMirrorVertically(true);
connect(this, &Q3DSStudio3D::windowChanged, this, &Q3DSStudio3D::handleWindowChanged);
connect(this, &Q3DSStudio3D::visibleChanged, this, &Q3DSStudio3D::handleVisibleChanged);
- setIgnoreEvents(false, false, false);
+ updateEventMasks();
}
Q3DSStudio3D::~Q3DSStudio3D()
{
}
+/*!
+ \qmlproperty Presentation Studio3D::presentation
+
+ Accessor for the presentation. Applications are expected to create a single
+ Presentation child object for Studio3D. If this is omitted, a presentation
+ is created automatically.
+
+ This property is read-only.
+*/
Q3DSPresentationItem *Q3DSStudio3D::presentation() const
{
return m_presentation;
}
+// #TODO: QT3DS-3566 viewerSettings is missing documentation
+/*!
+ \qmlproperty ViewerSettings Studio3D::viewerSettings
+
+ This property is read-only.
+*/
Q3DSViewerSettings *Q3DSStudio3D::viewerSettings() const
{
return m_viewerSettings;
}
+/*!
+ \qmlproperty string Studio3D::error
+
+ Contains the text for the error message that was generated during the
+ loading of the presentation. When no error occurred or there is no
+ presentation loaded, the value is an empty string.
+
+ This property is read-only.
+*/
QString Q3DSStudio3D::error() const
{
return m_error;
@@ -87,20 +204,45 @@ void Q3DSStudio3D::setError(const QString &error)
}
}
-void Q3DSStudio3D::setIgnoreEvents(bool mouse, bool wheel, bool keyboard)
+/*!
+ \qmlproperty EventIgnoreFlags Studio3D::ignoredEvents
+
+ This property can be used to ignore mouse/wheel/keyboard events.
+ By default all events are enabled.
+*/
+
+Q3DSStudio3D::EventIgnoreFlags Q3DSStudio3D::ignoredEvents() const
+{
+ return m_eventIgnoreFlags;
+}
+
+void Q3DSStudio3D::setIgnoredEvents(EventIgnoreFlags flags)
{
- // TODO: It might be beneficial to have these as properties so they could be acceessed from QML
- m_ignoreMouseEvents = mouse;
- m_ignoreWheelEvents = wheel;
- m_ignoreKeyboardEvents = keyboard;
+ if (m_eventIgnoreFlags == flags)
+ return;
+
+ m_eventIgnoreFlags = flags;
+ updateEventMasks();
+ Q_EMIT ignoredEventsChanged();
+}
- if (mouse)
+/*!
+ \internal
+ */
+void Q3DSStudio3D::updateEventMasks()
+{
+ if (m_eventIgnoreFlags.testFlag(IgnoreMouseEvents)) {
setAcceptedMouseButtons(Qt::NoButton);
- else
- setAcceptedMouseButtons(Qt::LeftButton | Qt::RightButton | Qt::MiddleButton);
- setAcceptHoverEvents(!mouse);
+ setAcceptHoverEvents(false);
+ } else {
+ setAcceptedMouseButtons(Qt::MouseButtonMask);
+ setAcceptHoverEvents(true);
+ }
}
+/*!
+ \internal
+ */
void Q3DSStudio3D::componentComplete()
{
const auto childObjs = children();
@@ -134,6 +276,9 @@ void Q3DSStudio3D::componentComplete()
QQuickFramebufferObject::componentComplete();
}
+/*!
+ \internal
+ */
void Q3DSStudio3D::handleWindowChanged(QQuickWindow *window)
{
if (!window)
@@ -148,13 +293,19 @@ void Q3DSStudio3D::handleWindowChanged(QQuickWindow *window)
connect(window, &QQuickWindow::afterSynchronizing, this, &Q3DSStudio3D::update);
}
-// Queue up a command to inform the renderer of a newly-changed visible/hidden status.
+/*!
+ \internal
+ Queue up a command to inform the renderer of a newly-changed visible/hidden status.
+ */
void Q3DSStudio3D::handleVisibleChanged()
{
m_pendingCommands.m_visibleChanged = true;
m_pendingCommands.m_visible = isVisible();
}
+/*!
+ \brief internal
+ */
void Q3DSStudio3D::reset()
{
// Fake a source change to trigger a reloading of the presentation
@@ -164,6 +315,9 @@ void Q3DSStudio3D::reset()
m_pendingCommands.m_variantList = m_presentation->variantList();
}
+/*!
+ \internal
+ */
void Q3DSStudio3D::requestResponseHandler(const QString &elementPath, CommandType commandType,
void *requestData)
{
@@ -203,7 +357,10 @@ void Q3DSStudio3D::requestResponseHandler(const QString &elementPath, CommandTyp
}
}
-// Create the Q3DSRenderer. Invoked automatically by the QML scene graph.
+/*!
+ \internal
+ Create the Q3DSRenderer. Invoked automatically by the QML scene graph.
+ */
QQuickFramebufferObject::Renderer *Q3DSStudio3D::createRenderer() const
{
// It is "illegal" to create a connection between the renderer
@@ -234,23 +391,33 @@ QQuickFramebufferObject::Renderer *Q3DSStudio3D::createRenderer() const
return renderer;
}
+/*!
+ \qmlproperty bool Studio3D::running
+
+ The value of this property is \c true when the presentation has been loaded
+ and is ready to be shown.
+
+ This property is read-only.
+*/
bool Q3DSStudio3D::isRunning() const
{
return m_isRunning;
}
-/** Emit QML `runningChanged` and `frameUpdate` and signals.
- * This method is called every frame, and emits the `frameUpdate` signal every frame,
- * regardless of plugin visibility. This allows a hidden Qt3DSView to still process
- * information every frame, even though the Renderer is not rendering.
- *
- * To prevent expensive onFrameUpdate handlers from being processed when hidden,
- * add an early return to the top like:
- *
- * onFrameUpdate: {
- * if (!visible) return;
- * ...
- * }
+/*!
+ \internal
+ Emit QML `runningChanged` and `frameUpdate` and signals.
+ This method is called every frame, and emits the `frameUpdate` signal every frame,
+ regardless of plugin visibility. This allows a hidden Qt3DSView to still process
+ information every frame, even though the Renderer is not rendering.
+
+ To prevent expensive onFrameUpdate handlers from being processed when hidden,
+ add an early return to the top like:
+
+ onFrameUpdate: {
+ if (!visible) return;
+ ...
+ }
*/
void Q3DSStudio3D::tick()
{
@@ -267,7 +434,10 @@ void Q3DSStudio3D::tick()
}
}
-// Copies the list of commands previously queued up. Called by Q3DSRenderer::synchronize().
+/*!
+ \internal
+ Copies the list of commands previously queued up. Called by Q3DSRenderer::synchronize().
+ */
void Q3DSStudio3D::getCommands(bool emitInitialize, CommandQueue &renderQueue)
{
if (emitInitialize)
@@ -277,62 +447,87 @@ void Q3DSStudio3D::getCommands(bool emitInitialize, CommandQueue &renderQueue)
m_pendingCommands.clear(false);
}
+/*!
+ \internal
+ */
void Q3DSStudio3D::mousePressEvent(QMouseEvent *event)
{
- if (!m_ignoreMouseEvents) {
- if (m_pixelRatio != 1.0) {
- QMouseEvent scaledEvent(event->type(), event->pos() * m_pixelRatio,
- event->button(), event->buttons(), event->modifiers());
- m_presentation->mousePressEvent(&scaledEvent);
- } else {
- m_presentation->mousePressEvent(event);
- }
+ if (m_eventIgnoreFlags.testFlag(IgnoreMouseEvents))
+ return;
+
+ if (m_pixelRatio != 1.0) {
+ QMouseEvent scaledEvent(event->type(), event->pos() * m_pixelRatio,
+ event->button(), event->buttons(), event->modifiers());
+ m_presentation->mousePressEvent(&scaledEvent);
+ } else {
+ m_presentation->mousePressEvent(event);
}
}
+/*!
+ \internal
+ */
void Q3DSStudio3D::mouseReleaseEvent(QMouseEvent *event)
{
- if (!m_ignoreMouseEvents) {
- if (m_pixelRatio != 1.0) {
- QMouseEvent scaledEvent(event->type(), event->pos() * m_pixelRatio,
- event->button(), event->buttons(), event->modifiers());
- m_presentation->mouseReleaseEvent(&scaledEvent);
- } else {
- m_presentation->mouseReleaseEvent(event);
- }
+ if (m_eventIgnoreFlags.testFlag(IgnoreMouseEvents))
+ return;
+
+ if (m_pixelRatio != 1.0) {
+ QMouseEvent scaledEvent(event->type(), event->pos() * m_pixelRatio,
+ event->button(), event->buttons(), event->modifiers());
+ m_presentation->mouseReleaseEvent(&scaledEvent);
+ } else {
+ m_presentation->mouseReleaseEvent(event);
}
}
+/*!
+ \internal
+ */
void Q3DSStudio3D::mouseMoveEvent(QMouseEvent *event)
{
- if (!m_ignoreMouseEvents) {
- if (m_pixelRatio != 1.0) {
- QMouseEvent scaledEvent(event->type(), event->pos() * m_pixelRatio,
- event->button(), event->buttons(), event->modifiers());
- m_presentation->mouseMoveEvent(&scaledEvent);
- } else {
- m_presentation->mouseMoveEvent(event);
- }
+ if (m_eventIgnoreFlags.testFlag(IgnoreMouseEvents))
+ return;
+
+ if (m_pixelRatio != 1.0) {
+ QMouseEvent scaledEvent(event->type(), event->pos() * m_pixelRatio,
+ event->button(), event->buttons(), event->modifiers());
+ m_presentation->mouseMoveEvent(&scaledEvent);
+ } else {
+ m_presentation->mouseMoveEvent(event);
}
}
+/*!
+ \internal
+ */
void Q3DSStudio3D::wheelEvent(QWheelEvent *event)
{
- if (!m_ignoreWheelEvents)
- m_presentation->wheelEvent(event);
+ if (m_eventIgnoreFlags.testFlag(IgnoreWheelEvents))
+ return;
+
+ m_presentation->wheelEvent(event);
}
+/*!
+ \internal
+ */
void Q3DSStudio3D::keyPressEvent(QKeyEvent *event)
{
- if (m_ignoreKeyboardEvents)
+ if (m_eventIgnoreFlags.testFlag(IgnoreKeyboardEvents))
return;
+
m_presentation->keyPressEvent(event);
}
+/*!
+ \internal
+ */
void Q3DSStudio3D::keyReleaseEvent(QKeyEvent *event)
{
- if (m_ignoreKeyboardEvents)
+ if (m_eventIgnoreFlags.testFlag(IgnoreKeyboardEvents))
return;
+
if (!event->isAutoRepeat())
m_presentation->keyReleaseEvent(event);
}
diff --git a/src/Runtime/api/studio3dqml/q3dsstudio3d_p.h b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsstudio3d_p.h
index 0fd3b9d0..eed8459a 100644
--- a/src/Runtime/api/studio3dqml/q3dsstudio3d_p.h
+++ b/src/Runtime/ogl-runtime/src/api/studio3dqml/q3dsstudio3d_p.h
@@ -59,8 +59,19 @@ class Q3DSStudio3D : public QQuickFramebufferObject
Q_PROPERTY(Q3DSPresentationItem *presentation READ presentation CONSTANT)
Q_PROPERTY(Q3DSViewerSettings *viewerSettings READ viewerSettings CONSTANT)
Q_PROPERTY(QString error READ error NOTIFY errorChanged)
+ Q_PROPERTY(EventIgnoreFlags ignoredEvents READ ignoredEvents WRITE setIgnoredEvents NOTIFY ignoredEventsChanged)
public:
+ enum EventIgnoreFlag {
+ EnableAllEvents = 0,
+ IgnoreMouseEvents = 0x01,
+ IgnoreWheelEvents = 0x02,
+ IgnoreKeyboardEvents = 0x04,
+ IgnoreAllInputEvents = IgnoreMouseEvents | IgnoreWheelEvents | IgnoreKeyboardEvents
+ };
+ Q_DECLARE_FLAGS(EventIgnoreFlags, EventIgnoreFlag)
+ Q_FLAG(EventIgnoreFlags)
+
Q3DSStudio3D();
~Q3DSStudio3D() override;
@@ -81,7 +92,8 @@ public:
void keyPressEvent(QKeyEvent *event) override;
void keyReleaseEvent(QKeyEvent *event) override;
- void setIgnoreEvents(bool mouse, bool wheel, bool keyboard);
+ EventIgnoreFlags ignoredEvents() const;
+ void setIgnoredEvents(EventIgnoreFlags flags);
void componentComplete() override;
@@ -89,6 +101,7 @@ Q_SIGNALS:
void frameUpdate();
void runningChanged(bool initialized);
void errorChanged(const QString &error);
+ void ignoredEventsChanged();
void presentationReady();
void presentationLoaded();
@@ -101,6 +114,8 @@ protected Q_SLOTS:
void tick();
void requestResponseHandler(const QString &elementPath, CommandType commandType,
void *requestData);
+private:
+ void updateEventMasks();
protected:
Q3DSViewerSettings *m_viewerSettings;
@@ -108,15 +123,15 @@ protected:
bool m_emitRunningChange;
bool m_isRunning;
- bool m_ignoreMouseEvents;
- bool m_ignoreWheelEvents;
- bool m_ignoreKeyboardEvents;
+ EventIgnoreFlags m_eventIgnoreFlags;
CommandQueue m_pendingCommands;
qreal m_pixelRatio;
QString m_error;
};
+Q_DECLARE_OPERATORS_FOR_FLAGS(Q3DSStudio3D::EventIgnoreFlags)
+
QT_END_NAMESPACE
#endif // Q3DS_STUDIO3D_H
diff --git a/src/Runtime/api/studio3dqml/qmldir b/src/Runtime/ogl-runtime/src/api/studio3dqml/qmldir
index 1eaa8f2b..1eaa8f2b 100644
--- a/src/Runtime/api/studio3dqml/qmldir
+++ b/src/Runtime/ogl-runtime/src/api/studio3dqml/qmldir
diff --git a/src/Runtime/api/studio3dqml/studio3dqml.pro b/src/Runtime/ogl-runtime/src/api/studio3dqml/studio3dqml.pro
index b62a3424..b62a3424 100644
--- a/src/Runtime/api/studio3dqml/studio3dqml.pro
+++ b/src/Runtime/ogl-runtime/src/api/studio3dqml/studio3dqml.pro
diff --git a/src/Runtime/ogl-runtime/src/commoninclude.pri b/src/Runtime/ogl-runtime/src/commoninclude.pri
new file mode 100644
index 00000000..13925a3b
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/commoninclude.pri
@@ -0,0 +1 @@
+include($$PWD/../commoninclude.pri)
diff --git a/src/Runtime/Source/datamodel/DocumentResourceManagerCustomMaterialParser.h b/src/Runtime/ogl-runtime/src/datamodel/DocumentResourceManagerCustomMaterialParser.h
index 47a8092d..47a8092d 100644
--- a/src/Runtime/Source/datamodel/DocumentResourceManagerCustomMaterialParser.h
+++ b/src/Runtime/ogl-runtime/src/datamodel/DocumentResourceManagerCustomMaterialParser.h
diff --git a/src/Runtime/Source/datamodel/DocumentResourceManagerRenderPluginParser.h b/src/Runtime/ogl-runtime/src/datamodel/DocumentResourceManagerRenderPluginParser.h
index e3eee1cf..e3eee1cf 100644
--- a/src/Runtime/Source/datamodel/DocumentResourceManagerRenderPluginParser.h
+++ b/src/Runtime/ogl-runtime/src/datamodel/DocumentResourceManagerRenderPluginParser.h
diff --git a/src/Runtime/Source/datamodel/DocumentResourceManagerScriptParser.h b/src/Runtime/ogl-runtime/src/datamodel/DocumentResourceManagerScriptParser.h
index 4c2ce437..4c2ce437 100644
--- a/src/Runtime/Source/datamodel/DocumentResourceManagerScriptParser.h
+++ b/src/Runtime/ogl-runtime/src/datamodel/DocumentResourceManagerScriptParser.h
diff --git a/src/Runtime/Source/datamodel/Qt3DSMetadata.cpp b/src/Runtime/ogl-runtime/src/datamodel/Qt3DSMetadata.cpp
index 197582b0..89bb4de7 100644
--- a/src/Runtime/Source/datamodel/Qt3DSMetadata.cpp
+++ b/src/Runtime/ogl-runtime/src/datamodel/Qt3DSMetadata.cpp
@@ -608,7 +608,7 @@ public:
} break;
case qt3dsdm::AdditionalMetaDataType::Range: {
const SMetaDataRange &range = argInfo.m_MetaDataData.getData<SMetaDataRange>();
- arg.m_MetaDataRange = eastl::make_pair(range.m_Min, range.m_Max);
+ arg.m_MetaDataRange = eastl::make_pair(range.m_min, range.m_max);
} break;
default:
break;
diff --git a/src/Runtime/Source/datamodel/Qt3DSMetadata.h b/src/Runtime/ogl-runtime/src/datamodel/Qt3DSMetadata.h
index 1efe748c..1efe748c 100644
--- a/src/Runtime/Source/datamodel/Qt3DSMetadata.h
+++ b/src/Runtime/ogl-runtime/src/datamodel/Qt3DSMetadata.h
diff --git a/src/Runtime/ogl-runtime/src/dm/EASTL_new.cpp b/src/Runtime/ogl-runtime/src/dm/EASTL_new.cpp
new file mode 100644
index 00000000..1ca308e7
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/EASTL_new.cpp
@@ -0,0 +1,40 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "EASTL/allocator.h"
+
+void *operator new[](size_t size, const char *, int, unsigned, const char *, int)
+{
+ return malloc(size);
+}
+
+void *operator new[](size_t size, size_t, size_t, const char *, int, unsigned, const char *, int)
+{
+ return malloc(size);
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/Qt3DSDMPrefix.h b/src/Runtime/ogl-runtime/src/dm/Qt3DSDMPrefix.h
new file mode 100644
index 00000000..4164d646
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/Qt3DSDMPrefix.h
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifdef __cplusplus
+#pragma once
+
+#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
+#define _WIN32_WINNT \
+ 0x0501 // Change this to the appropriate value to target other versions of Windows.
+#endif
+
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+
+// TODO: reference additional headers your program requires here
+#if defined(WIN32) && defined(MSVC)
+#pragma warning(push)
+#pragma warning(disable : 4100)
+#pragma warning(disable : 4512)
+#pragma warning(disable : 4702)
+#pragma warning(disable : 4996)
+#endif
+
+// std includes
+#include <map>
+#include <vector>
+#include <string>
+#include <exception>
+#include <set>
+#include <iostream>
+#include <sstream>
+#include <fstream>
+#include <memory>
+#include <functional>
+
+// Project includes
+#include "StandardExtensions.h"
+
+namespace qt3dsdm {
+using std::ref;
+using std::get;
+using std::bind;
+using std::tuple;
+using std::static_pointer_cast;
+using std::make_pair;
+using std::equal_to;
+using std::vector;
+using std::make_tuple;
+using std::function;
+using std::shared_ptr;
+using std::make_shared;
+}
+#if defined(WIN32) && defined(MSVC)
+#pragma warning(pop)
+#endif
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/dm.pro b/src/Runtime/ogl-runtime/src/dm/dm.pro
new file mode 100644
index 00000000..2e57f308
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/dm.pro
@@ -0,0 +1,58 @@
+TEMPLATE = lib
+TARGET = QT3DSDM
+CONFIG += staticlib
+include(../commoninclude.pri)
+
+DEFINES += QT3DS_AUTHORING _AFXDLL PCRE_STATIC _UNICODE
+
+linux {
+ DEFINES += QT3DSDM_META_DATA_NO_SIGNALS
+}
+
+INCLUDEPATH += \
+ \
+ systems \
+ systems/cores \
+ ../system \
+ ../foundation \
+ ../runtimerender \
+ ../datamodel \
+ ../render \
+ ../3rdparty/EASTL/UnknownVersion/include \
+ ../3rdparty/color \
+
+PRECOMPILED_HEADER = Qt3DSDMPrefix.h
+
+SOURCES += \
+ EASTL_new.cpp \
+ systems/ActionSystem.cpp \
+ systems/SignalsImpl.cpp \
+ systems/SlideSystem.cpp \
+ systems/StudioAnimationSystem.cpp \
+ systems/StudioCoreSystem.cpp \
+ systems/StudioFullSystem.cpp \
+ systems/StudioPropertySystem.cpp \
+ systems/Qt3DSDMComposerTypeDefinitions.cpp \
+ systems/Qt3DSDMGuides.cpp \
+ systems/Qt3DSDMMetaData.cpp \
+ systems/Qt3DSDMSignalSystem.cpp \
+ systems/Qt3DSDMStringTable.cpp \
+ systems/Qt3DSDMValue.cpp \
+ systems/Qt3DSDMXML.cpp \
+ systems/cores/ActionCoreProducer.cpp \
+ systems/cores/AnimationCoreProducer.cpp \
+ systems/cores/DataCoreProducer.cpp \
+ systems/cores/SimpleActionCore.cpp \
+ systems/cores/SimpleAnimationCore.cpp \
+ systems/cores/SimpleDataCore.cpp \
+ systems/cores/SimpleSlideCore.cpp \
+ systems/cores/SimpleSlideGraphCore.cpp \
+ systems/cores/SlideCoreProducer.cpp \
+ systems/cores/SlideGraphCoreProducer.cpp \
+
+HEADERS += \
+ systems/Qt3DSDMDataTypes.h \
+ systems/Qt3DSDMMetaDataTypes.h \
+ systems/Qt3DSDMMetaDataValue.h \
+ systems/Qt3DSDMMetaData.h \
+ systems/Qt3DSDMWStrOpsImpl.h
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/ActionSystem.cpp b/src/Runtime/ogl-runtime/src/dm/systems/ActionSystem.cpp
new file mode 100644
index 00000000..fbd25938
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/ActionSystem.cpp
@@ -0,0 +1,131 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "ActionSystem.h"
+
+using namespace std;
+
+namespace qt3dsdm {
+
+CActionSystem::CActionSystem(TDataCorePtr inDataCore, TSlideCorePtr inSlideCore,
+ TSlideGraphCorePtr inSlideGraphCore, TActionCorePtr inActionCore,
+ TSlideSystemPtr inSlideSystem, Qt3DSDMInstanceHandle inActionInstance,
+ Qt3DSDMPropertyHandle inActionEyeball)
+ : m_DataCore(inDataCore)
+ , m_SlideCore(inSlideCore)
+ , m_SlideGraphCore(inSlideGraphCore)
+ , m_ActionCore(inActionCore)
+ , m_SlideSystem(inSlideSystem)
+ , m_ActionInstance(inActionInstance)
+ , m_ActionEyeball(inActionEyeball)
+{
+ m_Signaller = CreateActionSystemSignaller();
+}
+
+Qt3DSDMActionHandle CActionSystem::CreateAction(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner,
+ SLong4 inTriggerTargetObjects)
+{
+ Q_ASSERT(inSlide.Valid() && inOwner.Valid());
+
+ // Create Action instance handle that derives from Action instance
+ Qt3DSDMInstanceHandle theActionInstance = m_DataCore->CreateInstance();
+ m_DataCore->DeriveInstance(theActionInstance, m_ActionInstance);
+
+ // Associate Action instance handle with Slide
+ m_SlideSystem->AssociateInstanceWithSlide(inSlide, theActionInstance);
+
+ // Unlink the eyeball property because Action can be eyeballed-on/off per-slide
+ m_SlideSystem->UnlinkProperty(theActionInstance, m_ActionEyeball);
+
+ // Create the Action handle
+ Qt3DSDMActionHandle retval =
+ m_ActionCore->CreateAction(theActionInstance, inSlide, inOwner, inTriggerTargetObjects);
+
+ GetSignalSender()->SendActionCreated(retval, inSlide, inOwner);
+ return retval;
+}
+
+void CActionSystem::DeleteAction(Qt3DSDMActionHandle inAction)
+{
+ Qt3DSDMInstanceHandle theActionInstance;
+ SActionInfo theActionInfo = m_ActionCore->GetActionInfo(inAction);
+ m_ActionCore->DeleteAction(inAction, theActionInstance);
+ m_DataCore->DeleteInstance(theActionInstance);
+ GetSignalSender()->SendActionDeleted(inAction, theActionInfo.m_Slide, theActionInfo.m_Owner);
+}
+
+void CActionSystem::GetActions(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inOwner,
+ TActionHandleList &outActions) const
+{
+ // Get all actions that exist in inSlide
+ m_ActionCore->GetActions(inSlide, inOwner, outActions);
+
+ // if inSlide is not master, get all actions that exist in master slide
+ Qt3DSDMSlideHandle theMaster = m_SlideSystem->GetMasterSlide(inSlide);
+ if (theMaster != inSlide) {
+ TActionHandleList theMasterActions;
+ m_ActionCore->GetActions(theMaster, inOwner, theMasterActions);
+ outActions.insert(outActions.end(), theMasterActions.begin(), theMasterActions.end());
+ sort(outActions.begin(), outActions.end());
+ }
+}
+
+bool CActionSystem::GetActionEyeballValue(Qt3DSDMSlideHandle inActiveSlide,
+ Qt3DSDMActionHandle inAction) const
+{
+ SValue theValue;
+ Qt3DSDMInstanceHandle theInstance = m_ActionCore->GetActionInstance(inAction);
+ // Get the eyeball property value from SlideCore. There is no animation on eyeball so we can
+ // query SlideCore directly.
+ m_SlideCore->GetInstancePropertyValue(inActiveSlide, theInstance, m_ActionEyeball, theValue);
+ if (m_SlideCore->IsSlide(inActiveSlide))
+ return qt3dsdm::get<bool>(theValue);
+ return false;
+}
+
+void CActionSystem::SetActionEyeballValue(Qt3DSDMSlideHandle inActiveSlide,
+ Qt3DSDMActionHandle inAction, bool inValue)
+{
+ Qt3DSDMInstanceHandle theInstance = m_ActionCore->GetActionInstance(inAction);
+ // Set the eyeball property value to SlideCore.
+ m_SlideCore->ForceSetInstancePropertyValue(inActiveSlide, theInstance, m_ActionEyeball,
+ inValue);
+}
+
+IActionSystemSignalProvider *CActionSystem::GetSignalProvider()
+{
+ return dynamic_cast<IActionSystemSignalProvider *>(m_Signaller.get());
+}
+
+IActionSystemSignalSender *CActionSystem::GetSignalSender()
+{
+ return dynamic_cast<IActionSystemSignalSender *>(m_Signaller.get());
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/ActionSystem.h b/src/Runtime/ogl-runtime/src/dm/systems/ActionSystem.h
new file mode 100644
index 00000000..fea9894a
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/ActionSystem.h
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef ACTIONSYSTEMH
+#define ACTIONSYSTEMH
+#include "Qt3DSDMActionSystem.h"
+#include "Qt3DSDMActionCore.h"
+#include "Qt3DSDMDataCore.h"
+#include "Qt3DSDMSlideCore.h"
+#include "Qt3DSDMSlideGraphCore.h"
+#include "Qt3DSDMSlides.h"
+#include "Qt3DSDMTransactions.h"
+#include "SignalsImpl.h"
+
+namespace qt3dsdm {
+
+class CActionSystem : public IActionSystem
+{
+ TDataCorePtr m_DataCore;
+ TSlideCorePtr m_SlideCore;
+ TSlideGraphCorePtr m_SlideGraphCore;
+ TActionCorePtr m_ActionCore;
+
+ TSlideSystemPtr m_SlideSystem;
+
+ Qt3DSDMInstanceHandle m_ActionInstance;
+ Qt3DSDMPropertyHandle m_ActionEyeball;
+
+ std::shared_ptr<ISignalItem> m_Signaller;
+
+public:
+ CActionSystem(TDataCorePtr inDataCore, TSlideCorePtr inSlideCore,
+ TSlideGraphCorePtr inSlideGraphCore, TActionCorePtr inActionCore,
+ TSlideSystemPtr inSlideSystem, Qt3DSDMInstanceHandle inActionInstance,
+ Qt3DSDMPropertyHandle inActionEyeball);
+
+ Qt3DSDMActionHandle CreateAction(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inOwner,
+ SLong4 inTriggerTargetObjects) override;
+ void DeleteAction(Qt3DSDMActionHandle inAction) override;
+ void GetActions(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inOwner,
+ TActionHandleList &outActions) const override;
+
+ bool GetActionEyeballValue(Qt3DSDMSlideHandle inActiveSlide,
+ Qt3DSDMActionHandle inAction) const override;
+ void SetActionEyeballValue(Qt3DSDMSlideHandle inActiveSlide, Qt3DSDMActionHandle inAction,
+ bool inValue) override;
+
+ virtual IActionSystemSignalProvider *GetSignalProvider();
+
+private:
+ virtual IActionSystemSignalSender *GetSignalSender();
+
+ CActionSystem(const CActionSystem&) = delete;
+ CActionSystem& operator=(const CActionSystem&) = delete;
+};
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/HandleSystemBase.h b/src/Runtime/ogl-runtime/src/dm/systems/HandleSystemBase.h
new file mode 100644
index 00000000..cb8e0f6c
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/HandleSystemBase.h
@@ -0,0 +1,169 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef HANDLESYSTEMIMPLH
+#define HANDLESYSTEMIMPLH
+
+#include <unordered_map>
+
+namespace qt3dsdm {
+
+class CHandleObject
+{
+public:
+ // Type of CHandleObject
+ // Each subclass needs to specify what type it is
+ // This is used to avoid dynamic_cast (RTTI) which is expensive
+ enum EHandleObjectType {
+ EHandleObjectTypeUnknown = 0,
+ EHandleObjectTypeCDataModelInstance,
+ EHandleObjectTypeCDataModelPropertyDefinitionObject,
+ EHandleObjectTypeSAnimationTrack,
+ EHandleObjectTypeSKeyframe,
+ EHandleObjectTypeSSlide,
+ EHandleObjectTypeSSlideGraph,
+ EHandleObjectTypeAction,
+ EHandleObjectTypeActionHandlerArgument,
+ EHandleObjectTypeCustomProperty,
+ EHandleObjectTypeEvent,
+ EHandleObjectTypeCustomHandler,
+ EHandleObjectTypeHandlerParam,
+ EHandleObjectTypeEnd,
+ };
+
+ CHandleObject(int inHandle = 0)
+ : m_Handle(inHandle)
+ {
+ }
+ virtual ~CHandleObject() {}
+
+ virtual EHandleObjectType GetType() = 0;
+
+ int m_Handle;
+
+private: //noncopyable
+ CHandleObject(const CHandleObject&) = delete;
+ CHandleObject& operator=(const CHandleObject&) = delete;
+
+};
+
+typedef std::shared_ptr<CHandleObject> THandleObjectPtr;
+
+// Note that maps don't need to copy their objects.
+typedef std::unordered_map<int, THandleObjectPtr> THandleObjectMap;
+typedef std::pair<int, THandleObjectPtr> THandleObjectPair;
+
+class IHandleBase
+{
+public:
+ /**
+ * Check whether a given handle exists
+ */
+ virtual bool HandleValid(int inHandle) const = 0;
+};
+
+struct CHandleBase : public IHandleBase
+{
+ THandleObjectMap m_Objects;
+ int m_NextId;
+
+ CHandleBase()
+ : m_NextId(1)
+ {
+ }
+ CHandleBase(const CHandleBase &inOther)
+ : m_Objects(inOther.m_Objects)
+ , m_NextId(inOther.m_NextId)
+ {
+ }
+
+ CHandleBase &operator=(const CHandleBase &inOther)
+ {
+ m_Objects = inOther.m_Objects;
+ m_NextId = inOther.m_NextId;
+ return *this;
+ }
+
+ // IHandleBase
+ bool HandleValid(int inHandle) const override
+ {
+ return m_Objects.find(inHandle) != m_Objects.end();
+ }
+
+ template <typename T>
+ static inline bool HandleObjectValid(int inHandle, const THandleObjectMap &inMap)
+ {
+ THandleObjectMap::const_iterator theIter = inMap.find(inHandle);
+ if (theIter != inMap.end()) {
+ if (theIter->second->GetType() == T::s_Type)
+ return true;
+ }
+ return false;
+ }
+
+ template <typename T>
+ static inline const T *GetHandleObject(int inHandle, const THandleObjectMap &inMap)
+ {
+ THandleObjectMap::const_iterator theIter = inMap.find(inHandle);
+ if (theIter != inMap.end()) {
+ if (theIter->second->GetType() == T::s_Type)
+ return static_cast<const T *>(theIter->second.get());
+ }
+ return NULL;
+ }
+
+ template <typename ObjectType, typename HandleType>
+ static inline void MaybeAddObject(const std::pair<int, THandleObjectPtr> &inItem,
+ std::vector<HandleType> &outHandles)
+ {
+ if (inItem.second->GetType() == ObjectType::s_Type)
+ outHandles.push_back(HandleType(inItem.first));
+ }
+
+ static void EraseHandle(int inHandle, THandleObjectMap &inObjects)
+ {
+ THandleObjectMap::iterator theFind = inObjects.find(inHandle);
+ if (theFind != inObjects.end())
+ inObjects.erase(theFind);
+ }
+
+ // Return the next unused id. There are no guarantees whether positive or negative; what this
+ // will
+ // guarantee is that it isn't currently used in the object map and it is non-zero.
+ int GetNextId()
+ {
+ do {
+ ++m_NextId;
+ } while (m_Objects.find(m_NextId) != m_Objects.end());
+ return m_NextId;
+ }
+};
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/HandleSystemTransactions.h b/src/Runtime/ogl-runtime/src/dm/systems/HandleSystemTransactions.h
new file mode 100644
index 00000000..9d77884e
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/HandleSystemTransactions.h
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef HANDLESYSTEMTRANSACTIONSH
+#define HANDLESYSTEMTRANSACTIONSH
+#include "HandleSystemBase.h"
+#include "Qt3DSDMTransactions.h"
+
+namespace qt3dsdm {
+inline void InsertItemInMap(THandleObjectMap &inObjects,
+ const std::pair<int, THandleObjectPtr> &inItem)
+{
+ inObjects.insert(inItem);
+}
+inline void HandleCreateTransaction(const char *inFile, int inLine, int inHandle,
+ THandleObjectMap &inObjects,
+ TTransactionConsumerPtr &inConsumer)
+{
+ std::pair<int, THandleObjectPtr> theEntry = *inObjects.find(inHandle);
+ std::function<void()> doOp(std::bind(InsertItemInMap, std::ref(inObjects), theEntry));
+ std::function<void()> undoOp(
+ std::bind(CHandleBase::EraseHandle, inHandle, std::ref(inObjects)));
+ TTransactionPtr theTransaction(DoCreateGenericTransaction(inFile, inLine, doOp, undoOp));
+ inConsumer->OnTransaction(theTransaction);
+}
+
+inline void HandleDeleteTransaction(const char *inFile, int inLine, int inHandle,
+ THandleObjectMap &inObjects,
+ TTransactionConsumerPtr &inConsumer)
+{
+ using namespace std;
+ pair<int, THandleObjectPtr> theEntry = *inObjects.find(inHandle);
+ TTransactionPtr theTransaction(DoCreateGenericTransaction(
+ inFile, inLine, std::bind(CHandleBase::EraseHandle, inHandle, std::ref(inObjects)),
+ std::bind(InsertItemInMap, std::ref(inObjects), theEntry)));
+ inConsumer->OnTransaction(theTransaction);
+}
+
+inline void DoCreateHandleCreateTransaction(const char *inFile, int inLine,
+ TTransactionConsumerPtr inConsumer, int inHandle,
+ THandleObjectMap &inObjects)
+{
+ RunWithConsumer(inConsumer, std::bind(HandleCreateTransaction, inFile, inLine, inHandle,
+ std::ref(inObjects), std::placeholders::_1));
+}
+
+#define CREATE_HANDLE_CREATE_TRANSACTION(inConsumer, inHandle, inObjects) \
+ DoCreateHandleCreateTransaction(__FILE__, __LINE__, inConsumer, inHandle, inObjects);
+
+inline void DoCreateHandleDeleteTransaction(const char *inFile, int inLine,
+ TTransactionConsumerPtr inConsumer, int inHandle,
+ THandleObjectMap &inObjects)
+{
+ RunWithConsumer(inConsumer, std::bind(HandleDeleteTransaction, inFile, inLine, inHandle,
+ std::ref(inObjects), std::placeholders::_1));
+}
+
+#define CREATE_HANDLE_DELETE_TRANSACTION(inConsumer, inHandle, inObjects) \
+ DoCreateHandleDeleteTransaction(__FILE__, __LINE__, inConsumer, inHandle, inObjects);
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMActionCore.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMActionCore.h
new file mode 100644
index 00000000..a9201462
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMActionCore.h
@@ -0,0 +1,99 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_ACTION_CORE_H
+#define QT3DSDM_ACTION_CORE_H
+
+#include "Qt3DSDMHandles.h"
+#include "HandleSystemBase.h"
+#include "Qt3DSDMActionInfo.h"
+
+namespace qt3dsdm {
+const long REFERENCED_AS_OWNER = 0x01;
+const long REFERENCED_AS_TRIGGER = 0x02;
+const long REFERENCED_AS_TARGET = 0x04;
+class IStringTable;
+
+/**
+ * ActionCore
+ */
+class IActionCore : public IHandleBase
+{
+public:
+ virtual ~IActionCore() {}
+
+ virtual TStringTablePtr GetStringTablePtr() const = 0;
+ virtual IStringTable &GetStringTable() const = 0;
+ // Action
+ virtual Qt3DSDMActionHandle CreateAction(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inOwner,
+ SLong4 inTriggerTargetObjects) = 0;
+ virtual void DeleteAction(Qt3DSDMActionHandle inAction, Qt3DSDMInstanceHandle &outInstance) = 0;
+ virtual const SActionInfo &GetActionInfo(Qt3DSDMActionHandle inAction) const = 0;
+ virtual void GetActions(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inOwner,
+ TActionHandleList &outActions) const = 0;
+ virtual void GetActions(Qt3DSDMSlideHandle inSlide, TActionHandleList &outActions) const = 0;
+ virtual void GetActions(Qt3DSDMInstanceHandle inOwner, TActionHandleList &outActions) const = 0;
+ virtual void GetActions(TActionHandleList &outActions) const = 0;
+
+ // Return the instance that was allocated for this action.
+ virtual Qt3DSDMInstanceHandle GetActionInstance(Qt3DSDMActionHandle inAction) const = 0;
+ // Reverse lookup into the action system so you can match actions to instances.
+ virtual Qt3DSDMActionHandle GetActionByInstance(Qt3DSDMInstanceHandle inActionInstance) const = 0;
+
+ // Action Properties
+ virtual void SetTriggerObject(Qt3DSDMActionHandle inAction,
+ const SObjectRefType &inTriggerObject) = 0;
+ virtual void SetTargetObject(Qt3DSDMActionHandle inAction,
+ const SObjectRefType &inTargetObject) = 0;
+ virtual void SetEvent(Qt3DSDMActionHandle inAction, const wstring &inEventName) = 0;
+ virtual void SetHandler(Qt3DSDMActionHandle inAction, const wstring &inHandlerName) = 0;
+
+ // Handler Argument
+ virtual Qt3DSDMHandlerArgHandle AddHandlerArgument(Qt3DSDMActionHandle inAction,
+ const TCharStr &inName,
+ HandlerArgumentType::Value inArgType,
+ DataModelDataType::Value inValueType) = 0;
+ virtual void RemoveHandlerArgument(Qt3DSDMHandlerArgHandle inHandlerArgument) = 0;
+ virtual const SHandlerArgumentInfo &
+ GetHandlerArgumentInfo(Qt3DSDMHandlerArgHandle inHandlerArgument) const = 0;
+ virtual void GetHandlerArguments(Qt3DSDMActionHandle inAction,
+ THandlerArgHandleList &outHandlerArguments) const = 0;
+
+ // Handler Argument Properties
+ virtual void GetHandlerArgumentValue(Qt3DSDMHandlerArgHandle inHandlerArgument,
+ SValue &outValue) const = 0;
+ virtual void SetHandlerArgumentValue(Qt3DSDMHandlerArgHandle inHandlerArgument,
+ const SValue &inValue) = 0;
+};
+
+typedef std::shared_ptr<IActionCore> TActionCorePtr;
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMActionInfo.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMActionInfo.h
new file mode 100644
index 00000000..40fd9645
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMActionInfo.h
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_ACTION_INFO_H
+#define QT3DSDM_ACTION_INFO_H
+
+#include "Qt3DSDMDataTypes.h"
+#include "Qt3DSDMMetaDataTypes.h"
+
+namespace qt3dsdm {
+using std::wstring;
+struct SActionInfo
+{
+ // InstanceHandle corresponding to this action (to store other properties not listed here)
+ Qt3DSDMInstanceHandle m_Instance;
+
+ // Where the action is added to
+ Qt3DSDMSlideHandle m_Slide; // the slide that the action is added to
+ Qt3DSDMInstanceHandle
+ m_Owner; // the object that the action is added to (the owner of the action)
+
+ // Trigger object
+ SObjectRefType m_TriggerObject; // trigger object
+ wstring m_Event; // the list of applicable events is based on object type and stored, by type,
+ // in metadata
+
+ // Target object
+ SObjectRefType m_TargetObject; // target object
+ wstring m_Handler; // the list of applicable action handlers is loaded from metadata xml file
+ // and based on object type
+ THandlerArgHandleList m_HandlerArgs; // the list of applicable action arguments is dependent on
+ // the handler and loaded from the metadata xml file.
+
+ SActionInfo() {}
+
+ SActionInfo(Qt3DSDMInstanceHandle inInstance, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner)
+ : m_Instance(inInstance)
+ , m_Slide(inSlide)
+ , m_Owner(inOwner)
+ {
+ }
+};
+
+struct SHandlerArgumentInfo
+{
+ Qt3DSDMActionHandle m_Action; // Action that owns this Action Argument
+ TCharStr m_Name; // Name of the Action Argument
+ HandlerArgumentType::Value m_ArgType; // m_ArgType will override m_ValueType
+ DataModelDataType::Value m_ValueType; // m_ValueType is ignored if ArgType is specified
+ SValue m_Value; // Value of the Action Argument
+
+ SHandlerArgumentInfo()
+ : m_ArgType(HandlerArgumentType::None)
+ , m_ValueType(DataModelDataType::None)
+ {
+ }
+
+ SHandlerArgumentInfo(Qt3DSDMActionHandle inAction, const TCharStr &inName,
+ HandlerArgumentType::Value inArgType, DataModelDataType::Value inValueType)
+ : m_Action(inAction)
+ , m_Name(inName)
+ , m_ArgType(inArgType)
+ , m_ValueType(inValueType)
+ {
+ }
+};
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMActionSystem.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMActionSystem.h
new file mode 100644
index 00000000..8713729a
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMActionSystem.h
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_ACTION_SYSTEM_H
+#define QT3DSDM_ACTION_SYSTEM_H
+#include "Qt3DSDMHandles.h"
+#include "Qt3DSDMActionCore.h"
+
+namespace qt3dsdm {
+/**
+ * ActionSystem acts as a wrapper or helper around ActionCore. ActionSystem will call
+ * ActionCore and perform other necessary setups. It also has the knowledge of other
+ * system or core so there are some synchronization being done here.
+ *
+ * When in doubts which one to use (ActionSystem or ActionCore), always use ActionSystem
+ */
+class IActionSystem
+{
+public:
+ virtual ~IActionSystem() {}
+
+ // CreateAction will create Action's InstanceHandle and Action's ActionHandle and do some
+ // necessary setup
+ virtual Qt3DSDMActionHandle CreateAction(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inOwner,
+ SLong4 inTriggerTargetObjects) = 0;
+ // DeleteAction will delete both Action's ActionHandle and Action's InstanceHandle
+ virtual void DeleteAction(Qt3DSDMActionHandle inAction) = 0;
+ // Return all actions that belong to a certain instance in a certain slide + the master slide
+ virtual void GetActions(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inOwner,
+ TActionHandleList &outActions) const = 0;
+
+ // Get/set action eyeball property value
+ virtual bool GetActionEyeballValue(Qt3DSDMSlideHandle inActiveSlide,
+ Qt3DSDMActionHandle inAction) const = 0;
+ virtual void SetActionEyeballValue(Qt3DSDMSlideHandle inActiveSlide, Qt3DSDMActionHandle inAction,
+ bool inValue) = 0;
+};
+
+typedef std::shared_ptr<IActionSystem> TActionSystemPtr;
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMAnimation.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMAnimation.h
new file mode 100644
index 00000000..457b042f
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMAnimation.h
@@ -0,0 +1,841 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QT3DSDM_ANIMATION_H
+#define QT3DSDM_ANIMATION_H
+
+#include "Qt3DSDMHandles.h"
+#include "Qt3DSDMDataTypes.h"
+#include "Qt3DSDMValue.h"
+
+namespace qt3dsdm {
+
+struct SLinearKeyframe
+{
+ float m_KeyframeSeconds;
+ float m_KeyframeValue;
+};
+
+struct SBezierKeyframe : public SLinearKeyframe
+{
+ float m_InTangentTime; // time
+ float m_InTangentValue; // value offset
+ float m_OutTangentTime; // time offset in seconds
+ float m_OutTangentValue; // value offset
+};
+
+typedef std::vector<SBezierKeyframe> TBezierKeyframeList;
+
+/**
+ * Ease in/out are parameters that affect the bezier evaluation.
+ * Ease in/out at 100 means that the control values are at the end points thus creating
+ * a gradual deceleration. Ease in/out at 0 means that interpolation is linear, the
+ * control points are at 1/3 and 2/3's the distance to the next value.
+ * Ease in/out go from 0.f to 100.0f
+ */
+struct SEaseInEaseOutKeyframe : public SLinearKeyframe
+{
+ float m_EaseIn;
+ float m_EaseOut;
+};
+
+} // namespace qt3dsdm
+
+namespace qt3ds {
+namespace foundation {
+ // Disable calling destructor of these pod types
+ template <>
+ struct DestructTraits<qt3dsdm::SEaseInEaseOutKeyframe>
+ {
+ void destruct(qt3dsdm::SEaseInEaseOutKeyframe &) {}
+ };
+ template <>
+ struct DestructTraits<qt3dsdm::SBezierKeyframe>
+ {
+ void destruct(qt3dsdm::SBezierKeyframe &) {}
+ };
+ template <>
+ struct DestructTraits<qt3dsdm::SLinearKeyframe>
+ {
+ void destruct(qt3dsdm::SLinearKeyframe &) {}
+ };
+}
+}
+
+namespace qt3dsdm {
+
+enum EAnimationType {
+ EAnimationTypeNone = 0,
+ EAnimationTypeLinear,
+ EAnimationTypeBezier,
+ EAnimationTypeEaseInOut,
+};
+
+template <typename TDataType>
+struct SAnimationTypeTraits
+{
+};
+
+template <>
+struct SAnimationTypeTraits<SBezierKeyframe>
+{
+ EAnimationType getType() { return EAnimationTypeBezier; }
+};
+template <>
+struct SAnimationTypeTraits<SLinearKeyframe>
+{
+ EAnimationType getType() { return EAnimationTypeLinear; }
+};
+template <>
+struct SAnimationTypeTraits<SEaseInEaseOutKeyframe>
+{
+ EAnimationType getType() { return EAnimationTypeEaseInOut; }
+};
+
+struct SKeyframeUnionTraits
+{
+ typedef EAnimationType TIdType;
+ enum {
+ TBufferSize = sizeof(SBezierKeyframe),
+ };
+ static TIdType getNoDataId() { return EAnimationTypeNone; }
+ template <typename TDataType>
+ static TIdType getType()
+ {
+ return SAnimationTypeTraits<TDataType>().getType();
+ }
+
+ template <typename TRetType, typename TVisitorType>
+ static TRetType visit(char *inData, TIdType inType, TVisitorType inVisitor)
+ {
+ switch (inType) {
+ case EAnimationTypeBezier:
+ return inVisitor(*reinterpret_cast<SBezierKeyframe *>(inData));
+ case EAnimationTypeLinear:
+ return inVisitor(*reinterpret_cast<SLinearKeyframe *>(inData));
+ case EAnimationTypeEaseInOut:
+ return inVisitor(*reinterpret_cast<SEaseInEaseOutKeyframe *>(inData));
+ default:
+ QT3DS_ASSERT(false);
+ case EAnimationTypeNone:
+ return inVisitor();
+ }
+ }
+
+ template <typename TRetType, typename TVisitorType>
+ static TRetType visit(const char *inData, TIdType inType, TVisitorType inVisitor)
+ {
+ switch (inType) {
+ case EAnimationTypeBezier:
+ return inVisitor(*reinterpret_cast<const SBezierKeyframe *>(inData));
+ case EAnimationTypeLinear:
+ return inVisitor(*reinterpret_cast<const SLinearKeyframe *>(inData));
+ case EAnimationTypeEaseInOut:
+ return inVisitor(*reinterpret_cast<const SEaseInEaseOutKeyframe *>(inData));
+ default:
+ QT3DS_ASSERT(false);
+ case EAnimationTypeNone:
+ return inVisitor();
+ }
+ }
+};
+
+typedef qt3ds::foundation::
+ DiscriminatedUnion<qt3ds::foundation::
+ DiscriminatedUnionGenericBase<SKeyframeUnionTraits,
+ SKeyframeUnionTraits::TBufferSize>,
+ SKeyframeUnionTraits::TBufferSize>
+ TKeyframe;
+
+template <>
+struct Qt3DSDMGetter<TKeyframe>
+{
+ template <typename TRetType>
+ TRetType doGet(const TKeyframe &inValue)
+ {
+ return inValue.getData<TRetType>();
+ }
+};
+
+typedef std::vector<TKeyframe> TKeyframeList;
+
+struct SAnimationInfo
+{
+ Qt3DSDMSlideHandle m_Slide;
+ Qt3DSDMInstanceHandle m_Instance;
+ Qt3DSDMPropertyHandle m_Property;
+ size_t m_Index;
+ EAnimationType m_AnimationType;
+ // Use the existing value for the value of the first keyframe.
+ // Not reflected in studio at this time, purely a runtime problem.
+ // Defaults to false
+ bool m_DynamicFirstKeyframe;
+ bool m_ArtistEdited;
+ SAnimationInfo()
+ : m_Index(0)
+ , m_AnimationType(EAnimationTypeLinear)
+ , m_DynamicFirstKeyframe(false)
+ // Animations are assumed to be artist edited.
+ // And any change will force this flag to true.
+ , m_ArtistEdited(true)
+
+ {
+ }
+ SAnimationInfo(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex, EAnimationType inAnimationType,
+ bool inDynamicFirstKeyframe, bool inArtistEdited)
+ : m_Slide(inSlide)
+ , m_Instance(inInstance)
+ , m_Property(inProperty)
+ , m_Index(inIndex)
+ , m_AnimationType(inAnimationType)
+ , m_DynamicFirstKeyframe(inDynamicFirstKeyframe)
+ , m_ArtistEdited(inArtistEdited)
+ {
+ }
+};
+
+typedef std::pair<SAnimationInfo, TKeyframeList> TAnimationKeyframesPair;
+typedef std::vector<TAnimationKeyframesPair> TAnimationKeyframesPairList;
+typedef std::vector<SAnimationInfo> TAnimationInfoList;
+
+/**
+ * Pure animation core. Not wrapped in any niceties.
+ */
+class IAnimationCore
+{
+public:
+ virtual ~IAnimationCore() {}
+ virtual Qt3DSDMAnimationHandle CreateAnimation(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex,
+ EAnimationType inAnimationType,
+ bool inFirstKeyframeDynamic) = 0;
+ virtual void DeleteAnimation(Qt3DSDMAnimationHandle inAnimation) = 0;
+ virtual Qt3DSDMAnimationHandle GetAnimation(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ size_t inIndex) const = 0;
+ virtual SAnimationInfo GetAnimationInfo(Qt3DSDMAnimationHandle inAnimation) const = 0;
+ virtual void GetAnimations(TAnimationHandleList &outAnimations) const = 0;
+ virtual void GetAnimations(TAnimationInfoList &outAnimations,
+ Qt3DSDMSlideHandle inMaster = Qt3DSDMSlideHandle(),
+ Qt3DSDMSlideHandle inSlide = Qt3DSDMSlideHandle()) const = 0;
+
+ virtual void GetSpecificInstanceAnimations(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ TAnimationHandleList &outAnimations) = 0;
+
+ virtual void SetFirstKeyframeDynamic(Qt3DSDMAnimationHandle inAnimation, bool inValue) = 0;
+
+ // keyframe manipulation
+ virtual Qt3DSDMKeyframeHandle InsertKeyframe(Qt3DSDMAnimationHandle inAnimation,
+ const TKeyframe &inKeyframe) = 0;
+ virtual void EraseKeyframe(Qt3DSDMKeyframeHandle inKeyframe) = 0;
+ virtual void DeleteAllKeyframes(Qt3DSDMAnimationHandle inAnimation) = 0;
+
+ // All of these mutators will force the artist edited property
+ // of the animation to true.
+ virtual Qt3DSDMAnimationHandle
+ GetAnimationForKeyframe(Qt3DSDMKeyframeHandle inKeyframe) const = 0;
+ virtual TKeyframe GetKeyframeData(Qt3DSDMKeyframeHandle inKeyframe) const = 0;
+ virtual void SetKeyframeData(Qt3DSDMKeyframeHandle inKeyframe, const TKeyframe &inData) = 0;
+ virtual void GetKeyframes(Qt3DSDMAnimationHandle inAnimation,
+ TKeyframeHandleList &outKeyframes) const = 0;
+ virtual size_t GetKeyframeCount(Qt3DSDMAnimationHandle inAnimation) const = 0;
+ virtual bool IsFirstKeyframe(Qt3DSDMKeyframeHandle inKeyframe) const = 0;
+
+ virtual void OffsetAnimations(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ long inOffset) = 0;
+
+ // Direct mutators of the artist edited feature of animations
+ virtual void SetIsArtistEdited(Qt3DSDMAnimationHandle inAnimation, bool inEdited = true) = 0;
+ virtual bool IsArtistEdited(Qt3DSDMAnimationHandle inAnimation) const = 0;
+
+ // Animation Evaluation.
+ virtual float EvaluateAnimation(Qt3DSDMAnimationHandle inAnimation, float inSeconds) const = 0;
+
+ virtual bool KeyframeValid(Qt3DSDMKeyframeHandle inKeyframe) const = 0;
+ virtual bool AnimationValid(Qt3DSDMAnimationHandle inAnimation) const = 0;
+
+ virtual void CopyAnimations(Qt3DSDMSlideHandle inSourceSlide,
+ Qt3DSDMInstanceHandle inSourceInstance,
+ Qt3DSDMSlideHandle inDestSlide,
+ Qt3DSDMInstanceHandle inDestInstance) = 0;
+};
+
+typedef std::shared_ptr<IAnimationCore> TAnimationCorePtr;
+
+struct SGetOrSetKeyframeInfo
+{
+ float m_Value = 0.0;
+ float m_EaseIn = -1.f;
+ float m_EaseOut = -1.f;
+ bool m_AnimationTrackIsDynamic = false;
+
+ SGetOrSetKeyframeInfo(float inValue, float inEaseIn = -1.f, float inEaseOut = -1.f,
+ bool inDynamic = false)
+ : m_Value(inValue)
+ , m_EaseIn(inEaseIn)
+ , m_EaseOut(inEaseOut)
+ , m_AnimationTrackIsDynamic(inDynamic)
+ {
+ }
+ SGetOrSetKeyframeInfo() = default;
+
+};
+/**
+ * Interface from studio into the animation system that speaks
+ * a language near to that of studio. Public interface.
+ */
+class IStudioAnimationSystem
+{
+public:
+ virtual ~IStudioAnimationSystem() {}
+
+ /**
+ * When auto-keyframing is on, all calls to setinstancepropertyvalue will
+ * case a keyframe to be set if the instance is a member of a slide graph.
+ */
+ virtual void SetAutoKeyframe(bool inAutoKeyframe) = 0;
+ /**
+ * Returns true when auto keyframing is set.
+ */
+ virtual bool GetAutoKeyframe() const = 0;
+ /**
+ * Create animation on the property on this instance. If the property was animated and had
+ *keyframes previously,
+ * this function will also set the keyframes accordingly.
+ */
+ virtual void Animate(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty) = 0;
+ /**
+ * Delete animation on the property on this instance
+ */
+ virtual void Deanimate(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty) = 0;
+ /**
+ * Set a keyframe on this property. Uses the current time of the slide graph.
+ * If the keyframe is within a given time distance of another, this function will simply change
+ * the keyframed value of the other property to match the current value of this property.
+ */
+ virtual void KeyframeProperty(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
+ bool inDoDiffValue) = 0;
+ /**
+ * Set the value of a existing a keyframe or create a new one, on this property, at the given
+ *time.
+ * If ease in or ease out are unset then the keyframe gets the default ease in or out.
+ */
+ virtual void SetOrCreateKeyframe(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, float inTimeInSeconds,
+ SGetOrSetKeyframeInfo *inKeyframeInfo, size_t inNumInfos) = 0;
+ /**
+ * Return the animation that is currently controlling this property. This function will return
+ * an invalid handle value if there is currently no animation controlling this property.
+ */
+ virtual Qt3DSDMAnimationHandle GetControllingAnimation(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ size_t inIndex) const = 0;
+
+ /**
+ * Return true if the given property is animatable. You can begin animation by calling
+ *KeyframeProperty *or*
+ * by setting auto keyframe to on and setting a property value through the
+ *IInstancePropertyCore system.
+ */
+ virtual bool IsPropertyAnimatable(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const = 0;
+
+ /**
+ * Return true if the given property is animated. Currently, either 0 or ALL channels are
+ *animated. Hence, checking for index = 0 suffices.
+ * And if that changes, this function can be updated accordingly.
+ */
+ virtual bool IsPropertyAnimated(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const = 0;
+
+ /**
+ * Specify if new keyframes should be created with smooth ( ie Ease In/Out values = 100 ) or
+ *linear ( Ease In/Out values = 0 )
+ */
+ virtual void SetInterpolation(bool inSmooth) = 0;
+
+ /**
+ * Get an instance property value. Will override outValue only if the slide, instance,
+ *property is animated.
+ */
+ virtual bool GetAnimatedInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const = 0;
+ /**
+ * Set an instance property value. Will return true in the cases where
+ * the property is actually animated. May only set local values, or may auto set a keyframed
+ *value.
+ */
+ virtual bool SetAnimatedInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) = 0;
+
+ typedef std::function<void(Qt3DSDMInstanceHandle instance)> TRefreshCallbackFunc;
+ virtual void setRefreshCallback(TRefreshCallbackFunc func) = 0;
+};
+
+typedef std::shared_ptr<IStudioAnimationSystem> TStudioAnimationSystemPtr;
+
+inline SLinearKeyframe CreateLinearKeyframe(float inSeconds, float inValue)
+{
+ SLinearKeyframe retval = { inSeconds, inValue };
+ return retval;
+}
+
+inline SBezierKeyframe CreateBezierKeyframe(float inSeconds, float inValue, float inInTangentTime,
+ float inInTangentValue, float inOutTangentTime,
+ float inOutTangentValue)
+{
+ SBezierKeyframe theBezierKeyframe;
+ theBezierKeyframe.m_KeyframeSeconds = inSeconds;
+ theBezierKeyframe.m_KeyframeValue = inValue;
+ theBezierKeyframe.m_InTangentTime = inInTangentTime;
+ theBezierKeyframe.m_InTangentValue = inInTangentValue;
+ theBezierKeyframe.m_OutTangentTime = inOutTangentTime;
+ theBezierKeyframe.m_OutTangentValue = inOutTangentValue;
+ return theBezierKeyframe;
+}
+
+inline SEaseInEaseOutKeyframe CreateEaseInEaseOutKeyframe(float inSeconds, float inValue,
+ float inEaseIn, float inEaseOut)
+{
+ SEaseInEaseOutKeyframe retval;
+ retval.m_KeyframeSeconds = inSeconds;
+ retval.m_KeyframeValue = inValue;
+ retval.m_EaseIn = inEaseIn;
+ retval.m_EaseOut = inEaseOut;
+ return retval;
+}
+
+inline SAnimationInfo CreateAnimationInfo(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex,
+ EAnimationType inAnimationType,
+ bool inFirstKeyframeDynamic, bool inArtistEdited)
+{
+ SAnimationInfo retval(inSlide, inInstance, inProperty, inIndex, inAnimationType,
+ inFirstKeyframeDynamic, inArtistEdited);
+ return retval;
+}
+
+struct SKeyframeValueVisitor
+{
+ float operator()(const SLinearKeyframe &inKeyframe) const { return inKeyframe.m_KeyframeValue; }
+ float operator()(const SBezierKeyframe &inKeyframe) const { return inKeyframe.m_KeyframeValue; }
+ float operator()(const SEaseInEaseOutKeyframe &inKeyframe) const
+ {
+ return inKeyframe.m_KeyframeValue;
+ }
+ float operator()()
+ {
+ QT3DS_ASSERT(false);
+ return 0.0f;
+ }
+};
+
+inline float KeyframeValueValue(const TKeyframe &inKeyframe)
+{
+ return inKeyframe.visit<float>(SKeyframeValueVisitor());
+}
+
+struct SKeyframeTimeAnalyzer
+{
+ float operator()(const SLinearKeyframe &inValue) const { return inValue.m_KeyframeSeconds; }
+ float operator()(const SBezierKeyframe &inValue) const { return inValue.m_KeyframeSeconds; }
+ float operator()(const SEaseInEaseOutKeyframe &inValue) const
+ {
+ return inValue.m_KeyframeSeconds;
+ }
+ float operator()()
+ {
+ QT3DS_ASSERT(false);
+ return 0.0f;
+ }
+};
+
+inline float KeyframeTime(const TKeyframe &inValue)
+{
+ return inValue.visit<float>(SKeyframeTimeAnalyzer());
+}
+
+inline EAnimationType GetKeyframeType(const TKeyframe &inKeyframe)
+{
+ return inKeyframe.getType();
+}
+
+struct SAnimatableArityVisitor
+{
+ std::tuple<bool, size_t> operator()(bool) const
+ {
+ return std::tuple<bool, size_t>(true, 1);
+ }
+ std::tuple<bool, size_t> operator()(long) const
+ {
+ return std::tuple<bool, size_t>(true, 1);
+ }
+ std::tuple<bool, size_t> operator()(float) const
+ {
+ return std::tuple<bool, size_t>(true, 1);
+ }
+ std::tuple<bool, size_t> operator()(const SFloat2 &) const
+ {
+ return std::tuple<bool, size_t>(true, 2);
+ }
+ std::tuple<bool, size_t> operator()(const SFloat3 &) const
+ {
+ return std::tuple<bool, size_t>(true, 3);
+ }
+ std::tuple<bool, size_t> operator()(const SFloat4 &) const
+ {
+ return std::tuple<bool, size_t>(true, 4);
+ }
+ template <typename TDataType>
+ std::tuple<bool, size_t> operator()(const TDataType &) const
+ {
+ return std::tuple<bool, size_t>(false, 0);
+ }
+ std::tuple<bool, size_t> operator()()
+ {
+ QT3DS_ASSERT(false);
+ return std::tuple<bool, size_t>(false, 0);
+ }
+};
+
+inline std::tuple<bool, size_t> GetVariantAnimatableAndArity(const SValue &inValue)
+{
+ return inValue.visit<std::tuple<bool, size_t>>(SAnimatableArityVisitor());
+}
+
+inline std::tuple<bool, size_t> GetDatatypeAnimatableAndArity(DataModelDataType::Value inDataType)
+{
+ switch (inDataType) {
+ case DataModelDataType::Long:
+ case DataModelDataType::Float:
+ return std::make_tuple(true, 1);
+
+ case DataModelDataType::Float2:
+ return std::make_tuple(true, 2);
+
+ case DataModelDataType::Float3:
+ return std::make_tuple(true, 3);
+
+ case DataModelDataType::Float4:
+ return std::make_tuple(true, 4);
+
+ default:
+ return std::make_tuple(false, 0);
+ }
+}
+
+template <typename TDataType>
+inline TDataType SetFloatValue(float inValue, size_t inIndex, const TDataType &inDataType)
+{
+ TDataType retval(inDataType);
+ retval[inIndex] = inValue;
+ return retval;
+}
+
+struct SAnimationApplier
+{
+ float m_Value;
+ size_t m_Index;
+ SValue operator()(const bool &) { return m_Value > 0.5f; }
+ SValue operator()(const qt3ds::QT3DSI32 &) { return static_cast<qt3ds::QT3DSI32>(m_Value + .5f); }
+ SValue operator()(const float &) { return m_Value; }
+ SValue operator()(const SFloat2 &inValue) { return SetFloatValue(m_Value, m_Index, inValue); }
+ SValue operator()(const SFloat3 &inValue) { return SetFloatValue(m_Value, m_Index, inValue); }
+ SValue operator()(const SFloat4 &inValue) { return SetFloatValue(m_Value, m_Index, inValue); }
+ template <typename TDataType>
+ SValue operator()(const TDataType &inValue)
+ {
+ return inValue;
+ }
+ SValue operator()()
+ {
+ QT3DS_ASSERT(false);
+ return SValue();
+ }
+};
+
+inline void SetAnimationValue(float inValue, size_t inIndex, SValue &ioValue)
+{
+ using namespace std;
+ SAnimationApplier theApplier;
+ theApplier.m_Value = inValue;
+ theApplier.m_Index = inIndex;
+ ioValue = ioValue.visit<SValue>(theApplier);
+}
+
+template <typename TDataType>
+inline float GetFloatValue(const TDataType &inValue, size_t inIndex)
+{
+ return inValue[inIndex];
+}
+
+struct SAnimationGetter
+{
+ size_t m_Index;
+ float operator()(const bool &inValue) const { return inValue ? 1.f : 0.f; }
+ float operator()(const long &inValue) const { return static_cast<float>(inValue); }
+ float operator()(const float &inValue) const { return inValue; }
+ float operator()(const SFloat2 &inValue) const { return GetFloatValue(inValue, m_Index); }
+ float operator()(const SFloat3 &inValue) const { return GetFloatValue(inValue, m_Index); }
+ float operator()(const SFloat4 &inValue) const { return GetFloatValue(inValue, m_Index); }
+ template <typename TDataType>
+ float operator()(const TDataType & /*inValue*/) const
+ {
+ return 0.f;
+ }
+ float operator()()
+ {
+ QT3DS_ASSERT(false);
+ return 0.0f;
+ }
+};
+
+inline float GetAnimationValue(size_t inIndex, const SValue &ioValue)
+{
+ SAnimationGetter theGetter;
+ theGetter.m_Index = inIndex;
+ return ioValue.visit<float>(theGetter);
+}
+
+struct SKeyframeTimeSetter
+{
+ float m_Seconds;
+ TKeyframe operator()(const SLinearKeyframe &inValue) const
+ {
+ return CreateLinearKeyframe(m_Seconds, inValue.m_KeyframeValue);
+ }
+ TKeyframe operator()(const SBezierKeyframe &inValue) const
+ {
+ return CreateBezierKeyframe(m_Seconds, inValue.m_KeyframeValue, inValue.m_InTangentTime,
+ inValue.m_InTangentValue, inValue.m_OutTangentTime,
+ inValue.m_OutTangentValue);
+ }
+ TKeyframe operator()(const SEaseInEaseOutKeyframe &inValue) const
+ {
+ return CreateEaseInEaseOutKeyframe(m_Seconds, inValue.m_KeyframeValue, inValue.m_EaseIn,
+ inValue.m_EaseOut);
+ }
+ TKeyframe operator()()
+ {
+ QT3DS_ASSERT(false);
+ return TKeyframe();
+ }
+};
+
+inline TKeyframe SetKeyframeSeconds(const TKeyframe &inKeyframe, float inSeconds)
+{
+ SKeyframeTimeSetter theSetter;
+ theSetter.m_Seconds = inSeconds;
+ return inKeyframe.visit<TKeyframe>(theSetter);
+}
+
+struct SKeyframeTimeGetter
+{
+ template <typename TKeyframeType>
+ float operator()(const TKeyframeType &inValue) const
+ {
+ return inValue.m_KeyframeSeconds;
+ }
+ float operator()()
+ {
+ QT3DS_ASSERT(false);
+ return 0.0f;
+ }
+};
+
+inline float GetKeyframeSeconds(const TKeyframe &inKeyframe)
+{
+ SKeyframeTimeGetter theGetter;
+ return inKeyframe.visit<float>(theGetter);
+}
+
+struct SKeyframeValueSetter
+{
+ float m_Value;
+ TKeyframe operator()(const SLinearKeyframe &inValue) const
+ {
+ return CreateLinearKeyframe(inValue.m_KeyframeSeconds, m_Value);
+ }
+ TKeyframe operator()(const SBezierKeyframe &inValue) const
+ {
+ return CreateBezierKeyframe(inValue.m_KeyframeSeconds, m_Value, inValue.m_InTangentTime,
+ inValue.m_InTangentValue, inValue.m_OutTangentTime,
+ inValue.m_OutTangentValue);
+ }
+ TKeyframe operator()(const SEaseInEaseOutKeyframe &inValue) const
+ {
+ return CreateEaseInEaseOutKeyframe(inValue.m_KeyframeSeconds, m_Value, inValue.m_EaseIn,
+ inValue.m_EaseOut);
+ }
+ TKeyframe operator()()
+ {
+ QT3DS_ASSERT(false);
+ return TKeyframe();
+ }
+};
+
+inline TKeyframe SetKeyframeValue(const TKeyframe &inKeyframe, float inValue)
+{
+ SKeyframeValueSetter theSetter;
+ theSetter.m_Value = inValue;
+ return inKeyframe.visit<TKeyframe>(theSetter);
+}
+
+inline float AnimationClamp(float inLowerBound, float inUpperBound, float inValue)
+{
+ if (inValue < inLowerBound)
+ return inLowerBound;
+ if (inValue > inUpperBound)
+ return inUpperBound;
+ return inValue;
+}
+
+inline SBezierKeyframe
+CreateBezierKeyframeFromEaseInEaseOutKeyframe(float *inPreviousValue,
+ SEaseInEaseOutKeyframe inCurrent, float *inNextValue)
+{
+ float theValue = inCurrent.m_KeyframeValue;
+ float theSeconds = inCurrent.m_KeyframeSeconds;
+ float inSeconds = 0.f;
+ float inValue = 0.f;
+ float outSeconds = 0.f;
+ float outValue = 0.f;
+ if (inPreviousValue) {
+ float thePercent = 1.0f - AnimationClamp(0.0f, 1.0f, inCurrent.m_EaseIn / 100.f);
+ double theAmount = 1.0f - thePercent * .333333333334;
+ inValue = (float)(*inPreviousValue
+ + ((inCurrent.m_KeyframeValue - *inPreviousValue) * theAmount));
+ }
+ if (inNextValue) {
+ float thePercent = 1.0f - AnimationClamp(0.0f, 1.0f, inCurrent.m_EaseOut / 100.f);
+ double theAmount = thePercent * .3333333333334;
+ outValue = (float)(inCurrent.m_KeyframeValue
+ + ((*inNextValue - inCurrent.m_KeyframeValue) * theAmount));
+ }
+ return CreateBezierKeyframe(theSeconds, theValue, inSeconds, inValue, outSeconds, outValue);
+}
+
+void CopyKeyframes(const IAnimationCore &inSourceAnimationCore, IAnimationCore &inDestAnimationCore,
+ Qt3DSDMAnimationHandle inDestAnimation, const TKeyframeHandleList &inKeyframes);
+
+Qt3DSDMAnimationHandle CopyAnimation(TAnimationCorePtr inSourceAnimationCore,
+ Qt3DSDMAnimationHandle inAnimation,
+ Qt3DSDMSlideHandle inNewSlide,
+ Qt3DSDMInstanceHandle inNewInstance,
+ Qt3DSDMPropertyHandle inNewProperty, size_t inNewIndex);
+
+struct SEaseInGetter
+{
+ float operator()(const SLinearKeyframe &) const { return 0.f; }
+ float operator()(const SBezierKeyframe &) const { return 0.f; }
+ float operator()(const SEaseInEaseOutKeyframe &inValue) const { return inValue.m_EaseIn; }
+ float operator()()
+ {
+ QT3DS_ASSERT(false);
+ return 0.0f;
+ }
+};
+struct SEaseOutGetter
+{
+ float operator()(const SLinearKeyframe &) const { return 0.f; }
+ float operator()(const SBezierKeyframe &) const { return 0.f; }
+ float operator()(const SEaseInEaseOutKeyframe &inValue) const { return inValue.m_EaseOut; }
+ float operator()()
+ {
+ QT3DS_ASSERT(false);
+ return 0.0f;
+ }
+};
+inline void GetEaseInOutValues(const TKeyframe &inValue, float &outEaseIn, float &outEaseOut)
+{
+ SEaseInGetter theGetter;
+ outEaseIn = inValue.visit<float>(theGetter);
+
+ SEaseOutGetter theEaseOutGetter;
+ outEaseOut = inValue.visit<float>(theEaseOutGetter);
+}
+
+struct SEaseInSetter
+{
+ float m_Value;
+ TKeyframe operator()(SLinearKeyframe &inValue) const { return inValue; }
+ TKeyframe operator()(SBezierKeyframe &inValue) const { return inValue; }
+ TKeyframe operator()(SEaseInEaseOutKeyframe &inKeyframe) const
+ {
+ inKeyframe.m_EaseIn = m_Value;
+ return inKeyframe;
+ }
+ TKeyframe operator()()
+ {
+ QT3DS_ASSERT(false);
+ return TKeyframe();
+ }
+};
+struct SEaseOutSetter
+{
+ float m_Value;
+ TKeyframe operator()(SLinearKeyframe &inValue) const { return inValue; }
+ TKeyframe operator()(SBezierKeyframe &inValue) const { return inValue; }
+ TKeyframe operator()(SEaseInEaseOutKeyframe &inKeyframe) const
+ {
+ inKeyframe.m_EaseOut = m_Value;
+ return inKeyframe;
+ }
+ TKeyframe operator()()
+ {
+ QT3DS_ASSERT(false);
+ return TKeyframe();
+ }
+};
+inline TKeyframe SetEaseInOutValues(TKeyframe &inKeyframe, float inEaseIn, float inEaseOut)
+{
+ SEaseInSetter theSetter;
+ theSetter.m_Value = inEaseIn;
+ inKeyframe.visit<TKeyframe>(theSetter);
+
+ SEaseOutSetter theEaseOutSetter;
+ theEaseOutSetter.m_Value = inEaseOut;
+ inKeyframe.visit<TKeyframe>(theEaseOutSetter);
+
+ return inKeyframe;
+}
+
+void GetKeyframesAsBezier(Qt3DSDMAnimationHandle inAnimation, const IAnimationCore &inAnimationCore,
+ TBezierKeyframeList &outKeyframes);
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMComposerTypeDefinitions.cpp b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMComposerTypeDefinitions.cpp
new file mode 100644
index 00000000..2bd89418
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMComposerTypeDefinitions.cpp
@@ -0,0 +1,579 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "Qt3DSDMComposerTypeDefinitions.h"
+#include <memory>
+#include "Qt3DSDMDataCore.h"
+#include "SimpleDataCore.h"
+#include "DataCoreProducer.h"
+#include "Qt3DSDMSlideCore.h"
+
+#include <QtGlobal>
+
+using namespace qt3dsdm;
+using std::make_shared;
+using std::shared_ptr;
+
+#ifdef _WIN32
+#pragma warning(disable : 4100)
+#endif
+
+// SComposerTypePropertyDefinition constructors
+
+namespace {
+
+template <typename TDataType>
+struct DataConstructor
+{
+ template <typename TInputType>
+ TDataType Construct(const TInputType &inInput)
+ {
+ return TDataType(inInput);
+ }
+};
+
+template <>
+struct DataConstructor<SLong4>
+{
+ SLong4 Construct(int inValue)
+ {
+ unsigned long theValue((unsigned long)inValue);
+ return SLong4(theValue, theValue, theValue, theValue);
+ }
+};
+
+template <>
+struct DataConstructor<TDataStrPtr>
+{
+ TDataStrPtr Construct(const wchar_t *inData)
+ {
+ if (IsTrivial(inData))
+ return make_shared<CDataStr>();
+ return make_shared<CDataStr>(inData);
+ }
+};
+template <>
+struct DataConstructor<SStringOrInt>
+{
+ SStringOrInt Construct(const wchar_t *inData)
+ {
+ if (IsTrivial(inData))
+ return make_shared<CDataStr>();
+ return make_shared<CDataStr>(inData);
+ }
+};
+template <>
+struct DataConstructor<SObjectRefType>
+{
+ SObjectRefType Construct(const wchar_t *) { return SObjectRefType(); }
+};
+}
+
+#define QT3DS_WCHAR_T_Typed L"Typed"
+#define QT3DS_WCHAR_T_Guided L"Guided"
+#define QT3DS_WCHAR_T_Named L"Named"
+#define QT3DS_WCHAR_T_SlideOwner L"SlideOwner"
+#define QT3DS_WCHAR_T_Slide L"Slide"
+#define QT3DS_WCHAR_T_Action L"Action"
+#define QT3DS_WCHAR_T_Asset L"Asset"
+#define QT3DS_WCHAR_T_Scene L"Scene"
+#define QT3DS_WCHAR_T_Image L"Image"
+#define QT3DS_WCHAR_T_Material L"Material"
+#define QT3DS_WCHAR_T_Behavior L"Behavior"
+#define QT3DS_WCHAR_T_Node L"Node"
+#define QT3DS_WCHAR_T_Layer L"Layer"
+#define QT3DS_WCHAR_T_Group L"Group"
+#define QT3DS_WCHAR_T_Model L"Model"
+#define QT3DS_WCHAR_T_Light L"Light"
+#define QT3DS_WCHAR_T_Camera L"Camera"
+#define QT3DS_WCHAR_T_Component L"Component"
+#define QT3DS_WCHAR_T_Text L"Text"
+#define QT3DS_WCHAR_T_Effect L"Effect"
+#define QT3DS_WCHAR_T_RenderPlugin L"RenderPlugin"
+#define QT3DS_WCHAR_T_MaterialBase L"MaterialBase"
+#define QT3DS_WCHAR_T_CustomMaterial L"CustomMaterial"
+#define QT3DS_WCHAR_T_ReferencedMaterial L"ReferencedMaterial"
+#define QT3DS_WCHAR_T_Alias L"Alias"
+#define QT3DS_WCHAR_T_Lightmaps L"Lightmaps"
+
+#define QT3DS_WCHAR_T_type L"type"
+#define QT3DS_WCHAR_T_id L"id"
+#define QT3DS_WCHAR_T_name L"name"
+#define QT3DS_WCHAR_T_componentid L"componentid"
+#define QT3DS_WCHAR_T_playmode L"playmode"
+#define QT3DS_WCHAR_T_playthroughto L"playthroughto"
+#define QT3DS_WCHAR_T_initialplaystate L"initialplaystate"
+#define QT3DS_WCHAR_T_actioneyeball L"actioneyeball"
+#define QT3DS_WCHAR_T_sourcepath L"sourcepath"
+#define QT3DS_WCHAR_T_importid L"importid"
+#define QT3DS_WCHAR_T_starttime L"starttime"
+#define QT3DS_WCHAR_T_endtime L"endtime"
+#define QT3DS_WCHAR_T_eyeball L"eyeball"
+#define QT3DS_WCHAR_T_shy L"shy"
+#define QT3DS_WCHAR_T_locked L"locked"
+#define QT3DS_WCHAR_T_timebarcolor L"timebarcolor"
+#define QT3DS_WCHAR_T_timebartext L"timebartext"
+#define QT3DS_WCHAR_T_bgcolorenable L"bgcolorenable"
+#define QT3DS_WCHAR_T_background L"background"
+#define QT3DS_WCHAR_T_backgroundcolor L"backgroundcolor"
+#define QT3DS_WCHAR_T_blendtype L"blendtype"
+#define QT3DS_WCHAR_T_scaleu L"scaleu"
+#define QT3DS_WCHAR_T_scalev L"scalev"
+#define QT3DS_WCHAR_T_mappingmode L"mappingmode"
+#define QT3DS_WCHAR_T_tilingmodehorz L"tilingmodehorz"
+#define QT3DS_WCHAR_T_tilingmodevert L"tilingmodevert"
+#define QT3DS_WCHAR_T_rotationuv L"rotationuv"
+#define QT3DS_WCHAR_T_positionu L"positionu"
+#define QT3DS_WCHAR_T_positionv L"positionv"
+#define QT3DS_WCHAR_T_pivotu L"pivotu"
+#define QT3DS_WCHAR_T_pivotv L"pivotv"
+#define QT3DS_WCHAR_T_subpresentation L"subpresentation"
+#define QT3DS_WCHAR_T_iblprobe L"iblprobe"
+#define QT3DS_WCHAR_T_shaderlighting L"shaderlighting"
+#define QT3DS_WCHAR_T_blendmode L"blendmode"
+#define QT3DS_WCHAR_T_vertexcolors L"vertexcolors"
+#define QT3DS_WCHAR_T_diffuse L"diffuse"
+#define QT3DS_WCHAR_T_diffusemap L"diffusemap"
+#define QT3DS_WCHAR_T_diffusemap2 L"diffusemap2"
+#define QT3DS_WCHAR_T_diffusemap3 L"diffusemap3"
+#define QT3DS_WCHAR_T_specularreflection L"specularreflection"
+#define QT3DS_WCHAR_T_specularmap L"specularmap"
+#define QT3DS_WCHAR_T_specularmodel L"specularmodel"
+#define QT3DS_WCHAR_T_speculartint L"speculartint"
+#define QT3DS_WCHAR_T_ior L"ior"
+#define QT3DS_WCHAR_T_specularamount L"specularamount"
+#define QT3DS_WCHAR_T_specularroughness L"specularroughness"
+#define QT3DS_WCHAR_T_roughnessmap L"roughnessmap"
+#define QT3DS_WCHAR_T_opacitymap L"opacitymap"
+#define QT3DS_WCHAR_T_emissivepower L"emissivepower"
+#define QT3DS_WCHAR_T_emissivecolor L"emissivecolor"
+#define QT3DS_WCHAR_T_emissivemap L"emissivemap"
+#define QT3DS_WCHAR_T_emissivemap2 L"emissivemap2"
+#define QT3DS_WCHAR_T_normalmap L"normalmap"
+#define QT3DS_WCHAR_T_normalstrength L"normalstrength"
+#define QT3DS_WCHAR_T_position L"position"
+#define QT3DS_WCHAR_T_rotation L"rotation"
+#define QT3DS_WCHAR_T_scale L"scale"
+#define QT3DS_WCHAR_T_pivot L"pivot"
+#define QT3DS_WCHAR_T_opacity L"opacity"
+#define QT3DS_WCHAR_T_rotationorder L"rotationorder"
+#define QT3DS_WCHAR_T_orientation L"orientation"
+#define QT3DS_WCHAR_T_progressiveaa L"progressiveaa"
+#define QT3DS_WCHAR_T_multisampleaa L"multisampleaa"
+#define QT3DS_WCHAR_T_disabledepthtest L"disabledepthtest"
+#define QT3DS_WCHAR_T_disabledepthprepass L"disabledepthprepass"
+#define QT3DS_WCHAR_T_layerwidth L"layerwidth"
+#define QT3DS_WCHAR_T_layerheight L"layerheight"
+#define QT3DS_WCHAR_T_lighttype L"lighttype"
+#define QT3DS_WCHAR_T_lightdiffuse L"lightdiffuse"
+#define QT3DS_WCHAR_T_lightspecular L"lightspecular"
+#define QT3DS_WCHAR_T_lightambient L"lightambient"
+#define QT3DS_WCHAR_T_brightness L"brightness"
+#define QT3DS_WCHAR_T_linearfade L"linearfade"
+#define QT3DS_WCHAR_T_expfade L"expfade"
+#define QT3DS_WCHAR_T_areawidth L"areawidth"
+#define QT3DS_WCHAR_T_areaheight L"areaheight"
+#define QT3DS_WCHAR_T_castshadow L"castshadow"
+#define QT3DS_WCHAR_T_shdwbias L"shdwbias"
+#define QT3DS_WCHAR_T_shdwfactor L"shdwfactor"
+#define QT3DS_WCHAR_T_shdwmapres L"shdwmapres"
+#define QT3DS_WCHAR_T_shdwmapfar L"shdwmapfar"
+#define QT3DS_WCHAR_T_shdwmapfov L"shdwmapfov"
+#define QT3DS_WCHAR_T_shdwfilter L"shdwfilter"
+#define QT3DS_WCHAR_T_orthographic L"orthographic"
+#define QT3DS_WCHAR_T_fov L"fov"
+#define QT3DS_WCHAR_T_fovhorizontal L"fovhorizontal"
+#define QT3DS_WCHAR_T_clipnear L"clipnear"
+#define QT3DS_WCHAR_T_clipfar L"clipfar"
+#define QT3DS_WCHAR_T_lookatlock L"lookatlock"
+#define QT3DS_WCHAR_T_lookatpoint L"lookatpoint"
+#define QT3DS_WCHAR_T_textstring L"textstring"
+#define QT3DS_WCHAR_T_textcolor L"textcolor"
+#define QT3DS_WCHAR_T_font L"font"
+#define QT3DS_WCHAR_T_size L"size"
+#define QT3DS_WCHAR_T_horzalign L"horzalign"
+#define QT3DS_WCHAR_T_vertalign L"vertalign"
+#define QT3DS_WCHAR_T_leading L"leading"
+#define QT3DS_WCHAR_T_tracking L"tracking"
+#define QT3DS_WCHAR_T_dropshadow L"dropshadow"
+#define QT3DS_WCHAR_T_dropshadowstrength L"dropshadowstrength"
+#define QT3DS_WCHAR_T_dropshadowoffsetx L"dropshadowoffsetx"
+#define QT3DS_WCHAR_T_dropshadowoffsety L"dropshadowoffsety"
+#define QT3DS_WCHAR_T_wordwrap L"wordwrap"
+#define QT3DS_WCHAR_T_boundingbox L"boundingbox"
+#define QT3DS_WCHAR_T_elide L"elide"
+#define QT3DS_WCHAR_T_enableacceleratedfont L"enableacceleratedfont"
+#define QT3DS_WCHAR_T_importfile L"importfile"
+#define QT3DS_WCHAR_T_fileid L"fileid"
+#define QT3DS_WCHAR_T_size L"size"
+#define QT3DS_WCHAR_T_location L"location"
+#define QT3DS_WCHAR_T_boneid L"boneid"
+#define QT3DS_WCHAR_T_poseroot L"poseroot"
+#define QT3DS_WCHAR_T_ignoresparent L"ignoresparent"
+#define QT3DS_WCHAR_T_shadowcaster L"shadowcaster"
+#define QT3DS_WCHAR_T_tessellation L"tessellation"
+#define QT3DS_WCHAR_T_edgetess L"edgetess"
+#define QT3DS_WCHAR_T_innertess L"innertess"
+#define QT3DS_WCHAR_T_scalemode L"scalemode"
+#define QT3DS_WCHAR_T_scaleanchor L"scaleanchor"
+#define QT3DS_WCHAR_T_horzfields L"horzfields"
+#define QT3DS_WCHAR_T_left L"left"
+#define QT3DS_WCHAR_T_leftunits L"leftunits"
+#define QT3DS_WCHAR_T_width L"width"
+#define QT3DS_WCHAR_T_widthunits L"widthunits"
+#define QT3DS_WCHAR_T_right L"right"
+#define QT3DS_WCHAR_T_rightunits L"rightunits"
+#define QT3DS_WCHAR_T_vertfields L"vertfields"
+#define QT3DS_WCHAR_T_top L"top"
+#define QT3DS_WCHAR_T_topunits L"topunits"
+#define QT3DS_WCHAR_T_height L"height"
+#define QT3DS_WCHAR_T_heightunits L"heightunits"
+#define QT3DS_WCHAR_T_bottom L"bottom"
+#define QT3DS_WCHAR_T_bottomunits L"bottomunits"
+#define QT3DS_WCHAR_T_aostrength L"aostrength"
+#define QT3DS_WCHAR_T_aodistance L"aodistance"
+#define QT3DS_WCHAR_T_aosoftness L"aosoftness"
+#define QT3DS_WCHAR_T_aobias L"aobias"
+#define QT3DS_WCHAR_T_aosamplerate L"aosamplerate"
+#define QT3DS_WCHAR_T_aodither L"aodither"
+#define QT3DS_WCHAR_T_shadowstrength L"shadowstrength"
+#define QT3DS_WCHAR_T_shadowdist L"shadowdist"
+#define QT3DS_WCHAR_T_shadowsoftness L"shadowsoftness"
+#define QT3DS_WCHAR_T_shadowbias L"shadowbias"
+#define QT3DS_WCHAR_T_source L"source"
+#define QT3DS_WCHAR_T_referencedmaterial L"referencedmaterial"
+#define QT3DS_WCHAR_T_lightprobe L"lightprobe"
+#define QT3DS_WCHAR_T_probebright L"probebright"
+#define QT3DS_WCHAR_T_fastibl L"fastibl"
+#define QT3DS_WCHAR_T_probehorizon L"probehorizon"
+#define QT3DS_WCHAR_T_probefov L"probefov"
+#define QT3DS_WCHAR_T_lightprobe2 L"lightprobe2"
+#define QT3DS_WCHAR_T_probe2fade L"probe2fade"
+#define QT3DS_WCHAR_T_probe2window L"probe2window"
+#define QT3DS_WCHAR_T_probe2pos L"probe2pos"
+#define QT3DS_WCHAR_T_bumpmap L"bumpmap"
+#define QT3DS_WCHAR_T_bumpamount L"bumpamount"
+#define QT3DS_WCHAR_T_normalmap L"normalmap"
+#define QT3DS_WCHAR_T_displacementmap L"displacementmap"
+#define QT3DS_WCHAR_T_displaceamount L"displaceamount"
+#define QT3DS_WCHAR_T_translucencymap L"translucencymap"
+#define QT3DS_WCHAR_T_translucentfalloff L"translucentfalloff"
+#define QT3DS_WCHAR_T_diffuselightwrap L"diffuselightwrap"
+#define QT3DS_WCHAR_T_fresnelPower L"fresnelPower"
+#define QT3DS_WCHAR_T_referencednode L"referencednode"
+#define QT3DS_WCHAR_T_temporalaa L"temporalaa"
+#define QT3DS_WCHAR_T_scope L"scope"
+#define QT3DS_WCHAR_T_Path L"Path"
+#define QT3DS_WCHAR_T_pathdata L"pathdata"
+#define QT3DS_WCHAR_T_PathAnchorPoint L"PathAnchorPoint"
+#define QT3DS_WCHAR_T_incomingangle L"incomingangle"
+#define QT3DS_WCHAR_T_incomingdistance L"incomingdistance"
+#define QT3DS_WCHAR_T_outgoingdistance L"outgoingdistance"
+#define QT3DS_WCHAR_T_linearerror L"linearerror"
+#define QT3DS_WCHAR_T_edgetessamount L"edgetessamount"
+#define QT3DS_WCHAR_T_innertessamount L"innertessamount"
+#define QT3DS_WCHAR_T_begincap L"begincap"
+#define QT3DS_WCHAR_T_begincapoffset L"begincapoffset"
+#define QT3DS_WCHAR_T_begincapopacity L"begincapopacity"
+#define QT3DS_WCHAR_T_begincapwidth L"begincapwidth"
+#define QT3DS_WCHAR_T_endcap L"endcap"
+#define QT3DS_WCHAR_T_endcapoffset L"endcapoffset"
+#define QT3DS_WCHAR_T_endcapopacity L"endcapopacity"
+#define QT3DS_WCHAR_T_endcapwidth L"endcapwidth"
+#define QT3DS_WCHAR_T_pathtype L"pathtype"
+#define QT3DS_WCHAR_T_closed L"closed"
+#define QT3DS_WCHAR_T_paintstyle L"paintstyle"
+#define QT3DS_WCHAR_T_SubPath L"SubPath"
+#define QT3DS_WCHAR_T_lightmapindirect L"lightmapindirect"
+#define QT3DS_WCHAR_T_lightmapradiosity L"lightmapradiosity"
+#define QT3DS_WCHAR_T_lightmapshadow L"lightmapshadow"
+#define QT3DS_WCHAR_T_controlledproperty L"controlledproperty"
+#define QT3DS_WCHAR_T_variants L"variants"
+
+const wchar_t *ComposerObjectTypes::Convert(ComposerObjectTypes::Enum inType)
+{
+ switch (inType) {
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \
+ case name: \
+ return QT3DS_WCHAR_T_##name;
+ ITERATE_COMPOSER_OBJECT_TYPES
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+ default:
+ break;
+ }
+
+ QT3DS_ASSERT(false);
+ return L"Unknown";
+}
+
+ComposerObjectTypes::Enum ComposerObjectTypes::Convert(const wchar_t *inType)
+{
+
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \
+ if (AreEqual(QT3DS_WCHAR_T_##name, inType)) \
+ return ComposerObjectTypes::name;
+ ITERATE_COMPOSER_OBJECT_TYPES
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+
+ QT3DS_ASSERT(false);
+ return ComposerObjectTypes::Unknown;
+}
+
+ComposerObjectTypes::Enum ComposerObjectTypes::Convert(const char8_t *inType)
+{
+
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \
+ if (AreEqual(#name, inType)) \
+ return ComposerObjectTypes::name;
+ ITERATE_COMPOSER_OBJECT_TYPES
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+
+ QT3DS_ASSERT(false);
+ return ComposerObjectTypes::Unknown;
+}
+
+const wchar_t *ComposerPropertyNames::Convert(ComposerPropertyNames::Enum inType)
+{
+ switch (inType) {
+#define HANDLE_COMPOSER_PROPERTY_DUPLICATE(name, memberName, type, defaultValue)
+#define HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type) \
+ case name: \
+ return QT3DS_WCHAR_T_##name;
+#define HANDLE_COMPOSER_PROPERTY(name, memberName, type, defaultValue) \
+ HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type)
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) propmacro
+ ITERATE_COMPOSER_OBJECT_TYPES
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+#undef HANDLE_COMPOSER_PROPERTY
+#undef HANDLE_COMPOSER_PROPERTY_NO_DEFAULT
+#undef HANDLE_COMPOSER_PROPERTY_DUPLICATE
+ default:
+ break;
+ }
+ QT3DS_ASSERT(false);
+ return L"Unknown";
+}
+
+ComposerPropertyNames::Enum ComposerPropertyNames::Convert(const wchar_t *inType)
+{
+#define HANDLE_COMPOSER_PROPERTY_DUPLICATE(name, memberName, type, defaultValue)
+#define HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type) \
+ if (AreEqual(inType, QT3DS_WCHAR_T_##name)) \
+ return name;
+#define HANDLE_COMPOSER_PROPERTY(name, memberName, type, defaultValue) \
+ HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type)
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) propmacro
+ ITERATE_COMPOSER_OBJECT_TYPES
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+#undef HANDLE_COMPOSER_PROPERTY
+#undef HANDLE_COMPOSER_PROPERTY_NO_DEFAULT
+#undef HANDLE_COMPOSER_PROPERTY_DUPLICATE
+ QT3DS_ASSERT(false);
+ return ComposerPropertyNames::Unknown;
+}
+
+const char8_t *ComposerPropertyNames::ConvertNarrow(ComposerPropertyNames::Enum inType)
+{
+ switch (inType) {
+#define HANDLE_COMPOSER_PROPERTY_DUPLICATE(name, memberName, type, defaultValue)
+#define HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type) \
+ case name: \
+ return #name;
+#define HANDLE_COMPOSER_PROPERTY(name, memberName, type, defaultValue) \
+ HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type)
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) propmacro
+ ITERATE_COMPOSER_OBJECT_TYPES
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+#undef HANDLE_COMPOSER_PROPERTY
+#undef HANDLE_COMPOSER_PROPERTY_NO_DEFAULT
+#undef HANDLE_COMPOSER_PROPERTY_DUPLICATE
+ default:
+ break;
+ }
+ QT3DS_ASSERT(false);
+ return "Unknown";
+}
+
+ComposerPropertyNames::Enum ComposerPropertyNames::Convert(const char8_t *inType)
+{
+#define HANDLE_COMPOSER_PROPERTY_DUPLICATE(name, memberName, type, defaultValue)
+#define HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type) \
+ if (AreEqual(inType, #name)) \
+ return name;
+#define HANDLE_COMPOSER_PROPERTY(name, memberName, type, defaultValue) \
+ HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type)
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) propmacro
+ ITERATE_COMPOSER_OBJECT_TYPES
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+#undef HANDLE_COMPOSER_PROPERTY
+#undef HANDLE_COMPOSER_PROPERTY_NO_DEFAULT
+#undef HANDLE_COMPOSER_PROPERTY_DUPLICATE
+ QT3DS_ASSERT(false);
+ return ComposerPropertyNames::Unknown;
+}
+
+#define HANDLE_COMPOSER_PROPERTY(name, memberName, dtype, defaultValue) \
+ , memberName(inCore, inInstance, DataConstructor<dtype>().Construct(defaultValue))
+
+#define HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, dtype) \
+ , memberName(inCore, inInstance)
+
+#define HANDLE_COMPOSER_PROPERTY_DUPLICATE(name, memberName, dtype, defaultValue) \
+ HANDLE_COMPOSER_PROPERTY(name, memberName, dtype, defaultValue)
+
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \
+ SComposerTypePropertyDefinition<ComposerObjectTypes::name>::SComposerTypePropertyDefinition( \
+ IDataCore &inCore, Qt3DSDMInstanceHandle inInstance) \
+ : reserved(false) propmacro \
+ { \
+ Q_UNUSED(inCore); \
+ Q_UNUSED(inInstance); \
+ }
+ITERATE_COMPOSER_OBJECT_TYPES
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+#undef HANDLE_COMPOSER_PROPERTY
+#undef HANDLE_COMPOSER_PROPERTY_NO_DEFAULT
+#undef HANDLE_COMPOSER_PROPERTY_DUPLICATE
+
+void ComposerTypeDefinitionsHelper::SetInstanceAsCanonical(IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ ComposerObjectTypes::Enum inObjectType)
+{
+ inMetaData.SetInstanceAsCanonical(inInstance, ComposerObjectTypes::Convert(inObjectType));
+}
+
+void ComposerTypeDefinitionsHelper::SetInstancePropertyValue(IDataCore &inDataCore,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const wchar_t *inPropValue)
+{
+ inDataCore.SetInstancePropertyValue(inInstance, inProperty, make_shared<CDataStr>(inPropValue));
+}
+
+void ComposerTypeDefinitionsHelper::DeriveInstance(IDataCore &inDataCore,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent)
+{
+ inDataCore.DeriveInstance(inInstance, inParent);
+}
+
+// Container object for all of the object definitions
+SComposerObjectDefinitions::SComposerObjectDefinitions(IDataCore &inCore, IMetaData &inMetaData)
+ : m_Typed(inCore, inMetaData, inCore.CreateInstance())
+ , m_Guided(inCore, inMetaData, inCore.CreateInstance())
+ , m_Named(inCore, inMetaData, inCore.CreateInstance())
+ , m_SlideOwner(inCore, inMetaData, inCore.CreateInstance())
+ , m_Slide(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Named)
+ , m_Action(inCore, inMetaData, inCore.CreateInstance(), m_Typed)
+ , m_Asset(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Guided, m_Named)
+ , m_Scene(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset, m_SlideOwner)
+ , m_Image(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset)
+ , m_MaterialBase(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset)
+ , m_Lightmaps(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_MaterialBase)
+ , m_Material(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Lightmaps)
+ , m_CustomMaterial(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Lightmaps)
+ , m_ReferencedMaterial(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Lightmaps)
+ , m_Behavior(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset)
+ , m_Effect(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset)
+ , m_Node(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset)
+ , m_Layer(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node)
+ , m_Group(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node)
+ , m_Model(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node)
+ , m_Light(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node)
+ , m_Camera(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node)
+ , m_Component(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node, m_SlideOwner)
+ , m_Text(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node)
+ , m_RenderPlugin(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset)
+ , m_Alias(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node)
+ , m_Path(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Node)
+ , m_PathAnchorPoint(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset)
+ , m_SubPath(inCore, inMetaData, inCore.CreateInstance(), m_Typed, m_Asset)
+ , m_DataCore(inCore)
+{
+}
+
+bool SComposerObjectDefinitions::IsA(Qt3DSDMInstanceHandle inInstance,
+ ComposerObjectTypes::Enum inType)
+{
+ if (m_DataCore.IsInstance(inInstance) == false)
+ return false;
+
+ switch (inType) {
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \
+ case ComposerObjectTypes::name: \
+ return m_DataCore.IsInstanceOrDerivedFrom(inInstance, m_##name.m_Instance);
+ ITERATE_COMPOSER_OBJECT_TYPES
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+ default:
+ break;
+ }
+
+ QT3DS_ASSERT(false);
+ return false;
+}
+
+// Could easily return None, meaning we can't identify the object type.
+// Checks the type of the first derivation parent, so this won't ever return
+// SlideOwner, for instance.
+ComposerObjectTypes::Enum SComposerObjectDefinitions::GetType(Qt3DSDMInstanceHandle inInstance)
+{
+ if (m_DataCore.IsInstance(inInstance) == false)
+ return ComposerObjectTypes::Unknown;
+
+ Qt3DSDMInstanceHandle theTargetInstance = inInstance;
+ TInstanceHandleList theHandleList;
+ m_DataCore.GetInstanceParents(inInstance, theHandleList);
+ if (theHandleList.empty() == false)
+ theTargetInstance = theHandleList[0];
+
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \
+ if (m_##name.m_Instance == theTargetInstance) \
+ return ComposerObjectTypes::name;
+ ITERATE_COMPOSER_OBJECT_TYPES
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+
+ return ComposerObjectTypes::Unknown;
+}
+
+Qt3DSDMInstanceHandle
+SComposerObjectDefinitions::GetInstanceForType(ComposerObjectTypes::Enum inType)
+{
+ switch (inType) {
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \
+ case ComposerObjectTypes::name: \
+ return m_##name.m_Instance;
+ ITERATE_COMPOSER_OBJECT_TYPES
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+ default:
+ break;
+ }
+
+ QT3DS_ASSERT(false);
+ return 0;
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMComposerTypeDefinitions.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMComposerTypeDefinitions.h
new file mode 100644
index 00000000..1a079402
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMComposerTypeDefinitions.h
@@ -0,0 +1,956 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#include "Qt3DSDMHandles.h"
+#include "Qt3DSDMDataTypes.h"
+#include "foundation/Qt3DSOption.h"
+#include "Qt3DSDMDataCore.h"
+#include <utility>
+
+// Defines the minimal property model that UIComposer needs to
+// run off of.
+namespace qt3dsdm {
+class IDataCore;
+class IMetaData;
+class ISlideCore;
+class IPropertySystem;
+
+// Extensible macro definitions
+// Enumerations *have* to be in derivation order
+// else initialization of the SComposerObjectDefinitions class
+// will fail catastrophically
+// Specific type documentation is below
+#define ITERATE_COMPOSER_OBJECT_TYPES \
+ HANDLE_COMPOSER_OBJECT_TYPE(Typed, ITERATE_COMPOSER_TYPED_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Guided, ITERATE_COMPOSER_GUIDED_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Named, ITERATE_COMPOSER_NAMED_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(SlideOwner, ITERATE_COMPOSER_NO_ADDITIONAL_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Slide, ITERATE_COMPOSER_SLIDE_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Action, ITERATE_COMPOSER_ACTION_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Asset, ITERATE_COMPOSER_ASSET_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Scene, ITERATE_COMPOSER_SCENE_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Image, ITERATE_COMPOSER_IMAGE_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(MaterialBase, ITERATE_COMPOSER_MATERIAL_BASE_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Lightmaps, ITERATE_COMPOSER_LIGHTMAP_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Material, ITERATE_COMPOSER_MATERIAL_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(CustomMaterial, ITERATE_COMPOSER_NO_ADDITIONAL_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(ReferencedMaterial, \
+ ITERATE_COMPOSER_REFERENCED_MATERIAL_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Behavior, ITERATE_COMPOSER_NO_ADDITIONAL_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Effect, ITERATE_COMPOSER_NO_ADDITIONAL_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Node, ITERATE_COMPOSER_NODE_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Layer, ITERATE_COMPOSER_LAYER_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Group, ITERATE_COMPOSER_GROUP_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Model, ITERATE_COMPOSER_MODEL_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Light, ITERATE_COMPOSER_LIGHT_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Camera, ITERATE_COMPOSER_CAMERA_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Component, ITERATE_COMPOSER_COMPONENT_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Text, ITERATE_COMPOSER_TEXT_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(RenderPlugin, ITERATE_COMPOSER_NO_ADDITIONAL_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Alias, ITERATE_COMPOSER_ALIAS_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(Path, ITERATE_COMPOSER_PATH_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(PathAnchorPoint, ITERATE_COMPOSER_PATH_ANCHOR_POINT_PROPERTIES) \
+ HANDLE_COMPOSER_OBJECT_TYPE(SubPath, ITERATE_COMPOSER_PATH_SUBPATH_PROPERTIES)
+
+#define ITERATE_COMPOSER_NO_ADDITIONAL_PROPERTIES
+
+#define ITERATE_COMPOSER_TYPED_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(type, m_TypeProp, TDataStrPtr, L"Typed")
+
+#define ITERATE_COMPOSER_GUIDED_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(id, m_GuidProp, SLong4, 0)
+
+#define ITERATE_COMPOSER_NAMED_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(name, m_NameProp, TDataStrPtr, L"Unnamed")
+
+#define ITERATE_COMPOSER_ASSET_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(sourcepath, m_SourcePath, TDataStrPtr, L"") \
+ HANDLE_COMPOSER_PROPERTY(importid, m_ImportId, TDataStrPtr, L"") \
+ HANDLE_COMPOSER_PROPERTY(importfile, m_ImportFile, TDataStrPtr, L"") \
+ HANDLE_COMPOSER_PROPERTY(fileid, m_FileId, TDataStrPtr, L"") \
+ HANDLE_COMPOSER_PROPERTY(starttime, m_StartTime, qt3ds::QT3DSI32, 0) \
+ HANDLE_COMPOSER_PROPERTY(endtime, m_EndTime, qt3ds::QT3DSI32, 10000) \
+ HANDLE_COMPOSER_PROPERTY(eyeball, m_Eyeball, bool, true) \
+ HANDLE_COMPOSER_PROPERTY(shy, m_Shy, bool, false) \
+ HANDLE_COMPOSER_PROPERTY(locked, m_Locked, bool, false) \
+ HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(timebarcolor, m_TimebarColor, SFloat4) \
+ HANDLE_COMPOSER_PROPERTY(timebartext, m_TimebarText, TDataStrPtr, L"") \
+ HANDLE_COMPOSER_PROPERTY(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_SCENE_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(bgcolorenable, m_BgColorEnable, bool, true) \
+ HANDLE_COMPOSER_PROPERTY(backgroundcolor, m_BackgroundColor, SFloat4, SFloat4(0, 0, 0, 1)) \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_COMPONENT_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(variants, m_variants, TDataStrPtr, L"") \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_NODE_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(position, m_Position, SFloat3, SFloat3(0, 0, 0)) \
+ HANDLE_COMPOSER_PROPERTY(rotation, m_Rotation, SFloat3, SFloat3(0, 0, 0)) \
+ HANDLE_COMPOSER_PROPERTY(scale, m_Scale, SFloat3, SFloat3(1, 1, 1)) \
+ HANDLE_COMPOSER_PROPERTY(pivot, m_Pivot, SFloat3, SFloat3(0, 0, 0)) \
+ HANDLE_COMPOSER_PROPERTY(opacity, m_Opacity, float, 100.f) \
+ HANDLE_COMPOSER_PROPERTY(rotationorder, m_RotationOrder, TDataStrPtr, L"YXZ") \
+ HANDLE_COMPOSER_PROPERTY(orientation, m_Orientation, TDataStrPtr, L"Left Handed") \
+ HANDLE_COMPOSER_PROPERTY(boneid, m_BoneId, qt3ds::QT3DSI32, 0) \
+ HANDLE_COMPOSER_PROPERTY(ignoresparent, m_IgnoresParent, bool, false) \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_MODEL_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(shadowcaster, m_ShadowCaster, bool, true) \
+ HANDLE_COMPOSER_PROPERTY(poseroot, m_PoseRoot, qt3ds::QT3DSI32, -1) \
+ HANDLE_COMPOSER_PROPERTY(tessellation, m_Tessellation, TDataStrPtr, L"None") \
+ HANDLE_COMPOSER_PROPERTY(edgetess, m_EdgeTess, float, 1.0) \
+ HANDLE_COMPOSER_PROPERTY(innertess, m_InnerTess, float, 1.0) \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(variants, m_variants, TDataStrPtr, L"") \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_IMAGE_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(scaleu, m_RepeatU, float, 1.0f) \
+ HANDLE_COMPOSER_PROPERTY(scalev, m_RepeatV, float, 1.0f) \
+ HANDLE_COMPOSER_PROPERTY(mappingmode, m_TextureMapping, TDataStrPtr, L"UV Mapping") \
+ HANDLE_COMPOSER_PROPERTY(tilingmodehorz, m_TilingU, TDataStrPtr, L"No Tiling") \
+ HANDLE_COMPOSER_PROPERTY(tilingmodevert, m_TilingV, TDataStrPtr, L"No Tiling") \
+ HANDLE_COMPOSER_PROPERTY(rotationuv, m_RotationUV, float, 0.f) \
+ HANDLE_COMPOSER_PROPERTY(positionu, m_PositionU, float, 0.f) \
+ HANDLE_COMPOSER_PROPERTY(positionv, m_PositionV, float, 0.f) \
+ HANDLE_COMPOSER_PROPERTY(pivotu, m_PivotU, float, 0.f) \
+ HANDLE_COMPOSER_PROPERTY(pivotv, m_PivotV, float, 0.f) \
+ HANDLE_COMPOSER_PROPERTY(subpresentation, m_SubPresentation, TDataStrPtr, L"") \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_LIGHTMAP_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(lightmapindirect, m_LightmapIndirect, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(lightmapradiosity, m_LightmapRadiosity, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(lightmapshadow, m_LightmapShadow, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_CUSTOM_MATERIAL_PROPERTIES \
+ HANDLE_QT3DS_RENDER_PROPERTY(iblprobe, m_IblProbe, SLong4, 0)
+
+#define ITERATE_COMPOSER_MATERIAL_BASE_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(iblprobe, m_IblProbe, SLong4, 0)
+
+#define ITERATE_COMPOSER_MATERIAL_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(shaderlighting, m_ShaderLighting, TDataStrPtr, L"Vertex") \
+ HANDLE_COMPOSER_PROPERTY(blendmode, m_BlendMode, TDataStrPtr, L"Normal") \
+ HANDLE_COMPOSER_PROPERTY(diffuse, m_DiffuseColor, SFloat4, SFloat4(1, 1, 1, 1)) \
+ HANDLE_COMPOSER_PROPERTY(diffusemap, m_DiffuseMap1, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(diffusemap2, m_DiffuseMap2, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(diffusemap3, m_DiffuseMap3, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(specularreflection, m_SpecularReflection, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(specularamount, m_SpecularAmount, float, 0.f) \
+ HANDLE_COMPOSER_PROPERTY(specularroughness, m_SpecularRoughness, float, 50.f) \
+ HANDLE_COMPOSER_PROPERTY(roughnessmap, m_RoughnessMap, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(opacity, m_Opacity, float, 100.f) \
+ HANDLE_COMPOSER_PROPERTY(opacitymap, m_OpacityMap, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(emissivecolor, m_EmissiveColor, SFloat4, SFloat4(1, 1, 1, 1)) \
+ HANDLE_COMPOSER_PROPERTY(emissivepower, m_EmissivePower, float, 0.f) \
+ HANDLE_COMPOSER_PROPERTY(emissivemap, m_EmissiveMap, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(emissivemap2, m_EmissiveMap2, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(bumpmap, m_BumpMap, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(bumpamount, m_BumpAmount, float, 9.0f) \
+ HANDLE_COMPOSER_PROPERTY(normalmap, m_NormalMap, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(displacementmap, m_DisplacementMap, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(displaceamount, m_DisplaceAmount, float, 0.5f) \
+ HANDLE_COMPOSER_PROPERTY(translucencymap, m_TranslucencyMap, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(translucentfalloff, m_TranslucentFalloff, float, 1.f) \
+ HANDLE_COMPOSER_PROPERTY(diffuselightwrap, m_DiffuseLightWrap, float, 0.f) \
+ HANDLE_COMPOSER_PROPERTY(specularmap, m_SpecularMap, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(specularmodel, m_SpecularModel, TDataStrPtr, L"Default") \
+ HANDLE_COMPOSER_PROPERTY(speculartint, m_SpecularTint, SFloat4, SFloat4(1, 1, 1, 1)) \
+ HANDLE_COMPOSER_PROPERTY(ior, m_IOR, float, 0) \
+ HANDLE_COMPOSER_PROPERTY(fresnelPower, m_FresnelPower, float, 0) \
+ HANDLE_COMPOSER_PROPERTY(vertexcolors, m_VertexColors, bool, false) \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_REFERENCED_MATERIAL_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(referencedmaterial, m_ReferencedMaterial, SObjectRefType, L"")
+
+#define ITERATE_COMPOSER_LAYER_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(progressiveaa, m_ProgressiveAA, TDataStrPtr, L"None") \
+ HANDLE_COMPOSER_PROPERTY(multisampleaa, m_MultisampleAA, TDataStrPtr, L"None") \
+ HANDLE_COMPOSER_PROPERTY(temporalaa, m_TemporalAA, bool, false) \
+ HANDLE_COMPOSER_PROPERTY(disabledepthtest, m_DisableDepthTest, bool, false) \
+ HANDLE_COMPOSER_PROPERTY(disabledepthprepass, m_DisableDepthPrepass, bool, false) \
+ HANDLE_COMPOSER_PROPERTY(background, m_Background, TDataStrPtr, L"Transparent") \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(backgroundcolor, m_BackgroundColor, SFloat4, \
+ SFloat4(0, 0, 0, 1)) \
+ HANDLE_COMPOSER_PROPERTY(blendtype, m_BlendType, TDataStrPtr, L"Normal") \
+ HANDLE_COMPOSER_PROPERTY(horzfields, m_HorizontalFieldValues, TDataStrPtr, L"Left/Width") \
+ HANDLE_COMPOSER_PROPERTY(left, m_Left, float, 0) \
+ HANDLE_COMPOSER_PROPERTY(leftunits, m_LeftUnits, TDataStrPtr, L"percent") \
+ HANDLE_COMPOSER_PROPERTY(width, m_Width, float, 100.0f) \
+ HANDLE_COMPOSER_PROPERTY(widthunits, m_WidthUnits, TDataStrPtr, L"percent") \
+ HANDLE_COMPOSER_PROPERTY(right, m_Right, float, 0) \
+ HANDLE_COMPOSER_PROPERTY(rightunits, m_RightUnits, TDataStrPtr, L"percent") \
+ HANDLE_COMPOSER_PROPERTY(vertfields, m_VerticalFieldValues, TDataStrPtr, L"Top/Height") \
+ HANDLE_COMPOSER_PROPERTY(top, m_Top, float, 0) \
+ HANDLE_COMPOSER_PROPERTY(topunits, m_TopUnits, TDataStrPtr, L"percent") \
+ HANDLE_COMPOSER_PROPERTY(height, m_Height, float, 100.0f) \
+ HANDLE_COMPOSER_PROPERTY(heightunits, m_HeightUnits, TDataStrPtr, L"percent") \
+ HANDLE_COMPOSER_PROPERTY(bottom, m_Bottom, float, 0) \
+ HANDLE_COMPOSER_PROPERTY(bottomunits, m_BottomUnits, TDataStrPtr, L"percent") \
+ HANDLE_COMPOSER_PROPERTY(aostrength, m_AoStrength, float, 0) \
+ HANDLE_COMPOSER_PROPERTY(aodistance, m_AoDistance, float, 0) \
+ HANDLE_COMPOSER_PROPERTY(aosoftness, m_AoSoftness, float, 0) \
+ HANDLE_COMPOSER_PROPERTY(aobias, m_AoBias, float, 0) \
+ HANDLE_COMPOSER_PROPERTY(aosamplerate, m_AoSamplerate, qt3ds::QT3DSI32, 1) \
+ HANDLE_COMPOSER_PROPERTY(aodither, m_AoDither, bool, false) \
+ HANDLE_COMPOSER_PROPERTY(shadowstrength, m_ShadowStrength, float, 0) \
+ HANDLE_COMPOSER_PROPERTY(shadowdist, m_ShadowDist, float, 0) \
+ HANDLE_COMPOSER_PROPERTY(shadowsoftness, m_ShadowSoftness, float, 0) \
+ HANDLE_COMPOSER_PROPERTY(shadowbias, m_ShadowBias, float, 0) \
+ HANDLE_COMPOSER_PROPERTY(lightprobe, m_LightProbe, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(probebright, m_ProbeBright, float, 100.0f) \
+ HANDLE_COMPOSER_PROPERTY(fastibl, m_FastIbl, bool, true) \
+ HANDLE_COMPOSER_PROPERTY(probehorizon, m_ProbeHorizon, float, -1) \
+ HANDLE_COMPOSER_PROPERTY(probefov, m_ProbeFov, float, 180.0f) \
+ HANDLE_COMPOSER_PROPERTY(lightprobe2, m_LightProbe2, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(probe2fade, m_Probe2Fade, float, 1) \
+ HANDLE_COMPOSER_PROPERTY(probe2window, m_Probe2Window, float, 1) \
+ HANDLE_COMPOSER_PROPERTY(probe2pos, m_Probe2Pos, float, 0.5f) \
+ HANDLE_COMPOSER_PROPERTY(variants, m_variants, TDataStrPtr, L"") \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_GROUP_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(variants, m_variants, TDataStrPtr, L"") \
+
+#define ITERATE_COMPOSER_LIGHT_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(lighttype, m_LightType, TDataStrPtr, L"Directional") \
+ HANDLE_COMPOSER_PROPERTY(scope, m_Scope, SObjectRefType, L"") \
+ HANDLE_COMPOSER_PROPERTY(lightdiffuse, m_LightColor, SFloat4, SFloat4(1, 1, 1, 1)) \
+ HANDLE_COMPOSER_PROPERTY(lightspecular, m_SpecularColor, SFloat4, SFloat4(1, 1, 1, 1)) \
+ HANDLE_COMPOSER_PROPERTY(lightambient, m_AmbientColor, SFloat4, SFloat4(0, 0, 0, 1)) \
+ HANDLE_COMPOSER_PROPERTY(brightness, m_Brightness, float, 100.0f) \
+ HANDLE_COMPOSER_PROPERTY(linearfade, m_LinearFade, float, 0.0f) \
+ HANDLE_COMPOSER_PROPERTY(expfade, m_ExpFade, float, 0.0f) \
+ HANDLE_COMPOSER_PROPERTY(areawidth, m_AreaWidth, float, 0.0f) \
+ HANDLE_COMPOSER_PROPERTY(areaheight, m_AreaHeight, float, 0.0f) \
+ HANDLE_COMPOSER_PROPERTY(castshadow, m_CastShadow, bool, false) \
+ HANDLE_COMPOSER_PROPERTY(shdwbias, m_ShadowBias, float, 0.0f) \
+ HANDLE_COMPOSER_PROPERTY(shdwfactor, m_ShadowFactor, float, 5.0f) \
+ HANDLE_COMPOSER_PROPERTY(shdwmapres, m_ShadowMapRes, qt3ds::QT3DSI32, 9) \
+ HANDLE_COMPOSER_PROPERTY(shdwmapfar, m_ShadowMapFar, float, 5000.0f) \
+ HANDLE_COMPOSER_PROPERTY(shdwmapfov, m_ShadowMapFov, float, 90.0f) \
+ HANDLE_COMPOSER_PROPERTY(shdwfilter, m_ShadowFilter, float, 35.0f) \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_CAMERA_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(orthographic, m_Orthographic, bool, false) \
+ HANDLE_COMPOSER_PROPERTY(fov, m_Fov, float, 60.f) \
+ HANDLE_COMPOSER_PROPERTY(fovhorizontal, m_FovHorizontal, bool, false) \
+ HANDLE_COMPOSER_PROPERTY(clipnear, m_ClipNear, float, 10.f) \
+ HANDLE_COMPOSER_PROPERTY(clipfar, m_ClipFar, float, 100000.f) \
+ HANDLE_COMPOSER_PROPERTY(scalemode, m_ScaleMode, TDataStrPtr, L"Fit") \
+ HANDLE_COMPOSER_PROPERTY(scaleanchor, m_ScaleAnchor, TDataStrPtr, L"Center") \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_EDIT_CAMERA_PROPERTIES HANDLE_COMPOSER_PROPERTY(is3d, m_Is3d, bool, false)
+
+#define ITERATE_COMPOSER_TEXT_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(textstring, m_TextString, TDataStrPtr, L"Text") \
+ HANDLE_COMPOSER_PROPERTY(textcolor, m_TextColor, SFloat4, SFloat4(1, 1, 1, 1)) \
+ HANDLE_COMPOSER_PROPERTY(font, m_Font, TDataStrPtr, L"arial") \
+ HANDLE_COMPOSER_PROPERTY(size, m_Size, float, 24.f) \
+ HANDLE_COMPOSER_PROPERTY(horzalign, m_HorzAlign, TDataStrPtr, L"Center") \
+ HANDLE_COMPOSER_PROPERTY(vertalign, m_VertAlign, TDataStrPtr, L"Middle") \
+ HANDLE_COMPOSER_PROPERTY(leading, m_Leading, float, 0.f) \
+ HANDLE_COMPOSER_PROPERTY(tracking, m_Tracking, float, 0.f) \
+ HANDLE_COMPOSER_PROPERTY(dropshadow, m_DropShadow, bool, false) \
+ HANDLE_COMPOSER_PROPERTY(dropshadowstrength, m_DropShadowStrength, float, 80.f) \
+ HANDLE_COMPOSER_PROPERTY(dropshadowoffsetx, m_DropShadowOffsetX, float, 0.f) \
+ HANDLE_COMPOSER_PROPERTY(dropshadowoffsety, m_DropShadowOffsetY, float, 0.f) \
+ HANDLE_COMPOSER_PROPERTY(wordwrap, m_WordWrap, TDataStrPtr, L"WrapWord") \
+ HANDLE_COMPOSER_PROPERTY(boundingbox, m_BoundingBox, SFloat2, SFloat2(0, 0)) \
+ HANDLE_COMPOSER_PROPERTY(elide, m_Elide, TDataStrPtr, L"ElideNone") \
+ HANDLE_COMPOSER_PROPERTY(enableacceleratedfont, m_EnableAcceleratedFont, bool, false) \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(variants, m_variants, TDataStrPtr, L"") \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_SLIDE_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(componentid, m_ComponentId, SLong4, 0) \
+ HANDLE_COMPOSER_PROPERTY(playmode, m_PlayMode, TDataStrPtr, L"Looping") \
+ HANDLE_COMPOSER_PROPERTY(playthroughto, m_PlaythroughTo, SStringOrInt, L"Next") \
+ HANDLE_COMPOSER_PROPERTY(initialplaystate, m_InitialPlayState, TDataStrPtr, L"Play") \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_ACTION_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(actioneyeball, m_ActionEyeball, bool, true)
+
+#define ITERATE_COMPOSER_ALIAS_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(referencednode, m_ReferencedNode, SObjectRefType, L"") \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_PATH_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(pathtype, m_PathType, TDataStrPtr, L"Geometry") \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(width, m_Width, float, 5.0f) \
+ HANDLE_COMPOSER_PROPERTY(linearerror, m_LinearError, float, 10) \
+ HANDLE_COMPOSER_PROPERTY(edgetessamount, m_EdgeTessAmount, float, 8) \
+ HANDLE_COMPOSER_PROPERTY(innertessamount, m_InnerTessAmount, float, 8) \
+ HANDLE_COMPOSER_PROPERTY(begincap, m_BeginCap, TDataStrPtr, L"None") \
+ HANDLE_COMPOSER_PROPERTY(begincapoffset, m_BeginCapOffset, float, 0.0f) \
+ HANDLE_COMPOSER_PROPERTY(begincapopacity, m_BeginCapOpacity, float, 0.0f) \
+ HANDLE_COMPOSER_PROPERTY(begincapwidth, m_BeginCapWidth, float, 0.0f) \
+ HANDLE_COMPOSER_PROPERTY(endcap, m_EndCap, TDataStrPtr, L"None") \
+ HANDLE_COMPOSER_PROPERTY(endcapoffset, m_EndCapOffset, float, 0.0f) \
+ HANDLE_COMPOSER_PROPERTY(endcapopacity, m_EndCapOpacity, float, 0.0f) \
+ HANDLE_COMPOSER_PROPERTY(endcapwidth, m_EndCapWidth, float, 0.0f) \
+ HANDLE_COMPOSER_PROPERTY(paintstyle, m_PaintStyle, TDataStrPtr, L"Stroked") \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
+
+#define ITERATE_COMPOSER_PATH_ANCHOR_POINT_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY_DUPLICATE(position, m_Position, SFloat2, SFloat2(0.0f, 0.0f)) \
+ HANDLE_COMPOSER_PROPERTY(incomingangle, m_IncomingAngle, float, 0.0f) \
+ HANDLE_COMPOSER_PROPERTY(incomingdistance, m_IncomingDistance, float, 0.0f) \
+ HANDLE_COMPOSER_PROPERTY(outgoingdistance, m_OutgoingDistance, float, 0.0f)
+
+#define ITERATE_COMPOSER_PATH_SUBPATH_PROPERTIES \
+ HANDLE_COMPOSER_PROPERTY(closed, m_Closed, bool, true)
+
+struct ComposerObjectTypes
+{
+ enum Enum {
+ Unknown = 0,
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) name,
+ ITERATE_COMPOSER_OBJECT_TYPES
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+ ControllableObject
+ };
+ static const wchar_t *Convert(ComposerObjectTypes::Enum inType);
+ static ComposerObjectTypes::Enum Convert(const wchar_t *inType);
+ static ComposerObjectTypes::Enum Convert(const char8_t *inType);
+};
+
+struct ComposerPropertyNames
+{
+ enum Enum {
+ Unknown = 0,
+#define HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, type) name,
+#define HANDLE_COMPOSER_PROPERTY_DUPLICATE(name, memberName, type, defaultValue)
+#define HANDLE_COMPOSER_PROPERTY(name, memberName, type, defaultValue) name,
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) propmacro
+ ITERATE_COMPOSER_OBJECT_TYPES
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+#undef HANDLE_COMPOSER_PROPERTY_NO_DEFAULT
+#undef HANDLE_COMPOSER_PROPERTY
+#undef HANDLE_COMPOSER_PROPERTY_DUPLICATE
+ };
+
+ static const wchar_t *Convert(ComposerPropertyNames::Enum inType);
+ static ComposerPropertyNames::Enum Convert(const wchar_t *inType);
+ static const char8_t *ConvertNarrow(ComposerPropertyNames::Enum inType);
+ static ComposerPropertyNames::Enum Convert(const char8_t *inType);
+};
+
+template <typename TDataType>
+struct TypeToDataTypeMap
+{
+ bool force_compile_error;
+};
+template <DataModelDataType::Value TEnum>
+struct DataTypeToTypeMap
+{
+ bool force_compile_error;
+};
+
+#define QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(enumName, type) \
+ template <> \
+ struct TypeToDataTypeMap<type> \
+ { \
+ static DataModelDataType::Value GetDataType() { return enumName; } \
+ }; \
+ template <> \
+ struct DataTypeToTypeMap<enumName> \
+ { \
+ typedef type TDataType; \
+ };
+
+QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Float, float)
+QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Float2, SFloat2)
+QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Float3, SFloat3)
+QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Float4, SFloat4)
+QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Long, qt3ds::QT3DSI32)
+QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::String, TDataStrPtr)
+QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Bool, bool)
+QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::Long4, SLong4)
+QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::StringRef, SStringRef)
+QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::StringOrInt, SStringOrInt)
+QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::ObjectRef, SObjectRefType)
+QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE(DataModelDataType::FloatList, TFloatList)
+
+#undef QT3DSDM_DEFINE_TYPE_TO_DATA_TYPE
+
+template <typename TDataType>
+inline DataModelDataType::Value TypeToDataType()
+{
+ return TypeToDataTypeMap<TDataType>::GetDataType();
+}
+
+template <ComposerPropertyNames::Enum TPropName, typename TDataType>
+struct SComposerPropertyDefinition
+{
+ qt3ds::foundation::Option<TDataType> m_DefaultValue;
+ Qt3DSDMPropertyHandle m_Property;
+ SComposerPropertyDefinition(IDataCore &inDataCore, Qt3DSDMInstanceHandle inInstance,
+ const TDataType &inDefault)
+ : m_DefaultValue(inDefault)
+ {
+ QT3DSDM_LOG_FUNCTION("SComposerPropertyDefinition-1");
+ m_Property = inDataCore.AddProperty(inInstance, ComposerPropertyNames::Convert(TPropName),
+ TypeToDataType<TDataType>());
+ if (m_DefaultValue.hasValue())
+ inDataCore.SetInstancePropertyValue(inInstance, m_Property, m_DefaultValue.getValue());
+ }
+ SComposerPropertyDefinition(IDataCore &inDataCore, Qt3DSDMInstanceHandle inInstance)
+ {
+ QT3DSDM_LOG_FUNCTION("SComposerPropertyDefinition-2");
+ m_Property = inDataCore.AddProperty(inInstance, ComposerPropertyNames::Convert(TPropName),
+ TypeToDataType<TDataType>());
+ }
+ operator Qt3DSDMPropertyHandle() const { return m_Property; }
+};
+
+// Define all the objects with their properties
+
+template <ComposerObjectTypes::Enum>
+struct SComposerTypePropertyDefinition
+{
+ bool force_compile_error;
+};
+
+#define HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, dtype) \
+ SComposerPropertyDefinition<ComposerPropertyNames::name, dtype> memberName;
+
+#define HANDLE_COMPOSER_PROPERTY(name, memberName, dtype, defaultValue) \
+ HANDLE_COMPOSER_PROPERTY_NO_DEFAULT(name, memberName, dtype)
+#define HANDLE_COMPOSER_PROPERTY_DUPLICATE(name, memberName, dtype, defaultValue) \
+ HANDLE_COMPOSER_PROPERTY(name, memberName, dtype, defaultValue)
+
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \
+ template <> \
+ struct SComposerTypePropertyDefinition<ComposerObjectTypes::name> \
+ { \
+ bool reserved; \
+ propmacro SComposerTypePropertyDefinition(IDataCore &inCore, \
+ Qt3DSDMInstanceHandle inInstance); \
+ };
+
+ITERATE_COMPOSER_OBJECT_TYPES
+
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+#undef HANDLE_COMPOSER_PROPERTY
+#undef HANDLE_COMPOSER_PROPERTY_NO_DEFAULT
+#undef HANDLE_COMPOSER_PROPERTY_DUPLICATE
+
+struct ComposerTypeDefinitionsHelper
+{
+ // Functions here so we don't have to include UICDMDataCore.h or UICDMMetaData.h
+ static void SetInstanceAsCanonical(IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance,
+ ComposerObjectTypes::Enum inObjectType);
+ static void SetInstancePropertyValue(IDataCore &inDataCore, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const wchar_t *inPropValue);
+ static void DeriveInstance(IDataCore &inDataCore, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent);
+};
+
+template <ComposerObjectTypes::Enum TEnumType>
+struct SComposerBaseObjectDefinition : public SComposerTypePropertyDefinition<TEnumType>
+{
+ Qt3DSDMInstanceHandle m_Instance;
+ SComposerBaseObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance)
+ : SComposerTypePropertyDefinition<TEnumType>(inCore, inInstance)
+ , m_Instance(inInstance)
+ {
+ QT3DSDM_LOG_FUNCTION("SComposerBaseObjectDefinition");
+ ComposerTypeDefinitionsHelper::SetInstanceAsCanonical(inMetaData, inInstance, TEnumType);
+ }
+
+ template <ComposerObjectTypes::Enum TBaseType>
+ void Derive(IDataCore &inCore, const SComposerBaseObjectDefinition<TBaseType> &inParent)
+ {
+ QT3DSDM_LOG_FUNCTION("SComposerBaseObjectDefinition::Derive");
+ ComposerTypeDefinitionsHelper::DeriveInstance(inCore, m_Instance, inParent.m_Instance);
+ }
+ void SetType(IDataCore &inCore,
+ const SComposerBaseObjectDefinition<ComposerObjectTypes::Typed> &inParent)
+ {
+ QT3DSDM_LOG_FUNCTION("SComposerBaseObjectDefinition::SetInstancePropertyValue");
+ ComposerTypeDefinitionsHelper::SetInstancePropertyValue(
+ inCore, m_Instance, inParent.m_TypeProp, ComposerObjectTypes::Convert(TEnumType));
+ }
+ void TypedDerive(IDataCore &inCore,
+ const SComposerBaseObjectDefinition<ComposerObjectTypes::Typed> &inParent)
+ {
+ QT3DSDM_LOG_FUNCTION("SComposerBaseObjectDefinition::TypedDerive");
+ Derive(inCore, inParent);
+ SetType(inCore, inParent);
+ }
+};
+
+template <ComposerObjectTypes::Enum TEnumType>
+struct SComposerObjectDefinition : public SComposerBaseObjectDefinition<TEnumType>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance)
+ : SComposerBaseObjectDefinition<TEnumType>(inCore, inMetaData, inInstance)
+ {
+ }
+};
+
+// Base class of slides
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Slide>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Slide>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Named> &inNamed)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Slide>(inCore, inMetaData, inInstance)
+ {
+ TypedDerive(inCore, inTyped);
+ Derive(inCore, inNamed);
+ }
+};
+
+// Base class of actions
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Action>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Action>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Action>(inCore, inMetaData, inInstance)
+ {
+ TypedDerive(inCore, inTyped);
+ }
+};
+
+// Base class of assets
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Asset>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Asset>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Guided> &inGuided,
+ SComposerObjectDefinition<ComposerObjectTypes::Named> &inNamed)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Asset>(inCore, inMetaData, inInstance)
+ {
+ TypedDerive(inCore, inTyped);
+ Derive(inCore, inGuided);
+ Derive(inCore, inNamed);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Scene>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Scene>
+{
+ SComposerObjectDefinition(
+ IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Asset> &inAsset,
+ SComposerObjectDefinition<ComposerObjectTypes::SlideOwner> &inSlideOwner)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Scene>(inCore, inMetaData, inInstance)
+ {
+ Derive(inCore, inAsset);
+ Derive(inCore, inSlideOwner);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Image>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Image>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Asset> &inAsset)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Image>(inCore, inMetaData, inInstance)
+ {
+ Derive(inCore, inAsset);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::MaterialBase>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::MaterialBase>
+
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Asset> &inAsset)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::MaterialBase>(inCore, inMetaData,
+ inInstance)
+ {
+ Derive(inCore, inAsset);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Lightmaps>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Lightmaps>
+
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::MaterialBase> &inBase)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Lightmaps>(inCore, inMetaData,
+ inInstance)
+ {
+ Derive(inCore, inBase);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Material>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Material>
+
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Lightmaps> &inBase)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Material>(inCore, inMetaData,
+ inInstance)
+ {
+ Derive(inCore, inBase);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::CustomMaterial>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::CustomMaterial>
+
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Lightmaps> &inBase)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::CustomMaterial>(inCore, inMetaData,
+ inInstance)
+ {
+ Derive(inCore, inBase);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::ReferencedMaterial>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::ReferencedMaterial>
+
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Lightmaps> &inBase)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::ReferencedMaterial>(inCore, inMetaData,
+ inInstance)
+ {
+ Derive(inCore, inBase);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Behavior>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Behavior>
+
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Asset> &inAsset)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Behavior>(inCore, inMetaData,
+ inInstance)
+ {
+ Derive(inCore, inAsset);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Effect>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Effect>
+
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Asset> &inAsset)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Effect>(inCore, inMetaData, inInstance)
+ {
+ Derive(inCore, inAsset);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Node>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Node>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Asset> &inAsset)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Node>(inCore, inMetaData, inInstance)
+ {
+ Derive(inCore, inAsset);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Layer>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Layer>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Node> &inNode)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Layer>(inCore, inMetaData, inInstance)
+ {
+ Derive(inCore, inNode);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Model>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Model>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Node> &inNode)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Model>(inCore, inMetaData, inInstance)
+ {
+ Derive(inCore, inNode);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Group>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Group>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Node> &inNode)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Group>(inCore, inMetaData, inInstance)
+ {
+ Derive(inCore, inNode);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Light>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Light>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Node> &inNode)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Light>(inCore, inMetaData, inInstance)
+ {
+ Derive(inCore, inNode);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Camera>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Camera>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Node> &inNode)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Camera>(inCore, inMetaData, inInstance)
+ {
+ Derive(inCore, inNode);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Text>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Text>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Node> &inNode)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Text>(inCore, inMetaData, inInstance)
+ {
+ Derive(inCore, inNode);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Component>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Component>
+{
+ SComposerObjectDefinition(
+ IDataCore &inCore, IMetaData &inMetaData, Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Node> &inNode,
+ SComposerObjectDefinition<ComposerObjectTypes::SlideOwner> &inSlideOwner)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Component>(inCore, inMetaData,
+ inInstance)
+ {
+ Derive(inCore, inNode);
+ Derive(inCore, inSlideOwner);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::RenderPlugin>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::RenderPlugin>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Asset> &inAsset)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::RenderPlugin>(inCore, inMetaData,
+ inInstance)
+ {
+ Derive(inCore, inAsset);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Alias>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Alias>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Node> &inNode)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Alias>(inCore, inMetaData, inInstance)
+ {
+ Derive(inCore, inNode);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::Path>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::Path>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Node> &inNode)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::Path>(inCore, inMetaData, inInstance)
+ {
+ Derive(inCore, inNode);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::PathAnchorPoint>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::PathAnchorPoint>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Asset> &inAsset)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::PathAnchorPoint>(inCore, inMetaData,
+ inInstance)
+ {
+ Derive(inCore, inAsset);
+ SetType(inCore, inTyped);
+ }
+};
+
+template <>
+struct SComposerObjectDefinition<ComposerObjectTypes::SubPath>
+ : public SComposerBaseObjectDefinition<ComposerObjectTypes::SubPath>
+{
+ SComposerObjectDefinition(IDataCore &inCore, IMetaData &inMetaData,
+ Qt3DSDMInstanceHandle inInstance,
+ SComposerObjectDefinition<ComposerObjectTypes::Typed> &inTyped,
+ SComposerObjectDefinition<ComposerObjectTypes::Asset> &inAsset)
+ : SComposerBaseObjectDefinition<ComposerObjectTypes::SubPath>(inCore, inMetaData,
+ inInstance)
+ {
+ Derive(inCore, inAsset);
+ SetType(inCore, inTyped);
+ }
+};
+
+// Container object for all of the object definitions
+class SComposerObjectDefinitions
+{
+public:
+#define HANDLE_COMPOSER_OBJECT_TYPE(name, propmacro) \
+ SComposerObjectDefinition<ComposerObjectTypes::name> m_##name;
+ ITERATE_COMPOSER_OBJECT_TYPES
+#undef HANDLE_COMPOSER_OBJECT_TYPE
+
+ SComposerObjectDefinitions(IDataCore &inDataCore, IMetaData &inMetaData);
+ SComposerObjectDefinitions() = default;
+ ~SComposerObjectDefinitions() = default;
+
+ // RTTI API
+ bool IsA(Qt3DSDMInstanceHandle inInstance, ComposerObjectTypes::Enum inType);
+ // Could easily return None, meaning we can't identify the object type.
+ // Checks the type of the first derivation parent, so this won't ever return
+ // SlideOwner, for instance.
+ ComposerObjectTypes::Enum GetType(Qt3DSDMInstanceHandle inInstance);
+
+ Qt3DSDMInstanceHandle GetInstanceForType(ComposerObjectTypes::Enum inType);
+private:
+ IDataCore &m_DataCore;
+ SComposerObjectDefinitions(const SComposerObjectDefinitions&) = delete;
+ SComposerObjectDefinitions& operator=(const SComposerObjectDefinitions&) = delete;
+};
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMDataCore.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMDataCore.h
new file mode 100644
index 00000000..793cddb4
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMDataCore.h
@@ -0,0 +1,320 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_DATACORE_H
+#define QT3DSDM_DATACORE_H
+#include "Qt3DSDMHandles.h"
+#include "Qt3DSDMPropertyDefinition.h"
+#include "HandleSystemBase.h"
+#include "Qt3DSDMMetaData.h"
+#include "Qt3DSDMValue.h"
+
+namespace qt3dsdm {
+
+typedef std::pair<Qt3DSDMPropertyHandle, SValue> TPropertyHandleValuePair;
+typedef std::vector<TPropertyHandleValuePair> TPropertyHandleValuePairList;
+
+class IInstancePropertyCore
+{
+public:
+ virtual ~IInstancePropertyCore() {}
+
+ /**
+ * Find a given instance property by name. May return an invalid handle.
+ */
+ virtual Qt3DSDMPropertyHandle
+ GetAggregateInstancePropertyByName(Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inStr) const = 0;
+ /**
+ * Get the entire list of instance properties;
+ */
+ virtual void GetAggregateInstanceProperties(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleList &outProperties) const = 0;
+ // Get the properties that are stored only on this instance, not on any parents.
+ virtual void GetSpecificInstancePropertyValues(Qt3DSDMInstanceHandle inHandle,
+ TPropertyHandleValuePairList &outValues) = 0;
+ /**
+ * Return true if this property is on this instance or one of its parents.
+ */
+ virtual bool HasAggregateInstanceProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const = 0;
+
+ /**
+ * Does this value match the approperty property type.
+ * error - PropertyNotFound
+ * error - ValueTypeError
+ */
+ virtual void CheckValue(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) const = 0;
+ /**
+ * Get this property from this instance. This includes looking up the default value. If the
+ *instance doesn't have the property
+ * and it has no default the return value is false.
+ * error - InstanceNotFound
+ * error - PropertyNotFound if this property doesn't exist on this instance or doesn't exist.
+ */
+ virtual bool GetInstancePropertyValue(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const = 0;
+ /**
+ * Set this property on this instance.
+ * error - InstanceNotFound
+ * error - PropertyNotFound if this property doesn't exist on this instance or doesn't exist.
+ * error - ValueTypeError if this value is of the wrong type
+ */
+ virtual void SetInstancePropertyValue(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) = 0;
+};
+
+typedef std::shared_ptr<IInstancePropertyCore> TInstancePropertyCorePtr;
+
+class IStringTable;
+
+/**
+ * Primary interface to data model system. This allows you to define 'classes', which are
+ *really just
+ * collections of properties, and instances of those classes. A zero handle value is regarded
+ *as empty.
+ */
+class IDataCore : public IHandleBase, public IInstancePropertyCore
+{
+public:
+ virtual ~IDataCore() {}
+
+ // Bookkeeping
+ virtual IStringTable &GetStringTable() const = 0;
+ virtual std::shared_ptr<IStringTable> GetStringTablePtr() const = 0;
+
+ //===============================================================
+ // Instances
+ //===============================================================
+ /**
+ * Create a new instance of a class. Instances can be named, in which case
+ * they are sometimes treated differently when serialized. If the name is null
+ * or has no length then it is ignored. If the name is non-null, then a check is
+ * run as named instances must have unique names. When a named instance is a parent
+ * of another instance, only its name is serialized out; not its handle thus you can safely
+ * use names as inter-application instance handles.
+ * May use a target id to specify what the ideal id is; id must not exist.
+ * - error DuplicateInstanceName
+ */
+ virtual Qt3DSDMInstanceHandle
+ CreateInstance(Qt3DSDMInstanceHandle inTargetId = Qt3DSDMInstanceHandle()) = 0;
+ /**
+ * Delete an instance.
+ * error - InstanceNotFound
+ */
+ virtual void DeleteInstance(Qt3DSDMInstanceHandle inHandle) = 0;
+ /**
+ * Return all the instances in the system.
+ */
+ virtual void GetInstances(TInstanceHandleList &outInstances) const = 0;
+ /**
+ * Return all the instances in the system that is derived from parent.
+ */
+ virtual void GetInstancesDerivedFrom(TInstanceHandleList &outInstances,
+ Qt3DSDMInstanceHandle inParentHandle) const = 0;
+
+ //===============================================================
+ // Instance Derivation
+ //===============================================================
+ /**
+ * Derive an instance from another instance. This implies a rebuild of
+ * the aggregate properties of a given instance.
+ * error - InstanceNotFound if either instance or parent aren't found
+ */
+ virtual void DeriveInstance(Qt3DSDMInstanceHandle inInstance, Qt3DSDMInstanceHandle inParent) = 0;
+ /**
+ * Return a count of the parent's of a given instance.
+ * error - InstanceNotFound
+ */
+ virtual void GetInstanceParents(Qt3DSDMInstanceHandle inHandle,
+ TInstanceHandleList &outParents) const = 0;
+
+ /**
+ * Returns true if the instance is derived from the parent somehow.
+ */
+ virtual bool IsInstanceOrDerivedFrom(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent) const = 0;
+ //===============================================================
+
+ //===============================================================
+ // Class Properties
+ //===============================================================
+ /**
+ * Add a new property to a given instances. You can use this to overshadow properties
+ * on base instances but you can't add two properties of the same name to a given
+ * instance.
+ * error - InstanceNotFound
+ * error - PropertyExists if the property already exists on this class
+ * error - ValueTypeError if the default value exists and is if a different type than
+ *inPropType
+ */
+ virtual Qt3DSDMPropertyHandle AddProperty(Qt3DSDMInstanceHandle inInstance, TCharPtr inName,
+ DataModelDataType::Value inPropType) = 0;
+ /**
+ * Return the property definition that corresponds to a given property value.
+ */
+ virtual const Qt3DSDMPropertyDefinition &GetProperty(Qt3DSDMPropertyHandle inProperty) const = 0;
+ /**
+ * Return the properties specific to this instance, not including properties
+ * gained by derivation
+ */
+ virtual void GetInstanceProperties(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleList &outProperties) const = 0;
+ /**
+ * Remove a property from an instance. Instances will no long have this property accessible
+ *nor will
+ * child instances.
+ */
+ virtual void RemoveProperty(Qt3DSDMPropertyHandle inProperty) = 0;
+ /**
+ * Copy properties (definitions & values) specific to one instance, not including properties
+ * gained by derivation, to another instance.
+ */
+ virtual void CopyInstanceProperties(Qt3DSDMInstanceHandle inSrcInstance,
+ Qt3DSDMInstanceHandle inDestInstance) = 0;
+ /**
+ * Removed cached intermediate values from the instance. DataModel pull properties from the
+ *inheritance hierarchy chain
+ * up to the current instance when someone requests a property in order to make the next
+ *request quicker. This breaks
+ * some forms of updating where a parent's default value gets changed and the instance won't
+ *reflect it (until you
+ * save/load the file).
+ */
+ //===============================================================
+ virtual void RemoveCachedValues(Qt3DSDMInstanceHandle inInstance) = 0;
+
+ //===============================================================
+ // Handle validation
+ //===============================================================
+ /**
+ * Is valid and is instances
+ */
+ virtual bool IsInstance(int inHandle) const = 0;
+ /**
+ * is valid and is property
+ */
+ virtual bool IsProperty(int inHandle) const = 0;
+};
+
+typedef std::shared_ptr<IDataCore> TDataCorePtr;
+
+class IPropertySystem : public IHandleBase
+{
+public:
+ virtual ~IPropertySystem() {}
+
+ virtual Qt3DSDMInstanceHandle CreateInstance() = 0;
+ virtual void DeleteInstance(Qt3DSDMInstanceHandle inHandle) = 0;
+ virtual void DeriveInstance(Qt3DSDMInstanceHandle inInstance, Qt3DSDMInstanceHandle inParent) = 0;
+
+ virtual void GetInstances(TInstanceHandleList &outInstances) const = 0;
+
+ virtual Qt3DSDMPropertyHandle AddProperty(Qt3DSDMInstanceHandle inInstance, TCharPtr inName,
+ DataModelDataType::Value inPropType) = 0;
+
+ virtual Qt3DSDMPropertyHandle
+ GetAggregateInstancePropertyByName(Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inStr) const = 0;
+ virtual void GetAggregateInstanceProperties(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleList &outProperties) const = 0;
+ virtual bool HasAggregateInstanceProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const = 0;
+
+ virtual bool GetInstancePropertyValue(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const = 0;
+ virtual void SetInstancePropertyValue(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) = 0;
+
+ virtual bool IsInstanceOrDerivedFrom(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent) const = 0;
+
+ virtual DataModelDataType::Value GetDataType(Qt3DSDMPropertyHandle inProperty) const = 0;
+ virtual TCharStr GetName(Qt3DSDMPropertyHandle inProperty) const = 0;
+ virtual TCharStr GetFormalName(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const = 0;
+ virtual AdditionalMetaDataType::Value
+ GetAdditionalMetaDataType(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const = 0;
+ virtual TMetaDataData GetAdditionalMetaDataData(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const = 0;
+ virtual Qt3DSDMInstanceHandle GetPropertyOwner(Qt3DSDMPropertyHandle inProperty) const = 0;
+
+ virtual QVector<Qt3DSDMPropertyHandle> GetControllableProperties(
+ Qt3DSDMInstanceHandle inInst) const = 0;
+
+};
+typedef std::shared_ptr<IPropertySystem> TPropertySystemPtr;
+
+template <typename TCoreType>
+inline SValue GetInstancePropertyValue(TCoreType inCore, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ SValue retval;
+ if (!inCore->GetInstancePropertyValue(inInstance, inProperty, retval))
+ throw PropertyNotFound(L"");
+ return retval;
+}
+
+template <typename TDataType, typename TCoreType>
+inline TDataType GetSpecificInstancePropertyValue(TCoreType inDataCore,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ return qt3dsdm::get<TDataType>(GetInstancePropertyValue(inDataCore, inInstance, inProperty));
+}
+
+template <typename TDataType, typename TCoreType>
+inline TDataType GetNamedInstancePropertyValue(TCoreType inDataCore,
+ Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inName)
+{
+ Qt3DSDMPropertyHandle theProperty =
+ inDataCore->GetAggregateInstancePropertyByName(inInstance, inName);
+ return GetSpecificInstancePropertyValue<TDataType, TCoreType>(inDataCore, inInstance,
+ theProperty);
+}
+
+inline Qt3DSDMPropertyHandle AddPropertyWithValue(IPropertySystem &inPropertySystem,
+ Qt3DSDMInstanceHandle inInstance, TCharPtr inName,
+ DataModelDataType::Value inDataType,
+ const SValue &inValue)
+{
+ Qt3DSDMPropertyHandle theProperty(inPropertySystem.AddProperty(inInstance, inName, inDataType));
+ inPropertySystem.SetInstancePropertyValue(inInstance, theProperty, inValue);
+ return theProperty;
+}
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMDataTypes.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMDataTypes.h
new file mode 100644
index 00000000..7a7157f6
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMDataTypes.h
@@ -0,0 +1,891 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_DATA_H
+#define QT3DSDM_DATA_H
+
+#include <memory>
+#include <functional>
+
+#include "Qt3DSDMErrors.h"
+#include "Qt3DSDMStringTable.h"
+#include "Qt3DSDMWindowsCompatibility.h"
+#include <stdexcept>
+#include <vector>
+#include <map>
+#include <set>
+#include <EABase/eabase.h> //char8_t, etc.
+#include <EASTL/string.h>
+#include <EASTL/vector.h>
+#include "foundation/StrConvertUTF.h"
+#include "foundation/Qt3DSDiscriminatedUnion.h"
+
+#include <QObject>
+
+namespace qt3dsdm {
+
+typedef const wchar_t *TCharPtr;
+struct Qt3DSDMStr : public eastl::basic_string<qt3ds::foundation::TWCharEASTLConverter::TCharType>
+{
+ typedef qt3ds::foundation::TWCharEASTLConverter::TCharType TCharType;
+ typedef eastl::basic_string<qt3ds::foundation::TWCharEASTLConverter::TCharType> TStrType;
+ Qt3DSDMStr() {}
+ Qt3DSDMStr(const wchar_t *inStr)
+ : TStrType(qt3ds::NVUnionCast<const TCharType *>(inStr))
+ {
+ }
+ Qt3DSDMStr(const TStrType &inOther)
+ : TStrType(inOther)
+ {
+ }
+
+ const wchar_t *wide_str() const { return reinterpret_cast<const wchar_t *>(c_str()); }
+ bool operator==(const Qt3DSDMStr &inOther) const { return TStrType::compare(inOther) == 0; }
+ bool operator!=(const Qt3DSDMStr &inOther) const { return TStrType::compare(inOther) != 0; }
+ bool operator==(const wchar_t *inOther) const
+ {
+ return TStrType::compare(reinterpret_cast<const TCharType *>(inOther)) == 0;
+ }
+ bool operator!=(const wchar_t *inOther) const
+ {
+ return TStrType::compare(reinterpret_cast<const TCharType *>(inOther)) != 0;
+ }
+
+ TStrType::size_type find_first_of(const wchar_t *p, size_type position = 0) const
+ {
+ return TStrType::find_first_of(reinterpret_cast<const TCharType *>(p), position);
+ }
+ TStrType::size_type find_first_not_of(const wchar_t *p, size_type position = 0) const
+ {
+ return TStrType::find_first_not_of(reinterpret_cast<const TCharType *>(p), position);
+ }
+ TStrType::size_type find_last_not_of(const wchar_t *p,
+ size_type position = TStrType::npos) const
+ {
+ return TStrType::find_last_not_of(reinterpret_cast<const TCharType *>(p), position);
+ }
+ TStrType::size_type find(const wchar_t *p, size_type position = 0) const
+ {
+ return TStrType::find(reinterpret_cast<const TCharType *>(p), position);
+ }
+ TStrType::size_type find(wchar_t p, size_type position = 0) const
+ {
+ return TStrType::find(static_cast<TCharType>(p), position);
+ }
+ TStrType::size_type rfind(const wchar_t *p, size_type position = TStrType::npos) const
+ {
+ return TStrType::rfind(reinterpret_cast<const TCharType *>(p), position);
+ }
+ TStrType::size_type rfind(wchar_t p, size_type position = TStrType::npos) const
+ {
+ return TStrType::rfind(p, position);
+ }
+ Qt3DSDMStr replace(size_type position, size_type length, const wchar_t *inNewStr)
+ {
+ return TStrType::replace(position, length, reinterpret_cast<const TCharType *>(inNewStr));
+ }
+
+ void append(const wchar_t *p) { TStrType::append(reinterpret_cast<const TCharType *>(p)); }
+ void append(const wchar_t *p, size_type position, size_type n)
+ {
+ TStrType::append(reinterpret_cast<const TCharType *>(p), position, n);
+ }
+ void append(const Qt3DSDMStr &p) { TStrType::append(p); }
+ void assign(const wchar_t *p) { TStrType::assign(reinterpret_cast<const TCharType *>(p)); }
+ void assign(const Qt3DSDMStr &p) { TStrType::assign(p); }
+};
+typedef Qt3DSDMStr TCharStr;
+typedef std::vector<wchar_t> TCharList;
+typedef eastl::vector<TCharStr> TCharStrList;
+typedef std::map<TCharStr, int> TCharStrIntMap;
+typedef std::map<int, TCharStr> TIntTCharStrMap;
+typedef std::vector<int> TIntList;
+typedef std::set<int> TIntSet;
+typedef eastl::vector<float> TFloatList;
+
+template <typename TDataType>
+class CImmutableVector : private std::vector<TDataType>
+{
+public:
+ typedef std::vector<TDataType> base;
+
+ CImmutableVector(const std::vector<TDataType> &inSrc)
+ : base(inSrc)
+ {
+ }
+ CImmutableVector(const CImmutableVector &inSrc)
+ : base(inSrc)
+ {
+ }
+
+ CImmutableVector &operator=(const CImmutableVector &inSrc)
+ {
+ base::operator=(inSrc);
+ return *this;
+ }
+
+ typename std::vector<TDataType>::const_iterator begin() const { return base::begin(); }
+ typename std::vector<TDataType>::const_iterator end() const { return base::end(); }
+
+ size_t size() const { return base::size(); }
+
+ const TDataType &at(int inIndex) const { return base::at(inIndex); }
+ const TDataType &operator[](int inIndex) const { return base::at(inIndex); }
+};
+
+typedef CImmutableVector<TCharStr> TImmutableCharStrList;
+typedef std::shared_ptr<TImmutableCharStrList> TImmutableCharStrListPtr;
+
+class CDataStr
+{
+ TCharList m_Data;
+
+public:
+ CDataStr() {}
+ CDataStr(TCharList &inData) { m_Data.swap(inData); }
+ CDataStr(const wchar_t *inData)
+ {
+ if (inData && *inData)
+ m_Data.insert(m_Data.begin(), inData, inData + wcslen(inData));
+ m_Data.push_back(0);
+ }
+ CDataStr(const wchar_t *inData, size_t inLen)
+ {
+ if (inData && *inData)
+ m_Data.insert(m_Data.begin(), inData, inData + inLen);
+ if (m_Data.size() > 0 && m_Data.back() != 0)
+ m_Data.push_back(0);
+ }
+ CDataStr(const CDataStr &inOther)
+ : m_Data(inOther.m_Data)
+ {
+ }
+ virtual ~CDataStr() {}
+
+ CDataStr &operator=(const CDataStr &inOther)
+ {
+ m_Data = inOther.m_Data;
+ return *this;
+ }
+ const wchar_t *GetData() const { return m_Data.size() <= 1 ? L"" : &(*m_Data.begin()); }
+ size_t GetLength() const { return m_Data.size() > 1 ? m_Data.size() - 1 : 0; }
+ bool operator==(const CDataStr &inOther) const { return m_Data == inOther.m_Data; }
+ QString toQString() const { return QString::fromWCharArray(GetData()); }
+};
+
+typedef std::shared_ptr<CDataStr> TDataStrPtr;
+
+struct SFloat2
+{
+ float m_Floats[2];
+ SFloat2(float f1 = 0, float f2 = 0)
+ {
+ m_Floats[0] = f1;
+ m_Floats[1] = f2;
+ }
+ SFloat2(const SFloat2 &inOther) { operator=(inOther); }
+ SFloat2 &operator=(const SFloat2 &inOther)
+ {
+ m_Floats[0] = inOther.m_Floats[0];
+ m_Floats[1] = inOther.m_Floats[1];
+ return *this;
+ }
+ bool operator==(const SFloat2 &other) const
+ {
+ return m_Floats[0] == other.m_Floats[0] && m_Floats[1] == other.m_Floats[1];
+ }
+ float &operator[](size_t inIndex)
+ {
+ switch (inIndex) {
+ default:
+ throw std::out_of_range("");
+ case 0:
+ case 1:
+ return m_Floats[inIndex];
+ }
+ }
+ const float &operator[](size_t inIndex) const
+ {
+ switch (inIndex) {
+ default:
+ throw std::out_of_range("");
+ case 0:
+ case 1:
+ return m_Floats[inIndex];
+ }
+ }
+};
+
+struct SFloat3
+{
+ float m_Floats[3];
+
+ SFloat3(float f1 = 0, float f2 = 0, float f3 = 0)
+ {
+ m_Floats[0] = f1;
+ m_Floats[1] = f2;
+ m_Floats[2] = f3;
+ }
+ SFloat3(const SFloat3 &inOther) { operator=(inOther); }
+ SFloat3 &operator=(const SFloat3 &inOther)
+ {
+ m_Floats[0] = inOther.m_Floats[0];
+ m_Floats[1] = inOther.m_Floats[1];
+ m_Floats[2] = inOther.m_Floats[2];
+ return *this;
+ }
+
+ bool operator==(const SFloat3 &other) const
+ {
+ return m_Floats[0] == other.m_Floats[0] && m_Floats[1] == other.m_Floats[1]
+ && m_Floats[2] == other.m_Floats[2];
+ }
+
+ float &operator[](size_t inIndex)
+ {
+ switch (inIndex) {
+ default:
+ throw std::out_of_range("");
+ case 0:
+ case 1:
+ case 2:
+ return m_Floats[inIndex];
+ }
+ }
+ const float &operator[](size_t inIndex) const
+ {
+ switch (inIndex) {
+ default:
+ throw std::out_of_range("");
+ case 0:
+ case 1:
+ case 2:
+ return m_Floats[inIndex];
+ }
+ }
+};
+
+struct SFloat4
+{
+ float m_Floats[4];
+
+ SFloat4(float f1 = 0, float f2 = 0, float f3 = 0, float f4 = 1)
+ {
+ m_Floats[0] = f1;
+ m_Floats[1] = f2;
+ m_Floats[2] = f3;
+ m_Floats[3] = f4;
+ }
+ SFloat4(const SFloat4 &inOther) { operator=(inOther); }
+ SFloat4 &operator=(const SFloat4 &inOther)
+ {
+ m_Floats[0] = inOther.m_Floats[0];
+ m_Floats[1] = inOther.m_Floats[1];
+ m_Floats[2] = inOther.m_Floats[2];
+ m_Floats[3] = inOther.m_Floats[3];
+ return *this;
+ }
+
+ bool operator==(const SFloat4 &other) const
+ {
+ return m_Floats[0] == other.m_Floats[0] && m_Floats[1] == other.m_Floats[1]
+ && m_Floats[2] == other.m_Floats[2] && m_Floats[3] == other.m_Floats[3];
+ }
+
+ float &operator[](size_t inIndex)
+ {
+ if (inIndex < 4)
+ return m_Floats[inIndex];
+
+ throw std::out_of_range("");
+ }
+ const float &operator[](size_t inIndex) const
+ {
+ if (inIndex < 4)
+ return m_Floats[inIndex];
+
+ throw std::out_of_range("");
+ }
+};
+
+struct SLong4
+{
+ qt3ds::QT3DSU32 m_Longs[4];
+
+ SLong4(qt3ds::QT3DSU32 l1 = 0,
+ qt3ds::QT3DSU32 l2 = 0,
+ qt3ds::QT3DSU32 l3 = 0,
+ qt3ds::QT3DSU32 l4 = 0)
+ {
+ m_Longs[0] = l1;
+ m_Longs[1] = l2;
+ m_Longs[2] = l3;
+ m_Longs[3] = l4;
+ }
+ SLong4(const SLong4 &inOther) { operator=(inOther); }
+ SLong4 &operator=(const SLong4 &inOther)
+ {
+ m_Longs[0] = inOther.m_Longs[0];
+ m_Longs[1] = inOther.m_Longs[1];
+ m_Longs[2] = inOther.m_Longs[2];
+ m_Longs[3] = inOther.m_Longs[3];
+ return *this;
+ }
+
+ bool operator==(const SLong4 &other) const
+ {
+ return m_Longs[0] == other.m_Longs[0] && m_Longs[1] == other.m_Longs[1]
+ && m_Longs[2] == other.m_Longs[2] && m_Longs[3] == other.m_Longs[3];
+ }
+
+ bool operator<(const SLong4 &other) const
+ {
+ if (m_Longs[0] < other.m_Longs[0])
+ return true;
+ else if (m_Longs[0] == other.m_Longs[0]) {
+ if (m_Longs[1] < other.m_Longs[1])
+ return true;
+ else if (m_Longs[1] == other.m_Longs[1]) {
+ if (m_Longs[2] < other.m_Longs[2])
+ return true;
+ else if (m_Longs[3] < other.m_Longs[3])
+ return true;
+ }
+ }
+ return false;
+ }
+
+ bool Valid() const
+ {
+ bool retval = false;
+ for (int idx = 0; idx < 4; ++idx)
+ retval = retval || m_Longs[0] > 0;
+ return retval;
+ }
+};
+
+typedef std::vector<SLong4> TLong4Vec;
+
+struct SSizet4
+{
+ size_t m_Longs[4];
+
+ SSizet4(size_t l1 = 0, size_t l2 = 0, size_t l3 = 0, size_t l4 = 0)
+ {
+ m_Longs[0] = l1;
+ m_Longs[1] = l2;
+ m_Longs[2] = l3;
+ m_Longs[3] = l4;
+ }
+ SSizet4(const SSizet4 &inOther) { operator=(inOther); }
+ SSizet4 &operator=(const SSizet4 &inOther)
+ {
+ m_Longs[0] = inOther.m_Longs[0];
+ m_Longs[1] = inOther.m_Longs[1];
+ m_Longs[2] = inOther.m_Longs[2];
+ m_Longs[3] = inOther.m_Longs[3];
+ return *this;
+ }
+
+ bool operator==(const SSizet4 &other) const
+ {
+ return m_Longs[0] == other.m_Longs[0] && m_Longs[1] == other.m_Longs[1]
+ && m_Longs[2] == other.m_Longs[2] && m_Longs[3] == other.m_Longs[3];
+ }
+
+ bool operator<(const SSizet4 &other) const
+ {
+ if (m_Longs[0] < other.m_Longs[0])
+ return true;
+ else if (m_Longs[0] == other.m_Longs[0]) {
+ if (m_Longs[1] < other.m_Longs[1])
+ return true;
+ else if (m_Longs[1] == other.m_Longs[1]) {
+ if (m_Longs[2] < other.m_Longs[2])
+ return true;
+ else if (m_Longs[3] < other.m_Longs[3])
+ return true;
+ }
+ }
+ return false;
+ }
+
+ bool Valid() const
+ {
+ bool retval = false;
+ for (int idx = 0; idx < 4; ++idx)
+ retval = retval || m_Longs[0] > 0;
+ return retval;
+ }
+};
+
+inline bool IsTrivial(const wchar_t *inStr)
+{
+ return inStr == NULL || *inStr == 0;
+}
+inline const wchar_t *NonNull(const wchar_t *inStr)
+{
+ return inStr ? inStr : L"";
+}
+inline bool AreEqual(const wchar_t *lhs, const wchar_t *rhs)
+{
+ return wcscmp(NonNull(lhs), NonNull(rhs)) == 0;
+}
+
+inline bool IsTrivial(const char8_t *inStr)
+{
+ return inStr == NULL || *inStr == 0;
+}
+inline const char8_t *NonNull(const char8_t *inStr)
+{
+ return inStr ? inStr : "";
+}
+inline bool AreEqual(const char8_t *lhs, const char8_t *rhs)
+{
+ return strcmp(NonNull(lhs), NonNull(rhs)) == 0;
+}
+
+inline bool AreEqualCaseless(const char8_t *lhs, const char8_t *rhs)
+{
+ if (IsTrivial(lhs) && IsTrivial(rhs))
+ return true;
+ if (IsTrivial(lhs) || IsTrivial(rhs))
+ return false;
+ for (; *lhs && *rhs; ++lhs, ++rhs)
+ if (tolower(*lhs) != tolower(*rhs))
+ return false;
+ if (*lhs || *rhs)
+ return false;
+ return true;
+}
+
+struct SStringRef
+{
+ const wchar_t *m_Id;
+
+ SStringRef(const wchar_t *id = L"")
+ : m_Id(NonNull(id))
+ {
+ }
+
+ operator const wchar_t *() const { return m_Id; }
+ bool operator==(const SStringRef &inOther) const { return AreEqual(m_Id, inOther.m_Id); }
+};
+}
+
+// Traits specializations have to be in the same namespace as they were first declared.
+namespace qt3ds {
+namespace foundation {
+
+ template <>
+ struct DestructTraits<qt3dsdm::SFloat2>
+ {
+ void destruct(qt3dsdm::SFloat2 &) {}
+ };
+ template <>
+ struct DestructTraits<qt3dsdm::SFloat3>
+ {
+ void destruct(qt3dsdm::SFloat3 &) {}
+ };
+ template <>
+ struct DestructTraits<qt3dsdm::SFloat4>
+ {
+ void destruct(qt3dsdm::SFloat4 &) {}
+ };
+ template <>
+ struct DestructTraits<qt3dsdm::SLong4>
+ {
+ void destruct(qt3dsdm::SLong4 &) {}
+ };
+ template <>
+ struct DestructTraits<qt3dsdm::SStringRef>
+ {
+ void destruct(qt3dsdm::SStringRef &) {}
+ };
+
+ template <>
+ struct EqualVisitorTraits<qt3dsdm::TDataStrPtr>
+ {
+ bool operator()(const qt3dsdm::TDataStrPtr &lhs, const qt3dsdm::TDataStrPtr &rhs)
+ {
+ if (lhs && rhs)
+ return *lhs == *rhs;
+ if (lhs || rhs)
+ return false;
+ return true;
+ }
+ };
+}
+}
+
+namespace qt3dsdm {
+
+using qt3ds::NVUnionCast;
+
+struct ObjectReferenceType
+{
+ enum Enum {
+ Unknown = 0,
+ Absolute = 1,
+ Relative = 2,
+ };
+};
+
+template <typename TDataType>
+struct SObjectRefTypeTraits
+{
+};
+
+template <>
+struct SObjectRefTypeTraits<SLong4>
+{
+ ObjectReferenceType::Enum getType() { return ObjectReferenceType::Absolute; }
+};
+template <>
+struct SObjectRefTypeTraits<TDataStrPtr>
+{
+ ObjectReferenceType::Enum getType() { return ObjectReferenceType::Relative; }
+};
+
+struct SObjectRefUnionTraits
+{
+ typedef ObjectReferenceType::Enum TIdType;
+ enum {
+ TBufferSize = sizeof(SSizet4),
+ };
+
+ static ObjectReferenceType::Enum getNoDataId() { return ObjectReferenceType::Unknown; }
+
+ template <typename TDataType>
+ static TIdType getType()
+ {
+ return SObjectRefTypeTraits<TDataType>().getType();
+ }
+
+ template <typename TRetType, typename TVisitorType>
+ static TRetType visit(char *inData, TIdType inType, TVisitorType inVisitor)
+ {
+ switch (inType) {
+ case ObjectReferenceType::Absolute:
+ return inVisitor(*NVUnionCast<SLong4 *>(inData));
+ case ObjectReferenceType::Relative:
+ return inVisitor(*NVUnionCast<TDataStrPtr *>(inData));
+ default:
+ QT3DS_ASSERT(false);
+ case ObjectReferenceType::Unknown:
+ return inVisitor();
+ }
+ }
+
+ template <typename TRetType, typename TVisitorType>
+ static TRetType visit(const char *inData, TIdType inType, TVisitorType inVisitor)
+ {
+ switch (inType) {
+ case ObjectReferenceType::Absolute:
+ return inVisitor(*NVUnionCast<const SLong4 *>(inData));
+ case ObjectReferenceType::Relative:
+ return inVisitor(*NVUnionCast<const TDataStrPtr *>(inData));
+ default:
+ QT3DS_ASSERT(false);
+ case ObjectReferenceType::Unknown:
+ return inVisitor();
+ }
+ }
+};
+
+typedef qt3ds::foundation::
+ DiscriminatedUnion<qt3ds::foundation::
+ DiscriminatedUnionGenericBase<SObjectRefUnionTraits,
+ SObjectRefUnionTraits::TBufferSize>,
+ SObjectRefUnionTraits::TBufferSize>
+ TObjRefUnionType;
+
+template <typename TDataType>
+struct Qt3DSDMGetter
+{
+};
+
+template <typename TRetType, typename TDataType>
+TRetType get(const TDataType &inType)
+{
+ return Qt3DSDMGetter<TDataType>().template doGet<TRetType>(inType);
+}
+
+template <>
+struct Qt3DSDMGetter<TObjRefUnionType>
+{
+ template <typename TRetType>
+ TRetType doGet(const TObjRefUnionType &inValue)
+ {
+ return inValue.getData<TRetType>();
+ }
+};
+
+// Either an absolute reference (SLong4) or a relative reference (string)
+struct SObjectRefType
+{
+ TObjRefUnionType m_Value;
+
+ SObjectRefType(const TDataStrPtr &inValue)
+ : m_Value(inValue)
+ {
+ }
+ SObjectRefType(const SLong4 &inValue)
+ : m_Value(inValue)
+ {
+ }
+ SObjectRefType(const SObjectRefType &inOther)
+ : m_Value(inOther.m_Value)
+ {
+ }
+ SObjectRefType() {}
+ SObjectRefType &operator=(const SObjectRefType &inOther)
+ {
+ m_Value = inOther.m_Value;
+ return *this;
+ }
+ ObjectReferenceType::Enum GetReferenceType() const { return m_Value.getType(); }
+ bool operator==(const SObjectRefType &inOther) const { return m_Value == inOther.m_Value; }
+};
+
+inline bool Equals(const SObjectRefType &lhs, const SObjectRefType &rhs)
+{
+ return lhs == rhs;
+}
+
+struct SStringOrIntTypes
+{
+ enum Enum {
+ Unknown = 0,
+ Int,
+ String,
+ };
+};
+
+template <typename TDataType>
+struct SStringOrIntTypeTraits
+{
+};
+
+template <>
+struct SStringOrIntTypeTraits<long>
+{
+ SStringOrIntTypes::Enum getType() { return SStringOrIntTypes::Int; }
+};
+template <>
+struct SStringOrIntTypeTraits<int>
+{
+ SStringOrIntTypes::Enum getType() { return SStringOrIntTypes::Int; }
+};
+template <>
+struct SStringOrIntTypeTraits<TDataStrPtr>
+{
+ SStringOrIntTypes::Enum getType() { return SStringOrIntTypes::String; }
+};
+
+struct SStringOrIntUnionTraits
+{
+ typedef SStringOrIntTypes::Enum TIdType;
+ enum {
+ TBufferSize = sizeof(TDataStrPtr),
+ };
+
+ static SStringOrIntTypes::Enum getNoDataId() { return SStringOrIntTypes::Unknown; }
+
+ template <typename TDataType>
+ static TIdType getType()
+ {
+ return SStringOrIntTypeTraits<TDataType>().getType();
+ }
+
+ template <typename TRetType, typename TVisitorType>
+ static TRetType visit(char *inData, TIdType inType, TVisitorType inVisitor)
+ {
+ switch (inType) {
+ case SStringOrIntTypes::Int:
+ return inVisitor(*NVUnionCast<long *>(inData));
+ case SStringOrIntTypes::String:
+ return inVisitor(*NVUnionCast<TDataStrPtr *>(inData));
+ default:
+ QT3DS_ASSERT(false);
+ case SStringOrIntTypes::Unknown:
+ return inVisitor();
+ }
+ }
+
+ template <typename TRetType, typename TVisitorType>
+ static TRetType visit(const char *inData, TIdType inType, TVisitorType inVisitor)
+ {
+ switch (inType) {
+ case SStringOrIntTypes::Int:
+ return inVisitor(*NVUnionCast<const qt3ds::QT3DSI32 *>(inData));
+ case SStringOrIntTypes::String:
+ return inVisitor(*NVUnionCast<const TDataStrPtr *>(inData));
+ default:
+ QT3DS_ASSERT(false);
+ case SStringOrIntTypes::Unknown:
+ return inVisitor();
+ }
+ }
+};
+
+typedef qt3ds::foundation::
+ DiscriminatedUnion<qt3ds::foundation::
+ DiscriminatedUnionGenericBase<SStringOrIntUnionTraits,
+ SStringOrIntUnionTraits::TBufferSize>,
+ SStringOrIntUnionTraits::TBufferSize>
+ TStringOrIntUnionType;
+
+template <>
+struct Qt3DSDMGetter<TStringOrIntUnionType>
+{
+ template <typename TRetType>
+ TRetType doGet(const TStringOrIntUnionType &inValue)
+ {
+ return inValue.getData<TRetType>();
+ }
+};
+
+struct SStringOrInt
+{
+ TStringOrIntUnionType m_Value;
+
+ SStringOrInt() {}
+ SStringOrInt(int inValue)
+ : m_Value(inValue)
+ {
+ }
+ SStringOrInt(TDataStrPtr inValue)
+ : m_Value(inValue)
+ {
+ }
+ SStringOrInt(const SStringOrInt &inOther)
+ : m_Value(inOther.m_Value)
+ {
+ }
+
+ SStringOrInt &operator=(const SStringOrInt &inOther)
+ {
+ m_Value = inOther.m_Value;
+ return *this;
+ }
+
+ SStringOrIntTypes::Enum GetType() const { return m_Value.getType(); }
+
+ bool operator==(const SStringOrInt &inOther) const { return m_Value == inOther.m_Value; }
+};
+
+inline bool Equals(const SStringOrInt &lhs, const SStringOrInt &rhs)
+{
+ return lhs == rhs;
+}
+
+//comes from broken X.h
+#ifdef None
+#undef None
+#endif
+
+#ifdef Bool
+#undef Bool
+#endif
+
+struct DataModelDataType {
+
+ enum Value {
+ None,
+ Float,
+ Float2,
+ Float3,
+ Float4,
+ Long,
+ String,
+ Bool,
+ Long4,
+ StringRef,
+ ObjectRef,
+ StringOrInt,
+ FloatList,
+ RangedNumber // datainput-specific type for editor only
+ };
+
+
+ Q_ENUM(Value)
+ Q_GADGET
+};
+
+
+class IStringTable;
+
+template <typename TDataType>
+struct Qt3DSDMValueTyper
+{
+};
+
+template <typename TDataType>
+inline DataModelDataType::Value GetValueType(const TDataType &inValue)
+{
+ return Qt3DSDMValueTyper<TDataType>().Get(inValue);
+}
+
+template <typename TDataType>
+struct SDefaulter
+{
+};
+
+template <typename TDataType>
+inline bool SetDefault(DataModelDataType::Value inDataType, TDataType &outValue)
+{
+ return SDefaulter<TDataType>().SetDefault(inDataType, outValue);
+}
+
+typedef void (*Qt3DSDMDebugLogFunction)(const char *message);
+// UICDMSimpleDataCore.cpp
+extern Qt3DSDMDebugLogFunction g_DataModelDebugLogger;
+
+#define QT3DSDM_DEBUG_LOG(msg) \
+ { \
+ if (g_DataModelDebugLogger) { \
+ g_DataModelDebugLogger(msg); \
+ } \
+ }
+struct Qt3DSDMLogScope
+{
+ const char *m_EndMessage;
+ Qt3DSDMLogScope(const char *inStartMessage, const char *inEndMessage)
+ : m_EndMessage(inEndMessage)
+ {
+ QT3DSDM_DEBUG_LOG(inStartMessage);
+ }
+ ~Qt3DSDMLogScope() { QT3DSDM_DEBUG_LOG(m_EndMessage); }
+};
+
+#define QT3DSDM_LOG_FUNCTION(fnname) Qt3DSDMLogScope __fn_scope(fnname " Enter", fnname " Leave");
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMErrors.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMErrors.h
new file mode 100644
index 00000000..77ea7bf7
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMErrors.h
@@ -0,0 +1,308 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_ERRORS_H
+#define QT3DSDM_ERRORS_H
+#include "Qt3DSDMWindowsCompatibility.h"
+
+namespace qt3dsdm {
+class Qt3DSDMError : public std::exception
+{
+public:
+ Qt3DSDMError(const wchar_t *inMessage)
+ : std::exception()
+ {
+ wcscpy_s(m_Message, inMessage);
+ }
+ wchar_t m_Message[1024];
+};
+
+class HandleExists : public Qt3DSDMError
+{
+public:
+ HandleExists(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class PropertyNotFound : public Qt3DSDMError
+{
+public:
+ PropertyNotFound(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class PropertyExists : public Qt3DSDMError
+{
+public:
+ PropertyExists(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class DuplicateInstanceName : public Qt3DSDMError
+{
+public:
+ DuplicateInstanceName(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class InstanceNotFound : public Qt3DSDMError
+{
+public:
+ InstanceNotFound(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class ValueTypeError : public Qt3DSDMError
+{
+public:
+ ValueTypeError(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class SerializationError : public Qt3DSDMError
+{
+public:
+ SerializationError(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class SlideNotFound : public Qt3DSDMError
+{
+public:
+ SlideNotFound(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class SlideExists : public Qt3DSDMError
+{
+public:
+ SlideExists(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class SlideDerivationError : public Qt3DSDMError
+{
+public:
+ SlideDerivationError(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class SlideChildNotFoundError : public Qt3DSDMError
+{
+public:
+ SlideChildNotFoundError(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class SlideGraphNotFound : public Qt3DSDMError
+{
+public:
+ SlideGraphNotFound(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class SlideGraphExists : public Qt3DSDMError
+{
+public:
+ SlideGraphExists(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class PropertyLinkError : public Qt3DSDMError
+{
+public:
+ PropertyLinkError(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class RearrangeSlideArgumentsMustNotBeZero : public Qt3DSDMError
+{
+public:
+ RearrangeSlideArgumentsMustNotBeZero(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class AnimationNotFound : public Qt3DSDMError
+{
+public:
+ AnimationNotFound(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class AnimationExists : public Qt3DSDMError
+{
+public:
+ AnimationExists(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class AnimationKeyframeTypeError : public Qt3DSDMError
+{
+public:
+ AnimationKeyframeTypeError(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class AnimationKeyframeNotFound : public Qt3DSDMError
+{
+public:
+ AnimationKeyframeNotFound(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class AnimationEvaluationError : public Qt3DSDMError
+{
+public:
+ AnimationEvaluationError(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class ActionNotFound : public Qt3DSDMError
+{
+public:
+ ActionNotFound(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class ActionExists : public Qt3DSDMError
+{
+public:
+ ActionExists(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class HandlerArgumentNotFound : public Qt3DSDMError
+{
+public:
+ HandlerArgumentNotFound(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class HandlerArgumentExists : public Qt3DSDMError
+{
+public:
+ HandlerArgumentExists(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class CustomPropertyNotFound : public Qt3DSDMError
+{
+public:
+ CustomPropertyNotFound(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class CustomEventNotFound : public Qt3DSDMError
+{
+public:
+ CustomEventNotFound(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class CustomHandlerNotFound : public Qt3DSDMError
+{
+public:
+ CustomHandlerNotFound(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class CustomHandlerParamNotFound : public Qt3DSDMError
+{
+public:
+ CustomHandlerParamNotFound(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+
+class AttributeTypeNotFound : public Qt3DSDMError
+{
+public:
+ AttributeTypeNotFound(const wchar_t *inMessage)
+ : Qt3DSDMError(inMessage)
+ {
+ }
+};
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMGuides.cpp b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMGuides.cpp
new file mode 100644
index 00000000..e8ea421f
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMGuides.cpp
@@ -0,0 +1,222 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "Qt3DSDMGuides.h"
+#include <unordered_map>
+#include "VectorTransactions.h"
+
+using namespace qt3dsdm;
+
+namespace {
+
+#define CONNECT(x) std::make_shared<qt3dsdm::QtSignalConnection>(QObject::connect(this, x, inCallback))
+
+class SGuideSystem : public QObject, public IGuideSystem
+{
+ Q_OBJECT
+public:
+ typedef std::unordered_map<long, SGuideInfo> TGuideMap;
+ typedef std::shared_ptr<IMergeableTransaction<SGuideInfo>> TMergeableTransaction;
+ typedef std::unordered_map<long, TMergeableTransaction> TGuideInfoMergeMap;
+
+ long m_NextHandleValue;
+ TGuideMap m_Guides;
+ bool m_GuidesEditable;
+
+ std::shared_ptr<ITransactionConsumer> m_CurrentTransaction;
+ TGuideInfoMergeMap m_GuideMergeMap;
+Q_SIGNALS:
+ void guideCreated(Qt3DSDMGuideHandle, SGuideInfo);
+ void guideDestroyed(Qt3DSDMGuideHandle, SGuideInfo);
+ void guideModified(Qt3DSDMGuideHandle, SGuideInfo);
+ void guideModifiedImmediate(Qt3DSDMGuideHandle, SGuideInfo);
+public:
+ SGuideSystem()
+ : m_NextHandleValue(0)
+ , m_GuidesEditable(true)
+ {
+ }
+
+ void SignalGuideCreated(long hdl, const SGuideInfo &inInfo) { Q_EMIT guideCreated(hdl, inInfo); }
+
+ void SignalGuideDestroyed(long hdl, const SGuideInfo &inInfo) { Q_EMIT guideDestroyed(hdl, inInfo); }
+
+ void SignalGuideModified(long hdl, const SGuideInfo &inInfo) { Q_EMIT guideModified(hdl, inInfo); }
+
+ Qt3DSDMGuideHandle CreateGuide() override
+ {
+ ++m_NextHandleValue;
+ std::pair<long, SGuideInfo> entry(std::make_pair(m_NextHandleValue, SGuideInfo()));
+ m_Guides.insert(entry);
+ if (m_CurrentTransaction) {
+ CreateHashMapInsertTransaction(__FILE__, __LINE__, m_CurrentTransaction, entry,
+ m_Guides);
+ m_CurrentTransaction->OnDoNotification(std::bind(
+ &SGuideSystem::SignalGuideCreated, this, m_NextHandleValue, SGuideInfo()));
+ m_CurrentTransaction->OnUndoNotification(std::bind(
+ &SGuideSystem::SignalGuideDestroyed, this, m_NextHandleValue, SGuideInfo()));
+ }
+
+ return m_NextHandleValue;
+ }
+
+ SGuideInfo *InternalGetGuideInfo(Qt3DSDMGuideHandle inGuideHandle)
+ {
+ TGuideMap::iterator theFind = m_Guides.find((long)inGuideHandle.GetHandleValue());
+ if (theFind != m_Guides.end())
+ return &theFind->second;
+ return NULL;
+ }
+
+ const SGuideInfo *InternalGetGuideInfo(Qt3DSDMGuideHandle inGuideHandle) const
+ {
+ return const_cast<SGuideSystem &>(*this).InternalGetGuideInfo(inGuideHandle);
+ }
+
+ void SetGuideInfo(Qt3DSDMGuideHandle inGuideHandle, const SGuideInfo &info) override
+ {
+ SGuideInfo *existing = InternalGetGuideInfo(inGuideHandle);
+ long theHdlValue = (long)inGuideHandle.GetHandleValue();
+ TGuideInfoMergeMap::iterator iter = m_GuideMergeMap.find(theHdlValue);
+ if (iter != m_GuideMergeMap.end()) {
+ iter->second->Update(info);
+ *existing = info;
+ } else {
+ if (!existing) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ SGuideInfo oldValue(*existing);
+ *existing = info;
+ if (m_CurrentTransaction) {
+ TMergeableTransaction newTransaction =
+ CreateHashMapSwapTransaction(__FILE__, __LINE__, m_CurrentTransaction,
+ theHdlValue, oldValue, info, m_Guides);
+ m_GuideMergeMap.insert(std::make_pair(theHdlValue, newTransaction));
+ m_CurrentTransaction->OnDoNotification(
+ std::bind(&SGuideSystem::SignalGuideModified, this, theHdlValue, info));
+ m_CurrentTransaction->OnUndoNotification(
+ std::bind(&SGuideSystem::SignalGuideModified, this, theHdlValue, oldValue));
+ }
+ }
+ if (AreDataModelSignalsEnabled())
+ Q_EMIT guideModifiedImmediate(theHdlValue, info);
+ }
+
+ SGuideInfo GetGuideInfo(Qt3DSDMGuideHandle inGuideHandle) const override
+ {
+ const SGuideInfo *existing = InternalGetGuideInfo(inGuideHandle);
+ if (existing)
+ return *existing;
+ QT3DS_ASSERT(false);
+ return SGuideInfo();
+ }
+
+ void DeleteGuide(Qt3DSDMGuideHandle inGuideHandle) override
+ {
+
+ SGuideInfo *existing = InternalGetGuideInfo(inGuideHandle);
+ if (!existing) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ long theHdlValue = (long)inGuideHandle.GetHandleValue();
+ SGuideInfo oldValue = *existing;
+ m_Guides.erase(theHdlValue);
+
+ if (m_CurrentTransaction) {
+ std::pair<long, SGuideInfo> entry(std::make_pair(theHdlValue, oldValue));
+ CreateHashMapEraseTransaction(__FILE__, __LINE__, m_CurrentTransaction, entry,
+ m_Guides);
+ m_CurrentTransaction->OnDoNotification(
+ std::bind(&SGuideSystem::SignalGuideDestroyed, this, theHdlValue, oldValue));
+ m_CurrentTransaction->OnUndoNotification(
+ std::bind(&SGuideSystem::SignalGuideCreated, this, theHdlValue, oldValue));
+ }
+ }
+
+ TGuideHandleList GetAllGuides() const override
+ {
+ TGuideHandleList retval;
+ for (TGuideMap::const_iterator iter = m_Guides.begin(), end = m_Guides.end(); iter != end;
+ ++iter)
+ retval.push_back(iter->first);
+ return retval;
+ }
+
+ bool IsGuideValid(Qt3DSDMGuideHandle inGuideHandle) const override
+ {
+ return InternalGetGuideInfo(inGuideHandle) != NULL;
+ }
+ bool AreGuidesEditable() const override { return m_GuidesEditable; }
+ void SetGuidesEditable(bool val) override { m_GuidesEditable = val; }
+
+ // Undo/Redo
+ void SetConsumer(std::shared_ptr<ITransactionConsumer> inConsumer) override
+ {
+ m_CurrentTransaction = inConsumer;
+ m_GuideMergeMap.clear();
+ }
+
+ // These are events coming from undo/redo operations, not events coming directly from the
+ // modification of the guides
+ virtual TSignalConnectionPtr
+ ConnectGuideCreated(const std::function<void(Qt3DSDMGuideHandle, SGuideInfo)> &inCallback) override
+ {
+ return CONNECT(&SGuideSystem::guideCreated);
+ }
+
+ virtual TSignalConnectionPtr
+ ConnectGuideDestroyed(const std::function<void(Qt3DSDMGuideHandle, SGuideInfo)> &inCallback) override
+ {
+ return CONNECT(&SGuideSystem::guideDestroyed);
+ }
+
+ virtual TSignalConnectionPtr
+ ConnectGuideModified(const std::function<void(Qt3DSDMGuideHandle, SGuideInfo)> &inCallback) override
+ {
+ return CONNECT(&SGuideSystem::guideModified);
+ }
+
+ // Signal happens immediately instead of on undo/redo, used for live-update of the inspector
+ // palette
+ TSignalConnectionPtr ConnectGuideModifiedImmediate(
+ const std::function<void(Qt3DSDMGuideHandle, SGuideInfo)> &inCallback) override
+ {
+ return CONNECT(&SGuideSystem::guideModifiedImmediate);
+ }
+};
+}
+
+shared_ptr<IGuideSystem> IGuideSystem::CreateGuideSystem()
+{
+ return std::make_shared<SGuideSystem>();
+}
+
+#include "Qt3DSDMGuides.moc"
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMGuides.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMGuides.h
new file mode 100644
index 00000000..0362abff
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMGuides.h
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_GUIDES_H
+#define QT3DSDM_GUIDES_H
+#include "Qt3DSDMDataTypes.h"
+#include "foundation/Qt3DSSimpleTypes.h"
+#include "Qt3DSDMSignals.h"
+#include "Qt3DSDMHandles.h"
+#include "Qt3DSDMTransactions.h"
+#include <functional>
+
+namespace qt3dsdm {
+struct GuideDirections
+{
+ enum Enum {
+ UnknownDirection = 0,
+ Vertical,
+ Horizontal,
+ };
+};
+
+struct SGuideInfo
+{
+ qt3ds::QT3DSF32 m_Position;
+ GuideDirections::Enum m_Direction;
+ qt3ds::QT3DSI32 m_Width;
+ SGuideInfo(qt3ds::QT3DSF32 pos = 0.0f, GuideDirections::Enum dir = GuideDirections::UnknownDirection,
+ qt3ds::QT3DSI32 width = 1)
+ : m_Position(pos)
+ , m_Direction(dir)
+ , m_Width(width)
+ {
+ }
+};
+
+class IGuideSystem : public ITransactionProducer
+{
+protected:
+ virtual ~IGuideSystem() {}
+public:
+ friend class std::shared_ptr<IGuideSystem>;
+
+ virtual Qt3DSDMGuideHandle CreateGuide() = 0;
+ virtual void SetGuideInfo(Qt3DSDMGuideHandle inGuideHandle, const SGuideInfo &info) = 0;
+ virtual SGuideInfo GetGuideInfo(Qt3DSDMGuideHandle inGuideHandle) const = 0;
+ virtual void DeleteGuide(Qt3DSDMGuideHandle inGuideHandle) = 0;
+ virtual TGuideHandleList GetAllGuides() const = 0;
+ virtual bool IsGuideValid(Qt3DSDMGuideHandle inGuideHandle) const = 0;
+ // No real effect on datamodel because you can still create guides when they are locked.
+ // Just used in the UI.
+ virtual bool AreGuidesEditable() const = 0;
+ virtual void SetGuidesEditable(bool val) = 0;
+
+ // Undo/Redo
+ void SetConsumer(std::shared_ptr<ITransactionConsumer> inConsumer) override = 0;
+
+ // These are events coming from undo/redo operations, not events coming directly from the
+ // modification of the guides
+ virtual TSignalConnectionPtr
+ ConnectGuideCreated(const std::function<void(Qt3DSDMGuideHandle, SGuideInfo)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectGuideDestroyed(
+ const std::function<void(Qt3DSDMGuideHandle, SGuideInfo)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectGuideModified(
+ const std::function<void(Qt3DSDMGuideHandle, SGuideInfo)> &inCallback) = 0;
+
+ // Signal happens immediately instead of on undo/redo, used for live-update of the inspector
+ // palette
+ virtual TSignalConnectionPtr ConnectGuideModifiedImmediate(
+ const std::function<void(Qt3DSDMGuideHandle, SGuideInfo)> &inCallback) = 0;
+
+ static std::shared_ptr<IGuideSystem> CreateGuideSystem();
+};
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMHandles.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMHandles.h
new file mode 100644
index 00000000..05867a14
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMHandles.h
@@ -0,0 +1,459 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_HANDLES_H
+#define QT3DSDM_HANDLES_H
+
+#include <QMetaType>
+
+namespace qt3dsdm {
+
+class IDataCore;
+
+class CDataModelHandle
+{
+ int m_Handle;
+
+public:
+ inline CDataModelHandle(int inHandle = 0);
+ inline CDataModelHandle(const CDataModelHandle &other);
+ virtual ~CDataModelHandle();
+
+ // Operators
+ inline CDataModelHandle &operator=(const CDataModelHandle &other);
+ inline bool operator==(const CDataModelHandle &other) const;
+ inline bool operator<(const CDataModelHandle &other) const;
+ inline operator int() const { return GetHandleValue(); }
+
+ // Use
+ inline bool Valid() const { return m_Handle != 0; }
+ int GetHandleValue() const { return m_Handle; }
+};
+
+inline CDataModelHandle::CDataModelHandle(int inHandle)
+ : m_Handle(inHandle)
+{
+}
+inline CDataModelHandle::CDataModelHandle(const CDataModelHandle &other)
+ : m_Handle(other.m_Handle)
+{
+}
+inline CDataModelHandle::~CDataModelHandle()
+{
+}
+
+inline CDataModelHandle &CDataModelHandle::operator=(const CDataModelHandle &other)
+{
+ if (this != &other) {
+ m_Handle = other.m_Handle;
+ }
+ return *this;
+}
+
+inline bool CDataModelHandle::operator==(const CDataModelHandle &other) const
+{
+ return m_Handle == other.m_Handle;
+}
+
+inline bool CDataModelHandle::operator<(const CDataModelHandle &other) const
+{
+ return m_Handle < other.m_Handle;
+}
+
+class Qt3DSDMInstanceHandle : public CDataModelHandle
+{
+public:
+ Qt3DSDMInstanceHandle(int inHandle = 0)
+ : CDataModelHandle(inHandle)
+ {
+ }
+
+ Qt3DSDMInstanceHandle(const CDataModelHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMInstanceHandle(const Qt3DSDMInstanceHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMInstanceHandle &operator=(const Qt3DSDMInstanceHandle &inOther)
+ {
+ return static_cast<Qt3DSDMInstanceHandle &>(CDataModelHandle::operator=(inOther));
+ }
+
+ inline bool operator==(const Qt3DSDMInstanceHandle &other) const
+ {
+ return CDataModelHandle::operator==(other);
+ }
+};
+
+typedef std::vector<Qt3DSDMInstanceHandle> TInstanceHandleList;
+
+class Qt3DSDMPropertyHandle : public CDataModelHandle
+{
+public:
+ Qt3DSDMPropertyHandle(int inHandle = 0)
+ : CDataModelHandle(inHandle)
+ {
+ }
+
+ Qt3DSDMPropertyHandle(const CDataModelHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMPropertyHandle(const Qt3DSDMInstanceHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMPropertyHandle &operator=(const Qt3DSDMPropertyHandle &inOther)
+ {
+ return static_cast<Qt3DSDMPropertyHandle &>(CDataModelHandle::operator=(inOther));
+ }
+};
+
+typedef std::vector<Qt3DSDMPropertyHandle> TPropertyHandleList;
+
+class Qt3DSDMSlideHandle : public CDataModelHandle
+{
+public:
+ Qt3DSDMSlideHandle(int inHandle = 0)
+ : CDataModelHandle(inHandle)
+ {
+ }
+
+ Qt3DSDMSlideHandle(const CDataModelHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMSlideHandle(const Qt3DSDMSlideHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMSlideHandle &operator=(const Qt3DSDMSlideHandle &inOther)
+ {
+ return static_cast<Qt3DSDMSlideHandle &>(CDataModelHandle::operator=(inOther));
+ }
+};
+
+typedef std::vector<Qt3DSDMSlideHandle> TSlideHandleList;
+
+class Qt3DSDMSlideGraphHandle : public CDataModelHandle
+{
+public:
+ Qt3DSDMSlideGraphHandle(int inHandle = 0)
+ : CDataModelHandle(inHandle)
+ {
+ }
+
+ Qt3DSDMSlideGraphHandle(const CDataModelHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMSlideGraphHandle(const Qt3DSDMSlideGraphHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMSlideGraphHandle &operator=(const Qt3DSDMSlideGraphHandle &inOther)
+ {
+ return static_cast<Qt3DSDMSlideGraphHandle &>(CDataModelHandle::operator=(inOther));
+ }
+};
+
+typedef std::vector<Qt3DSDMSlideGraphHandle> TSlideGraphHandleList;
+
+class Qt3DSDMAnimationHandle : public CDataModelHandle
+{
+public:
+ Qt3DSDMAnimationHandle(int inHandle = 0)
+ : CDataModelHandle(inHandle)
+ {
+ }
+
+ Qt3DSDMAnimationHandle(const CDataModelHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMAnimationHandle(const Qt3DSDMAnimationHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMAnimationHandle &operator=(const Qt3DSDMAnimationHandle &inOther)
+ {
+ return static_cast<Qt3DSDMAnimationHandle &>(CDataModelHandle::operator=(inOther));
+ }
+};
+
+typedef std::vector<Qt3DSDMAnimationHandle> TAnimationHandleList;
+
+class Qt3DSDMKeyframeHandle : public CDataModelHandle
+{
+public:
+ Qt3DSDMKeyframeHandle(int inHandle = 0)
+ : CDataModelHandle(inHandle)
+ {
+ }
+
+ Qt3DSDMKeyframeHandle(const CDataModelHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMKeyframeHandle(const Qt3DSDMKeyframeHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMKeyframeHandle &operator=(const Qt3DSDMKeyframeHandle &inOther)
+ {
+ return static_cast<Qt3DSDMKeyframeHandle &>(CDataModelHandle::operator=(inOther));
+ }
+};
+
+typedef std::vector<Qt3DSDMKeyframeHandle> TKeyframeHandleList;
+
+class Qt3DSDMActionHandle : public CDataModelHandle
+{
+public:
+ Qt3DSDMActionHandle(int inHandle = 0)
+ : CDataModelHandle(inHandle)
+ {
+ }
+
+ Qt3DSDMActionHandle(const CDataModelHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMActionHandle(const Qt3DSDMActionHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMActionHandle &operator=(const Qt3DSDMActionHandle &inOther)
+ {
+ return static_cast<Qt3DSDMActionHandle &>(CDataModelHandle::operator=(inOther));
+ }
+};
+
+typedef std::vector<Qt3DSDMActionHandle> TActionHandleList;
+
+class Qt3DSDMHandlerArgHandle : public CDataModelHandle
+{
+public:
+ Qt3DSDMHandlerArgHandle(int inHandle = 0)
+ : CDataModelHandle(inHandle)
+ {
+ }
+
+ Qt3DSDMHandlerArgHandle(const CDataModelHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMHandlerArgHandle(const Qt3DSDMHandlerArgHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+ Qt3DSDMHandlerArgHandle &operator=(const Qt3DSDMHandlerArgHandle &inOther)
+ {
+ return static_cast<Qt3DSDMHandlerArgHandle &>(CDataModelHandle::operator=(inOther));
+ }
+};
+
+typedef std::vector<Qt3DSDMHandlerArgHandle> THandlerArgHandleList;
+
+class Qt3DSDMEventHandle : public CDataModelHandle
+{
+public:
+ Qt3DSDMEventHandle(int inHandle = 0)
+ : CDataModelHandle(inHandle)
+ {
+ }
+
+ Qt3DSDMEventHandle(const CDataModelHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMEventHandle(const Qt3DSDMEventHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMEventHandle &operator=(const Qt3DSDMEventHandle &inOther)
+ {
+ return static_cast<Qt3DSDMEventHandle &>(CDataModelHandle::operator=(inOther));
+ }
+};
+
+typedef std::vector<Qt3DSDMEventHandle> TEventHandleList;
+
+class Qt3DSDMHandlerHandle : public CDataModelHandle
+{
+public:
+ Qt3DSDMHandlerHandle(int inHandle = 0)
+ : CDataModelHandle(inHandle)
+ {
+ }
+
+ Qt3DSDMHandlerHandle(const CDataModelHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMHandlerHandle(const Qt3DSDMHandlerHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMHandlerHandle &operator=(const Qt3DSDMHandlerHandle &inOther)
+ {
+ return static_cast<Qt3DSDMHandlerHandle &>(CDataModelHandle::operator=(inOther));
+ }
+};
+
+typedef std::vector<Qt3DSDMHandlerHandle> THandlerHandleList;
+
+class Qt3DSDMHandlerParamHandle : public CDataModelHandle
+{
+public:
+ Qt3DSDMHandlerParamHandle(int inHandle = 0)
+ : CDataModelHandle(inHandle)
+ {
+ }
+
+ Qt3DSDMHandlerParamHandle(const CDataModelHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMHandlerParamHandle(const Qt3DSDMHandlerParamHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMHandlerParamHandle &operator=(const Qt3DSDMHandlerParamHandle &inOther)
+ {
+ return static_cast<Qt3DSDMHandlerParamHandle &>(CDataModelHandle::operator=(inOther));
+ }
+};
+
+typedef std::vector<Qt3DSDMHandlerParamHandle> THandlerParamHandleList;
+
+class Qt3DSDMMetaDataPropertyHandle : public CDataModelHandle
+{
+public:
+ Qt3DSDMMetaDataPropertyHandle(int inHandle = 0)
+ : CDataModelHandle(inHandle)
+ {
+ }
+
+ Qt3DSDMMetaDataPropertyHandle(const CDataModelHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMMetaDataPropertyHandle(const Qt3DSDMMetaDataPropertyHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMMetaDataPropertyHandle &operator=(const Qt3DSDMMetaDataPropertyHandle &inOther)
+ {
+ return static_cast<Qt3DSDMMetaDataPropertyHandle &>(CDataModelHandle::operator=(inOther));
+ }
+};
+
+typedef std::vector<Qt3DSDMMetaDataPropertyHandle> TMetaDataPropertyHandleList;
+
+class Qt3DSDMCategoryHandle : public CDataModelHandle
+{
+public:
+ Qt3DSDMCategoryHandle(int inHandle = 0)
+ : CDataModelHandle(inHandle)
+ {
+ }
+
+ Qt3DSDMCategoryHandle(const CDataModelHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMCategoryHandle(const Qt3DSDMCategoryHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+ Qt3DSDMCategoryHandle &operator=(const Qt3DSDMCategoryHandle &inOther)
+ {
+ return static_cast<Qt3DSDMCategoryHandle &>(CDataModelHandle::operator=(inOther));
+ }
+};
+
+typedef std::vector<Qt3DSDMCategoryHandle> TCategoryHandleList;
+
+class Qt3DSDMGuideHandle : public CDataModelHandle
+{
+public:
+ Qt3DSDMGuideHandle(int inHandle = 0)
+ : CDataModelHandle(inHandle)
+ {
+ }
+
+ Qt3DSDMGuideHandle(const CDataModelHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+
+ Qt3DSDMGuideHandle(const Qt3DSDMCategoryHandle &inOther)
+ : CDataModelHandle(inOther)
+ {
+ }
+ Qt3DSDMGuideHandle &operator=(const Qt3DSDMGuideHandle &inOther)
+ {
+ CDataModelHandle::operator=(inOther);
+ return *this;
+ }
+};
+
+typedef std::vector<Qt3DSDMGuideHandle> TGuideHandleList;
+}
+
+Q_DECLARE_METATYPE(qt3dsdm::Qt3DSDMSlideHandle);
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaData.cpp b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaData.cpp
new file mode 100644
index 00000000..66f56ce8
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaData.cpp
@@ -0,0 +1,4170 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#ifdef _WIN32
+#pragma warning(disable : 4103)
+#endif
+#include "Qt3DSDMMetaData.h"
+#include "Qt3DSDMXML.h"
+#include "foundation/Qt3DSAssert.h"
+#include "StandardExtensions.h"
+#include <unordered_map>
+#include <memory>
+#include <unordered_set>
+#include "Qt3DSDMTransactions.h"
+#include "VectorTransactions.h"
+#include "Qt3DSDMSignals.h"
+// Pull in the fancy str-type implementations
+#include "Qt3DSDMWStrOpsImpl.h"
+#include "Qt3DSDMDataCore.h"
+#include "DataCoreProducer.h"
+#include "Qt3DSDMWindowsCompatibility.h"
+#include "Qt3DSRenderEffectSystem.h"
+#include "Qt3DSRenderDynamicObjectSystemCommands.h"
+#include "foundation/StringConversionImpl.h"
+
+#include <QtCore/qdir.h>
+
+using namespace qt3dsdm;
+using std::shared_ptr;
+using std::make_shared;
+using std::static_pointer_cast;
+using std::unordered_map;
+using std::unordered_set;
+using std::function;
+using std::bind;
+using std::ref;
+using std::get;
+using qt3ds::foundation::Empty;
+
+typedef Qt3DSDMInstanceHandle TInstanceHandle;
+typedef Qt3DSDMPropertyHandle TPropertyHandle;
+typedef Qt3DSDMEventHandle TEventHandle;
+typedef Qt3DSDMHandlerHandle THandlerHandle;
+typedef Qt3DSDMHandlerArgHandle THandlerArgHandle;
+typedef Qt3DSDMMetaDataPropertyHandle TMetaDataPropertyHandle;
+typedef Qt3DSDMCategoryHandle TCategoryHandle;
+
+namespace qt3dsdm {
+#define QT3DS_WCHAR_T_None L"None"
+#define QT3DS_WCHAR_T_StringList L"StringList"
+#define QT3DS_WCHAR_T_Range L"Range"
+#define QT3DS_WCHAR_T_Image L"Image"
+#define QT3DS_WCHAR_T_Color L"Color"
+#define QT3DS_WCHAR_T_Rotation L"Rotation"
+#define QT3DS_WCHAR_T_Font L"Font"
+#define QT3DS_WCHAR_T_FontSize L"FontSize"
+#define QT3DS_WCHAR_T_MultiLine L"MultiLine"
+#define QT3DS_WCHAR_T_ObjectRef L"ObjectRef"
+#define QT3DS_WCHAR_T_Mesh L"Mesh"
+#define QT3DS_WCHAR_T_Import L"Import"
+#define QT3DS_WCHAR_T_Texture L"Texture"
+#define QT3DS_WCHAR_T_Image2D L"Image2D"
+#define QT3DS_WCHAR_T_Buffer L"Buffer"
+#define QT3DS_WCHAR_T_Property L"Property"
+#define QT3DS_WCHAR_T_Dependent L"Dependent"
+#define QT3DS_WCHAR_T_Slide L"Slide"
+#define QT3DS_WCHAR_T_Event L"Event"
+#define QT3DS_WCHAR_T_Object L"Object"
+#define QT3DS_WCHAR_T_Signal L"Signal"
+#define QT3DS_WCHAR_T_Renderable L"Renderable"
+#define QT3DS_WCHAR_T_PathBuffer L"PathBuffer"
+#define QT3DS_WCHAR_T_ShadowMapResolution L"ShadowMapResolution"
+#define QT3DS_WCHAR_T_String L"String"
+
+#define ITERATE_ADDITIONAL_META_DATA_TYPES \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(None) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(StringList) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(Range) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(Image) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(Color) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(Rotation) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(Font) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(FontSize) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(MultiLine) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(ObjectRef) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(Mesh) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(Import) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(Texture) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(Renderable) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(PathBuffer) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(ShadowMapResolution) \
+ HANDLE_ADDITIONAL_META_DATA_TYPE(String)
+template <>
+struct WStrOps<AdditionalMetaDataType::Value>
+{
+ QT3DSU32 ToStr(AdditionalMetaDataType::Value item, NVDataRef<wchar_t> buffer)
+ {
+ switch (item) {
+#define HANDLE_ADDITIONAL_META_DATA_TYPE(name) \
+ case AdditionalMetaDataType::name: \
+ wcscpy_s(buffer.begin(), buffer.size(), QT3DS_WCHAR_T_##name); \
+ return 1;
+ ITERATE_ADDITIONAL_META_DATA_TYPES
+ #undef HANDLE_ADDITIONAL_META_DATA_TYPE
+ }
+ return 0;
+ }
+ bool StrTo(const wchar_t *buffer, AdditionalMetaDataType::Value &item)
+ {
+#define HANDLE_ADDITIONAL_META_DATA_TYPE(name) \
+ if (AreEqual(buffer, QT3DS_WCHAR_T_##name)) { \
+ item = AdditionalMetaDataType::name; \
+ return true; \
+ }
+ ITERATE_ADDITIONAL_META_DATA_TYPES
+ #undef HANDLE_ADDITIONAL_META_DATA_TYPE
+ return false;
+ }
+};
+
+#undef ITERATE_ADDITIONAL_META_DATA_TYPES
+
+#define ITERATE_HANDLER_ARG_TYPES \
+ HANDLE_HANDLER_ARG_TYPE(None) \
+ HANDLE_HANDLER_ARG_TYPE(Property) \
+ HANDLE_HANDLER_ARG_TYPE(Dependent) \
+ HANDLE_HANDLER_ARG_TYPE(Slide) \
+ HANDLE_HANDLER_ARG_TYPE(Event) \
+ HANDLE_HANDLER_ARG_TYPE(Object) \
+ HANDLE_HANDLER_ARG_TYPE(Signal)
+
+QT3DSU32 WStrOps<HandlerArgumentType::Value>::ToStr(HandlerArgumentType::Value item, NVDataRef<wchar_t> buffer)
+{
+ switch (item) {
+#define HANDLE_HANDLER_ARG_TYPE(name) \
+ case HandlerArgumentType::name: \
+ wcscpy_s(buffer.begin(), buffer.size(), QT3DS_WCHAR_T_##name); \
+ return 1;
+ ITERATE_HANDLER_ARG_TYPES
+ #undef HANDLE_HANDLER_ARG_TYPE
+ }
+ return 0;
+}
+
+bool WStrOps<HandlerArgumentType::Value>::StrTo(const wchar_t *buffer, HandlerArgumentType::Value &item)
+{
+#define HANDLE_HANDLER_ARG_TYPE(name) \
+ if (AreEqual(buffer, QT3DS_WCHAR_T_##name)) { \
+ item = HandlerArgumentType::name; \
+ return true; \
+}
+ ITERATE_HANDLER_ARG_TYPES
+ #undef HANDLE_HANDLER_ARG_TYPE
+ return false;
+}
+
+#define QT3DS_WCHAR_T_FloatRange L"FloatRange"
+#define QT3DS_WCHAR_T_LongRange L"LongRange"
+#define QT3DS_WCHAR_T_Vector L"Vector"
+#define QT3DS_WCHAR_T_MultiLineString L"MultiLineString"
+#define QT3DS_WCHAR_T_Boolean L"Boolean"
+#define QT3DS_WCHAR_T_Guid L"Guid"
+#define QT3DS_WCHAR_T_StringListOrInt L"StringListOrInt"
+#define QT3DS_WCHAR_T_Scale L"Scale"
+
+#define ITERATE_QT3DSDM_COMPLETE_TYPES \
+ HANDLE_QT3DSDM_COMPLETE_NONE_TYPE \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(StringList, StringList, DataModelDataType::String) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(FloatRange, Range, DataModelDataType::Float) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(LongRange, Range, DataModelDataType::Long) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Float, None, DataModelDataType::Float) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Long, None, DataModelDataType::Long) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Float2, None, DataModelDataType::Float2) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Vector, None, DataModelDataType::Float3) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Scale, None, DataModelDataType::Float3) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Rotation, Rotation, DataModelDataType::Float3) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Color, Color, DataModelDataType::Float4) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Boolean, None, DataModelDataType::Bool) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Slide, None, DataModelDataType::String) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Font, Font, DataModelDataType::String) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(FontSize, FontSize, DataModelDataType::Float) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(String, String, DataModelDataType::String) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(MultiLineString, MultiLine, DataModelDataType::String) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(ObjectRef, ObjectRef, DataModelDataType::ObjectRef) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Image, Image, DataModelDataType::Long4) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Mesh, Mesh, DataModelDataType::String) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Import, Import, DataModelDataType::String) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Texture, Texture, DataModelDataType::String) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Image2D, Texture, DataModelDataType::String) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Buffer, Texture, DataModelDataType::String) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Guid, None, DataModelDataType::Long4) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(StringListOrInt, StringList, DataModelDataType::StringOrInt) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(Renderable, Renderable, DataModelDataType::String) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(PathBuffer, PathBuffer, DataModelDataType::String) \
+ HANDLE_QT3DSDM_COMPLETE_TYPE(ShadowMapResolution, ShadowMapResolution, DataModelDataType::Long)
+
+DataModelDataType::Value CompleteMetaDataType::ToDataType(CompleteMetaDataType::Enum inCompleteType)
+{
+ switch (inCompleteType) {
+#define HANDLE_QT3DSDM_COMPLETE_NONE_TYPE \
+ case Unknown: \
+ return DataModelDataType::None;
+#define HANDLE_QT3DSDM_COMPLETE_TYPE(name, addtype, dtype) \
+ case name: \
+ return dtype;
+ ITERATE_QT3DSDM_COMPLETE_TYPES
+ #undef HANDLE_QT3DSDM_COMPLETE_NONE_TYPE
+ #undef HANDLE_QT3DSDM_COMPLETE_TYPE
+ }
+ QT3DS_ASSERT(false);
+ return DataModelDataType::None;
+}
+
+AdditionalMetaDataType::Value
+CompleteMetaDataType::ToAdditionalType(CompleteMetaDataType::Enum inCompleteType)
+{
+ switch (inCompleteType) {
+#define HANDLE_QT3DSDM_COMPLETE_NONE_TYPE \
+ case Unknown: \
+ return AdditionalMetaDataType::None;
+#define HANDLE_QT3DSDM_COMPLETE_TYPE(name, addtype, dtype) \
+ case name: \
+ return AdditionalMetaDataType::addtype;
+ ITERATE_QT3DSDM_COMPLETE_TYPES
+ #undef HANDLE_QT3DSDM_COMPLETE_NONE_TYPE
+ #undef HANDLE_QT3DSDM_COMPLETE_TYPE
+ }
+ QT3DS_ASSERT(false);
+ return AdditionalMetaDataType::None;
+}
+
+CompleteMetaDataType::Enum
+CompleteMetaDataType::ToCompleteType(DataModelDataType::Value inDataType,
+ AdditionalMetaDataType::Value inAdditionalType)
+{
+#define HANDLE_QT3DSDM_COMPLETE_NONE_TYPE \
+ if (inDataType == DataModelDataType::None) \
+ return CompleteMetaDataType::Unknown;
+#define HANDLE_QT3DSDM_COMPLETE_TYPE(name, addtype, dtype) \
+ if (inDataType == dtype \
+ && inAdditionalType == AdditionalMetaDataType::addtype) \
+ return CompleteMetaDataType::name;
+
+ ITERATE_QT3DSDM_COMPLETE_TYPES
+ #undef HANDLE_QT3DSDM_COMPLETE_NONE_TYPE
+ #undef HANDLE_QT3DSDM_COMPLETE_TYPE
+ QT3DS_ASSERT(false);
+ return CompleteMetaDataType::Unknown;
+}
+
+QT3DSU32 WStrOps<CompleteMetaDataType::Enum>::ToStr(CompleteMetaDataType::Enum item,
+ NVDataRef<wchar_t> buffer)
+{
+ switch (item) {
+#define HANDLE_QT3DSDM_COMPLETE_NONE_TYPE \
+ case CompleteMetaDataType::Unknown: \
+ wcscpy_s(buffer.begin(), buffer.size(), L"None"); \
+ return 1;
+#define HANDLE_QT3DSDM_COMPLETE_TYPE(name, addtype, dtype) \
+ case CompleteMetaDataType::name: \
+ wcscpy_s(buffer.begin(), buffer.size(), QT3DS_WCHAR_T_##name); \
+ return 1;
+
+ ITERATE_QT3DSDM_COMPLETE_TYPES
+ #undef HANDLE_QT3DSDM_COMPLETE_NONE_TYPE
+ #undef HANDLE_QT3DSDM_COMPLETE_TYPE
+ }
+ QT3DS_ASSERT(false);
+ return 0;
+}
+bool WStrOps<CompleteMetaDataType::Enum>::StrTo(const wchar_t *buffer,
+ CompleteMetaDataType::Enum &item)
+{
+
+#define HANDLE_QT3DSDM_COMPLETE_NONE_TYPE \
+ if (AreEqual(buffer, L"None")) { \
+ item = CompleteMetaDataType::Unknown; \
+ return true; \
+}
+#define HANDLE_QT3DSDM_COMPLETE_TYPE(name, addtype, dtype) \
+ if (AreEqual(buffer, QT3DS_WCHAR_T_##name)) { \
+ item = CompleteMetaDataType::name; \
+ return true; \
+}
+
+ ITERATE_QT3DSDM_COMPLETE_TYPES
+ #undef HANDLE_QT3DSDM_COMPLETE_NONE_TYPE
+ #undef HANDLE_QT3DSDM_COMPLETE_TYPE
+ return false;
+}
+}
+
+namespace {
+
+#ifndef QT3DSDM_META_DATA_NO_SIGNALS
+#define CONNECT(x) std::make_shared<qt3dsdm::QtSignalConnection>(QObject::connect(this, x, inCallback))
+#else
+#define CONNECT(x) std::shared_ptr<qt3dsdm::ISignalConnection>()
+
+struct SNullFunc
+{
+ template <typename TArgType>
+ void operator()(TArgType)
+ {
+ }
+ template <typename TA1, typename TA2>
+ void operator()(TA1, TA2)
+ {
+ }
+};
+
+#endif
+
+typedef TCharStr TStrType;
+using std::hash;
+
+struct InstanceHandleVecHash
+{
+ size_t operator()(const vector<TInstanceHandle> &inInstances) const
+ {
+ size_t retval = 0;
+ for (size_t idx = 0, end = inInstances.size(); idx < end; ++idx)
+ retval = retval ^ hash<int>()(inInstances[idx]);
+ return retval;
+ }
+};
+
+struct SEventAndHandlerBase
+{
+ Qt3DSDMInstanceHandle m_Instance;
+ TStrType m_Name;
+ TStrType m_FormalName;
+ TStrType m_Category;
+ TStrType m_Description;
+ SEventAndHandlerBase() {}
+ SEventAndHandlerBase(Qt3DSDMInstanceHandle hdl)
+ : m_Instance(hdl)
+ {
+ }
+};
+
+struct SEvent : public SEventAndHandlerBase
+{
+ SEvent() {}
+ SEvent(Qt3DSDMInstanceHandle hdl)
+ : SEventAndHandlerBase(hdl)
+ {
+ }
+};
+
+struct SHandler : public SEventAndHandlerBase
+{
+ SHandler() {}
+ SHandler(Qt3DSDMInstanceHandle hdl)
+ : SEventAndHandlerBase(hdl)
+ {
+ }
+ vector<SMetaDataHandlerArgumentInfo> m_Arguments;
+};
+
+// Note that this hash item only works for strings that are in the string table.
+// These have the property that pointer comparison also indicates string equality.
+struct SInstanceStrHash
+{
+ size_t operator()(const pair<TInstanceHandle, TCharPtr> &inPair) const
+ {
+ return hash<int>()(inPair.first) ^ hash<const void *>()(inPair.second);
+ }
+};
+
+template <typename TDataType>
+NVConstDataRef<TDataType> VecToCRef(const eastl::vector<TDataType> &inType)
+{
+ return NVConstDataRef<TDataType>(inType.data(), (QT3DSU32)inType.size());
+}
+
+struct SMetaDataDynamicObjectImpl
+{
+private:
+ SMetaDataDynamicObjectImpl &operator=(const SMetaDataDynamicObjectImpl &inOther);
+
+public:
+ TCharStr m_Name;
+ TCharStr m_SourcePath;
+ eastl::vector<SMetaDataShader> m_Shaders;
+ eastl::vector<qt3ds::render::dynamic::SPropertyDefinition> m_Properties;
+ eastl::vector<eastl::vector<qt3ds::foundation::CRegisteredString> *> m_EnumValueNames;
+ ~SMetaDataDynamicObjectImpl() { ClearEnumValueNames(); }
+
+ void ClearEnumValueNames()
+ {
+ for (QT3DSU32 idx = 0, end = m_EnumValueNames.size(); idx < end; ++idx)
+ delete (m_EnumValueNames[idx]);
+ m_EnumValueNames.clear();
+ }
+};
+
+struct SMetaDataEffectImpl : public SMetaDataDynamicObjectImpl
+{
+private:
+ SMetaDataEffectImpl &operator=(const SMetaDataEffectImpl &inOther);
+
+public:
+ eastl::vector<qt3ds::render::dynamic::SCommand *> m_EffectCommands;
+
+ void ClearEffectCommands()
+ {
+ for (QT3DSU32 idx = 0, end = m_EnumValueNames.size(); idx < end; ++idx)
+ free(m_EffectCommands[idx]);
+ m_EffectCommands.clear();
+ }
+ SMetaDataEffect ToEffect() const
+ {
+ return SMetaDataEffect(m_Name, VecToCRef(m_Shaders), VecToCRef(m_Properties),
+ VecToCRef(m_EffectCommands));
+ }
+};
+
+struct SMetaDataCustomMaterialImpl : public SMetaDataDynamicObjectImpl
+{
+private:
+ SMetaDataCustomMaterialImpl &operator=(const SMetaDataCustomMaterialImpl &);
+
+public:
+ eastl::vector<qt3ds::render::dynamic::SCommand *>
+ m_CustomerMaterialCommands; ///< our command stream used for rendering
+ bool m_HasTransparency; ///< this material is transparent
+ bool m_HasRefraction; ///< this material is refractive (e.g glass)
+ bool m_AlwaysDirty;
+ QT3DSU32 m_ShaderKey; ///< What does this shader contain ( e.g. specular, diffuse, ...)
+ QT3DSU32 m_LayerCount; ///< How much layers does this material have
+
+ void ClearEffectCommands()
+ {
+ for (QT3DSU32 idx = 0, end = m_EnumValueNames.size(); idx < end; ++idx) {
+ free(m_CustomerMaterialCommands[idx]);
+ }
+
+ m_CustomerMaterialCommands.clear();
+ }
+
+ SMetaDataCustomMaterial ToMaterial() const
+ {
+ return SMetaDataCustomMaterial(m_Name, VecToCRef(m_Shaders), VecToCRef(m_Properties),
+ VecToCRef(m_CustomerMaterialCommands), m_HasTransparency,
+ m_HasRefraction, m_AlwaysDirty, m_ShaderKey, m_LayerCount);
+ }
+};
+
+#ifndef QT3DSDM_META_DATA_NO_SIGNALS
+class SNewMetaDataImpl : public QObject, public IMetaData
+{
+ Q_OBJECT
+#else
+class SNewMetaDataImpl : public IMetaData
+{
+#endif
+public:
+ typedef unordered_map<TCharPtr, TInstanceHandle> TStrInstanceMap;
+ typedef unordered_map<TInstanceHandle, TCharPtr, hash<int>> TInstanceStrMap;
+ // Caching the derivation chain lookup so we can quickly lookup the entire list of
+ // derived instances (and have it ordered, somewhat).
+ typedef unordered_map<vector<TInstanceHandle>, vector<TInstanceHandle>, InstanceHandleVecHash>
+ TDerivationMap;
+
+ typedef unordered_map<TCategoryHandle, SCategoryInfo, hash<int>> TCategoryMap;
+ typedef unordered_map<TCharPtr, TCategoryHandle> TNameCategoryMap;
+
+ typedef unordered_map<TMetaDataPropertyHandle, SMetaDataPropertyInfo, hash<int>>
+ TMetaDataPropertyMap;
+ typedef unordered_map<TInstanceHandle, vector<TMetaDataPropertyHandle>, hash<int>>
+ TInstancePropertyMap;
+ typedef unordered_map<pair<TInstanceHandle, TCharPtr>, TMetaDataPropertyHandle,
+ SInstanceStrHash>
+ TInstancePropertyNamePropertyMap;
+ typedef unordered_map<TMetaDataPropertyHandle, eastl::vector<SPropertyFilterInfo>, hash<int>>
+ TMetaDataPropertyFilterMap;
+ typedef unordered_map<TInstanceHandle, vector<TCharPtr>, hash<int>> TInstanceGroupMap;
+
+ typedef unordered_map<TEventHandle, SEvent, hash<int>> TEventMap;
+ typedef unordered_map<TInstanceHandle, vector<TEventHandle>, hash<int>> TInstanceEventMap;
+ typedef unordered_map<pair<TInstanceHandle, TCharPtr>, TEventHandle, SInstanceStrHash>
+ TInstanceEventNameEventMap;
+
+ typedef unordered_map<THandlerHandle, SHandler, hash<int>> THandlerMap;
+ typedef unordered_map<TInstanceHandle, vector<THandlerHandle>, hash<int>> TInstanceHandlerMap;
+ typedef unordered_map<pair<TInstanceHandle, TCharPtr>, THandlerHandle, SInstanceStrHash>
+ TInstanceHandlerNameHandlerMap;
+
+ typedef unordered_map<TInstanceHandle, vector<TCharPtr>, hash<int>> TInstanceStringListMap;
+ typedef unordered_map<TCharPtr, SMetaDataEffectImpl> TEffectMap;
+ typedef unordered_map<TCharPtr, SMetaDataCustomMaterialImpl> TCustomMaterialMap;
+
+ std::shared_ptr<IDataCore> m_DataCore;
+ IStringTable &m_StringTable;
+ TTransactionConsumerPtr m_Consumer;
+
+ int m_NextId;
+
+ // Helper objects to speed up queries
+ TStrInstanceMap m_CanonicalTypeToInstances;
+ TInstanceStrMap m_InstancesToCanonicalType;
+ TDerivationMap m_DerivationMap;
+
+ TCategoryMap m_Categories;
+ TNameCategoryMap m_NameToCategories;
+
+ TMetaDataPropertyMap m_Properties;
+ TInstancePropertyMap m_InstanceToProperties;
+ TInstancePropertyNamePropertyMap m_InstanceNameToProperties;
+ TMetaDataPropertyFilterMap m_PropertyFilters;
+ TInstanceGroupMap m_InstanceGroupMap;
+
+ TEventMap m_Events;
+ TInstanceEventMap m_InstanceToEvents;
+ TInstanceEventNameEventMap m_InstanceNameToEvents;
+
+ THandlerMap m_Handlers;
+ TInstanceHandlerMap m_InstanceToHandlers;
+ TInstanceHandlerNameHandlerMap m_InstanceNameToHandlers;
+
+ TInstanceStringListMap m_InstanceToReferences;
+
+ vector<TInstanceHandle> m_Parents;
+ vector<TInstanceHandle> m_NextParents;
+ vector<TInstanceHandle> m_DerivationChain;
+ unordered_set<int> m_UniqueSet;
+ unordered_set<size_t> m_SizeTSet;
+
+ MemoryBuffer<RawAllocator> m_TempBuffer;
+ MemoryBuffer<RawAllocator> m_ReadBuffer;
+
+ eastl::string m_ConvertStr;
+
+ TCharStr m_ObjectName;
+
+ TEffectMap m_EffectMap;
+ TCustomMaterialMap m_CustomMaterials;
+
+#ifndef QT3DSDM_META_DATA_NO_SIGNALS
+Q_SIGNALS:
+ void internalCategoryDestroyed(Qt3DSDMCategoryHandle);
+ void internalMetaDataPropertyDestroyed(Qt3DSDMMetaDataPropertyHandle);
+ void internalEventDestroyed(Qt3DSDMEventHandle);
+ void internalHandlerDestroyed(Qt3DSDMHandlerHandle);
+ void internalHandlerArgDestroyed(Qt3DSDMHandlerHandle, QT3DSU32);
+#else
+ SNullFunc internalCategoryDestroyed;
+ SNullFunc internalMetaDataPropertyDestroyed;
+ SNullFunc internalEventDestroyed;
+ SNullFunc internalHandlerDestroyed;
+ SNullFunc internalHandlerArgDestroyed;
+#endif
+public:
+ TSignalConnectionPtr m_PropertyDeletedConnection;
+ bool m_IgnorePropertyDeleted;
+ TSignalConnectionPtr m_InstanceDeletedConnection;
+
+ SNewMetaDataImpl(std::shared_ptr<IDataCore> inDataCore)
+ : m_DataCore(inDataCore)
+ , m_StringTable(inDataCore->GetStringTable())
+ , m_NextId(1)
+ , m_IgnorePropertyDeleted(false)
+ {
+#ifndef QT3DSDM_META_DATA_NO_SIGNALS
+ CDataCoreProducer *producer = dynamic_cast<CDataCoreProducer *>(inDataCore.get());
+ if (producer) {
+ m_PropertyDeletedConnection = producer->ConnectPropertyRemoved(
+ bind(&SNewMetaDataImpl::OnPropertyRemoved, this,
+ std::placeholders::_1, std::placeholders::_2));
+ m_InstanceDeletedConnection = producer->ConnectBeforeInstanceDeleted(
+ bind(&SNewMetaDataImpl::OnInstanceRemoved, this,
+ std::placeholders::_1));
+ }
+#endif
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Helper Functions
+
+ const wchar_t *Intern(TStrType inData) { return m_StringTable.RegisterStr(inData.wide_str()); }
+ const wchar_t *Intern(const char *inData) { return m_StringTable.GetWideStr(inData); }
+
+ inline int GetNextId()
+ {
+ int retval = m_NextId;
+ ++m_NextId;
+ return retval;
+ }
+
+ template <typename TMapType, typename THandleType>
+ static void AddItemToInstanceList(TInstanceHandle inInstance, THandleType inHandle, QT3DSU32 inIdx,
+ TMapType &ioMap)
+ {
+ pair<typename TMapType::iterator, bool> inserter =
+ ioMap.insert(make_pair(inInstance, vector<THandleType>()));
+ inserter.first->second.insert(inserter.first->second.begin() + inIdx, inHandle);
+ }
+
+ template <typename TMapType, typename THandleType>
+ static QT3DSU32 AddItemToInstanceList(TInstanceHandle inInstance, THandleType inHandle,
+ TMapType &ioMap)
+ {
+ pair<typename TMapType::iterator, bool> inserter =
+ ioMap.insert(make_pair(inInstance, vector<THandleType>()));
+ QT3DSU32 offset = (QT3DSU32)inserter.first->second.size();
+ inserter.first->second.push_back(inHandle);
+ return offset;
+ }
+
+ template <typename TItemType>
+ struct VectorEqualPred
+ {
+ TItemType m_Item;
+ VectorEqualPred(const TItemType &inItem)
+ : m_Item(inItem)
+ {
+ }
+
+ bool operator()(const TItemType &inOther) const { return m_Item == inOther; }
+ };
+
+ template <typename THandleType, typename TMapType>
+ static QT3DSU32 DoRemoveItemFromInstanceList(TInstanceHandle inInstance, THandleType inHandle,
+ TMapType &ioMap)
+ {
+ typename TMapType::iterator find = ioMap.find(inInstance);
+ if (find != ioMap.end()) {
+ typename vector<THandleType>::iterator theVecFind =
+ std::find(find->second.begin(), find->second.end(), inHandle);
+ if (theVecFind != find->second.end()) {
+ QT3DSU32 retval = (QT3DSU32)(theVecFind - find->second.begin());
+ find->second.erase(theVecFind);
+ if (find->second.empty())
+ ioMap.erase(find);
+ return retval;
+ }
+ }
+ QT3DS_ASSERT(false);
+ return QT3DS_MAX_U32;
+ }
+
+ template <typename TMapType, typename THandleType>
+ struct InstanceListTransaction : ITransaction
+ {
+ TInstanceHandle m_Instance;
+ THandleType m_Handle;
+ TMapType &m_Map;
+ QT3DSU32 m_Idx;
+ bool m_InsertOnDo;
+
+ InstanceListTransaction(const char *inFile, int inLine, TInstanceHandle inst,
+ THandleType handle, TMapType &map, QT3DSU32 inIdx, bool inInsertOnDo)
+ : ITransaction(inFile, inLine)
+ , m_Instance(inst)
+ , m_Handle(handle)
+ , m_Map(map)
+ , m_Idx(inIdx)
+ , m_InsertOnDo(inInsertOnDo)
+ {
+ }
+
+ void insert()
+ {
+ SNewMetaDataImpl::AddItemToInstanceList(m_Instance, m_Handle, m_Idx, m_Map);
+ }
+ void remove()
+ {
+ SNewMetaDataImpl::DoRemoveItemFromInstanceList(m_Instance, m_Handle, m_Map);
+ }
+
+ void Do() override
+ {
+ if (m_InsertOnDo)
+ insert();
+ else
+ remove();
+ }
+ void Undo() override
+ {
+ if (m_InsertOnDo)
+ remove();
+ else
+ insert();
+ }
+ };
+
+ template <typename THandleType, typename TMapType>
+ void RemoveItemFromInstanceList(const char *inFile, int inLine, TInstanceHandle inInstance,
+ THandleType inHandle, TMapType &ioMap)
+ {
+ typename TMapType::iterator find = ioMap.find(inInstance);
+ if (find != ioMap.end()) {
+ QT3DSU32 idx = DoRemoveItemFromInstanceList(inInstance, inHandle, ioMap);
+ if (m_Consumer != NULL) {
+ m_Consumer->OnTransaction(
+ std::make_shared<InstanceListTransaction<TMapType, THandleType>>(
+ inFile, inLine, inInstance, inHandle, std::ref(ioMap), idx, false));
+ }
+ }
+ }
+
+ template <typename THandleType, typename TValueType, typename TMapType,
+ typename TInstanceListMapType>
+ THandleType CreateItem(const char *inFile, int inLine, Qt3DSDMInstanceHandle inInstance,
+ TMapType &inMap, TInstanceListMapType &inInstanceListMap)
+ {
+ int retval = GetNextId();
+ pair<THandleType, TValueType> thePair(make_pair(retval, TValueType(inInstance)));
+ inMap.insert(thePair);
+ QT3DSU32 idx = AddItemToInstanceList(inInstance, THandleType(retval), inInstanceListMap);
+ if (m_Consumer) {
+ CreateHashMapInsertTransaction(inFile, inLine, m_Consumer, thePair, inMap);
+ m_Consumer->OnTransaction(
+ std::make_shared<InstanceListTransaction<TInstanceListMapType, THandleType>>(
+ inFile, inLine, inInstance, retval, std::ref(inInstanceListMap), idx, true));
+ }
+ return retval;
+ }
+
+ template <typename TKeyType, typename TValueType, typename THashType>
+ TValueType *FindHashItem(TKeyType inHandle,
+ unordered_map<TKeyType, TValueType, THashType> &ioHash)
+ {
+ typename unordered_map<TKeyType, TValueType, THashType>::iterator find =
+ ioHash.find(inHandle);
+ if (find != ioHash.end())
+ return &find->second;
+ return NULL;
+ }
+
+ template <typename THandleType, typename TMapType>
+ static void DoReplaceNamedItem(TInstanceHandle inInst, TCharPtr inOldName, TCharPtr inNewName,
+ THandleType inNewHandle, TMapType &ioMap)
+ {
+ ioMap.erase(make_pair(inInst, inOldName));
+ bool success = ioMap.insert(make_pair(make_pair(inInst, inNewName), inNewHandle)).second;
+ (void)success;
+ QT3DS_ASSERT(success);
+ }
+
+ template <typename TMapType, typename THandleType>
+ struct ReplaceNamedItemTransaction : ITransaction
+ {
+ TInstanceHandle m_Instance;
+ TCharPtr m_OldName;
+ TCharPtr m_NewName;
+ THandleType m_OldHandle;
+ THandleType m_NewHandle;
+ TMapType &m_Map;
+ ReplaceNamedItemTransaction(const char *inFile, int inLine, TInstanceHandle inst,
+ TCharPtr oldNm, TCharPtr newNm, THandleType oldHdl,
+ THandleType newHdl, TMapType &map)
+ : ITransaction(inFile, inLine)
+ , m_Instance(inst)
+ , m_OldName(oldNm)
+ , m_NewName(newNm)
+ , m_OldHandle(oldHdl)
+ , m_NewHandle(newHdl)
+ , m_Map(map)
+ {
+ }
+ void Do() override
+ {
+ SNewMetaDataImpl::DoReplaceNamedItem(m_Instance, m_OldName, m_NewName, m_NewHandle,
+ m_Map);
+ }
+ void Undo() override
+ {
+ SNewMetaDataImpl::DoReplaceNamedItem(m_Instance, m_NewName, m_OldName, m_OldHandle,
+ m_Map);
+ }
+ };
+
+ template <typename THandleType, typename TMapType>
+ void ReplaceNamedItem(const char *inFile, int inLine, TInstanceHandle inInst,
+ TCharPtr inOldName, TCharPtr inNewName, THandleType inNewHandle,
+ TMapType &ioMap)
+ {
+ typename TMapType::iterator find = ioMap.find(std::make_pair(inInst, inOldName));
+ THandleType oldHandle;
+ if (find != ioMap.end())
+ oldHandle = find->second;
+ DoReplaceNamedItem(inInst, inOldName, inNewName, inNewHandle, ioMap);
+ if (m_Consumer) {
+ if (oldHandle.Valid()) {
+ m_Consumer->OnTransaction(
+ std::make_shared<ReplaceNamedItemTransaction<TMapType, THandleType>>(
+ inFile, inLine, inInst, inOldName, inNewName, oldHandle, inNewHandle,
+ std::ref(ioMap)));
+ } else
+ CreateHashMapInsertTransaction(__FILE__, __LINE__, m_Consumer,
+ make_pair(make_pair(inInst, inNewName), inNewHandle),
+ ioMap);
+ }
+ }
+
+ template <typename THandleType, typename TMapType>
+ void DestroyNamedItem(const char *inFile, int inLine, TInstanceHandle inInst, TCharPtr inName,
+ TMapType &ioMap)
+ {
+ typename TMapType::iterator iter = ioMap.find(make_pair(inInst, inName));
+ if (iter != ioMap.end()) {
+ pair<pair<TInstanceHandle, TCharPtr>, THandleType> existing(*iter);
+ ioMap.erase(iter);
+ CreateHashMapEraseTransaction(inFile, inLine, m_Consumer, existing, ioMap);
+ }
+ }
+
+ template <typename THandleType, typename TInfoType, typename TMapType, typename TNamedMapType>
+ void SetItemInfo(const char *inFile, int inLine, THandleType inItem, const TInfoType &oldInfo,
+ const TInfoType &newInfo, TMapType &inMap, TNamedMapType &inNamedMap)
+ {
+ TCharPtr newName = Intern(newInfo.m_Name.wide_str());
+ TCharPtr oldName = Intern(oldInfo.m_Name.wide_str());
+ ReplaceNamedItem(inFile, inLine, newInfo.m_Instance, oldName, newName, inItem, inNamedMap);
+ CreateHashMapSwapTransaction(inFile, inLine, m_Consumer, inItem, oldInfo, newInfo, inMap);
+ }
+
+ bool AddDerivationChainItem(TInstanceHandle inInst)
+ {
+ if (m_UniqueSet.find(inInst) == m_UniqueSet.end()) {
+ m_DerivationChain.push_back(inInst);
+ m_UniqueSet.insert(inInst);
+ return true;
+ }
+ return false;
+ }
+
+ void GetDerivationChain(TInstanceHandle inInst)
+ {
+ m_Parents.clear();
+ m_DerivationChain.clear();
+ m_UniqueSet.clear();
+ m_NextParents.clear();
+ m_DataCore->GetInstanceParents(inInst, m_Parents);
+
+ TDerivationMap::iterator mapIter = m_DerivationMap.find(m_Parents);
+ if (mapIter != m_DerivationMap.end())
+ m_DerivationChain = mapIter->second;
+ else {
+ while (m_Parents.empty() == false) {
+ for (size_t idx = 0, end = m_Parents.size(); idx < end; ++idx) {
+ if (AddDerivationChainItem(m_Parents[idx]))
+ m_DataCore->GetInstanceParents(m_Parents[idx], m_NextParents);
+ }
+ m_Parents = m_NextParents;
+ m_NextParents.clear();
+ }
+ m_NextParents.clear();
+
+ m_DataCore->GetInstanceParents(inInst, m_NextParents);
+ m_DerivationMap.insert(make_pair(m_NextParents, m_DerivationChain));
+ }
+ }
+
+ template <typename THandleType, typename TMapType>
+ THandleType FindItemByName(TInstanceHandle inInst, TCharPtr inName, TMapType &ioMap)
+ {
+ typename TMapType::iterator find(ioMap.find(make_pair(inInst, inName)));
+ if (find != ioMap.end())
+ return find->second;
+
+ GetDerivationChain(inInst);
+ for (size_t idx = 0, end = m_DerivationChain.size(); idx < end; ++idx) {
+ find = ioMap.find(make_pair(m_DerivationChain[idx], inName));
+ if (find != ioMap.end())
+ return find->second;
+ }
+ return 0;
+ }
+
+ template <typename TItemType, typename TVectorType>
+ void AddListMapItems(const std::vector<TItemType> &inMapEntry, TVectorType &outVector)
+ {
+ typedef typename std::vector<TItemType>::const_iterator TIterType;
+ for (TIterType theIter = inMapEntry.begin(), theEnd = inMapEntry.end(); theIter != theEnd;
+ ++theIter)
+ outVector.push_back(*theIter);
+ }
+
+ template <typename TListMapType, typename TSizeTOpType, typename TVectorType>
+ void DoGetHandleList(Qt3DSDMInstanceHandle inInstance, TListMapType &inMap,
+ TVectorType &outHandles, TSizeTOpType inOperator)
+ {
+ typename TListMapType::iterator find;
+ GetDerivationChain(inInstance);
+ for (size_t idx = 0, end = m_DerivationChain.size(); idx < end; ++idx) {
+ // Add base classes to the list first
+ find = inMap.find(m_DerivationChain[end - idx - 1]);
+ if (find != inMap.end())
+ AddListMapItems(find->second, outHandles);
+ }
+ find = inMap.find(inInstance);
+ if (find != inMap.end())
+ AddListMapItems(find->second, outHandles);
+ m_SizeTSet.clear();
+ for (size_t ridx = 0; ridx < outHandles.size(); ++ridx) {
+ size_t idx = outHandles.size() - ridx - 1;
+ // Run through the list backwards, making sure that items further in the list
+ // completely overshadow items earlier in the list.
+
+ // Create unique key from the item that we can check against
+ size_t item = inOperator(outHandles[idx]);
+ if (m_SizeTSet.insert(item).second == false) {
+ outHandles.erase(outHandles.begin() + idx);
+ --ridx;
+ }
+ }
+ }
+
+ template <typename THandleType, typename TMapType>
+ struct NameSizeTOpType
+ {
+ SNewMetaDataImpl &m_Impl;
+ TMapType &m_Map;
+ NameSizeTOpType(SNewMetaDataImpl &inImpl, TMapType &inMap)
+ : m_Impl(inImpl)
+ , m_Map(inMap)
+ {
+ }
+
+ size_t operator()(THandleType inHandle)
+ {
+ return reinterpret_cast<size_t>(m_Impl.Intern(m_Map[inHandle].m_Name));
+ }
+ };
+
+ // Ensure we don't return two items of the same name.
+ template <typename THandleType, typename TListMapType, typename TMapType>
+ void GetHandleList(Qt3DSDMInstanceHandle inInstance, TListMapType &inMap, TMapType &inTypeName,
+ vector<THandleType> &outHandles)
+ {
+ DoGetHandleList(inInstance, inMap, outHandles,
+ NameSizeTOpType<THandleType, TMapType>(*this, inTypeName));
+ }
+
+ template <typename THandleType, typename TMapType, typename TNameMapType,
+ typename TListMapType>
+ bool DestroyItem(const char *inFile, int inLine, THandleType inItem,
+ TMapType &inMap, TNameMapType &inNameMap, TListMapType &inListMap)
+ {
+ typename TMapType::iterator find(inMap.find(inItem));
+ if (find == inMap.end())
+ return false;
+ DestroyNamedItem<THandleType>(inFile, inLine, find->second.m_Instance,
+ Intern(find->second.m_Name.wide_str()), inNameMap);
+ RemoveItemFromInstanceList(inFile, inLine, find->second.m_Instance, inItem, inListMap);
+ CreateHashMapEraseTransaction(inFile, inLine, m_Consumer,
+ make_pair(find->first, find->second), inMap);
+ inMap.erase(find);
+ return true;
+ }
+
+ template <typename THandleType, typename TListMapType>
+ void ForEachItem(Qt3DSDMInstanceHandle inInstance, TListMapType &ioMap,
+ function<void(THandleType)> inOperation)
+ {
+ typename TListMapType::iterator find = ioMap.find(inInstance);
+ if (find != ioMap.end()) {
+ vector<THandleType> itemData(find->second);
+ for (size_t idx = 0, end = itemData.size(); idx < end; ++idx)
+ inOperation(itemData[idx]);
+ }
+ }
+
+ SCategoryInfo *FindCategory(Qt3DSDMCategoryHandle inCategory)
+ {
+ return FindHashItem(inCategory, m_Categories);
+ }
+
+ SMetaDataPropertyInfo *FindProperty(Qt3DSDMMetaDataPropertyHandle inPropertyHandle)
+ {
+ return FindHashItem(inPropertyHandle, m_Properties);
+ }
+
+ SEvent *FindEvent(Qt3DSDMEventHandle inEventHandle)
+ {
+ return FindHashItem(inEventHandle, m_Events);
+ }
+
+ SHandler *FindHandler(Qt3DSDMHandlerHandle inHandle)
+ {
+ return FindHashItem(inHandle, m_Handlers);
+ }
+
+ SMetaDataHandlerArgumentInfo *FindHandlerArg(Qt3DSDMHandlerHandle inHandler, QT3DSU32 inIdx)
+ {
+ SHandler *theHandler(FindHandler(inHandler));
+ if (theHandler && theHandler->m_Arguments.size() > inIdx)
+ return &theHandler->m_Arguments[inIdx];
+ return NULL;
+ }
+
+ void OnPropertyRemoved(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty)
+ {
+ if (m_IgnorePropertyDeleted)
+ return;
+
+ vector<Qt3DSDMMetaDataPropertyHandle> propertiesToDestroy;
+ for (TMetaDataPropertyMap::iterator iter = m_Properties.begin(), end = m_Properties.end();
+ iter != end; ++iter) {
+ if (iter->second.m_Property == inProperty)
+ propertiesToDestroy.push_back(iter->first);
+ }
+
+ for (size_t idx = 0, end = propertiesToDestroy.size(); idx < end; ++idx)
+ DestroyMetaDataProperty(propertiesToDestroy[idx]);
+ }
+
+ void OnInstanceRemoved(Qt3DSDMInstanceHandle inInstance) { DestroyMetaData(inInstance); }
+ template <typename TEntryType, typename TMapType>
+ void InsertWithTransaction(const char *inFile, int inLine, const TEntryType &inEntry,
+ TMapType &inMap)
+ {
+ inMap.insert(inEntry);
+ CreateHashMapInsertTransaction(inFile, inLine, m_Consumer, inEntry, inMap);
+ }
+
+ template <typename TKeyType, typename TMapType>
+ void EraseWithTransaction(const char *inFile, int inLine, TKeyType inKey, TMapType &inMap)
+ {
+ typename TMapType::iterator find(inMap.find(inKey));
+ if (find != inMap.end()) {
+ CreateHashMapEraseTransaction(inFile, inLine, m_Consumer,
+ std::make_pair(find->first, find->second), inMap);
+ inMap.erase(find);
+ }
+ }
+
+ template <typename TEntryType, typename TMapType>
+ void InsertOrUpdateWithTransaction(const TEntryType &inEntry, TMapType &inMap)
+ {
+ pair<typename TMapType::iterator, bool> inserter = inMap.insert(inEntry);
+ if (inserter.second)
+ CreateHashMapInsertTransaction(__FILE__, __LINE__, m_Consumer, inEntry, inMap);
+ else {
+ typename TMapType::iterator theIter(inserter.first);
+ CreateHashMapSwapTransaction(__FILE__, __LINE__, m_Consumer, theIter->first,
+ theIter->second, inEntry.second, inMap);
+ theIter->second = inEntry.second;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // API Implementation
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Sharing some utility objects
+ IStringTable &GetStringTable() override { return m_DataCore->GetStringTable(); }
+ TStringTablePtr GetStringTablePtr() override { return m_DataCore->GetStringTablePtr(); }
+ TDataCorePtr GetDataCore() override { return m_DataCore; }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Canonical Instances
+ void SetInstanceAsCanonical(Qt3DSDMInstanceHandle inInstance, TStrType inTypename) override
+ {
+ const wchar_t *theTypename(Intern(inTypename));
+ if (g_DataModelDebugLogger)
+ g_DataModelDebugLogger("IMetaData::SetInstanceAsCanonical Enter");
+ if (g_DataModelDebugLogger)
+ g_DataModelDebugLogger(GetStringTable().GetNarrowStr(inTypename.wide_str()));
+ m_CanonicalTypeToInstances.insert(make_pair(theTypename, inInstance));
+ m_InstancesToCanonicalType.insert(make_pair(inInstance, theTypename));
+ CreateHashMapInsertTransaction(__FILE__, __LINE__, m_Consumer,
+ make_pair(theTypename, inInstance),
+ m_CanonicalTypeToInstances);
+ CreateHashMapInsertTransaction(__FILE__, __LINE__, m_Consumer,
+ make_pair(inInstance, theTypename),
+ m_InstancesToCanonicalType);
+ if (g_DataModelDebugLogger)
+ g_DataModelDebugLogger("IMetaData::SetInstanceAsCanonical Leave");
+ }
+
+ Qt3DSDMInstanceHandle GetCanonicalInstanceForType(TStrType inTypename) override
+ {
+ TStrInstanceMap::iterator find = m_CanonicalTypeToInstances.find(Intern(inTypename));
+ if (find != m_CanonicalTypeToInstances.end())
+ return find->second;
+ return 0;
+ }
+
+ Option<TCharStr> GetTypeForCanonicalInstance(Qt3DSDMInstanceHandle inInstance) override
+ {
+ TInstanceStrMap::iterator find = m_InstancesToCanonicalType.find(inInstance);
+ if (find != m_InstancesToCanonicalType.end())
+ return TCharStr(find->second);
+ return Empty();
+ }
+
+ Option<TCharStr> GetTypeForInstance(Qt3DSDMInstanceHandle inInstance) override
+ {
+ Option<TCharStr> theType = GetTypeForCanonicalInstance(inInstance);
+ if (theType.hasValue())
+ return theType;
+ GetDerivationChain(inInstance);
+ for (size_t idx = 0, end = m_DerivationChain.size(); idx < end; ++idx) {
+ theType = GetTypeForCanonicalInstance(m_DerivationChain[idx]);
+ if (theType.hasValue())
+ return theType;
+ }
+ return Empty();
+ }
+
+ QT3DSU32 GetGroupCountForInstance(Qt3DSDMInstanceHandle inInstance) override
+ {
+ std::vector<TCharStr> outNames;
+ QT3DSU32 count = GetGroupNamesForInstance(inInstance, outNames);
+ return (count == 0) ? 1 : count;
+ }
+
+ QT3DSU32 GetGroupNamesForInstance(Qt3DSDMInstanceHandle inInstance,
+ std::vector<TCharStr> &outNames) override
+ {
+ TInstanceStrMap::iterator canonicalFind = m_InstancesToCanonicalType.find(inInstance);
+ if (canonicalFind != m_InstancesToCanonicalType.end()) {
+ TInstanceGroupMap::iterator find = m_InstanceGroupMap.find(inInstance);
+ if (find != m_InstanceGroupMap.end()) {
+ pair<typename TInstanceGroupMap::iterator, bool> inserter =
+ m_InstanceGroupMap.insert(make_pair(inInstance, vector<TCharPtr>()));
+ vector<TCharPtr> &itemList = inserter.first->second;
+ for (size_t i = 0, j = itemList.size(); i < j; ++i) {
+ bool alreadyInList = false;
+ // discard duplicates
+ for (size_t k = 0, l = outNames.size(); k < l; ++k) {
+ TCharStr curListName = itemList[i];
+ if (curListName == outNames[k].wide_str()) {
+ alreadyInList = true;
+ break;
+ }
+ }
+ if (!alreadyInList)
+ outNames.push_back(itemList[i]);
+ }
+ }
+ return (QT3DSU32)outNames.size();
+ }
+
+ GetDerivationChain(inInstance);
+
+ for (int idx = (int)m_DerivationChain.size() - 1, end = 0; idx >= end; --idx) {
+ TInstanceGroupMap::iterator find = m_InstanceGroupMap.find(m_DerivationChain[idx]);
+ if (find != m_InstanceGroupMap.end()) {
+ pair<typename TInstanceGroupMap::iterator, bool> inserter =
+ m_InstanceGroupMap.insert(
+ make_pair(m_DerivationChain[idx], vector<TCharPtr>()));
+ vector<TCharPtr> &itemList = inserter.first->second;
+ for (size_t i = 0, j = itemList.size(); i < j; ++i) {
+ bool alreadyInList = false;
+ // discard duplicates
+ for (size_t k = 0, l = outNames.size(); k < l; ++k) {
+ TCharStr curListName = itemList[i];
+ if (curListName == outNames[k].wide_str()) {
+ alreadyInList = true;
+ break;
+ }
+ }
+ if (!alreadyInList)
+ outNames.push_back(itemList[i]);
+ }
+ }
+ }
+
+ return (QT3DSU32)outNames.size();
+ }
+
+ Option<TCharStr> GetGroupFilterNameForInstance(Qt3DSDMInstanceHandle inInstance,
+ long inIndex) override
+ {
+ std::vector<TCharStr> outNames;
+ QT3DSU32 count = GetGroupNamesForInstance(inInstance, outNames);
+ if (count > (QT3DSU32)inIndex)
+ return outNames[inIndex];
+
+ return Empty();
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Categories
+
+ std::pair<Qt3DSDMCategoryHandle, bool> GetOrCreateCategory(TStrType inName) override
+ {
+ TCharPtr theName(Intern(inName));
+ TNameCategoryMap::iterator find = m_NameToCategories.find(theName);
+ if (find != m_NameToCategories.end())
+ return make_pair(find->second, false);
+
+ TCategoryHandle retval(GetNextId());
+ InsertWithTransaction(__FILE__, __LINE__, make_pair(retval, SCategoryInfo(inName)),
+ m_Categories);
+ InsertWithTransaction(__FILE__, __LINE__, make_pair(theName, retval), m_NameToCategories);
+ return make_pair(retval, true);
+ }
+
+ void SetCategoryInfo(Qt3DSDMCategoryHandle inCategory, TStrType inIcon,
+ TStrType inHighlight, TStrType inDescription) override
+ {
+ SCategoryInfo *infoPtr(FindCategory(inCategory));
+ if (infoPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ SCategoryInfo &newInfo(*infoPtr);
+ SCategoryInfo oldInfo(newInfo);
+
+ newInfo.m_Icon = inIcon;
+ newInfo.m_HighlightIcon = inHighlight;
+ newInfo.m_Description = inDescription;
+ CreateHashMapSwapTransaction(__FILE__, __LINE__, m_Consumer, inCategory, oldInfo, newInfo,
+ m_Categories);
+ }
+
+ void DestroyCategory(Qt3DSDMCategoryHandle inCategory) override
+ {
+ SCategoryInfo *infoPtr(FindCategory(inCategory));
+ if (infoPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ EraseWithTransaction(__FILE__, __LINE__, Intern(infoPtr->m_Name), m_NameToCategories);
+ EraseWithTransaction(__FILE__, __LINE__, inCategory, m_Categories);
+ }
+ Option<SCategoryInfo> GetCategoryInfo(Qt3DSDMCategoryHandle inCategory) override
+ {
+ SCategoryInfo *infoPtr(FindCategory(inCategory));
+ if (infoPtr)
+ return *infoPtr;
+ return Empty();
+ }
+ Qt3DSDMCategoryHandle FindCategoryByName(TStrType inName) override
+ {
+ TCharPtr theName(Intern(inName));
+ TNameCategoryMap::iterator find = m_NameToCategories.find(theName);
+ if (find != m_NameToCategories.end())
+ return find->second;
+ return 0;
+ }
+
+ void GetCategories(vector<Qt3DSDMCategoryHandle> &outCategories) override
+ {
+ for (TCategoryMap::iterator iter = m_Categories.begin(), end = m_Categories.end();
+ iter != end; ++iter)
+ outCategories.push_back(iter->first);
+ }
+
+ Option<SCategoryInfo> GetEventCategory(TStrType inName) override
+ {
+ return GetCategoryInfo(FindCategoryByName(inName));
+ }
+
+ Option<SCategoryInfo> GetHandlerCategory(TStrType inName) override
+ {
+ return GetCategoryInfo(FindCategoryByName(inName));
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Properties
+
+ Qt3DSDMMetaDataPropertyHandle CreateMetaDataProperty(Qt3DSDMInstanceHandle inInstance) override
+ {
+ return CreateItem<Qt3DSDMMetaDataPropertyHandle, SMetaDataPropertyInfo>(
+ __FILE__, __LINE__, inInstance, m_Properties, m_InstanceToProperties);
+ }
+
+ void EnsureDataCoreProperty(SMetaDataPropertyInfo &newInfo)
+ {
+ m_IgnorePropertyDeleted = true;
+ // If the existing property under the new name doesn't match
+ // the new info, then we also have to delete the property
+ Qt3DSDMPropertyHandle theExistingProperty =
+ m_DataCore->GetAggregateInstancePropertyByName(newInfo.m_Instance, newInfo.m_Name);
+ // Ensure the types match.
+ if (theExistingProperty.Valid()) {
+ Qt3DSDMPropertyDefinition theDefinition(m_DataCore->GetProperty(theExistingProperty));
+ if (theDefinition.m_Name != newInfo.m_Name
+ || theDefinition.m_Type != newInfo.GetDataType()) {
+ m_DataCore->RemoveProperty(theExistingProperty);
+ theExistingProperty = 0;
+ }
+ }
+
+ // Finally, if we don't have a property at this point, create a new property
+ if (theExistingProperty.Valid() == false)
+ theExistingProperty = m_DataCore->AddProperty(
+ newInfo.m_Instance, newInfo.m_Name.wide_str(), newInfo.GetDataType());
+ newInfo.m_Property = theExistingProperty;
+ m_IgnorePropertyDeleted = false;
+ }
+
+ // If the type doesn't match the default, then it has no default.
+ SValue VerifyDefaultPropertyType(DataModelDataType::Value inDataType, const SValue &inValue)
+ {
+ if (inValue.empty() == false) {
+ DataModelDataType::Value theType = GetValueType(inValue);
+ if (theType != inDataType) {
+ return SValue(0.0f);
+ }
+ }
+ return inValue;
+ }
+ // If the datatype doesn't match the value, force the value to match the type.
+ // some types *have* to have values.
+ TMetaDataData VerifyMetaDataDataType(AdditionalMetaDataType::Value inDataType,
+ const TMetaDataData &inValue)
+ {
+ if (inDataType == AdditionalMetaDataType::StringList
+ || inDataType == AdditionalMetaDataType::Range) {
+ if (inValue.empty() == true || inDataType != GetMetaDataValueType(inValue)) {
+ QT3DS_ASSERT(false);
+ if (inDataType == AdditionalMetaDataType::StringList)
+ return TMetaDataStringList();
+ if (inDataType == AdditionalMetaDataType::Range)
+ return SMetaDataRange(0, 1);
+ }
+ }
+ return inValue;
+ }
+
+ void SetPropertyBaseInfo(SMetaPropertyBase &newInfo, TStrType inName, TStrType inFormalName,
+ TStrType inDescription, TStrType inUsage,
+ CompleteMetaDataType::Enum inDataType, const SValue &inDefaultValue,
+ const TMetaDataData &inMetaData)
+ {
+ newInfo.m_Name = inName;
+ newInfo.m_FormalName = inFormalName;
+ newInfo.m_Description = inDescription;
+ newInfo.m_Usage = inUsage;
+ newInfo.m_CompleteType = inDataType;
+ newInfo.m_DefaultValue =
+ VerifyDefaultPropertyType(CompleteMetaDataType::ToDataType(inDataType),
+ inDefaultValue);
+ newInfo.m_MetaDataData =
+ VerifyMetaDataDataType(CompleteMetaDataType::ToAdditionalType(inDataType),
+ inMetaData);
+ }
+
+ // For properties, you set the default values separately
+ // This may delete the underlying data model property rebuild it.
+ void SetMetaDataPropertyInfo(Qt3DSDMMetaDataPropertyHandle inPropertyHandle,
+ TStrType inName, TStrType inFormalName,
+ TStrType inDescription, TStrType inUsage,
+ CompleteMetaDataType::Enum inDataType,
+ const SValue &inDefaultValue,
+ const TMetaDataData &inMetaData, TStrType inGroupName,
+ bool inIsHidden, bool inIsAnimatable,
+ bool inIsControllable) override
+ {
+ SMetaDataPropertyInfo *infoPtr = FindProperty(inPropertyHandle);
+ if (infoPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ SMetaDataPropertyInfo &newInfo(*infoPtr);
+ SMetaDataPropertyInfo oldInfo(newInfo);
+
+ SetPropertyBaseInfo(newInfo, inName, inFormalName, inDescription, inUsage, inDataType,
+ inDefaultValue, inMetaData);
+ newInfo.m_IsHidden = inIsHidden;
+ newInfo.m_Animatable = inIsAnimatable;
+ newInfo.m_Controllable = inIsControllable;
+ newInfo.m_GroupName = inGroupName;
+ EnsureDataCoreProperty(newInfo);
+
+ SetItemInfo(__FILE__, __LINE__, inPropertyHandle, oldInfo, newInfo, m_Properties,
+ m_InstanceNameToProperties);
+
+ SetPropertyDefault(newInfo, CompleteMetaDataType::ToDataType(inDataType));
+ }
+
+ void SetPropertyDefault(SMetaDataPropertyInfo &newInfo, DataModelDataType::Value inDataType)
+ {
+ if (newInfo.m_DefaultValue.empty() == false
+ && GetValueType(newInfo.m_DefaultValue) == inDataType) {
+ m_DataCore->SetInstancePropertyValue(newInfo.m_Instance, newInfo.m_Property,
+ newInfo.m_DefaultValue);
+ }
+ }
+
+ // Destroy just this meta data property
+ void DestroyMetaDataProperty(Qt3DSDMMetaDataPropertyHandle inProperty) override
+ {
+ SMetaDataPropertyInfo *infoPtr = FindProperty(inProperty);
+ if (infoPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ if (DestroyItem(__FILE__, __LINE__, inProperty,
+ m_Properties, m_InstanceNameToProperties, m_InstanceToProperties)) {
+ Q_EMIT internalMetaDataPropertyDestroyed(inProperty);
+ }
+
+ RemoveMetaDataPropertyFilters(inProperty);
+ }
+
+ Qt3DSDMMetaDataPropertyHandle GetMetaDataProperty(Qt3DSDMInstanceHandle inInstance,
+ TStrType inPropertyName) override
+ {
+ return FindItemByName<Qt3DSDMMetaDataPropertyHandle>(inInstance, Intern(inPropertyName),
+ m_InstanceNameToProperties);
+ }
+ Qt3DSDMMetaDataPropertyHandle GetMetaDataProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) override
+ {
+ Qt3DSDMPropertyDefinition propDef(m_DataCore->GetProperty(inProperty));
+ return GetMetaDataProperty(inInstance, propDef.m_Name);
+ }
+ // Sets the value in the data core
+ virtual Option<SMetaDataPropertyInfo>
+ GetMetaDataPropertyInfo(Qt3DSDMMetaDataPropertyHandle inProperty) override
+ {
+ SMetaDataPropertyInfo *infoPtr = FindProperty(inProperty);
+ if (infoPtr == NULL) {
+ return Empty();
+ }
+ return *infoPtr;
+ }
+
+ void GetMetaDataProperties(Qt3DSDMInstanceHandle inInstance,
+ vector<Qt3DSDMMetaDataPropertyHandle> &outProperties) override
+ {
+ return GetHandleList<Qt3DSDMMetaDataPropertyHandle>(inInstance, m_InstanceToProperties,
+ m_Properties, outProperties);
+ }
+ virtual Qt3DSDMMetaDataPropertyHandle
+ GetSpecificMetaDataProperty(Qt3DSDMInstanceHandle inInstance, TStrType inPropertyName)
+ {
+ TInstancePropertyNamePropertyMap::iterator theFind = m_InstanceNameToProperties.find(
+ make_pair(inInstance, m_StringTable.RegisterStr(inPropertyName.wide_str())));
+ if (theFind != m_InstanceNameToProperties.end())
+ return theFind->second;
+ return 0;
+ }
+ virtual Qt3DSDMMetaDataPropertyHandle
+ GetOrCreateSpecificMetaDataProperty(Qt3DSDMInstanceHandle inInstance,
+ TStrType inPropertyName) override
+ {
+ Qt3DSDMMetaDataPropertyHandle theProp(
+ GetSpecificMetaDataProperty(inInstance, inPropertyName));
+ if (theProp.Valid())
+ return theProp;
+ return CreateMetaDataProperty(inInstance);
+ }
+
+ void GetSpecificMetaDataProperties(Qt3DSDMInstanceHandle inInstance,
+ vector<Qt3DSDMMetaDataPropertyHandle> &outProperties) override
+ {
+ TInstancePropertyMap::iterator find = m_InstanceToProperties.find(inInstance);
+ if (find != m_InstanceToProperties.end())
+ outProperties.insert(outProperties.end(), find->second.begin(), find->second.end());
+ }
+
+ TCharStr GetFormalName(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) override
+ {
+ Qt3DSDMMetaDataPropertyHandle propHandle(GetMetaDataProperty(inInstance, inProperty));
+ SMetaDataPropertyInfo *infoPtr = FindProperty(propHandle);
+ if (infoPtr)
+ return infoPtr->m_FormalName;
+ return TCharStr();
+ }
+ AdditionalMetaDataType::Value GetAdditionalMetaDataType(
+ Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty) override
+ {
+ Qt3DSDMMetaDataPropertyHandle propHandle(GetMetaDataProperty(inInstance, inProperty));
+ SMetaDataPropertyInfo *infoPtr = FindProperty(propHandle);
+ if (infoPtr)
+ return infoPtr->GetAdditionalType();
+ return AdditionalMetaDataType::None;
+ }
+ TMetaDataData GetAdditionalMetaDataData(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) override
+ {
+ Qt3DSDMMetaDataPropertyHandle propHandle(GetMetaDataProperty(inInstance, inProperty));
+ SMetaDataPropertyInfo *infoPtr = FindProperty(propHandle);
+ if (propHandle.Valid())
+ return infoPtr->m_MetaDataData;
+ return TMetaDataData();
+ }
+
+ bool IsCustomInstance(Qt3DSDMInstanceHandle inInstance)
+ {
+ return m_InstancesToCanonicalType.find(inInstance) == m_InstancesToCanonicalType.end();
+ }
+
+ SValue GetDefaultValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) override
+ {
+ Qt3DSDMMetaDataPropertyHandle theProperty(GetMetaDataProperty(inInstance, inProperty));
+ if (theProperty.Valid() == false) {
+ QT3DS_ASSERT(false);
+ return SValue();
+ }
+ return FindProperty(theProperty)->m_DefaultValue;
+ }
+
+ bool IsCustomProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) override
+ {
+ Qt3DSDMMetaDataPropertyHandle propHandle(GetMetaDataProperty(inInstance, inProperty));
+ SMetaDataPropertyInfo *infoPtr = FindProperty(propHandle);
+ if (infoPtr)
+ return IsCustomInstance(infoPtr->m_Instance);
+
+ return false;
+ }
+
+ bool IsFilterValid(Qt3DSDMMetaDataPropertyHandle inProperty,
+ const SPropertyFilterInfo &inFilter)
+ {
+ SMetaDataPropertyInfo *infoPtr = FindProperty(inProperty);
+ if (m_DataCore->IsProperty(inFilter.m_FilterProperty) == false) {
+ QT3DS_ASSERT(false);
+ return false;
+ }
+
+ Qt3DSDMPropertyDefinition theProp(m_DataCore->GetProperty(inFilter.m_FilterProperty));
+ Qt3DSDMPropertyHandle propCheck =
+ m_DataCore->GetAggregateInstancePropertyByName(infoPtr->m_Instance, theProp.m_Name);
+ if (propCheck != inFilter.m_FilterProperty) {
+ QT3DS_ASSERT(false);
+ return false;
+ }
+
+ DataModelDataType::Value theType = GetValueType(inFilter.m_Value);
+ if (theType != theProp.m_Type) {
+ QT3DS_ASSERT(false);
+ return false;
+ }
+
+ return true;
+ }
+
+ void SetMetaDataPropertyFilters(Qt3DSDMMetaDataPropertyHandle inProperty,
+ NVConstDataRef<SPropertyFilterInfo> inFilters) override
+ {
+ SMetaDataPropertyInfo *infoPtr = FindProperty(inProperty);
+ if (infoPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+
+ eastl::vector<SPropertyFilterInfo> newFilters;
+ for (QT3DSU32 idx = 0, end = inFilters.size(); idx < end; ++idx) {
+ const SPropertyFilterInfo &theFilter(inFilters[idx]);
+ if (IsFilterValid(inProperty, theFilter))
+ newFilters.push_back(theFilter);
+ }
+
+ InsertOrUpdateWithTransaction(std::make_pair(inProperty, newFilters), m_PropertyFilters);
+ }
+
+ virtual NVConstDataRef<SPropertyFilterInfo>
+ GetMetaDataPropertyFilters(Qt3DSDMMetaDataPropertyHandle inProperty) override
+ {
+ TMetaDataPropertyFilterMap::iterator theIter(m_PropertyFilters.find(inProperty));
+ if (theIter != m_PropertyFilters.end())
+ return qt3ds::foundation::toDataRef(theIter->second.data(), theIter->second.size());
+ return NVConstDataRef<SPropertyFilterInfo>();
+ }
+
+ void RemoveMetaDataPropertyFilters(Qt3DSDMMetaDataPropertyHandle inProperty) override
+ {
+ TMetaDataPropertyFilterMap::iterator theIter(m_PropertyFilters.find(inProperty));
+ if (theIter != m_PropertyFilters.end())
+ EraseWithTransaction(__FILE__, __LINE__, inProperty, m_PropertyFilters);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Properties
+ Qt3DSDMEventHandle CreateMetaDataEvent(TInstanceHandle inInstance) override
+ {
+ return CreateItem<Qt3DSDMEventHandle, SEvent>(__FILE__, __LINE__, inInstance, m_Events,
+ m_InstanceToEvents);
+ }
+
+ void SetEventInfo(Qt3DSDMEventHandle inEventHandle, TStrType inName,
+ TStrType inFormalName, TStrType inCategory, TStrType inDescription) override
+ {
+ SEvent *infoPtr = FindEvent(inEventHandle);
+ if (infoPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ SEvent &newInfo(*infoPtr);
+ SEvent oldInfo(newInfo);
+ newInfo.m_Name = inName;
+ newInfo.m_FormalName = inFormalName;
+ newInfo.m_Category = inCategory;
+ newInfo.m_Description = inDescription;
+ SetItemInfo(__FILE__, __LINE__, inEventHandle, oldInfo, newInfo, m_Events,
+ m_InstanceNameToEvents);
+ }
+
+ void DestroyEvent(Qt3DSDMEventHandle inEventHandle) override
+ {
+ if (DestroyItem(__FILE__, __LINE__, inEventHandle, m_Events,
+ m_InstanceNameToEvents, m_InstanceToEvents)) {
+ Q_EMIT internalEventDestroyed(inEventHandle);
+ }
+ }
+
+ void GetEvents(Qt3DSDMInstanceHandle inInstance, TEventHandleList &outEvents) override
+ {
+ return GetHandleList<Qt3DSDMEventHandle>(inInstance, m_InstanceToEvents, m_Events,
+ outEvents);
+ }
+
+ Qt3DSDMEventHandle FindEvent(Qt3DSDMInstanceHandle inInstance, TStrType inName) override
+ {
+ return FindItemByName<Qt3DSDMEventHandle>(inInstance, Intern(inName),
+ m_InstanceNameToEvents);
+ }
+
+ Option<SEventInfo> GetEventInfo(Qt3DSDMEventHandle inEventHandle) override
+ {
+ SEvent *infoPtr = FindEvent(inEventHandle);
+ if (infoPtr == NULL) {
+ return Empty();
+ }
+ SEventInfo retval;
+ retval.m_Name = infoPtr->m_Name;
+ retval.m_FormalName = infoPtr->m_FormalName;
+ retval.m_Description = infoPtr->m_Description;
+ retval.m_Category = infoPtr->m_Category;
+ return retval;
+ }
+
+ bool IsCustomEvent(Qt3DSDMEventHandle inEventHandle) override
+ {
+ SEvent *infoPtr = FindEvent(inEventHandle);
+ if (infoPtr != NULL)
+ return IsCustomInstance(infoPtr->m_Instance);
+ return false;
+ }
+
+ void GetSpecificEvents(Qt3DSDMInstanceHandle inInstance, TEventHandleList &outEvents) override
+ {
+ TInstanceEventMap::iterator theFind(m_InstanceToEvents.find(inInstance));
+ if (theFind != m_InstanceToEvents.end())
+ outEvents.insert(outEvents.end(), theFind->second.begin(), theFind->second.end());
+ }
+
+ Qt3DSDMEventHandle GetOrCreateSpecificEvent(Qt3DSDMInstanceHandle inInstance,
+ TStrType inName) override
+ {
+ TInstanceEventNameEventMap::iterator theFind(
+ m_InstanceNameToEvents.find(make_pair(inInstance, Intern(inName))));
+ if (theFind != m_InstanceNameToEvents.end())
+ return theFind->second;
+ return CreateMetaDataEvent(inInstance);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Handlers
+
+ Qt3DSDMHandlerHandle CreateHandler(Qt3DSDMInstanceHandle inInstance) override
+ {
+ return CreateItem<Qt3DSDMHandlerHandle, SHandler>(__FILE__, __LINE__, inInstance,
+ m_Handlers, m_InstanceToHandlers);
+ }
+
+ void SetHandlerInfo(Qt3DSDMHandlerHandle inHandle, TStrType inName,
+ TStrType inFormalName, TStrType inCategoryName,
+ TStrType inDescription) override
+ {
+ SHandler *infoPtr = FindHandler(inHandle);
+ if (infoPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ SHandler &newInfo(*infoPtr);
+ SHandler oldInfo(newInfo);
+ newInfo.m_Name = inName;
+ newInfo.m_FormalName = inFormalName;
+ newInfo.m_Description = inDescription;
+ newInfo.m_Category = inCategoryName;
+ SetItemInfo(__FILE__, __LINE__, inHandle, oldInfo, newInfo, m_Handlers,
+ m_InstanceNameToHandlers);
+ }
+
+ void DestroyHandler(Qt3DSDMHandlerHandle inHandlerHandle) override
+ {
+ SHandler *infoPtr(FindHandler(inHandlerHandle));
+ if (infoPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ while (infoPtr->m_Arguments.empty() == false)
+ DestroyHandlerArgument(inHandlerHandle, (QT3DSU32)infoPtr->m_Arguments.size() - 1);
+ if (DestroyItem(__FILE__, __LINE__, inHandlerHandle, m_Handlers,
+ m_InstanceNameToHandlers, m_InstanceToHandlers)) {
+ Q_EMIT internalHandlerDestroyed(inHandlerHandle);
+ }
+ }
+
+ Qt3DSDMHandlerHandle FindHandlerByName(Qt3DSDMInstanceHandle inInstance,
+ TStrType inName) override
+ {
+ return FindItemByName<Qt3DSDMHandlerHandle>(inInstance, Intern(inName),
+ m_InstanceNameToHandlers);
+ }
+
+ Option<SHandlerInfo> GetHandlerInfo(Qt3DSDMHandlerHandle inHandlerHandle) override
+ {
+ SHandler *infoPtr = FindHandler(inHandlerHandle);
+ if (infoPtr == NULL)
+ return Empty();
+
+ SHandlerInfo retval;
+ retval.m_Name = infoPtr->m_Name;
+ retval.m_FormalName = infoPtr->m_FormalName;
+ retval.m_Category = infoPtr->m_Category;
+ retval.m_Description = infoPtr->m_Description;
+
+ return retval;
+ }
+
+ void GetHandlers(Qt3DSDMInstanceHandle inInstance, THandlerHandleList &outHandlers) override
+ {
+ return GetHandleList<Qt3DSDMHandlerHandle>(inInstance, m_InstanceToHandlers, m_Handlers,
+ outHandlers);
+ }
+
+ bool IsCustomHandler(Qt3DSDMHandlerHandle inHandle) override
+ {
+ SHandler *infoPtr = FindHandler(inHandle);
+ if (infoPtr != NULL)
+ return IsCustomInstance(infoPtr->m_Instance);
+ return false;
+ }
+
+ void GetSpecificHandlers(Qt3DSDMInstanceHandle inInstance,
+ THandlerHandleList &outHandlers) override
+ {
+ TInstanceHandlerMap::iterator theFind = m_InstanceToHandlers.find(inInstance);
+ if (theFind != m_InstanceToHandlers.end())
+ outHandlers.insert(outHandlers.end(), theFind->second.begin(), theFind->second.end());
+ }
+
+ Qt3DSDMHandlerHandle GetOrCreateSpecificHandler(Qt3DSDMInstanceHandle inInstance,
+ TStrType inName) override
+ {
+ TInstanceHandlerNameHandlerMap::iterator theFind =
+ m_InstanceNameToHandlers.find(make_pair(inInstance, Intern(inName)));
+ if (theFind != m_InstanceNameToHandlers.end())
+ return theFind->second;
+ return CreateHandler(inInstance);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Handler Arguments
+
+ void DoAddHandlerArgument(Qt3DSDMHandlerHandle inHandler,
+ const SMetaDataHandlerArgumentInfo &inArgHandle, QT3DSU32 inIdx)
+ {
+ SHandler *infoPtr = FindHandler(inHandler);
+ if (infoPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ infoPtr->m_Arguments.insert(infoPtr->m_Arguments.begin() + inIdx, inArgHandle);
+ }
+
+ struct ArgNameEqual
+ {
+ const TCharStr &m_Name;
+ ArgNameEqual(const TCharStr &nm)
+ : m_Name(nm)
+ {
+ }
+ bool operator()(const SMetaDataHandlerArgumentInfo &info) const
+ {
+ return m_Name == info.m_Name;
+ }
+ };
+
+ void DoRemoveHandlerArgument(Qt3DSDMHandlerHandle inHandler,
+ const SMetaDataHandlerArgumentInfo &inArgHandle)
+ {
+ SHandler *infoPtr = FindHandler(inHandler);
+ if (infoPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ erase_if(infoPtr->m_Arguments, ArgNameEqual(inArgHandle.m_Name));
+ }
+
+ struct HandlerArgumentAddRemoveTransaction : public ITransaction
+ {
+ SNewMetaDataImpl &m_Impl;
+ Qt3DSDMHandlerHandle m_Handler;
+ SMetaDataHandlerArgumentInfo m_Arg;
+ QT3DSU32 m_Idx;
+ bool m_AddOnDo;
+
+ HandlerArgumentAddRemoveTransaction(const char *inFile, int inLine, SNewMetaDataImpl &impl,
+ Qt3DSDMHandlerHandle hdl,
+ const SMetaDataHandlerArgumentInfo &arg, QT3DSU32 inIdx,
+ bool inAddOnDo)
+ : ITransaction(inFile, inLine)
+ , m_Impl(impl)
+ , m_Handler(hdl)
+ , m_Arg(arg)
+ , m_Idx(inIdx)
+ , m_AddOnDo(inAddOnDo)
+ {
+ }
+ void insert() { m_Impl.DoAddHandlerArgument(m_Handler, m_Arg, m_Idx); }
+ void remove() { m_Impl.DoRemoveHandlerArgument(m_Handler, m_Arg); }
+ void Do() override
+ {
+ if (m_AddOnDo)
+ insert();
+ else
+ remove();
+ }
+ void Undo() override
+ {
+ if (m_AddOnDo)
+ remove();
+ else
+ insert();
+ }
+ };
+
+ QT3DSU32 AddHandlerArgument(Qt3DSDMHandlerHandle inHandler) override
+ {
+ SHandler *infoPtr = FindHandler(inHandler);
+ if (infoPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return 0;
+ }
+
+ SMetaDataHandlerArgumentInfo theInfo(inHandler);
+ QT3DSU32 idx = (QT3DSU32)infoPtr->m_Arguments.size();
+ DoAddHandlerArgument(inHandler, theInfo, idx);
+ if (m_Consumer)
+ m_Consumer->OnTransaction(make_shared<HandlerArgumentAddRemoveTransaction>(
+ __FILE__, __LINE__, ref(*this), inHandler, theInfo,
+ idx, true));
+
+ return idx;
+ }
+
+ void DoSetHandlerArgument(THandlerHandle inHandler, QT3DSU32 inIdx,
+ const SMetaDataHandlerArgumentInfo &inInfo)
+ {
+ SMetaDataHandlerArgumentInfo *infoPtr(FindHandlerArg(inHandler, inIdx));
+ if (infoPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ *infoPtr = inInfo;
+ }
+
+ struct SetHandlerArgumentInfoTrans : public ITransaction
+ {
+ SNewMetaDataImpl &m_Impl;
+ THandlerHandle m_Handler;
+ QT3DSU32 m_Idx;
+ SMetaDataHandlerArgumentInfo m_NewValue;
+ SMetaDataHandlerArgumentInfo m_OldValue;
+ SetHandlerArgumentInfoTrans(const char *inFile, int inLine, SNewMetaDataImpl &impl,
+ THandlerHandle handler, QT3DSU32 inIdx,
+ const SMetaDataHandlerArgumentInfo &inNewVal,
+ const SMetaDataHandlerArgumentInfo &inOldVal)
+ : ITransaction(inFile, inLine)
+ , m_Impl(impl)
+ , m_Handler(handler)
+ , m_Idx(inIdx)
+ , m_NewValue(inNewVal)
+ , m_OldValue(inOldVal)
+ {
+ }
+ void Do() override { m_Impl.DoSetHandlerArgument(m_Handler, m_Idx, m_NewValue); }
+ void Undo() override { m_Impl.DoSetHandlerArgument(m_Handler, m_Idx, m_OldValue); }
+ };
+
+ void SetHandlerArgumentInfo(THandlerHandle inHandler, QT3DSU32 inIdx, TStrType inName,
+ TStrType inFormalName, TStrType inDescription,
+ CompleteMetaDataType::Enum inDataType,
+ const SValue &inDefaultValue,
+ const TMetaDataData &inMetaData,
+ HandlerArgumentType::Value inArgType) override
+ {
+ SMetaDataHandlerArgumentInfo *infoPtr(FindHandlerArg(inHandler, inIdx));
+ if (infoPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ SMetaDataHandlerArgumentInfo &newInfo(*infoPtr);
+ SMetaDataHandlerArgumentInfo oldInfo(newInfo);
+ SetPropertyBaseInfo(newInfo, inName, inFormalName, inDescription, L"", inDataType,
+ inDefaultValue, inMetaData);
+ newInfo.m_ArgType = inArgType;
+ if (m_Consumer != NULL)
+ m_Consumer->OnTransaction(make_shared<SetHandlerArgumentInfoTrans>(
+ __FILE__, __LINE__, ref(*this), inHandler, inIdx,
+ newInfo, oldInfo));
+ }
+
+ void DestroyHandlerArgument(THandlerHandle inHandler, QT3DSU32 inIdx) override
+ {
+ SHandler *ownerPtr = FindHandler(inHandler);
+ SMetaDataHandlerArgumentInfo *infoPtr(FindHandlerArg(inHandler, inIdx));
+ if (infoPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ if (ownerPtr == NULL) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+
+ Q_EMIT internalHandlerArgDestroyed(inHandler, inIdx);
+
+ if (m_Consumer)
+ m_Consumer->OnTransaction(make_shared<HandlerArgumentAddRemoveTransaction>(
+ __FILE__, __LINE__, ref(*this), infoPtr->m_Handler,
+ *infoPtr, inIdx, false));
+
+ DoRemoveHandlerArgument(infoPtr->m_Handler, *infoPtr);
+ }
+
+ Option<SMetaDataHandlerArgumentInfo> FindHandlerArgumentByName(THandlerHandle inHandler,
+ TStrType inName) override
+ {
+ SHandler *ownerPtr = FindHandler(inHandler);
+ if (ownerPtr == NULL) {
+ return Empty();
+ }
+ for (size_t idx = 0, end = ownerPtr->m_Arguments.size(); idx < end; ++idx) {
+ if (ownerPtr->m_Arguments[idx].m_Name == inName)
+ return ownerPtr->m_Arguments[idx];
+ }
+ return Empty();
+ }
+
+ void GetHandlerArguments(THandlerHandle inHandler,
+ vector<SMetaDataHandlerArgumentInfo> &outArguments) override
+ {
+ SHandler *ownerPtr = FindHandler(inHandler);
+ if (ownerPtr == NULL) {
+ return;
+ }
+ outArguments.insert(outArguments.end(), ownerPtr->m_Arguments.begin(),
+ ownerPtr->m_Arguments.end());
+ }
+
+ virtual Option<SMetaDataHandlerArgumentInfo>
+ GetHandlerArgumentInfo(Qt3DSDMHandlerHandle inHandle, QT3DSU32 inIdx) override
+ {
+ SMetaDataHandlerArgumentInfo *infoPtr(FindHandlerArg(inHandle, inIdx));
+ if (infoPtr == NULL) {
+ return Empty();
+ }
+ return *infoPtr;
+ }
+
+ QT3DSU32 GetNumHandlerArguments(Qt3DSDMHandlerHandle inHandler) override
+ {
+ SHandler *ownerPtr = FindHandler(inHandler);
+ if (ownerPtr == NULL) {
+ return 0;
+ }
+ return (QT3DSU32)ownerPtr->m_Arguments.size();
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // References
+ void AddReference(Qt3DSDMInstanceHandle inInstance, TStrType inRefString) override
+ {
+ // trim whitespace from the beginning and the end of the string
+ TCharStr::size_type startPos = inRefString.find_first_not_of(L"\n\r\t ");
+ TCharStr::size_type endPos = inRefString.find_last_not_of(L"\n\r\t ");
+ const wchar_t *theStr = NULL;
+ if (startPos != TCharStr::npos) {
+ TStrType temp = inRefString.substr(startPos, endPos - startPos + 1);
+ theStr = Intern(temp);
+ } else
+ theStr = Intern(inRefString);
+
+ QT3DSU32 idx = AddItemToInstanceList(inInstance, theStr, m_InstanceToReferences);
+ if (m_Consumer) {
+ m_Consumer->OnTransaction(
+ std::make_shared<InstanceListTransaction<TInstanceStringListMap,
+ const wchar_t *>>(
+ __FILE__, __LINE__, inInstance, theStr,
+ std::ref(m_InstanceToReferences), idx,
+ true));
+ }
+ }
+
+ void DestroyReferences(Qt3DSDMInstanceHandle inInstance) override
+ {
+ TInstanceStringListMap::iterator find = m_InstanceToReferences.find(inInstance);
+
+ if (find == m_InstanceToReferences.end())
+ return;
+
+ CreateHashMapEraseTransaction(__FILE__, __LINE__, m_Consumer,
+ make_pair(find->first, find->second), m_InstanceToReferences);
+ m_InstanceToReferences.erase(find);
+ }
+
+ struct InternSizeTOpType
+ {
+ SNewMetaDataImpl &m_Impl;
+ InternSizeTOpType(SNewMetaDataImpl &inImpl)
+ : m_Impl(inImpl)
+ {
+ }
+
+ size_t operator()(const TCharStr &inHandle)
+ {
+ return reinterpret_cast<size_t>(m_Impl.Intern(inHandle));
+ }
+ };
+
+ void GetReferences(Qt3DSDMInstanceHandle inInstance, vector<TCharStr> &outReferences) override
+ {
+ DoGetHandleList(inInstance, m_InstanceToReferences, outReferences,
+ InternSizeTOpType(*this));
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Instance-global functions
+ // Destroy all meta data that relates to this instance.
+ // Calling this on a derived instance does nothing, this only works if this specific
+ // instance was mapped to a type.
+ // This function must be completely undoable.
+ void DestroyMetaData(Qt3DSDMInstanceHandle inInstance) override
+ {
+ ForEachItem<TMetaDataPropertyHandle>(
+ inInstance, m_InstanceToProperties,
+ bind(&SNewMetaDataImpl::DestroyMetaDataProperty, this,
+ std::placeholders::_1));
+ ForEachItem<TEventHandle>(inInstance, m_InstanceToEvents,
+ bind(&SNewMetaDataImpl::DestroyEvent, this,
+ std::placeholders::_1));
+ ForEachItem<THandlerHandle>(inInstance, m_InstanceToHandlers,
+ bind(&SNewMetaDataImpl::DestroyHandler, this,
+ std::placeholders::_1));
+ DestroyReferences(inInstance);
+
+ TInstanceStrMap::iterator find = m_InstancesToCanonicalType.find(inInstance);
+ if (find != m_InstancesToCanonicalType.end()) {
+ TCharPtr theName(find->second);
+ m_CanonicalTypeToInstances.erase(theName);
+ m_InstancesToCanonicalType.erase(inInstance);
+ CreateHashMapEraseTransaction(__FILE__, __LINE__, m_Consumer,
+ make_pair(theName, inInstance),
+ m_CanonicalTypeToInstances);
+ CreateHashMapEraseTransaction(__FILE__, __LINE__, m_Consumer,
+ make_pair(inInstance, theName),
+ m_InstancesToCanonicalType);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Serialization
+ // You can either save out in canonical format (and it will only save canonical-instance-related
+ // information *or* you can save out in normal format where we link directly to instance handle
+ // instead of to typename
+ template <typename THashType>
+ void AddInstancesFromHash(THashType &inHash,
+ unordered_set<TInstanceHandle, hash<int>> &outInstances)
+ {
+ for (typename THashType::const_iterator iter = inHash.begin(), end = inHash.end();
+ iter != end; ++iter)
+ outInstances.insert(iter->first);
+ }
+
+ void SerializeMetaDataData(IDOMWriter &inWriter, TMetaDataData &inItem,
+ AdditionalMetaDataType::Value inType)
+ {
+ if (!inItem.empty()) {
+ if (inType == AdditionalMetaDataType::Range) {
+ SMetaDataRange theRange(get<SMetaDataRange>(inItem));
+ inWriter.Att(L"min", theRange.m_min);
+ inWriter.Att(L"max", theRange.m_max);
+ inWriter.Att(L"decimals", theRange.m_decimals);
+ } else if (inType == AdditionalMetaDataType::StringList) {
+ const TMetaDataStringList &theList(get<TMetaDataStringList>(inItem));
+ TCharStr theBuffer;
+ for (uint32_t idx = 0, end = theList.size(); idx < end; ++idx) {
+ if (idx)
+ theBuffer.append(L":");
+ theBuffer.append(theList[idx]);
+ }
+ inWriter.Att(L"list", theBuffer.wide_str());
+ }
+ }
+ }
+
+ void SerializeDataModelValue(IDOMWriter &inWriter, const SValue &inValue,
+ DataModelDataType::Value /*inType*/,
+ const wchar_t *inName = L"default")
+ {
+ if (inValue.empty())
+ return;
+
+ m_TempBuffer.clear();
+ WCharTWriter writer(m_TempBuffer);
+ WStrOps<SValue>().ToBuf(inValue, writer);
+
+ if (m_TempBuffer.size()) {
+ m_TempBuffer.write((QT3DSU16)0);
+ inWriter.Att(inName, (const wchar_t *)m_TempBuffer.begin());
+ }
+ }
+
+ void SerializeDataModelValue(IDOMReader &inReader, SValue &outValue,
+ DataModelDataType::Value inType,
+ const wchar_t *inName = L"default")
+ {
+ const char8_t *theDefaultValue;
+ qt3ds::foundation::ConvertUTF(
+ reinterpret_cast<const qt3ds::foundation::TWCharEASTLConverter::TCharType *>(
+ inName), 0,
+ m_ConvertStr);
+ if (inReader.UnregisteredAtt(m_ConvertStr.c_str(), theDefaultValue)) {
+ m_TempBuffer.clear();
+ // We have to write a temporary value because the parsing of floats,
+ // in order to be efficient, is destructive.
+ if (theDefaultValue && *theDefaultValue)
+ m_TempBuffer.write(theDefaultValue, (QT3DSU32)strlen(theDefaultValue) + 1);
+
+ if (m_TempBuffer.size() == 0) {
+ SetDefault(inType, outValue);
+ return;
+ }
+ m_ReadBuffer.clear();
+
+ char8_t *trashPtr = (char8_t *)m_TempBuffer.begin();
+ WCharTReader theReader(trashPtr, m_ReadBuffer, m_StringTable);
+ outValue = WStrOps<SValue>().BufTo(inType, theReader);
+ } else
+ SetDefault(inType, outValue);
+ }
+
+ void SerializeMetaDataData(IDOMReader &inReader, TMetaDataData &ioItem,
+ CompleteMetaDataType::Enum &ioType)
+ {
+ // Use the meta data extra information to force the type
+ // to something that works correctly.
+ SMetaDataRange theRange;
+ if (inReader.Att("min", theRange.m_min) && inReader.Att("max", theRange.m_max)) {
+ inReader.Att("decimals", theRange.m_decimals);
+ ioItem = theRange;
+ if (ioType == CompleteMetaDataType::Long)
+ ioType = CompleteMetaDataType::LongRange;
+ else
+ ioType = CompleteMetaDataType::FloatRange;
+ } else {
+ TMetaDataStringList theList;
+ TCharStr theItems;
+ if (inReader.Att(L"list", theItems)) {
+ for (TCharStr::size_type theIter = theItems.find_first_of(L":,");
+ theIter != theItems.npos; theIter = theItems.find_first_of(L":,")) {
+ theList.push_back(theItems.substr(0, theIter));
+ theItems = theItems.substr(theIter + 1);
+ }
+ theList.push_back(theItems);
+ ioItem = theList;
+ if (ioType != CompleteMetaDataType::StringListOrInt)
+ ioType = CompleteMetaDataType::StringList;
+ }
+ }
+ }
+ void EnsureCategory(IDOMWriter &, const TCharStr &, const TCharStr &) {}
+ void EnsureCategory(IDOMReader &, TCharStr &inCategory, const TCharStr &inObjectName)
+ {
+ Qt3DSDMCategoryHandle theCategory = FindCategoryByName(inCategory);
+ if (theCategory.Valid() == false) {
+ if (inObjectName.empty()) {
+ QT3DS_ASSERT(false);
+ } else {
+ if (inCategory.empty())
+ inCategory = inObjectName;
+
+ pair<Qt3DSDMCategoryHandle, bool> theGetOrCreateResult(
+ GetOrCreateCategory(inCategory));
+
+ if (theGetOrCreateResult.second == true) {
+ SetCategoryInfo(theGetOrCreateResult.first, L"Objects-Behavior-Normal.png",
+ L"Objects-Behavior-Normal.png", inCategory);
+ }
+ }
+ }
+ }
+
+ void SerializePropertyBase(IDOMWriter &inArchive, SMetaPropertyBase &inItem)
+ {
+ inArchive.Att(L"name", inItem.m_Name);
+ if (inItem.m_FormalName != inItem.m_Name)
+ inArchive.Att(L"formalName", inItem.m_FormalName);
+ if (inItem.m_Description != inItem.m_Name)
+ inArchive.Att(L"description", inItem.m_Description);
+ if (inItem.m_CompleteType != CompleteMetaDataType::Float
+ && inItem.m_CompleteType != CompleteMetaDataType::FloatRange
+ && inItem.m_CompleteType != CompleteMetaDataType::LongRange
+ && inItem.m_CompleteType != CompleteMetaDataType::StringList) {
+ inArchive.Att(L"type", inItem.m_CompleteType);
+ }
+
+ // Ensure that all types work
+ if (inItem.GetAdditionalType() != AdditionalMetaDataType::None)
+ SerializeMetaDataData(inArchive, inItem.m_MetaDataData, inItem.GetAdditionalType());
+
+ if (inItem.GetDataType() != DataModelDataType::None) {
+ SValue theGlobalDefault;
+ SetDefault(inItem.GetDataType(), theGlobalDefault);
+ if (!Equals(theGlobalDefault.toOldSkool(), inItem.m_DefaultValue.toOldSkool()))
+ SerializeDataModelValue(inArchive, inItem.m_DefaultValue, inItem.GetDataType());
+ }
+ }
+
+ void SerializePropertyBase(IDOMReader &inArchive, SMetaPropertyBase &inItem)
+ {
+ inArchive.Att(L"name", inItem.m_Name);
+ inArchive.Att(L"formalName", inItem.m_FormalName);
+ inArchive.Att(L"usage", inItem.m_Usage);
+ inArchive.Att(L"description", inItem.m_Description);
+ inArchive.Att(L"type", inItem.m_CompleteType);
+ // Setup reasonable defaults in the case where the users are specifying little information
+ // in the file format
+ if (inItem.m_FormalName.empty())
+ inItem.m_FormalName = inItem.m_Name;
+ if (inItem.m_Description.empty())
+ inItem.m_Description = inItem.m_FormalName;
+
+ // Ensure that users can use a float type and make minimal decisions
+ SerializeMetaDataData(inArchive, inItem.m_MetaDataData, inItem.m_CompleteType);
+
+ if (inItem.GetDataType() != DataModelDataType::None)
+ SerializeDataModelValue(inArchive, inItem.m_DefaultValue, inItem.GetDataType());
+ }
+
+ void FinalizeCategory(IDOMWriter &, SCategoryInfo &) {}
+
+ void FinalizeCategory(IDOMReader &, SCategoryInfo &inCategory)
+ {
+ if (inCategory.m_Description.empty())
+ inCategory.m_Description = inCategory.m_Name;
+ }
+
+ template <typename TArchiveType>
+ void SerializeItem(TArchiveType &inArchive, SCategoryInfo &inItem)
+ {
+ inArchive.Att(L"name", inItem.m_Name);
+ inArchive.Att(L"description", inItem.m_Description);
+ inArchive.Att(L"icon", inItem.m_Icon);
+ inArchive.Att(L"highlightIcon", inItem.m_HighlightIcon);
+
+ FinalizeCategory(inArchive, inItem);
+ }
+
+ void SerializeItem(IDOMWriter &inArchive, SMetaDataPropertyInfo &inItem,
+ Qt3DSDMMetaDataPropertyHandle inHandle)
+ {
+ SerializePropertyBase(inArchive, inItem);
+ if (inItem.m_IsHidden == true)
+ inArchive.Att("hidden", inItem.m_IsHidden);
+ if (inItem.m_Animatable == false)
+ inArchive.Att("animatable", inItem.m_Animatable);
+ if (inItem.m_Controllable == true)
+ inArchive.Att("controllable", inItem.m_Controllable);
+ NVConstDataRef<SPropertyFilterInfo> theInfos = GetMetaDataPropertyFilters(inHandle);
+ for (QT3DSU32 idx = 0, end = theInfos.size(); idx < end; ++idx) {
+ const SPropertyFilterInfo &theInfo(theInfos[idx]);
+ Qt3DSDMPropertyDefinition thePropertyInfo(
+ m_DataCore->GetProperty(theInfo.m_FilterProperty));
+
+ const wchar_t *theFilterName;
+ if (theInfo.m_FilterType == PropertyFilterTypes::HideIfEqual)
+ theFilterName = L"HideIfEqual";
+ else
+ theFilterName = L"ShowIfEqual";
+
+ IDOMWriter::Scope filterScope(inArchive, theFilterName);
+ inArchive.Att(L"property", thePropertyInfo.m_Name);
+ SerializeDataModelValue(inArchive, theInfo.m_Value, thePropertyInfo.m_Type, L"value");
+ }
+ }
+
+ void SerializeItem(IDOMReader &inArchive, SMetaDataPropertyInfo &inItem,
+ Qt3DSDMMetaDataPropertyHandle inHandle)
+ {
+ QT3DS_ASSERT(inHandle.Valid());
+
+ SerializePropertyBase(inArchive, inItem);
+ inArchive.Att("hidden", inItem.m_IsHidden);
+ inArchive.Att("animatable", inItem.m_Animatable);
+ inArchive.Att("controllable", inItem.m_Controllable);
+ inArchive.Att(L"category", inItem.m_GroupName);
+ }
+
+ void ReadChildren(IDOMReader &inArchive, SMetaDataPropertyInfo &inItem,
+ Qt3DSDMMetaDataPropertyHandle inHandle)
+ {
+ IDOMReader::Scope __readerScope(inArchive);
+ eastl::vector<SPropertyFilterInfo> theFilters;
+ for (bool success = inArchive.MoveToFirstChild(); success;
+ success = inArchive.MoveToNextSibling()) {
+
+ if (AreEqual(inArchive.GetElementName(), L"ShowIfEqual")) {
+ TCharStr theName;
+ inArchive.Att(L"property", theName);
+ Qt3DSDMPropertyHandle theProperty =
+ m_DataCore->GetAggregateInstancePropertyByName(inItem.m_Instance, theName);
+ if (theProperty.Valid() == false) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ Qt3DSDMPropertyDefinition thePropDef(m_DataCore->GetProperty(theProperty));
+
+ SPropertyFilterInfo theInfo;
+ theInfo.m_FilterType = PropertyFilterTypes::ShowIfEqual;
+ theInfo.m_FilterProperty = theProperty;
+ SerializeDataModelValue(inArchive, theInfo.m_Value, thePropDef.m_Type, L"value");
+ theFilters.push_back(theInfo);
+ } else if (AreEqual(inArchive.GetElementName(), L"HideIfEqual")) {
+ TCharStr theName;
+ inArchive.Att(L"property", theName);
+ Qt3DSDMPropertyHandle theProperty =
+ m_DataCore->GetAggregateInstancePropertyByName(inItem.m_Instance, theName);
+ if (theProperty.Valid() == false) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ Qt3DSDMPropertyDefinition thePropDef(m_DataCore->GetProperty(theProperty));
+
+ SPropertyFilterInfo theInfo;
+ theInfo.m_FilterType = PropertyFilterTypes::HideIfEqual;
+ theInfo.m_FilterProperty = theProperty;
+ SerializeDataModelValue(inArchive, theInfo.m_Value, thePropDef.m_Type, L"value");
+ theFilters.push_back(theInfo);
+ } else {
+ QT3DS_ASSERT(false);
+ }
+ }
+ if (theFilters.size())
+ SetMetaDataPropertyFilters(
+ inHandle, qt3ds::foundation::toDataRef(theFilters.data(),
+ theFilters.size()));
+ }
+
+ void EnsureEventHandlerBase(IDOMWriter &, SEventAndHandlerBase &) {}
+
+ void EnsureEventHandlerBase(IDOMReader &, SEventAndHandlerBase &inItem)
+ {
+ if (inItem.m_FormalName.empty())
+ inItem.m_FormalName = inItem.m_Name;
+ if (inItem.m_Description.empty())
+ inItem.m_Description = inItem.m_Name;
+ }
+
+ void SerializeItem(IDOMWriter &inArchive, SEvent &inItem, Qt3DSDMEventHandle &)
+ {
+ inArchive.Att(L"name", inItem.m_Name);
+ if (inItem.m_Name != inItem.m_FormalName)
+ inArchive.Att(L"formalName", inItem.m_FormalName);
+ if (inItem.m_Category != L"Default")
+ inArchive.Att(L"category", inItem.m_Category);
+ if (inItem.m_Description != inItem.m_Name)
+ inArchive.Att(L"description", inItem.m_Description);
+
+ EnsureCategory(inArchive, inItem.m_Category, m_ObjectName);
+ EnsureEventHandlerBase(inArchive, inItem);
+ }
+
+ void SerializeItem(IDOMReader &inArchive, SEvent &inItem, Qt3DSDMEventHandle &)
+ {
+ inArchive.Att(L"name", inItem.m_Name);
+ inArchive.Att(L"formalName", inItem.m_FormalName);
+ inArchive.Att(L"category", inItem.m_Category);
+ EnsureCategory(inArchive, inItem.m_Category, m_ObjectName);
+ inArchive.Att(L"description", inItem.m_Description);
+ EnsureEventHandlerBase(inArchive, inItem);
+ }
+
+ void SerializeHandlerArgument(IDOMWriter &inArchive, SMetaDataHandlerArgumentInfo &inArgument)
+ {
+ SerializePropertyBase(inArchive, inArgument);
+ if (inArgument.m_ArgType != HandlerArgumentType::None)
+ inArchive.Att(L"argumentType", inArgument.m_ArgType);
+ }
+
+ void SerializeHandlerArgument(IDOMReader &inArchive, SMetaDataHandlerArgumentInfo &inArgument)
+ {
+ SerializePropertyBase(inArchive, inArgument);
+ inArchive.Att(L"argumentType", inArgument.m_ArgType);
+ }
+
+ void SerializeHandlerArguments(IDOMWriter &inWriter, SHandler &inItem, Qt3DSDMHandlerHandle &)
+ {
+ for (size_t idx = 0, end = inItem.m_Arguments.size(); idx < end; ++idx) {
+ SMetaDataHandlerArgumentInfo &theArg(inItem.m_Arguments[idx]);
+ IDOMWriter::Scope __argScope(inWriter, L"Argument");
+ SerializeHandlerArgument(inWriter, theArg);
+ }
+ }
+
+ void SerializeHandlerArguments(IDOMReader &inReader, SHandler &inItem, THandlerHandle &inHandle)
+ {
+ if (inHandle.GetHandleValue() == 0)
+ inHandle = THandlerHandle(GetNextId());
+
+ IDOMReader::Scope __handlerScope(inReader);
+ for (bool success = inReader.MoveToFirstChild(); success;
+ success = inReader.MoveToNextSibling()) {
+ SMetaDataHandlerArgumentInfo theArg(inHandle);
+ SerializeHandlerArgument(inReader, theArg);
+ inItem.m_Arguments.push_back(theArg);
+ }
+ }
+
+ void SerializeHandlerItem(IDOMWriter &inArchive, SHandler &inItem)
+ {
+ inArchive.Att(L"name", inItem.m_Name);
+ if (inItem.m_FormalName != inItem.m_Name)
+ inArchive.Att(L"formalName", inItem.m_FormalName);
+ if (inItem.m_Category != L"Default")
+ inArchive.Att(L"category", inItem.m_Category);
+ if (inItem.m_Description != inItem.m_Name)
+ inArchive.Att(L"description", inItem.m_Description);
+ EnsureEventHandlerBase(inArchive, inItem);
+ }
+
+ void SerializeHandlerItem(IDOMReader &inArchive, SHandler &inItem)
+ {
+ inArchive.Att(L"name", inItem.m_Name);
+ inArchive.Att(L"formalName", inItem.m_FormalName);
+ inArchive.Att(L"category", inItem.m_Category);
+ EnsureCategory(inArchive, inItem.m_Category, m_ObjectName);
+ inArchive.Att(L"description", inItem.m_Description);
+ EnsureEventHandlerBase(inArchive, inItem);
+ }
+
+ template <typename TArchiveType>
+ void SerializeItem(TArchiveType &inArchive, SHandler &inItem, Qt3DSDMHandlerHandle &inHandle)
+ {
+ SerializeHandlerItem(inArchive, inItem);
+ SerializeHandlerArguments(inArchive, inItem, inHandle);
+ }
+
+ template <typename TInfoType, typename THandleType, typename TListMapType, typename THashType,
+ typename TNameMapType>
+ void SerializeInstanceData(IDOMWriter &inArchive, TInstanceHandle inInstanceHandle,
+ TCharPtr inElementName,
+ unordered_map<THandleType, TInfoType, THashType> &inMap,
+ TListMapType &inListMap, TNameMapType & /*inNameMap*/)
+ {
+ typedef unordered_map<THandleType, TInfoType, THashType> TMapType;
+ typename TListMapType::iterator find = inListMap.find(inInstanceHandle);
+ if (find == inListMap.end())
+ return;
+
+ vector<THandleType> &itemList = find->second;
+ for (size_t idx = 0, end = itemList.size(); idx < end; ++idx) {
+ typename TMapType::iterator iter = inMap.find(itemList[idx]);
+ if (iter == inMap.end()) {
+ QT3DS_ASSERT(false);
+ continue;
+ }
+ TInfoType &theType = iter->second;
+ IDOMWriter::Scope __elemScope(inArchive, inElementName);
+ SerializeItem(inArchive, theType, itemList[idx]);
+ }
+ }
+
+ void CreateInstanceGroupInfo(SMetaDataPropertyInfo &inProperty)
+ {
+ if (!inProperty.m_GroupName.empty()) {
+ const wchar_t *theGroupName = Intern(inProperty.m_GroupName);
+ bool found = false;
+ pair<typename TInstanceGroupMap::iterator, bool> inserter =
+ m_InstanceGroupMap.insert(make_pair(inProperty.m_Instance, vector<TCharPtr>()));
+ vector<TCharPtr> &itemList = inserter.first->second;
+ for (size_t idx = 0, end = itemList.size(); idx < end; ++idx) {
+ TCharStr curListName = itemList[idx];
+ if (curListName == theGroupName) {
+ found = true;
+ break;
+ }
+ }
+ if (!found && !inProperty.m_IsHidden)
+ inserter.first->second.push_back(theGroupName);
+ }
+ }
+ void CreateInstanceGroupInfo(SEvent &) {}
+ void CreateInstanceGroupInfo(SHandler &) {}
+
+ // Make sure the data core
+ void PostLoad(SMetaDataPropertyInfo &inProperty)
+ {
+ EnsureDataCoreProperty(inProperty);
+ SetPropertyDefault(inProperty, inProperty.GetDataType());
+ }
+
+ void ReadChildren(IDOMReader &, SEvent &, Qt3DSDMEventHandle) {}
+ void ReadChildren(IDOMReader &, SHandler &, Qt3DSDMHandlerHandle) {}
+
+ void PostLoad(SEvent &) {}
+ void PostLoad(SHandler &) {}
+ template <typename TInfoType, typename THandleType, typename TListMapType, typename THashType,
+ typename TNameMapType>
+ void SerializeInstanceData(IDOMReader &inArchive, TInstanceHandle inInstanceHandle,
+ TCharPtr inElementName,
+ unordered_map<THandleType, TInfoType, THashType> &inMap,
+ TListMapType &inListMap, TNameMapType &inNameMap)
+ {
+ // Ensure we pop out to where we were.
+ IDOMReader::Scope __readerScope(inArchive);
+ for (bool success = inArchive.MoveToFirstChild(inElementName); success;
+ success = inArchive.MoveToNextSibling(inElementName)) {
+ TInfoType theInfo(inInstanceHandle);
+ THandleType theHandle(GetNextId());
+ SerializeItem(inArchive, theInfo, theHandle);
+ PostLoad(theInfo);
+ CreateInstanceGroupInfo(theInfo);
+ inMap.insert(make_pair(theHandle, theInfo));
+ this->AddItemToInstanceList(inInstanceHandle, theHandle, inListMap);
+ inNameMap.insert(
+ make_pair(make_pair(inInstanceHandle, Intern(theInfo.m_Name)), theHandle));
+ ReadChildren(inArchive, theInfo, theHandle);
+ }
+ }
+
+ void SerializeInstanceData(IDOMWriter &inArchive, TInstanceHandle inInstance,
+ TCharPtr inElementName, TInstanceStringListMap &inMap)
+ {
+ TInstanceStringListMap::iterator iter = inMap.find(inInstance);
+ if (iter == inMap.end())
+ return;
+ const vector<TCharPtr> &theValueList(iter->second);
+ for (size_t idx = 0, end = theValueList.size(); idx < end; ++idx) {
+ IDOMWriter::Scope __elemScope(inArchive, inElementName);
+ inArchive.Value(theValueList[idx]);
+ }
+ }
+
+ void SerializeInstanceData(IDOMReader &inArchive, TInstanceHandle inInstance,
+ TCharPtr inElementName, TInstanceStringListMap &inMap)
+ {
+ IDOMReader::Scope __readerScope(inArchive);
+ for (bool success = inArchive.MoveToFirstChild(inElementName); success;
+ success = inArchive.MoveToNextSibling(inElementName)) {
+ const wchar_t *theValue;
+ if (inArchive.RegisteredValue(theValue))
+ AddItemToInstanceList(inInstance, theValue, inMap);
+ }
+ }
+
+ template <typename TArchiveType>
+ void SerializeInstance(TArchiveType &inArchive, TInstanceHandle inInstance)
+ {
+ SerializeInstanceData(inArchive, inInstance, L"Property", m_Properties,
+ m_InstanceToProperties, m_InstanceNameToProperties);
+ SerializeInstanceData(inArchive, inInstance, L"Event", m_Events, m_InstanceToEvents,
+ m_InstanceNameToEvents);
+ SerializeInstanceData(inArchive, inInstance, L"Handler", m_Handlers, m_InstanceToHandlers,
+ m_InstanceNameToHandlers);
+ SerializeInstanceData(inArchive, inInstance, L"Reference", m_InstanceToReferences);
+ }
+ void SerializeCategories(IDOMWriter &inWriter)
+ {
+ for (TCategoryMap::iterator iter = m_Categories.begin(), end = m_Categories.end();
+ iter != end; ++iter) {
+ IDOMWriter::Scope __writerScope(inWriter, L"Category");
+ SerializeItem(inWriter, iter->second);
+ }
+ }
+ void SerializeCategories(IDOMReader &inReader)
+ {
+ IDOMReader::Scope __readerScope(inReader);
+ for (bool success = inReader.MoveToFirstChild(L"Category"); success;
+ success = inReader.MoveToNextSibling(L"Category")) {
+ SCategoryInfo theInfo;
+ SerializeItem(inReader, theInfo);
+ TCategoryHandle newHandle(GetNextId());
+ theInfo.m_Canonical = true;
+ m_Categories.insert(make_pair(newHandle, theInfo));
+ m_NameToCategories.insert(make_pair(Intern(theInfo.m_Name), newHandle));
+ }
+ }
+
+ struct SInstanceSorter
+ {
+ const TInstanceStrMap &m_Map;
+ SInstanceSorter(const TInstanceStrMap &inMap)
+ : m_Map(inMap)
+ {
+ }
+ bool operator()(TInstanceHandle lhs, TInstanceHandle rhs)
+ {
+ TInstanceStrMap::const_iterator lhsIter(m_Map.find(lhs));
+ TInstanceStrMap::const_iterator rhsIter(m_Map.find(rhs));
+ if (lhsIter == rhsIter)
+ return false;
+ if (lhsIter == m_Map.end())
+ return false;
+ if (rhsIter == m_Map.end())
+ return true;
+ return wcscmp(lhsIter->second, rhsIter->second) < 0;
+ }
+ };
+
+ void Save(IDOMWriter &inWriter) override
+ {
+ SerializeCategories(inWriter);
+ typedef unordered_set<TInstanceHandle, hash<int>> TInstanceListType;
+ TInstanceListType theInstanceList;
+ // Get the list of instances to serialize.
+
+ AddInstancesFromHash(m_InstanceToProperties, theInstanceList);
+ AddInstancesFromHash(m_InstanceToEvents, theInstanceList);
+ AddInstancesFromHash(m_InstanceToHandlers, theInstanceList);
+ AddInstancesFromHash(m_InstanceToReferences, theInstanceList);
+
+ vector<TInstanceHandle> theInstances;
+ theInstances.reserve(theInstanceList.size());
+ theInstances.insert(theInstances.begin(), theInstanceList.begin(), theInstanceList.end());
+ sort(theInstances.begin(), theInstances.end(), SInstanceSorter(m_InstancesToCanonicalType));
+
+ for (vector<TInstanceHandle>::iterator iter = theInstances.begin(),
+ end = theInstances.end();
+ iter != end; ++iter) {
+ TInstanceHandle instHandle = *iter;
+ Option<TCharStr> theType(GetTypeForCanonicalInstance(*iter));
+ if (theType.hasValue()) {
+ IDOMWriter::Scope __instanceElem(inWriter, theType->wide_str());
+ SerializeInstance(inWriter, *iter);
+ }
+ }
+ }
+
+ // Loading expects the canonical instances to be setup already which means that
+ // it will perform lookups based on
+ void Load(IDOMReader &inReader) override
+ {
+ if (!inReader.Att("NextId", m_NextId))
+ m_NextId = 1;
+ m_ObjectName = L"";
+ SerializeCategories(inReader);
+ IDOMReader::Scope __instanceGatherScope(inReader);
+ for (bool success = inReader.MoveToFirstChild(); success;
+ success = inReader.MoveToNextSibling()) {
+ const wchar_t *elemName = inReader.GetElementName();
+ TStrInstanceMap::iterator find = m_CanonicalTypeToInstances.find(elemName);
+ if (find == m_CanonicalTypeToInstances.end()) {
+ continue;
+ }
+
+ SerializeInstance(inReader, find->second);
+ }
+ }
+
+ template <typename THandleType, typename TMapType>
+ void RemoveOldItemsAndSetOrder(
+ Qt3DSDMInstanceHandle inInstance, vector<THandleType> &inNewHandles,
+ void (SNewMetaDataImpl::*inGetSpecificFun)(Qt3DSDMInstanceHandle, vector<THandleType> &),
+ void (SNewMetaDataImpl::*inDestroyFun)(THandleType), TMapType &inListMap)
+ {
+ vector<THandleType> theHandles;
+ (this->*inGetSpecificFun)(inInstance, theHandles);
+ for (size_t idx = 0, end = theHandles.size(); idx < end; ++idx)
+ if (find(inNewHandles.begin(), inNewHandles.end(), theHandles[idx])
+ == inNewHandles.end())
+ (this->*inDestroyFun)(theHandles[idx]);
+
+ InsertOrUpdateWithTransaction(make_pair(inInstance, inNewHandles), inListMap);
+ }
+
+ // Load meta data and apply it to just this instance
+ // This needs to be undoable so we have to do this through a slightly different
+ // system than we did before.
+ void LoadInstance(IDOMReader &inReader, Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inObjectName,
+ std::vector<SMetaDataLoadWarning> &outWarnings) override
+ {
+ const wchar_t *theAtt;
+ vector<Qt3DSDMMetaDataPropertyHandle> theProperties;
+ vector<Qt3DSDMEventHandle> theEvents;
+ vector<Qt3DSDMHandlerHandle> theHandlers;
+ DestroyReferences(inInstance);
+ m_ObjectName = inObjectName;
+ for (bool success = inReader.MoveToFirstChild(); success;
+ success = inReader.MoveToNextSibling()) {
+ if (AreEqual(inReader.GetElementName(), L"Category")) {
+ SCategoryInfo theInfo;
+ SerializeItem(inReader, theInfo);
+ Qt3DSDMCategoryHandle theCategoryInfo(GetOrCreateCategory(theInfo.m_Name).first);
+ SetCategoryInfo(theCategoryInfo, theInfo.m_Icon, theInfo.m_HighlightIcon,
+ theInfo.m_Description);
+ } else if (AreEqual(inReader.GetElementName(), L"Property")) {
+ SMetaDataPropertyInfo theInfo(inInstance);
+ if (inReader.Att(L"name", theAtt)) {
+ Qt3DSDMMetaDataPropertyHandle theProperty(
+ GetOrCreateSpecificMetaDataProperty(inInstance, theAtt));
+ SerializeItem(inReader, theInfo, theProperty);
+ SetMetaDataPropertyInfo(theProperty, theInfo.m_Name, theInfo.m_FormalName,
+ theInfo.m_Description, theInfo.m_Usage,
+ theInfo.m_CompleteType, theInfo.m_DefaultValue,
+ theInfo.m_MetaDataData, theInfo.m_GroupName,
+ theInfo.m_IsHidden, theInfo.m_Animatable,
+ theInfo.m_Controllable);
+ CreateInstanceGroupInfo(theInfo);
+ theProperties.push_back(theProperty);
+ ReadChildren(inReader, theInfo, theProperty);
+ } else
+ outWarnings.push_back(
+ SMetaDataLoadWarning(MetaDataLoadWarningType::InvalidProperty,
+ MetaDataLoadWarningMessage::MissingName));
+ } else if (AreEqual(inReader.GetElementName(), L"Event")) {
+ SEvent theInfo(inInstance);
+ if (inReader.Att(L"name", theAtt)) {
+ Qt3DSDMEventHandle theEvent(GetOrCreateSpecificEvent(inInstance, theAtt));
+ SerializeItem(inReader, theInfo, theEvent);
+ SetEventInfo(theEvent, theInfo.m_Name, theInfo.m_FormalName, theInfo.m_Category,
+ theInfo.m_Description);
+ theEvents.push_back(theEvent);
+ } else
+ outWarnings.push_back(
+ SMetaDataLoadWarning(MetaDataLoadWarningType::InvalidEvent,
+ MetaDataLoadWarningMessage::MissingName));
+ } else if (AreEqual(inReader.GetElementName(), L"Handler")) {
+ if (inReader.Att(L"name", theAtt)) {
+ Qt3DSDMHandlerHandle theHandler(GetOrCreateSpecificHandler(inInstance, theAtt));
+ SHandler theInfo(inInstance);
+ SerializeHandlerItem(inReader, theInfo);
+ SetHandlerInfo(theHandler, theInfo.m_Name, theInfo.m_FormalName,
+ theInfo.m_Category, theInfo.m_Description);
+ IDOMReader::Scope __argScope(inReader);
+ QT3DSU32 argIdx = 0;
+ for (bool argSuccess = inReader.MoveToFirstChild(); argSuccess;
+ argSuccess = inReader.MoveToNextSibling(), ++argIdx) {
+ SMetaDataHandlerArgumentInfo theArg(theHandler);
+ SerializeHandlerArgument(inReader, theArg);
+ while (argIdx >= GetNumHandlerArguments(theHandler))
+ AddHandlerArgument(theHandler);
+
+ if (argIdx < GetNumHandlerArguments(theHandler)) {
+ SetHandlerArgumentInfo(theHandler, argIdx, theArg.m_Name,
+ theArg.m_FormalName, theArg.m_Description,
+ theArg.m_CompleteType, theArg.m_DefaultValue,
+ theArg.m_MetaDataData, theArg.m_ArgType);
+ }
+ }
+ while (GetNumHandlerArguments(theHandler) > argIdx)
+ DestroyHandlerArgument(theHandler, GetNumHandlerArguments(theHandler) - 1);
+ theHandlers.push_back(theHandler);
+ } else
+ outWarnings.push_back(
+ SMetaDataLoadWarning(MetaDataLoadWarningType::InvalidHandler,
+ MetaDataLoadWarningMessage::MissingName));
+ } else if (AreEqual(inReader.GetElementName(), L"Reference")) {
+ const wchar_t *theValue;
+ if (inReader.Value(theValue))
+ AddReference(inInstance, theValue);
+ } else {
+ QT3DS_ASSERT(false);
+ }
+ }
+ RemoveOldItemsAndSetOrder(
+ inInstance, theProperties, &SNewMetaDataImpl::GetSpecificMetaDataProperties,
+ &SNewMetaDataImpl::DestroyMetaDataProperty, m_InstanceToProperties);
+ RemoveOldItemsAndSetOrder(inInstance, theEvents, &SNewMetaDataImpl::GetSpecificEvents,
+ &SNewMetaDataImpl::DestroyEvent, m_InstanceToEvents);
+ RemoveOldItemsAndSetOrder(inInstance, theHandlers, &SNewMetaDataImpl::GetSpecificHandlers,
+ &SNewMetaDataImpl::DestroyHandler, m_InstanceToHandlers);
+ }
+
+ // Save just this instances meta data out to the writer
+ void SaveInstance(IDOMWriter &inWriter, Qt3DSDMInstanceHandle inInstance) override
+ {
+ SerializeInstance(inWriter, inInstance);
+ }
+
+ // Helper to convert char to wchar_t
+ eastl::basic_string<qt3ds::foundation::TWCharEASTLConverter::TCharType> m_Buf;
+ const wchar_t *ConvertChar(const char *inName)
+ {
+ if (inName && *inName) {
+ qt3ds::foundation::ConvertUTF(inName, 0, m_Buf);
+ return reinterpret_cast<const wchar_t *>(m_Buf.c_str());
+ }
+ return NULL;
+ }
+
+ void LoadEffectInstance(const char *inShaderFile, Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inObjectName,
+ std::vector<SMetaDataLoadWarning> &outWarnings,
+ qt3ds::foundation::IInStream &inStream) override
+ {
+ QString shaderFile(inShaderFile);
+ if (shaderFile.endsWith(".effect")) {
+ LoadEffectXMLFromSourcePath(inShaderFile, inInstance, inObjectName, outWarnings,
+ inStream);
+ } else {
+ QT3DS_ASSERT(false);
+ }
+ }
+
+ bool IsEffectInstanceRegistered(const char *inName) override
+ {
+ return m_EffectMap.find(Intern(inName)) != m_EffectMap.end();
+ }
+
+ inline qt3ds::render::NVRenderTextureFormats::Enum
+ ConvertTypeAndFormatToTextureFormat(const char8_t *inType, const char8_t *inFormat)
+ {
+ qt3ds::render::NVRenderTextureFormats::Enum retval
+ = qt3ds::render::NVRenderTextureFormats::RGBA8;
+ if (AreEqual(inFormat, "source"))
+ retval = qt3ds::render::NVRenderTextureFormats::Unknown;
+ else if (AreEqual(inFormat, "depth24stencil8"))
+ retval = qt3ds::render::NVRenderTextureFormats::Depth24Stencil8;
+ else {
+ if (AreEqual(inType, "ubyte")) {
+ if (AreEqual(inFormat, "rgb"))
+ retval = qt3ds::render::NVRenderTextureFormats::RGB8;
+ else if (AreEqual(inFormat, "rgba"))
+ retval = qt3ds::render::NVRenderTextureFormats::RGBA8;
+ else if (AreEqual(inFormat, "alpha"))
+ retval = qt3ds::render::NVRenderTextureFormats::Alpha8;
+ else if (AreEqual(inFormat, "lum"))
+ retval = qt3ds::render::NVRenderTextureFormats::Luminance8;
+ else if (AreEqual(inFormat, "lum_alpha"))
+ retval = qt3ds::render::NVRenderTextureFormats::LuminanceAlpha8;
+ else if (AreEqual(inFormat, "rg"))
+ retval = qt3ds::render::NVRenderTextureFormats::RG8;
+ } else if (AreEqual(inType, "ushort")) {
+ if (AreEqual(inFormat, "rgb"))
+ retval = qt3ds::render::NVRenderTextureFormats::RGB565;
+ else if (AreEqual(inFormat, "rgba"))
+ retval = qt3ds::render::NVRenderTextureFormats::RGBA5551;
+ } else if (AreEqual(inType, "fp16")) {
+ if (AreEqual(inFormat, "rgba"))
+ retval = qt3ds::render::NVRenderTextureFormats::RGBA16F;
+ else if (AreEqual(inFormat, "rg"))
+ retval = qt3ds::render::NVRenderTextureFormats::RG16F;
+ } else if (AreEqual(inType, "fp32")) {
+ if (AreEqual(inFormat, "rgba"))
+ retval = qt3ds::render::NVRenderTextureFormats::RGBA32F;
+ else if (AreEqual(inFormat, "rg"))
+ retval = qt3ds::render::NVRenderTextureFormats::RG32F;
+ } else {
+ QT3DS_ASSERT(false);
+ // inFoundation.error( QT3DS_INVALID_PARAMETER, "Unsupported texture type %s,
+ // defaulting to RGBA8", inType );
+ }
+ }
+ return retval;
+ }
+
+ static inline qt3ds::render::NVRenderTextureMagnifyingOp::Enum
+ ConvertFilterToMagOp(const char8_t *inFilter)
+ {
+ if (AreEqual(inFilter, "linear"))
+ return qt3ds::render::NVRenderTextureMagnifyingOp::Linear;
+ if (IsTrivial(inFilter) || AreEqual(inFilter, "nearest"))
+ return qt3ds::render::NVRenderTextureMagnifyingOp::Nearest;
+ else {
+ QT3DS_ASSERT(false);
+ // inFoundation.error( QT3DS_INVALID_PARAMETER, "Unsupported filter type %s, defaulting to
+ // linear", inFilter );
+ return qt3ds::render::NVRenderTextureMagnifyingOp::Linear;
+ }
+ }
+
+ static inline qt3ds::render::NVRenderTextureMinifyingOp::Enum
+ ConvertFilterToMinOp(const char8_t *inFilter)
+ {
+ // we make the decision based on the texture usage
+ if (AreEqual(inFilter, "linear"))
+ return qt3ds::render::NVRenderTextureMinifyingOp::Linear;
+ if (AreEqual(inFilter, "nearest"))
+ return qt3ds::render::NVRenderTextureMinifyingOp::Nearest;
+ if (AreEqual(inFilter, "linearMipmapLinear"))
+ return qt3ds::render::NVRenderTextureMinifyingOp::LinearMipmapLinear;
+ if (AreEqual(inFilter, "nearestMipmapNearest"))
+ return qt3ds::render::NVRenderTextureMinifyingOp::NearestMipmapNearest;
+ if (AreEqual(inFilter, "nearestMipmapLinear"))
+ return qt3ds::render::NVRenderTextureMinifyingOp::NearestMipmapLinear;
+ if (AreEqual(inFilter, "linearMipmapNearest"))
+ return qt3ds::render::NVRenderTextureMinifyingOp::LinearMipmapNearest;
+ else {
+ QT3DS_ASSERT(false);
+ // inFoundation.error( QT3DS_INVALID_PARAMETER, "Unsupported filter type %s, defaulting
+ // to linear", inFilter );
+ return qt3ds::render::NVRenderTextureMinifyingOp::Linear;
+ }
+ }
+
+ static inline qt3ds::render::NVRenderTextureCoordOp::Enum
+ ConvertTextureCoordOp(const char8_t *inWrap)
+ {
+ if (IsTrivial(inWrap) || AreEqual(inWrap, "clamp"))
+ return qt3ds::render::NVRenderTextureCoordOp::ClampToEdge;
+ if (AreEqual(inWrap, "repeat"))
+ return qt3ds::render::NVRenderTextureCoordOp::Repeat;
+ else {
+ QT3DS_ASSERT(false);
+ // inFoundation.error( QT3DS_INVALID_PARAMETER, "Unsupported wrap type %s, defaulting to
+ // clamp", inWrap );
+ return qt3ds::render::NVRenderTextureCoordOp::ClampToEdge;
+ }
+ }
+
+ static inline qt3ds::render::NVRenderTextureTypeValue::Enum
+ ConvertTextureType(const char8_t *inTexType)
+ {
+ // this usually comes from a MDL description file
+ if (IsTrivial(inTexType))
+ return qt3ds::render::NVRenderTextureTypeValue::Unknown;
+ if (AreEqual(inTexType, "environment"))
+ return qt3ds::render::NVRenderTextureTypeValue::Environment;
+ if (AreEqual(inTexType, "diffuse"))
+ return qt3ds::render::NVRenderTextureTypeValue::Diffuse;
+ if (AreEqual(inTexType, "specular"))
+ return qt3ds::render::NVRenderTextureTypeValue::Specular;
+ if (AreEqual(inTexType, "bump"))
+ return qt3ds::render::NVRenderTextureTypeValue::Bump;
+ if (AreEqual(inTexType, "displacement"))
+ return qt3ds::render::NVRenderTextureTypeValue::Displace;
+ if (AreEqual(inTexType, "shadow"))
+ return qt3ds::render::NVRenderTextureTypeValue::LightmapShadow;
+ if (AreEqual(inTexType, "emissive"))
+ return qt3ds::render::NVRenderTextureTypeValue::Emissive;
+ if (AreEqual(inTexType, "emissive_mask"))
+ return qt3ds::render::NVRenderTextureTypeValue::Emissive2;
+ else {
+ return qt3ds::render::NVRenderTextureTypeValue::Unknown;
+ }
+ }
+
+ static inline qt3ds::render::NVRenderSrcBlendFunc::Enum
+ ConvertToSrcBlendFunc(const char8_t *inFilter)
+ {
+ if (AreEqual(inFilter, "SrcAlpha"))
+ return qt3ds::render::NVRenderSrcBlendFunc::SrcAlpha;
+ if (AreEqual(inFilter, "OneMinusSrcAlpha"))
+ return qt3ds::render::NVRenderSrcBlendFunc::OneMinusSrcAlpha;
+ if (AreEqual(inFilter, "One"))
+ return qt3ds::render::NVRenderSrcBlendFunc::One;
+ else {
+ QT3DS_ASSERT(false);
+ // inFoundation.error( QT3DS_INVALID_PARAMETER, "Unsupported filter type %s, defaulting
+ // to linear", inFilter );
+ return qt3ds::render::NVRenderSrcBlendFunc::One;
+ }
+ }
+
+ static inline qt3ds::render::NVRenderDstBlendFunc::Enum
+ ConvertToDstBlendFunc(const char8_t *inFilter)
+ {
+ if (AreEqual(inFilter, "SrcAlpha"))
+ return qt3ds::render::NVRenderDstBlendFunc::SrcAlpha;
+ if (AreEqual(inFilter, "OneMinusSrcAlpha"))
+ return qt3ds::render::NVRenderDstBlendFunc::OneMinusSrcAlpha;
+ if (AreEqual(inFilter, "One"))
+ return qt3ds::render::NVRenderDstBlendFunc::One;
+ else {
+ QT3DS_ASSERT(false);
+ // inFoundation.error( QT3DS_INVALID_PARAMETER, "Unsupported filter type %s, defaulting
+ // to linear", inFilter );
+ return qt3ds::render::NVRenderDstBlendFunc::One;
+ }
+ }
+
+ static inline qt3ds::render::NVRenderState::Enum ConvertRenderState(const char8_t *inState)
+ {
+ if (AreEqual(inState, "Stencil"))
+ return qt3ds::render::NVRenderState::StencilTest;
+ else {
+ QT3DS_ASSERT(false);
+ // inFoundation.error( QT3DS_INVALID_PARAMETER, "Unsupported filter type %s, defaulting
+ // to linear", inFilter );
+ return qt3ds::render::NVRenderState::StencilTest;
+ }
+ }
+
+ static inline qt3ds::render::NVRenderImageAccessType::Enum
+ ConvertToImageAccessType(const char8_t *inAccess)
+ {
+ if (AreEqual(inAccess, "read"))
+ return qt3ds::render::NVRenderImageAccessType::Read;
+ if (AreEqual(inAccess, "write"))
+ return qt3ds::render::NVRenderImageAccessType::Write;
+ if (AreEqual(inAccess, "readwrite"))
+ return qt3ds::render::NVRenderImageAccessType::ReadWrite;
+ else
+ QT3DS_ASSERT(false);
+
+ return qt3ds::render::NVRenderImageAccessType::ReadWrite;
+ }
+
+ static inline size_t GetTypeSize(const char8_t *inType)
+ {
+ if (AreEqual(inType, "uint"))
+ return sizeof(QT3DSU32);
+ else if (AreEqual(inType, "int"))
+ return sizeof(QT3DSI32);
+ else if (AreEqual(inType, "uvec4"))
+ return sizeof(QT3DSU32) * 4;
+ else
+ QT3DS_ASSERT(false);
+
+ return 1;
+ }
+
+ inline qt3ds::render::NVRenderBufferBindValues::Enum
+ ConvertFormatToBufferBindFlags(const char8_t *inFormat)
+ {
+ if (AreEqual(inFormat, "storage"))
+ return qt3ds::render::NVRenderBufferBindValues::Storage;
+ else if (AreEqual(inFormat, "indirect"))
+ return qt3ds::render::NVRenderBufferBindValues::Draw_Indirect;
+ else
+ QT3DS_ASSERT(false);
+
+ return qt3ds::render::NVRenderBufferBindValues::Unknown;
+ }
+
+ static inline void AppendShaderUniform(const char8_t *type, const char8_t *name,
+ eastl::string &shaderPrefix)
+ {
+ shaderPrefix.append("uniform ");
+ shaderPrefix.append(type);
+ shaderPrefix.append(" ");
+ shaderPrefix.append(name);
+ shaderPrefix.append(";\n");
+ }
+ static inline void AppendShaderCode(
+ const char8_t *inCode, Qt3DSDMStr &ioStr,
+ eastl::basic_string<qt3ds::foundation::TWCharEASTLConverter::TCharType>
+ &inConvertBuffer)
+ {
+ qt3ds::foundation::ConvertUTF(inCode, 0, inConvertBuffer);
+ ioStr.append(inConvertBuffer);
+ }
+ void HideEffectProperty(Qt3DSDMInstanceHandle inInstance, const char8_t *inParamName)
+ {
+ Qt3DSDMMetaDataPropertyHandle theProp =
+ GetSpecificMetaDataProperty(inInstance, Intern(inParamName));
+ if (theProp.Valid()) {
+ SMetaDataPropertyInfo theInfo = GetMetaDataPropertyInfo(theProp);
+ SetMetaDataPropertyInfo(theProp, theInfo.m_Name, theInfo.m_FormalName,
+ theInfo.m_Description, theInfo.m_Usage, theInfo.m_CompleteType,
+ theInfo.m_DefaultValue, theInfo.m_MetaDataData,
+ theInfo.m_GroupName, true, theInfo.m_Animatable,
+ theInfo.m_Controllable);
+ }
+ }
+
+ static inline void GetShaderName(const TCharStr &inObjectName,
+ const char8_t *inShaderSpecificName,
+ eastl::string &outShaderName)
+ {
+ outShaderName.clear();
+ qt3ds::foundation::ConvertUTF(inObjectName.c_str(), 0, outShaderName);
+ outShaderName.append(" - ");
+ outShaderName.append(inShaderSpecificName);
+ }
+
+ void LoadDynamicObjectProperties(IDOMReader &inStream, SMetaDataDynamicObjectImpl &ioObject,
+ Qt3DSDMInstanceHandle inInstance, const TCharStr &inObjectName,
+ std::vector<SMetaDataLoadWarning> &outWarnings,
+ eastl::string &shaderPrefix)
+ {
+ eastl::string vertexUniforms;
+ eastl::string fragmentUniforms;
+ vertexUniforms += "#ifdef VERTEX_SHADER\n";
+ fragmentUniforms += "#ifdef FRAGMENT_SHADER\n";
+ using namespace qt3ds::render::dynamic;
+ ioObject.m_Properties.clear();
+ ioObject.ClearEnumValueNames();
+ IDOMReader::Scope __readerScope(inStream);
+ if (inStream.MoveToFirstChild("MetaData")) {
+ {
+ IDOMReader::Scope __readerScope(inStream);
+ LoadInstance(inStream, inInstance, inObjectName, outWarnings);
+ }
+
+ vector<Qt3DSDMMetaDataPropertyHandle> theProperties;
+ GetSpecificMetaDataProperties(inInstance, theProperties);
+ size_t propIdx = 0, propEnd = theProperties.size();
+ for (bool success = inStream.MoveToFirstChild("Property"); success && propIdx < propEnd;
+ success = inStream.MoveToNextSibling("Property"), ++propIdx) {
+ ioObject.m_Properties.push_back();
+ SPropertyDefinition &theNewDefinition = ioObject.m_Properties.back();
+ SMetaDataPropertyInfo theInfo(GetMetaDataPropertyInfo(theProperties[propIdx]));
+ theNewDefinition.m_Name =
+ m_StringTable.GetRenderStringTable().RegisterStr(theInfo.m_Name.c_str());
+ const char8_t *xmlName;
+ inStream.Att("name", xmlName);
+ const char8_t *stage;
+ inStream.Att("stage", stage);
+ eastl::string uniforms;
+ if (AreEqual(xmlName, theNewDefinition.m_Name.c_str())) {
+ switch (theInfo.GetDataType()) {
+ case DataModelDataType::Bool:
+ theNewDefinition.m_DataType =
+ qt3ds::render::NVRenderShaderDataTypes::QT3DSRenderBool;
+ AppendShaderUniform("bool", theNewDefinition.m_Name.c_str(), uniforms);
+ break;
+ case DataModelDataType::Long:
+ theNewDefinition.m_DataType
+ = qt3ds::render::NVRenderShaderDataTypes::QT3DSI32;
+ AppendShaderUniform("int", theNewDefinition.m_Name.c_str(), uniforms);
+ break;
+ case DataModelDataType::Float2:
+ theNewDefinition.m_DataType
+ = qt3ds::render::NVRenderShaderDataTypes::QT3DSVec2;
+ AppendShaderUniform("vec2", theNewDefinition.m_Name.c_str(), uniforms);
+ break;
+ case DataModelDataType::Float3:
+ theNewDefinition.m_DataType
+ = qt3ds::render::NVRenderShaderDataTypes::QT3DSVec3;
+ AppendShaderUniform("vec3", theNewDefinition.m_Name.c_str(), uniforms);
+ break;
+ case DataModelDataType::Float4:
+ theNewDefinition.m_DataType
+ = qt3ds::render::NVRenderShaderDataTypes::QT3DSVec4;
+ AppendShaderUniform("vec4", theNewDefinition.m_Name.c_str(), uniforms);
+ break;
+ case DataModelDataType::String:
+ if (theInfo.m_CompleteType == CompleteMetaDataType::Texture) {
+ theNewDefinition.m_DataType =
+ qt3ds::render::NVRenderShaderDataTypes::NVRenderTexture2DPtr;
+ const char8_t *filter = "linear", *minFilter = "linear",
+ *clamp = "clamp", *usage = "", *path = "";
+ if (inStream.Att("filter", filter))
+ theNewDefinition.m_MagFilterOp = ConvertFilterToMagOp(filter);
+ if (inStream.Att("minfilter", minFilter))
+ theNewDefinition.m_MinFilterOp = ConvertFilterToMinOp(minFilter);
+ if (inStream.Att("clamp", clamp))
+ theNewDefinition.m_CoordOp = ConvertTextureCoordOp(clamp);
+ if (inStream.Att("usage", usage))
+ theNewDefinition.m_TexUsageType = ConvertTextureType(usage);
+ if (inStream.Att("default", path)) {
+ TDataStrPtr theDataStr(
+ theInfo.m_DefaultValue.getData<TDataStrPtr>());
+ theNewDefinition.m_ImagePath =
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ theDataStr->GetData());
+ }
+
+ // Output macro so we can change the set of variables used for this
+ // independent of the
+ // meta data system.
+ uniforms.append("SNAPPER_SAMPLER2D(");
+ uniforms.append(theNewDefinition.m_Name.c_str());
+ uniforms.append(", ");
+ uniforms.append(theNewDefinition.m_Name.c_str());
+ uniforms.append(", ");
+ uniforms.append(filter);
+ uniforms.append(", ");
+ uniforms.append(clamp);
+ uniforms.append(", ");
+ uniforms.append("false )\n");
+ } else if (theInfo.m_CompleteType == CompleteMetaDataType::StringList) {
+ theNewDefinition.m_DataType =
+ qt3ds::render::NVRenderShaderDataTypes::QT3DSI32;
+ const TMetaDataStringList &theList =
+ qt3dsdm::get<TMetaDataStringList>(theInfo.m_MetaDataData);
+ ioObject.m_EnumValueNames.push_back(
+ new eastl::vector<qt3ds::foundation::CRegisteredString>());
+ eastl::vector<qt3ds::foundation::CRegisteredString> &theBack =
+ *ioObject.m_EnumValueNames.back();
+ for (QT3DSU32 idx = 0, end = (QT3DSU32)theList.size(); idx < end; ++idx)
+ theBack.push_back(m_StringTable.GetRenderStringTable().RegisterStr(
+ theList[idx].c_str()));
+ theNewDefinition.m_EnumValueNames = VecToCRef(theBack);
+ theNewDefinition.m_IsEnumProperty = true;
+ AppendShaderUniform("int", theNewDefinition.m_Name.c_str(),
+ uniforms);
+ } else if (theInfo.m_CompleteType == CompleteMetaDataType::Image2D) {
+ theNewDefinition.m_DataType =
+ qt3ds::render::NVRenderShaderDataTypes::NVRenderImage2DPtr;
+ const char8_t *format = "", *binding = "", *access = "readonly";
+ uniforms.append("layout(");
+ inStream.Att("format", format);
+ uniforms.append(format);
+ if (inStream.Att("binding", binding)) {
+ uniforms.append(", binding = ");
+ uniforms.append(binding);
+ }
+ uniforms.append(") ");
+
+ // if we have format layout we cannot set an additional access qualifier
+ if (inStream.Att("access", access) && !AreEqual(format, ""))
+ uniforms.append(access);
+
+ uniforms.append(" uniform image2D ");
+ uniforms.append(theNewDefinition.m_Name.c_str());
+ uniforms.append(";\n");
+ } else if (theInfo.m_CompleteType == CompleteMetaDataType::Buffer) {
+ theNewDefinition.m_DataType =
+ qt3ds::render::NVRenderShaderDataTypes::NVRenderDataBufferPtr;
+ const char8_t *align = "std140", *usage = "storage", *binding = "",
+ *format = "float";
+ uniforms.append("layout(");
+
+ inStream.Att("format", format);
+ inStream.Att("usage", usage);
+ if (AreEqual(usage, "storage")) {
+ inStream.Att("align", align);
+ uniforms.append(align);
+
+ if (inStream.Att("binding", binding)) {
+ uniforms.append(", binding = ");
+ uniforms.append(binding);
+ }
+
+ uniforms.append(") ");
+
+ uniforms.append("buffer ");
+ uniforms.append(theNewDefinition.m_Name.c_str());
+ uniforms.append("\n{ \n");
+ uniforms.append(format);
+ uniforms.append(" ");
+ uniforms.append(theNewDefinition.m_Name.c_str());
+ uniforms.append("_data[]; \n};\n");
+ } else {
+ // currently we only handle storage counters
+ QT3DS_ASSERT(false);
+ }
+ }
+ break;
+ default:
+ QT3DS_ASSERT(false);
+ // Fallthrough intentional
+ case DataModelDataType::Float:
+ theNewDefinition.m_DataType = qt3ds::render::NVRenderShaderDataTypes::QT3DSF32;
+ AppendShaderUniform("float", theNewDefinition.m_Name.c_str(), uniforms);
+ break;
+ }
+ } else {
+ // It is conceivable that we not every property tag gets parsed into a property.
+ QT3DS_ASSERT(false);
+ // So we will bump to the next item and try again.
+ --propIdx;
+ }
+
+ if (AreEqual(stage, "vertex")) {
+ vertexUniforms += uniforms;
+ } else if (AreEqual(stage, "fragment")) {
+ fragmentUniforms += uniforms;
+ } else {
+ vertexUniforms += uniforms;
+ fragmentUniforms += uniforms;
+ }
+ }
+ }
+ vertexUniforms += "#endif\n";
+ fragmentUniforms += "#endif\n";
+ shaderPrefix.append(vertexUniforms);
+ shaderPrefix.append(fragmentUniforms);
+ }
+
+ void LoadDynamicObjectShaders(IDOMReader &inStream, SMetaDataDynamicObjectImpl &ioObject,
+ eastl::string &shaderPrefix, const TCharStr &inObjectName)
+ {
+ eastl::string theShaderNameStr;
+ eastl::string theShaderTypeStr;
+ eastl::string theShaderVersionStr;
+ {
+ IDOMReader::Scope __readerScope(inStream);
+ eastl::basic_string<qt3ds::foundation::TWCharEASTLConverter::TCharType> theConvertBuffer;
+ if (inStream.MoveToFirstChild("Shaders")) {
+ const char8_t *globalShared = "";
+ const char8_t *globalVertexShared = "";
+ const char8_t *globalFragmentShared = "";
+ inStream.ChildValue("Shared", globalShared);
+ inStream.ChildValue("VertexShaderShared", globalVertexShared);
+ inStream.ChildValue("FragmentShaderShared", globalFragmentShared);
+
+ inStream.Att("type", theShaderTypeStr); // can be empty
+ inStream.Att("version", theShaderVersionStr); // can be empty
+
+ for (bool success = inStream.MoveToFirstChild(); success;
+ success = inStream.MoveToNextSibling()) {
+ IDOMReader::Scope __shaderScope(inStream);
+ const char8_t *elemName = inStream.GetNarrowElementName();
+ // If this is neither a compute shader nor a normal shader, go on and ignore
+ // element.
+ if (!(AreEqual(elemName, "Shader") || AreEqual(elemName, "ComputeShader")))
+ continue;
+
+ ioObject.m_Shaders.push_back();
+ SMetaDataShader &theShader = ioObject.m_Shaders.back();
+
+ qt3ds::foundation::ConvertUTF(theShaderTypeStr.c_str(), theShaderTypeStr.size(),
+ theShader.m_Type);
+ qt3ds::foundation::ConvertUTF(theShaderVersionStr.c_str(),
+ theShaderVersionStr.size(), theShader.m_Version);
+ const char8_t *theName = "";
+ char8_t theITOABuffer[64] = { 0 };
+ if (!inStream.Att("name", theName)) {
+ sprintf(theITOABuffer, "%d", (int)ioObject.m_Shaders.size() - 1);
+ theName = theITOABuffer;
+ }
+ GetShaderName(inObjectName, theName, theShaderNameStr);
+ qt3ds::foundation::ConvertUTF(theShaderNameStr.c_str(), theShaderNameStr.size(),
+ theShader.m_Name);
+
+ if (AreEqual(elemName, "Shader")) {
+ const char8_t *shaderShared = "";
+ inStream.ChildValue("Shared", shaderShared);
+ const char8_t *vertexCode = "";
+ inStream.ChildValue("VertexShader", vertexCode);
+ if (IsTrivial(vertexCode))
+ vertexCode = "void vert(){}";
+ const char8_t *fragmentCode = "void frag(){}";
+ inStream.ChildValue("FragmentShader", fragmentCode);
+ if (IsTrivial(fragmentCode))
+ fragmentCode = "void frag(){}";
+ const char8_t *geomCode = "";
+ inStream.ChildValue("GeometryShader", geomCode);
+
+ AppendShaderCode(shaderPrefix.c_str(), theShader.m_Code, theConvertBuffer);
+ AppendShaderCode(globalShared, theShader.m_Code, theConvertBuffer);
+ AppendShaderCode(shaderShared, theShader.m_Code, theConvertBuffer);
+ AppendShaderCode("\n#ifdef VERTEX_SHADER\n", theShader.m_Code,
+ theConvertBuffer);
+ AppendShaderCode(globalVertexShared, theShader.m_Code, theConvertBuffer);
+ AppendShaderCode(vertexCode, theShader.m_Code, theConvertBuffer);
+ AppendShaderCode("\n#endif\n", theShader.m_Code, theConvertBuffer);
+ if (!IsTrivial(geomCode)) {
+ AppendShaderCode("\n#ifdef USER_GEOMETRY_SHADER\n", theShader.m_Code,
+ theConvertBuffer);
+ AppendShaderCode(geomCode, theShader.m_Code, theConvertBuffer);
+ AppendShaderCode("\n#endif\n", theShader.m_Code, theConvertBuffer);
+ theShader.m_HasGeomShader = true;
+ }
+ AppendShaderCode("\n#ifdef FRAGMENT_SHADER\n", theShader.m_Code,
+ theConvertBuffer);
+ AppendShaderCode(globalFragmentShared, theShader.m_Code, theConvertBuffer);
+ AppendShaderCode(fragmentCode, theShader.m_Code, theConvertBuffer);
+ AppendShaderCode("\n#endif\n", theShader.m_Code, theConvertBuffer);
+ } else if (AreEqual(elemName, "ComputeShader")) {
+ const char8_t *shaderCode = "";
+ inStream.Value(shaderCode);
+ theShader.m_IsComputeShader = true;
+ AppendShaderCode(shaderCode, theShader.m_Code, theConvertBuffer);
+ }
+ }
+ }
+ }
+ }
+
+ static size_t Align(size_t inValue)
+ {
+ if (inValue % 4)
+ return inValue + (4 - (inValue % 4));
+ return inValue;
+ }
+
+ static qt3ds::render::dynamic::SDepthStencilFlags ParseDepthStencilFlags(const char8_t *inFlags)
+ {
+ eastl::string parseStr(inFlags);
+ eastl::string tokenStr;
+ qt3ds::render::dynamic::SDepthStencilFlags retval;
+ for (uint32_t pos = parseStr.find('|'); parseStr.empty() == false;
+ pos = parseStr.find('|')) {
+ if (pos != eastl::string::npos) {
+ tokenStr = parseStr.substr(pos);
+ parseStr.erase(parseStr.begin(), parseStr.begin() + pos + 1);
+ } else {
+ tokenStr = parseStr;
+ parseStr.clear();
+ }
+ if (AreEqual(tokenStr.c_str(), "clear-stencil"))
+ retval |= qt3ds::render::dynamic::DepthStencilFlagValues::ClearStencil;
+ if (AreEqual(tokenStr.c_str(), "clear-depth"))
+ retval |= qt3ds::render::dynamic::DepthStencilFlagValues::ClearDepth;
+ }
+ return retval;
+ }
+
+ static qt3ds::render::NVRenderBoolOp::Enum ParseBoolOp(const char8_t *inOp)
+ {
+ if (AreEqual(inOp, "never"))
+ return qt3ds::render::NVRenderBoolOp::Never;
+ if (AreEqual(inOp, "less"))
+ return qt3ds::render::NVRenderBoolOp::Less;
+ if (AreEqual(inOp, "less-than-or-equal"))
+ return qt3ds::render::NVRenderBoolOp::LessThanOrEqual;
+ if (AreEqual(inOp, "equal"))
+ return qt3ds::render::NVRenderBoolOp::Equal;
+ if (AreEqual(inOp, "not-equal"))
+ return qt3ds::render::NVRenderBoolOp::NotEqual;
+ if (AreEqual(inOp, "greater"))
+ return qt3ds::render::NVRenderBoolOp::Greater;
+ if (AreEqual(inOp, "greater-than-or-equal"))
+ return qt3ds::render::NVRenderBoolOp::GreaterThanOrEqual;
+ if (AreEqual(inOp, "always"))
+ return qt3ds::render::NVRenderBoolOp::AlwaysTrue;
+
+ QT3DS_ASSERT(false);
+ return qt3ds::render::NVRenderBoolOp::Unknown;
+ }
+
+ static qt3ds::render::NVRenderStencilOp::Enum ParseStencilOp(const char8_t *inOp)
+ {
+
+ if (AreEqual(inOp, "keep"))
+ return qt3ds::render::NVRenderStencilOp::Keep;
+ if (AreEqual(inOp, "zero"))
+ return qt3ds::render::NVRenderStencilOp::Zero;
+ if (AreEqual(inOp, "replace"))
+ return qt3ds::render::NVRenderStencilOp::Replace;
+ if (AreEqual(inOp, "increment"))
+ return qt3ds::render::NVRenderStencilOp::Increment;
+ if (AreEqual(inOp, "increment-wrap"))
+ return qt3ds::render::NVRenderStencilOp::IncrementWrap;
+ if (AreEqual(inOp, "decrement"))
+ return qt3ds::render::NVRenderStencilOp::Decrement;
+ if (AreEqual(inOp, "decrement-wrap"))
+ return qt3ds::render::NVRenderStencilOp::DecrementWrap;
+ if (AreEqual(inOp, "invert"))
+ return qt3ds::render::NVRenderStencilOp::Invert;
+
+ QT3DS_ASSERT(false);
+ return qt3ds::render::NVRenderStencilOp::Unknown;
+ }
+
+ // Reloads an effect if one is already loaded so we can replace the existing effect definition
+ void LoadEffectXML(IDOMReader &inStream, Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inObjectName,
+ std::vector<SMetaDataLoadWarning> &outWarnings,
+ const TCharStr &inSourcePath) override
+ {
+ using namespace qt3ds::render::dynamic;
+ std::pair<TEffectMap::iterator, bool> theInserter =
+ m_EffectMap.insert(std::make_pair(Intern(inObjectName), SMetaDataEffectImpl()));
+ /*if ( inStream.MoveToFirstChild( "Effect" ) == false )
+ {
+ outWarnings.push_back( SMetaDataLoadWarning( MetaDataLoadWarningType::Unknown,
+ MetaDataLoadWarningMessage::GeneralError, L"File doesn't appear to be an effect xml file,
+ missing top level Effect tag" ) );
+ return;
+ }*/
+ eastl::string shaderPrefix = "#include \"effect.glsllib\"\n";
+
+ SMetaDataEffectImpl &theEffect = theInserter.first->second;
+ m_ObjectName = inObjectName;
+ theEffect.m_Name = inObjectName;
+ theEffect.m_SourcePath = inSourcePath;
+ theEffect.ClearEffectCommands();
+ LoadDynamicObjectProperties(inStream, theEffect, inInstance, inObjectName, outWarnings,
+ shaderPrefix);
+ theEffect.m_Shaders.clear();
+ LoadDynamicObjectShaders(inStream, theEffect, shaderPrefix, inObjectName);
+ eastl::string theShaderNameStr;
+ {
+ IDOMReader::Scope __readerScope(inStream);
+ if (inStream.MoveToFirstChild("Passes")) {
+ for (bool success = inStream.MoveToFirstChild(); success;
+ success = inStream.MoveToNextSibling()) {
+ IDOMReader::Scope __passScope(inStream);
+ if (AreEqual("Pass", inStream.GetNarrowElementName())) {
+ bool drawIndirect = false;
+ const char8_t *shader = "", *input = "[source]", *output = "[dest]",
+ *outputFormat = "rgba";
+ inStream.Att("shader", shader);
+ inStream.Att("input", input);
+ inStream.Att("output", output);
+ // this is only for the final output of the effect
+ inStream.Att("format", outputFormat);
+ qt3ds::render::NVRenderTextureFormats::Enum theOutputFormat =
+ ConvertTypeAndFormatToTextureFormat("ubyte", outputFormat);
+ if (AreEqual(output, "[dest]") || IsTrivial(output))
+ theEffect.m_EffectCommands.push_back(new SBindTarget(theOutputFormat));
+ else
+ theEffect.m_EffectCommands.push_back(
+ new SBindBuffer(
+ m_StringTable.GetRenderStringTable().RegisterStr(output),
+ false));
+ GetShaderName(inObjectName, shader, theShaderNameStr);
+ theEffect.m_EffectCommands.push_back(
+ new SBindShader(m_StringTable.GetRenderStringTable().RegisterStr(
+ theShaderNameStr.c_str())));
+ theEffect.m_EffectCommands.push_back(new SApplyInstanceValue());
+ if (AreEqual(input, "[source]") || IsTrivial(input))
+ theEffect.m_EffectCommands.push_back(
+ new SApplyBufferValue(
+ m_StringTable.GetRenderStringTable().RegisterStr(""),
+ m_StringTable.GetRenderStringTable().RegisterStr("")));
+ else
+ theEffect.m_EffectCommands.push_back(
+ new SApplyBufferValue(
+ m_StringTable.GetRenderStringTable().RegisterStr(input),
+ m_StringTable.GetRenderStringTable().RegisterStr("")));
+ for (bool bufParam = inStream.MoveToFirstChild(); bufParam;
+ bufParam = inStream.MoveToNextSibling()) {
+ if (AreEqual("BufferInput", inStream.GetNarrowElementName())) {
+ const char8_t *param = "";
+ const char8_t *value = "";
+ inStream.Att("param", param);
+ inStream.Att("value", value);
+ if (AreEqual("[source]", value))
+ value = "";
+ theEffect.m_EffectCommands.push_back(
+ new SApplyBufferValue(
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ value),
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ param)));
+ HideEffectProperty(inInstance, param);
+ } else if (AreEqual("DepthInput", inStream.GetNarrowElementName())) {
+ const char8_t *param = "";
+ inStream.Att("param", param);
+ theEffect.m_EffectCommands.push_back(
+ new SApplyDepthValue(
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ param)));
+ HideEffectProperty(inInstance, param);
+ } else if (AreEqual("ImageInput", inStream.GetNarrowElementName())) {
+ bool useAsTexture = false;
+ bool needSync = false;
+ const char8_t *param = "";
+ const char8_t *value = "";
+ const char8_t *usage = "";
+ const char8_t *sync = "";
+ inStream.Att("param", param);
+ inStream.Att("value", value);
+ if (AreEqual("[source]", value))
+ value = "";
+ inStream.Att("usage", usage);
+ if (AreEqual("texture", usage))
+ useAsTexture = true;
+ inStream.Att("sync", sync);
+ if (AreEqual("true", sync))
+ needSync = true;
+
+ theEffect.m_EffectCommands.push_back(
+ new SApplyImageValue(
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ value),
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ param), useAsTexture, needSync));
+ HideEffectProperty(inInstance, param);
+ } else if (AreEqual("DataBufferInput",
+ inStream.GetNarrowElementName())) {
+ const char8_t *param = "";
+ const char8_t *usage = "";
+ inStream.Att("param", param);
+ inStream.Att("usage", usage);
+ qt3ds::render::NVRenderBufferBindValues::Enum bufType =
+ ConvertFormatToBufferBindFlags(usage);
+
+ // check if we using an indirect buffer for drawing
+ if (bufType == qt3ds::render::NVRenderBufferBindValues::Draw_Indirect)
+ drawIndirect = true;
+
+ theEffect.m_EffectCommands.push_back(
+ new SApplyDataBufferValue(
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ param), bufType));
+ HideEffectProperty(inInstance, param);
+ } else if (AreEqual("SetParam", inStream.GetNarrowElementName())) {
+ const char8_t *name = "";
+ inStream.Att("name", name);
+ const char8_t *value = "";
+ inStream.Att("value", value);
+ // find the param and the type.
+ qt3ds::foundation::CRegisteredString propName =
+ m_StringTable.GetRenderStringTable().RegisterStr(name);
+ qt3ds::render::dynamic::SPropertyDefinition *theDefinition = NULL;
+ for (uint32_t propIdx = 0, propEnd = theEffect.m_Properties.size();
+ propIdx < propEnd && theDefinition == NULL; ++propIdx) {
+ if (theEffect.m_Properties[propIdx].m_Name == propName)
+ theDefinition = &theEffect.m_Properties[propIdx];
+ }
+ if (theDefinition != NULL) {
+ // Hack it for now because the shader datatypes don't have a
+ // built in sizeof operator.
+ QT3DSU32 valueSize = 4;
+ qt3ds::render::NVRenderShaderDataTypes::Enum theDataType =
+ theDefinition->m_DataType;
+ size_t allocSize = sizeof(SApplyValue) + valueSize;
+ QT3DSU8 *theCommandData = (QT3DSU8 *)malloc(allocSize);
+ QT3DSU8 *theValueData = theCommandData + sizeof(SApplyValue);
+ new (theCommandData) SApplyValue(propName, theDataType);
+ SApplyValue *theCommand =
+ reinterpret_cast<SApplyValue *>(theCommandData);
+ switch (theDataType) {
+ case qt3ds::render::NVRenderShaderDataTypes::QT3DSRenderBool: {
+ bool &target = *reinterpret_cast<bool *>(theValueData);
+ qt3ds::foundation::StringConversion<bool>().StrTo(value,
+ target);
+ } break;
+ case qt3ds::render::NVRenderShaderDataTypes::QT3DSI32: {
+ QT3DSI32 &target = *reinterpret_cast<QT3DSI32 *>(
+ theValueData);
+ qt3ds::foundation::StringConversion<QT3DSI32>().StrTo(
+ value, target);
+ } break;
+ default:
+ QT3DS_ASSERT(false);
+ // Fallthrough intentional
+ case qt3ds::render::NVRenderShaderDataTypes::QT3DSF32: {
+ QT3DSF32 &target = *reinterpret_cast<QT3DSF32 *>(
+ theValueData);
+ qt3ds::foundation::StringConversion<QT3DSF32>().StrTo(
+ value, target);
+ } break;
+ }
+ theCommand->m_Value = NVDataRef<QT3DSU8>(theValueData,
+ valueSize);
+ theEffect.m_EffectCommands.push_back(theCommand);
+ }
+ } else if (AreEqual("Blending", inStream.GetNarrowElementName())) {
+ const char8_t *theSrcBlendFuncStr = "", *theDestBlendFuncStr = "";
+ inStream.Att("source", theSrcBlendFuncStr);
+ inStream.Att("dest", theDestBlendFuncStr);
+
+ qt3ds::render::NVRenderSrcBlendFunc::Enum theSrcBlendFunc =
+ ConvertToSrcBlendFunc(theSrcBlendFuncStr);
+ qt3ds::render::NVRenderDstBlendFunc::Enum theDstBlendFuc =
+ ConvertToDstBlendFunc(theDestBlendFuncStr);
+
+ // this will setup blending
+ theEffect.m_EffectCommands.push_back(
+ new SApplyBlending(theSrcBlendFunc, theDstBlendFuc));
+ } else if (AreEqual("RenderState", inStream.GetNarrowElementName())) {
+ const char8_t *name = "";
+ inStream.Att("name", name);
+ const char8_t *value = "";
+ inStream.Att("value", value);
+ // find the param and the type.
+ bool theStateEnable = false;
+ qt3ds::render::NVRenderState::Enum theState
+ = ConvertRenderState(name);
+ if (AreEqual("true", value))
+ theStateEnable = true;
+
+ // this will setup blending
+ theEffect.m_EffectCommands.push_back(
+ new SApplyRenderState(theState, theStateEnable));
+ } else if (AreEqual("DepthStencil", inStream.GetNarrowElementName())) {
+ const char8_t *bufferName = "";
+ inStream.Att("buffer", bufferName);
+ QT3DSU32 stencilvalue = 0;
+ inStream.Att("reference", stencilvalue);
+ const char8_t *flags = "";
+ inStream.Att("flags", flags);
+ QT3DSU32 mask = QT3DS_MAX_U32;
+ inStream.Att("mask", mask);
+ qt3ds::render::NVRenderBoolOp::Enum stencilFunction =
+ qt3ds::render::NVRenderBoolOp::Equal;
+ qt3ds::render::NVRenderStencilOp::Enum stencilFailOperation =
+ qt3ds::render::NVRenderStencilOp::Keep;
+ qt3ds::render::NVRenderStencilOp::Enum depthPass =
+ qt3ds::render::NVRenderStencilOp::Keep;
+ qt3ds::render::NVRenderStencilOp::Enum depthFail =
+ qt3ds::render::NVRenderStencilOp::Keep;
+ const char8_t *temp;
+ if (inStream.Att("stencil-fail", temp))
+ stencilFailOperation = ParseStencilOp(temp);
+ if (inStream.Att("depth-pass", temp))
+ depthPass = ParseStencilOp(temp);
+ if (inStream.Att("depth-fail", temp))
+ depthFail = ParseStencilOp(temp);
+ if (inStream.Att("stencil-function", temp))
+ stencilFunction = ParseBoolOp(temp);
+
+ qt3ds::render::dynamic::SDepthStencilFlags flagValues =
+ ParseDepthStencilFlags(flags);
+ theEffect.m_EffectCommands.push_back(
+ new SDepthStencil(
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ bufferName), flagValues, stencilFailOperation,
+ depthPass, depthFail, stencilFunction, stencilvalue,
+ mask));
+ } else {
+ QT3DS_ASSERT(false);
+ }
+ }
+ theEffect.m_EffectCommands.push_back(new SRender(drawIndirect));
+ } else if (AreEqual("Buffer", inStream.GetNarrowElementName())
+ || AreEqual("Image", inStream.GetNarrowElementName())) {
+ SAllocateBufferFlags theFlags;
+ const char8_t *theLifetimeStr = "", *theType = "", *theFormat = "",
+ *theFilter = "", *theWrap = "", *theName = "";
+ QT3DSF32 theSize = 1.0f;
+ bool isImage = AreEqual("Image", inStream.GetNarrowElementName());
+ inStream.Att("name", theName);
+ inStream.Att("lifetime", theLifetimeStr);
+ inStream.Att("type", theType);
+ inStream.Att("format", theFormat);
+ inStream.Att("filter", theFilter);
+ inStream.Att("wrap", theWrap);
+ inStream.Att("size", theSize);
+ // Clamp the size to valid amounts
+ if (theSize <= 0)
+ theSize = 1.0f;
+ if (theSize > 1.0f)
+ theSize = 1.0f;
+ if (AreEqual(theLifetimeStr, "scene"))
+ theFlags.SetSceneLifetime(true);
+ qt3ds::render::NVRenderTextureFormats::Enum theTexFormat =
+ ConvertTypeAndFormatToTextureFormat(theType, theFormat);
+ qt3ds::render::NVRenderTextureMagnifyingOp::Enum theMagOp =
+ ConvertFilterToMagOp(theFilter);
+ qt3ds::render::NVRenderTextureCoordOp::Enum theCoordOp =
+ ConvertTextureCoordOp(theWrap);
+ if (*theName == 0) {
+ QT3DS_ASSERT(false);
+ // inFoundation.error( QT3DS_INVALID_PARAMETER, "Buffer is missing its
+ // name" );
+ } else if (isImage) {
+ const char8_t *temp;
+ qt3ds::render::NVRenderImageAccessType::Enum theAccess =
+ qt3ds::render::NVRenderImageAccessType::ReadWrite;
+ if (inStream.Att("access", temp))
+ theAccess = ConvertToImageAccessType(temp);
+
+ theEffect.m_EffectCommands.push_back(
+ new SAllocateImage(
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ theName), theTexFormat, theMagOp, theCoordOp,
+ theSize, theFlags, theAccess));
+ } else {
+ theEffect.m_EffectCommands.push_back(
+ new SAllocateBuffer(
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ theName), theTexFormat, theMagOp, theCoordOp,
+ theSize, theFlags));
+ }
+ } else if (AreEqual("DataBuffer", inStream.GetNarrowElementName())) {
+ SAllocateBufferFlags theFlags;
+ const char8_t *theLifetimeStr = "", *theType = "", *theWrapName = "",
+ *theWrapType = "", *theFormat = "", *theName = "";
+ QT3DSF32 theSize = 1.0f;
+ qt3ds::render::NVRenderBufferBindValues::Enum bufType,
+ wrapBufType = qt3ds::render::NVRenderBufferBindValues::Unknown;
+
+ inStream.Att("name", theName);
+ inStream.Att("lifetime", theLifetimeStr);
+ inStream.Att("type", theType);
+ inStream.Att("format", theFormat);
+ inStream.Att("size", theSize);
+ if (AreEqual(theLifetimeStr, "scene"))
+ theFlags.SetSceneLifetime(true);
+ bufType = ConvertFormatToBufferBindFlags(theType);
+
+ if (inStream.Att("wrapType", theWrapType)) {
+ wrapBufType = ConvertFormatToBufferBindFlags(theWrapType);
+ inStream.Att("wrapName", theWrapName);
+ if (*theWrapName == 0)
+ QT3DS_ASSERT(false);
+ }
+
+ theSize *= GetTypeSize(theFormat);
+
+ if (theSize <= 0)
+ theSize = 1.0f;
+
+ if (*theName == 0) {
+ QT3DS_ASSERT(false);
+ } else {
+ theEffect.m_EffectCommands.push_back(
+ new SAllocateDataBuffer(
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ theName), bufType,
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ theWrapName), wrapBufType, theSize, theFlags));
+ }
+ } else {
+ QT3DS_ASSERT(false); // Unrecognized effect passes member.
+ }
+ }
+
+ } else {
+ if (theEffect.m_Shaders.size()) {
+ // Create the minimal set of commands that we could run the first shader with.
+ theEffect.m_EffectCommands.push_back(new SBindTarget());
+ theEffect.m_EffectCommands.push_back(
+ new SBindShader(m_StringTable.GetRenderStringTable().RegisterStr(
+ theEffect.m_Shaders[0].m_Name.c_str())));
+ theEffect.m_EffectCommands.push_back(new SApplyInstanceValue());
+ theEffect.m_EffectCommands.push_back(new SRender(false));
+ }
+ }
+ }
+ }
+
+ bool LoadEffectXMLFromSourcePath(const char *inSourcePath,
+ Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inObjectName,
+ std::vector<SMetaDataLoadWarning> &outWarnings,
+ qt3ds::foundation::IInStream &inStream) override
+ {
+ std::shared_ptr<IDOMFactory> theFactory(
+ IDOMFactory::CreateDOMFactory(m_DataCore->GetStringTablePtr()));
+ qt3dsdm::SDOMElement *theElem = CDOMSerializer::Read(*theFactory, inStream, NULL);
+ if (theElem != NULL) {
+ std::shared_ptr<IDOMReader> theReader(
+ IDOMReader::CreateDOMReader(*theElem, m_DataCore->GetStringTablePtr(),
+ theFactory));
+ LoadEffectXML(*theReader, inInstance, inObjectName, outWarnings,
+ TCharStr(Intern(inSourcePath)));
+ return true;
+ }
+ return false;
+ }
+
+ Option<SMetaDataEffect> GetEffectBySourcePath(const char *inSourcePath) override
+ {
+ QDir sourcePath = QDir::cleanPath(QString(inSourcePath));
+ for (TEffectMap::iterator iter = m_EffectMap.begin(), end = m_EffectMap.end(); iter != end;
+ ++iter) {
+ QDir effectPath = QDir::cleanPath(QString::fromWCharArray(
+ iter->second.m_SourcePath.wide_str()));
+ if (effectPath == sourcePath)
+ return iter->second.ToEffect();
+ }
+ return Empty();
+ }
+
+ void LoadMaterialInstance(const char *inShaderFile, Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inName,
+ std::vector<SMetaDataLoadWarning> &outWarnings,
+ qt3ds::foundation::IInStream &inStream) override
+ {
+ QString shaderFile(inShaderFile);
+ if (shaderFile.endsWith(".material") || shaderFile.endsWith(".shader")) {
+ LoadMaterialClassFromSourcePath(inShaderFile, inInstance, inName, outWarnings,
+ inStream);
+ } else {
+ QT3DS_ASSERT(false);
+ }
+ }
+
+ bool IsMaterialClassRegistered(const char *inName) override
+ {
+ return m_CustomMaterials.find(Intern(inName)) != m_CustomMaterials.end();
+ }
+
+ void LoadMaterialClassXML(IDOMReader &inStream, Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inObjectName,
+ std::vector<SMetaDataLoadWarning> &outWarnings,
+ const TCharStr &inSourcePath) override
+ {
+ using namespace qt3ds::render::dynamic;
+
+ std::pair<TCustomMaterialMap::iterator, bool> theInserter = m_CustomMaterials.insert(
+ std::make_pair(Intern(inObjectName), SMetaDataCustomMaterialImpl()));
+ /*if ( inStream.MoveToFirstChild( "Effect" ) == false )
+ {
+ outWarnings.push_back( SMetaDataLoadWarning( MetaDataLoadWarningType::Unknown,
+ MetaDataLoadWarningMessage::GeneralError, L"File doesn't appear to be an effect xml file,
+ missing top level Effect tag" ) );
+ return;
+ }*/
+ eastl::string shaderPrefix = "#include \"customMaterial.glsllib\"\n";
+
+ SMetaDataCustomMaterialImpl &theMaterial = theInserter.first->second;
+ m_ObjectName = inObjectName;
+ theMaterial.m_Name = inObjectName;
+ theMaterial.m_SourcePath = inSourcePath;
+ theMaterial.m_HasTransparency = false;
+ theMaterial.m_HasRefraction = false;
+ theMaterial.m_AlwaysDirty = false;
+ theMaterial.m_ShaderKey = 0;
+ theMaterial.m_LayerCount = 0;
+ inStream.Att("always-dirty", theMaterial.m_AlwaysDirty);
+ LoadDynamicObjectProperties(inStream, theMaterial, inInstance, inObjectName, outWarnings,
+ shaderPrefix);
+ LoadDynamicObjectShaders(inStream, theMaterial, shaderPrefix, inObjectName);
+
+ // currently single pass shader only
+ if (theMaterial.m_Shaders.size()) {
+ eastl::string theShaderNameStr;
+
+ // in Passes we store additional render commands
+ IDOMReader::Scope __readerScope(inStream);
+ if (inStream.MoveToFirstChild("Passes")) {
+ for (bool success = inStream.MoveToFirstChild(); success;
+ success = inStream.MoveToNextSibling()) {
+ IDOMReader::Scope __passScope(inStream);
+ if (AreEqual("Pass", inStream.GetNarrowElementName())) {
+ const char8_t *typeStr;
+ if (!inStream.UnregisteredAtt("type", typeStr))
+ typeStr = "render";
+ if (AreEqual(typeStr, "render")) {
+ const char8_t *shader = "", *input = "[source]", *output = "[dest]",
+ *outputFormat = "rgba", *clear = "";
+ bool needsClear = false;
+ inStream.Att("shader", shader);
+ inStream.Att("input", input);
+ inStream.Att("output", output);
+ // for multi pass materials
+ inStream.Att("clear", clear);
+ if (AreEqual("true", clear))
+ needsClear = true;
+
+ GetShaderName(inObjectName, shader, theShaderNameStr);
+ // this is only for the final output of the effect
+ inStream.Att("format", outputFormat);
+ qt3ds::render::NVRenderTextureFormats::Enum theOutputFormat =
+ ConvertTypeAndFormatToTextureFormat("ubyte", outputFormat);
+
+ if (AreEqual(output, "[dest]") || IsTrivial(output)) {
+ theMaterial.m_CustomerMaterialCommands.push_back(
+ new SBindTarget(theOutputFormat));
+ } else {
+ theMaterial.m_CustomerMaterialCommands.push_back(
+ new SBindBuffer(
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ output), needsClear));
+ }
+
+ // add shader to command stream
+ qt3ds::render::CRegisteredString theShaderName;
+ if (!IsTrivial(shader)) {
+ for (QT3DSU32 idx = 0, end = theMaterial.m_Shaders.size();
+ idx < end && theShaderName.IsValid() == false; ++idx) {
+ qt3ds::render::CRegisteredString thePossibleNameStr =
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ theMaterial.m_Shaders[idx].m_Name.c_str());
+ if (AreEqual(thePossibleNameStr.c_str(),
+ theShaderNameStr.c_str()))
+ theShaderName = thePossibleNameStr;
+ }
+ }
+ if (theShaderName.IsValid() == false
+ && theMaterial.m_Shaders.empty() == false)
+ theShaderName = m_StringTable.GetRenderStringTable().RegisterStr(
+ theMaterial.m_Shaders[0].m_Name.c_str());
+ if (theShaderName.IsValid()) {
+ theMaterial.m_CustomerMaterialCommands.push_back(
+ new SBindShader(theShaderName));
+ // this is a place holder for our input values to the shader
+ theMaterial.m_CustomerMaterialCommands.push_back(
+ new SApplyInstanceValue());
+
+ for (bool bufParam = inStream.MoveToFirstChild(); bufParam;
+ bufParam = inStream.MoveToNextSibling()) {
+ if (AreEqual("BufferBlit", inStream.GetNarrowElementName())) {
+ const char8_t *value = "";
+ const char8_t *dest = "";
+ const char8_t *source = "";
+ inStream.Att("dest", dest);
+ if (AreEqual("[dest]", dest))
+ value = "";
+ inStream.Att("source", source);
+ if (AreEqual("[source]", source))
+ value = "";
+
+ theMaterial.m_CustomerMaterialCommands.push_back(
+ new SApplyBlitFramebuffer(
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ source),
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ dest)));
+
+ // note need a better way to pass information from MDL to
+ // our input
+ // We use buffer blits to simulate glass refraction
+ theMaterial.m_HasRefraction = true;
+ } else if (AreEqual("BufferInput",
+ inStream.GetNarrowElementName())) {
+ const char8_t *param = "";
+ const char8_t *value = "";
+ inStream.Att("param", param);
+ inStream.Att("value", value);
+ if (AreEqual("[source]", value))
+ value = "";
+ theMaterial.m_CustomerMaterialCommands.push_back(
+ new SApplyBufferValue(
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ value),
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ param)));
+ HideEffectProperty(inInstance, param);
+ } else if (AreEqual("Blending",
+ inStream.GetNarrowElementName())) {
+ const char8_t *theSrcBlendFuncStr = "",
+ *theDestBlendFuncStr = "";
+ inStream.Att("source", theSrcBlendFuncStr);
+ inStream.Att("dest", theDestBlendFuncStr);
+
+ qt3ds::render::NVRenderSrcBlendFunc::Enum theSrcBlendFunc =
+ ConvertToSrcBlendFunc(theSrcBlendFuncStr);
+ qt3ds::render::NVRenderDstBlendFunc::Enum theDstBlendFuc =
+ ConvertToDstBlendFunc(theDestBlendFuncStr);
+
+ // this will setup blending
+ theMaterial.m_CustomerMaterialCommands.push_back(
+ new SApplyBlending(theSrcBlendFunc,
+ theDstBlendFuc));
+ // if we have blending we have transparency
+ theMaterial.m_HasTransparency = true;
+ } else if (AreEqual("RenderState",
+ inStream.GetNarrowElementName())) {
+ // UdoL Todo: add this one
+ }
+ }
+ }
+ // add the render command as last thing in the pass, it is a render
+ // pass.
+ theMaterial.m_CustomerMaterialCommands.push_back(new SRender(false));
+ }
+ } else if (AreEqual("ShaderKey", inStream.GetNarrowElementName())) {
+ QT3DSU32 theValue = 0;
+ inStream.Att("value", theValue);
+ theMaterial.m_ShaderKey = theValue;
+ } else if (AreEqual("LayerKey", inStream.GetNarrowElementName())) {
+ QT3DSU32 theValue = 0;
+ inStream.Att("count", theValue);
+ theMaterial.m_LayerCount = theValue;
+ } else if (AreEqual("Buffer", inStream.GetNarrowElementName())) {
+ SAllocateBufferFlags theFlags;
+ const char8_t *theLifetimeStr = "", *theType = "", *theFormat = "",
+ *theFilter = "", *theWrap = "", *theName = "";
+ QT3DSF32 theSize = 1.0f;
+ inStream.Att("name", theName);
+ inStream.Att("lifetime", theLifetimeStr);
+ inStream.Att("type", theType);
+ inStream.Att("format", theFormat);
+ inStream.Att("filter", theFilter);
+ inStream.Att("wrap", theWrap);
+ inStream.Att("size", theSize);
+ // Clamp the size to valid amounts
+ if (theSize <= 0)
+ theSize = 1.0f;
+ if (theSize > 1.0f)
+ theSize = 1.0f;
+ if (AreEqual(theLifetimeStr, "scene"))
+ theFlags.SetSceneLifetime(true);
+ qt3ds::render::NVRenderTextureFormats::Enum theTexFormat =
+ ConvertTypeAndFormatToTextureFormat(theType, theFormat);
+ qt3ds::render::NVRenderTextureMagnifyingOp::Enum theMagOp =
+ ConvertFilterToMagOp(theFilter);
+ qt3ds::render::NVRenderTextureCoordOp::Enum theCoordOp =
+ ConvertTextureCoordOp(theWrap);
+ if (*theName == 0) {
+ QT3DS_ASSERT(false);
+ // inFoundation.error( QT3DS_INVALID_PARAMETER, "Buffer is missing its
+ // name" );
+ } else {
+ theMaterial.m_CustomerMaterialCommands.push_back(
+ new SAllocateBuffer(
+ m_StringTable.GetRenderStringTable().RegisterStr(
+ theName), theTexFormat, theMagOp, theCoordOp,
+ theSize, theFlags));
+ }
+ }
+ }
+ }
+
+ if (theMaterial.m_CustomerMaterialCommands.size() == 0) {
+ // add minimal set
+ // add shader to command stream
+ theMaterial.m_CustomerMaterialCommands.push_back(
+ new SBindShader(m_StringTable.GetRenderStringTable().RegisterStr(
+ theMaterial.m_Shaders[0].m_Name.c_str())));
+ // this is a place holder for our input values to the shader
+ theMaterial.m_CustomerMaterialCommands.push_back(new SApplyInstanceValue());
+ // add the render command as last thing
+ theMaterial.m_CustomerMaterialCommands.push_back(new SRender(false));
+ }
+ }
+ }
+
+ bool LoadMaterialClassFromSourcePath(const char *inSourcePath,
+ Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inObjectName,
+ std::vector<SMetaDataLoadWarning> &outWarnings,
+ qt3ds::foundation::IInStream &inStream) override
+ {
+ std::shared_ptr<IDOMFactory> theFactory(
+ IDOMFactory::CreateDOMFactory(m_DataCore->GetStringTablePtr()));
+ qt3dsdm::SDOMElement *theElem = CDOMSerializer::Read(*theFactory, inStream, NULL);
+ if (theElem != NULL) {
+ std::shared_ptr<IDOMReader> theReader(
+ IDOMReader::CreateDOMReader(*theElem, m_DataCore->GetStringTablePtr(),
+ theFactory));
+ LoadMaterialClassXML(*theReader, inInstance, inObjectName, outWarnings,
+ TCharStr(Intern(inSourcePath)));
+ return true;
+ }
+ return false;
+ }
+
+ Option<SMetaDataCustomMaterial> GetMaterialBySourcePath(const char *inSourcePath) override
+ {
+ TCharStr theSourcePath(Intern(inSourcePath));
+ for (TCustomMaterialMap::iterator iter = m_CustomMaterials.begin(),
+ end = m_CustomMaterials.end();
+ iter != end; ++iter) {
+ if (iter->second.m_SourcePath == theSourcePath)
+ return iter->second.ToMaterial();
+ }
+ return Empty();
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Undo/Redo
+ void SetConsumer(TTransactionConsumerPtr inConsumer) override { m_Consumer = inConsumer; }
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Signals
+ virtual TSignalConnectionPtr
+ ConnectInternalCategoryDestroyed(function<void(Qt3DSDMCategoryHandle)> inCallback)
+ {
+ return CONNECT(&SNewMetaDataImpl::internalCategoryDestroyed);
+ }
+ virtual TSignalConnectionPtr
+ ConnectInternalPropertyDestroyed(function<void(Qt3DSDMMetaDataPropertyHandle)> inCallback)
+ {
+ return CONNECT(&SNewMetaDataImpl::internalMetaDataPropertyDestroyed);
+ }
+ virtual TSignalConnectionPtr
+ ConnectInternalEventDestroyed(function<void(Qt3DSDMEventHandle)> inCallback)
+ {
+ return CONNECT(&SNewMetaDataImpl::internalEventDestroyed);
+ }
+ virtual TSignalConnectionPtr
+ ConnectInternalHandlerDestroyed(function<void(Qt3DSDMHandlerHandle)> inCallback)
+ {
+ return CONNECT(&SNewMetaDataImpl::internalHandlerDestroyed);
+ }
+ virtual TSignalConnectionPtr
+ ConnectInternalHandlerArgDestroyed(function<void(Qt3DSDMHandlerHandle, QT3DSU32)> inCallback)
+ {
+ return CONNECT(&SNewMetaDataImpl::internalHandlerArgDestroyed);
+ }
+};
+}
+
+std::shared_ptr<IMetaData> IMetaData::CreateNewMetaData(std::shared_ptr<IDataCore> inDataCore)
+{
+ return std::make_shared<SNewMetaDataImpl>(inDataCore);
+}
+#ifndef QT3DSDM_META_DATA_NO_SIGNALS
+#include "Qt3DSDMMetaData.moc"
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaData.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaData.h
new file mode 100644
index 00000000..67a7fb18
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaData.h
@@ -0,0 +1,400 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+
+#include "Qt3DSDMMetaDataTypes.h"
+#include "foundation/Qt3DSOption.h"
+#include <functional>
+#include <memory>
+#include "Qt3DSDMActionInfo.h"
+#include "Qt3DSDMStringTable.h"
+#include "Qt3DSDMValue.h"
+
+struct SShaderParameters;
+namespace qt3ds {
+namespace foundation {
+ class IInStream;
+}
+}
+
+namespace qt3dsdm {
+
+using qt3ds::foundation::Option;
+using qt3ds::QT3DSU32;
+using std::pair;
+using std::vector;
+
+class ISignalConnection;
+class ITransactionConsumer;
+class IDOMWriter;
+class IDOMReader;
+class IDataCore;
+class CDataCoreProducer;
+
+struct MetaDataLoadWarningType
+{
+ enum Enum {
+ Unknown = 0,
+ InvalidProperty,
+ InvalidEvent,
+ InvalidHandler,
+ };
+};
+
+struct MetaDataLoadWarningMessage
+{
+ enum Enum {
+ Unknown = 0,
+ GeneralError,
+ MissingName,
+ InvalidDefault,
+ };
+};
+
+struct SMetaDataLoadWarning
+{
+ MetaDataLoadWarningType::Enum m_Type;
+ MetaDataLoadWarningMessage::Enum m_Message;
+ TCharStr m_ExtraInfo;
+
+ SMetaDataLoadWarning(MetaDataLoadWarningType::Enum inType,
+ MetaDataLoadWarningMessage::Enum inMessage, TCharStr inInfo = TCharStr())
+ : m_Type(inType)
+ , m_Message(inMessage)
+ , m_ExtraInfo(inInfo)
+ {
+ }
+ SMetaDataLoadWarning()
+ : m_Type(MetaDataLoadWarningType::Unknown)
+ , m_Message(MetaDataLoadWarningMessage::Unknown)
+ {
+ }
+};
+
+/**
+ * Meta data class to hold meta data descriptions of the objects used in DataModel.
+ * A user-visible type in DataModel (things in the timeline) has a specific set of metadata,
+ * the type can have properties, events, handlers, and references.
+ *
+ * Properties are exactly what they sound like. Events are messages the object can send,
+ * and handlers are functions that are exported from the object.
+ *
+ * Events are hooked up to handlers using an ActionCore which takes tuples
+ * of instance, event, handler and slide and maintains a specific instance of an action.
+ *
+ * References allow us to track which properties are being accessed. Properties are stripped
+ * from the engine portion of the runtime (although they still appear in the scenegraph)
+ * if they aren't animated nor set in a given slide.
+ */
+class IMetaData
+{
+protected:
+ virtual ~IMetaData() {}
+public:
+ typedef const TCharStr &TStrType;
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Sharing some utility objects
+ virtual IStringTable &GetStringTable() = 0;
+ virtual TStringTablePtr GetStringTablePtr() = 0;
+ virtual std::shared_ptr<IDataCore> GetDataCore() = 0;
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Canonical Instances
+ // Map an instance to a given type name. The type name is stored, along with the instance
+ // handle in the file if this object is *not* canonical.
+ // If this object is canonical, then we expect this mapping setup before loading the
+ // canonical data, and we will use a type lookup instead of a direct handle lookup
+ // when loading canonical information.
+ virtual void SetInstanceAsCanonical(Qt3DSDMInstanceHandle inInstance, TStrType inTypename) = 0;
+
+ virtual Qt3DSDMInstanceHandle GetCanonicalInstanceForType(TStrType inTypename) = 0;
+ // If this instance wasn't registered as canonical, then we return empty.
+ virtual Option<TCharStr> GetTypeForCanonicalInstance(Qt3DSDMInstanceHandle inInstance) = 0;
+ // Gets the type for this instance via derivation
+ virtual Option<TCharStr> GetTypeForInstance(Qt3DSDMInstanceHandle inInstance) = 0;
+ // Get group count for instance
+ virtual QT3DSU32 GetGroupCountForInstance(Qt3DSDMInstanceHandle inInstance) = 0;
+ // Get all group names
+ virtual QT3DSU32 GetGroupNamesForInstance(Qt3DSDMInstanceHandle inInstance,
+ std::vector<TCharStr> &outNames) = 0;
+ // Get group count for instance
+ virtual Option<TCharStr> GetGroupFilterNameForInstance(Qt3DSDMInstanceHandle inInstance,
+ long inIndex) = 0;
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Categories
+ // Categories appear in the UI to divide up large lists of events, actions, and properties.
+ // Returns <handle,true> if a category was created
+ // else returns <handle,false>
+ virtual pair<Qt3DSDMCategoryHandle, bool> GetOrCreateCategory(TStrType inName) = 0;
+
+ virtual void SetCategoryInfo(Qt3DSDMCategoryHandle inCategory, TStrType inIcon,
+ TStrType inHighlight, TStrType inDescription) = 0;
+ virtual void DestroyCategory(Qt3DSDMCategoryHandle inCategory) = 0;
+
+ virtual Option<SCategoryInfo> GetCategoryInfo(Qt3DSDMCategoryHandle inCategory) = 0;
+ virtual Qt3DSDMCategoryHandle FindCategoryByName(TStrType inName) = 0;
+ virtual void GetCategories(vector<Qt3DSDMCategoryHandle> &outCategories) = 0;
+ virtual Option<SCategoryInfo> GetEventCategory(TStrType inName) = 0;
+ virtual Option<SCategoryInfo> GetHandlerCategory(TStrType inName) = 0;
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Properties
+ // Will create the property on the instance associated with this type name if it doesn't exist.
+ // Metadata properties can be redifined for child instances and this re-definition will override
+ // the parent definition. We currently use this to give different formal names and description
+ // to the sourcepath property (for models it is mesh, for materials it is image).
+ virtual Qt3DSDMMetaDataPropertyHandle
+ CreateMetaDataProperty(Qt3DSDMInstanceHandle inInstance) = 0;
+
+ // For properties, you set the default values separately
+ // This may delete the underlying data model property rebuild it.
+ virtual void SetMetaDataPropertyInfo(Qt3DSDMMetaDataPropertyHandle inPropertyHandle,
+ TStrType inName, TStrType inFormalName,
+ TStrType inDescription, TStrType inUsage,
+ CompleteMetaDataType::Enum inDataType,
+ const SValue &inDefaultValue,
+ const TMetaDataData &inMetaData, TStrType inGroupName,
+ bool inIsHidden = false, bool inIsAnimatable = false,
+ bool inIsControllable = false) = 0;
+
+ // Destroy just this meta data property
+ // Does not destroy the underlying data core property, so this function isn't a perfect
+ // reverse of the above system. This *just* destroyed the meta data pointed to by
+ // this property.
+ virtual void DestroyMetaDataProperty(Qt3DSDMMetaDataPropertyHandle inProperty) = 0;
+
+ virtual Qt3DSDMMetaDataPropertyHandle GetMetaDataProperty(Qt3DSDMInstanceHandle inInstance,
+ TStrType inPropertyName) = 0;
+ virtual Qt3DSDMMetaDataPropertyHandle GetMetaDataProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+ virtual Option<SMetaDataPropertyInfo>
+ GetMetaDataPropertyInfo(Qt3DSDMMetaDataPropertyHandle inProperty) = 0;
+ // Get all of the meta data properties defined on this object or its derivation parents
+ virtual void GetMetaDataProperties(Qt3DSDMInstanceHandle inInstance,
+ vector<Qt3DSDMMetaDataPropertyHandle> &outProperties) = 0;
+
+ // Get the meta data properties defined on *only* this object, don't search parents
+ virtual Qt3DSDMMetaDataPropertyHandle
+ GetOrCreateSpecificMetaDataProperty(Qt3DSDMInstanceHandle inInstance,
+ TStrType inPropertyName) = 0;
+ virtual void
+ GetSpecificMetaDataProperties(Qt3DSDMInstanceHandle inInstance,
+ vector<Qt3DSDMMetaDataPropertyHandle> &outProperties) = 0;
+
+ virtual TCharStr GetFormalName(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+ virtual AdditionalMetaDataType::Value GetAdditionalMetaDataType(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+ virtual TMetaDataData GetAdditionalMetaDataData(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+ virtual bool IsCustomProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+ virtual SValue GetDefaultValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+
+ virtual void
+ SetMetaDataPropertyFilters(Qt3DSDMMetaDataPropertyHandle inProperty,
+ qt3ds::foundation::NVConstDataRef<SPropertyFilterInfo> inFilters) = 0;
+ virtual qt3ds::foundation::NVConstDataRef<SPropertyFilterInfo>
+ GetMetaDataPropertyFilters(Qt3DSDMMetaDataPropertyHandle inProperty) = 0;
+ virtual void RemoveMetaDataPropertyFilters(Qt3DSDMMetaDataPropertyHandle inProperty) = 0;
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Events
+ // CreateMetaDataEvent was original named CreateEvent but this collides with
+ // the microsoft macro CreateEvent which expands to CreateEventA or CreateEventW
+ virtual Qt3DSDMEventHandle CreateMetaDataEvent(Qt3DSDMInstanceHandle inInstance) = 0;
+ virtual void SetEventInfo(Qt3DSDMEventHandle inEventHandle, TStrType inName,
+ TStrType inFormalName, TStrType inCategory,
+ TStrType inDescription) = 0;
+
+ virtual void DestroyEvent(Qt3DSDMEventHandle inEventHandle) = 0;
+
+ virtual void GetEvents(Qt3DSDMInstanceHandle inInstance, TEventHandleList &outEvents) = 0;
+ virtual Qt3DSDMEventHandle FindEvent(Qt3DSDMInstanceHandle inInstance, TStrType inName) = 0;
+ virtual Option<SEventInfo> GetEventInfo(Qt3DSDMEventHandle inEventHandle) = 0;
+ virtual bool IsCustomEvent(Qt3DSDMEventHandle inEventHandle) = 0;
+
+ // Get/Find an event that occurs on just this instance, don't search parent instances
+ virtual void GetSpecificEvents(Qt3DSDMInstanceHandle inInstance,
+ TEventHandleList &outEvents) = 0;
+ virtual Qt3DSDMEventHandle GetOrCreateSpecificEvent(Qt3DSDMInstanceHandle inInstance,
+ TStrType inName) = 0;
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Handlers
+ virtual Qt3DSDMHandlerHandle CreateHandler(Qt3DSDMInstanceHandle inInstance) = 0;
+ virtual void SetHandlerInfo(Qt3DSDMHandlerHandle inHandle, TStrType inName,
+ TStrType inFormalName, TStrType inCategory,
+ TStrType inDescription) = 0;
+ virtual void DestroyHandler(Qt3DSDMHandlerHandle inHandlerHandle) = 0;
+
+ virtual Qt3DSDMHandlerHandle FindHandlerByName(Qt3DSDMInstanceHandle inInstance,
+ TStrType inName) = 0;
+ virtual Option<SHandlerInfo> GetHandlerInfo(Qt3DSDMHandlerHandle inHandlerHandle) = 0;
+ virtual void GetHandlers(Qt3DSDMInstanceHandle inInstance, THandlerHandleList &outHandlers) = 0;
+ virtual bool IsCustomHandler(Qt3DSDMHandlerHandle inEventHandle) = 0;
+
+ virtual void GetSpecificHandlers(Qt3DSDMInstanceHandle inInstance,
+ THandlerHandleList &outHandlers) = 0;
+ virtual Qt3DSDMHandlerHandle GetOrCreateSpecificHandler(Qt3DSDMInstanceHandle inInstance,
+ TStrType inName) = 0;
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Handler Arguments
+ virtual QT3DSU32 AddHandlerArgument(Qt3DSDMHandlerHandle inHandler) = 0;
+ virtual void
+ SetHandlerArgumentInfo(Qt3DSDMHandlerHandle inHandler, QT3DSU32 inArgIndex, TStrType inName,
+ TStrType inFormalName, TStrType inDescription,
+ CompleteMetaDataType::Enum inDataType, const SValue &inDefaultValue,
+ const TMetaDataData &inMetaData, HandlerArgumentType::Value inArgType) = 0;
+
+ virtual void DestroyHandlerArgument(Qt3DSDMHandlerHandle inHandler, QT3DSU32 inArgIndex) = 0;
+
+ virtual Option<SMetaDataHandlerArgumentInfo>
+ FindHandlerArgumentByName(Qt3DSDMHandlerHandle inHandler, TStrType inName) = 0;
+ virtual void GetHandlerArguments(Qt3DSDMHandlerHandle inHandler,
+ vector<SMetaDataHandlerArgumentInfo> &outArguments) = 0;
+ virtual Option<SMetaDataHandlerArgumentInfo>
+ GetHandlerArgumentInfo(Qt3DSDMHandlerHandle inHandle, QT3DSU32 inIndex) = 0;
+ virtual QT3DSU32 GetNumHandlerArguments(Qt3DSDMHandlerHandle inHandler) = 0;
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // References
+ // Duplicate references are removed from this instance
+ virtual void AddReference(Qt3DSDMInstanceHandle inInstance, TStrType inRefString) = 0;
+ virtual void DestroyReferences(Qt3DSDMInstanceHandle inInstance) = 0;
+
+ // Does the recursive gather from all the parents. Duplicate references are removed from the
+ // final list.
+ virtual void GetReferences(Qt3DSDMInstanceHandle inInstance,
+ std::vector<TCharStr> &outReferences) = 0;
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Instance-global functions
+ // Destroy all meta data that relates to this instance.
+ // Calling this on a derived instance does nothing, this only works if this specific
+ // instance was mapped directly to meta data.
+ virtual void DestroyMetaData(Qt3DSDMInstanceHandle inInstance) = 0;
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Serialization
+ // You can either save out in canonical format (and it will only save canonical-instance-related
+ // information *or* you can save out in normal format where we link directly to instance handle
+ // instead of to typename
+ virtual void Save(IDOMWriter &inWriter) = 0;
+ // Loading expects the canonical instances to be setup already which means that
+ // it will perform lookups based on
+ // One huge assumption is that the reader is using the same string table
+ // that this object was built with
+ // InIsCanonical tells us whether to mark loaded categories as canonical
+ // or not.
+ virtual void Load(IDOMReader &ioStream) = 0;
+
+ // Load meta data and apply it to just this instance
+ virtual void LoadInstance(IDOMReader &inReader, Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inName,
+ std::vector<SMetaDataLoadWarning> &outWarnings) = 0;
+
+ // Save just this instances meta data out to the writer
+ virtual void SaveInstance(IDOMWriter &inWriter, Qt3DSDMInstanceHandle inInstance) = 0;
+
+ // Load effect meta data from file and apply it to just this instance
+ virtual void LoadEffectInstance(const char *inShaderFile, Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inName,
+ std::vector<SMetaDataLoadWarning> &outWarnings,
+ qt3ds::foundation::IInStream &inStream) = 0;
+
+ virtual bool IsEffectInstanceRegistered(const char *inName) = 0;
+ virtual void LoadEffectXML(IDOMReader &inStream, Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inObjectName,
+ std::vector<SMetaDataLoadWarning> &outWarnings,
+ const TCharStr &inSourcePath) = 0;
+ virtual bool LoadEffectXMLFromSourcePath(const char *inSourcePath,
+ Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inObjectName,
+ std::vector<SMetaDataLoadWarning> &outWarnings,
+ qt3ds::foundation::IInStream &inStream) = 0;
+ virtual Option<SMetaDataEffect> GetEffectBySourcePath(const char *inName) = 0;
+
+ virtual void LoadMaterialInstance(const char *inShaderFile,
+ Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inName,
+ std::vector<SMetaDataLoadWarning> &outWarnings,
+ qt3ds::foundation::IInStream &inStream) = 0;
+ virtual bool IsMaterialClassRegistered(const char *inName) = 0;
+ virtual void LoadMaterialClassXML(IDOMReader &inStream, Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inObjectName,
+ std::vector<SMetaDataLoadWarning> &outWarnings,
+ const TCharStr &inSourcePath) = 0;
+ virtual bool LoadMaterialClassFromSourcePath(const char *inSourcePath,
+ Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inObjectName,
+ std::vector<SMetaDataLoadWarning> &outWarnings,
+ qt3ds::foundation::IInStream &inStream) = 0;
+ virtual Option<SMetaDataCustomMaterial> GetMaterialBySourcePath(const char *inSourcePath) = 0;
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Undo/Redo
+ virtual void SetConsumer(std::shared_ptr<ITransactionConsumer> inConsumer) = 0;
+
+#ifndef QT3DSDM_META_DATA_NO_SIGNALS
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Signals
+ // These events are sent out only once, they aren't set into the transaction consumer
+ // to be sent out upon undo and redo. These events are meant for chaining together side effects
+ // so other systems don't have references to invalid handler arguments and handles.
+ // Also, the objects in these messages are still valid so you can query information about them
+ // at this time. They will be destroyed subsequent to the event.
+ virtual std::shared_ptr<ISignalConnection>
+ ConnectInternalCategoryDestroyed(std::function<void(Qt3DSDMCategoryHandle)> inCallback) = 0;
+ virtual std::shared_ptr<ISignalConnection> ConnectInternalPropertyDestroyed(
+ std::function<void(Qt3DSDMMetaDataPropertyHandle)> inCallback) = 0;
+ virtual std::shared_ptr<ISignalConnection>
+ ConnectInternalEventDestroyed(std::function<void(Qt3DSDMEventHandle)> inCallback) = 0;
+ virtual std::shared_ptr<ISignalConnection>
+ ConnectInternalHandlerDestroyed(std::function<void(Qt3DSDMHandlerHandle)> inCallback) = 0;
+ virtual std::shared_ptr<ISignalConnection> ConnectInternalHandlerArgDestroyed(
+ std::function<void(Qt3DSDMHandlerHandle, QT3DSU32)> inCallback) = 0;
+#endif
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ // Creation/Lifetime Management
+ friend class std::shared_ptr<IMetaData>;
+ // The data core is used to create the properties if they don't exist or
+ // query their underlying type if they do exist. We also subscribe to
+ // the datacore's beforeInstanceDelete function in order to ensure
+ // that we delete our existing meta data for instances that are being deleted.
+ static std::shared_ptr<IMetaData> CreateNewMetaData(std::shared_ptr<IDataCore> inDataCore);
+};
+
+typedef std::shared_ptr<IMetaData> TNewMetaDataPtr;
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaDataTypes.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaDataTypes.h
new file mode 100644
index 00000000..5532e0a5
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaDataTypes.h
@@ -0,0 +1,350 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#include "Qt3DSDMMetaDataValue.h"
+
+namespace qt3ds {
+namespace render {
+ namespace dynamic {
+ struct SCommand;
+ struct SPropertyDeclaration;
+ struct SPropertyDefinition;
+ }
+}
+}
+
+namespace qt3dsdm {
+
+struct HandlerArgumentType {
+
+ enum Value {
+ None,
+ Property, // Property reference. Load the Properties of the Target Object.
+ Dependent, // Property type depends on another property.
+ Slide, // Slide reference. Load the list of slides of the Target Object if
+ // applicable.
+ Event, // Event reference. Load the applicable Events of the Target Object.
+ Object, // Object reference. Used for dynamic actions with object referenced
+ // property.
+ Signal, // Signal reference. Used for emiting signals fired from the trigger
+ // object.
+ };
+
+ Q_ENUM(Value)
+ Q_GADGET
+};
+
+struct CompleteMetaDataType
+{
+ enum Enum {
+ Unknown = 0,
+ StringList,
+ FloatRange,
+ LongRange,
+ Float,
+ Long,
+ Float2,
+ Vector,
+ Scale,
+ Rotation,
+ Color,
+ Boolean,
+ Slide,
+ Font,
+ FontSize,
+ String,
+ MultiLineString,
+ ObjectRef,
+ Image,
+ Mesh,
+ Import,
+ Texture,
+ Guid,
+ StringListOrInt,
+ Renderable,
+ Image2D,
+ Buffer,
+ PathBuffer,
+ ShadowMapResolution,
+ };
+
+ // Functions defined in UICDMMetaData.cpp
+ static DataModelDataType::Value ToDataType(Enum inCompleteType);
+ static AdditionalMetaDataType::Value ToAdditionalType(Enum inCompleteType);
+ static CompleteMetaDataType::Enum ToCompleteType(DataModelDataType::Value inDataType,
+ AdditionalMetaDataType::Value inAdditionalType);
+ Q_ENUM(Enum)
+ Q_GADGET
+};
+
+typedef std::pair<DataModelDataType::Value, AdditionalMetaDataType::Value> TDataTypePair;
+
+inline bool Equals(const TMetaDataData &lhs, const TMetaDataData &rhs)
+{
+ return rhs == lhs;
+}
+
+inline AdditionalMetaDataType::Value GetMetaDataValueType(const TMetaDataData &inValue)
+{
+ return inValue.getType();
+}
+
+// Base class shared between property info
+// and handler arguments.
+struct SMetaPropertyBase
+{
+ TCharStr m_Name;
+ TCharStr m_FormalName;
+ TCharStr m_Usage;
+ TCharStr m_Description;
+ CompleteMetaDataType::Enum m_CompleteType;
+ TMetaDataData m_MetaDataData;
+ SValue m_DefaultValue;
+
+ SMetaPropertyBase()
+ : m_CompleteType(CompleteMetaDataType::Float)
+ {
+ }
+ bool operator==(const SMetaPropertyBase &inOther) const
+ {
+ return m_Name == inOther.m_Name && m_FormalName == inOther.m_FormalName
+ && m_Usage == inOther.m_Usage && m_Description == inOther.m_Description
+ && m_CompleteType == inOther.m_CompleteType
+ && Equals(m_DefaultValue.toOldSkool(), inOther.m_DefaultValue.toOldSkool())
+ && Equals(m_MetaDataData, inOther.m_MetaDataData);
+ }
+ DataModelDataType::Value GetDataType() const
+ {
+ return CompleteMetaDataType::ToDataType(m_CompleteType);
+ }
+ AdditionalMetaDataType::Value GetAdditionalType() const
+ {
+ return CompleteMetaDataType::ToAdditionalType(m_CompleteType);
+ }
+};
+
+struct SMetaDataPropertyInfo : SMetaPropertyBase
+{
+ Qt3DSDMInstanceHandle m_Instance;
+ Qt3DSDMPropertyHandle m_Property;
+ bool m_Controllable = false; // Can this property be controlled via data input (default no)
+ bool m_IsHidden = false; // Is this property hidden in the inspector (default no)
+ bool m_Animatable = true; // Is this property animatable (default yes)
+ // Note: all animatables are controllable
+
+ TCharStr m_GroupName; // Name of the group this property belongs to or "default"
+
+ SMetaDataPropertyInfo(Qt3DSDMInstanceHandle inInstance)
+ : m_Instance(inInstance)
+ {
+ }
+ SMetaDataPropertyInfo() {}
+
+ bool operator==(const SMetaDataPropertyInfo &inOther) const
+ {
+ return m_Instance == inOther.m_Instance && m_Property == inOther.m_Property
+ && m_IsHidden == inOther.m_IsHidden && m_Animatable == inOther.m_Animatable
+ && m_GroupName == inOther.m_GroupName
+ && m_Controllable == inOther.m_Controllable
+ && SMetaPropertyBase::operator==(inOther);
+ }
+
+ bool operator!=(const SMetaDataPropertyInfo &inOther) const { return !(*this == inOther); }
+};
+
+struct SMetaDataHandlerArgumentInfo : SMetaPropertyBase
+{
+ Qt3DSDMHandlerHandle m_Handler;
+ HandlerArgumentType::Value m_ArgType;
+ SMetaDataHandlerArgumentInfo(Qt3DSDMHandlerHandle inHandler = Qt3DSDMHandlerHandle())
+ : m_Handler(inHandler)
+ , m_ArgType(HandlerArgumentType::None)
+ {
+ }
+};
+
+struct SCategoryInfo
+{
+ TCharStr m_Name;
+ TCharStr m_Description;
+ TCharStr m_Icon;
+ TCharStr m_HighlightIcon;
+ bool m_Canonical;
+
+ SCategoryInfo()
+ : m_Canonical(false)
+ {
+ }
+ SCategoryInfo(TCharStr inName)
+ : m_Name(inName)
+ , m_Canonical(false)
+ {
+ }
+};
+
+struct SEventInfo
+{
+ bool operator!=(const SEventInfo &inEvent) const
+ {
+ return (m_Name != inEvent.m_Name || m_FormalName != inEvent.m_FormalName
+ || m_Category != inEvent.m_Category || m_Description != inEvent.m_Description);
+ }
+
+ TCharStr m_Name;
+ TCharStr m_FormalName;
+ TCharStr m_Category;
+ TCharStr m_Description;
+};
+
+struct SHandlerInfo
+{
+ TCharStr m_Name;
+ TCharStr m_FormalName;
+ TCharStr m_Category;
+ TCharStr m_Description;
+
+ bool operator!=(const SHandlerInfo &inHandler) const
+ {
+ return (m_Name != inHandler.m_Name || m_FormalName != inHandler.m_FormalName
+ || m_Category != inHandler.m_Category || m_Description != inHandler.m_Description);
+ }
+};
+
+struct PropertyFilterTypes
+{
+ enum Enum {
+ Unknown,
+ ShowIfEqual,
+ HideIfEqual,
+ };
+};
+
+struct SPropertyFilterInfo
+{
+ PropertyFilterTypes::Enum m_FilterType;
+ Qt3DSDMPropertyHandle m_FilterProperty;
+ SValue m_Value;
+ SPropertyFilterInfo()
+ : m_FilterType(PropertyFilterTypes::Unknown)
+ {
+ }
+ SPropertyFilterInfo(PropertyFilterTypes::Enum inFilterType, Qt3DSDMPropertyHandle inProp,
+ const SValue &inValue)
+ : m_FilterType(inFilterType)
+ , m_FilterProperty(inProp)
+ , m_Value(inValue)
+ {
+ }
+};
+struct SMetaDataShader
+{
+ TCharStr m_Name;
+ TCharStr m_Type; ///< shader type (GLSL or HLSL)
+ TCharStr m_Version; ///< shader version (e.g. 330 vor GLSL)
+ // Code contains both the vertex and fragment portions separated by #define's.
+ //#define VERTEX_SHADER, #define FRAGMENT_SHADER
+ TCharStr m_Code;
+ bool m_HasGeomShader;
+ bool m_IsComputeShader;
+ SMetaDataShader()
+ : m_HasGeomShader(false)
+ , m_IsComputeShader(false)
+ {
+ }
+ SMetaDataShader(const TCharStr &inName, const TCharStr &inType, const TCharStr &inVersion,
+ const TCharStr &inCode, bool hasGeom, bool isCompute)
+ : m_Name(inName)
+ , m_Type(inType)
+ , m_Version(inVersion)
+ , m_Code(inCode)
+ , m_HasGeomShader(hasGeom)
+ , m_IsComputeShader(isCompute)
+ {
+ }
+};
+
+struct SMetaDataDynamicObject
+{
+ TCharStr m_Name;
+ qt3ds::foundation::NVConstDataRef<SMetaDataShader> m_Shaders;
+ qt3ds::foundation::NVConstDataRef<qt3ds::render::dynamic::SPropertyDefinition> m_Properties;
+ SMetaDataDynamicObject() {}
+ SMetaDataDynamicObject(
+ const TCharStr &inName, qt3ds::foundation::NVConstDataRef<SMetaDataShader> inShaders,
+ qt3ds::foundation::NVConstDataRef<qt3ds::render::dynamic::SPropertyDefinition> inProperties)
+ : m_Name(inName)
+ , m_Shaders(inShaders)
+ , m_Properties(inProperties)
+ {
+ }
+};
+
+struct SMetaDataEffect : public SMetaDataDynamicObject
+{
+ qt3ds::foundation::NVConstDataRef<qt3ds::render::dynamic::SCommand *> m_EffectCommands;
+ SMetaDataEffect() {}
+ SMetaDataEffect(
+ const TCharStr &inName, qt3ds::foundation::NVConstDataRef<SMetaDataShader> inShaders,
+ qt3ds::foundation::NVConstDataRef<qt3ds::render::dynamic::SPropertyDefinition> inProperties,
+ qt3ds::foundation::NVConstDataRef<qt3ds::render::dynamic::SCommand *> inEffectCommands)
+ : SMetaDataDynamicObject(inName, inShaders, inProperties)
+ , m_EffectCommands(inEffectCommands)
+ {
+ }
+};
+
+struct SMetaDataCustomMaterial : public SMetaDataDynamicObject
+{
+ qt3ds::foundation::NVConstDataRef<qt3ds::render::dynamic::SCommand *> m_CustomMaterialCommands;
+ bool m_HasTransparency;
+ bool m_HasRefraction;
+ bool m_AlwaysDirty;
+ unsigned int m_ShaderKey;
+ unsigned int m_LayerCount;
+ SMetaDataCustomMaterial() {}
+ SMetaDataCustomMaterial(
+ const TCharStr &inName, qt3ds::foundation::NVConstDataRef<SMetaDataShader> inShaders,
+ qt3ds::foundation::NVConstDataRef<qt3ds::render::dynamic::SPropertyDefinition> inProperties,
+ qt3ds::foundation::NVConstDataRef<qt3ds::render::dynamic::SCommand *> inCustomMaterialCommands,
+ bool inHasTransparency, bool inHasRefraction, bool inIsAlwaysDirty,
+ unsigned int inShaderKey, unsigned int inLayerCount)
+ : SMetaDataDynamicObject(inName, inShaders, inProperties)
+ , m_CustomMaterialCommands(inCustomMaterialCommands)
+ , m_HasTransparency(inHasTransparency)
+ , m_HasRefraction(inHasRefraction)
+ , m_AlwaysDirty(inIsAlwaysDirty)
+ , m_ShaderKey(inShaderKey)
+ , m_LayerCount(inLayerCount)
+ {
+ }
+};
+}
+
+Q_DECLARE_METATYPE(qt3dsdm::HandlerArgumentType::Value)
+
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaDataValue.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaDataValue.h
new file mode 100644
index 00000000..b981b956
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMMetaDataValue.h
@@ -0,0 +1,251 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#include <EASTL/string.h>
+#include <EASTL/vector.h>
+#include "Qt3DSDMHandles.h"
+#include "Qt3DSDMDataTypes.h"
+#include "foundation/Qt3DSDataRef.h"
+#include "Qt3DSDMValue.h"
+
+#include <QStringList>
+
+namespace qt3dsdm {
+
+struct AdditionalMetaDataType {
+
+ enum Value {
+ None,
+ StringList,
+ Range,
+ Image,
+ Color,
+ Rotation,
+ Font,
+ FontSize,
+ MultiLine,
+ ObjectRef,
+ Mesh,
+ Import,
+ Texture,
+ Renderable,
+ PathBuffer,
+ ShadowMapResolution,
+ String,
+ };
+
+
+ Q_ENUM(Value)
+ Q_GADGET
+};
+
+// List type metadata
+typedef eastl::vector<TCharStr> TMetaDataStringList;
+
+// Float type metadata
+struct SMetaDataRange
+{
+ SMetaDataRange() {}
+
+ SMetaDataRange(float min, float max, int decimals = -1)
+ : m_min(min)
+ , m_max(max)
+ , m_decimals(decimals)
+ {
+ }
+
+ bool operator==(const SMetaDataRange &other) const
+ {
+ // no need to check m_decimals for quality as it is not significant to the range value
+ return m_min == other.m_min && m_max == other.m_max;
+ }
+
+ float m_min = 0.0f;
+ float m_max = 0.0f;
+ int m_decimals = -1; // num decimals to show, -1: dynamically calculated
+};
+}
+
+namespace qt3ds {
+namespace foundation {
+
+ template <>
+ struct DestructTraits<qt3dsdm::SMetaDataRange>
+ {
+ void destruct(qt3dsdm::SMetaDataRange &) {}
+ };
+}
+}
+
+namespace qt3dsdm {
+
+template <typename TDataType>
+struct SMetaDataTypeToEnumMap
+{
+};
+template <>
+struct SMetaDataTypeToEnumMap<eastl::vector<TCharStr>>
+{
+ static AdditionalMetaDataType::Value getType() { return AdditionalMetaDataType::StringList; }
+};
+template <>
+struct SMetaDataTypeToEnumMap<SMetaDataRange>
+{
+ static AdditionalMetaDataType::Value getType() { return AdditionalMetaDataType::Range; }
+};
+
+struct SMetaDataValueTraits
+{
+ typedef AdditionalMetaDataType::Value TIdType;
+
+ enum {
+ TBufferSize = sizeof(TMetaDataStringList),
+ };
+
+ static TIdType getNoDataId() { return AdditionalMetaDataType::None; }
+
+ template <typename TDataType>
+ static TIdType getType()
+ {
+ return SMetaDataTypeToEnumMap<TDataType>::getType();
+ }
+
+ template <typename TRetType, typename TVisitorType>
+ static TRetType visit(char *inData, AdditionalMetaDataType::Value inType, TVisitorType inVisitor)
+ {
+ switch (inType) {
+ case AdditionalMetaDataType::StringList:
+ return inVisitor(*reinterpret_cast<TMetaDataStringList *>(inData));
+ case AdditionalMetaDataType::Range:
+ return inVisitor(*reinterpret_cast<SMetaDataRange *>(inData));
+ default:
+ QT3DS_ASSERT(false);
+ case AdditionalMetaDataType::None:
+ return inVisitor();
+ }
+ }
+
+ template <typename TRetType, typename TVisitorType>
+ static TRetType visit(const char *inData, AdditionalMetaDataType::Value inType,
+ TVisitorType inVisitor)
+ {
+ switch (inType) {
+ case AdditionalMetaDataType::StringList:
+ return inVisitor(*reinterpret_cast<const TMetaDataStringList *>(inData));
+ case AdditionalMetaDataType::Range:
+ return inVisitor(*reinterpret_cast<const SMetaDataRange *>(inData));
+ default:
+ QT3DS_ASSERT(false);
+ case AdditionalMetaDataType::None:
+ return inVisitor();
+ }
+ }
+};
+
+struct SMetaDataData
+ : public qt3ds::foundation::
+ DiscriminatedUnion<qt3ds::foundation::
+ DiscriminatedUnionGenericBase<SMetaDataValueTraits,
+ Qt3DSDMDataTypeUnionTraits::
+ TBufferSize>,
+ SMetaDataValueTraits::TBufferSize>
+{
+ typedef qt3ds::foundation::
+ DiscriminatedUnion<qt3ds::foundation::DiscriminatedUnionGenericBase<SMetaDataValueTraits,
+ Qt3DSDMDataTypeUnionTraits::
+ TBufferSize>,
+ SMetaDataValueTraits::TBufferSize>
+ TBase;
+ SMetaDataData() {}
+ SMetaDataData(const SMetaDataData &inOther)
+ : TBase(static_cast<const TBase &>(inOther))
+ {
+ }
+ SMetaDataData &operator=(const SMetaDataData &inOther)
+ {
+ TBase::operator=(static_cast<const TBase &>(inOther));
+ return *this;
+ }
+ SMetaDataData(const TMetaDataStringList &inData)
+ : TBase(inData)
+ {
+ }
+ SMetaDataData(const SMetaDataRange &inData)
+ : TBase(inData)
+ {
+ }
+ SMetaDataData &operator=(const TMetaDataStringList &inData)
+ {
+ TBase::operator=(inData);
+ return *this;
+ }
+ SMetaDataData &operator=(const SMetaDataRange &inData)
+ {
+ TBase::operator=(inData);
+ return *this;
+ }
+ bool empty() const { return getType() == AdditionalMetaDataType::None; }
+};
+
+template <>
+struct Qt3DSDMGetter<SMetaDataData>
+{
+ template <typename TRetType>
+ TRetType doGet(const SMetaDataData &inValue)
+ {
+ return inValue.getData<TRetType>();
+ }
+};
+
+template <>
+struct Qt3DSDMValueTyper<SMetaDataData>
+{
+ AdditionalMetaDataType::Value Get(const SMetaDataData &inValue) { return inValue.getType(); }
+};
+
+typedef SMetaDataData TMetaDataData;
+
+
+template <>
+inline QStringList get<QStringList>(const qt3dsdm::SMetaDataData &inType)
+{
+ QStringList result;
+ if (inType.getType() == qt3dsdm::AdditionalMetaDataType::None)
+ return result;
+
+ auto list = qt3dsdm::get<qt3dsdm::TMetaDataStringList>(inType);
+ std::transform(list.begin(), list.end(), std::back_inserter(result), [](const Qt3DSDMStr &s) {
+ return QString::fromWCharArray(s.wide_str());
+ });
+ return result;
+}
+}
+
+Q_DECLARE_METATYPE(qt3dsdm::AdditionalMetaDataType)
+
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMPropertyDefinition.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMPropertyDefinition.h
new file mode 100644
index 00000000..d324b539
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMPropertyDefinition.h
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_PROPERTY_DEFINITION_H
+#define QT3DSDM_PROPERTY_DEFINITION_H
+
+#include "Qt3DSDMDataTypes.h"
+
+namespace qt3dsdm {
+
+struct Qt3DSDMPropertyDefinition
+{
+ TCharStr m_Name;
+ Qt3DSDMInstanceHandle m_Instance;
+ DataModelDataType::Value m_Type;
+
+ Qt3DSDMPropertyDefinition()
+ : m_Type(DataModelDataType::None)
+ {
+ }
+ Qt3DSDMPropertyDefinition(Qt3DSDMInstanceHandle inInstanceHandle, TCharPtr inName,
+ DataModelDataType::Value inType)
+ : m_Name(inName)
+ , m_Instance(inInstanceHandle)
+ , m_Type(inType)
+ {
+ }
+ Qt3DSDMPropertyDefinition(const Qt3DSDMPropertyDefinition &inOther)
+ : m_Name(inOther.m_Name)
+ , m_Instance(inOther.m_Instance)
+ , m_Type(inOther.m_Type)
+ {
+ }
+
+ Qt3DSDMPropertyDefinition &operator=(const Qt3DSDMPropertyDefinition &inOther)
+ {
+ if (this != &inOther) {
+ m_Name = inOther.m_Name;
+ m_Instance = inOther.m_Instance;
+ m_Type = inOther.m_Type;
+ }
+ return *this;
+ }
+};
+
+typedef std::vector<Qt3DSDMPropertyDefinition> TPropertyDefinitionList;
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalStructImpl.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalStructImpl.h
new file mode 100644
index 00000000..9664566f
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalStructImpl.h
@@ -0,0 +1,305 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_SIGNAL_STRUCT_IMPL_H
+#define QT3DSDM_SIGNAL_STRUCT_IMPL_H
+#include "Qt3DSDMSignalStructs.h"
+
+namespace qt3dsdm {
+
+struct SSignalDataStruct0
+{
+ typedef SSignalDataStruct0 TThisType;
+ typedef std::function<void()> TFunType;
+ static void Send(ISignalSystem &system, void *sender, const char *sigName)
+ {
+ system.Signal(sender, sigName, NULL, 0);
+ }
+
+ static void Unpack(void *inSender, const char *inName, const char *inData, size_t inDataSize,
+ TFunType inHandler)
+ {
+ if (inDataSize == 0)
+ inHandler();
+ else {
+ QT3DS_ASSERT(false);
+ }
+ }
+
+ static TGenericSignalHandlerFunc CreateHandler(std::function<void()> inHandler)
+ {
+ return std::bind(&TThisType::Unpack, std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4, inHandler);
+ }
+
+ static std::shared_ptr<ISignalConnection> AddListener(ISignalSystem &inSystem, void *inSender,
+ const char *inName, TFunType inHandler)
+ {
+ return inSystem.AddListener(inSender, inName, CreateHandler(inHandler));
+ }
+};
+
+#define QT3DSDM_SIGNALS_DEFINE_SPECIFIC_SIGNAL_STRUCT0(name) \
+ std::shared_ptr<ISignalConnection> Sig##name::AddListener( \
+ ISignalSystem &inSystem, void *inSender, std::function<void()> inHandler) \
+ { \
+ typedef SSignalDataStruct0 TBase; \
+ return TBase::AddListener(inSystem, inSender, #name, inHandler); \
+ } \
+ void Sig##name::Send(ISignalSystem &system, void *sender) \
+ { \
+ typedef SSignalDataStruct0 TBase; \
+ TBase::Send(system, sender, #name); \
+ }
+
+template <typename TData1>
+struct SSignalDataStruct1
+{
+ typedef SSignalDataStruct1<TData1> TThisType;
+ TData1 m_Data1;
+ typedef std::function<void(TData1)> TFunType;
+ SSignalDataStruct1(TData1 d1)
+ : m_Data1(d1)
+ {
+ }
+ static void Send(ISignalSystem &system, void *sender, const char *sigName, const TData1 &d1)
+ {
+ TThisType theData(d1);
+ system.Signal(sender, sigName, reinterpret_cast<const char *>(&theData), sizeof(TThisType));
+ }
+
+ static void Unpack(void *inSender, const char *inName, const char *inData, size_t inDataSize,
+ TFunType inHandler)
+ {
+ if (inDataSize == sizeof(TThisType)) {
+ const TThisType *theData = reinterpret_cast<const TThisType *>(inData);
+ inHandler(theData->m_Data1);
+ } else {
+ QT3DS_ASSERT(false);
+ }
+ }
+
+ static TGenericSignalHandlerFunc CreateHandler(TFunType inHandler)
+ {
+ return std::bind(&TThisType::Unpack, std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4, inHandler);
+ }
+
+ static std::shared_ptr<ISignalConnection> AddListener(ISignalSystem &inSystem, void *inSender,
+ const char *inName, TFunType inHandler)
+ {
+ return inSystem.AddListener(inSender, inName, CreateHandler(inHandler));
+ }
+};
+
+#define QT3DSDM_SIGNALS_DEFINE_SPECIFIC_SIGNAL_STRUCT1(name, d1) \
+ std::shared_ptr<ISignalConnection> Sig##name::AddListener( \
+ ISignalSystem &inSystem, void *inSender, std::function<void(d1)> inHandler) \
+ { \
+ typedef SSignalDataStruct1<d1> TBase; \
+ return TBase::AddListener(inSystem, inSender, #name, inHandler); \
+ } \
+ void Sig##name::Send(ISignalSystem &system, void *sender, const d1 &arg) \
+ { \
+ typedef SSignalDataStruct1<d1> TBase; \
+ TBase::Send(system, sender, #name, arg); \
+ }
+
+template <typename TData1, typename TData2>
+struct SSignalDataStruct2
+{
+ typedef SSignalDataStruct2<TData1, TData2> TThisType;
+ typedef std::function<void(TData1, TData2)> TFunType;
+ TData1 m_Data1;
+ TData2 m_Data2;
+ SSignalDataStruct2(TData1 d1, TData2 d2)
+ : m_Data1(d1)
+ , m_Data2(d2)
+ {
+ }
+ static void Send(ISignalSystem &system, void *sender, const char *sigName, const TData1 &d1,
+ const TData2 &d2)
+ {
+ TThisType theData(d1, d2);
+ system.Signal(sender, sigName, reinterpret_cast<const char *>(&theData), sizeof(TThisType));
+ }
+
+ static void Unpack(void *inSender, const char *inName, const char *inData, size_t inDataSize,
+ TFunType inHandler)
+ {
+ if (inDataSize == sizeof(TThisType)) {
+ const TThisType *theData = reinterpret_cast<const TThisType *>(inData);
+ inHandler(theData->m_Data1, theData->m_Data2);
+ } else {
+ QT3DS_ASSERT(false);
+ }
+ }
+
+ static TGenericSignalHandlerFunc CreateHandler(TFunType inHandler)
+ {
+ return std::bind(&TThisType::Unpack, std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4, inHandler);
+ }
+
+ static std::shared_ptr<ISignalConnection> AddListener(ISignalSystem &inSystem, void *inSender,
+ const char *inName, TFunType inHandler)
+ {
+ return inSystem.AddListener(inSender, inName, CreateHandler(inHandler));
+ }
+};
+
+#define QT3DSDM_SIGNALS_DEFINE_SPECIFIC_SIGNAL_STRUCT2(name, d1, d2) \
+ std::shared_ptr<ISignalConnection> Sig##name::AddListener( \
+ ISignalSystem &inSystem, void *inSender, std::function<void(d1, d2)> inHandler) \
+ { \
+ return SSignalDataStruct2<d1, d2>::AddListener(inSystem, inSender, #name, inHandler); \
+ } \
+ void Sig##name::Send(ISignalSystem &system, void *sender, const d1 &arg1, const d2 &arg2) \
+ { \
+ SSignalDataStruct2<d1, d2>::Send(system, sender, #name, arg1, arg2); \
+ }
+
+template <typename TData1, typename TData2, typename TData3>
+struct SSignalDataStruct3
+{
+ typedef SSignalDataStruct3<TData1, TData2, TData3> TThisType;
+ typedef std::function<void(TData1, TData2, TData3)> TFunType;
+ TData1 m_Data1;
+ TData2 m_Data2;
+ TData3 m_Data3;
+ SSignalDataStruct3(const TData1 &d1, const TData2 &d2, const TData3 &d3)
+ : m_Data1(d1)
+ , m_Data2(d2)
+ , m_Data3(d3)
+ {
+ }
+ static void Send(ISignalSystem &system, void *sender, const char *sigName, const TData1 &d1,
+ const TData2 &d2, const TData3 &d3)
+ {
+ TThisType theData(d1, d2, d3);
+ system.Signal(sender, sigName, reinterpret_cast<const char *>(&theData), sizeof(TThisType));
+ }
+
+ static void Unpack(void *inSender, const char *inName, const char *inData, size_t inDataSize,
+ TFunType inHandler)
+ {
+ if (inDataSize == sizeof(TThisType)) {
+ const TThisType *theData = reinterpret_cast<const TThisType *>(inData);
+ inHandler(theData->m_Data1, theData->m_Data2, theData->m_Data2);
+ } else {
+ QT3DS_ASSERT(false);
+ }
+ }
+
+ static TGenericSignalHandlerFunc CreateHandler(TFunType inHandler)
+ {
+ return std::bind(&TThisType::Unpack, std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4, inHandler);
+ }
+
+ static std::shared_ptr<ISignalConnection> AddListener(ISignalSystem &inSystem, void *inSender,
+ const char *inName, TFunType inHandler)
+ {
+ return inSystem.AddListener(inSender, inName, CreateHandler(inHandler));
+ }
+};
+
+#define QT3DSDM_SIGNALS_DEFINE_SPECIFIC_SIGNAL_STRUCT3(name, d1, d2, d3) \
+ std::shared_ptr<ISignalConnection> Sig##name::AddListener( \
+ ISignalSystem &inSystem, void *inSender, std::function<void(d1, d2, d3)> inHandler) \
+ { \
+ return SSignalDataStruct3<d1, d2, d3>::AddListener(inSystem, inSender, #name, inHandler); \
+ } \
+ void Sig##name::Send(ISignalSystem &system, void *sender, const d1 &arg1, const d2 &arg2, \
+ const d3 &arg3) \
+ { \
+ SSignalDataStruct3<d1, d2, d3>::Send(system, sender, #name, arg1, arg2, arg3); \
+ }
+
+template <typename TData1, typename TData2, typename TData3, typename TData4>
+struct SSignalDataStruct4
+{
+ typedef SSignalDataStruct4<TData1, TData2, TData3, TData4> TThisType;
+ typedef std::function<void(TData1, TData2, TData3, TData4)> TFunType;
+ TData1 m_Data1;
+ TData2 m_Data2;
+ TData3 m_Data3;
+ TData4 m_Data4;
+ SSignalDataStruct4(const TData1 &d1, const TData2 &d2, const TData3 &d3, const TData4 &d4)
+ : m_Data1(d1)
+ , m_Data2(d2)
+ , m_Data3(d3)
+ , m_Data4(d4)
+ {
+ }
+ static void Send(ISignalSystem &system, void *sender, const char *sigName, const TData1 &d1,
+ const TData2 &d2, const TData3 &d3, const TData4 &d4)
+ {
+ TThisType theData(d1, d2, d3, d4);
+ system.Signal(sender, sigName, reinterpret_cast<const char *>(&theData), sizeof(TThisType));
+ }
+
+ static void Unpack(void *inSender, const char *inName, const char *inData, size_t inDataSize,
+ TFunType inHandler)
+ {
+ if (inDataSize == sizeof(TThisType)) {
+ const TThisType *theData = reinterpret_cast<const TThisType *>(inData);
+ inHandler(theData->m_Data1, theData->m_Data2, theData->m_Data2, theData->m_Data4);
+ } else {
+ QT3DS_ASSERT(false);
+ }
+ }
+
+ static TGenericSignalHandlerFunc CreateHandler(TFunType inHandler)
+ {
+ return std::bind(&TThisType::Unpack, std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3, std::placeholders::_4, inHandler);
+ }
+
+ static std::shared_ptr<ISignalConnection> AddListener(ISignalSystem &inSystem, void *inSender,
+ const char *inName, TFunType inHandler)
+ {
+ return inSystem.AddListener(inSender, inName, CreateHandler(inHandler));
+ }
+};
+
+#define QT3DSDM_SIGNALS_DEFINE_SPECIFIC_SIGNAL_STRUCT4(name, d1, d2, d3, d4) \
+ std::shared_ptr<ISignalConnection> Sig##name::AddListener( \
+ ISignalSystem &inSystem, void *inSender, std::function<void(d1, d2, d3, d4)> inHandler) \
+ { \
+ return SSignalDataStruct4<d1, d2, d3, d4>::AddListener(inSystem, inSender, #name, \
+ inHandler); \
+ } \
+ void Sig##name::Send(ISignalSystem &system, void *sender, const d1 &arg1, const d2 &arg2, \
+ const d3 &arg3, const d4 &arg4) \
+ { \
+ SSignalDataStruct4<d1, d2, d3, d4>::Send(system, sender, #name, arg1, arg2, arg3, arg4); \
+ }
+}
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalStructs.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalStructs.h
new file mode 100644
index 00000000..86c09fd4
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalStructs.h
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_SIGNAL_STRUCTS_H
+#define QT3DSDM_SIGNAL_STRUCTS_H
+#include "Qt3DSDMSignalSystem.h"
+// Helper structs for signals of different arity.
+namespace qt3dsdm {
+// Helper defines to create static tables of signals
+// Macros with the same number of args but with 'declare' replaced by 'define
+// are available in UICDMSignalStructImpl.h. You will need to place these somewhere but
+// they rely on std::bind so I don't place them here.
+#define QT3DSDM_SIGNALS_DECLARE_SPECIFIC_SIGNAL_STRUCT0(name) \
+ struct Sig##name \
+ { \
+ static std::shared_ptr<ISignalConnection> \
+ AddListener(ISignalSystem &inSystem, void *inSender, std::function<void()> inHandler); \
+ static void Send(ISignalSystem &system, void *sender); \
+ };
+
+// Helper defines to create static tables of signals
+#define QT3DSDM_SIGNALS_DECLARE_SPECIFIC_SIGNAL_STRUCT1(name, d1) \
+ struct Sig##name \
+ { \
+ static std::shared_ptr<ISignalConnection> \
+ AddListener(ISignalSystem &inSystem, void *inSender, std::function<void(d1)> inHandler); \
+ static void Send(ISignalSystem &system, void *sender, const d1 &arg); \
+ };
+
+// Helper defines to create static tables of signals
+#define QT3DSDM_SIGNALS_DECLARE_SPECIFIC_SIGNAL_STRUCT2(name, d1, d2) \
+ struct Sig##name \
+ { \
+ static std::shared_ptr<ISignalConnection> \
+ AddListener(ISignalSystem &inSystem, void *inSender, \
+ std::function<void(d1, d2)> inHandler); \
+ static void Send(ISignalSystem &system, void *sender, const d1 &arg1, const d2 &arg2); \
+ };
+
+// Helper defines to create static tables of signals
+#define QT3DSDM_SIGNALS_DECLARE_SPECIFIC_SIGNAL_STRUCT3(name, d1, d2, d3) \
+ struct Sig##name \
+ { \
+ static std::shared_ptr<ISignalConnection> \
+ AddListener(ISignalSystem &inSystem, void *inSender, \
+ std::function<void(d1, d2, d3)> inHandler); \
+ static void Send(ISignalSystem &system, void *sender, const d1 &arg1, const d2 &arg2, \
+ const d3 &arg3); \
+ };
+
+// Helper defines to create static tables of signals
+#define QT3DSDM_SIGNALS_DECLARE_SPECIFIC_SIGNAL_STRUCT4(name, d1, d2, d3, d4) \
+ struct Sig##name \
+ { \
+ static std::shared_ptr<ISignalConnection> \
+ AddListener(ISignalSystem &inSystem, void *inSender, \
+ std::function<void(d1, d2, d3, d4)> inHandler); \
+ static void Send(ISignalSystem &system, void *sender, const d1 &arg1, const d2 &arg2, \
+ const d3 &arg3, const d4 &arg4); \
+ };
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalSystem.cpp b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalSystem.cpp
new file mode 100644
index 00000000..37d02003
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalSystem.cpp
@@ -0,0 +1,184 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "Qt3DSDMSignalSystem.h"
+#include "EASTL/hash_map.h"
+
+using namespace qt3dsdm;
+
+namespace {
+
+struct SSignalListener;
+class ISignalSystemImpl
+{
+public:
+ virtual ~ISignalSystemImpl() {}
+ virtual void RemoveListener(SSignalListener &inListener) = 0;
+};
+
+struct SSignalSystemKey
+{
+ void *m_Sender;
+ const char *m_SignalName;
+ SSignalSystemKey(void *inSender, const char *inSigName, IStringTable &inStrTable)
+ : m_Sender(inSender)
+ , m_SignalName(inStrTable.GetNarrowStr(inSigName))
+ {
+ }
+ SSignalSystemKey(const SSignalSystemKey &inOther)
+ : m_Sender(inOther.m_Sender)
+ , m_SignalName(inOther.m_SignalName)
+ {
+ }
+
+ SSignalSystemKey &operator=(const SSignalSystemKey &inOther)
+ {
+ if (this != &inOther) {
+ m_Sender = inOther.m_Sender;
+ m_SignalName = inOther.m_SignalName;
+ }
+ return *this;
+ }
+
+ bool operator==(const SSignalSystemKey &inOther) const
+ {
+ return m_Sender == inOther.m_Sender && m_SignalName == inOther.m_SignalName;
+ }
+};
+
+struct SSignalListener : ISignalConnection
+{
+ shared_ptr<ISignalSystemImpl> m_SignalSystem;
+ TGenericSignalHandlerFunc m_Handler;
+ SSignalSystemKey m_Key;
+ SSignalListener(shared_ptr<ISignalSystemImpl> inSystem, TGenericSignalHandlerFunc inHandler,
+ SSignalSystemKey inKey)
+ : m_SignalSystem(inSystem)
+ , m_Handler(inHandler)
+ , m_Key(inKey)
+ {
+ }
+ ~SSignalListener() { m_SignalSystem->RemoveListener(*this); }
+ void Signal(void *inSender, const char *inName, const char *inData, size_t inDataSize)
+ {
+ m_Handler(inSender, inName, inData, inDataSize);
+ }
+};
+
+typedef eastl::vector<SSignalListener *> TSignalListenerPtrList;
+}
+
+namespace eastl {
+template <>
+struct hash<SSignalSystemKey>
+{
+ size_t operator()(const SSignalSystemKey &inKey) const
+ {
+ return hash<void *>()(inKey.m_Sender) ^ hash<const char *>()(inKey.m_SignalName);
+ }
+};
+}
+
+namespace {
+typedef eastl::hash_map<SSignalSystemKey, TSignalListenerPtrList> TSignalHandlerMap;
+
+struct SSignalSystemImpl : public ISignalSystemImpl
+{
+ TSignalHandlerMap m_SignalHandlers;
+ shared_ptr<IStringTable> m_StringTable;
+ SSignalSystemImpl(shared_ptr<IStringTable> inStrTable)
+ : m_StringTable(inStrTable)
+ {
+ }
+
+ TSignalListenerPtrList *FindListenerList(const SSignalSystemKey &inKey)
+ {
+ TSignalHandlerMap::iterator theIter = m_SignalHandlers.find(inKey);
+ if (theIter != m_SignalHandlers.end())
+ return &theIter->second;
+ return NULL;
+ }
+
+ void Signal(void *inSender, const char *inName, const char *inData, size_t inDataSize)
+ {
+ TSignalListenerPtrList *theSignals =
+ FindListenerList(SSignalSystemKey(inSender, inName, *m_StringTable));
+ if (theSignals) {
+ for (eastl_size_t idx = 0, end = theSignals->size(); idx < end; ++idx) {
+ (*theSignals)[idx]->Signal(inSender, inName, inData, inDataSize);
+ }
+ }
+ }
+
+ void RemoveListener(SSignalListener &inListener) override
+ {
+ TSignalListenerPtrList *theSignals = FindListenerList(inListener.m_Key);
+ if (theSignals) {
+ // If we could allow unordered access then this could potentially be a lot faster.
+ TSignalListenerPtrList::iterator theFind =
+ eastl::find(theSignals->begin(), theSignals->end(), &inListener);
+ if (theFind != theSignals->end())
+ theSignals->erase(theFind);
+ }
+ }
+};
+
+struct SSignalSystem : public ISignalSystem
+{
+ shared_ptr<SSignalSystemImpl> m_System;
+ SSignalSystem(shared_ptr<IStringTable> inStrTable)
+ {
+ m_System = std::make_shared<SSignalSystemImpl>(inStrTable);
+ }
+
+ shared_ptr<ISignalConnection> AddListener(void *inSender, const char *inName,
+ TGenericSignalHandlerFunc inFunc) override
+ {
+ SSignalSystemKey theKey(inSender, inName, *m_System->m_StringTable);
+ TSignalHandlerMap::iterator theIter =
+ m_System->m_SignalHandlers.insert(eastl::make_pair(theKey, TSignalListenerPtrList()))
+ .first;
+ TSignalListenerPtrList &theList(theIter->second);
+ shared_ptr<SSignalListener> theSender =
+ std::make_shared<SSignalListener>(m_System, inFunc, theKey);
+ theList.push_back(theSender.get());
+ return theSender;
+ }
+
+ void Signal(void *inSender, const char *inName, const char *inData, size_t inDataSize) override
+ {
+ m_System->Signal(inSender, inName, inData, inDataSize);
+ }
+};
+}
+
+shared_ptr<ISignalSystem> ISignalSystem::CreateSignalSystem(shared_ptr<IStringTable> inStrTable)
+{
+ return std::make_shared<SSignalSystem>(inStrTable);
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalSystem.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalSystem.h
new file mode 100644
index 00000000..cd80010d
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignalSystem.h
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_SIGNAL_SYSTEM_H
+#define QT3DSDM_SIGNAL_SYSTEM_H
+#include <functional>
+#include "Qt3DSDMSignals.h"
+
+namespace qt3dsdm {
+typedef std::function<void(void *, const char *, const char *, size_t)> TGenericSignalHandlerFunc;
+
+class ISignalSystem
+{
+protected:
+ virtual ~ISignalSystem() {}
+public:
+ virtual shared_ptr<ISignalConnection> AddListener(void *inSender, const char *inName,
+ TGenericSignalHandlerFunc inFunc) = 0;
+ virtual void Signal(void *inSender, const char *inName, const char *inData,
+ size_t inDataSize) = 0;
+
+ static shared_ptr<ISignalSystem> CreateSignalSystem(shared_ptr<IStringTable> inStrTable);
+};
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignals.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignals.h
new file mode 100644
index 00000000..57b96591
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSignals.h
@@ -0,0 +1,611 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_SIGNALS_H
+#define QT3DSDM_SIGNALS_H
+#include "Qt3DSDMDataTypes.h"
+#include "Qt3DSDMHandles.h"
+#include "Qt3DSDMAnimation.h"
+#include "Qt3DSDMActionInfo.h"
+#include "Qt3DSDMValue.h"
+#include <functional>
+#include <string>
+
+namespace qt3dsdm {
+
+class ISignalConnection
+{
+public:
+ virtual ~ISignalConnection() {}
+};
+
+class ISignalItem
+{
+public:
+ virtual ~ISignalItem() {}
+};
+
+typedef std::shared_ptr<ISignalItem> TSignalItemPtr;
+
+typedef std::shared_ptr<ISignalConnection> TSignalConnectionPtr;
+
+class QtSignalConnection : public ISignalConnection
+{
+ Q_DISABLE_COPY(QtSignalConnection)
+private:
+ QMetaObject::Connection m_connection;
+public:
+ QtSignalConnection(const QMetaObject::Connection &inConnection)
+ : m_connection(inConnection)
+ {
+ }
+ ~QtSignalConnection() override
+ {
+ QObject::disconnect(m_connection);
+ }
+};
+
+
+class IInstancePropertyCoreSignalProvider : public ISignalItem
+{
+public:
+ virtual TSignalConnectionPtr ConnectInstancePropertyValue(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, const SValue &)>
+ &inCallback) = 0;
+};
+
+class IInstancePropertyCoreSignalSender : public ISignalItem
+{
+public:
+ virtual void SignalInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) = 0;
+};
+
+class IDataCoreSignalProvider : public ISignalItem
+{
+public:
+ virtual TSignalConnectionPtr
+ ConnectInstanceCreated(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectBeforeInstanceDeleted(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectInstanceDeleted(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectInstanceDerived(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectInstanceParentRemoved(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectPropertyAdded(const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ TCharPtr, DataModelDataType::Value)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectPropertyRemoved(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, TCharPtr,
+ DataModelDataType::Value)> &inCallback) = 0;
+};
+
+class IDataCoreSignalSender : public ISignalItem
+{
+public:
+ virtual void SignalInstanceCreated(Qt3DSDMInstanceHandle inInstance) = 0;
+ virtual void SignalBeforeInstanceDeleted(Qt3DSDMInstanceHandle inInstance) = 0;
+ virtual void SignalInstanceDeleted(Qt3DSDMInstanceHandle inInstance) = 0;
+ virtual void SignalInstanceDerived(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent) = 0;
+ virtual void SignalInstanceParentRemoved(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent) = 0;
+ virtual void SignalPropertyAdded(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, TCharPtr inName,
+ DataModelDataType::Value inDataType) = 0;
+ virtual void SignalPropertyRemoved(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, TCharPtr inName,
+ DataModelDataType::Value inDataType) = 0;
+};
+
+class ISlideCoreSignalProvider : public ISignalItem
+{
+public:
+ virtual TSignalConnectionPtr
+ ConnectSlideCreated(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectBeforeSlideDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectSlideDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectSlideDerived(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMSlideHandle, int)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectInstancePropertyValueSet(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue &)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectInstancePropertyValueRemoved(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue &)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectSlideTimeChanged(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
+};
+
+class ISlideCoreSignalSender : public ISignalItem
+{
+public:
+ virtual void SendSlideCreated(Qt3DSDMSlideHandle inSlide) = 0;
+ virtual void SendBeforeSlideDeleted(Qt3DSDMSlideHandle inSlide) = 0;
+ virtual void SendSlideDeleted(Qt3DSDMSlideHandle inSlide) = 0;
+ virtual void SendSlideDerived(Qt3DSDMSlideHandle inSlide, Qt3DSDMSlideHandle inParent,
+ int inIndex) = 0;
+ virtual void SendPropertyValueSet(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inParent, const SValue &inValue) = 0;
+ // This gives clients a chance to override a property value the first time it is set on a slide
+ virtual void SendPropertyValueRemoved(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inParent, const SValue &inValue) = 0;
+ virtual void SendSlideTimeChanged(Qt3DSDMSlideHandle inSlide) = 0;
+};
+
+class ISlideGraphCoreSignalProvider : public ISignalItem
+{
+public:
+ virtual TSignalConnectionPtr ConnectGraphCreated(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectGraphDeleted(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectInstanceAssociated(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectInstanceDissociated(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectGraphActiveSlide(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback) = 0;
+};
+
+class ISlideGraphCoreSignalSender : public ISignalItem
+{
+public:
+ virtual void SendGraphCreated(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide) = 0;
+ virtual void SendGraphDeleted(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide) = 0;
+ virtual void SendInstanceAssociated(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance) = 0;
+ virtual void SendInstanceDissociated(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance) = 0;
+ virtual void SendGraphActiveSlide(Qt3DSDMSlideGraphHandle inGraph,
+ Qt3DSDMSlideHandle inSlide) = 0;
+};
+
+class IAnimationCoreSignalProvider : public ISignalItem
+{
+public:
+ virtual TSignalConnectionPtr ConnectAnimationCreated(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle, size_t, EAnimationType)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectBeforeAnimationDeleted(
+ const std::function<void(Qt3DSDMAnimationHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectAnimationDeleted(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle, size_t, EAnimationType)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectKeyframeInserted(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle, const TKeyframe &)>
+ &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectBeforeKeyframeErased(const std::function<void(Qt3DSDMKeyframeHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectKeyframeErased(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle, const TKeyframe &)>
+ &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectBeforeAllKeyframesErased(
+ const std::function<void(Qt3DSDMAnimationHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectKeyframeUpdated(
+ const std::function<void(Qt3DSDMKeyframeHandle, const TKeyframe &)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectFirstKeyframeDynamicSet(
+ const std::function<void(Qt3DSDMAnimationHandle, bool)> &inCallback) = 0;
+};
+
+class IAnimationCoreSignalSender : public ISignalItem
+{
+public:
+ virtual void SendAnimationCreated(Qt3DSDMAnimationHandle inAnimation, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex,
+ EAnimationType inAnimationType) = 0;
+ virtual void SendBeforeAnimationDeleted(Qt3DSDMAnimationHandle inAnimation) = 0;
+ virtual void SendAnimationDeleted(Qt3DSDMAnimationHandle inAnimation, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex,
+ EAnimationType inAnimationType) = 0;
+ virtual void SendKeyframeInserted(Qt3DSDMAnimationHandle inAnimation,
+ Qt3DSDMKeyframeHandle inKeyframe, const TKeyframe &inData) = 0;
+ virtual void SendBeforeKeyframeErased(Qt3DSDMKeyframeHandle inAnimation) = 0;
+ virtual void SendKeyframeErased(Qt3DSDMAnimationHandle inAnimation,
+ Qt3DSDMKeyframeHandle inKeyframe, const TKeyframe &inData) = 0;
+ virtual void SendBeforeAllKeyframesErased(Qt3DSDMAnimationHandle inAnimation) = 0;
+ virtual void SendKeyframeUpdated(Qt3DSDMKeyframeHandle inKeyframe, const TKeyframe &inData) = 0;
+ virtual void SendFirstKeyframeDynamicSet(Qt3DSDMAnimationHandle inAnimation,
+ bool inKeyframeDynamic) = 0;
+};
+
+class IActionCoreSignalProvider : public ISignalItem
+{
+public:
+ virtual TSignalConnectionPtr ConnectTriggerObjectSet(
+ const std::function<void(Qt3DSDMActionHandle, SObjectRefType &)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectTargetObjectSet(
+ const std::function<void(Qt3DSDMActionHandle, SObjectRefType &)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectEventSet(
+ const std::function<void(Qt3DSDMActionHandle, const wstring &)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectHandlerSet(
+ const std::function<void(Qt3DSDMActionHandle, const wstring &)> &inCallback) = 0;
+
+ virtual TSignalConnectionPtr ConnectHandlerArgumentAdded(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMHandlerArgHandle, const TCharStr &,
+ HandlerArgumentType::Value, DataModelDataType::Value)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectHandlerArgumentRemoved(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMHandlerArgHandle, const TCharStr &,
+ HandlerArgumentType::Value, DataModelDataType::Value)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectHandlerArgumentValueSet(
+ const std::function<void(Qt3DSDMHandlerArgHandle, const SValue &)> &inCallback) = 0;
+};
+
+class IActionCoreSignalSender : public ISignalItem
+{
+public:
+ virtual void SendTriggerObjectSet(Qt3DSDMActionHandle inAction,
+ SObjectRefType &inTriggerObject) = 0;
+ virtual void SendTargetObjectSet(Qt3DSDMActionHandle inAction,
+ SObjectRefType &inTargetObject) = 0;
+ virtual void SendEventSet(Qt3DSDMActionHandle inAction, const wstring &inEventHandle) = 0;
+ virtual void SendHandlerSet(Qt3DSDMActionHandle inAction, const wstring &inActionName) = 0;
+
+ virtual void SendHandlerArgumentAdded(Qt3DSDMActionHandle inAction,
+ Qt3DSDMHandlerArgHandle inHandlerArgument,
+ const TCharStr &inName, HandlerArgumentType::Value inArgType,
+ DataModelDataType::Value inValueType) = 0;
+ virtual void SendHandlerArgumentRemoved(Qt3DSDMActionHandle inAction,
+ Qt3DSDMHandlerArgHandle inHandlerArgument,
+ const TCharStr &inName, HandlerArgumentType::Value inArgType,
+ DataModelDataType::Value inValueType) = 0;
+ virtual void SendHandlerArgumentValueSet(Qt3DSDMHandlerArgHandle inHandlerArgument,
+ const SValue &inValue) = 0;
+};
+
+class IActionSystemSignalProvider : public ISignalItem
+{
+public:
+ virtual TSignalConnectionPtr ConnectActionCreated(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectActionDeleted(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback) = 0;
+};
+
+class IActionSystemSignalSender : public ISignalItem
+{
+public:
+ virtual void SendActionCreated(Qt3DSDMActionHandle inAction, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendActionDeleted(Qt3DSDMActionHandle inAction, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+};
+
+class ICustomPropCoreSignalProvider : public ISignalItem
+{
+public:
+ virtual TSignalConnectionPtr ConnectCustomPropertyCreated(
+ const std::function<void(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomPropertyDeleted(
+ const std::function<void(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomPropertyModified(
+ const std::function<void(Qt3DSDMPropertyHandle)> &inCallback) = 0;
+
+ virtual TSignalConnectionPtr ConnectCustomEventCreated(
+ const std::function<void(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomEventDeleted(
+ const std::function<void(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectCustomEventModified(const std::function<void(Qt3DSDMEventHandle)> &inCallback) = 0;
+
+ virtual TSignalConnectionPtr ConnectCustomHandlerCreated(
+ const std::function<void(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomHandlerDeleted(
+ const std::function<void(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectCustomHandlerModified(const std::function<void(Qt3DSDMHandlerHandle)> &inCallback) = 0;
+
+ virtual TSignalConnectionPtr ConnectCustomHandlerParamCreated(
+ const std::function<void(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomHandlerParamDeleted(
+ const std::function<void(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomHandlerParamModified(
+ const std::function<void(Qt3DSDMHandlerParamHandle)> &inCallback) = 0;
+
+ virtual TSignalConnectionPtr ConnectCustomReferencesModified(
+ const std::function<void(Qt3DSDMInstanceHandle, const TCharStr &)> &inCallback) = 0;
+};
+
+class ICustomPropCoreSignalSender : public ISignalItem
+{
+public:
+ virtual void SendCustomPropertyCreated(Qt3DSDMPropertyHandle inProp,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendCustomPropertyDeleted(Qt3DSDMPropertyHandle inProp,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendCustomPropertyModified(Qt3DSDMPropertyHandle inProp) = 0;
+
+ virtual void SendCustomEventCreated(Qt3DSDMEventHandle inEvent,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendCustomEventDeleted(Qt3DSDMEventHandle inEvent,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendCustomEventModified(Qt3DSDMEventHandle inEvent) = 0;
+
+ virtual void SendCustomHandlerCreated(Qt3DSDMHandlerHandle inHandler,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendCustomHandlerDeleted(Qt3DSDMHandlerHandle inHandler,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendCustomHandlerModified(Qt3DSDMHandlerHandle inHandler) = 0;
+
+ virtual void SendCustomHandlerParamCreated(Qt3DSDMHandlerParamHandle inParameter,
+ Qt3DSDMHandlerHandle inHandler) = 0;
+ virtual void SendCustomHandlerParamDeleted(Qt3DSDMHandlerParamHandle inParameter,
+ Qt3DSDMHandlerHandle inHandler) = 0;
+ virtual void SendCustomHandlerParamModified(Qt3DSDMHandlerParamHandle inParameter) = 0;
+
+ virtual void SendCustomReferencesModified(Qt3DSDMInstanceHandle inOwner,
+ const TCharStr &inString) = 0;
+};
+
+class ISlideSystemSignalProvider : public ISignalItem
+{
+public:
+ virtual TSignalConnectionPtr
+ ConnectMasterCreated(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectMasterDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectSlideCreated(
+ const std::function<void(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectSlideDeleted(
+ const std::function<void(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectSlideRearranged(
+ const std::function<void(Qt3DSDMSlideHandle, int, int)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectInstanceAssociated(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectInstanceDissociated(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectPropertyLinked(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)>
+ &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectPropertyUnlinked(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)>
+ &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectActiveSlide(
+ const std::function<void(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle, Qt3DSDMSlideHandle)>
+ &inCallback) = 0;
+};
+
+class ISlideSystemSignalSender : public ISignalItem
+{
+public:
+ virtual void SendMasterCreated(Qt3DSDMSlideHandle inMaster) = 0;
+ virtual void SendMasterDeleted(Qt3DSDMSlideHandle inMaster) = 0;
+ virtual void SendSlideCreated(Qt3DSDMSlideHandle inMaster, int inIndex,
+ Qt3DSDMSlideHandle inSlide) = 0;
+ virtual void SendSlideDeleted(Qt3DSDMSlideHandle inMaster, int inIndex,
+ Qt3DSDMSlideHandle inSlide) = 0;
+ virtual void SendSlideRearranged(Qt3DSDMSlideHandle inMaster, int inOldIndex,
+ int inNewIndex) = 0;
+ virtual void SendInstanceAssociated(Qt3DSDMSlideHandle inMaster,
+ Qt3DSDMInstanceHandle inInstance) = 0;
+ virtual void SendInstanceDissociated(Qt3DSDMSlideHandle inMaster,
+ Qt3DSDMInstanceHandle inInstance) = 0;
+ virtual void SendPropertyLinked(Qt3DSDMSlideHandle inMaster, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+ virtual void SendPropertyUnlinked(Qt3DSDMSlideHandle inMaster, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+ virtual void SendActiveSlide(Qt3DSDMSlideHandle inMaster, int inIndex,
+ Qt3DSDMSlideHandle inOldSlide, Qt3DSDMSlideHandle inNewSlide) = 0;
+};
+
+class IStudioFullSystemSignalProvider : public ISignalItem
+{
+public:
+ virtual TSignalConnectionPtr
+ ConnectSlideCreated(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectSlideDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectSlideRearranged(
+ const std::function<void(Qt3DSDMSlideHandle, int, int)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectBeginComponentSeconds(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectComponentSeconds(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectPropertyLinked(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)>
+ &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectPropertyUnlinked(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)>
+ &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectActiveSlide(
+ const std::function<void(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle)> &inCallback) = 0;
+
+ virtual TSignalConnectionPtr
+ ConnectInstanceCreated(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectInstanceDeleted(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) = 0;
+
+ virtual TSignalConnectionPtr
+ ConnectAnimationCreated(const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectAnimationDeleted(const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectKeyframeInserted(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectKeyframeErased(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectKeyframeUpdated(const std::function<void(Qt3DSDMKeyframeHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectFirstKeyframeDynamicSet(
+ const std::function<void(Qt3DSDMAnimationHandle, bool)> &inCallback) = 0;
+
+ virtual TSignalConnectionPtr ConnectInstancePropertyValue(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)> &inCallback) = 0;
+
+ virtual TSignalConnectionPtr ConnectActionCreated(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectActionDeleted(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectTriggerObjectSet(const std::function<void(Qt3DSDMActionHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectTargetObjectSet(const std::function<void(Qt3DSDMActionHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectEventSet(const std::function<void(Qt3DSDMActionHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectHandlerSet(const std::function<void(Qt3DSDMActionHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectHandlerArgumentValueSet(
+ const std::function<void(Qt3DSDMHandlerArgHandle)> &inCallback) = 0;
+
+ virtual TSignalConnectionPtr ConnectCustomPropertyCreated(
+ const std::function<void(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomPropertyDeleted(
+ const std::function<void(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomPropertyModified(
+ const std::function<void(Qt3DSDMPropertyHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomEventCreated(
+ const std::function<void(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomEventDeleted(
+ const std::function<void(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectCustomEventModified(const std::function<void(Qt3DSDMEventHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomHandlerCreated(
+ const std::function<void(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomHandlerDeleted(
+ const std::function<void(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr
+ ConnectCustomHandlerModified(const std::function<void(Qt3DSDMHandlerHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomHandlerParamCreated(
+ const std::function<void(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomHandlerParamDeleted(
+ const std::function<void(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomHandlerParamModified(
+ const std::function<void(Qt3DSDMHandlerParamHandle)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectCustomReferencesModified(
+ const std::function<void(Qt3DSDMInstanceHandle, const TCharStr &)> &inCallback) = 0;
+ virtual TSignalConnectionPtr ConnectControlledToggled(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)> &inCallback) = 0;
+};
+
+class IStudioFullSystemSignalSender : public ISignalItem
+{
+public:
+ virtual void SendSlideCreated(Qt3DSDMSlideHandle inSlide) = 0;
+ virtual void SendSlideDeleted(Qt3DSDMSlideHandle inSlide) = 0;
+ virtual void SendSlideRearranged(Qt3DSDMSlideHandle inMaster, int inOldIndex,
+ int inNewIndex) = 0;
+ virtual void SendComponentSeconds(Qt3DSDMSlideHandle inMaster) = 0;
+ virtual void SendBeginComponentSeconds(Qt3DSDMSlideHandle inMaster) = 0;
+ virtual void SendPropertyLinked(Qt3DSDMSlideHandle inMaster, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+ virtual void SendPropertyUnlinked(Qt3DSDMSlideHandle inMaster, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+ virtual void SendActiveSlide(Qt3DSDMSlideHandle inMaster, int inIndex,
+ Qt3DSDMSlideHandle inSlide) = 0;
+
+ virtual void SendInstanceCreated(Qt3DSDMInstanceHandle inInstance) = 0;
+ virtual void SendInstanceDeleted(Qt3DSDMInstanceHandle inInstance) = 0;
+
+ virtual void SendAnimationCreated(Qt3DSDMAnimationHandle inAnimation,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+ virtual void SendAnimationDeleted(Qt3DSDMAnimationHandle inAnimation,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+ virtual void SendKeyframeInserted(Qt3DSDMAnimationHandle inAnimation,
+ Qt3DSDMKeyframeHandle inKeyframe) = 0;
+ virtual void SendKeyframeErased(Qt3DSDMAnimationHandle inAnimation,
+ Qt3DSDMKeyframeHandle inKeyframe) = 0;
+ virtual void SendKeyframeUpdated(Qt3DSDMKeyframeHandle inKeyframe) = 0;
+ virtual void SendConnectFirstKeyframeDynamicSet(Qt3DSDMAnimationHandle inAnimation,
+ bool inDynamic) = 0;
+
+ virtual void SendInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+
+ virtual void SendActionCreated(Qt3DSDMActionHandle inAction, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendActionDeleted(Qt3DSDMActionHandle inAction, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendTriggerObjectSet(Qt3DSDMActionHandle inAction) = 0;
+ virtual void SendTargetObjectSet(Qt3DSDMActionHandle inAction) = 0;
+ virtual void SendEventSet(Qt3DSDMActionHandle inAction) = 0;
+ virtual void SendHandlerSet(Qt3DSDMActionHandle inAction) = 0;
+ virtual void SendHandlerArgumentValueSet(Qt3DSDMHandlerArgHandle inHandlerArgument) = 0;
+
+ virtual void SendCustomPropertyCreated(Qt3DSDMPropertyHandle inProp,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendCustomPropertyDeleted(Qt3DSDMPropertyHandle inProp,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendCustomPropertyModified(Qt3DSDMPropertyHandle inProp) = 0;
+ virtual void SendCustomEventCreated(Qt3DSDMEventHandle inEvent,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendCustomEventDeleted(Qt3DSDMEventHandle inEvent,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendCustomEventModified(Qt3DSDMEventHandle inEvent) = 0;
+ virtual void SendCustomHandlerCreated(Qt3DSDMHandlerHandle inHandler,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendCustomHandlerDeleted(Qt3DSDMHandlerHandle inHandler,
+ Qt3DSDMInstanceHandle inOwner) = 0;
+ virtual void SendCustomHandlerModified(Qt3DSDMHandlerHandle inHandler) = 0;
+ virtual void SendCustomHandlerParamCreated(Qt3DSDMHandlerParamHandle inParameter,
+ Qt3DSDMHandlerHandle inHandler) = 0;
+ virtual void SendCustomHandlerParamDeleted(Qt3DSDMHandlerParamHandle inParameter,
+ Qt3DSDMHandlerHandle inHandler) = 0;
+ virtual void SendCustomHandlerParamModified(Qt3DSDMHandlerParamHandle inParameter) = 0;
+ virtual void SendCustomReferencesModified(Qt3DSDMInstanceHandle inOwner,
+ const TCharStr &inString) = 0;
+ virtual void SendControlledToggled(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+};
+
+// Use this if you want to register for only a specific instance or specific property
+template <typename TTransaction>
+inline void MaybackCallbackInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ Qt3DSDMInstanceHandle inDesiredInstance,
+ Qt3DSDMPropertyHandle inDesiredProperty,
+ TTransaction inCallback)
+{
+ if ((!inDesiredInstance.Valid() || (inDesiredInstance == inInstance))
+ && (!inDesiredProperty.Valid() || (inDesiredProperty == inProperty)))
+ inCallback(inInstance, inProperty);
+}
+
+void SetDataModelSignalsEnabled(bool inEnabled);
+// Defaults to true
+bool AreDataModelSignalsEnabled();
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSlideCore.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSlideCore.h
new file mode 100644
index 00000000..8216b01d
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSlideCore.h
@@ -0,0 +1,239 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_SLIDE_CORE_H
+#define QT3DSDM_SLIDE_CORE_H
+#include "Qt3DSDMHandles.h"
+#include "Qt3DSDMDataTypes.h"
+#include "HandleSystemBase.h"
+#include "Qt3DSDMStringTable.h"
+#include "Qt3DSDMDataCore.h"
+
+namespace qt3dsdm {
+typedef std::pair<Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle> TInstancePropertyPair;
+typedef std::vector<TInstancePropertyPair> TInstancePropertyPairList;
+
+// instance,property,value
+typedef std::tuple<Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, SValue> TSlideEntry;
+typedef std::vector<TSlideEntry> TSlideEntryList;
+
+class ISlideCore : public IHandleBase
+{
+public:
+ virtual ~ISlideCore() {}
+ virtual TStringTablePtr GetStringTablePtr() const = 0;
+ virtual IStringTable &GetStringTable() const = 0;
+ //===============================================================
+ // Slide lifetime management
+ //===============================================================
+ /**
+ * Create a new slide. Slides must have an instance allocated for them.
+ */
+ virtual Qt3DSDMSlideHandle CreateSlide(Qt3DSDMInstanceHandle inInstance) = 0;
+ /**
+ * Return the instance that was allocated for this slide.
+ */
+ virtual Qt3DSDMInstanceHandle GetSlideInstance(Qt3DSDMSlideHandle inSlide) const = 0;
+ /**
+ * Reverse lookup into the slide system so you can match slides to instances.
+ */
+ virtual Qt3DSDMSlideHandle GetSlideByInstance(Qt3DSDMInstanceHandle inSlide) const = 0;
+ /**
+ * Delete a given slide. This recursively deletes all children. All associated instances
+ * are returned in the outInstances list so the caller can further delete them.
+ * The deleted object is removed from the parent's list of children. Child objects are
+ * also deleted.
+ */
+ virtual void DeleteSlide(Qt3DSDMSlideHandle inSlide, TInstanceHandleList &outInstances) = 0;
+ /**
+ * Return all of the slides in the core.
+ */
+ virtual void GetSlides(TSlideHandleList &outSlides) const = 0;
+
+ virtual float GetSlideTime(Qt3DSDMSlideHandle inSlide) const = 0;
+
+ virtual void SetSlideTime(Qt3DSDMSlideHandle inSlide, float inNewTime) = 0;
+
+ //===============================================================
+ // Slide derivation
+ //===============================================================
+ /**
+ * Derive a slide from another slide. This simply provides an alternate path for property
+ *lookup
+ * if it isn't found on this slide. OK for parent to be an invalid handle. It is also fine
+ * for the slide to have a valid parent; all involved parties are notified and updated.
+ */
+ virtual void DeriveSlide(Qt3DSDMSlideHandle inSlide, Qt3DSDMSlideHandle inParent,
+ int inIndex = -1) = 0;
+ /**
+ * Return the parent slide for this slide. Invalid handle if no parent.
+ */
+ virtual Qt3DSDMSlideHandle GetParentSlide(Qt3DSDMSlideHandle inSlide) const = 0;
+ /**
+ * Return a list of derived slides for this slide.
+ */
+ virtual void GetChildSlides(Qt3DSDMSlideHandle inSlide, TSlideHandleList &outChildren) const = 0;
+
+ /**
+ * Return the index of this child. Exception if child isn't found
+ */
+ virtual int GetChildIndex(Qt3DSDMSlideHandle inParent, Qt3DSDMSlideHandle inChild) const = 0;
+ //===============================================================
+
+ //===============================================================
+ // Instance Property Access
+ //===============================================================
+ /**
+ * Get this property from this instance in this slide. Includes lookup into any parent slides.
+ */
+ virtual bool GetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const = 0;
+
+ /**
+ * Set this property. If this slide doesn't already contain an entry
+ *(PushPropertyValueToChildren)
+ * then this will attempt to set it on the parent slide. If it does not have a parent slide or
+ *if
+ * it already has a property entry then it sets the value locally.
+ */
+ virtual void SetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) = 0;
+
+ /**
+ * Set this property on this slide; do not try to set on parent slide under any circumstances.
+ *Always adds entry to this slide.
+ */
+ virtual void ForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) = 0;
+
+ /**
+ * Set a property value on an instance on all slides.
+ */
+ virtual void forceSetInstancePropertyValueOnAllSlides(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) = 0;
+
+ /**
+ * Return the value for this property if it exists on this slide.
+ */
+ virtual bool GetSpecificInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const = 0;
+
+ /**
+ * Return all of the properties for this instance stored on this slide.
+ */
+ virtual void GetSpecificInstancePropertyValues(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleValuePairList &outValues) = 0;
+
+ /**
+ * Get all of the property entries for the slide.
+ */
+ virtual void GetSlidePropertyEntries(Qt3DSDMSlideHandle inSlide,
+ TSlideEntryList &outEntries) const = 0;
+
+ /**
+ * Set this property value on all my child slides.
+ */
+ virtual void PushPropertyValueToChildren(Qt3DSDMSlideHandle inParent,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) = 0;
+
+ /**
+ * If any property entries in slide1 intersect (have matching instance and property handles)
+ *with slide 2,
+ * add said property entry from slide1 to outEntries;
+ */
+ virtual void GetIntersectingProperties(Qt3DSDMSlideHandle inSlide1, Qt3DSDMSlideHandle inSlide2,
+ TSlideEntryList &outEntries) const = 0;
+
+ /**
+ * Take the intersection of the properties of slide1 and slide2 and push values from slide1 to
+ *destination.
+ * Used for new slide operations.
+ */
+ virtual void PushIntersectingProperties(Qt3DSDMSlideHandle inSlide1, Qt3DSDMSlideHandle inSlide2,
+ Qt3DSDMSlideHandle inDestination) = 0;
+
+ /**
+ * Ensure the children of this parent item do not contain entries for a given property.
+ */
+ virtual void ClearChildrenPropertyValues(Qt3DSDMSlideHandle inParent,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+
+ /**
+ * Delete all property entries related to this instance.
+ */
+ virtual void DeleteAllInstanceEntries(Qt3DSDMInstanceHandle inHandle) = 0;
+
+ /**
+ * Delete all of the property entries related to this property
+ */
+ virtual void DeleteAllPropertyEntries(Qt3DSDMPropertyHandle inHandle) = 0;
+
+ /**
+ * Delete all property entries that have an instance in the instances list *and*
+ * a property in the properties list.
+ */
+ virtual void DeleteAllInstancePropertyEntries(const TInstanceHandleList &inInstances,
+ const TPropertyHandleList &inProperties) = 0;
+
+ /**
+ * Does this slide contain this property?
+ */
+ virtual bool ContainsProperty(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty) const = 0;
+
+ /**
+ * Copy the properties from the source slide and source instance to the destination slide and
+ *destination
+ * instance.
+ */
+ virtual void CopyProperties(Qt3DSDMSlideHandle inSourceSlide,
+ Qt3DSDMInstanceHandle inSourceInstance,
+ Qt3DSDMSlideHandle inDestSlide,
+ Qt3DSDMInstanceHandle inDestInstance) = 0;
+
+ virtual bool IsSlide(Qt3DSDMSlideHandle inSlide) const = 0;
+};
+
+typedef std::shared_ptr<ISlideCore> TSlideCorePtr;
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSlideGraphCore.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSlideGraphCore.h
new file mode 100644
index 00000000..34c04e11
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSlideGraphCore.h
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_SLIDE_GRAPH_CORE_H
+#define QT3DSDM_SLIDE_GRAPH_CORE_H
+
+#include "Qt3DSDMHandles.h"
+#include "HandleSystemBase.h"
+
+namespace qt3dsdm {
+
+typedef std::pair<Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle> TSlideInstancePair;
+typedef std::vector<TSlideInstancePair> TSlideInstancePairList;
+typedef std::pair<Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle> TGraphSlidePair;
+
+/**
+ * Binding instances to slide graphs.
+ */
+class ISlideGraphCore : public IHandleBase
+{
+public:
+ virtual ~ISlideGraphCore() {}
+
+ /**
+ * A slide graph is used to associate a set of instances to a set of slides.
+ * This allows rapid lookup of properties, as an implementation of these.
+ * There are a few assumptions here. First is that a given slide can be a member
+ * of one and only one graph (i.e. it does not derive from another slide outside of the graph).
+ * Second is that an instance is a member of one and only one graph.
+ */
+ virtual Qt3DSDMSlideGraphHandle CreateSlideGraph(Qt3DSDMSlideHandle inRoot) = 0;
+ virtual Qt3DSDMSlideHandle GetGraphRoot(Qt3DSDMSlideGraphHandle inGraph) const = 0;
+ virtual Qt3DSDMSlideGraphHandle GetSlideGraph(Qt3DSDMSlideHandle inSlide) const = 0;
+ virtual void GetSlideGraphs(TSlideGraphHandleList &outGraphs) const = 0;
+ virtual void DeleteSlideGraph(Qt3DSDMSlideGraphHandle inHandle) = 0;
+
+ /**
+ * Associate a given instance handle with a given graph. This will ensure that property
+ *lookups
+ * will travel through this graph before they hit the main data core. Instances may be
+ *associated
+ * with a sub-slide of a given graph, not just the root. An instance associated with the root
+ *is
+ * implicitly associated with any root-derived slides.
+ */
+ virtual void AssociateInstance(Qt3DSDMSlideGraphHandle inSlideGraph, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance) = 0;
+ virtual void GetAssociatedInstances(Qt3DSDMSlideGraphHandle inSlideGraph,
+ TSlideInstancePairList &outAssociations) const = 0;
+ virtual TGraphSlidePair GetAssociatedGraph(Qt3DSDMInstanceHandle inInstance) const = 0;
+ virtual void DissociateInstance(Qt3DSDMInstanceHandle inInstance) = 0;
+
+ /**
+ * All graphs always have an active slide. This is assumed to be the root right off the bat.
+ */
+ virtual void SetGraphActiveSlide(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide) = 0;
+ virtual Qt3DSDMSlideHandle GetGraphActiveSlide(Qt3DSDMSlideGraphHandle inGraph) const = 0;
+};
+
+typedef std::shared_ptr<ISlideGraphCore> TSlideGraphCorePtr;
+}
+
+#endif \ No newline at end of file
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSlides.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSlides.h
new file mode 100644
index 00000000..aa7c27ce
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMSlides.h
@@ -0,0 +1,202 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_SLIDES_H
+#define QT3DSDM_SLIDES_H
+#include "Qt3DSDMHandles.h"
+#include "Qt3DSDMSlideCore.h"
+
+namespace qt3dsdm {
+/**
+ * Some properties point to instances which act like extended properties.
+ * An example of this would be the images on materials. If a material has an
+ * image in one of its slots, that image should be duplicated upon property unlink
+ * and deleted upon property link. It (and its animations) should be duplicated upon
+ * create slide and deleted upon slide destruction such that the concept that the image
+ * is really a property on the material stays sound.
+ */
+class IPropertyInstanceInfo
+{
+public:
+ virtual ~IPropertyInstanceInfo() {}
+
+ /**
+ * Return the instance that relates to this property
+ */
+ virtual Qt3DSDMInstanceHandle GetInstanceForProperty(const SValue &inValue) = 0;
+
+ /**
+ * Duplicate this instance and whichever properties and animations you desire,
+ * returning a new data model value that will be set on the newly created property.
+ * Don't forget to associate the instance with a the dest slide. I doubt things
+ * will work correctly if you do not.
+ */
+ virtual SValue CreateInstanceForProperty(Qt3DSDMSlideHandle inSourceSlide,
+ Qt3DSDMSlideHandle inDestSlide,
+ Qt3DSDMInstanceHandle inInstance) = 0;
+};
+
+typedef std::shared_ptr<IPropertyInstanceInfo> TPropertyInstanceInfoPtr;
+
+struct SInstanceSlideInformation
+{
+ // The slide associated with the instance
+ Qt3DSDMSlideHandle m_AssociatedSlide;
+ // The master slide of the component.
+ Qt3DSDMSlideHandle m_MasterSlide;
+ // The active slide of the component.
+ Qt3DSDMSlideHandle m_ActiveSlide;
+ // The current milliseconds of the active slide on the component.
+ long m_ComponentMilliseconds;
+
+ SInstanceSlideInformation()
+ : m_ComponentMilliseconds(0)
+ {
+ }
+ SInstanceSlideInformation(Qt3DSDMSlideHandle inAssoc, Qt3DSDMSlideHandle inMaster,
+ Qt3DSDMSlideHandle inActive, long inMilliseconds)
+ : m_AssociatedSlide(inAssoc)
+ , m_MasterSlide(inMaster)
+ , m_ActiveSlide(inActive)
+ , m_ComponentMilliseconds(inMilliseconds)
+ {
+ }
+};
+
+class ISlideSystem
+{
+public:
+ virtual ~ISlideSystem() {}
+ virtual Qt3DSDMSlideHandle CreateMasterSlide() = 0;
+ virtual Qt3DSDMSlideHandle CreateSlide(Qt3DSDMSlideHandle inMaster, int inIndex = -1) = 0;
+ // Duplicate this slide and put it into the master's child lists at index.
+ virtual Qt3DSDMSlideHandle DuplicateSlide(Qt3DSDMSlideHandle inSourceSlide, int inDestIndex) = 0;
+ virtual Qt3DSDMSlideHandle GetMasterSlide(Qt3DSDMSlideHandle inSlide) const = 0;
+ virtual bool IsMasterSlide(Qt3DSDMSlideHandle inSlide) const = 0;
+ virtual Qt3DSDMSlideHandle GetMasterSlideByComponentGuid(SLong4 inGuid) const = 0;
+ // Indexes are 1 based. Index 0 refers to the master slide; you can't delete this.
+ virtual void DeleteSlideByIndex(Qt3DSDMSlideHandle inMaster, size_t inIndex) = 0;
+ virtual void GetSlideReferencedInstances(Qt3DSDMSlideHandle inMaster, size_t inIndex,
+ TInstanceHandleList &outReferencedInstances) = 0;
+ virtual Qt3DSDMSlideHandle GetSlideByIndex(Qt3DSDMSlideHandle inMaster, size_t inIndex) const = 0;
+ virtual void SetActiveSlide(Qt3DSDMSlideHandle inMaster, size_t inIndex) = 0;
+ virtual void RearrangeSlide(Qt3DSDMSlideHandle inMaster, size_t inOldIndex,
+ size_t inNewIndex) = 0;
+ /**
+ * Set the current component time. This object will figure out the component from the slide.
+ */
+ virtual void SetComponentSeconds(Qt3DSDMSlideHandle inSlide, float inSeconds) = 0;
+ /**
+ * Return the current time of the component
+ */
+ virtual float GetComponentSeconds(Qt3DSDMSlideHandle inSlide) const = 0;
+ virtual long GetComponentSecondsLong(Qt3DSDMSlideHandle inSlide) const = 0;
+ virtual long GetComponentSecondsLong(Qt3DSDMInstanceHandle inInstance) const = 0;
+
+ // The fastest way possible, get all of the slide information for this instance.
+ virtual SInstanceSlideInformation
+ GetInstanceSlideInformation(Qt3DSDMInstanceHandle inInstance) const = 0;
+ /**
+ * Slide count includes the master slide;
+ */
+ virtual size_t GetSlideCount(Qt3DSDMSlideHandle inMaster) const = 0;
+ /**
+ * Use the instance for storing information such as name, or the GUID of the object
+ * this slide links to.
+ */
+ virtual Qt3DSDMInstanceHandle GetSlideInstance(Qt3DSDMSlideHandle inSlide) const = 0;
+ /**
+ * Reverse lookup into the slide system so you can match slides to instances.
+ */
+ virtual Qt3DSDMSlideHandle GetSlideByInstance(Qt3DSDMInstanceHandle inInstance) const = 0;
+ /**
+ * Slide may be either a master slide
+ */
+ virtual void AssociateInstanceWithSlide(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance) = 0;
+ virtual Qt3DSDMSlideHandle GetAssociatedSlide(Qt3DSDMInstanceHandle inInstance) const = 0;
+ virtual void GetAssociatedInstances(
+ Qt3DSDMSlideHandle inMaster,
+ std::vector<std::pair<Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle>> &outAssociations) const = 0;
+ virtual void GetAssociatedInstances(Qt3DSDMSlideHandle inSlide,
+ TInstanceHandleList &outAssociations) const = 0;
+ virtual void LinkProperty(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty) = 0;
+ virtual void UnlinkProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+ virtual bool IsPropertyLinked(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const = 0;
+ virtual bool CanPropertyBeLinked(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const = 0;
+ virtual void GetUnionOfProperties(Qt3DSDMSlideHandle inSlide1, Qt3DSDMSlideHandle inSlide,
+ TInstancePropertyPairList &outProperties) const = 0;
+
+ virtual bool GetSlidePropertyValue(size_t inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) = 0;
+
+ virtual void SetActiveSlide(Qt3DSDMSlideHandle inSlide) = 0;
+ virtual Qt3DSDMSlideHandle GetAssociatedSlide(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const = 0;
+
+ virtual bool SlideValid(Qt3DSDMSlideHandle inSlide) const = 0;
+ virtual int GetSlideIndex(Qt3DSDMSlideHandle inSlide) const = 0;
+ virtual int GetActiveSlideIndex(Qt3DSDMSlideHandle inMaster) const = 0;
+ virtual Qt3DSDMSlideHandle GetActiveSlide(Qt3DSDMSlideHandle inMaster) const = 0;
+ virtual Qt3DSDMInstanceHandle GetSlideSelectedInstance(Qt3DSDMSlideHandle inSlide) const = 0;
+ virtual void SetSlideSelectedInstance(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance) = 0;
+
+ virtual Qt3DSDMSlideHandle GetApplicableSlide(Qt3DSDMInstanceHandle inHandle) = 0;
+ virtual Qt3DSDMSlideHandle GetApplicableSlide(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty) = 0;
+
+ virtual bool GetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const = 0;
+ virtual bool GetCanonicalInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const = 0;
+ virtual void ForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) = 0;
+
+ /**
+ * Let this object know that this property will sometimes reference another property
+ * and give an outside entity the chance to create new objects and properties when
+ * the property is unlinked and linked.
+ */
+ virtual void RegisterPropertyInstance(Qt3DSDMPropertyHandle inPropertyHandle,
+ TPropertyInstanceInfoPtr inPropertyInfo) = 0;
+};
+
+typedef std::shared_ptr<ISlideSystem> TSlideSystemPtr;
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMStringTable.cpp b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMStringTable.cpp
new file mode 100644
index 00000000..58db71c7
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMStringTable.cpp
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "Qt3DSDMStringTable.h"
+#include "foundation/StringTable.h"
+#include "foundation/TrackingAllocator.h"
+
+using namespace qt3dsdm;
+using namespace eastl;
+using namespace qt3ds;
+
+namespace {
+
+struct StringTableImpl : public IStringTable
+{
+ qt3ds::foundation::MallocAllocator m_MallocAllocator;
+ qt3ds::foundation::IStringTable &m_StringTable;
+ StringTableImpl()
+ : m_StringTable(qt3ds::foundation::IStringTable::CreateStringTable(m_MallocAllocator))
+ {
+ m_StringTable.addRef();
+ }
+ StringTableImpl(qt3ds::foundation::IStringTable &inStrTable)
+ : m_StringTable(inStrTable)
+ {
+ m_StringTable.addRef();
+ }
+
+ virtual ~StringTableImpl() { m_StringTable.release(); }
+ const wchar_t *RegisterStr(const wchar_t *inStr) override
+ {
+ return m_StringTable.GetWideStr(inStr);
+ }
+ const char8_t *RegisterStr(const char8_t *inStr) override
+ {
+ return m_StringTable.GetNarrowStr(inStr);
+ }
+ // Get the utf-8 or utf-(sizeof wchar_t) converted strings
+ const wchar_t *GetWideStr(const char8_t *inStr) override
+ {
+ return m_StringTable.GetWideStr(inStr);
+ }
+ const char8_t *GetNarrowStr(const wchar_t *inStr) override
+ {
+ return m_StringTable.GetNarrowStr(inStr);
+ }
+ qt3ds::foundation::IStringTable &GetRenderStringTable() override { return m_StringTable; }
+};
+}
+
+TStringTablePtr IStringTable::CreateStringTable()
+{
+ return std::make_shared<StringTableImpl>();
+}
+
+TStringTablePtr IStringTable::CreateStringTable(qt3ds::foundation::IStringTable &inStrTable)
+{
+ return std::make_shared<StringTableImpl>(std::ref(inStrTable));
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMStringTable.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMStringTable.h
new file mode 100644
index 00000000..7f1e9453
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMStringTable.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DS_IMPORT_STRINGTABLE_H
+#define QT3DS_IMPORT_STRINGTABLE_H
+
+#include <string>
+#include <EABase/eabase.h>
+#include "foundation/Qt3DSPreprocessor.h"
+
+namespace qt3ds {
+namespace foundation {
+ class IStringTable;
+}
+}
+
+namespace qt3dsdm {
+
+class QT3DS_AUTOTEST_EXPORT IStringTable
+{
+public:
+ virtual ~IStringTable() {}
+
+ virtual const wchar_t *RegisterStr(const wchar_t *inStr) = 0;
+ virtual const char8_t *RegisterStr(const char8_t *inStr) = 0;
+ // Get the utf-8 or utf-(sizeof wchar_t) converted strings
+ virtual const wchar_t *GetWideStr(const char8_t *inStr) = 0;
+ virtual const char8_t *GetNarrowStr(const wchar_t *inStr) = 0;
+
+ const wchar_t *GetWideStr(const wchar_t *inStr) { return RegisterStr(inStr); }
+ const char8_t *GetNarrowStr(const char8_t *inStr) { return RegisterStr(inStr); }
+
+ const wchar_t *RegisterStr(const std::wstring &inStr) { return RegisterStr(inStr.c_str()); }
+ const char8_t *RegisterStr(const std::string &inStr) { return RegisterStr(inStr.c_str()); }
+
+ virtual qt3ds::foundation::IStringTable &GetRenderStringTable() = 0;
+
+ static std::shared_ptr<IStringTable> CreateStringTable();
+ static std::shared_ptr<IStringTable>
+ CreateStringTable(qt3ds::foundation::IStringTable &inStrTable);
+};
+typedef std::shared_ptr<IStringTable> TStringTablePtr;
+};
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMTestOps.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMTestOps.h
new file mode 100644
index 00000000..ac43eaf0
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMTestOps.h
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_OPS_H
+#define QT3DSDM_OPS_H
+
+namespace qt3dsdm {
+inline const TCharStr &GetPropertyName(const IDataCore &inModel, Qt3DSDMPropertyHandle inProperty)
+{
+ return inModel.GetProperty(inProperty).m_Name;
+}
+
+inline bool PropertyNameMatches(const IDataCore &inModel, const TCharStr &inName,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ return inName == GetPropertyName(inModel, inProperty);
+}
+
+inline const Qt3DSDMPropertyHandle
+GetPropertyByName(const IDataCore &inModel, Qt3DSDMInstanceHandle inInstance, const TCharStr &inName)
+{
+ using namespace std;
+ TPropertyHandleList properties;
+ inModel.GetAggregateInstanceProperties(inInstance, properties);
+ TPropertyHandleList::iterator theProp =
+ std::find_if(properties.begin(), properties.end(),
+ std::bind(PropertyNameMatches, std::ref(inModel), inName,
+ std::placeholders::_1));
+ if (theProp != properties.end())
+ return *theProp;
+ return 0;
+}
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMTransactions.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMTransactions.h
new file mode 100644
index 00000000..f6ed3da0
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMTransactions.h
@@ -0,0 +1,244 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_TRANSACTIONS_H
+#define QT3DSDM_TRANSACTIONS_H
+#include "Qt3DSDMDataTypes.h"
+#include "StandardExtensions.h"
+#include <functional>
+
+namespace qt3dsdm {
+
+/**
+ * Transaction is some small entity that changes data. A transaction consumer is expected to
+ *execute
+ * a list of these either forward on a "redo" command or backwards on an "undo" command.
+ *
+ * Transactions merely change data. There are two other lists on consumers for "do"
+ *notifications
+ * and "undo" notifications. These lists control the events sent out to the UI about what
+ *actually
+ * changed in the model. Note that undo/do notifications may be more clever than simple
+ *send-signal
+ * commands in that they may check if an object is alive or not before sending a notification
+ *and may
+ * decline to send a notification if the target object is not currently alive.
+ *
+ * Currently the undo/redo system first executes all of the transactions and then sends the
+ *appropriate
+ * notifications. This means that when the UI receives any notification, the model is in its
+ *most-updated
+ * state.
+ */
+class ITransaction
+{
+public:
+ const char *m_File;
+ int m_Line;
+
+ ITransaction(const char *inFile, int inLine)
+ : m_File(inFile)
+ , m_Line(inLine)
+ {
+ }
+ virtual ~ITransaction() {}
+ virtual void Do() = 0;
+ virtual void Undo() = 0;
+};
+
+/**
+ * Merging allows us to efficient handle situations where the users are continuously
+ * modifying an object (or set of objects). These are referred to as live-update
+ * scenarios. Dragging an object in the 3d view or dragging keyframes in the timeline
+ * would be an example of live-update scenarios.
+ */
+template <typename TValueType>
+class IMergeableTransaction
+{
+public:
+ virtual ~IMergeableTransaction() {}
+ // Called when a new value has arrived and we would rather update
+ // an existing representation rather than create a new one.
+ virtual void Update(const TValueType &inValue) = 0;
+};
+
+/**
+ * A consumer is an object that records the transaction. This interface keeps the
+ * base producer objects from binding to how the transaction or the notifications
+ * are stored.
+ */
+class ITransactionConsumer
+{
+public:
+ virtual ~ITransactionConsumer() {}
+ virtual void OnTransaction(std::shared_ptr<ITransaction> inTransaction) = 0;
+ // Notifications to be sent for undo/redo These are used to
+ // notify clients that something is different.
+ virtual void OnDoNotification(std::function<void()> inNotification) = 0;
+ virtual void OnUndoNotification(std::function<void()> inNotification) = 0;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Implementation of helper objects and functions.
+///////////////////////////////////////////////////////////////////////////////
+
+typedef std::vector<std::function<void()>> TVoidFunctionList;
+
+typedef std::shared_ptr<ITransactionConsumer> TTransactionConsumerPtr;
+
+class ITransactionProducer
+{
+public:
+ virtual ~ITransactionProducer() {}
+ virtual void SetConsumer(TTransactionConsumerPtr inConsumer) = 0;
+};
+
+template <typename TDoTransaction, typename TUndoTransaction>
+class CGenericTransaction : public ITransaction
+{
+ Q_DISABLE_COPY(CGenericTransaction)
+
+ TUndoTransaction m_UndoTransaction;
+ TDoTransaction m_DoTransaction;
+
+public:
+ CGenericTransaction(const char *inFile, int inLine, TDoTransaction inDo,
+ TUndoTransaction inUndo)
+ : ITransaction(inFile, inLine)
+ , m_UndoTransaction(inUndo)
+ , m_DoTransaction(inDo)
+ {
+ }
+ void Do() override { m_DoTransaction(); }
+ void Undo() override { m_UndoTransaction(); }
+};
+
+template <typename TDoTransaction, typename TUndoTransaction>
+ITransaction *DoCreateGenericTransaction(const char *inFile, int inLine, TDoTransaction inDo,
+ TUndoTransaction inUndo)
+{
+ return static_cast<ITransaction *>(
+ new CGenericTransaction<TDoTransaction, TUndoTransaction>(inFile, inLine, inDo, inUndo));
+}
+
+#define CREATE_GENERIC_TRANSACTION(inDo, inUndo) \
+ DoCreateGenericTransaction(__FILE__, __LINE__, inDo, inUndo)
+
+typedef std::shared_ptr<ITransaction> TTransactionPtr;
+typedef std::vector<TTransactionPtr> TTransactionPtrList;
+
+struct CTransactionConsumer : public ITransactionConsumer
+{
+ TTransactionPtrList m_TransactionList;
+ TVoidFunctionList m_DoNotifications;
+ TVoidFunctionList m_UndoNotifications;
+ void OnTransaction(TTransactionPtr inTransaction) override
+ {
+ m_TransactionList.push_back(inTransaction);
+ }
+ void OnDoNotification(std::function<void()> inNotification) override
+ {
+ m_DoNotifications.push_back(inNotification);
+ }
+ void OnUndoNotification(std::function<void()> inNotification) override
+ {
+ m_UndoNotifications.push_back(inNotification);
+ }
+
+ // Merge with another CTransactionConsumer
+ virtual void Merge(const ITransactionConsumer *inConsumer)
+ {
+ const CTransactionConsumer *theConsumer =
+ static_cast<const CTransactionConsumer *>(inConsumer);
+ m_TransactionList.insert(m_TransactionList.begin(), theConsumer->m_TransactionList.begin(),
+ theConsumer->m_TransactionList.end());
+ }
+ void Reset()
+ {
+ m_TransactionList.clear();
+ m_DoNotifications.clear();
+ m_UndoNotifications.clear();
+ }
+};
+
+template <typename TTransactionType>
+inline void RunWithConsumer(TTransactionConsumerPtr inConsumer, TTransactionType inTransaction)
+{
+ if (inConsumer)
+ inTransaction(inConsumer);
+}
+
+template <typename TDoTransaction, typename TUndoTransaction>
+inline void CreateGenericTransactionWithConsumer(const char *inFile, int inLine,
+ TTransactionConsumerPtr inConsumer,
+ TDoTransaction inDoTransaction,
+ TUndoTransaction inUndoTransaction)
+{
+ if (inConsumer)
+ inConsumer->OnTransaction(TTransactionPtr(
+ DoCreateGenericTransaction(inFile, inLine, inDoTransaction, inUndoTransaction)));
+}
+
+template <typename TItemType>
+inline void DoSetConsumer(TTransactionConsumerPtr inConsumer,
+ std::shared_ptr<TItemType> inTypePtr)
+{
+ ITransactionProducer *theProducer = dynamic_cast<ITransactionProducer *>(inTypePtr.get());
+ if (theProducer)
+ theProducer->SetConsumer(inConsumer);
+}
+
+template <typename TContainer>
+inline void Undo(TContainer &inTransactions)
+{
+ std::for_each(inTransactions.rbegin(), inTransactions.rend(), std::bind(&ITransaction::Undo,
+ std::placeholders::_1));
+}
+
+template <typename TContainer>
+inline void Redo(TContainer &inTransactions)
+{
+ do_all(inTransactions, std::bind(&ITransaction::Do, std::placeholders::_1));
+}
+
+template <typename TItemType>
+void Notify(std::vector<TItemType> &inNotifications)
+{
+ do_all(inNotifications, std::bind(&TItemType::operator(), std::placeholders::_1));
+}
+
+template <typename TItemType>
+void NotifyReverse(std::vector<TItemType> &inNotifications)
+{
+ std::for_each(inNotifications.rbegin(), inNotifications.rend(),
+ std::bind(&TItemType::operator(), std::placeholders::_1));
+}
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMValue.cpp b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMValue.cpp
new file mode 100644
index 00000000..94c5a594
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMValue.cpp
@@ -0,0 +1,178 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "Qt3DSDMValue.h"
+
+#include <QColor>
+#include <QDebug>
+#include <QVariant>
+
+using namespace qt3dsdm;
+
+SValue::SValue(const QVariant &inData)
+{
+ switch (inData.type()) {
+ case QVariant::Bool:
+ {
+ *this = inData.toBool();
+ break;
+ }
+ case QVariant::Color:
+ {
+ const QColor c = inData.value<QColor>();
+ *this = qt3dsdm::SFloat4(c.redF(), c.greenF(), c.blueF(), c.alphaF());
+ break;
+ }
+ case QVariant::String:
+ {
+ const QString q = inData.toString();
+ const int count = q.size() + 1;
+#ifdef __INTEGRITY
+ wchar_t* tempBuf = reinterpret_cast<wchar_t*>(malloc(count * sizeof(wchar_t)));
+#else
+ wchar_t* tempBuf = reinterpret_cast<wchar_t*>(alloca(count * sizeof(wchar_t)));
+#endif
+ tempBuf[count - 1] = 0;
+ q.toWCharArray(tempBuf);
+ *this = std::make_shared<qt3dsdm::CDataStr>(tempBuf);
+#ifdef __INTEGRITY
+ free(tempBuf);
+#endif
+ break;
+ }
+ case QVariant::Int: {
+ *this = inData.toInt();
+ break;
+ }
+ case QVariant::Double: {
+ *this = inData.toFloat();
+ break;
+ }
+
+ case QVariant::Vector2D: {
+ const auto v = inData.value<QVector2D>();
+ *this = qt3dsdm::SFloat2(v.x(), v.y());
+ break;
+ }
+
+ case QVariant::Vector3D: {
+ const auto v = inData.value<QVector3D>();
+ *this = qt3dsdm::SFloat3(v.x(), v.y(), v.z());
+ break;
+ }
+
+ default:
+ qDebug() << "Add a handler for QVariant::type" << inData.type();
+ throw std::runtime_error("Cannot transform this QVariant into SValue");
+ }
+}
+
+QVariant SValue::toQVariant() const
+{
+ switch (getType()) {
+ case DataModelDataType::String:
+ case DataModelDataType::StringRef:
+ {
+ return get<QString>(*this);
+ }
+ case DataModelDataType::Float: {
+ return get<float>(*this);
+ }
+ case DataModelDataType::Float2: {
+ return QVariant::fromValue(get<QVector2D>(*this));
+ }
+ case DataModelDataType::Float3: {
+ return QVariant::fromValue(get<QVector3D>(*this));
+ }
+ case DataModelDataType::Float4: {
+ return QVariant::fromValue(get<QVector<float> >(*this));
+ }
+ case DataModelDataType::Long: {
+ return QVariant::fromValue(get<qt3ds::QT3DSI32>(*this));
+ }
+ case DataModelDataType::Bool: {
+ return get<bool>(*this);
+ }
+ case DataModelDataType::FloatList: {
+ //KDAB_TODO
+ qDebug() << "Add a handler for type DataModelDataType::FloatList";
+ return {};
+ }
+ case DataModelDataType::Long4: {
+ return QVariant::fromValue(get<QVector<qt3ds::QT3DSU32> >(*this));
+ }
+ case DataModelDataType::ObjectRef: {
+ const SObjectRefType &theRef(get<SObjectRefType>(*this));
+ switch (theRef.GetReferenceType()) {
+ case ObjectReferenceType::Absolute:
+ return SValue(get<SLong4>(theRef.m_Value)).toQVariant();
+ break;
+ case ObjectReferenceType::Relative:
+ return SValue(get<TDataStrPtr>(theRef.m_Value)).toQVariant();
+ break;
+ case ObjectReferenceType::Unknown:
+ return QVariant::fromValue(QVector<qt3ds::QT3DSU32>());
+ break;
+ }
+ }
+ case DataModelDataType::StringOrInt: {
+ const SStringOrInt &theData(get<SStringOrInt>(*this));
+ if (theData.GetType() == SStringOrIntTypes::Int) {
+ return QVariant::fromValue(get<qt3ds::QT3DSI32>(theData.m_Value));
+ } else if (theData.GetType() == SStringOrIntTypes::String) {
+ auto wideStr = get<TDataStrPtr>(theData.m_Value)->GetData();
+ return QString::fromWCharArray(wideStr);
+ } else {
+ return {};
+ }
+
+ }
+ case DataModelDataType::None:
+ return {};
+ default:
+ break;
+ }
+ return {};
+}
+
+SInternValue::SInternValue(const SValue &inValue, IStringTable &inStringTable)
+{
+ if (GetValueType(inValue) == DataModelDataType::StringRef) {
+ const SStringRef &current = get<SStringRef>(inValue);
+ SStringRef newId = inStringTable.RegisterStr(current.m_Id);
+ m_Value = SValue(newId);
+ } else {
+ m_Value = inValue;
+ }
+}
+
+SInternValue::SInternValue(const SInternValue &inOther)
+ : m_Value(inOther.m_Value)
+{
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMValue.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMValue.h
new file mode 100644
index 00000000..9e006320
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMValue.h
@@ -0,0 +1,341 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_VALUE_H
+#define QT3DSDM_VALUE_H
+#include "Qt3DSDMDataTypes.h"
+
+#include <QColor>
+#include <QMetaType>
+#include <QVariant>
+#include <QVector>
+#include <QVector2D>
+#include <QVector3D>
+
+namespace qt3dsdm {
+
+template <typename TDataType>
+struct SDataTypeToEnumMap
+{
+};
+
+template <DataModelDataType::Value TEnumVal>
+struct SEnumToDataTypeMap
+{
+};
+
+#define DEFINE_QT3DSDM_DATA_TYPE_MAP(dtype, enumName) \
+ template <> \
+ struct SDataTypeToEnumMap<dtype> \
+ { \
+ static DataModelDataType::Value getType() { return enumName; } \
+ }; \
+ template <> \
+ struct SEnumToDataTypeMap<enumName> \
+ { \
+ typedef dtype TDataType; \
+ };
+
+#define ITERATE_QT3DSDM_DATA_TYPES \
+ HANDLE_QT3DSDM_DATA_TYPE(float, DataModelDataType::Float); \
+ HANDLE_QT3DSDM_DATA_TYPE(SFloat2, DataModelDataType::Float2); \
+ HANDLE_QT3DSDM_DATA_TYPE(SFloat3, DataModelDataType::Float3); \
+ HANDLE_QT3DSDM_DATA_TYPE(SFloat4, DataModelDataType::Float4); \
+ HANDLE_QT3DSDM_DATA_TYPE(qt3ds::QT3DSI32, DataModelDataType::Long); \
+ HANDLE_QT3DSDM_DATA_TYPE(TDataStrPtr, DataModelDataType::String); \
+ HANDLE_QT3DSDM_DATA_TYPE(bool, DataModelDataType::Bool); \
+ HANDLE_QT3DSDM_DATA_TYPE(SLong4, DataModelDataType::Long4); \
+ HANDLE_QT3DSDM_DATA_TYPE(SStringRef, DataModelDataType::StringRef); \
+ HANDLE_QT3DSDM_DATA_TYPE(SObjectRefType, DataModelDataType::ObjectRef); \
+ HANDLE_QT3DSDM_DATA_TYPE(SStringOrInt, DataModelDataType::StringOrInt); \
+ HANDLE_QT3DSDM_DATA_TYPE(TFloatList, DataModelDataType::FloatList);
+
+#define HANDLE_QT3DSDM_DATA_TYPE(a, b) DEFINE_QT3DSDM_DATA_TYPE_MAP(a, b)
+ITERATE_QT3DSDM_DATA_TYPES
+#undef HANDLE_QT3DSDM_DATA_TYPE
+
+struct Qt3DSDMDataTypeUnionTraits
+{
+ typedef DataModelDataType::Value TIdType;
+
+ enum {
+ TBufferSize = sizeof(SObjectRefType),
+ };
+
+ static TIdType getNoDataId() { return DataModelDataType::None; }
+
+ template <typename TDataType>
+ static TIdType getType()
+ {
+ return SDataTypeToEnumMap<TDataType>::getType();
+ }
+
+ template <typename TRetType, typename TVisitorType>
+ static TRetType visit(char *inData, DataModelDataType::Value inType, TVisitorType inVisitor)
+ {
+ switch (inType) {
+#define HANDLE_QT3DSDM_DATA_TYPE(dtype, enumType) \
+ case enumType: \
+ return inVisitor(*NVUnionCast<dtype *>(inData));
+ ITERATE_QT3DSDM_DATA_TYPES
+#undef HANDLE_QT3DSDM_DATA_TYPE
+
+ default:
+ QT3DS_ASSERT(false);
+ case DataModelDataType::None:
+ return inVisitor();
+ }
+ }
+
+ template <typename TRetType, typename TVisitorType>
+ static TRetType visit(const char *inData, DataModelDataType::Value inType, TVisitorType inVisitor)
+ {
+ switch (inType) {
+#define HANDLE_QT3DSDM_DATA_TYPE(dtype, enumType) \
+ case enumType: \
+ return inVisitor(*NVUnionCast<const dtype *>(inData));
+ ITERATE_QT3DSDM_DATA_TYPES
+#undef HANDLE_QT3DSDM_DATA_TYPE
+
+ default:
+ QT3DS_ASSERT(false);
+ case DataModelDataType::None:
+ return inVisitor();
+ }
+ }
+};
+
+typedef qt3ds::foundation::
+ DiscriminatedUnion<qt3ds::foundation::
+ DiscriminatedUnionGenericBase<Qt3DSDMDataTypeUnionTraits,
+ Qt3DSDMDataTypeUnionTraits::TBufferSize>,
+ Qt3DSDMDataTypeUnionTraits::TBufferSize>
+ TValue;
+
+struct SValue : public TValue
+{
+ SValue() {}
+ SValue(const SValue &inOther)
+ : TValue(static_cast<const TValue &>(inOther))
+ {
+ }
+ SValue(const QVariant &inData);
+
+ template <typename TDataType>
+ SValue(const TDataType &inData)
+ : TValue(inData)
+ {
+ }
+ SValue &operator=(const SValue &inOther)
+ {
+ TValue::operator=(inOther);
+ return *this;
+ }
+ bool operator==(const SValue &inOther) const { return TValue::operator==(inOther); }
+ bool operator!=(const SValue &inOther) const { return TValue::operator!=(inOther); }
+ bool empty() const { return getType() == DataModelDataType::None; }
+
+ // Conversion from this data type into a data model value
+ const SValue &toOldSkool() const { return *this; }
+
+ QVariant toQVariant() const;
+};
+
+typedef std::shared_ptr<SValue> SValuePtr;
+
+template <>
+struct Qt3DSDMGetter<SValue>
+{
+ template <typename TRetType>
+ TRetType doGet(const SValue &inValue)
+ {
+ return inValue.getData<TRetType>();
+ }
+};
+
+template <>
+struct Qt3DSDMValueTyper<SValue>
+{
+ DataModelDataType::Value Get(const SValue &inValue) { return inValue.getType(); }
+};
+
+inline bool CheckValueType(DataModelDataType::Value inType, const SValue &inValue)
+{
+ bool retval = inType == inValue.getType();
+ if (!retval)
+ throw ValueTypeError(L"");
+ return retval;
+}
+
+inline bool Equals(const SValue &lhs, const SValue &rhs)
+{
+ return lhs == rhs;
+}
+
+class SInternValue
+{
+ SValue m_Value;
+
+public:
+ SInternValue(const SValue &inValue, IStringTable &inTable);
+ SInternValue() {}
+ SInternValue(const SInternValue &inOther);
+ SInternValue &operator=(const SInternValue &inOther)
+ {
+ m_Value = inOther.m_Value;
+ return *this;
+ }
+
+ static SInternValue ISwearThisHasAlreadyBeenInternalized(const SValue &inValue)
+ {
+ SInternValue retval;
+ retval.m_Value = inValue;
+ return retval;
+ }
+
+ const SValue &GetValue() const { return m_Value; }
+ operator const SValue &() const { return m_Value; }
+};
+
+template <>
+struct SDefaulter<SValue>
+{
+ inline bool SetDefault(DataModelDataType::Value inDataType, SValue &outValue)
+ {
+ switch (inDataType) {
+ case DataModelDataType::Float:
+ outValue = SValue(0.f);
+ break;
+ case DataModelDataType::Float2:
+ outValue = SValue(SFloat2());
+ break;
+ case DataModelDataType::Float3:
+ outValue = SValue(SFloat3());
+ break;
+ case DataModelDataType::Float4:
+ outValue = SValue(SFloat4());
+ break;
+ case DataModelDataType::Long:
+ outValue = SValue(0);
+ break;
+ case DataModelDataType::String:
+ outValue = SValue(TDataStrPtr(new CDataStr(L"")));
+ break;
+ case DataModelDataType::Bool:
+ outValue = SValue(false);
+ break;
+ case DataModelDataType::Long4:
+ outValue = SValue(SLong4());
+ break;
+ case DataModelDataType::StringRef:
+ outValue = SValue(SStringRef());
+ break;
+ case DataModelDataType::ObjectRef:
+ outValue = SValue(SObjectRefType());
+ break;
+ case DataModelDataType::FloatList:
+ outValue = SValue(TFloatList());
+ break;
+ case DataModelDataType::StringOrInt:
+ default:
+ outValue = SValue(SStringOrInt());
+ return false;
+ }
+ return true;
+ }
+};
+
+inline SObjectRefType ConvertToObjectRef(const SValue &inValue)
+{
+ using namespace std;
+ switch (GetValueType(inValue)) {
+ case DataModelDataType::StringRef:
+ return SObjectRefType(make_shared<CDataStr>(get<SStringRef>(inValue).m_Id));
+ case DataModelDataType::String:
+ return SObjectRefType(get<TDataStrPtr>(inValue));
+ case DataModelDataType::Long4:
+ return SObjectRefType(get<SLong4>(inValue));
+ case DataModelDataType::ObjectRef:
+ return get<SObjectRefType>(inValue);
+ default:
+ break;
+ }
+ return SObjectRefType();
+}
+
+
+template <>
+inline QColor get<QColor>(const SValue &inType)
+{
+ auto f = get<qt3dsdm::SFloat4>(inType);
+ qreal r = qBound<qreal>(0.0, f.m_Floats[0], 1.0);
+ qreal g = qBound<qreal>(0.0, f.m_Floats[1], 1.0);
+ qreal b = qBound<qreal>(0.0, f.m_Floats[2], 1.0);
+ qreal a = qBound<qreal>(0.0, f.m_Floats[3], 1.0);
+ return QColor::fromRgbF(r, g, b, a);
+}
+
+template <>
+inline QString get<QString>(const qt3dsdm::SValue &inType)
+{
+ return QString::fromWCharArray(qt3dsdm::get<qt3dsdm::TDataStrPtr>(inType)->GetData());
+}
+
+template <>
+inline QVector2D get<QVector2D>(const qt3dsdm::SValue &inType)
+{
+ auto f = get<qt3dsdm::SFloat2>(inType);
+ return QVector2D(f.m_Floats[0], f.m_Floats[1]);
+}
+
+template <>
+inline QVector3D get<QVector3D>(const qt3dsdm::SValue &inType)
+{
+ auto f = get<qt3dsdm::SFloat3>(inType);
+ return QVector3D(f.m_Floats[0], f.m_Floats[1], f.m_Floats[2]);
+}
+
+template <>
+inline QVector<float> get<QVector<float> >(const qt3dsdm::SValue &inType)
+{
+ auto f = get<qt3dsdm::SFloat4>(inType);
+ return {f.m_Floats[0], f.m_Floats[1], f.m_Floats[2], f.m_Floats[3]};
+}
+
+// KDAB_TODO Shortcut to not define our own 4 member long structure
+template <>
+inline QVector<qt3ds::QT3DSU32> get<QVector<qt3ds::QT3DSU32> >(const qt3dsdm::SValue &inType)
+{
+ auto f = get<qt3dsdm::SLong4>(inType);
+ return {f.m_Longs[0], f.m_Longs[1], f.m_Longs[2], f.m_Longs[3]};
+}
+
+}
+Q_DECLARE_METATYPE(qt3dsdm::DataModelDataType)
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMWStrOps.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMWStrOps.h
new file mode 100644
index 00000000..b1e1fb01
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMWStrOps.h
@@ -0,0 +1,40 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_WSTR_OPS_H
+#define QT3DSDM_WSTR_OPS_H
+namespace qt3dsdm {
+// Template base class so that we can convert items to and from wide string
+template <typename TDataType>
+struct WStrOps
+{
+ bool force_compile_error;
+};
+}
+#endif \ No newline at end of file
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMWStrOpsImpl.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMWStrOpsImpl.h
new file mode 100644
index 00000000..d65ac131
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMWStrOpsImpl.h
@@ -0,0 +1,761 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DS_IMPORT_WSTR_OPS_IMPL_H
+#define QT3DS_IMPORT_WSTR_OPS_IMPL_H
+#include "Qt3DSDMDataTypes.h"
+#include "Qt3DSDMWStrOps.h"
+#include "foundation/Qt3DSMemoryBuffer.h"
+#include "foundation/Qt3DSMemoryBuffer.h"
+#include "Qt3DSDMHandles.h"
+#include "Qt3DSDMAnimation.h"
+#include "Qt3DSDMMetaDataTypes.h"
+#include "Qt3DSDMXML.h"
+#include "EABase/eabase.h"
+#include "Qt3DSDMStringTable.h"
+
+namespace qt3dsdm {
+using qt3ds::QT3DSI8;
+using qt3ds::QT3DSU8;
+using qt3ds::QT3DSI16;
+using qt3ds::QT3DSU16;
+using qt3ds::QT3DSU32;
+using qt3ds::QT3DSI32;
+using qt3ds::QT3DSU64;
+using qt3ds::QT3DSI64;
+using qt3ds::QT3DSF32;
+using qt3ds::QT3DSF64;
+template <>
+struct WStrOps<bool>
+{
+ QT3DSU32 ToStr(bool item, NVDataRef<wchar_t> buffer)
+ {
+ return static_cast<QT3DSU32>(
+ swprintf(buffer.begin(), buffer.size(), L"%s", item ? L"True" : L"False"));
+ }
+ bool StrTo(const wchar_t *buffer, bool &item)
+ {
+ if (AreEqual(buffer, L"True"))
+ item = true;
+ else
+ item = false;
+ return true;
+ }
+ QT3DSU32 ToStr(bool item, NVDataRef<char8_t> buffer)
+ {
+ return static_cast<QT3DSU32>(
+ _snprintf(buffer.begin(), buffer.size(), "%s", item ? "True" : "False"));
+ }
+ bool StrTo(const char8_t *buffer, bool &item)
+ {
+ if (AreEqualCaseless(buffer, "True"))
+ item = true;
+ else
+ item = false;
+ return true;
+ }
+};
+template <>
+struct WStrOps<QT3DSU8>
+{
+ QT3DSU32 ToStr(QT3DSU8 item, NVDataRef<wchar_t> buffer)
+ {
+ return static_cast<QT3DSU32>(
+ swprintf(buffer.begin(), buffer.size(), L"%hu", static_cast<QT3DSU16>(item)));
+ }
+ bool StrTo(const char8_t *buffer, QT3DSU8 &item)
+ {
+ item = static_cast<QT3DSU8>(strtoul(buffer, NULL, 10));
+ return true;
+ }
+};
+template <>
+struct WStrOps<QT3DSI8>
+{
+ QT3DSU32 ToStr(QT3DSI8 item, NVDataRef<wchar_t> buffer)
+ {
+ return static_cast<QT3DSU32>(
+ swprintf(buffer.begin(), buffer.size(), L"%hd", static_cast<QT3DSI16>(item)));
+ }
+ bool StrTo(const char8_t *buffer, QT3DSI8 &item)
+ {
+ item = static_cast<QT3DSI8>(strtol(buffer, NULL, 10));
+ return true;
+ }
+};
+template <>
+struct WStrOps<QT3DSU16>
+{
+ QT3DSU32 ToStr(QT3DSU16 item, NVDataRef<wchar_t> buffer)
+ {
+ return static_cast<QT3DSU32>(swprintf(buffer.begin(), buffer.size(), L"%hu", item));
+ }
+ bool StrTo(const char8_t *buffer, QT3DSU16 &item)
+ {
+ item = static_cast<QT3DSU16>(strtoul(buffer, NULL, 10));
+ return true;
+ }
+};
+template <>
+struct WStrOps<QT3DSI16>
+{
+ QT3DSU32 ToStr(QT3DSI16 item, NVDataRef<wchar_t> buffer)
+ {
+ return static_cast<QT3DSU32>(swprintf(buffer.begin(), buffer.size(), L"%hd", item));
+ }
+ QT3DSU32 ToStr(QT3DSI16 item, NVDataRef<char8_t> buffer)
+ {
+ return static_cast<QT3DSU32>(sprintf(buffer.begin(), "%hd", item));
+ }
+ bool StrTo(const char8_t *buffer, QT3DSI16 &item)
+ {
+ item = static_cast<QT3DSI16>(strtol(buffer, NULL, 10));
+ return true;
+ }
+};
+
+template <>
+struct WStrOps<QT3DSU32>
+{
+ QT3DSU32 ToStr(QT3DSU32 item, NVDataRef<wchar_t> buffer)
+ {
+ return static_cast<QT3DSU32>(swprintf(buffer.begin(), buffer.size(), L"%lu", item));
+ }
+ QT3DSU32 ToStr(QT3DSU32 item, NVDataRef<char8_t> buffer)
+ {
+ // hope the buffer is big enough...
+ return static_cast<QT3DSU32>(sprintf(buffer.begin(), "%u", item));
+ }
+ bool StrTo(const char8_t *buffer, QT3DSU32 &item)
+ {
+ item = strtoul(buffer, NULL, 10);
+ return true;
+ }
+};
+
+template <>
+struct WStrOps<QT3DSI32>
+{
+ QT3DSU32 ToStr(QT3DSI32 item, NVDataRef<wchar_t> buffer)
+ {
+ return static_cast<QT3DSU32>(swprintf(buffer.begin(), buffer.size(), L"%ld", item));
+ }
+ bool StrTo(const char8_t *buffer, QT3DSI32 &item)
+ {
+ item = strtol(buffer, NULL, 10);
+ return true;
+ }
+};
+template <>
+struct WStrOps<QT3DSF32>
+{
+ QT3DSU32 ToStr(QT3DSF32 item, NVDataRef<wchar_t> buffer)
+ {
+ QString s = QLocale::c().toString(item);
+ wcsncpy(buffer.begin(), s.toStdWString().c_str(), buffer.size());
+ return s.length();
+ }
+ QT3DSU32 ToStr(QT3DSF32 item, NVDataRef<char8_t> buffer)
+ {
+ QString s = QLocale::c().toString(item);
+ strncpy(buffer.begin(), s.toStdString().c_str(), buffer.size());
+ return s.length();
+ }
+ bool StrTo(const char8_t *buffer, QT3DSF32 &item)
+ {
+ bool ok;
+ item = QLocale::c().toFloat(buffer, &ok);
+ return ok;
+ }
+};
+
+template <>
+struct WStrOps<QT3DSF64>
+{
+ QT3DSU32 ToStr(QT3DSF64 item, NVDataRef<wchar_t> buffer)
+ {
+ QString s = QLocale::c().toString(item);
+ wcsncpy(buffer.begin(), s.toStdWString().c_str(), buffer.size());
+ return s.length();
+ }
+ bool StrTo(const char8_t *buffer, QT3DSF64 &item)
+ {
+ bool ok;
+ item = QLocale::c().toDouble(buffer, &ok);
+ return ok;
+ }
+};
+#define QT3DS_WCHAR_T_None L"None"
+#define QT3DS_WCHAR_T_Float L"Float"
+#define QT3DS_WCHAR_T_Float2 L"Float2"
+#define QT3DS_WCHAR_T_Float3 L"Float3"
+#define QT3DS_WCHAR_T_Float4 L"Float4"
+#define QT3DS_WCHAR_T_Long L"Long"
+#define QT3DS_WCHAR_T_String L"String"
+#define QT3DS_WCHAR_T_Bool L"Bool"
+#define QT3DS_WCHAR_T_Long4 L"Long4"
+#define QT3DS_WCHAR_T_StringRef L"StringRef"
+#define QT3DS_WCHAR_T_ObjectRef L"ObjectRef"
+#define QT3DS_WCHAR_T_StringOrInt L"StringOrInt"
+#define QT3DS_WCHAR_T_FloatList L"FloatList"
+
+#define QT3DS_IMPORT_ITERATE_DMTYPE \
+ QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::None, None, QT3DSF32) \
+ QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Float, Float, QT3DSF32) \
+ QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Float2, Float2, SFloat2) \
+ QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Float3, Float3, SFloat3) \
+ QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Float4, Float4, SFloat4) \
+ QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Long, Long, QT3DSI32) \
+ QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::String, String, TDataStrPtr) \
+ QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Bool, Bool, bool) \
+ QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::Long4, Long4, SLong4) \
+ QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::StringRef, StringRef, SStringRef) \
+ QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::ObjectRef, ObjectRef, SObjectRefType) \
+ QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::StringOrInt, StringOrInt, SStringOrInt) \
+ QT3DS_IMPORT_HANDLE_DMTYPE(DataModelDataType::FloatList, FloatList, TFloatList)
+
+template <>
+struct WStrOps<DataModelDataType::Value>
+{
+ QT3DSU32 ToStr(DataModelDataType::Value item, NVDataRef<wchar_t> buffer)
+ {
+ const wchar_t *data = NULL;
+ switch (item) {
+#define QT3DS_IMPORT_HANDLE_DMTYPE(x, y, z) \
+ case x: \
+ data = QT3DS_WCHAR_T_##y; \
+ break;
+ QT3DS_IMPORT_ITERATE_DMTYPE
+#undef QT3DS_IMPORT_HANDLE_DMTYPE
+ default:
+ break;
+ }
+ if (data == NULL) {
+ QT3DS_ASSERT(false);
+ data = L"Unknown";
+ }
+ return (QT3DSU32)swprintf(buffer.begin(), buffer.size(), L"%ls", data);
+ }
+ bool StrTo(const wchar_t *buffer, DataModelDataType::Value &item)
+ {
+#define QT3DS_IMPORT_HANDLE_DMTYPE(x, y, z) \
+ if (AreEqual(buffer, QT3DS_WCHAR_T_##y)) { \
+ item = x; \
+ return true; \
+ }
+ QT3DS_IMPORT_ITERATE_DMTYPE
+#undef QT3DS_IMPORT_HANDLE_DMTYPE
+ item = DataModelDataType::None;
+ return false;
+ }
+};
+template <typename TBufferType>
+struct WStrOpsDMWriter
+{
+ TBufferType &buf;
+ WStrOpsDMWriter(TBufferType &_buf)
+ : buf(_buf)
+ {
+ }
+
+ void operator()(float val) { buf.Write(val); }
+ void operator()(const SFloat2 &val) { buf.Write(NVConstDataRef<QT3DSF32>(&val[0], 2)); }
+ void operator()(const SFloat3 &val) { buf.Write(NVConstDataRef<QT3DSF32>(&val[0], 3)); }
+ void operator()(const SFloat4 &val) { buf.Write(NVConstDataRef<QT3DSF32>(&val[0], 4)); }
+ void operator()(QT3DSI32 val) { buf.Write(val); }
+ void operator()(bool val) { buf.Write(val); }
+ void operator()(const TDataStrPtr &val)
+ {
+ if (val != NULL)
+ buf.Write(NVConstDataRef<wchar_t>(val->GetData(), (QT3DSU32)val->GetLength()));
+ }
+ void operator()(const SLong4 &val)
+ {
+ buf.Write(NVConstDataRef<QT3DSU32>(&val.m_Longs[0], 4), 4);
+ }
+ void operator()(const SStringRef &val) { buf.Write(val.m_Id, (QT3DSU32)wcslen(val.m_Id) + 1); }
+ void operator()(const SObjectRefType &val) { val.m_Value.visit<void>(*this); }
+ void operator()(const SStringOrInt &val) { val.m_Value.visit<void>(*this); }
+ void operator()(const TFloatList &val)
+ {
+ buf.Write(NVConstDataRef<float>(val.data(), (QT3DSU32)val.size()));
+ }
+ void operator()() { QT3DS_ASSERT(false); }
+};
+
+template <>
+struct WStrOps<SValue>
+{
+ template <typename TBufferType>
+ void ToBuf(const SValue &item, TBufferType &outBuffer)
+ {
+ WStrOpsDMWriter<TBufferType> writer(outBuffer);
+ item.visit<void>(writer);
+ }
+ template <typename TBufferType>
+ SValue BufTo(DataModelDataType::Value type, TBufferType &inReader)
+ {
+ switch (type) {
+#define QT3DS_IMPORT_HANDLE_DMTYPE(x, y, z) \
+ case x: { \
+ z retval; \
+ Read(inReader, retval); \
+ return retval; \
+ }
+ QT3DS_IMPORT_ITERATE_DMTYPE
+#undef QT3DS_IMPORT_HANDLE_DMTYPE
+ default:
+ break;
+ }
+ QT3DS_ASSERT(false);
+ return SValue();
+ }
+ template <typename TBufferType>
+ void Read(TBufferType &reader, float &val)
+ {
+ reader.Read(val);
+ }
+ template <typename TBufferType>
+ void Read(TBufferType &reader, SFloat2 &val)
+ {
+ reader.ReadRef(NVDataRef<QT3DSF32>(&val[0], 2));
+ }
+ template <typename TBufferType>
+ void Read(TBufferType &reader, SFloat3 &val)
+ {
+ reader.ReadRef(NVDataRef<QT3DSF32>(&val[0], 3));
+ }
+ template <typename TBufferType>
+ void Read(TBufferType &reader, SFloat4 &val)
+ {
+ reader.ReadRef(NVDataRef<QT3DSF32>(&val[0], 4));
+ }
+ template <typename TBufferType>
+ void Read(TBufferType &reader, QT3DSI32 &val)
+ {
+ reader.Read(val);
+ }
+ template <typename TBufferType>
+ void Read(TBufferType &reader, bool &val)
+ {
+ reader.Read(val);
+ }
+ template <typename TBufferType>
+ void Read(TBufferType &reader, TDataStrPtr &val)
+ {
+ NVConstDataRef<wchar_t> buffer;
+ reader.ReadBuffer(buffer);
+ val = std::make_shared<CDataStr>(buffer.begin(), buffer.size());
+ }
+ template <typename TBufferType>
+ void Read(TBufferType &reader, SLong4 &val)
+ {
+ reader.ReadRef(NVDataRef<QT3DSU32>(&val.m_Longs[0], 4));
+ }
+ template <typename TBufferType>
+ void Read(TBufferType &reader, SStringRef &val)
+ {
+ NVConstDataRef<wchar_t> buffer;
+ reader.ReadBuffer(buffer);
+ val = SStringRef(buffer.begin());
+ }
+ template <typename TBufferType>
+ void Read(TBufferType &reader, TFloatList &val)
+ {
+ NVConstDataRef<QT3DSF32> buffer;
+ reader.ReadBuffer(buffer);
+ val.assign(buffer.begin(), buffer.end());
+ }
+ template <typename TBufferType>
+ void Read(TBufferType &reader, SObjectRefType &val)
+ {
+ // Force the read to be as string; callers can always convert to a different
+ // format later if required.
+ TDataStrPtr theValue;
+ Read(reader, theValue);
+ val.m_Value = theValue;
+ }
+ template <typename TBufferType>
+ void Read(TBufferType &reader, SStringOrInt &val)
+ {
+ NVConstDataRef<char8_t> buffer;
+ reader.ReadBuffer(buffer);
+ if (buffer.size() == 0)
+ return;
+
+ if ((buffer[0] >= '0' && buffer[0] <= '9') || buffer[0] == '-') {
+ QT3DSI32 theVal;
+ WStrOps<QT3DSI32>().StrTo(buffer.begin(), theVal);
+ val = SStringOrInt(theVal);
+ } else {
+ NVConstDataRef<wchar_t> wideBuffer;
+ reader.ReadBuffer(wideBuffer);
+ val = SStringOrInt(std::make_shared<CDataStr>(wideBuffer.begin()));
+ }
+ }
+};
+
+// Write the wchar_t but exlude the null terminator
+// Meant to write data model values.
+// Memory buffer contains a non-null-terminated
+// wchar_t string
+struct WCharTWriter
+{
+ MemoryBuffer<RawAllocator> &m_Buffer;
+ WCharTWriter(MemoryBuffer<RawAllocator> &buf)
+ : m_Buffer(buf)
+ {
+ }
+ void Write(const wchar_t *value, QT3DSU32 len = 0)
+ {
+ if (IsTrivial(value))
+ return;
+ if (len == 0)
+ len = (QT3DSU32)wcslen(value);
+ m_Buffer.write(value, len);
+ }
+ void Write(wchar_t value) { m_Buffer.write(value); }
+ void Write(bool value) { Write(value ? L"True" : L"False"); }
+
+ // Takes care of long and float
+ template <typename TDataType>
+ void Write(TDataType value)
+ {
+ wchar_t buf[256];
+ QT3DSU32 numWritten = WStrOps<TDataType>().ToStr(value, NVDataRef<wchar_t>(buf, 256));
+ if (numWritten)
+ Write((const wchar_t *)buf);
+ else {
+ QT3DS_ASSERT(false);
+ }
+ }
+ template <typename TDataType>
+ void Write(NVConstDataRef<TDataType> values, QT3DSU32 grouping = 6, QT3DSU32 tabCount = 0)
+ {
+ for (QT3DSU32 idx = 0; idx < values.size(); ++idx) {
+ if (idx) {
+ if ((idx % grouping) == 0) {
+ Write((wchar_t)'\n');
+ for (QT3DSU32 tabIdx = 0; tabIdx < tabCount; ++tabIdx)
+ Write((wchar_t)'\t');
+ } else
+ Write((wchar_t)' ');
+ }
+ Write(values[idx]);
+ }
+ }
+
+ void Write(NVConstDataRef<wchar_t> values, QT3DSU32 ignored = 6)
+ {
+ (void)ignored;
+ if (values.size() && values[0] != 0) {
+ QT3DSU32 lastItem = values.size() - 1;
+ if (values[lastItem] == 0)
+ --lastItem;
+ Write(values.begin(), lastItem + 1);
+ }
+ }
+};
+
+inline bool IsWhite(wchar_t value)
+{
+ return value == '\n' || value == '\r' || value == ' ' || value == '\t';
+}
+
+// skip until we find whitespace.
+inline wchar_t *FindNextWhitespace(wchar_t *input)
+{
+ if (input == NULL)
+ return input;
+ wchar_t *marker = input;
+ // Empty loop intentional
+ for (; *marker && !IsWhite(*marker); ++marker)
+ ;
+ return marker;
+}
+
+// skip until we find whitespace.
+inline char8_t *FindNextWhitespace(char8_t *input)
+{
+ if (input == NULL)
+ return input;
+ char8_t *marker = input;
+ // Empty loop intentional
+ for (; *marker && !IsWhite(*marker); ++marker)
+ ;
+ return marker;
+}
+
+// skip until we find something that isn't whitespace.
+inline wchar_t *FindNextNonWhitespace(wchar_t *input)
+{
+ if (input == NULL)
+ return input;
+ wchar_t *marker = input;
+ // Empty loop intentional
+ for (; *marker && IsWhite(*marker); ++marker)
+ ;
+ return marker;
+}
+
+inline char8_t *FindNextNonWhitespace(char8_t *input)
+{
+ if (input == NULL)
+ return input;
+ char8_t *marker = input;
+ // Empty loop intentional
+ for (; *marker && IsWhite(*marker); ++marker)
+ ;
+ return marker;
+}
+
+// Reading is destructive in the case of floating point lists, so we may
+// destroy the incoming string.
+// We are assuming the string is null-terminated at end ptr.
+struct WCharTReader
+{
+ char8_t *m_StartPtr;
+ // Buffer used for temp storage
+ MemoryBuffer<RawAllocator> &m_Buffer;
+ IStringTable &m_StringTable;
+ WCharTReader(char8_t *sp, MemoryBuffer<RawAllocator> &buf, IStringTable &inStringTable)
+ : m_StartPtr(sp)
+ , m_Buffer(buf)
+ , m_StringTable(inStringTable)
+ {
+ }
+ void Read(const char8_t *&outPtr) { outPtr = m_StartPtr; }
+ void Read(const wchar_t *&outPtr) { outPtr = m_StringTable.GetWideStr(m_StartPtr); }
+ template <typename TDataType>
+ void Read(TDataType &data)
+ {
+ bool success = WStrOps<TDataType>().StrTo(m_StartPtr, data);
+ QT3DS_ASSERT(success);
+ (void)success;
+ }
+ // Destructive operation because we can't trust
+ // strtod to do the right thing. On windows, for long strings,
+ // it calls strlen every operation thus leading to basically N^2
+ // behavior
+ template <typename TDataType>
+ void ReadRef(NVDataRef<TDataType> data)
+ {
+ QT3DSU32 idx = 0;
+ m_StartPtr = FindNextNonWhitespace(m_StartPtr);
+ for (; idx < data.size() && m_StartPtr && *m_StartPtr; ++idx) {
+ char8_t *nextPtr = FindNextWhitespace(m_StartPtr);
+ if (nextPtr && *nextPtr)
+ *nextPtr = 0;
+ else
+ nextPtr = NULL;
+ WStrOps<TDataType>().StrTo(m_StartPtr, data[idx]);
+ m_StartPtr = nextPtr;
+ if (m_StartPtr)
+ m_StartPtr = FindNextNonWhitespace(m_StartPtr + 1);
+ }
+ }
+
+ void ReadBuffer(NVConstDataRef<char8_t> &outBuffer)
+ {
+ if (m_StartPtr && *m_StartPtr) {
+ QT3DSU32 len = (QT3DSU32)strlen(m_StartPtr);
+ outBuffer = NVConstDataRef<char8_t>(m_StartPtr, len + 1);
+ }
+ }
+ void ReadBuffer(NVConstDataRef<wchar_t> &outBuffer)
+ {
+ if (m_StartPtr && *m_StartPtr) {
+ QT3DSU32 len = (QT3DSU32)strlen(m_StartPtr);
+ outBuffer = NVConstDataRef<wchar_t>(m_StringTable.GetWideStr(m_StartPtr), len + 1);
+ }
+ }
+
+ // Destructive operation because we can't trust
+ // strtod to do the right thing. On windows, for long strings,
+ // it calls strlen every operation thus leading to basically N^2
+ // behavior
+ template <typename TDataType>
+ void ReadBuffer(NVConstDataRef<TDataType> &outBuffer)
+ {
+ m_Buffer.clear();
+ m_StartPtr = FindNextNonWhitespace(m_StartPtr);
+ while (m_StartPtr && *m_StartPtr) {
+ char8_t *nextPtr = FindNextWhitespace(m_StartPtr);
+ if (nextPtr && *nextPtr)
+ *nextPtr = 0;
+ else
+ nextPtr = NULL;
+ TDataType temp;
+ WStrOps<TDataType>().StrTo(m_StartPtr, temp);
+ m_Buffer.write(temp);
+ m_StartPtr = nextPtr;
+ if (m_StartPtr)
+ m_StartPtr = FindNextNonWhitespace(m_StartPtr + 1);
+ }
+ QT3DSU32 numItems = m_Buffer.size() / sizeof(TDataType);
+ if (numItems)
+ outBuffer = NVConstDataRef<TDataType>((TDataType *)m_Buffer.begin(), numItems);
+ else
+ outBuffer = NVConstDataRef<TDataType>();
+ }
+};
+
+template <>
+struct WStrOps<CDataModelHandle>
+{
+ template <typename THandleType>
+ QT3DSU32 ToStr(THandleType item, NVDataRef<wchar_t> buffer)
+ {
+ int theValue(item);
+ return WStrOps<int>().ToStr(theValue, buffer);
+ }
+ template <typename THandleType>
+ bool StrTo(const char8_t *buffer, THandleType &item)
+ {
+ int theValue;
+ bool retval = WStrOps<int>().StrTo(buffer, theValue);
+ item = theValue;
+ return retval;
+ }
+};
+
+#define IMPLEMENT_HANDLE_WSTROPS(HandleType) \
+ template <> \
+ struct WStrOps<HandleType> : public WStrOps<CDataModelHandle> \
+ { \
+ };
+IMPLEMENT_HANDLE_WSTROPS(Qt3DSDMInstanceHandle);
+IMPLEMENT_HANDLE_WSTROPS(Qt3DSDMPropertyHandle);
+IMPLEMENT_HANDLE_WSTROPS(Qt3DSDMSlideHandle);
+IMPLEMENT_HANDLE_WSTROPS(Qt3DSDMSlideGraphHandle);
+IMPLEMENT_HANDLE_WSTROPS(Qt3DSDMAnimationHandle);
+IMPLEMENT_HANDLE_WSTROPS(Qt3DSDMKeyframeHandle);
+IMPLEMENT_HANDLE_WSTROPS(Qt3DSDMActionHandle);
+IMPLEMENT_HANDLE_WSTROPS(Qt3DSDMHandlerArgHandle);
+IMPLEMENT_HANDLE_WSTROPS(Qt3DSDMEventHandle);
+IMPLEMENT_HANDLE_WSTROPS(Qt3DSDMHandlerHandle);
+IMPLEMENT_HANDLE_WSTROPS(Qt3DSDMHandlerParamHandle);
+IMPLEMENT_HANDLE_WSTROPS(Qt3DSDMMetaDataPropertyHandle);
+IMPLEMENT_HANDLE_WSTROPS(Qt3DSDMCategoryHandle);
+#undef IMPLEMENT_HANDLE_WSTROPS
+
+template <>
+struct WStrOps<EAnimationType>
+{
+ QT3DSU32 ToStr(EAnimationType value, NVDataRef<wchar_t> buffer)
+ {
+ const wchar_t *animType = NULL;
+ switch (value) {
+ case EAnimationTypeLinear:
+ animType = L"Linear";
+ break;
+ case EAnimationTypeBezier:
+ animType = L"Bezier";
+ break;
+ case EAnimationTypeEaseInOut:
+ animType = L"EaseInOut";
+ break;
+ default:
+ QT3DS_ASSERT(false);
+ break;
+ }
+ if (animType != NULL)
+ return swprintf(buffer.begin(), buffer.size(), L"%ls", animType);
+ else {
+ QT3DS_ASSERT(false);
+ return 0;
+ }
+ }
+ bool StrTo(const wchar_t *buffer, EAnimationType &item)
+ {
+ if (AreEqual(L"Linear", buffer)) {
+ item = EAnimationTypeLinear;
+ return true;
+ }
+ if (AreEqual(L"Bezier", buffer)) {
+ item = EAnimationTypeBezier;
+ return true;
+ }
+ if (AreEqual(L"EaseInOut", buffer)) {
+ item = EAnimationTypeEaseInOut;
+ return true;
+ }
+ return false;
+ }
+};
+
+// Implemented in UICDMMetaData.h
+template <>
+struct WStrOps<CompleteMetaDataType::Enum>
+{
+ QT3DSU32 ToStr(CompleteMetaDataType::Enum item, NVDataRef<wchar_t> buffer);
+ bool StrTo(const wchar_t *buffer, CompleteMetaDataType::Enum &item);
+};
+
+template <>
+struct WStrOps<HandlerArgumentType::Value>
+{
+ QT3DSU32 ToStr(HandlerArgumentType::Value item, NVDataRef<wchar_t> buffer);
+ bool StrTo(const wchar_t *buffer, HandlerArgumentType::Value &item);
+};
+
+#ifndef __clang__
+#ifndef __INTEGRITY
+// IDOMReader implementations
+template <typename TDataType>
+bool IDOMReader::ValueList(NVDataRef<TDataType> data)
+{
+ const wchar_t *value;
+ if (Value(value)) {
+ WCharTReader reader(const_cast<wchar_t *>(value), m_TempBuf);
+ reader.ReadRef(data);
+ }
+ return true;
+}
+
+// Destructive operation because we can't trust
+// strtod to do the right thing. On windows, for long strings,
+// it calls strlen every operation thus leading to basically N^2
+// behavior
+template <typename TDataType>
+NVConstDataRef<TDataType> IDOMReader::ChildValueList(TWideXMLCharPtr listName)
+{
+ NVConstDataRef<TDataType> retval;
+ TWideXMLCharPtr childValue = NULL;
+ if (ChildValue(listName, childValue)) {
+ WCharTReader reader(const_cast<wchar_t *>(childValue), m_TempBuf);
+ reader.ReadBuffer(retval);
+ }
+ return retval;
+}
+#endif
+#endif
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMWindowsCompatibility.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMWindowsCompatibility.h
new file mode 100644
index 00000000..0a53c71c
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMWindowsCompatibility.h
@@ -0,0 +1,182 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DSDM_WINDOWS_COMPATIBILITY_H
+#define QT3DSDM_WINDOWS_COMPATIBILITY_H
+#include "EABase/config/eaplatform.h"
+#include "EABase/eabase.h"
+#include <string>
+#ifndef __INTEGRITY
+#include <memory.h>
+#endif
+#include <string.h>
+#include <stdio.h>
+
+#if defined QT3DS_PLATFORM_NEEDS_WCHAR_T
+
+inline size_t wcslen(const wchar_t *inStr)
+{
+ size_t retval = 0;
+ while (inStr && *inStr) {
+ ++retval;
+ ++inStr;
+ }
+ return retval;
+}
+
+inline int wmemcmp(const wchar_t *lhs, const wchar_t *rhs, size_t count)
+{
+ return memcmp(lhs, rhs, count * sizeof(wchar_t));
+}
+
+inline wchar_t *wmemcpy(wchar_t *dest, const wchar_t *src, size_t count)
+{
+ memcpy(dest, src, count * sizeof(wchar_t));
+ return dest;
+}
+
+inline const wchar_t *wmemchr(const wchar_t *inFirst, size_t count, const wchar_t val)
+{
+ size_t idx;
+ // empty loop intentional
+ for (idx = 0; idx < count && inFirst[idx] != val; ++idx) {
+ }
+ if (idx < count)
+ return inFirst + idx;
+ return NULL;
+}
+
+inline wchar_t *wmemmove(wchar_t *dest, const wchar_t *src, size_t count)
+{
+ memmove(dest, src, count * sizeof(wchar_t));
+ return dest;
+}
+
+inline wchar_t *wmemset(wchar_t *dest, size_t count, wchar_t val)
+{
+ for (size_t idx = 0; idx < count; ++idx)
+ dest[idx] = val;
+ return dest;
+}
+
+#endif
+
+inline size_t WideToNarrow(char *inDest, size_t inDestLen, const wchar_t *inWideStr);
+template <unsigned int N>
+inline size_t WideToNarrow(char (&inDest)[N], const wchar_t *inWideStr);
+
+#if !defined EA_PLATFORM_WINDOWS
+
+inline void wcscpy_s(wchar_t *inDest, size_t destLen, const wchar_t *inMessage)
+{
+ if (destLen) {
+ size_t idx = 0;
+ while (inMessage && *inMessage && idx < destLen) {
+ inDest[idx] = *inMessage;
+ ++inMessage;
+ ++idx;
+ }
+
+ idx = idx < destLen ? idx : destLen - 1;
+ inDest[idx] = 0;
+ }
+}
+
+template <unsigned int N>
+inline void wcscpy_s(wchar_t (&inDest)[N], const wchar_t *inMessage)
+{
+ wcscpy_s(inDest, N, inMessage);
+}
+
+inline FILE *_wfopen(const wchar_t *inFname, const wchar_t *inFlags)
+{
+ char name[1024] = { 0 };
+ WideToNarrow(name, inFname);
+ char flags[24] = { 0 };
+ WideToNarrow(flags, inFlags);
+ return fopen(name, flags);
+}
+
+inline int _fseeki64(FILE *inFile, int64_t pos, int seekFlags)
+{
+ return fseek(inFile, (int32_t)pos, seekFlags);
+}
+
+inline int64_t _ftelli64(FILE *inFile)
+{
+ return ftell(inFile);
+}
+
+#define _snprintf snprintf
+
+#endif
+
+template <typename TLHS, typename TRHS>
+inline size_t ConvertStr(TLHS *inDest, size_t inDestLen, const TRHS *inWideStr)
+{
+ if (inDestLen == 0)
+ return 0;
+
+ size_t nameLen = 0;
+
+ // empty loop intentional.
+ for (const TRHS *tempPtr = inWideStr; tempPtr && *tempPtr; ++tempPtr, ++nameLen) {
+ }
+
+ if (nameLen > inDestLen - 1)
+ nameLen = inDestLen - 1;
+ for (size_t idx = 0; idx < nameLen; ++idx)
+ inDest[idx] = (char)inWideStr[idx];
+ inDest[nameLen] = 0;
+ return nameLen;
+}
+
+inline size_t WideToNarrow(char *inDest, size_t inDestLen, const wchar_t *inWideStr)
+{
+ return ConvertStr(inDest, inDestLen, inWideStr);
+}
+
+template <unsigned int N>
+inline size_t WideToNarrow(char (&inDest)[N], const wchar_t *inWideStr)
+{
+ return WideToNarrow(inDest, N, inWideStr);
+}
+
+inline size_t WideToNarrow(char *inDest, size_t inDestLen, const char16_t *inWideStr)
+{
+ return ConvertStr(inDest, inDestLen, inWideStr);
+}
+
+template <unsigned int N>
+inline size_t WideToNarrow(char (&inDest)[N], const char16_t *inWideStr)
+{
+ return WideToNarrow(inDest, N, inWideStr);
+}
+
+#endif \ No newline at end of file
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMXML.cpp b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMXML.cpp
new file mode 100644
index 00000000..2055adf1
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMXML.cpp
@@ -0,0 +1,1253 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "Qt3DSDMXML.h"
+#include "foundation/Qt3DSPool.h"
+#include "foundation/Qt3DSAtomic.h"
+#include "foundation/Qt3DSRefCounted.h"
+#include "Qt3DSDMStringTable.h"
+#include "Qt3DSDMWStrOpsImpl.h"
+#include <memory>
+#include "foundation/StrConvertUTF.h"
+#include "foundation/StringTable.h"
+#ifdef QT3DS_VC
+#include <winsock2.h>
+#include <windows.h> //output debug string
+#endif
+
+#include <QtCore/qxmlstream.h>
+
+typedef char XML_Char;
+typedef char XML_LChar;
+
+using namespace qt3dsdm;
+using std::shared_ptr;
+using namespace qt3ds::foundation;
+using qt3ds::foundation::Pool;
+
+#define QT3DSXML_FOREACH(idxnm, val) \
+ for (QT3DSU32 idxnm = 0, __numItems = (QT3DSU32)val; idxnm < __numItems; ++idxnm)
+
+namespace qt3dsdm {
+
+// All names are string table values so we can do straight
+// pointer comparisons on them, we don't have the compare their
+// values.
+struct SDOMAttribute
+{
+ TXMLCharPtr m_Name;
+ TXMLCharPtr m_Value;
+ SDOMAttribute *m_NextAttribute;
+
+ SDOMAttribute(TXMLCharPtr nm, TXMLCharPtr val)
+ : m_Name(nm)
+ , m_Value(val)
+ , m_NextAttribute(NULL)
+ {
+ }
+};
+
+struct SDOMElement
+{
+ TXMLCharPtr m_Name;
+ SDOMAttribute *m_FirstAttribute;
+ SDOMAttribute *m_LastAttribute;
+ SDOMElement *m_Parent;
+ SDOMElement *m_FirstChild;
+ SDOMElement *m_LastChild;
+ SDOMElement *m_NextSibling;
+ TXMLCharPtr m_Value;
+
+ SDOMElement(TXMLCharPtr nm)
+ : m_Name(nm)
+ , m_FirstAttribute(NULL)
+ , m_LastAttribute(NULL)
+ , m_Parent(NULL)
+ , m_FirstChild(NULL)
+ , m_LastChild(NULL)
+ , m_NextSibling(NULL)
+ , m_Value("")
+ {
+ }
+
+ void AddAttribute(SDOMAttribute &att)
+ {
+ if (m_LastAttribute) {
+ m_LastAttribute->m_NextAttribute = &att;
+ m_LastAttribute = &att;
+ } else {
+ QT3DS_ASSERT(m_FirstAttribute == NULL);
+ m_FirstAttribute = m_LastAttribute = &att;
+ }
+ }
+ // Used to ensure duplicate attributes can't happen
+ void SetAttributeValue(TXMLCharPtr inName, TXMLCharPtr inValue, IDOMFactory &inFactory,
+ const SDOMFlags &inFlags)
+ {
+ inName = inFactory.GetStringTable()->RegisterStr(inName);
+ SDOMAttribute *att = FindAttribute(inName, inFlags);
+ if (att) {
+ att->m_Value = inFactory.RegisterValue(inValue);
+ } else {
+ AddAttribute(*inFactory.NextAttribute(inName, inValue));
+ }
+ }
+ void SetAttributeValue(TWideXMLCharPtr inName, TWideXMLCharPtr inValue, IDOMFactory &inFactory,
+ const SDOMFlags &inFlags)
+ {
+ TXMLCharPtr theName = inFactory.GetStringTable()->GetNarrowStr(inName);
+ SDOMAttribute *att = FindAttribute(theName, inFlags);
+ if (att) {
+ att->m_Value = inFactory.RegisterValue(inValue);
+ } else {
+ AddAttribute(
+ *inFactory.NextAttribute(inFactory.GetStringTable()->GetWideStr(inName), inValue));
+ }
+ }
+ const SDOMAttribute *FindAttribute(TXMLCharPtr nm, const SDOMFlags &inFlags) const
+ {
+ return const_cast<SDOMElement *>(this)->FindAttribute(nm, inFlags);
+ }
+ SDOMAttribute *FindAttribute(TXMLCharPtr nm, const SDOMFlags &inFlags)
+ {
+ for (SDOMAttribute *att = m_FirstAttribute; att != NULL; att = att->m_NextAttribute) {
+ if (att->m_Name == nm)
+ return att;
+ else if (inFlags.CaselessAttributes() && AreEqualCaseless(nm, att->m_Name))
+ return att;
+ }
+ return NULL;
+ }
+ void RemoveAttribute(TXMLCharPtr nm, const SDOMFlags &inFlags)
+ {
+ SDOMAttribute *preatt = m_FirstAttribute;
+ for (SDOMAttribute *att = m_FirstAttribute; att != NULL;
+ preatt = att, att = att->m_NextAttribute) {
+ if (att->m_Name == nm
+ || (inFlags.CaselessAttributes() && AreEqualCaseless(nm, att->m_Name))) {
+ if (att == m_FirstAttribute) {
+ m_FirstAttribute = att->m_NextAttribute;
+ } else {
+ preatt->m_NextAttribute = att->m_NextAttribute;
+ if (att == m_LastAttribute)
+ m_LastAttribute = preatt;
+ }
+
+ att->m_NextAttribute = NULL;
+ }
+ }
+ }
+ TXMLCharPtr GetAttributeValue(TXMLCharPtr nm, SDOMFlags &inFlags) const
+ {
+ const SDOMAttribute *att = FindAttribute(nm, inFlags);
+ if (att)
+ return att->m_Value;
+ return NULL;
+ }
+ void AddChild(SDOMElement &elem)
+ {
+ elem.m_Parent = this;
+ if (m_LastChild) {
+ m_LastChild->m_NextSibling = &elem;
+ m_LastChild = &elem;
+ } else {
+ QT3DS_ASSERT(m_FirstChild == NULL);
+ m_FirstChild = m_LastChild = &elem;
+ }
+ }
+ SDOMElement *FindPreviousChild(SDOMElement &elem)
+ {
+ if (&elem == m_FirstChild)
+ return NULL;
+ // Find the previous sibling.
+ SDOMElement *theChild = m_FirstChild;
+ // Empty loop intentional
+ for (; theChild && theChild->m_NextSibling != &elem; theChild = theChild->m_NextSibling) {
+ }
+
+ return theChild;
+ }
+ void RemoveChild(SDOMElement &elem)
+ {
+ if (elem.m_Parent != this) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ elem.m_Parent = NULL;
+ if (&elem == m_FirstChild) {
+ m_FirstChild = elem.m_NextSibling;
+ } else {
+ SDOMElement *theChild(FindPreviousChild(elem));
+ QT3DS_ASSERT(theChild);
+ if (theChild) {
+ theChild->m_NextSibling = elem.m_NextSibling;
+ if (&elem == m_LastChild)
+ m_LastChild = theChild;
+ }
+ }
+ elem.m_NextSibling = NULL;
+ }
+
+ void ReplaceChild(SDOMElement &inChild, SDOMElement &inReplacement)
+ {
+ inChild.m_Parent = NULL;
+ if (&inChild == m_FirstChild)
+ m_FirstChild = &inReplacement;
+ else {
+ SDOMElement *theChild(FindPreviousChild(inChild));
+ QT3DS_ASSERT(theChild);
+ if (theChild) {
+ theChild->m_NextSibling = &inReplacement;
+ if (&inChild == m_LastChild)
+ m_LastChild = &inReplacement;
+ }
+ }
+ inReplacement.m_NextSibling = inChild.m_NextSibling;
+ inReplacement.m_Parent = this;
+ inChild.m_NextSibling = NULL;
+ }
+
+ void InsertChildBefore(SDOMElement &elem, SDOMElement &theSibling)
+ {
+ // Ensure elem isn't in the graph.
+ QT3DS_ASSERT(elem.m_Parent == NULL);
+ QT3DS_ASSERT(elem.m_NextSibling == NULL);
+ elem.m_Parent = this;
+ if (&theSibling == m_FirstChild)
+ m_FirstChild = &elem;
+ else {
+ SDOMElement *thePrevious = FindPreviousChild(theSibling);
+ QT3DS_ASSERT(thePrevious);
+ if (thePrevious)
+ thePrevious->m_NextSibling = &elem;
+ }
+
+ elem.m_NextSibling = &theSibling;
+ }
+ QT3DSU32 GetNumChildren(TXMLCharPtr inChildName, const SDOMFlags &inFlags) const
+ {
+ QT3DSU32 idx = 0;
+ for (SDOMElement *elem = m_FirstChild; elem != NULL; elem = elem->m_NextSibling) {
+ if (elem->m_Name == inChildName)
+ ++idx;
+ else if (inFlags.CaselessElements() && AreEqualCaseless(inChildName, elem->m_Name))
+ ++idx;
+ }
+ return idx;
+ }
+ QT3DSU32 GetNumChildren() const
+ {
+ QT3DSU32 idx = 0;
+ for (SDOMElement *elem = m_FirstChild; elem != NULL; elem = elem->m_NextSibling)
+ ++idx;
+ return idx;
+ }
+ SDOMElement *FindChildByName(TXMLCharPtr nm, const SDOMFlags &inFlags) const
+ {
+ for (SDOMElement *elem = m_FirstChild; elem != NULL; elem = elem->m_NextSibling) {
+ if (elem->m_Name == nm)
+ return elem;
+ else if (inFlags.CaselessElements() && AreEqualCaseless(nm, elem->m_Name))
+ return elem;
+ }
+ return NULL;
+ }
+ SDOMElement *FindNextSiblingByName(TXMLCharPtr nm, const SDOMFlags &inFlags) const
+ {
+ for (SDOMElement *elem = m_NextSibling; elem != NULL; elem = elem->m_NextSibling) {
+ if (elem->m_Name == nm)
+ return elem;
+ else if (inFlags.CaselessElements() && AreEqualCaseless(nm, elem->m_Name))
+ return elem;
+ }
+ return NULL;
+ }
+};
+}
+
+namespace {
+
+const QT3DSU16 g_BOMMarker = (QT3DSU16)0xFEFF;
+
+struct SElemPointer : eastl::pair<SDOMElement *, SDOMAttribute *>
+{
+ SElemPointer(SDOMElement *elem = NULL)
+ : eastl::pair<SDOMElement *, SDOMAttribute *>(elem, NULL)
+ {
+ }
+ SElemPointer &operator=(SDOMElement *elem)
+ {
+ first = elem;
+ second = NULL;
+ return *this;
+ }
+ SElemPointer &operator=(SDOMAttribute *att)
+ {
+ second = att;
+ return *this;
+ }
+ SElemPointer &operator=(const eastl::pair<SDOMElement *, SDOMAttribute *> &other)
+ {
+ eastl::pair<SDOMElement *, SDOMAttribute *>::operator=(other);
+ return *this;
+ }
+ operator SDOMElement *() const { return first; }
+ SDOMElement *operator->() const { return first; }
+};
+
+// Some DOM parsing operations are destructive. If you need
+// them to not be destructive, then we need to modify
+// the reader. Specifically parsing lists of floats, due
+// to a bug in strtod, is destructive.
+struct SDOMReader : public IDOMReader
+{
+ SElemPointer m_TopElement;
+ eastl::vector<eastl::pair<SDOMElement *, SDOMAttribute *>> m_ScopeStack;
+ std::shared_ptr<IDOMFactory> m_Factory;
+ SDOMFlags m_Flags;
+ eastl::basic_string<TWCharEASTLConverter::TCharType> m_TempBuffer;
+
+ SDOMReader(SDOMElement &te, std::shared_ptr<qt3dsdm::IStringTable> s,
+ std::shared_ptr<IDOMFactory> inFactory = std::shared_ptr<IDOMFactory>())
+ : IDOMReader(s)
+ , m_TopElement(&te)
+ , m_Factory(inFactory)
+ {
+ }
+
+ SDOMElement *Current() const { return m_TopElement.first; }
+ void SetDOMFlags(SDOMFlags inFlags) override { m_Flags = inFlags; }
+ SDOMFlags GetDOMFlags() const override { return m_Flags; }
+
+ void PushScope() override { m_ScopeStack.push_back(m_TopElement); }
+ void PopScope() override
+ {
+ if (m_ScopeStack.size()) {
+ m_TopElement = m_ScopeStack.back();
+ m_ScopeStack.pop_back();
+ } else
+ m_TopElement = eastl::pair<SDOMElement *, SDOMAttribute *>(NULL, NULL);
+ }
+
+ void *GetScope() override { return m_TopElement.first; }
+
+ void SetScope(void *inScope) override
+ {
+ m_TopElement =
+ eastl::make_pair(reinterpret_cast<SDOMElement *>(inScope), (SDOMAttribute *)NULL);
+ }
+
+ TWideXMLCharPtr GetElementName() const override
+ {
+ return m_StringTable->GetWideStr(GetNarrowElementName());
+ }
+
+ TXMLCharPtr GetNarrowElementName() const override
+ {
+ if (!Current()) {
+ QT3DS_ASSERT(false);
+ return NULL;
+ }
+ return Current()->m_Name;
+ }
+
+ bool UnregisteredAtt(TWideXMLCharPtr name, TWideXMLCharPtr &outValue) override
+ {
+ outValue = L"";
+ SDOMElement *current(Current());
+ if (current) {
+ TXMLCharPtr theValue =
+ current->GetAttributeValue(m_StringTable->GetNarrowStr(name), m_Flags);
+ if (theValue && *theValue) {
+ qt3ds::foundation::ConvertUTF(theValue, 0, m_TempBuffer);
+ outValue = reinterpret_cast<const wchar_t *>(m_TempBuffer.c_str());
+ return true;
+ }
+ } else {
+ QT3DS_ASSERT(false);
+ }
+ return false;
+ }
+
+ bool UnregisteredAtt(TXMLCharPtr name, TXMLCharPtr &outValue) override
+ {
+ outValue = "";
+ SDOMElement *current(Current());
+ if (current) {
+ outValue = current->GetAttributeValue(m_StringTable->GetNarrowStr(name), m_Flags);
+ if (outValue)
+ return true;
+ } else {
+ QT3DS_ASSERT(false);
+ }
+ return false;
+ }
+
+ bool Att(TWideXMLCharPtr name, TWideXMLCharPtr &outValue) override
+ {
+ if (UnregisteredAtt(name, outValue)) {
+ outValue = m_StringTable->RegisterStr(outValue);
+ return true;
+ }
+ return false;
+ }
+ bool Att(TXMLCharPtr name, TXMLCharPtr &outValue) override
+ {
+ if (UnregisteredAtt(name, outValue)) {
+ outValue = m_StringTable->RegisterStr(outValue);
+ return true;
+ }
+ return false;
+ }
+
+ QT3DSU32 CountChildren() override
+ {
+ SDOMElement *elem = Current();
+ if (elem == NULL) {
+ QT3DS_ASSERT(false);
+ return 0;
+ }
+ return elem->GetNumChildren();
+ }
+
+ QT3DSU32 CountChildren(TWideXMLCharPtr childName) override
+ {
+ return CountChildren(m_StringTable->GetNarrowStr(childName));
+ }
+
+ QT3DSU32 CountChildren(TXMLCharPtr childName) override
+ {
+ SDOMElement *elem = Current();
+ if (elem == NULL) {
+ QT3DS_ASSERT(false);
+ return 0;
+ }
+ return elem->GetNumChildren(m_StringTable->GetNarrowStr(childName), m_Flags);
+ }
+
+ eastl::pair<TWideXMLCharPtr, TWideXMLCharPtr>
+ ToWide(const eastl::pair<TXMLCharPtr, TXMLCharPtr> &att)
+ {
+ return eastl::make_pair(m_StringTable->GetWideStr(att.first),
+ m_StringTable->GetWideStr(att.second));
+ }
+ eastl::pair<TWideXMLCharPtr, TWideXMLCharPtr> CurrentAtt()
+ {
+ return ToWide(CurrentAttNarrow());
+ }
+
+ eastl::pair<TXMLCharPtr, TXMLCharPtr> CurrentAttNarrow()
+ {
+ if (m_TopElement.second)
+ return eastl::make_pair(m_TopElement.second->m_Name, m_TopElement.second->m_Value);
+ return eastl::make_pair("", "");
+ }
+ eastl::pair<TXMLCharPtr, TXMLCharPtr> GetNarrowFirstAttribute() override
+ {
+ if (m_TopElement.first == NULL) {
+ QT3DS_ASSERT(false);
+ eastl::make_pair("", "");
+ }
+ m_TopElement.second = m_TopElement.first->m_FirstAttribute;
+ return CurrentAttNarrow();
+ }
+
+ eastl::pair<TWideXMLCharPtr, TWideXMLCharPtr> GetFirstAttribute() override
+ {
+ return ToWide(GetNarrowFirstAttribute());
+ }
+ eastl::pair<TXMLCharPtr, TXMLCharPtr> GetNarrowNextAttribute() override
+ {
+ if (m_TopElement.second)
+ m_TopElement.second = m_TopElement.second->m_NextAttribute;
+ return CurrentAttNarrow();
+ }
+
+ eastl::pair<TWideXMLCharPtr, TWideXMLCharPtr> GetNextAttribute() override
+ {
+ return ToWide(GetNarrowNextAttribute());
+ }
+
+ bool MoveToFirstChild() override
+ {
+ SDOMElement *elem = Current();
+ if (elem == NULL) {
+ QT3DS_ASSERT(false);
+ return false;
+ }
+ if (elem->m_FirstChild) {
+ m_TopElement = elem->m_FirstChild;
+ return true;
+ }
+ return false;
+ }
+ bool MoveToFirstChild(TXMLCharPtr childName) override
+ {
+ SDOMElement *elem = Current();
+ if (elem == NULL) {
+ QT3DS_ASSERT(false);
+ return false;
+ }
+ SDOMElement *child = elem->FindChildByName(m_StringTable->RegisterStr(childName), m_Flags);
+ if (child != NULL) {
+ m_TopElement = child;
+ return true;
+ }
+ return false;
+ }
+
+ bool MoveToFirstChild(TWideXMLCharPtr childName) override
+ {
+ return MoveToFirstChild(m_StringTable->GetNarrowStr(childName));
+ }
+
+ bool MoveToNextSibling() override
+ {
+ SDOMElement *elem = Current();
+ if (elem == NULL) {
+ QT3DS_ASSERT(false);
+ return false;
+ }
+ if (elem->m_NextSibling) {
+ m_TopElement = elem->m_NextSibling;
+ return true;
+ }
+ return false;
+ }
+ bool MoveToNextSibling(TXMLCharPtr childName) override
+ {
+ SDOMElement *elem = Current();
+ if (elem == NULL) {
+ QT3DS_ASSERT(false);
+ return false;
+ }
+ SDOMElement *nextSibling =
+ elem->FindNextSiblingByName(m_StringTable->RegisterStr(childName), m_Flags);
+ if (nextSibling) {
+ m_TopElement = nextSibling;
+ return true;
+ }
+ return false;
+ }
+ bool MoveToNextSibling(TWideXMLCharPtr childName) override
+ {
+ return MoveToNextSibling(m_StringTable->GetNarrowStr(childName));
+ }
+ // Leave element means go to its parent.
+ void Leave() override
+ {
+ if (m_TopElement)
+ m_TopElement = m_TopElement->m_Parent;
+
+ QT3DS_ASSERT(m_TopElement);
+ }
+ bool Value(TXMLCharPtr &outValue) override
+ {
+ SDOMElement *current(Current());
+ if (!current) {
+ QT3DS_ASSERT(false);
+ return false;
+ }
+ outValue = current->m_Value;
+ return true;
+ }
+
+ bool Value(TWideXMLCharPtr &outValue) override
+ {
+ outValue = L"";
+ TXMLCharPtr theValue;
+ if (Value(theValue)) {
+ qt3ds::foundation::ConvertUTF(theValue, 0, m_TempBuffer);
+ outValue = reinterpret_cast<const wchar_t *>(m_TempBuffer.c_str());
+ return true;
+ }
+ return false;
+ }
+
+ SDOMElement *GetTopElement() override
+ {
+ SDOMElement *current(Current());
+ while (current && current->m_Parent)
+ current = current->m_Parent;
+ return current;
+ }
+
+ virtual std::shared_ptr<IDOMFactory> GetFactory() { return m_Factory; }
+};
+
+struct SDOMWriter : public IDOMWriter, public SDOMReader
+{
+ std::shared_ptr<IDOMFactory> m_FactoryPtr;
+ IDOMFactory &m_Factory;
+
+ SDOMWriter(std::shared_ptr<IDOMFactory> inDOMFactory,
+ std::shared_ptr<qt3dsdm::IStringTable> inStringTable, SDOMElement &inTopElem)
+ : m_FactoryPtr(inDOMFactory)
+ , m_Factory(*inDOMFactory)
+ , SDOMReader(inTopElem, inStringTable)
+ {
+ }
+ void SetDOMFlags(SDOMFlags inFlags) override { m_Flags = inFlags; }
+ SDOMFlags GetDOMFlags() const override { return m_Flags; }
+
+ void Begin(TXMLCharPtr inElemName) override
+ {
+ if (!m_TopElement) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ SDOMElement *current(Current());
+ SDOMElement *newElement(m_Factory.NextElement(inElemName));
+ current->AddChild(*newElement);
+ m_TopElement = newElement;
+ }
+
+ void Begin(TWideXMLCharPtr inElemName) override
+ {
+ Begin(m_FactoryPtr->GetStringTable()->GetNarrowStr(inElemName));
+ }
+
+ void Att(TXMLCharPtr name, TXMLCharPtr value) override
+ {
+ if (!m_TopElement) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ m_TopElement->SetAttributeValue(name, value, m_Factory, m_Flags);
+ }
+ // Attributes. They may be sorted just before write
+ void Att(TWideXMLCharPtr name, TWideXMLCharPtr value) override
+ {
+ if (!m_TopElement) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ m_TopElement->SetAttributeValue(name, value, m_Factory, m_Flags);
+ }
+
+ void Value(TWideXMLCharPtr value) override
+ {
+ if (!m_TopElement) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ if (value == NULL)
+ value = L"";
+ size_t len = wcslen(value);
+ m_Factory.AppendStrBuf(value, (QT3DSU32)len);
+ m_TopElement->m_Value = m_Factory.FinalizeStrBuf();
+ }
+ void Value(TXMLCharPtr value) override
+ {
+ if (!m_TopElement) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ if (value == NULL)
+ value = "";
+ size_t len = strlen(value);
+ m_Factory.AppendStrBuf(value, (QT3DSU32)len);
+ m_TopElement->m_Value = m_Factory.FinalizeStrBuf();
+ }
+
+ void End() override
+ {
+ if (!m_TopElement) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ Leave();
+ }
+ void RemoveCurrent() override
+ {
+ SDOMElement *current(Current());
+ if (!current) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ if (current->m_Parent) {
+ m_TopElement = current->m_Parent;
+ m_TopElement->RemoveChild(*current);
+ }
+ }
+ void ReplaceCurrent(SDOMElement &inElement) override
+ {
+ SDOMElement *current(Current());
+ if (!current) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ if (current->m_Parent) {
+ current->m_Parent->ReplaceChild(*current, inElement);
+ m_TopElement = &inElement;
+ } else {
+ m_TopElement = &inElement;
+ inElement.m_Parent = NULL;
+ inElement.m_NextSibling = NULL;
+ }
+ }
+ void AppendChildren(SDOMElement &inElement) override
+ {
+ SDOMElement *current(Current());
+ if (!current) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ SDOMElement *theChild = inElement.m_FirstChild;
+ inElement.m_FirstChild = inElement.m_LastChild = NULL;
+ while (theChild) {
+ SDOMElement *theCurrentChild = theChild;
+ theChild = theChild->m_NextSibling;
+
+ theCurrentChild->m_Parent = NULL;
+ theCurrentChild->m_NextSibling = NULL;
+ current->AddChild(*theCurrentChild);
+ }
+ }
+ void RemoveAttribute(TXMLCharPtr inItem) override
+ {
+ SDOMElement *current(Current());
+ if (!current) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+ current->RemoveAttribute(m_StringTable->RegisterStr(inItem), m_Flags);
+ }
+ void RemoveAttribute(TWideXMLCharPtr inItem) override
+ {
+ RemoveAttribute(m_StringTable->GetNarrowStr(inItem));
+ }
+
+ void MoveBefore(TXMLCharPtr inItem, TXMLCharPtr inSibling) override
+ {
+ SDOMElement *current(Current());
+ if (!current) {
+ QT3DS_ASSERT(false);
+ return;
+ }
+
+ SDOMElement *theItem =
+ current->FindChildByName(m_StringTable->RegisterStr(inItem), m_Flags);
+ SDOMElement *theSibling =
+ current->FindChildByName(m_StringTable->RegisterStr(inSibling), m_Flags);
+ QT3DS_ASSERT(theItem && theSibling);
+ if (theItem && theSibling) {
+ current->RemoveChild(*theItem);
+ current->InsertChildBefore(*theItem, *theSibling);
+ }
+ }
+
+ void MoveBefore(TWideXMLCharPtr inItem, TWideXMLCharPtr inSibling) override
+ {
+ MoveBefore(m_StringTable->GetNarrowStr(inItem), m_StringTable->GetNarrowStr(inSibling));
+ }
+
+ // If current has no parent, then we are at the top
+ // of the tree and we should return 0. Or if there is no
+ // current.
+ // If there is one parent, we should return 1.
+ QT3DSU32 GetTabs() override
+ {
+ QT3DSU32 retval = 0;
+ SDOMElement *current(Current());
+ do {
+ if (current)
+ current = current->m_Parent;
+ if (current)
+ ++retval;
+ } while (current);
+ return retval;
+ }
+
+ SDOMElement *GetTopElement() override { return SDOMReader::GetTopElement(); }
+
+ std::shared_ptr<IDOMFactory> GetFactory() override { return m_FactoryPtr; }
+};
+
+struct SimpleXmlWriter
+{
+ IOutStream &m_Stream;
+ eastl::vector<eastl::pair<TXMLCharPtr, bool>> m_OpenElements;
+ bool m_ElementOpen;
+ wchar_t m_PrintBuf[256];
+ QT3DSU32 m_Tabs;
+ eastl::basic_string<char8_t> m_ConvertBuf;
+ eastl::basic_string<TWCharEASTLConverter::TCharType> m_WideBuffer;
+
+ SimpleXmlWriter(IOutStream &stream, QT3DSU32 inTabs = 0)
+ : m_Stream(stream)
+ , m_ElementOpen(false)
+ , m_Tabs(inTabs)
+ {
+ }
+ void Write(TWideXMLCharPtr data)
+ {
+ if (!IsTrivial(data)) {
+ qt3ds::foundation::ConvertUTF(
+ reinterpret_cast<const TWCharEASTLConverter::TCharType *>(data), 0,
+ m_ConvertBuf);
+ m_Stream.Write(m_ConvertBuf.begin(), m_ConvertBuf.size());
+ }
+ }
+ void Write(const char8_t *data)
+ {
+ if (!IsTrivial(data)) {
+ m_Stream.Write(data, (QT3DSU32)strlen(data));
+ }
+ }
+ void BeginWideWrite() { m_WideBuffer.clear(); }
+ void WriteTemp(wchar_t data) { m_WideBuffer.append(1, data); }
+ void WriteTemp(const wchar_t *data)
+ {
+ m_WideBuffer.append(reinterpret_cast<const TWCharEASTLConverter::TCharType *>(data));
+ }
+ void EndWideWrite() { Write(reinterpret_cast<const wchar_t *>(m_WideBuffer.c_str())); }
+ void Write(char8_t data) { m_Stream.Write(data); }
+ void Tabs()
+ {
+ QT3DSXML_FOREACH(idx, (m_OpenElements.size() + m_Tabs))
+ Write('\t');
+ }
+ void Close(bool newline)
+ {
+ if (m_ElementOpen) {
+ Write(L" >");
+ if (newline)
+ Write('\n');
+ }
+ m_ElementOpen = false;
+ }
+ void Begin(TXMLCharPtr name)
+ {
+ Close(true);
+ Tabs();
+ Write('<');
+ Write(name);
+ m_OpenElements.push_back(eastl::pair<TXMLCharPtr, bool>(name, false));
+ m_ElementOpen = true;
+ }
+ TWideXMLCharPtr ToStr(char8_t val)
+ {
+ m_PrintBuf[0] = val;
+ m_PrintBuf[1] = 0;
+ return m_PrintBuf;
+ }
+ template <typename TDataType>
+ TWideXMLCharPtr ToStr(TDataType val)
+ {
+ WStrOps<TDataType>().ToStr(val, NVDataRef<wchar_t>(m_PrintBuf, 256));
+ return m_PrintBuf;
+ }
+ void Att(TXMLCharPtr name, TXMLCharPtr value)
+ {
+ QT3DS_ASSERT(m_ElementOpen);
+ Write(' ');
+ Write(name);
+ Write("=\"");
+ QString str = QString::fromUtf8(nonNull(value)).toHtmlEscaped();
+ Write(str.toUtf8().constData());
+ Write("\"");
+ }
+ template <typename TData>
+ void Att(TXMLCharPtr name, TData value)
+ {
+ Att(name, ToStr(value));
+ }
+
+ void Value(TXMLCharPtr value)
+ {
+ if (!IsTrivial(value)) {
+ Close(false);
+ QString str = QString::fromUtf8(nonNull(value)).toHtmlEscaped();
+ Write(str.toUtf8().constData());
+ m_OpenElements.back().second = true;
+ }
+ }
+ void ChildValue(TXMLCharPtr name, TXMLCharPtr value)
+ {
+ Begin(name);
+ Value(value);
+ End();
+ }
+ void End(bool newlineAfterClose = true)
+ {
+ QT3DS_ASSERT(m_OpenElements.size());
+ eastl::pair<TXMLCharPtr, bool> topElem = m_OpenElements.back();
+ m_OpenElements.pop_back();
+ if (m_ElementOpen)
+ Write(" />");
+ else {
+ if (topElem.second == false)
+ Tabs();
+ Write("</");
+ Write(topElem.first);
+ Write(">");
+ }
+ m_ElementOpen = false;
+ if (newlineAfterClose == true)
+ Write('\n');
+ }
+};
+
+struct DOMParser
+{
+ typedef eastl::basic_string<TWCharEASTLConverter::TCharType> TStrType;
+ IDOMFactory &m_Factory;
+ SDOMElement *m_TopElement;
+ SDOMElement *m_FirstElement;
+
+ DOMParser(IDOMFactory &factory)
+ : m_Factory(factory)
+ , m_FirstElement(NULL)
+ {
+ }
+
+ template <QT3DSU32 THeaderLen>
+ struct SHeaderInStream : public IInStream
+ {
+ QT3DSU8 m_Header[THeaderLen];
+ QT3DSU32 m_BytesRead;
+ IInStream &m_InStream;
+ SHeaderInStream(IInStream &inStream)
+ : m_InStream(inStream)
+ , m_BytesRead(0)
+ {
+ }
+ bool readHeader()
+ {
+ QT3DSU32 amountRead = m_InStream.Read(NVDataRef<QT3DSU8>(m_Header, THeaderLen));
+ return amountRead == THeaderLen;
+ }
+ QT3DSU32 Read(NVDataRef<QT3DSU8> data) override
+ {
+ if (data.size() == 0)
+ return 0;
+ QT3DSU8 *writePtr(data.begin());
+ QT3DSU32 amountToRead(data.size());
+ QT3DSU32 amountRead = 0;
+ if (m_BytesRead < THeaderLen) {
+ QT3DSU32 headerLeft = qMin(THeaderLen - m_BytesRead, amountToRead);
+ memCopy(writePtr, m_Header + m_BytesRead, headerLeft);
+ writePtr += headerLeft;
+ amountToRead -= headerLeft;
+ amountRead += headerLeft;
+ }
+ if (amountToRead)
+ amountRead += m_InStream.Read(NVDataRef<QT3DSU8>(writePtr, amountToRead));
+ m_BytesRead += amountRead;
+ return amountRead;
+ }
+ };
+
+ static SDOMElement *ParseXMLFile(IDOMFactory &factory, IInStream &inStream,
+ CXmlErrorHandler *handler = NULL)
+ {
+ QXmlStreamReader sreader;
+
+ DOMParser domParser(factory);
+ QT3DSU8 dataBuf[2048];
+ QT3DSU32 amountRead = 0;
+ do {
+ amountRead = inStream.Read(toDataRef(dataBuf, 2048));
+ if (amountRead) {
+ QByteArray tmp = QByteArray::fromRawData((char*)dataBuf,amountRead);
+ sreader.addData(tmp);
+ }
+ } while (amountRead > 0);
+
+ while (!sreader.atEnd()) {
+ QXmlStreamReader::TokenType token = sreader.readNext();
+
+ if (token == QXmlStreamReader::StartElement) {
+ domParser.m_Factory.IgnoreStrBuf();
+ SDOMElement *newElem = domParser.m_Factory.NextElement(
+ (TXMLCharPtr)sreader.name().toUtf8().data());
+ if (domParser.m_FirstElement == NULL) {
+ domParser.m_FirstElement = newElem;
+ domParser.m_TopElement = newElem;
+ } else {
+ domParser.m_TopElement->AddChild(*newElem);
+ domParser.m_TopElement = newElem;
+ }
+ const QXmlStreamAttributes& attributes = sreader.attributes();
+ for (auto attrib : attributes) {
+ SDOMAttribute *att = domParser.m_Factory.NextAttribute(
+ (TXMLCharPtr)attrib.name().toUtf8().data(),
+ (TXMLCharPtr)attrib.value().toUtf8().data());
+ newElem->AddAttribute(*att);
+ }
+ } else if (token == QXmlStreamReader::Characters) {
+ QByteArray text = sreader.text().toUtf8();
+ domParser.m_Factory.AppendStrBuf(text.data(),text.length());
+ } else if (token == QXmlStreamReader::EndElement) {
+ domParser.m_TopElement->m_Value = domParser.m_Factory.FinalizeStrBuf();
+ domParser.m_TopElement = domParser.m_TopElement->m_Parent;
+ }
+ if (sreader.hasError()) {
+ if (handler) {
+ handler->OnXmlError(sreader.errorString(), sreader.lineNumber(),
+ sreader.columnNumber());
+ } else {
+ qWarning() << "XML parse error:" << sreader.errorString()
+ << "line:" << sreader.lineNumber()
+ << "column:" << sreader.columnNumber();
+ }
+ return nullptr;
+ }
+ }
+ return domParser.m_FirstElement;
+ }
+};
+
+class SimpleDomFactory : public IDOMFactory
+{
+ typedef eastl::basic_string<char8_t> TNarrowStr;
+ Pool<SDOMElement> m_ElementPool;
+ Pool<SDOMAttribute> m_AttributePool;
+ eastl::vector<char8_t *> m_BigStrings;
+ eastl::vector<char8_t> m_StringBuilder;
+ TNarrowStr m_ConvertBuffer;
+ std::shared_ptr<qt3dsdm::IStringTable> m_StringTable;
+
+public:
+ SimpleDomFactory(std::shared_ptr<qt3dsdm::IStringTable> strt)
+ : m_StringTable(strt)
+ {
+ }
+ ~SimpleDomFactory()
+ {
+ QT3DSXML_FOREACH(idx, m_BigStrings.size())
+ free(m_BigStrings[idx]);
+ }
+
+ TWideXMLCharPtr RegisterStr(TWideXMLCharPtr str)
+ {
+ if (str == NULL || *str == 0)
+ return L"";
+ return m_StringTable->RegisterStr(str);
+ }
+
+ TXMLCharPtr RegisterStr(TXMLCharPtr str)
+ {
+ if (str == NULL || *str == 0)
+ return "";
+ return m_StringTable->RegisterStr(str);
+ }
+
+ void Release() override { delete this; }
+ void AppendStrBuf(TXMLCharPtr str, QT3DSU32 len) override
+ {
+ if (len && *str) {
+ QT3DSU32 offset = m_StringBuilder.size();
+ m_StringBuilder.resize(offset + len);
+ memCopy(&m_StringBuilder[0] + offset, str, len * sizeof(char8_t));
+ }
+ }
+ // Str does not need to be null terminated.
+ void AppendStrBuf(TWideXMLCharPtr str, QT3DSU32 len) override
+ {
+ if (len && *str) {
+ const TWCharEASTLConverter::TCharType *bufPtr =
+ reinterpret_cast<const TWCharEASTLConverter::TCharType *>(str);
+ qt3ds::foundation::ConvertUTF(bufPtr, len, m_ConvertBuffer);
+ AppendStrBuf(m_ConvertBuffer.data(), m_ConvertBuffer.size());
+ }
+ }
+
+ // Null terminate what is there and return the buffer.
+ // This pointer needs to be persistent.
+ TXMLCharPtr FinalizeStrBuf() override
+ {
+ if (m_StringBuilder.size() == 0)
+ return "";
+ m_StringBuilder.push_back(0);
+ QT3DSU32 len = m_StringBuilder.size();
+ QT3DSU32 numBytes = len * sizeof(char8_t);
+ char8_t *newMem = (char8_t *)malloc(numBytes);
+ memCopy(newMem, &m_StringBuilder[0], numBytes);
+ m_BigStrings.push_back(newMem);
+ m_StringBuilder.clear();
+ return newMem;
+ }
+ void IgnoreStrBuf() override { m_StringBuilder.clear(); }
+
+ SDOMAttribute *NextAttribute(TXMLCharPtr name, TXMLCharPtr val) override
+ {
+ TXMLCharPtr n(m_StringTable->GetNarrowStr(name));
+ TXMLCharPtr v(RegisterValue(val));
+ return m_AttributePool.construct(n, v, __FILE__, __LINE__);
+ }
+
+ SDOMAttribute *NextAttribute(TWideXMLCharPtr name, TWideXMLCharPtr val) override
+ {
+ TXMLCharPtr n(m_StringTable->GetNarrowStr(name));
+ TXMLCharPtr v(RegisterValue(val));
+ return m_AttributePool.construct(n, v, __FILE__, __LINE__);
+ }
+
+ SDOMElement *NextElement(TXMLCharPtr name) override
+ {
+ IgnoreStrBuf();
+ TXMLCharPtr n(m_StringTable->GetNarrowStr(name));
+ return m_ElementPool.construct(n, __FILE__, __LINE__);
+ }
+ SDOMElement *NextElement(TWideXMLCharPtr name) override
+ {
+ IgnoreStrBuf();
+ TXMLCharPtr n(m_StringTable->GetNarrowStr(name));
+ return m_ElementPool.construct(n, __FILE__, __LINE__);
+ }
+
+ std::shared_ptr<qt3dsdm::IStringTable> GetStringTable() override { return m_StringTable; }
+};
+}
+
+bool IDOMReader::Value(DataModelDataType::Value type, SValue &outValue)
+{
+ TXMLCharPtr value;
+ if (Value(value)) {
+ WCharTReader reader(const_cast<char8_t *>(value), m_TempBuf, *GetStringTable());
+ outValue = WStrOps<SValue>().BufTo(type, reader);
+ return true;
+ }
+ return false;
+}
+
+std::shared_ptr<IDOMReader>
+IDOMReader::CreateDOMReader(SDOMElement &inRootElement,
+ std::shared_ptr<qt3dsdm::IStringTable> inStringTable,
+ std::shared_ptr<IDOMFactory> inFactory)
+{
+ return std::make_shared<SDOMReader>(std::ref(inRootElement), std::ref(inStringTable),
+ inFactory);
+}
+
+eastl::pair<std::shared_ptr<IDOMWriter>, std::shared_ptr<IDOMReader>>
+IDOMWriter::CreateDOMWriter(std::shared_ptr<IDOMFactory> inFactory, SDOMElement &inRootElement,
+ std::shared_ptr<qt3dsdm::IStringTable> inStringTable)
+{
+ std::shared_ptr<SDOMWriter> writer(std::make_shared<SDOMWriter>(
+ inFactory, std::ref(inStringTable), std::ref(inRootElement)));
+ return eastl::make_pair(writer, writer);
+}
+
+TXMLCharPtr IDOMFactory::RegisterValue(TWideXMLCharPtr inValue)
+{
+ if (IsTrivial(inValue))
+ return "";
+ IgnoreStrBuf();
+ AppendStrBuf(inValue, (QT3DSU32)wcslen(inValue));
+ return FinalizeStrBuf();
+}
+
+TXMLCharPtr IDOMFactory::RegisterValue(TXMLCharPtr inValue)
+{
+ if (IsTrivial(inValue))
+ return "";
+ IgnoreStrBuf();
+ AppendStrBuf(inValue, (QT3DSU32)strlen(inValue));
+ return FinalizeStrBuf();
+}
+
+std::shared_ptr<IDOMFactory>
+IDOMFactory::CreateDOMFactory(std::shared_ptr<qt3dsdm::IStringTable> inStrTable)
+{
+ return std::make_shared<SimpleDomFactory>(std::ref(inStrTable));
+}
+
+void CDOMSerializer::WriteXMLHeader(IOutStream &inStream)
+{
+ SimpleXmlWriter writer(inStream);
+ writer.Write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
+}
+
+// Lexigraphically sort the attributes.
+struct SAttributeComparator
+{
+ bool operator()(const SDOMAttribute *lhs, const SDOMAttribute *rhs)
+ {
+ return strcmp(lhs->m_Name, rhs->m_Name) < 0;
+ }
+};
+
+// Write an element with attributes sorted by name so a file diff is effective.
+void WriteElement(SDOMElement &inElement, SimpleXmlWriter &inWriter,
+ std::vector<SDOMAttribute *> &inAttSorter)
+{
+ inAttSorter.clear();
+ for (SDOMAttribute *att = inElement.m_FirstAttribute; att; att = att->m_NextAttribute)
+ inAttSorter.push_back(att);
+ // We decided that we don't want attribute sorting; the code that adds attributes needs
+ // to be consistent.
+ // std::sort( inAttSorter.begin(), inAttSorter.end(), SAttributeComparator() );
+ // This element doesn't add anything to the system in this case.
+ if (inElement.m_FirstAttribute == NULL && inElement.m_FirstChild == NULL
+ && IsTrivial(inElement.m_Value))
+ return;
+
+ inWriter.Begin(inElement.m_Name);
+
+ const char8_t *theLastAttName = 0;
+ for (size_t idx = 0, end = inAttSorter.size(); idx < end; ++idx) {
+ SDOMAttribute *theAtt(inAttSorter[idx]);
+ if (theAtt->m_Name != theLastAttName)
+ inWriter.Att(theAtt->m_Name, theAtt->m_Value);
+ else {
+ QT3DS_ASSERT(false);
+ }
+ theLastAttName = theAtt->m_Name;
+ }
+ // Elements can either have children or values but not both at this point.
+ if (inElement.m_FirstChild) {
+ for (SDOMElement *theChild = inElement.m_FirstChild; theChild;
+ theChild = theChild->m_NextSibling)
+ WriteElement(*theChild, inWriter, inAttSorter);
+ inWriter.End();
+ } else {
+ if (!IsTrivial(inElement.m_Value))
+ inWriter.Value(inElement.m_Value);
+
+ inWriter.End();
+ }
+}
+
+void CDOMSerializer::Write(SDOMElement &inElement, IOutStream &inStream, QT3DSU32 inTabs)
+{
+ // TODO: QXmlStreamWriter here?
+ std::vector<SDOMAttribute *> theAttributes;
+ SimpleXmlWriter writer(inStream, inTabs);
+ std::vector<SDOMAttribute *> theAttSorter;
+ WriteElement(inElement, writer, theAttSorter);
+}
+
+SDOMElement *CDOMSerializer::Read(IDOMFactory &inFactory, IInStream &inStream,
+ CXmlErrorHandler *inErrorHandler)
+{
+ return DOMParser::ParseXMLFile(inFactory, inStream, inErrorHandler);
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMXML.h b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMXML.h
new file mode 100644
index 00000000..5fe722f9
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/Qt3DSDMXML.h
@@ -0,0 +1,506 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DS_IMPORT_XML_H
+#define QT3DS_IMPORT_XML_H
+#include "foundation/Qt3DS.h"
+#include "foundation/Qt3DSMemoryBuffer.h"
+#include "Qt3DSDMDataTypes.h"
+#include <string>
+#include "Qt3DSDMWStrOps.h" //Conversion between string and various datatypes.
+#include "foundation/Qt3DSFlags.h"
+#include "EASTL/algorithm.h"
+#include "foundation/Qt3DSSimpleTypes.h"
+#include "foundation/IOStreams.h"
+#include "Qt3DSDMValue.h"
+#include <memory>
+
+namespace qt3dsdm {
+using qt3ds::foundation::MemoryBuffer;
+using qt3ds::foundation::RawAllocator;
+class IStringTable;
+
+class IDOMFactory;
+struct SDOMAttribute;
+struct SDOMElement;
+
+typedef const char8_t *TXMLCharPtr;
+typedef const wchar_t *TWideXMLCharPtr;
+
+typedef TCharStr TXMLWideStr;
+typedef eastl::basic_string<char8_t> TXMLStr;
+
+using qt3ds::QT3DSU32;
+using qt3ds::NVFlags;
+using qt3ds::foundation::NVDataRef;
+using qt3ds::foundation::NVConstDataRef;
+using qt3ds::foundation::IOutStream;
+
+class IDOMFactory
+{
+protected:
+ virtual ~IDOMFactory() {}
+public:
+ friend class std::shared_ptr<IDOMFactory>;
+
+ virtual void Release() = 0;
+ // Str does not need to be null terminated.
+ virtual void AppendStrBuf(TXMLCharPtr str, QT3DSU32 len) = 0;
+ virtual void AppendStrBuf(TWideXMLCharPtr str, QT3DSU32 len) = 0;
+ // Null terminate what is there and return the buffer.
+ // This pointer needs to be persistent.
+ virtual TXMLCharPtr FinalizeStrBuf() = 0;
+ virtual void IgnoreStrBuf() = 0;
+
+ virtual std::shared_ptr<IStringTable> GetStringTable() = 0;
+
+ virtual SDOMAttribute *NextAttribute(TWideXMLCharPtr name, TWideXMLCharPtr val) = 0;
+ virtual SDOMElement *NextElement(TWideXMLCharPtr name) = 0;
+
+ virtual SDOMAttribute *NextAttribute(TXMLCharPtr name, TXMLCharPtr val) = 0;
+ virtual SDOMElement *NextElement(TXMLCharPtr name) = 0;
+
+ TXMLCharPtr RegisterValue(TXMLCharPtr inValue);
+ TXMLCharPtr RegisterValue(TWideXMLCharPtr inValue);
+
+ static std::shared_ptr<IDOMFactory>
+ CreateDOMFactory(std::shared_ptr<IStringTable> inStrTable);
+};
+
+struct DOMFlagValues
+{
+ enum Enum {
+ CaselessElementNames = 1 << 0,
+ CaselessAttributeNames = 1 << 1,
+ };
+};
+
+struct SDOMFlags : NVFlags<DOMFlagValues::Enum, int>
+{
+ SDOMFlags()
+ : NVFlags<DOMFlagValues::Enum, int>(DOMFlagValues::CaselessElementNames
+ | DOMFlagValues::CaselessAttributeNames)
+ {
+ }
+ bool CaselessAttributes() const { return *this & DOMFlagValues::CaselessAttributeNames; }
+ bool CaselessElements() const { return *this & DOMFlagValues::CaselessElementNames; }
+};
+
+class IDOMReader
+{
+protected:
+ virtual ~IDOMReader() {}
+public:
+ friend class std::shared_ptr<IDOMReader>;
+
+ // Stack object to save the reader's state.
+ struct Scope
+ {
+ IDOMReader &m_Reader;
+ Scope(IDOMReader &reader)
+ : m_Reader(reader)
+ {
+ m_Reader.PushScope();
+ }
+ ~Scope() { m_Reader.PopScope(); }
+ };
+
+ // Parse buffer
+ MemoryBuffer<RawAllocator> m_TempBuf;
+ std::shared_ptr<IStringTable> m_StringTable;
+
+ IDOMReader(std::shared_ptr<IStringTable> inStringTable)
+ : m_StringTable(inStringTable)
+ {
+ }
+
+ std::shared_ptr<IStringTable> GetStringTable() { return m_StringTable; }
+
+ // DOM reader flags change the nature of the DOM reader.
+ // see DOMFlagValues
+ // Defaults to caseless comparisons for attributes and for
+ // element names.
+ virtual void SetDOMFlags(SDOMFlags inFlags) = 0;
+ virtual SDOMFlags GetDOMFlags() const = 0;
+
+ // Pushing scope saves your state so no matter where you are when
+ // you next pop scope, you come back to the same state.
+ virtual void PushScope() = 0;
+ virtual void PopScope() = 0;
+
+ // Sometimes pushing and popping scope isn't enough and you need
+ // somewhat random access to scope.
+ // This scope does not remember the current attribute.
+ virtual void *GetScope() = 0;
+ virtual void SetScope(void *inScope) = 0;
+ // Return an attribute whose value is *not* registered with the string table.
+ // You can't hold onto this value for any length of time, but when you need to
+ // immediately convert to a different value this is the most efficient way.
+ virtual bool UnregisteredAtt(TWideXMLCharPtr name, TWideXMLCharPtr &outValue) = 0;
+ virtual bool UnregisteredAtt(TXMLCharPtr name, TXMLCharPtr &outValue) = 0;
+ // Return an attribute whose value *is* registered with the string table.
+ virtual bool Att(TWideXMLCharPtr name, TWideXMLCharPtr &outValue) = 0;
+ virtual bool Att(TXMLCharPtr name, TXMLCharPtr &outValue) = 0;
+ virtual eastl::pair<TWideXMLCharPtr, TWideXMLCharPtr> GetFirstAttribute() = 0;
+ virtual eastl::pair<TWideXMLCharPtr, TWideXMLCharPtr> GetNextAttribute() = 0;
+ virtual eastl::pair<TXMLCharPtr, TXMLCharPtr> GetNarrowFirstAttribute() = 0;
+ virtual eastl::pair<TXMLCharPtr, TXMLCharPtr> GetNarrowNextAttribute() = 0;
+ virtual QT3DSU32 CountChildren() = 0;
+ virtual QT3DSU32 CountChildren(TWideXMLCharPtr childName) = 0;
+ virtual QT3DSU32 CountChildren(TXMLCharPtr childName) = 0;
+ virtual bool MoveToFirstChild(TWideXMLCharPtr childName) = 0;
+ virtual bool MoveToFirstChild(TXMLCharPtr childName) = 0;
+ virtual bool MoveToFirstChild() = 0;
+ virtual bool MoveToNextSibling(TWideXMLCharPtr siblingName) = 0;
+ virtual bool MoveToNextSibling(TXMLCharPtr siblingName) = 0;
+ virtual bool MoveToNextSibling() = 0;
+ // Leave element means go to its parent.
+ virtual void Leave() = 0;
+ virtual TWideXMLCharPtr GetElementName() const = 0;
+ virtual TXMLCharPtr GetNarrowElementName() const = 0;
+
+ // Value is the concatentated text node values inside the element
+ virtual bool Value(TWideXMLCharPtr &outValue) = 0;
+ virtual bool Value(TXMLCharPtr &outValue) = 0;
+
+ // Get the element this reader was created with
+ virtual SDOMElement *GetTopElement() = 0;
+
+ bool Att(TWideXMLCharPtr name, TXMLWideStr &outValue)
+ {
+ TWideXMLCharPtr temp;
+ if (UnregisteredAtt(name, temp)) {
+ outValue.assign(temp);
+ return true;
+ }
+ return false;
+ }
+
+ bool Att(TXMLCharPtr name, TXMLStr &outValue)
+ {
+ TXMLCharPtr temp;
+ if (UnregisteredAtt(name, temp)) {
+ outValue.assign(temp);
+ return true;
+ }
+ return false;
+ }
+
+ // Helpers to help make the parsing a bit easier.
+ template <typename TDataType>
+ bool Att(TWideXMLCharPtr name, TDataType &outValue)
+ {
+ TWideXMLCharPtr temp;
+ if (UnregisteredAtt(name, temp)) {
+ WStrOps<TDataType>().StrTo(temp, outValue);
+ return true;
+ } else {
+ return false;
+ }
+ }
+ template <typename TDataType>
+ bool Att(TXMLCharPtr name, TDataType &outValue)
+ {
+ TXMLCharPtr temp;
+ if (UnregisteredAtt(name, temp)) {
+ WStrOps<TDataType>().StrTo(temp, outValue);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ bool ChildValue(TXMLCharPtr name, TXMLCharPtr &value)
+ {
+ if (MoveToFirstChild(name)) {
+ Value(value);
+ Leave();
+ return true;
+ }
+ return false;
+ }
+
+ bool ChildValue(TWideXMLCharPtr name, TWideXMLCharPtr &value)
+ {
+ if (MoveToFirstChild(name)) {
+ Value(value);
+ Leave();
+ return true;
+ }
+ return false;
+ }
+
+ bool RegisteredChildValue(TWideXMLCharPtr name, TWideXMLCharPtr &value)
+ {
+ if (MoveToFirstChild(name)) {
+ RegisteredValue(value);
+ Leave();
+ return true;
+ }
+ return false;
+ }
+ bool RegisteredChildValue(TXMLCharPtr name, TXMLCharPtr &value)
+ {
+ if (MoveToFirstChild(name)) {
+ RegisteredValue(value);
+ Leave();
+ return true;
+ }
+ return false;
+ }
+ bool RegisteredValue(TWideXMLCharPtr &outValue)
+ {
+ bool retval = Value(outValue);
+ if (retval)
+ outValue = m_StringTable->RegisterStr(outValue);
+ return retval;
+ }
+ bool RegisteredValue(TXMLCharPtr &outValue)
+ {
+ bool retval = Value(outValue);
+ if (retval)
+ outValue = m_StringTable->RegisterStr(outValue);
+ return retval;
+ }
+ bool Value(DataModelDataType::Value type, SValue &outValue);
+
+ template <typename TDataType>
+ bool Value(TDataType &outValue)
+ {
+ TXMLCharPtr value;
+ if (Value(value)) {
+ WStrOps<TDataType>().StrTo(value, outValue);
+ return true;
+ }
+ return false;
+ }
+
+ // Functions below implemented in WStrOpsImpl
+ // to avoid circular dependencies
+ // Returns the number of items read
+ // Destructive parsing
+ template <typename TDataType>
+ bool ValueList(NVDataRef<TDataType> data);
+
+ // Destructive operation because we can't trust
+ // strtod to do the right thing. On windows, for long strings,
+ // it calls strlen every operation thus leading to basically N^2
+ // behavior
+ template <typename TDataType>
+ NVConstDataRef<TDataType> ChildValueList(TWideXMLCharPtr listName);
+
+ template <typename TDataType>
+ NVConstDataRef<TDataType> ChildValueList(TXMLCharPtr listName);
+
+ template <typename TSerializer>
+ void Serialize(const wchar_t *elemName, TSerializer &serializer)
+ {
+ IDOMReader::Scope __theScope(*this);
+ if (MoveToFirstChild(elemName)) {
+ serializer.Serialize(*this);
+ }
+ }
+ // Optionally hold on to the factory to keep our elements in memory as long as we are.
+ static std::shared_ptr<IDOMReader>
+ CreateDOMReader(SDOMElement &inRootElement, std::shared_ptr<IStringTable> inStringTable,
+ std::shared_ptr<IDOMFactory> inFactory = std::shared_ptr<IDOMFactory>());
+};
+
+// Write out data in an xml-like fasion without specifying exactly
+// where that data is being written.
+class IDOMWriter
+{
+protected:
+ virtual ~IDOMWriter() {}
+public:
+ friend class std::shared_ptr<IDOMWriter>;
+
+ // Control the element scope.
+ struct Scope
+ {
+ IDOMWriter &m_Writer;
+ Scope(IDOMWriter &writer, TWideXMLCharPtr inElemName)
+ : m_Writer(writer)
+ {
+ m_Writer.Begin(inElemName);
+ }
+ Scope(IDOMWriter &writer, TXMLCharPtr inElemName)
+ : m_Writer(writer)
+ {
+ m_Writer.Begin(inElemName);
+ }
+ ~Scope() { m_Writer.End(); }
+ };
+
+ wchar_t m_PrintBuf[256];
+ char8_t m_NarrowBuf[256];
+
+ virtual void SetDOMFlags(SDOMFlags inFlags) = 0;
+ virtual SDOMFlags GetDOMFlags() const = 0;
+ // There tend to be two types of elements.
+ // Containers (<a>\n\t<b/><b/>\n</a>)
+ // and Values <b>onetwothree</b>
+ virtual void Begin(TWideXMLCharPtr inElemName) = 0;
+ virtual void Begin(TXMLCharPtr inElemName) = 0;
+ // Attributes. They may be sorted just before write
+ virtual void Att(TWideXMLCharPtr name, TWideXMLCharPtr value) = 0;
+ virtual void Att(TXMLCharPtr name, TXMLCharPtr value) = 0;
+ virtual void Value(TWideXMLCharPtr value) = 0;
+ virtual void Value(TXMLCharPtr value) = 0;
+ virtual void End() = 0;
+ virtual void RemoveCurrent() = 0;
+ virtual void ReplaceCurrent(SDOMElement &inElement) = 0;
+ // Append all the children of inElement to the child list of the current items.
+ virtual void AppendChildren(SDOMElement &inElement) = 0;
+ virtual void RemoveAttribute(TWideXMLCharPtr inItem) = 0;
+ virtual void RemoveAttribute(TXMLCharPtr inItem) = 0;
+ // Get the number of tabs required to line up the next line
+ // with the opening of the previous line
+ virtual QT3DSU32 GetTabs() = 0;
+ virtual SDOMElement *GetTopElement() = 0;
+ virtual std::shared_ptr<IDOMFactory> GetFactory() = 0;
+ // Move this item before this sibling. Function does not rearrange the
+ // tree in any major way and will not work if inItem and inSibling aren't
+ // siblings.
+ virtual void MoveBefore(TWideXMLCharPtr inItem, TWideXMLCharPtr inSibling) = 0;
+ virtual void MoveBefore(TXMLCharPtr inItem, TXMLCharPtr inSibling) = 0;
+
+ virtual void ChildValue(TWideXMLCharPtr name, TWideXMLCharPtr value)
+ {
+ Begin(name);
+ Value(value);
+ End();
+ }
+
+ virtual void ChildValue(TXMLCharPtr name, TXMLCharPtr value)
+ {
+ Begin(name);
+ Value(value);
+ End();
+ }
+
+ TWideXMLCharPtr ToStr(wchar_t val)
+ {
+ m_PrintBuf[0] = val;
+ m_PrintBuf[1] = 0;
+ return m_PrintBuf;
+ }
+ TXMLCharPtr ToStr(char8_t val)
+ {
+ m_NarrowBuf[0] = val;
+ m_NarrowBuf[1] = 0;
+ return m_NarrowBuf;
+ }
+ template <typename TDataType>
+ TWideXMLCharPtr ToStr(TDataType val)
+ {
+ WStrOps<TDataType>().ToStr(val, NVDataRef<wchar_t>(m_PrintBuf, 256));
+ return m_PrintBuf;
+ }
+
+ template <typename TDataType>
+ TXMLCharPtr ToNarrowStr(TDataType val)
+ {
+ WStrOps<TDataType>().ToStr(val, NVDataRef<char8_t>(m_NarrowBuf, 256));
+ return m_NarrowBuf;
+ }
+
+ void Att(TWideXMLCharPtr name, const TXMLWideStr &inValue)
+ {
+ return Att(name, inValue.wide_str());
+ }
+
+ void Att(TXMLCharPtr name, const TXMLStr &inValue) { return Att(name, inValue.c_str()); }
+
+ template <typename TData>
+ void Att(TWideXMLCharPtr name, TData value)
+ {
+ Att(name, ToStr(value));
+ }
+
+ template <typename TData>
+ void Att(TXMLCharPtr name, TData value)
+ {
+ Att(name, ToNarrowStr(value));
+ }
+
+ template <typename TSerializer>
+ void Serialize(const wchar_t *elemName, TSerializer &serializer)
+ {
+ IDOMWriter::Scope __theScope(*this, elemName);
+ serializer.Serialize(*this);
+ }
+
+ template <typename TSerializer>
+ void Serialize(const char8_t *elemName, TSerializer &serializer)
+ {
+ IDOMWriter::Scope __theScope(*this, elemName);
+ serializer.Serialize(*this);
+ }
+
+ std::shared_ptr<IDOMReader> CreateDOMReader()
+ {
+ std::shared_ptr<IDOMFactory> theFactory(GetFactory());
+ return IDOMReader::CreateDOMReader(*GetTopElement(), theFactory->GetStringTable(),
+ theFactory);
+ }
+
+ // Note that the default method of creating a writer also creates a reader; they can
+ // both manipulation the DOM hierarch.
+ static eastl::pair<std::shared_ptr<IDOMWriter>, std::shared_ptr<IDOMReader>>
+ CreateDOMWriter(std::shared_ptr<IDOMFactory> inFactory, SDOMElement &inRootElement,
+ std::shared_ptr<IStringTable> inStringTable);
+
+ static eastl::pair<std::shared_ptr<IDOMWriter>, std::shared_ptr<IDOMReader>>
+ CreateDOMWriter(const wchar_t *inTopElemName, std::shared_ptr<IStringTable> inStringTable)
+ {
+ std::shared_ptr<IDOMFactory> theFactory(IDOMFactory::CreateDOMFactory(inStringTable));
+ SDOMElement *theRoot = theFactory->NextElement(inTopElemName);
+ return CreateDOMWriter(theFactory, *theRoot, inStringTable);
+ }
+};
+
+class CXmlErrorHandler
+{
+protected:
+ virtual ~CXmlErrorHandler() {}
+public:
+ virtual void OnXmlError(const QString &errorName, int line, int column) = 0;
+};
+
+class CDOMSerializer
+{
+public:
+ static void WriteXMLHeader(IOutStream &inStream);
+ static void Write(SDOMElement &inElement, IOutStream &inStream, QT3DSU32 inTabs = 0);
+ static SDOMElement *Read(IDOMFactory &inFactory, qt3ds::foundation::IInStream &inStream,
+ CXmlErrorHandler *inErrorHandler = NULL);
+};
+}
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/SignalsImpl.cpp b/src/Runtime/ogl-runtime/src/dm/systems/SignalsImpl.cpp
new file mode 100644
index 00000000..6f42516b
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/SignalsImpl.cpp
@@ -0,0 +1,1565 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#ifdef WIN32
+#pragma warning(disable : 4103 4512 4503)
+#endif
+#include "SignalsImpl.h"
+
+using namespace std;
+
+namespace {
+bool g_DataModelSignalsEnabled = true;
+
+#define CHECK_SIGNALS_ENABLED() \
+ { \
+ if (g_DataModelSignalsEnabled == false) \
+ return; \
+ }
+}
+
+namespace qt3dsdm {
+void SetDataModelSignalsEnabled(bool inEnabled)
+{
+ g_DataModelSignalsEnabled = inEnabled;
+}
+// Defaults to true
+bool AreDataModelSignalsEnabled()
+{
+ return g_DataModelSignalsEnabled;
+}
+
+#define CONNECT_QT(x) TSignalConnectionPtr(new QtSignalConnection(x))
+#define CONNECT_SIGNAL_QT(x) CONNECT_QT(QObject::connect(this, x, inCallback))
+
+class CPropertyCoreSignaller : public QObject, public IInstancePropertyCoreSignalProvider,
+ public IInstancePropertyCoreSignalSender
+{
+ Q_OBJECT
+Q_SIGNALS:
+ void propertySignal(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, const SValue);
+public:
+ TSignalConnectionPtr ConnectInstancePropertyValue(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, const SValue &)>
+ &inCallback) override
+ {
+ return CONNECT_QT(QObject::connect(this, &CPropertyCoreSignaller::propertySignal,
+ inCallback));
+ }
+ void SignalInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT propertySignal(inInstance, inProperty, inValue);
+ }
+};
+
+TSignalItemPtr CreatePropertyCoreSignaller()
+{
+ return TSignalItemPtr(
+ static_cast<IInstancePropertyCoreSignalProvider *>(new CPropertyCoreSignaller()));
+}
+
+class CDataCoreSignaller : public QObject, public IDataCoreSignalProvider,
+ public IDataCoreSignalSender
+{
+ Q_OBJECT
+Q_SIGNALS:
+ void instanceCreated(Qt3DSDMInstanceHandle handle);
+ void beforeInstanceDeleted(Qt3DSDMInstanceHandle handle);
+ void instanceDeleted(Qt3DSDMInstanceHandle handle);
+ void instanceDerived(Qt3DSDMInstanceHandle handle, Qt3DSDMInstanceHandle handle2);
+ void instanceParentRemoved(Qt3DSDMInstanceHandle handle, Qt3DSDMInstanceHandle handle2);
+ void propertyAdded(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, TCharPtr,
+ DataModelDataType::Value);
+ void propertyRemoved(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, TCharPtr,
+ DataModelDataType::Value);
+
+public:
+ virtual TSignalConnectionPtr
+ ConnectInstanceCreated(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_QT(QObject::connect(this, &CDataCoreSignaller::instanceCreated,
+ inCallback));
+ }
+ virtual TSignalConnectionPtr
+ ConnectBeforeInstanceDeleted(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_QT(QObject::connect(this, &CDataCoreSignaller::beforeInstanceDeleted,
+ inCallback));
+ }
+ virtual TSignalConnectionPtr
+ ConnectInstanceDeleted(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_QT(QObject::connect(this, &CDataCoreSignaller::instanceDeleted,
+ inCallback));
+ }
+ TSignalConnectionPtr ConnectInstanceDerived(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_QT(QObject::connect(this, &CDataCoreSignaller::instanceDerived,
+ inCallback));
+ }
+ TSignalConnectionPtr ConnectInstanceParentRemoved(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_QT(QObject::connect(this, &CDataCoreSignaller::instanceParentRemoved,
+ inCallback));
+ }
+ virtual TSignalConnectionPtr
+ ConnectPropertyAdded(const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ TCharPtr, DataModelDataType::Value)> &inCallback) override
+ {
+ return CONNECT_QT(QObject::connect(this, &CDataCoreSignaller::propertyAdded, inCallback));
+ }
+ virtual TSignalConnectionPtr
+ ConnectPropertyRemoved(const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ TCharPtr, DataModelDataType::Value)> &inCallback) override
+ {
+ return CONNECT_QT(QObject::connect(this, &CDataCoreSignaller::propertyRemoved,
+ inCallback));
+ }
+
+ void SignalInstanceCreated(Qt3DSDMInstanceHandle inInstance) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT instanceCreated(inInstance);
+ }
+ void SignalBeforeInstanceDeleted(Qt3DSDMInstanceHandle inInstance) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT beforeInstanceDeleted(inInstance);
+ }
+ void SignalInstanceDeleted(Qt3DSDMInstanceHandle inInstance) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT instanceDeleted(inInstance);
+ }
+ void SignalInstanceDerived(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT instanceDerived(inInstance, inParent);
+ }
+ void SignalInstanceParentRemoved(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT instanceParentRemoved(inInstance, inParent);
+ }
+ void SignalPropertyAdded(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, TCharPtr inName,
+ DataModelDataType::Value inDataType) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT propertyAdded(inInstance, inProperty, inName, inDataType);
+ }
+ void SignalPropertyRemoved(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, TCharPtr inName,
+ DataModelDataType::Value inDataType) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT propertyRemoved(inInstance, inProperty, inName, inDataType);
+ }
+};
+
+TSignalItemPtr CreateDataCoreSignaller()
+{
+ return TSignalItemPtr(static_cast<IDataCoreSignalProvider *>(new CDataCoreSignaller()));
+}
+
+class CSlideCoreSignaller : public QObject, public ISlideCoreSignalProvider,
+ public ISlideCoreSignalSender
+{
+ Q_OBJECT
+Q_SIGNALS:
+
+ void slideCreated(Qt3DSDMSlideHandle);
+ void beforeSlideDeleted(Qt3DSDMSlideHandle);
+ void slideDeleted(Qt3DSDMSlideHandle);
+ void slideDerived(Qt3DSDMSlideHandle, Qt3DSDMSlideHandle, int);
+ void instancePropertyValueSet(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue &);
+ qt3dsdm::SValue instancePropertyValueAdded(Qt3DSDMSlideHandle, Qt3DSDMSlideHandle,
+ Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue &);
+ void instancePropertyValueRemoved(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle, const SValue &);
+ void slideTimeChanged(Qt3DSDMSlideHandle);
+
+public:
+ virtual TSignalConnectionPtr
+ ConnectSlideCreated(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideCoreSignaller::slideCreated);
+ }
+ virtual TSignalConnectionPtr
+ ConnectBeforeSlideDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideCoreSignaller::beforeSlideDeleted);
+ }
+ virtual TSignalConnectionPtr
+ ConnectSlideDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideCoreSignaller::slideDeleted);
+ }
+ TSignalConnectionPtr ConnectSlideDerived(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMSlideHandle, int)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideCoreSignaller::slideDerived);
+ }
+ TSignalConnectionPtr ConnectInstancePropertyValueSet(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue &)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideCoreSignaller::instancePropertyValueSet);
+ }
+ virtual TSignalConnectionPtr ConnectInstancePropertyValueAdded(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle, const SValue &)> &inCallback)
+ {
+ return CONNECT_SIGNAL_QT(&CSlideCoreSignaller::instancePropertyValueAdded);
+ }
+ TSignalConnectionPtr ConnectInstancePropertyValueRemoved(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue &)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideCoreSignaller::instancePropertyValueRemoved);
+ }
+ virtual TSignalConnectionPtr
+ ConnectSlideTimeChanged(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideCoreSignaller::slideTimeChanged);
+ }
+
+ void SendSlideCreated(Qt3DSDMSlideHandle inSlide) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT slideCreated(inSlide);
+ }
+ void SendBeforeSlideDeleted(Qt3DSDMSlideHandle inSlide) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT beforeSlideDeleted(inSlide);
+ }
+ void SendSlideDeleted(Qt3DSDMSlideHandle inSlide) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT slideDeleted(inSlide);
+ }
+ void SendSlideDerived(Qt3DSDMSlideHandle inSlide, Qt3DSDMSlideHandle inParent,
+ int inIndex) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT slideDerived(inSlide, inParent, inIndex);
+ }
+ void SendPropertyValueSet(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT instancePropertyValueSet(inSlide, inInstance, inProperty, inValue);
+ }
+ virtual SValue SendPropertyValueAdded(Qt3DSDMSlideHandle inSource, Qt3DSDMSlideHandle inDest,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue)
+ {
+ if (!g_DataModelSignalsEnabled) return SValue();
+
+ // check that we have one and only one slot connected to
+ // instancePropertyValueAdded signal as it returns a value.
+ Q_ASSERT(
+ receivers(
+ SIGNAL(
+ instancePropertyValueAdded(
+ Qt3DSDMSlideHandle, Qt3DSDMSlideHandle,
+ Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,const SValue &))) == 1);
+ // emit instancePropertyValueAdded
+ return instancePropertyValueAdded(inSource, inDest, inInstance, inProperty, inValue);
+ }
+ void SendPropertyValueRemoved(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT instancePropertyValueRemoved(inSlide, inInstance, inProperty, inValue);
+ }
+ void SendSlideTimeChanged(Qt3DSDMSlideHandle inSlide) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT slideTimeChanged(inSlide);
+ }
+};
+
+TSignalItemPtr CreateSlideCoreSignaller()
+{
+ return TSignalItemPtr(static_cast<ISlideCoreSignalProvider *>(new CSlideCoreSignaller()));
+}
+
+class CSlideGraphCoreSignaller : public QObject, public ISlideGraphCoreSignalProvider,
+ public ISlideGraphCoreSignalSender
+{
+ Q_OBJECT
+Q_SIGNALS:
+ void graphCreated(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle);
+ void graphDeleted(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle);
+ void instanceAssociated(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle);
+ void instanceDissociated(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle);
+ void graphActiveSlide(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle);
+ void graphSeconds(Qt3DSDMSlideGraphHandle, float);
+
+public:
+ TSignalConnectionPtr ConnectGraphCreated(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideGraphCoreSignaller::graphCreated);
+ }
+ TSignalConnectionPtr ConnectGraphDeleted(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideGraphCoreSignaller::graphDeleted);
+ }
+ TSignalConnectionPtr ConnectInstanceAssociated(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideGraphCoreSignaller::instanceAssociated);
+ }
+ TSignalConnectionPtr ConnectInstanceDissociated(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideGraphCoreSignaller::instanceDissociated);
+ }
+ TSignalConnectionPtr ConnectGraphActiveSlide(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideGraphCoreSignaller::graphActiveSlide);
+ }
+ virtual TSignalConnectionPtr
+ ConnectGraphSeconds(const std::function<void(Qt3DSDMSlideGraphHandle, float)> &inCallback)
+ {
+ return CONNECT_SIGNAL_QT(&CSlideGraphCoreSignaller::graphSeconds);
+ }
+
+ void SendGraphCreated(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT graphCreated(inGraph, inSlide);
+ }
+ void SendGraphDeleted(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT graphDeleted(inGraph, inSlide);
+ }
+ void SendInstanceAssociated(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT instanceAssociated(inGraph, inSlide, inInstance);
+ }
+ void SendInstanceDissociated(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT instanceDissociated(inGraph, inSlide, inInstance);
+ }
+ void SendGraphActiveSlide(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT graphActiveSlide(inGraph, inSlide);
+ }
+ virtual void SendGraphSeconds(Qt3DSDMSlideGraphHandle inGraph, float inSeconds)
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT graphSeconds(inGraph, inSeconds);
+ }
+};
+
+TSignalItemPtr CreateSlideGraphCoreSignaller()
+{
+ return TSignalItemPtr(
+ static_cast<ISlideGraphCoreSignalProvider *>(new CSlideGraphCoreSignaller()));
+}
+
+class CAnimationCoreSignaller : public QObject, public IAnimationCoreSignalProvider,
+ public IAnimationCoreSignalSender
+{
+ Q_OBJECT
+Q_SIGNALS:
+ void animationCreated(Qt3DSDMAnimationHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle, size_t, EAnimationType);
+ void beforeAnimationDeleted(Qt3DSDMAnimationHandle);
+ void animationDeleted(Qt3DSDMAnimationHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle, size_t, EAnimationType);
+ void keyframeInserted(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle, const TKeyframe &);
+ void beforeKeyframeErased(Qt3DSDMKeyframeHandle);
+ void keyframeErased(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle, const TKeyframe &);
+ void beforeAllKeyframesErased(Qt3DSDMAnimationHandle);
+ void keyframeUpdated(Qt3DSDMKeyframeHandle, const TKeyframe &);
+ void firstKeyframeDynamic(Qt3DSDMAnimationHandle, bool);
+
+public:
+ TSignalConnectionPtr ConnectAnimationCreated(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle, size_t, EAnimationType)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CAnimationCoreSignaller::animationCreated);
+ }
+ virtual TSignalConnectionPtr
+ ConnectBeforeAnimationDeleted(const std::function<void(Qt3DSDMAnimationHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CAnimationCoreSignaller::beforeAnimationDeleted);
+ }
+ TSignalConnectionPtr ConnectAnimationDeleted(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle, size_t, EAnimationType)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CAnimationCoreSignaller::animationDeleted);
+ }
+ TSignalConnectionPtr ConnectKeyframeInserted(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle, const TKeyframe &)>
+ &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CAnimationCoreSignaller::keyframeInserted);
+ }
+ virtual TSignalConnectionPtr
+ ConnectBeforeKeyframeErased(const std::function<void(Qt3DSDMKeyframeHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CAnimationCoreSignaller::beforeKeyframeErased);
+ }
+ TSignalConnectionPtr ConnectKeyframeErased(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle, const TKeyframe &)>
+ &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CAnimationCoreSignaller::keyframeErased);
+ }
+ virtual TSignalConnectionPtr
+ ConnectBeforeAllKeyframesErased(const std::function<void(Qt3DSDMAnimationHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CAnimationCoreSignaller::beforeAllKeyframesErased);
+ }
+ TSignalConnectionPtr ConnectKeyframeUpdated(
+ const std::function<void(Qt3DSDMKeyframeHandle, const TKeyframe &)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CAnimationCoreSignaller::keyframeUpdated);
+ }
+ TSignalConnectionPtr ConnectFirstKeyframeDynamicSet(
+ const std::function<void(Qt3DSDMAnimationHandle, bool)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CAnimationCoreSignaller::firstKeyframeDynamic);
+ }
+
+ void SendAnimationCreated(Qt3DSDMAnimationHandle inAnimation, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex,
+ EAnimationType inAnimationType) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT animationCreated(inAnimation, inSlide, inInstance, inProperty, inIndex,
+ inAnimationType);
+ }
+ void SendBeforeAnimationDeleted(Qt3DSDMAnimationHandle inAnimation) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT beforeAnimationDeleted(inAnimation);
+ }
+ void SendAnimationDeleted(Qt3DSDMAnimationHandle inAnimation, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex,
+ EAnimationType inAnimationType) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT animationDeleted(inAnimation, inSlide, inInstance, inProperty, inIndex,
+ inAnimationType);
+ }
+ void SendKeyframeInserted(Qt3DSDMAnimationHandle inAnimation,
+ Qt3DSDMKeyframeHandle inKeyframe, const TKeyframe &inData) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT keyframeInserted(inAnimation, inKeyframe, inData);
+ }
+ void SendBeforeKeyframeErased(Qt3DSDMKeyframeHandle inKeyframe) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT beforeKeyframeErased(inKeyframe);
+ }
+ void SendKeyframeErased(Qt3DSDMAnimationHandle inAnimation,
+ Qt3DSDMKeyframeHandle inKeyframe, const TKeyframe &inData) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT keyframeErased(inAnimation, inKeyframe, inData);
+ }
+ void SendBeforeAllKeyframesErased(Qt3DSDMAnimationHandle inAnimation) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT beforeAllKeyframesErased(inAnimation);
+ }
+ void SendKeyframeUpdated(Qt3DSDMKeyframeHandle inKeyframe, const TKeyframe &inData) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT keyframeUpdated(inKeyframe, inData);
+ }
+ void SendFirstKeyframeDynamicSet(Qt3DSDMAnimationHandle inAnimation,
+ bool inKeyframeDynamic) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT firstKeyframeDynamic(inAnimation, inKeyframeDynamic);
+ }
+};
+
+TSignalItemPtr CreateAnimationCoreSignaller()
+{
+ return TSignalItemPtr(
+ static_cast<IAnimationCoreSignalProvider *>(new CAnimationCoreSignaller()));
+}
+
+class CActionCoreSignaller : public QObject, public IActionCoreSignalProvider,
+ public IActionCoreSignalSender
+{
+ Q_OBJECT
+Q_SIGNALS:
+ void triggerObjectSet(Qt3DSDMActionHandle, SObjectRefType &);
+ void targetObjectSet(Qt3DSDMActionHandle, SObjectRefType &);
+ void eventHandleSet(Qt3DSDMActionHandle, const wstring &);
+ void handlerHandleSet(Qt3DSDMActionHandle, const wstring &);
+
+ void handlerArgumentAdded(Qt3DSDMActionHandle, Qt3DSDMHandlerArgHandle, const TCharStr &,
+ HandlerArgumentType::Value, DataModelDataType::Value);
+ void handlerArgumentRemoved(Qt3DSDMActionHandle, Qt3DSDMHandlerArgHandle, const TCharStr &,
+ HandlerArgumentType::Value, DataModelDataType::Value);
+ void handlerArgumentValueSet(Qt3DSDMHandlerArgHandle, const SValue &);
+
+public:
+ TSignalConnectionPtr ConnectTriggerObjectSet(
+ const std::function<void(Qt3DSDMActionHandle, SObjectRefType &)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CActionCoreSignaller::triggerObjectSet);
+ }
+ TSignalConnectionPtr ConnectTargetObjectSet(
+ const std::function<void(Qt3DSDMActionHandle, SObjectRefType &)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CActionCoreSignaller::targetObjectSet);
+ }
+ virtual TSignalConnectionPtr
+ ConnectEventSet(const std::function<void(Qt3DSDMActionHandle, const wstring &)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CActionCoreSignaller::eventHandleSet);
+ }
+ virtual TSignalConnectionPtr
+ ConnectHandlerSet(const std::function<void(Qt3DSDMActionHandle, const wstring &)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CActionCoreSignaller::handlerHandleSet);
+ }
+
+ TSignalConnectionPtr ConnectHandlerArgumentAdded(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMHandlerArgHandle, const TCharStr &,
+ HandlerArgumentType::Value, DataModelDataType::Value)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CActionCoreSignaller::handlerArgumentAdded);
+ }
+ TSignalConnectionPtr ConnectHandlerArgumentRemoved(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMHandlerArgHandle, const TCharStr &,
+ HandlerArgumentType::Value, DataModelDataType::Value)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CActionCoreSignaller::handlerArgumentRemoved);
+ }
+ TSignalConnectionPtr ConnectHandlerArgumentValueSet(
+ const std::function<void(Qt3DSDMHandlerArgHandle, const SValue &)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CActionCoreSignaller::handlerArgumentValueSet);
+ }
+
+ void SendTriggerObjectSet(Qt3DSDMActionHandle inAction, SObjectRefType &inTriggerObject) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT triggerObjectSet(inAction, inTriggerObject);
+ }
+ void SendTargetObjectSet(Qt3DSDMActionHandle inAction, SObjectRefType &inTargetObject) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT targetObjectSet(inAction, inTargetObject);
+ }
+ void SendEventSet(Qt3DSDMActionHandle inAction, const wstring &inEventHandle) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT eventHandleSet(inAction, inEventHandle);
+ }
+ void SendHandlerSet(Qt3DSDMActionHandle inAction, const wstring &inHandlerHandle) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT handlerHandleSet(inAction, inHandlerHandle);
+ }
+
+ void SendHandlerArgumentAdded(Qt3DSDMActionHandle inAction,
+ Qt3DSDMHandlerArgHandle inHandlerArgument,
+ const TCharStr &inName, HandlerArgumentType::Value inArgType,
+ DataModelDataType::Value inValueType) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT handlerArgumentAdded(inAction, inHandlerArgument, inName, inArgType, inValueType);
+ }
+ void SendHandlerArgumentRemoved(Qt3DSDMActionHandle inAction,
+ Qt3DSDMHandlerArgHandle inHandlerArgument,
+ const TCharStr &inName, HandlerArgumentType::Value inArgType,
+ DataModelDataType::Value inValueType) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT handlerArgumentRemoved(inAction, inHandlerArgument, inName, inArgType, inValueType);
+ }
+ void SendHandlerArgumentValueSet(Qt3DSDMHandlerArgHandle inHandlerArgument,
+ const SValue &inValue) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT handlerArgumentValueSet(inHandlerArgument, inValue);
+ }
+};
+
+TSignalItemPtr CreateActionCoreSignaller()
+{
+ return TSignalItemPtr(static_cast<IActionCoreSignalProvider *>(new CActionCoreSignaller()));
+}
+
+class CActionSystemSignaller : public QObject, public IActionSystemSignalProvider,
+ public IActionSystemSignalSender
+{
+ Q_OBJECT
+Q_SIGNALS:
+ void actionCreated(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle);
+ void actionDeleted(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle);
+
+public:
+ TSignalConnectionPtr ConnectActionCreated(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CActionSystemSignaller::actionCreated);
+ }
+ TSignalConnectionPtr ConnectActionDeleted(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CActionSystemSignaller::actionDeleted);
+ }
+
+ void SendActionCreated(Qt3DSDMActionHandle inAction, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT actionCreated(inAction, inSlide, inOwner);
+ }
+ void SendActionDeleted(Qt3DSDMActionHandle inAction, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT actionDeleted(inAction, inSlide, inOwner);
+ }
+};
+
+TSignalItemPtr CreateActionSystemSignaller()
+{
+ return TSignalItemPtr(static_cast<IActionSystemSignalProvider *>(new CActionSystemSignaller()));
+}
+
+class CSlideSystemSignaller : public QObject, public ISlideSystemSignalProvider,
+ public ISlideSystemSignalSender
+{
+ Q_OBJECT
+Q_SIGNALS:
+ void masterCreated(Qt3DSDMSlideHandle);
+ void masterDeleted(Qt3DSDMSlideHandle);
+ void slideCreated(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle);
+ void slideDeleted(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle);
+ void slideRearranged(Qt3DSDMSlideHandle, int, int);
+ void componentSeconds(Qt3DSDMSlideHandle, float);
+ void instanceAssociated(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle);
+ void instanceDissociated(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle);
+ void propertyLinked(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle);
+ void propertyUnlinked(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle);
+ void activeSlide(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle, Qt3DSDMSlideHandle);
+
+ qt3dsdm::SValue valueCreated(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue);
+ void valueDestroyed(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue);
+
+public:
+ virtual TSignalConnectionPtr
+ ConnectMasterCreated(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideSystemSignaller::masterCreated);
+ }
+ virtual TSignalConnectionPtr
+ ConnectMasterDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideSystemSignaller::masterDeleted);
+ }
+ TSignalConnectionPtr ConnectSlideCreated(
+ const std::function<void(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideSystemSignaller::slideCreated);
+ }
+ TSignalConnectionPtr ConnectSlideDeleted(
+ const std::function<void(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideSystemSignaller::slideDeleted);
+ }
+ virtual TSignalConnectionPtr
+ ConnectSlideRearranged(const std::function<void(Qt3DSDMSlideHandle, int, int)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideSystemSignaller::slideRearranged);
+ }
+ virtual TSignalConnectionPtr
+ ConnectComponentSeconds(const std::function<void(Qt3DSDMSlideHandle, float)> &inCallback)
+ {
+ return CONNECT_SIGNAL_QT(&CSlideSystemSignaller::componentSeconds);
+ }
+ TSignalConnectionPtr ConnectInstanceAssociated(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideSystemSignaller::instanceAssociated);
+ }
+ TSignalConnectionPtr ConnectInstanceDissociated(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideSystemSignaller::instanceDissociated);
+ }
+ TSignalConnectionPtr ConnectPropertyLinked(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)>
+ &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideSystemSignaller::propertyLinked);
+ }
+ TSignalConnectionPtr ConnectPropertyUnlinked(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)>
+ &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideSystemSignaller::propertyUnlinked);
+ }
+ TSignalConnectionPtr ConnectActiveSlide(
+ const std::function<void(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle, Qt3DSDMSlideHandle)>
+ &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CSlideSystemSignaller::activeSlide);
+ }
+ virtual TSignalConnectionPtr ConnectPropertyValueCreated(
+ const std::function<SValue(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue &)> &inCallback)
+ {
+ return CONNECT_SIGNAL_QT(&CSlideSystemSignaller::valueCreated);
+ }
+ virtual TSignalConnectionPtr ConnectPropertyValueDestroyed(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue &)> &inCallback)
+ {
+ return CONNECT_SIGNAL_QT(&CSlideSystemSignaller::valueDestroyed);
+ }
+
+ void SendMasterCreated(Qt3DSDMSlideHandle inMaster) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT masterCreated(inMaster);
+ }
+ void SendMasterDeleted(Qt3DSDMSlideHandle inMaster) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT masterDeleted(inMaster);
+ }
+ void SendSlideCreated(Qt3DSDMSlideHandle inMaster, int inIndex,
+ Qt3DSDMSlideHandle inSlide) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT slideCreated(inMaster, inIndex, inSlide);
+ }
+ void SendSlideDeleted(Qt3DSDMSlideHandle inMaster, int inIndex,
+ Qt3DSDMSlideHandle inSlide) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT slideDeleted(inMaster, inIndex, inSlide);
+ }
+ void SendSlideRearranged(Qt3DSDMSlideHandle inMaster, int inOldIndex, int inNewIndex) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT slideRearranged(inMaster, inOldIndex, inNewIndex);
+ }
+ virtual void SendComponentSeconds(Qt3DSDMSlideHandle inMaster, float inSeconds)
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT componentSeconds(inMaster, inSeconds);
+ }
+ void SendInstanceAssociated(Qt3DSDMSlideHandle inMaster, Qt3DSDMInstanceHandle inInstance) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT instanceAssociated(inMaster, inInstance);
+ }
+ void SendInstanceDissociated(Qt3DSDMSlideHandle inMaster,
+ Qt3DSDMInstanceHandle inInstance) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT instanceDissociated(inMaster, inInstance);
+ }
+ void SendPropertyLinked(Qt3DSDMSlideHandle inMaster, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT propertyLinked(inMaster, inInstance, inProperty);
+ }
+ void SendPropertyUnlinked(Qt3DSDMSlideHandle inMaster, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT propertyUnlinked(inMaster, inInstance, inProperty);
+ }
+ void SendActiveSlide(Qt3DSDMSlideHandle inMaster, int inIndex,
+ Qt3DSDMSlideHandle inOldSlide, Qt3DSDMSlideHandle inNewSlide) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT activeSlide(inMaster, inIndex, inOldSlide, inNewSlide);
+ }
+
+ virtual SValue SendPropertyValueCreated(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue)
+ {
+ if (!g_DataModelSignalsEnabled) return SValue();
+
+ // check that we have one and only one slot connected to
+ // valueCreated signal as it returns a value.
+ Q_ASSERT(
+ receivers(
+ SIGNAL(
+ valueCreated(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle, const SValue &))) == 1);
+ // emit valueCreated
+ return valueCreated(inSlide, inInstance, inProperty, inValue);
+ }
+ virtual void SendPropertyValueDestroyed(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue)
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT valueDestroyed(inSlide, inInstance, inProperty, inValue);
+ }
+};
+
+TSignalItemPtr CreateSlideSystemSignaller()
+{
+ return TSignalItemPtr(static_cast<ISlideSystemSignalProvider *>(new CSlideSystemSignaller()));
+}
+
+class CCustomPropCoreSignaller : public QObject, public ICustomPropCoreSignalProvider,
+ public ICustomPropCoreSignalSender
+{
+ Q_OBJECT
+Q_SIGNALS:
+ void customPropertyCreated(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle);
+ void customPropertyDeleted(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle);
+ void customPropertyModified(Qt3DSDMPropertyHandle);
+ void customEventCreated(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle);
+ void customEventDeleted(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle);
+ void customEventModified(Qt3DSDMEventHandle);
+ void customHandlerCreated(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle);
+ void customHandlerDeleted(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle);
+ void customHandlerModified(Qt3DSDMHandlerHandle);
+ void customHandlerParamCreated(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle);
+ void customHandlerParamDeleted(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle);
+ void customHandlerParamModified(Qt3DSDMHandlerParamHandle);
+ void customReferencesModified(Qt3DSDMInstanceHandle, const TCharStr &);
+
+public:
+ TSignalConnectionPtr ConnectCustomPropertyCreated(
+ const std::function<void(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CCustomPropCoreSignaller::customPropertyCreated);
+ }
+ TSignalConnectionPtr ConnectCustomPropertyDeleted(
+ const std::function<void(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CCustomPropCoreSignaller::customPropertyDeleted);
+ }
+ virtual TSignalConnectionPtr
+ ConnectCustomPropertyModified(const std::function<void(Qt3DSDMPropertyHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CCustomPropCoreSignaller::customPropertyModified);
+ }
+ TSignalConnectionPtr ConnectCustomEventCreated(
+ const std::function<void(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CCustomPropCoreSignaller::customEventCreated);
+ }
+ TSignalConnectionPtr ConnectCustomEventDeleted(
+ const std::function<void(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CCustomPropCoreSignaller::customEventDeleted);
+ }
+ virtual TSignalConnectionPtr
+ ConnectCustomEventModified(const std::function<void(Qt3DSDMEventHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CCustomPropCoreSignaller::customEventModified);
+ }
+ TSignalConnectionPtr ConnectCustomHandlerCreated(
+ const std::function<void(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CCustomPropCoreSignaller::customHandlerCreated);
+ }
+ TSignalConnectionPtr ConnectCustomHandlerDeleted(
+ const std::function<void(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CCustomPropCoreSignaller::customHandlerDeleted);
+ }
+ virtual TSignalConnectionPtr
+ ConnectCustomHandlerModified(const std::function<void(Qt3DSDMHandlerHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CCustomPropCoreSignaller::customHandlerModified);
+ }
+ TSignalConnectionPtr ConnectCustomHandlerParamCreated(
+ const std::function<void(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CCustomPropCoreSignaller::customHandlerParamCreated);
+ }
+ TSignalConnectionPtr ConnectCustomHandlerParamDeleted(
+ const std::function<void(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CCustomPropCoreSignaller::customHandlerParamDeleted);
+ }
+ TSignalConnectionPtr ConnectCustomHandlerParamModified(
+ const std::function<void(Qt3DSDMHandlerParamHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CCustomPropCoreSignaller::customHandlerParamModified);
+ }
+ TSignalConnectionPtr ConnectCustomReferencesModified(
+ const std::function<void(Qt3DSDMInstanceHandle, const TCharStr &)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CCustomPropCoreSignaller::customReferencesModified);
+ }
+
+ void SendCustomPropertyCreated(Qt3DSDMPropertyHandle inProp,
+ Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customPropertyCreated(inProp, inOwner);
+ }
+ void SendCustomPropertyDeleted(Qt3DSDMPropertyHandle inProp,
+ Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customPropertyDeleted(inProp, inOwner);
+ }
+ void SendCustomPropertyModified(Qt3DSDMPropertyHandle inProp) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customPropertyModified(inProp);
+ }
+ void SendCustomEventCreated(Qt3DSDMEventHandle inEvent, Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customEventCreated(inEvent, inOwner);
+ }
+ void SendCustomEventDeleted(Qt3DSDMEventHandle inEvent, Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customEventDeleted(inEvent, inOwner);
+ }
+ void SendCustomEventModified(Qt3DSDMEventHandle inEvent) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customEventModified(inEvent);
+ }
+ void SendCustomHandlerCreated(Qt3DSDMHandlerHandle inHandler,
+ Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customHandlerCreated(inHandler, inOwner);
+ }
+ void SendCustomHandlerDeleted(Qt3DSDMHandlerHandle inHandler,
+ Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customHandlerDeleted(inHandler, inOwner);
+ }
+ void SendCustomHandlerModified(Qt3DSDMHandlerHandle inHandler) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customHandlerModified(inHandler);
+ }
+ void SendCustomHandlerParamCreated(Qt3DSDMHandlerParamHandle inParameter,
+ Qt3DSDMHandlerHandle inHandler) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customHandlerParamCreated(inParameter, inHandler);
+ }
+ void SendCustomHandlerParamDeleted(Qt3DSDMHandlerParamHandle inParameter,
+ Qt3DSDMHandlerHandle inHandler) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customHandlerParamDeleted(inParameter, inHandler);
+ }
+ void SendCustomHandlerParamModified(Qt3DSDMHandlerParamHandle inParameter) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customHandlerParamModified(inParameter);
+ }
+ void SendCustomReferencesModified(Qt3DSDMInstanceHandle inOwner,
+ const TCharStr &inString) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customReferencesModified(inOwner, inString);
+ }
+};
+
+TSignalItemPtr CreateCustomPropCoreSignaller()
+{
+ return TSignalItemPtr(
+ static_cast<ICustomPropCoreSignalProvider *>(new CCustomPropCoreSignaller()));
+}
+
+class CStudioFullSystemSignaller : public QObject, public IStudioFullSystemSignalProvider,
+ public IStudioFullSystemSignalSender
+{
+ Q_OBJECT
+Q_SIGNALS:
+ void changeSetBegin();
+ void changeSetEnd();
+ void animationBegin();
+ void animationEnd();
+ void slideCreated(Qt3DSDMSlideHandle);
+ void slideDeleted(Qt3DSDMSlideHandle);
+ void slideRearranged(Qt3DSDMSlideHandle, int, int);
+ void componentSeconds(Qt3DSDMSlideHandle);
+ void beginComponentSeconds(Qt3DSDMSlideHandle);
+ void propertyLinked(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle);
+ void propertyUnlinked(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle);
+ void activeSlide(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle);
+ void instanceCreated(Qt3DSDMInstanceHandle);
+ void instanceDeleted(Qt3DSDMInstanceHandle);
+ void animationCreated(Qt3DSDMAnimationHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle);
+ void animationDeleted(Qt3DSDMAnimationHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle);
+ void controlledToggled(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle);
+ void keyframeInserted(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle);
+ void keyframeErased(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle);
+ void keyframeUpdated(Qt3DSDMKeyframeHandle);
+ void connectFirstKeyframeDynamicSet(Qt3DSDMAnimationHandle, bool);
+ void instancePropertyValue(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle);
+ void actionCreated(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle);
+ void actionDeleted(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle);
+ void triggerObjectSet(Qt3DSDMActionHandle);
+ void targetObjectSet(Qt3DSDMActionHandle);
+ void eventHandleSet(Qt3DSDMActionHandle);
+ void handlerHandleSet(Qt3DSDMActionHandle);
+ void handlerArgumentValueSet(Qt3DSDMHandlerArgHandle);
+ void customPropertyCreated(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle);
+ void customPropertyDeleted(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle);
+ void customPropertyModified(Qt3DSDMPropertyHandle);
+ void customEventCreated(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle);
+ void customEventDeleted(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle);
+ void customEventModified(Qt3DSDMEventHandle);
+ void customHandlerCreated(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle);
+ void customHandlerDeleted(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle);
+ void customHandlerModified(Qt3DSDMHandlerHandle);
+ void customHandlerParamCreated(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle);
+ void customHandlerParamDeleted(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle);
+ void customHandlerParamModified(Qt3DSDMHandlerParamHandle);
+ void customReferencesModified(Qt3DSDMInstanceHandle, const TCharStr &);
+private:
+ ISlideSystemSignalProvider *m_SlideSystemSignalProvider;
+
+public:
+ CStudioFullSystemSignaller(ISlideSystemSignalProvider *inProvider)
+ : m_SlideSystemSignalProvider(inProvider)
+ {
+ }
+
+ virtual TSignalConnectionPtr ConnectChangeSetBegin(const std::function<void()> &inCallback)
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::changeSetBegin);
+ }
+ virtual TSignalConnectionPtr ConnectChangeSetEnd(const std::function<void()> &inCallback)
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::changeSetEnd);
+ }
+
+ // Used when people start to set component times.
+ virtual TSignalConnectionPtr ConnectAnimationSetBegin(const std::function<void()> &inCallback)
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::animationBegin);
+ }
+ virtual TSignalConnectionPtr ConnectAnimationSetEnd(const std::function<void()> &inCallback)
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::animationEnd);
+ }
+
+ virtual TSignalConnectionPtr
+ ConnectSlideCreated(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::slideCreated);
+ }
+ virtual TSignalConnectionPtr
+ ConnectSlideDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::slideDeleted);
+ }
+ virtual TSignalConnectionPtr
+ ConnectSlideRearranged(const std::function<void(Qt3DSDMSlideHandle, int, int)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::slideRearranged);
+ }
+ virtual TSignalConnectionPtr
+ ConnectBeginComponentSeconds(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::beginComponentSeconds);
+ }
+ virtual TSignalConnectionPtr
+ ConnectComponentSeconds(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::componentSeconds);
+ }
+ TSignalConnectionPtr ConnectPropertyLinked(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)>
+ &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::propertyLinked);
+ }
+ TSignalConnectionPtr ConnectPropertyUnlinked(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)>
+ &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::propertyUnlinked);
+ }
+ TSignalConnectionPtr ConnectActiveSlide(
+ const std::function<void(Qt3DSDMSlideHandle, int, Qt3DSDMSlideHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::activeSlide);
+ }
+
+ virtual TSignalConnectionPtr
+ ConnectInstanceCreated(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::instanceCreated);
+ }
+ virtual TSignalConnectionPtr
+ ConnectInstanceDeleted(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::instanceDeleted);
+ }
+ virtual TSignalConnectionPtr
+ ConnectAnimationCreated(const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::animationCreated);
+ }
+ virtual TSignalConnectionPtr
+ ConnectAnimationDeleted(const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::animationDeleted);
+ }
+ TSignalConnectionPtr ConnectKeyframeInserted(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::keyframeInserted);
+ }
+ TSignalConnectionPtr ConnectKeyframeErased(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::keyframeErased);
+ }
+ virtual TSignalConnectionPtr
+ ConnectKeyframeUpdated(const std::function<void(Qt3DSDMKeyframeHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::keyframeUpdated);
+ }
+ TSignalConnectionPtr ConnectInstancePropertyValue(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::instancePropertyValue);
+ }
+ TSignalConnectionPtr ConnectFirstKeyframeDynamicSet(
+ const std::function<void(Qt3DSDMAnimationHandle, bool)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::connectFirstKeyframeDynamicSet);
+ }
+
+ TSignalConnectionPtr ConnectActionCreated(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::actionCreated);
+ }
+ TSignalConnectionPtr ConnectActionDeleted(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::actionDeleted);
+ }
+ virtual TSignalConnectionPtr
+ ConnectTriggerObjectSet(const std::function<void(Qt3DSDMActionHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::triggerObjectSet);
+ }
+ virtual TSignalConnectionPtr
+ ConnectTargetObjectSet(const std::function<void(Qt3DSDMActionHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::targetObjectSet);
+ }
+ virtual TSignalConnectionPtr
+ ConnectEventSet(const std::function<void(Qt3DSDMActionHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::eventHandleSet);
+ }
+ virtual TSignalConnectionPtr
+ ConnectHandlerSet(const std::function<void(Qt3DSDMActionHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::handlerHandleSet);
+ }
+ virtual TSignalConnectionPtr
+ ConnectHandlerArgumentValueSet(const std::function<void(Qt3DSDMHandlerArgHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::handlerArgumentValueSet);
+ }
+
+ TSignalConnectionPtr ConnectCustomPropertyCreated(
+ const std::function<void(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::customPropertyCreated);
+ }
+ TSignalConnectionPtr ConnectCustomPropertyDeleted(
+ const std::function<void(Qt3DSDMPropertyHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::customPropertyDeleted);
+ }
+ virtual TSignalConnectionPtr
+ ConnectCustomPropertyModified(const std::function<void(Qt3DSDMPropertyHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::customPropertyModified);
+ }
+ TSignalConnectionPtr ConnectCustomEventCreated(
+ const std::function<void(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::customEventCreated);
+ }
+ TSignalConnectionPtr ConnectCustomEventDeleted(
+ const std::function<void(Qt3DSDMEventHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::customEventDeleted);
+ }
+ virtual TSignalConnectionPtr
+ ConnectCustomEventModified(const std::function<void(Qt3DSDMEventHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::customEventModified);
+ }
+ TSignalConnectionPtr ConnectCustomHandlerCreated(
+ const std::function<void(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::customHandlerCreated);
+ }
+ TSignalConnectionPtr ConnectCustomHandlerDeleted(
+ const std::function<void(Qt3DSDMHandlerHandle, Qt3DSDMInstanceHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::customHandlerDeleted);
+ }
+ virtual TSignalConnectionPtr
+ ConnectCustomHandlerModified(const std::function<void(Qt3DSDMHandlerHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::customHandlerModified);
+ }
+ TSignalConnectionPtr ConnectCustomHandlerParamCreated(
+ const std::function<void(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::customHandlerParamCreated);
+ }
+ TSignalConnectionPtr ConnectCustomHandlerParamDeleted(
+ const std::function<void(Qt3DSDMHandlerParamHandle, Qt3DSDMHandlerHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::customHandlerParamDeleted);
+ }
+ TSignalConnectionPtr ConnectCustomHandlerParamModified(
+ const std::function<void(Qt3DSDMHandlerParamHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::customHandlerParamModified);
+ }
+ TSignalConnectionPtr ConnectCustomReferencesModified(
+ const std::function<void(Qt3DSDMInstanceHandle, const TCharStr &)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::customReferencesModified);
+ }
+ TSignalConnectionPtr ConnectControlledToggled(
+ const std::function<void(
+ Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)> &inCallback) override
+ {
+ return CONNECT_SIGNAL_QT(&CStudioFullSystemSignaller::controlledToggled);
+ }
+
+ virtual void SendChangeSetBegin()
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT changeSetBegin();
+ }
+ virtual void SendChangeSetEnd()
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT changeSetEnd();
+ }
+
+ virtual void SendAnimationSetBegin()
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT animationBegin();
+ }
+ virtual void SendAnimationSetEnd()
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT animationEnd();
+ }
+
+ void SendSlideCreated(Qt3DSDMSlideHandle inSlide) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT slideCreated(inSlide);
+ }
+ void SendSlideDeleted(Qt3DSDMSlideHandle inSlide) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT slideDeleted(inSlide);
+ }
+ void SendSlideRearranged(Qt3DSDMSlideHandle inMaster, int inOldIndex, int inNewIndex) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT slideRearranged(inMaster, inOldIndex, inNewIndex);
+ }
+ void SendBeginComponentSeconds(Qt3DSDMSlideHandle inMaster) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT beginComponentSeconds(inMaster);
+ }
+ void SendComponentSeconds(Qt3DSDMSlideHandle inMaster) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT componentSeconds(inMaster);
+ }
+ void SendPropertyLinked(Qt3DSDMSlideHandle inMaster, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT propertyLinked(inMaster, inInstance, inProperty);
+ }
+ void SendPropertyUnlinked(Qt3DSDMSlideHandle inMaster, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT propertyUnlinked(inMaster, inInstance, inProperty);
+ }
+ void SendActiveSlide(Qt3DSDMSlideHandle inMaster, int inIndex, Qt3DSDMSlideHandle inSlide) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT activeSlide(inMaster, inIndex, inSlide);
+ }
+
+ void SendInstanceCreated(Qt3DSDMInstanceHandle inInstance) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT instanceCreated(inInstance);
+ }
+ void SendInstanceDeleted(Qt3DSDMInstanceHandle inInstance) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT instanceDeleted(inInstance);
+ }
+
+ void SendAnimationCreated(Qt3DSDMAnimationHandle inAnimation,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT animationCreated(inAnimation, inInstance, inProperty);
+ }
+ void SendAnimationDeleted(Qt3DSDMAnimationHandle inAnimation,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT animationDeleted(inAnimation, inInstance, inProperty);
+ }
+ void SendKeyframeInserted(Qt3DSDMAnimationHandle inAnimation,
+ Qt3DSDMKeyframeHandle inKeyframe) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT keyframeInserted(inAnimation, inKeyframe);
+ }
+ void SendKeyframeErased(Qt3DSDMAnimationHandle inAnimation,
+ Qt3DSDMKeyframeHandle inKeyframe) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT keyframeErased(inAnimation, inKeyframe);
+ }
+ void SendKeyframeUpdated(Qt3DSDMKeyframeHandle inKeyframe) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT keyframeUpdated(inKeyframe);
+ }
+ void SendConnectFirstKeyframeDynamicSet(Qt3DSDMAnimationHandle inAnimation,
+ bool inDynamic) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT connectFirstKeyframeDynamicSet(inAnimation, inDynamic);
+ }
+
+ void SendInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT instancePropertyValue(inInstance, inProperty);
+ }
+
+ void SendActionCreated(Qt3DSDMActionHandle inAction, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT actionCreated(inAction, inSlide, inOwner);
+ }
+ void SendActionDeleted(Qt3DSDMActionHandle inAction, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT actionDeleted(inAction, inSlide, inOwner);
+ }
+ void SendTriggerObjectSet(Qt3DSDMActionHandle inAction) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT triggerObjectSet(inAction);
+ }
+ void SendTargetObjectSet(Qt3DSDMActionHandle inAction) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT targetObjectSet(inAction);
+ }
+ void SendEventSet(Qt3DSDMActionHandle inAction) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT eventHandleSet(inAction);
+ }
+ void SendHandlerSet(Qt3DSDMActionHandle inAction) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT handlerHandleSet(inAction);
+ }
+ void SendHandlerArgumentValueSet(Qt3DSDMHandlerArgHandle inHandlerArgument) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT handlerArgumentValueSet(inHandlerArgument);
+ }
+
+ void SendCustomPropertyCreated(Qt3DSDMPropertyHandle inProp,
+ Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customPropertyCreated(inProp, inOwner);
+ }
+ void SendCustomPropertyDeleted(Qt3DSDMPropertyHandle inProp,
+ Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customPropertyDeleted(inProp, inOwner);
+ }
+ void SendCustomPropertyModified(Qt3DSDMPropertyHandle inProp) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customPropertyModified(inProp);
+ }
+ void SendCustomEventCreated(Qt3DSDMEventHandle inEvent, Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customEventCreated(inEvent, inOwner);
+ }
+ void SendCustomEventDeleted(Qt3DSDMEventHandle inEvent, Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customEventDeleted(inEvent, inOwner);
+ }
+ void SendCustomEventModified(Qt3DSDMEventHandle inEvent) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customEventModified(inEvent);
+ }
+ void SendCustomHandlerCreated(Qt3DSDMHandlerHandle inHandler,
+ Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customHandlerCreated(inHandler, inOwner);
+ }
+ void SendCustomHandlerDeleted(Qt3DSDMHandlerHandle inHandler,
+ Qt3DSDMInstanceHandle inOwner) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customHandlerDeleted(inHandler, inOwner);
+ }
+ void SendCustomHandlerModified(Qt3DSDMHandlerHandle inHandler) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customHandlerModified(inHandler);
+ }
+ void SendCustomHandlerParamCreated(Qt3DSDMHandlerParamHandle inParameter,
+ Qt3DSDMHandlerHandle inHandler) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customHandlerParamCreated(inParameter, inHandler);
+ }
+ void SendCustomHandlerParamDeleted(Qt3DSDMHandlerParamHandle inParameter,
+ Qt3DSDMHandlerHandle inHandler) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customHandlerParamDeleted(inParameter, inHandler);
+ }
+ void SendCustomHandlerParamModified(Qt3DSDMHandlerParamHandle inParameter) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customHandlerParamModified(inParameter);
+ }
+ void SendCustomReferencesModified(Qt3DSDMInstanceHandle inOwner,
+ const TCharStr &inString) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT customReferencesModified(inOwner, inString);
+ }
+
+ void SendControlledToggled(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) override
+ {
+ CHECK_SIGNALS_ENABLED();
+ Q_EMIT controlledToggled(inInstance, inProperty);
+ }
+};
+
+TSignalItemPtr
+CreateStudioFullSystemSignaller(ISlideSystemSignalProvider *inSlideSystemSignalProvider)
+{
+ return TSignalItemPtr(static_cast<IStudioFullSystemSignalProvider *>(
+ new CStudioFullSystemSignaller(inSlideSystemSignalProvider)));
+}
+}
+
+#include "SignalsImpl.moc"
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/SignalsImpl.h b/src/Runtime/ogl-runtime/src/dm/systems/SignalsImpl.h
new file mode 100644
index 00000000..988270e8
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/SignalsImpl.h
@@ -0,0 +1,50 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef SIGNALSIMPLH
+#define SIGNALSIMPLH
+#include "Qt3DSDMSignals.h"
+
+namespace qt3dsdm {
+class ISlideSystemSignalProvider;
+
+TSignalItemPtr CreatePropertyCoreSignaller();
+TSignalItemPtr CreateDataCoreSignaller();
+TSignalItemPtr CreateSlideCoreSignaller();
+TSignalItemPtr CreateSlideGraphCoreSignaller();
+TSignalItemPtr CreateAnimationCoreSignaller();
+TSignalItemPtr CreateActionCoreSignaller();
+TSignalItemPtr CreateActionSystemSignaller();
+TSignalItemPtr CreateSlideSystemSignaller();
+TSignalItemPtr CreateCustomPropCoreSignaller();
+TSignalItemPtr
+CreateStudioFullSystemSignaller(ISlideSystemSignalProvider *inSlideSystemSignalProvider);
+}
+
+#endif \ No newline at end of file
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/SlideSystem.cpp b/src/Runtime/ogl-runtime/src/dm/systems/SlideSystem.cpp
new file mode 100644
index 00000000..d6d88932
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/SlideSystem.cpp
@@ -0,0 +1,867 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#ifdef WIN32
+#pragma warning(disable : 4503)
+#endif
+#include "SlideSystem.h"
+#include "SimpleSlideCore.h"
+
+using namespace std;
+
+namespace qt3dsdm {
+
+SSlideSystem::SSlideSystem(TDataCorePtr inDataCore, TSlideCorePtr inSlideCore,
+ TSlideGraphCorePtr inSlideGraphCore, TAnimationCorePtr inAnimationCore,
+ Qt3DSDMInstanceHandle inSlideInstance,
+ Qt3DSDMPropertyHandle inComponentGuidProperty)
+ : m_DataCore(inDataCore)
+ , m_SlideCore(inSlideCore)
+ , m_SlideGraphCore(inSlideGraphCore)
+ , m_AnimationCore(inAnimationCore)
+ , m_SlideInstance(inSlideInstance)
+ , m_ComponentGuid(inComponentGuidProperty)
+{
+ m_Signaller = CreateSlideSystemSignaller();
+}
+void SSlideSystem::SetPropertySystem(TPropertySystemPtr inPropertySystem)
+{
+ m_PropertySystem = inPropertySystem;
+}
+
+Qt3DSDMSlideHandle SSlideSystem::CreateMasterSlide()
+{
+ Qt3DSDMInstanceHandle theSlideInstance = m_DataCore->CreateInstance();
+ m_DataCore->DeriveInstance(theSlideInstance, m_SlideInstance);
+ Qt3DSDMSlideHandle retval = m_SlideCore->CreateSlide(theSlideInstance);
+ m_SlideGraphCore->CreateSlideGraph(retval);
+ GetSignalSender()->SendMasterCreated(retval);
+ return retval;
+}
+
+inline bool PropertyHandlePairEquals(const TPropertyHandlePropertyInfoPair &inPair,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ return (inProperty == inPair.first);
+}
+
+void AddReferencedInstance(const TSlideEntry &inEntry,
+ const TPropertyHandlePropertyInfoPairList &inInfoPairList,
+ Qt3DSDMSlideHandle inSourceSlide, Qt3DSDMSlideHandle inDestSlide,
+ TInstanceHandleList &outInstances, TSlideEntryList &outReferencedEntries)
+{
+ TPropertyHandlePropertyInfoPairList::const_iterator theFind =
+ find_if<TPropertyHandlePropertyInfoPairList::const_iterator>(
+ inInfoPairList, std::bind(PropertyHandlePairEquals,
+ std::placeholders::_1, get<1>(inEntry)));
+ if (theFind != inInfoPairList.end()) {
+ TPropertyInstanceInfoPtr theInfo(theFind->second);
+ Qt3DSDMInstanceHandle theReferenced(theInfo->GetInstanceForProperty(get<2>(inEntry)));
+ if (theReferenced.Valid()
+ && !exists(outInstances, std::bind(equal_to<int>(), theReferenced,
+ std::placeholders::_1))) {
+ insert_unique(outInstances, theReferenced);
+ SValue theNewValue(
+ theInfo->CreateInstanceForProperty(inSourceSlide, inDestSlide, theReferenced));
+ outReferencedEntries.push_back(
+ make_tuple(get<0>(inEntry), get<1>(inEntry), theNewValue));
+ }
+ }
+}
+
+void CopySpecificAnimation(Qt3DSDMSlideHandle inMaster, Qt3DSDMSlideHandle inTarget,
+ TInstancePropertyPair inPropertyPair, TAnimationCorePtr inAnimationCore,
+ size_t inIndex)
+{
+ Qt3DSDMAnimationHandle theAnimation = inAnimationCore->GetAnimation(
+ inMaster, inPropertyPair.first, inPropertyPair.second, inIndex);
+ if (theAnimation.Valid())
+ CopyAnimation(inAnimationCore, theAnimation, inTarget, inPropertyPair.first,
+ inPropertyPair.second, inIndex);
+}
+
+void CopyAnimationIfExist(Qt3DSDMSlideHandle inMaster, Qt3DSDMSlideHandle inTarget,
+ TInstancePropertyPair inPropertyPair, TPropertySystemPtr inPropertySystem,
+ TAnimationCorePtr inAnimationCore)
+{
+ DataModelDataType::Value thePropertyType = inPropertySystem->GetDataType(inPropertyPair.second);
+ std::tuple<bool, size_t> theArity = GetDatatypeAnimatableAndArity(thePropertyType);
+ if (std::get<0>(theArity))
+ do_times(std::get<1>(theArity), std::bind(CopySpecificAnimation, inMaster, inTarget,
+ inPropertyPair, inAnimationCore,
+ std::placeholders::_1));
+}
+
+void SetEntryValueIfNotReferenced(const TSlideEntry &inEntry,
+ const TInstanceHandleList &inReferencedInstances,
+ const TSlideEntryList &inReferencedEntries,
+ Qt3DSDMSlideHandle inSource, Qt3DSDMSlideHandle inDestSlide,
+ TPropertySystemPtr inPropertySystem, TSlideCorePtr inDestCore,
+ TAnimationCorePtr inAnimationCore)
+{
+ // Don't copy referenced instance properties.
+ if (exists(inReferencedInstances, std::bind(equal_to<int>(), get<0>(inEntry),
+ std::placeholders::_1)))
+ return;
+ TSlideEntryList::const_iterator theFind = find_if<TSlideEntryList::const_iterator>(
+ inReferencedEntries,
+ std::bind(CSimpleSlideCore::PropertyFound, get<0>(inEntry), get<1>(inEntry),
+ std::placeholders::_1));
+ if (theFind != inReferencedEntries.end())
+ inDestCore->ForceSetInstancePropertyValue(inDestSlide, get<0>(inEntry), get<1>(inEntry),
+ get<2>(*theFind));
+ else
+ inDestCore->ForceSetInstancePropertyValue(inDestSlide, get<0>(inEntry), get<1>(inEntry),
+ get<2>(inEntry));
+ CopyAnimationIfExist(inSource, inDestSlide, make_pair(get<0>(inEntry), get<1>(inEntry)),
+ inPropertySystem, inAnimationCore);
+}
+
+Qt3DSDMSlideHandle SSlideSystem::CreateSlide(Qt3DSDMSlideHandle inMaster, int inIndex)
+{
+ return DuplicateSlide(inMaster, inIndex);
+}
+
+Qt3DSDMSlideHandle SSlideSystem::DuplicateSlide(Qt3DSDMSlideHandle inSourceSlide, int inIndex)
+{
+ Qt3DSDMSlideHandle theMaster = GetMasterSlide(inSourceSlide);
+ Qt3DSDMInstanceHandle theSlideInstance = m_DataCore->CreateInstance();
+ m_DataCore->DeriveInstance(theSlideInstance, m_SlideInstance);
+ Qt3DSDMSlideHandle retval = m_SlideCore->CreateSlide(theSlideInstance);
+
+ TSlideHandleList theChildren;
+ m_SlideCore->GetChildSlides(theMaster, theChildren);
+ m_SlideCore->DeriveSlide(retval, theMaster, inIndex - 1);
+ int finalIndex = m_SlideCore->GetChildIndex(theMaster, retval) + 1;
+ if (!theChildren.empty()) {
+ // If the master was passed in, we get the intersecting properties
+ // of the master and first child.
+ // if another slide was passed in, we again do the intersection but we
+ // take the values from the source slide instead of the master.
+ TSlideEntryList theIntersectingEntries;
+ if (inSourceSlide == theMaster)
+ m_SlideCore->GetIntersectingProperties(theMaster, theChildren.at(0),
+ theIntersectingEntries);
+ else
+ m_SlideCore->GetIntersectingProperties(inSourceSlide, theMaster,
+ theIntersectingEntries);
+
+ // duplicates the instance properties, from source slide (could be master (a new slide
+ // command) or another other slides (duplicate slide) to the newly created slide
+ m_DataCore->CopyInstanceProperties(this->GetSlideInstance(inSourceSlide), theSlideInstance);
+
+ TInstanceHandleList theReferencedInstances;
+ TSlideEntryList theReferencedEntries;
+ do_all(theIntersectingEntries,
+ std::bind(AddReferencedInstance, std::placeholders::_1,
+ std::cref(m_PropertyInfoPairList),
+ inSourceSlide, retval, std::ref(theReferencedInstances),
+ std::ref(theReferencedEntries)));
+ do_all(theIntersectingEntries,
+ std::bind(SetEntryValueIfNotReferenced, std::placeholders::_1,
+ std::cref(theReferencedInstances),
+ std::cref(theReferencedEntries), inSourceSlide, retval,
+ m_PropertySystem, m_SlideCore, m_AnimationCore));
+ }
+ GetSignalSender()->SendSlideCreated(theMaster, finalIndex, retval);
+ return retval;
+}
+
+Qt3DSDMSlideHandle SSlideSystem::GetMasterSlide(Qt3DSDMSlideHandle inSlide) const
+{
+ if (inSlide.Valid() && m_SlideCore->IsSlide(inSlide)) {
+ Qt3DSDMSlideHandle theParent = m_SlideCore->GetParentSlide(inSlide);
+ if (theParent.Valid())
+ return theParent;
+ return inSlide;
+ }
+ return 0;
+}
+
+bool SSlideSystem::IsMasterSlide(Qt3DSDMSlideHandle inSlide) const
+{
+ Qt3DSDMSlideHandle theParent = m_SlideCore->GetParentSlide(inSlide);
+ if (!theParent.Valid())
+ return true;
+ else
+ return false;
+}
+
+inline bool GraphGuidMatches(Qt3DSDMSlideGraphHandle inGraph, TSlideGraphCorePtr inSlideGraph,
+ TSlideCorePtr inSlideCore, TDataCorePtr inDataCore,
+ Qt3DSDMPropertyHandle inProperty, SValue inValue)
+{
+ Qt3DSDMSlideHandle theMaster = inSlideGraph->GetGraphRoot(inGraph);
+ Qt3DSDMInstanceHandle theInstance = inSlideCore->GetSlideInstance(theMaster);
+ SValue theValue;
+ if (inDataCore->GetInstancePropertyValue(theInstance, inProperty, theValue)
+ && Equals(inValue, theValue.toOldSkool()))
+ return true;
+ return false;
+}
+
+Qt3DSDMSlideHandle SSlideSystem::GetMasterSlideByComponentGuid(SLong4 inGuid) const
+{
+ TSlideGraphHandleList theGraphs;
+ m_SlideGraphCore->GetSlideGraphs(theGraphs);
+ TSlideGraphHandleList::iterator theFind = find_if<TSlideGraphHandleList::iterator>(
+ theGraphs, std::bind(GraphGuidMatches,
+ std::placeholders::_1, m_SlideGraphCore, m_SlideCore, m_DataCore,
+ m_ComponentGuid, inGuid));
+ if (theFind != theGraphs.end())
+ return m_SlideGraphCore->GetGraphRoot(*theFind);
+ return 0;
+}
+
+void InsertIfReferencedProperty(const TSlideEntry &inEntry,
+ const TPropertyHandlePropertyInfoPairList &inRefProperties,
+ TInstanceHandleList &inInstances)
+{
+ TPropertyHandlePropertyInfoPairList::const_iterator theFind =
+ find_if<TPropertyHandlePropertyInfoPairList::const_iterator>(
+ inRefProperties, std::bind(PropertyHandlePairEquals, std::placeholders::_1, get<1>(inEntry)));
+ if (theFind != inRefProperties.end()) {
+ Qt3DSDMInstanceHandle theInstance(theFind->second->GetInstanceForProperty(get<2>(inEntry)));
+ if (theInstance.Valid())
+ inInstances.push_back(theInstance);
+ }
+}
+
+void SSlideSystem::InsertEntryAndPropertyInstance(const TSlideEntry &inEntry,
+ TInstanceHandleList &inInstances,
+ Qt3DSDMSlideHandle inSlide)
+{
+ Qt3DSDMInstanceHandle theEntryInstance = get<0>(inEntry);
+ if (find(inInstances.begin(), inInstances.end(), theEntryInstance) == inInstances.end()) {
+ TGraphSlidePair thePair = m_SlideGraphCore->GetAssociatedGraph(theEntryInstance);
+ if (thePair.second == inSlide) // if this instance belongs to this slide
+ {
+ // get all references belong to this instance (ex: image instances that belong to this
+ // material instance)
+ qt3dsdm::SValue theValue;
+ for (TPropertyHandlePropertyInfoPairList::iterator theIter =
+ m_PropertyInfoPairList.begin();
+ theIter != m_PropertyInfoPairList.end(); ++theIter) {
+ if (m_DataCore->HasAggregateInstanceProperty(
+ theEntryInstance,
+ theIter->first) // check if the property exists before querying the value
+ && m_DataCore->GetInstancePropertyValue(
+ theEntryInstance, theIter->first,
+ theValue)) // this function may throw error if the property doesn't exist
+ {
+ Qt3DSDMInstanceHandle theInstance(
+ theIter->second->GetInstanceForProperty(theValue.toOldSkool()));
+ if (theInstance.Valid())
+ inInstances.push_back(theInstance);
+ }
+ }
+ // get this instance as well
+ inInstances.push_back(theEntryInstance);
+ }
+ }
+}
+
+// Delete the referenced instances of this slide
+// This function is very similar to GetReferencedInstances
+// You change one function, you need to change the other function
+void SSlideSystem::DeleteReferencedInstances(Qt3DSDMSlideHandle inSlide)
+{
+ // Recursively delete the children of this slide
+ // Usually the slide has children if it is a Master slide (for example when deleting a
+ // Component)
+ TSlideHandleList theChildren;
+ m_SlideCore->GetChildSlides(inSlide, theChildren);
+ do_all(theChildren, std::bind(&SSlideSystem::DeleteReferencedInstances, this,
+ std::placeholders::_1));
+
+ // Delete the referenced instances from this slide
+ TSlideEntryList theEntries;
+ m_SlideCore->GetSlidePropertyEntries(inSlide, theEntries);
+
+ // Run through all entries, if you find a reference property delete the associated instance.
+ // This is for properties that are set on this slide (because you can set property on slide or
+ // on instance)
+ TInstanceHandleList theReferencedInstances;
+ do_all(theEntries,
+ std::bind(InsertIfReferencedProperty, std::placeholders::_1,
+ std::cref(m_PropertyInfoPairList),
+ std::ref(theReferencedInstances)));
+ do_all(theReferencedInstances, std::bind(&IDataCore::DeleteInstance, m_DataCore,
+ std::placeholders::_1));
+
+ // Run through all entries, delete all instances that belong to this slide and its reference
+ // property instances
+ // This is for properties that are set on instance
+ theReferencedInstances.clear();
+ do_all(theEntries, std::bind(&SSlideSystem::InsertEntryAndPropertyInstance, this,
+ std::placeholders::_1,
+ std::ref(theReferencedInstances), inSlide));
+ do_all(theReferencedInstances, std::bind(&IDataCore::DeleteInstance, m_DataCore,
+ std::placeholders::_1));
+}
+
+// Get the referenced instances of this slide
+// This function is very similar to DeleteReferencedInstances
+// You change one function, you need to change the other function
+void SSlideSystem::GetReferencedInstances(Qt3DSDMSlideHandle inSlide,
+ TInstanceHandleList &outReferencedInstances)
+{
+ // Recursively get the children of this slide
+ // Usually the slide has children if it is a Master slide (for example Component)
+ TSlideHandleList theChildren;
+ m_SlideCore->GetChildSlides(inSlide, theChildren);
+ do_all(theChildren, std::bind(&SSlideSystem::GetReferencedInstances, this,
+ std::placeholders::_1,
+ std::ref(outReferencedInstances)));
+
+ // Get the referenced instances from this slide
+ TSlideEntryList theEntries;
+ m_SlideCore->GetSlidePropertyEntries(inSlide, theEntries);
+
+ // Run through all entries, if you find a reference property get the associated instance.
+ // This is for properties that are set on this slide (because you can set property on slide or
+ // on instance)
+ do_all(theEntries,
+ std::bind(InsertIfReferencedProperty, std::placeholders::_1,
+ std::cref(m_PropertyInfoPairList),
+ std::ref(outReferencedInstances)));
+
+ // Run through all entries, get all instances that belong to this slide and its reference
+ // property instances
+ // This is for properties that are set on instance
+ do_all(theEntries, std::bind(&SSlideSystem::InsertEntryAndPropertyInstance, this,
+ std::placeholders::_1,
+ std::ref(outReferencedInstances), inSlide));
+}
+
+void SSlideSystem::DeleteSlideByIndex(Qt3DSDMSlideHandle inMaster, size_t inIndex)
+{
+ Qt3DSDMSlideHandle theChild = GetSlideByIndex(inMaster, inIndex);
+ TInstanceHandleList theInstances;
+ if (theChild.Valid()) {
+ DeleteReferencedInstances(theChild);
+ m_SlideCore->DeleteSlide(theChild, theInstances);
+ do_all(theInstances, std::bind(&IDataCore::DeleteInstance, m_DataCore,
+ std::placeholders::_1));
+ }
+ if (inIndex == 0)
+ GetSignalSender()->SendMasterDeleted(inMaster);
+ else
+ GetSignalSender()->SendSlideDeleted(inMaster, (int)inIndex, theChild);
+}
+
+void SSlideSystem::GetSlideReferencedInstances(Qt3DSDMSlideHandle inMaster, size_t inIndex,
+ TInstanceHandleList &outReferencedInstances)
+{
+ outReferencedInstances.clear();
+ Qt3DSDMSlideHandle theChild = GetSlideByIndex(inMaster, inIndex);
+ if (theChild.Valid()) {
+ GetReferencedInstances(theChild, outReferencedInstances);
+ }
+}
+
+Qt3DSDMSlideHandle SSlideSystem::GetSlideByIndex(Qt3DSDMSlideHandle inMaster, size_t inIndex) const
+{
+ if (inIndex == 0)
+ return inMaster;
+ --inIndex;
+ TSlideHandleList theChildren;
+ m_SlideCore->GetChildSlides(inMaster, theChildren);
+ if (inIndex < theChildren.size())
+ return theChildren[inIndex];
+ return Qt3DSDMSlideHandle();
+}
+
+void SSlideSystem::SetActiveSlide(Qt3DSDMSlideHandle inMaster, size_t inIndex)
+{
+ Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetSlideGraph(inMaster);
+ Qt3DSDMSlideHandle theActiveSlide = inMaster;
+ if (inIndex > 0)
+ theActiveSlide = GetSlideByIndex(inMaster, inIndex);
+ Qt3DSDMSlideHandle theOldSlide = m_SlideGraphCore->GetGraphActiveSlide(theGraph);
+ m_SlideGraphCore->SetGraphActiveSlide(theGraph, theActiveSlide);
+ GetSignalSender()->SendActiveSlide(inMaster, (int)inIndex, theOldSlide, theActiveSlide);
+}
+
+size_t SSlideSystem::GetSlideCount(Qt3DSDMSlideHandle inMaster) const
+{
+ TSlideHandleList theChildren;
+ m_SlideCore->GetChildSlides(inMaster, theChildren);
+ return 1 + theChildren.size();
+}
+
+void SSlideSystem::RearrangeSlide(Qt3DSDMSlideHandle inMaster, size_t inOldIndex, size_t inNewIndex)
+{
+ if (inOldIndex == 0)
+ throw RearrangeSlideArgumentsMustNotBeZero(L"");
+ TSlideHandleList theChildren;
+ m_SlideCore->GetChildSlides(inMaster, theChildren);
+ Qt3DSDMSlideHandle theChild = theChildren.at(inOldIndex - 1);
+ m_SlideCore->DeriveSlide(theChild, inMaster, (int)inNewIndex - 1);
+ GetSignalSender()->SendSlideRearranged(inMaster, (int)inOldIndex, (int)inNewIndex);
+}
+
+void SSlideSystem::SetComponentSeconds(Qt3DSDMSlideHandle inSlide, float inSeconds)
+{
+ Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetSlideGraph(GetMasterSlide(inSlide));
+ m_SlideCore->SetSlideTime(m_SlideGraphCore->GetGraphActiveSlide(theGraph), inSeconds);
+}
+
+float SSlideSystem::GetComponentSeconds(Qt3DSDMSlideHandle inSlide) const
+{
+ Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetSlideGraph(GetMasterSlide(inSlide));
+ return m_SlideCore->GetSlideTime(m_SlideGraphCore->GetGraphActiveSlide(theGraph));
+}
+
+long SSlideSystem::GetComponentSecondsLong(Qt3DSDMSlideHandle inSlide) const
+{
+ float seconds(GetComponentSeconds(inSlide));
+ return static_cast<long>((seconds * 1000) + .5f);
+}
+
+long SSlideSystem::GetComponentSecondsLong(Qt3DSDMInstanceHandle inInstance) const
+{
+ Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetAssociatedGraph(inInstance).first;
+ float seconds = m_SlideCore->GetSlideTime(m_SlideGraphCore->GetGraphActiveSlide(theGraph));
+ return static_cast<long>((seconds * 1000) + .5f);
+}
+
+SInstanceSlideInformation
+SSlideSystem::GetInstanceSlideInformation(Qt3DSDMInstanceHandle inInstance) const
+{
+ TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inInstance);
+ Qt3DSDMSlideHandle theAssociatedSlide(theGraphSlidePair.second);
+ if (theAssociatedSlide.Valid() == false)
+ return SInstanceSlideInformation();
+ Qt3DSDMSlideHandle theMasterSlide(GetMasterSlide(theGraphSlidePair.second));
+ Qt3DSDMSlideHandle theActiveSlide(
+ m_SlideGraphCore->GetGraphActiveSlide(theGraphSlidePair.first));
+ float seconds = m_SlideCore->GetSlideTime(theActiveSlide);
+ long theMilliseconds = static_cast<long>((seconds * 1000) + .5f);
+ return SInstanceSlideInformation(theAssociatedSlide, theMasterSlide, theActiveSlide,
+ theMilliseconds);
+}
+
+/**
+ * Use the instance for storing information such as name, or the GUID of the object
+ * this slide links to.
+ */
+Qt3DSDMInstanceHandle SSlideSystem::GetSlideInstance(Qt3DSDMSlideHandle inSlide) const
+{
+ return m_SlideCore->GetSlideInstance(inSlide);
+}
+/**
+ * Reverse lookup into the slide system so you can match slides to instances.
+ */
+Qt3DSDMSlideHandle SSlideSystem::GetSlideByInstance(Qt3DSDMInstanceHandle inSlide) const
+{
+ return m_SlideCore->GetSlideByInstance(inSlide);
+}
+
+/**
+ * Slide may be either a master slide
+ */
+void SSlideSystem::AssociateInstanceWithSlide(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance)
+{
+ Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetSlideGraph(GetMasterSlide(inSlide));
+ m_SlideGraphCore->AssociateInstance(theGraph, inSlide, inInstance);
+ GetSignalSender()->SendInstanceAssociated(inSlide, inInstance);
+}
+
+Qt3DSDMSlideHandle SSlideSystem::GetAssociatedSlide(Qt3DSDMInstanceHandle inInstance) const
+{
+ return m_SlideGraphCore->GetAssociatedGraph(inInstance).second;
+}
+
+/**
+ * This gets the instances that resides int the SlideGraph, i.e. all the instances in all the
+ *slides for this component/scene
+ * TODO rename this to make it more clear
+ */
+void SSlideSystem::GetAssociatedInstances(Qt3DSDMSlideHandle inMaster,
+ TSlideInstancePairList &outAssociations) const
+{
+ m_SlideGraphCore->GetAssociatedInstances(
+ m_SlideGraphCore->GetSlideGraph(GetMasterSlide(inMaster)), outAssociations);
+}
+
+/**
+ * Gets all the instances in this slide
+ */
+void SSlideSystem::GetAssociatedInstances(Qt3DSDMSlideHandle inSlide,
+ TInstanceHandleList &outAssociations) const
+{
+ Qt3DSDMSlideHandle theMasterSlide = GetMasterSlide(inSlide);
+ TSlideInstancePairList theGraphInstances;
+ m_SlideGraphCore->GetAssociatedInstances(m_SlideGraphCore->GetSlideGraph(theMasterSlide),
+ theGraphInstances);
+ for (TSlideInstancePairList::const_iterator theIter = theGraphInstances.begin();
+ theIter != theGraphInstances.end(); ++theIter) {
+ if (theIter->first == inSlide || theIter->first == theMasterSlide) {
+ // in the current slide or master slide
+ outAssociations.push_back(theIter->second);
+ }
+ }
+}
+
+void DeleteInstanceIfExistsAsProperty(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, TSlideCorePtr inSlideCore,
+ TPropertyInstanceInfoPtr inPropertyInfoPtr,
+ TDataCorePtr inDataCore)
+{
+ SValue theValue;
+ if (inSlideCore->GetSpecificInstancePropertyValue(inSlide, inInstance, inProperty, theValue)) {
+ Qt3DSDMInstanceHandle theInstance(inPropertyInfoPtr->GetInstanceForProperty(theValue));
+ if (theInstance.Valid())
+ inDataCore->DeleteInstance(theInstance);
+ }
+}
+
+void SSlideSystem::LinkProperty(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty)
+{
+ Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetAssociatedGraph(inInstance).first;
+ Qt3DSDMSlideHandle theSlide = m_SlideGraphCore->GetGraphRoot(theGraph);
+ TPropertyHandlePropertyInfoPairList::const_iterator theFind =
+ find_if<TPropertyHandlePropertyInfoPairList::const_iterator>(
+ m_PropertyInfoPairList, std::bind(PropertyHandlePairEquals,
+ std::placeholders::_1, inProperty));
+ if (theFind != m_PropertyInfoPairList.end()) {
+ TSlideHandleList theChildren;
+ m_SlideCore->GetChildSlides(theSlide, theChildren);
+ do_all(theChildren, std::bind(DeleteInstanceIfExistsAsProperty, std::placeholders::_1, inInstance,
+ inProperty, m_SlideCore, theFind->second, m_DataCore));
+ }
+ m_SlideCore->ClearChildrenPropertyValues(theSlide, inInstance, inProperty);
+ GetSignalSender()->SendPropertyLinked(theSlide, inInstance, inProperty);
+}
+
+void ClearPropertyValueIfLinked(Qt3DSDMSlideHandle inMaster, const TSlideHandleList &inChildren,
+ Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
+ TSlideCorePtr inSlideCore)
+{
+ if (inChildren.empty())
+ return;
+
+ if (inSlideCore->ContainsProperty(inChildren.at(0), inInstance,
+ inProperty)) // if property is linked,
+ inSlideCore->ClearChildrenPropertyValues(inMaster, inInstance,
+ inProperty); // get it off non-master slides
+}
+
+void SetReferencedEntryValue(Qt3DSDMSlideHandle inMaster, Qt3DSDMSlideHandle inDestSlide,
+ TPropertyInstanceInfoPtr inInfo, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ Qt3DSDMInstanceHandle inReferencedInstance, TSlideCorePtr inSlideCore)
+{
+ SValue theNewValue(
+ inInfo->CreateInstanceForProperty(inMaster, inDestSlide, inReferencedInstance));
+ inSlideCore->ForceSetInstancePropertyValue(inDestSlide, inInstance, inProperty, theNewValue);
+}
+
+void SSlideSystem::UnlinkProperty(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty)
+{
+ Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetAssociatedGraph(inInstance).first;
+ Qt3DSDMSlideHandle theSlide = m_SlideGraphCore->GetGraphRoot(theGraph);
+ SValue theValue;
+ SValue theTempValue;
+ if (!m_SlideCore->GetInstancePropertyValue(theSlide, inInstance, inProperty, theValue)) {
+ if (!m_PropertySystem->GetInstancePropertyValue(inInstance, inProperty, theTempValue))
+ throw PropertyLinkError(L"");
+ theValue = theTempValue.toOldSkool();
+ }
+
+ m_SlideCore->ForceSetInstancePropertyValue(theSlide, inInstance, inProperty, theValue);
+ TSlideHandleList theChildren;
+ m_SlideCore->GetChildSlides(theSlide, theChildren);
+
+ Qt3DSDMInstanceHandle theReferenced;
+ TPropertyHandlePropertyInfoPairList::const_iterator theFind =
+ find_if<TPropertyHandlePropertyInfoPairList::const_iterator>(
+ m_PropertyInfoPairList, std::bind(PropertyHandlePairEquals,
+ std::placeholders::_1, inProperty));
+ TPropertyInstanceInfoPtr theInfo;
+ if (theFind != m_PropertyInfoPairList.end()) {
+ theInfo = theFind->second;
+ theReferenced = theInfo->GetInstanceForProperty(theValue);
+ }
+ if (theReferenced.Valid()) {
+ TPropertyHandleList theProperties;
+ m_PropertySystem->GetAggregateInstanceProperties(
+ theReferenced,
+ theProperties); // TODO: We should make the method return the custom properties.
+ // Remove the property instance's unlinked properties from non-master slides.
+ do_all(theProperties,
+ std::bind(ClearPropertyValueIfLinked, theSlide, std::cref(theChildren),
+ theReferenced, std::placeholders::_1, m_SlideCore));
+ // Remove all property values from the children from that instance.
+ do_all(theChildren, std::bind(SetReferencedEntryValue, theSlide,
+ std::placeholders::_1, theInfo, inInstance,
+ inProperty, theReferenced, m_SlideCore));
+ } else {
+ do_all(theChildren, std::bind(&ISlideCore::ForceSetInstancePropertyValue, m_SlideCore,
+ std::placeholders::_1,
+ inInstance, inProperty, theValue));
+ do_all(theChildren,
+ std::bind(CopyAnimationIfExist, theSlide, std::placeholders::_1, make_pair(inInstance, inProperty),
+ m_PropertySystem, m_AnimationCore));
+ }
+ GetSignalSender()->SendPropertyUnlinked(theSlide, inInstance, inProperty);
+}
+
+bool SSlideSystem::IsPropertyLinked(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inInstance);
+ Qt3DSDMSlideGraphHandle theGraph = theGraphSlidePair.first;
+ if (!theGraph.Valid())
+ return false;
+
+ Qt3DSDMSlideHandle theSlide = m_SlideGraphCore->GetGraphRoot(theGraph);
+ if (theGraphSlidePair.second != theSlide)
+ return false;
+
+ TSlideHandleList theChildren;
+ m_SlideCore->GetChildSlides(theSlide, theChildren);
+ bool containsProperty = false;
+ for (TSlideHandleList::iterator theIter = theChildren.begin();
+ theIter != theChildren.end() && !containsProperty; ++theIter) {
+ containsProperty =
+ containsProperty || m_SlideCore->ContainsProperty(*theIter, inInstance, inProperty);
+ }
+
+ return !containsProperty;
+}
+
+bool SSlideSystem::CanPropertyBeLinked(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inInstance);
+ if (theGraphSlidePair.first.Valid()
+ && theGraphSlidePair.second == m_SlideGraphCore->GetGraphRoot(theGraphSlidePair.first))
+ return true;
+ return false;
+}
+
+bool SSlideSystem::GetSlidePropertyValue(size_t inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue)
+{
+ TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inInstance);
+ Qt3DSDMSlideGraphHandle theGraph = theGraphSlidePair.first;
+ if (!theGraph.Valid())
+ return false;
+ Qt3DSDMSlideHandle theSlide = GetSlideByIndex(m_SlideGraphCore->GetGraphRoot(theGraph), inSlide);
+ if (!theSlide.Valid())
+ return false;
+ return m_SlideCore->GetSpecificInstancePropertyValue(theSlide, inInstance, inProperty,
+ outValue);
+}
+
+void AddEntriesToHash(const TSlideEntryList &theSlideEntries, TSlideEntryHash &theEntryHash,
+ TInstancePropertyPairList &outProperties)
+{
+ for (size_t idx = 0, end = theSlideEntries.size(); idx < end; ++idx) {
+ const TSlideEntry &theEntry(theSlideEntries[idx]);
+ pair<TSlideEntryHash::iterator, bool> insertRecord(theEntryHash.insert(
+ make_pair(TSlideInstancePropertyPair(get<0>(theEntry), get<1>(theEntry)),
+ SInternValue::ISwearThisHasAlreadyBeenInternalized(get<2>(theEntry)))));
+ if (insertRecord.second)
+ outProperties.push_back(insertRecord.first->first);
+ }
+}
+
+void SSlideSystem::GetUnionOfProperties(Qt3DSDMSlideHandle inSlide1, Qt3DSDMSlideHandle inSlide2,
+ TInstancePropertyPairList &outProperties) const
+{
+ TSlideEntryHash theEntryHash;
+ TSlideEntryList theSlideEntries;
+ if (m_SlideCore->IsSlide(inSlide1)) {
+ m_SlideCore->GetSlidePropertyEntries(inSlide1, theSlideEntries);
+ AddEntriesToHash(theSlideEntries, theEntryHash, outProperties);
+ }
+ if (m_SlideCore->IsSlide(inSlide2)) {
+ m_SlideCore->GetSlidePropertyEntries(inSlide2, theSlideEntries);
+ AddEntriesToHash(theSlideEntries, theEntryHash, outProperties);
+ }
+}
+
+void SSlideSystem::SetActiveSlide(Qt3DSDMSlideHandle inSlide)
+{
+ Qt3DSDMSlideHandle theMaster = GetMasterSlide(inSlide);
+ int theIndex = GetSlideIndex(inSlide);
+ SetActiveSlide(theMaster, theIndex);
+}
+
+Qt3DSDMSlideHandle SSlideSystem::GetAssociatedSlide(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inInstance);
+ Qt3DSDMSlideGraphHandle theGraph = theGraphSlidePair.first;
+ if (!theGraph.Valid())
+ return 0;
+ Qt3DSDMSlideHandle theSlide = m_SlideGraphCore->GetGraphActiveSlide(theGraph);
+ if (theSlide.Valid()) {
+ if (m_SlideCore->ContainsProperty(theSlide, inInstance, inProperty))
+ return theSlide;
+ theSlide = m_SlideCore->GetParentSlide(theSlide);
+ if (theSlide.Valid() && m_SlideCore->ContainsProperty(theSlide, inInstance, inProperty))
+ return theSlide;
+ return theGraphSlidePair.second;
+ }
+ return 0;
+}
+
+bool SSlideSystem::SlideValid(Qt3DSDMSlideHandle inSlide) const
+{
+ return m_SlideCore->HandleValid(inSlide);
+}
+
+int SSlideSystem::GetSlideIndex(Qt3DSDMSlideHandle inSlide) const
+{
+ Qt3DSDMSlideHandle theMaster = GetMasterSlide(inSlide);
+ if (inSlide.Valid() && inSlide != theMaster)
+ return m_SlideCore->GetChildIndex(theMaster, inSlide) + 1;
+ return 0;
+}
+
+int SSlideSystem::GetActiveSlideIndex(Qt3DSDMSlideHandle inMaster) const
+{
+ Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetSlideGraph(inMaster);
+ Qt3DSDMSlideHandle theActiveSlide = m_SlideGraphCore->GetGraphActiveSlide(theGraph);
+ if (theActiveSlide == inMaster)
+ return 0;
+ return GetSlideIndex(theActiveSlide);
+}
+
+Qt3DSDMSlideHandle SSlideSystem::GetActiveSlide(Qt3DSDMSlideHandle inMaster) const
+{
+ Qt3DSDMSlideGraphHandle theGraph = m_SlideGraphCore->GetSlideGraph(inMaster);
+ return m_SlideGraphCore->GetGraphActiveSlide(theGraph);
+}
+
+Qt3DSDMInstanceHandle SSlideSystem::GetSlideSelectedInstance(Qt3DSDMSlideHandle inSlide) const
+{
+ TIntIntMap::const_iterator theIter = m_SlideSelectedInstances.find(inSlide);
+ if (theIter != m_SlideSelectedInstances.end() && m_DataCore->IsInstance(theIter->second))
+ return theIter->second;
+ return 0;
+}
+
+void SSlideSystem::SetSlideSelectedInstance(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance)
+{
+ m_SlideSelectedInstances[inSlide] = inInstance;
+}
+
+void SSlideSystem::RegisterPropertyInstance(Qt3DSDMPropertyHandle inPropertyHandle,
+ TPropertyInstanceInfoPtr inPropertyInfo)
+{
+ m_PropertyInfoPairList.push_back(make_pair(inPropertyHandle, inPropertyInfo));
+}
+
+ISlideSystemSignalProvider *SSlideSystem::GetSignalProvider()
+{
+ return dynamic_cast<ISlideSystemSignalProvider *>(m_Signaller.get());
+}
+
+ISlideSystemSignalSender *SSlideSystem::GetSignalSender()
+{
+ return dynamic_cast<ISlideSystemSignalSender *>(m_Signaller.get());
+}
+
+qt3dsdm::Qt3DSDMSlideHandle SSlideSystem::GetApplicableSlide(Qt3DSDMInstanceHandle inHandle)
+{
+ TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inHandle);
+ if (!theGraphSlidePair.first.Valid())
+ return Qt3DSDMSlideHandle();
+
+ Qt3DSDMSlideHandle theMaster = m_SlideGraphCore->GetGraphRoot(theGraphSlidePair.first);
+ if (theGraphSlidePair.second != theMaster)
+ return theGraphSlidePair.second;
+
+ return theMaster;
+}
+
+qt3dsdm::Qt3DSDMSlideHandle SSlideSystem::GetApplicableSlide(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inHandle);
+ if (!theGraphSlidePair.first.Valid())
+ return Qt3DSDMSlideHandle();
+
+ Qt3DSDMSlideHandle theMaster = m_SlideGraphCore->GetGraphRoot(theGraphSlidePair.first);
+ if (theGraphSlidePair.second != theMaster)
+ return theGraphSlidePair.second;
+
+ Qt3DSDMSlideHandle theActive = m_SlideGraphCore->GetGraphActiveSlide(theGraphSlidePair.first);
+ if (m_SlideCore->ContainsProperty(theActive, inHandle, inProperty))
+ return theActive;
+
+ return theMaster;
+}
+
+bool SSlideSystem::GetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const
+{
+ return m_SlideCore->GetInstancePropertyValue(inSlide, inInstance, inProperty, outValue);
+}
+
+bool SSlideSystem::GetCanonicalInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inInstance);
+ if (theGraphSlidePair.first.Valid()) {
+ // Check to see if the object is on the master slide;
+ if (theGraphSlidePair.second == m_SlideGraphCore->GetGraphRoot(theGraphSlidePair.first)) {
+ TSlideHandleList theChildren;
+ m_SlideCore->GetChildSlides(theGraphSlidePair.second, theChildren);
+ // See if the value exists on slide 1.
+ if (!theChildren.empty()
+ && m_SlideCore->GetSpecificInstancePropertyValue(theChildren.at(0), inInstance,
+ inProperty, outValue))
+ return true;
+ }
+
+ if (m_SlideCore->GetSpecificInstancePropertyValue(theGraphSlidePair.second, inInstance,
+ inProperty, outValue))
+ return true;
+ }
+ return false;
+}
+
+void SSlideSystem::ForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ m_SlideCore->ForceSetInstancePropertyValue(inSlide, inInstance, inProperty, inValue);
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/SlideSystem.h b/src/Runtime/ogl-runtime/src/dm/systems/SlideSystem.h
new file mode 100644
index 00000000..1ea3f816
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/SlideSystem.h
@@ -0,0 +1,179 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef SLIDESYSTEMH
+#define SLIDESYSTEMH
+#include "Qt3DSDMDataCore.h"
+#include "Qt3DSDMSlideCore.h"
+#include "Qt3DSDMSlideGraphCore.h"
+#include "Qt3DSDMTransactions.h"
+#include "Qt3DSDMSlides.h"
+#include "Qt3DSDMAnimation.h"
+#include "StudioPropertySystem.h"
+#include "SignalsImpl.h"
+
+/**
+ * The systems aggregate the various cores and provide further information or
+ * integrity checking taking the various cores into account.
+ */
+
+namespace qt3dsdm {
+
+typedef std::pair<Qt3DSDMPropertyHandle, TPropertyInstanceInfoPtr> TPropertyHandlePropertyInfoPair;
+typedef std::vector<TPropertyHandlePropertyInfoPair> TPropertyHandlePropertyInfoPairList;
+/**
+ * Provides more thorough checking and will return an appropriate
+ * slide graph when calling GetSlideGraph
+ */
+struct SSlideSystem : public ISlideSystem
+{
+ Q_DISABLE_COPY(SSlideSystem)
+
+ TDataCorePtr m_DataCore; // TODO: We might want to throw this away and use the PropertySystem,
+ // unless we have a clean seperate of IPropertySystem and IDataCore
+ TPropertySystemPtr m_PropertySystem;
+ TSlideCorePtr m_SlideCore;
+ TSlideGraphCorePtr m_SlideGraphCore;
+ TAnimationCorePtr m_AnimationCore;
+ Qt3DSDMInstanceHandle m_SlideInstance;
+ Qt3DSDMPropertyHandle m_ComponentGuid;
+ std::shared_ptr<ISignalItem> m_Signaller;
+ TPropertyHandlePropertyInfoPairList m_PropertyInfoPairList;
+ typedef std::unordered_map<int, int> TIntIntMap;
+ TIntIntMap m_SlideSelectedInstances;
+
+ SSlideSystem(TDataCorePtr inDataCore, TSlideCorePtr inSlideCore,
+ TSlideGraphCorePtr inSlideGraphCore, TAnimationCorePtr inAnimationCore,
+ Qt3DSDMInstanceHandle inSlideInstance,
+ Qt3DSDMPropertyHandle inComponentGuidProperty);
+
+ void SetPropertySystem(TPropertySystemPtr inPropertySystem);
+
+ Qt3DSDMSlideHandle CreateMasterSlide() override;
+ Qt3DSDMSlideHandle CreateSlide(Qt3DSDMSlideHandle inMaster, int inIndex = -1) override;
+ Qt3DSDMSlideHandle DuplicateSlide(Qt3DSDMSlideHandle inSourceSlide, int inDestIndex = -1) override;
+ Qt3DSDMSlideHandle GetMasterSlide(Qt3DSDMSlideHandle inSlide) const override;
+ bool IsMasterSlide(Qt3DSDMSlideHandle inSlide) const override;
+ Qt3DSDMSlideHandle GetMasterSlideByComponentGuid(SLong4 inGuid) const override;
+ // Indexes are 1 based. Index 0 refers to the master slide; you can't delete this.
+ void DeleteSlideByIndex(Qt3DSDMSlideHandle inMaster, size_t inIndex) override;
+ void GetSlideReferencedInstances(Qt3DSDMSlideHandle inMaster, size_t inIndex,
+ TInstanceHandleList &outReferencedInstances) override;
+ Qt3DSDMSlideHandle GetSlideByIndex(Qt3DSDMSlideHandle inMaster, size_t inIndex) const override;
+ void SetActiveSlide(Qt3DSDMSlideHandle inMaster, size_t inIndex) override;
+ size_t GetSlideCount(Qt3DSDMSlideHandle inMaster) const override;
+ void RearrangeSlide(Qt3DSDMSlideHandle inMaster, size_t inOldIndex, size_t inNewIndex) override;
+
+ void SetComponentSeconds(Qt3DSDMSlideHandle inSlide, float inSeconds) override;
+ float GetComponentSeconds(Qt3DSDMSlideHandle inSlide) const override;
+ long GetComponentSecondsLong(Qt3DSDMSlideHandle inSlide) const override;
+ // For any given instance, find the current seconds via backtracking to the graph, finding the
+ // active
+ // slide, and return.
+ long GetComponentSecondsLong(Qt3DSDMInstanceHandle inInstance) const override;
+ virtual SInstanceSlideInformation
+ GetInstanceSlideInformation(Qt3DSDMInstanceHandle inInstance) const override;
+ /**
+ * Use the instance for storing information such as name, or the GUID of the object
+ * this slide links to.
+ */
+ Qt3DSDMInstanceHandle GetSlideInstance(Qt3DSDMSlideHandle inInstance) const override;
+ /**
+ * Reverse lookup into the slide system so you can match slides to instances.
+ */
+ Qt3DSDMSlideHandle GetSlideByInstance(Qt3DSDMInstanceHandle inInstance) const override;
+
+ /**
+ * Slide may be either a master slide or a normal slide. This will associate this instance
+ * with this set of slides. Property lookups (using the above IInstancePropertyCore interface)
+ * will now run through the slide set before hitting the main data core database.
+ */
+ void AssociateInstanceWithSlide(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance) override;
+ Qt3DSDMSlideHandle GetAssociatedSlide(Qt3DSDMInstanceHandle inInstance) const override;
+ void GetAssociatedInstances(
+ Qt3DSDMSlideHandle inMaster,
+ std::vector<std::pair<Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle>> &outAssociations) const override;
+ void GetAssociatedInstances(Qt3DSDMSlideHandle inSlide,
+ TInstanceHandleList &outAssociations) const override;
+ void LinkProperty(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty) override;
+ void UnlinkProperty(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty) override;
+ bool IsPropertyLinked(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const override;
+ bool CanPropertyBeLinked(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const override;
+ bool GetSlidePropertyValue(size_t inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) override;
+ void GetUnionOfProperties(Qt3DSDMSlideHandle inSlide1, Qt3DSDMSlideHandle inSlide,
+ TInstancePropertyPairList &outProperties) const override;
+
+ void SetActiveSlide(Qt3DSDMSlideHandle inSlide) override;
+ Qt3DSDMSlideHandle GetAssociatedSlide(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const override;
+
+ bool SlideValid(Qt3DSDMSlideHandle inSlide) const override;
+ int GetSlideIndex(Qt3DSDMSlideHandle inSlide) const override;
+ int GetActiveSlideIndex(Qt3DSDMSlideHandle inMaster) const override;
+ Qt3DSDMSlideHandle GetActiveSlide(Qt3DSDMSlideHandle inMaster) const override;
+ Qt3DSDMInstanceHandle GetSlideSelectedInstance(Qt3DSDMSlideHandle inSlide) const override;
+ void SetSlideSelectedInstance(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance) override;
+
+ Qt3DSDMSlideHandle GetApplicableSlide(Qt3DSDMInstanceHandle inHandle) override;
+ Qt3DSDMSlideHandle GetApplicableSlide(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty) override;
+
+ bool GetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const override;
+ bool GetCanonicalInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const override;
+ void ForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) override;
+
+ void RegisterPropertyInstance(Qt3DSDMPropertyHandle inPropertyHandle,
+ TPropertyInstanceInfoPtr inPropertyInfo) override;
+
+ virtual ISlideSystemSignalProvider *GetSignalProvider();
+
+private:
+ virtual ISlideSystemSignalSender *GetSignalSender();
+ // helper method
+ void InsertEntryAndPropertyInstance(const TSlideEntry &inEntry,
+ TInstanceHandleList &inInstances,
+ Qt3DSDMSlideHandle inSlide);
+ void DeleteReferencedInstances(Qt3DSDMSlideHandle inSlide);
+ void GetReferencedInstances(Qt3DSDMSlideHandle inSlide,
+ TInstanceHandleList &outReferencedInstances);
+};
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/StandardExtensions.h b/src/Runtime/ogl-runtime/src/dm/systems/StandardExtensions.h
new file mode 100644
index 00000000..a9946002
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/StandardExtensions.h
@@ -0,0 +1,196 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef STANDARDEXTENSIONSH
+#define STANDARDEXTENSIONSH
+#include <algorithm>
+
+namespace qt3dsdm {
+template <typename TContainer, typename TPred>
+inline void erase_if(TContainer &inContainer, TPred inPred)
+{
+ inContainer.erase(std::remove_if(inContainer.begin(), inContainer.end(), inPred),
+ inContainer.end());
+}
+
+template <typename TRetType, typename TContainerType, typename TPred>
+inline TRetType find_if(TContainerType &inContainer, TPred inPred)
+{
+ return std::find_if(inContainer.begin(), inContainer.end(), inPred);
+}
+
+template <typename TContainer, typename TTransaction>
+inline void do_all(TContainer &inContainer, TTransaction inTransaction)
+{
+ std::for_each(inContainer.begin(), inContainer.end(), inTransaction);
+}
+
+template <typename TNumType, typename TTransaction>
+inline void do_times(TNumType numberOfTimes, TTransaction inTransaction)
+{
+ for (TNumType index = 0; index < numberOfTimes; ++index)
+ inTransaction(index);
+}
+
+template <typename TCountFunc, typename TItemByIndexFunc, typename TTransaction>
+inline void for_each_item(TCountFunc inCountFunc, TItemByIndexFunc inItemByIndex,
+ TTransaction inTransaction)
+{
+ int theEnd = static_cast<int>(inCountFunc());
+ for (int index = 0; index < theEnd; ++index)
+ inTransaction(inItemByIndex(index));
+}
+
+template <typename TContainerType, typename TItemType>
+inline void insert_unique(TContainerType &inContainer, const TItemType &inItem)
+{
+ if (find(inContainer.begin(), inContainer.end(), inItem) == inContainer.end())
+ inContainer.insert(inContainer.end(), inItem);
+}
+
+template <typename TContainerType, typename TItemType, typename TPred>
+inline void insert_unique_if(TContainerType &inContainer, const TItemType &inItem, TPred inPred)
+{
+ if (find_if(inContainer.begin(), inContainer.end(), inPred) == inContainer.end())
+ inContainer.insert(inContainer.end(), inItem);
+}
+
+template <typename TItemType>
+inline TItemType identity(const TItemType &inValue)
+{
+ return inValue;
+}
+
+template <typename TItemType, typename TOutContainerType>
+inline void transformv_all(const std::vector<TItemType> &inSource, TOutContainerType &outDest)
+{
+ outDest.resize(inSource.size());
+ std::transform(inSource.begin(), inSource.end(), outDest.begin(), identity<TItemType>);
+}
+
+template <typename TContainerType, typename Pred>
+inline bool exists(TContainerType &inContainer, Pred inPredicate)
+{
+ return std::find_if(inContainer.begin(), inContainer.end(), inPredicate) != inContainer.end();
+}
+
+// Always return a default value (useful for default true for false)
+template <typename TRetType>
+inline TRetType always(TRetType inValue)
+{
+ return inValue;
+}
+
+template <typename TRetType, typename TIgnoreType>
+inline TRetType always_ignore(TIgnoreType, TRetType inValue)
+{
+ return inValue;
+}
+
+template <typename TArgument, typename TTransaction, typename TPredicate>
+inline void predicate_apply(TArgument inArgument, TTransaction inTransaction,
+ TPredicate inPredicate)
+{
+ if (inPredicate(inArgument))
+ inTransaction(inArgument);
+}
+
+template <typename TItemType>
+inline void assign_to(const TItemType &inSource, TItemType &inDest)
+{
+ inDest = inSource;
+}
+
+template <typename TPredType, typename TArgType>
+bool complement(TPredType inPredicate, TArgType inArgument)
+{
+ return !(inPredicate(inArgument));
+}
+
+template <typename TItemType, typename TPredicate>
+void insert_or_update(const TItemType &inItem, std::vector<TItemType> &inItems,
+ TPredicate inPredicate)
+{
+ typename std::vector<TItemType>::iterator theIter =
+ find_if<typename std::vector<TItemType>::iterator>(inItems, inPredicate);
+ if (theIter == inItems.end())
+ inItems.push_back(inItem);
+ else
+ *theIter = inItem;
+}
+
+template <typename TItemType>
+typename std::vector<TItemType>::iterator binary_sort_find(std::vector<TItemType> &inItems,
+ const TItemType &inItem)
+{
+ typedef typename std::vector<TItemType>::iterator TIterType;
+ TIterType insertPos = std::lower_bound(inItems.begin(), inItems.end(), inItem);
+ if (insertPos != inItems.end() && *insertPos == inItem)
+ return insertPos;
+ return inItems.end();
+}
+
+template <typename TItemType, typename TPredicate>
+std::pair<typename std::vector<TItemType>::iterator, bool>
+binary_sort_insert_unique(std::vector<TItemType> &inItems, const TItemType &inItem,
+ TPredicate inPredicate)
+{
+ typedef typename std::vector<TItemType>::iterator TIterType;
+ TIterType insertPos = std::lower_bound(inItems.begin(), inItems.end(), inItem, inPredicate);
+ // OK, insertPos can equal begin, it can equal end, or somewhere in between.
+ // If it doesn't equal end, then we may be pointing at the object and we let
+ // the caller figure out what to do. Else we insert
+ if (insertPos != inItems.end() && *insertPos == inItem)
+ return std::make_pair(insertPos, false);
+ size_t diff = insertPos - inItems.begin();
+ inItems.insert(insertPos, inItem);
+ return std::make_pair(inItems.begin() + diff, true);
+}
+
+template <typename TItemType>
+std::pair<typename std::vector<TItemType>::iterator, bool>
+binary_sort_insert_unique(std::vector<TItemType> &inItems, const TItemType &inItem)
+{
+ return binary_sort_insert_unique(inItems, inItem, std::less<TItemType>());
+}
+
+template <typename TItemType>
+bool binary_sort_erase(std::vector<TItemType> &inItems, const TItemType &inItem)
+{
+ typedef typename std::vector<TItemType>::iterator TIterType;
+ TIterType insertPos = binary_sort_find(inItems, inItem);
+ if (insertPos != inItems.end()) {
+ inItems.erase(insertPos);
+ return true;
+ }
+ return false;
+}
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/StudioAnimationSystem.cpp b/src/Runtime/ogl-runtime/src/dm/systems/StudioAnimationSystem.cpp
new file mode 100644
index 00000000..2b788880
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/StudioAnimationSystem.cpp
@@ -0,0 +1,610 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "StudioAnimationSystem.h"
+#include "StudioPropertySystem.h"
+
+using namespace std;
+
+namespace qt3dsdm {
+
+bool AnimationFloatPairContainsAnimation(Qt3DSDMAnimationHandle inAnimation,
+ const TAnimationFloatPair &inPair)
+{
+ return inAnimation == inPair.first;
+}
+
+CStudioAnimationSystem::CStudioAnimationSystem(TPropertySystemPtr inPropertySystem,
+ TSlideSystemPtr inSlideSystem,
+ TSlideCorePtr inSlideCore,
+ TSlideGraphCorePtr inSlideGraphCore,
+ TAnimationCorePtr inAnimationCore)
+ : m_PropertySystem(inPropertySystem)
+ , m_SlideSystem(inSlideSystem)
+ , m_SlideCore(inSlideCore)
+ , m_SlideGraphCore(inSlideGraphCore)
+ , m_AnimationCore(inAnimationCore)
+ , m_AutoKeyframe(false)
+ , m_SmoothInterpolation(false)
+{
+ IAnimationCoreSignalProvider *theAnimationSignals =
+ dynamic_cast<IAnimationCoreSignalProvider *>(m_AnimationCore.get());
+ m_Connections.push_back(theAnimationSignals->ConnectAnimationDeleted(
+ std::bind(&CStudioAnimationSystem::OnAnimationDeleted, this, std::placeholders::_1)));
+}
+
+void CStudioAnimationSystem::OnAnimationDeleted(Qt3DSDMAnimationHandle inAnimation)
+{
+ ClearTemporaryAnimationValues(inAnimation);
+}
+
+void CStudioAnimationSystem::ClearTemporaryAnimationValues()
+{
+ m_AnimationFloatPairs.clear();
+}
+
+void CStudioAnimationSystem::ClearTemporaryAnimationValues(Qt3DSDMAnimationHandle inAnimation)
+{
+ erase_if(m_AnimationFloatPairs,
+ std::bind(AnimationFloatPairContainsAnimation, inAnimation, std::placeholders::_1));
+}
+
+inline bool IsAnimationInfoEqual(const SAnimationInfo &inInfo, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty)
+{
+ if (inInfo.m_Slide == inSlide && inInfo.m_Instance == inInstance
+ && inInfo.m_Property == inProperty)
+ return true;
+ return false;
+}
+inline bool IsAnimationInfoEqual(const SAnimationInfo &inInfo, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
+ size_t inIndex)
+{
+ if (IsAnimationInfoEqual(inInfo, inSlide, inInstance, inProperty) && inInfo.m_Index == inIndex)
+ return true;
+ return false;
+}
+
+inline bool ApplyIfAnimationMatches(TAnimationFloatPair inAnimationFloatPair,
+ Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ TAnimationCorePtr inAnimationCore, SValue &outValue)
+{
+ SAnimationInfo theInfo = inAnimationCore->GetAnimationInfo(inAnimationFloatPair.first);
+ if (IsAnimationInfoEqual(theInfo, inSlide, inInstance, inProperty)) {
+ SetAnimationValue(inAnimationFloatPair.second, theInfo.m_Index, outValue);
+ return true;
+ }
+ return false;
+}
+
+void CStudioAnimationSystem::OverrideChannelIfAnimated(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ size_t inIndex, float inSeconds,
+ bool &ioAnimated, SValue &outValue) const
+{
+ Qt3DSDMAnimationHandle theAnimation =
+ m_AnimationCore->GetAnimation(inSlide, inInstance, inProperty, inIndex);
+ if (theAnimation.Valid() && m_AnimationCore->GetKeyframeCount(theAnimation)) {
+ float theValue = m_AnimationCore->EvaluateAnimation(theAnimation, inSeconds);
+ SetAnimationValue(theValue, inIndex, outValue);
+ ioAnimated |= true;
+ }
+}
+
+// Value must be *primed* first.
+bool CStudioAnimationSystem::GetAnimatedInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ bool retval = false;
+
+ tuple<bool, size_t> arity = GetVariantAnimatableAndArity(outValue);
+ if (get<0>(arity)) {
+ for (size_t index = 0; index < m_AnimationFloatPairs.size(); ++index)
+ retval |= ApplyIfAnimationMatches(m_AnimationFloatPairs.at(index), inSlide, inInstance,
+ inProperty, m_AnimationCore, outValue);
+ }
+
+ if (!retval) {
+ bool animatable;
+ size_t numChannels;
+ bool animated = false;
+
+ std::tie(animatable, numChannels) = GetVariantAnimatableAndArity(outValue);
+ if (animatable) {
+ TGraphSlidePair theGraphSlidePair = m_SlideGraphCore->GetAssociatedGraph(inInstance);
+ float theSeconds = m_SlideCore->GetSlideTime(
+ m_SlideGraphCore->GetGraphActiveSlide(theGraphSlidePair.first));
+
+ do_times(numChannels, std::bind(&CStudioAnimationSystem::OverrideChannelIfAnimated,
+ this, inSlide, inInstance, inProperty,
+ std::placeholders::_1, theSeconds,
+ std::ref(animated), std::ref(outValue)));
+ }
+
+ if (animated)
+ retval = true;
+ }
+
+ return retval;
+}
+
+bool KeyframeNear(const TKeyframe &inKeyframe, float inSeconds)
+{
+ return fabs(KeyframeTime(inKeyframe) - inSeconds) < .01;
+}
+Qt3DSDMKeyframeHandle CreateKeyframeExplicit(Qt3DSDMAnimationHandle inAnimation, float inValue,
+ float inSeconds, TAnimationCorePtr inAnimationCore,
+ float inEaseIn, float inEaseOut)
+{
+ TKeyframeHandleList theKeyframes;
+ float theValue = inValue;
+ inAnimationCore->GetKeyframes(inAnimation, theKeyframes);
+ function<TKeyframe(Qt3DSDMKeyframeHandle)> theConverter(
+ std::bind(&IAnimationCore::GetKeyframeData, inAnimationCore, std::placeholders::_1));
+
+ TKeyframeHandleList::iterator theFind =
+ std::find_if(theKeyframes.begin(), theKeyframes.end(),
+ [theConverter, inSeconds](const Qt3DSDMKeyframeHandle &handle)
+ { return KeyframeNear(theConverter(handle), inSeconds); });
+
+ float theEaseIn = inEaseIn;
+ float theEaseOut = inEaseOut;
+ Qt3DSDMKeyframeHandle theKeyframe;
+ if (theFind != theKeyframes.end()) {
+ theKeyframe = *theFind;
+
+ inAnimationCore->SetKeyframeData(
+ theKeyframe, CreateEaseInEaseOutKeyframe(inSeconds, theValue, theEaseIn, theEaseOut));
+ } else {
+ theKeyframe = inAnimationCore->InsertKeyframe(
+ inAnimation, CreateEaseInEaseOutKeyframe(inSeconds, theValue, theEaseIn, theEaseOut));
+ }
+ return theKeyframe;
+}
+
+Qt3DSDMKeyframeHandle CreateKeyframe(Qt3DSDMAnimationHandle inAnimation, const SValue &inValue,
+ float inSeconds, TAnimationCorePtr inAnimationCore,
+ float inEaseIn, float inEaseOut)
+{
+ SAnimationInfo theInfo(inAnimationCore->GetAnimationInfo(inAnimation));
+ return CreateKeyframeExplicit(inAnimation, GetAnimationValue(theInfo.m_Index, inValue),
+ inSeconds, inAnimationCore, inEaseIn, inEaseOut);
+}
+
+void MaybeAddAnimation(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, Qt3DSDMAnimationHandle inAnimation,
+ TAnimationCorePtr inAnimationCore, TAnimationHandleList &outAnimations)
+{
+ SAnimationInfo theInfo(inAnimationCore->GetAnimationInfo(inAnimation));
+ if (IsAnimationInfoEqual(theInfo, inSlide, inInstance, inProperty))
+ outAnimations.push_back(inAnimation);
+}
+
+bool SortAnimationHandlesByIndex(Qt3DSDMAnimationHandle lhs, Qt3DSDMAnimationHandle rhs,
+ TAnimationCorePtr inCore)
+{
+ return inCore->GetAnimationInfo(lhs).m_Index < inCore->GetAnimationInfo(rhs).m_Index;
+}
+
+void GetPresentAnimations(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const TAnimationFloatPairList &inAnimationPairs,
+ TAnimationCorePtr inAnimationCore, TAnimationHandleList &outAnimations)
+{
+ function<void(Qt3DSDMAnimationHandle)> theOperation(
+ std::bind(MaybeAddAnimation, inSlide, inInstance, inProperty,
+ std::placeholders::_1, inAnimationCore,
+ std::ref(outAnimations)));
+
+ for (auto animation : inAnimationPairs) {
+ MaybeAddAnimation(inSlide, inInstance, inProperty, animation.first, inAnimationCore,
+ std::ref(outAnimations));
+ }
+
+ if (outAnimations.empty()) {
+ TAnimationHandleList theAnimationHandles;
+ inAnimationCore->GetAnimations(theAnimationHandles);
+ do_all(theAnimationHandles, theOperation);
+ }
+ std::sort(outAnimations.begin(), outAnimations.end(),
+ std::bind(SortAnimationHandlesByIndex,
+ std::placeholders::_1, std::placeholders::_2, inAnimationCore));
+}
+
+void CreateAnimationAndAdd(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex,
+ TAnimationCorePtr inAnimationCore, TAnimationHandleList &outAnimations)
+{
+ outAnimations.push_back(inAnimationCore->CreateAnimation(
+ inSlide, inInstance, inProperty, inIndex, EAnimationTypeEaseInOut, false));
+}
+
+bool AnimationValueDiffers(Qt3DSDMAnimationHandle inAnimation, const SValue &inValue,
+ float inSeconds, TAnimationCorePtr inAnimationCore)
+{
+ SAnimationInfo theInfo(inAnimationCore->GetAnimationInfo(inAnimation));
+ if (inAnimationCore->GetKeyframeCount(inAnimation) == 0)
+ return true; // currently there is no keyframe, so return true
+ float theValue = GetAnimationValue(theInfo.m_Index, inValue);
+ float theAnimatedValue = inAnimationCore->EvaluateAnimation(inAnimation, inSeconds);
+ return fabs(theValue - theAnimatedValue) > .001;
+}
+
+bool AnimationExistsInPresentAnimations(const TAnimationFloatPair &inAnimation,
+ TAnimationHandleList &inPresentAnimations)
+{
+ return exists(inPresentAnimations,
+ std::bind(equal_to<Qt3DSDMAnimationHandle>(), inAnimation.first,
+ std::placeholders::_1));
+}
+
+void DoKeyframeProperty(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue, float inTimeInSecs,
+ bool inDoDiffValue, TAnimationCorePtr inAnimationCore,
+ TAnimationFloatPairList &inAnimationFloatPairs, float inEaseIn,
+ float inEaseOut)
+{
+ tuple<bool, size_t> arity = GetVariantAnimatableAndArity(inValue);
+ TAnimationHandleList thePresentAnimations;
+ GetPresentAnimations(inSlide, inInstance, inProperty, std::cref(inAnimationFloatPairs),
+ inAnimationCore, thePresentAnimations);
+ if (thePresentAnimations.empty())
+ do_times(get<1>(arity), std::bind(CreateAnimationAndAdd, inSlide, inInstance, inProperty,
+ std::placeholders::_1,
+ inAnimationCore, std::ref(thePresentAnimations)));
+ if (!inDoDiffValue
+ || find_if(thePresentAnimations.begin(), thePresentAnimations.end(),
+ std::bind(AnimationValueDiffers,
+ std::placeholders::_1, inValue, inTimeInSecs, inAnimationCore))
+ != thePresentAnimations.end()) {
+ do_all(thePresentAnimations,
+ std::bind(CreateKeyframe, std::placeholders::_1,
+ std::cref(inValue), inTimeInSecs, inAnimationCore,
+ inEaseIn, inEaseOut));
+ erase_if(inAnimationFloatPairs, std::bind(AnimationExistsInPresentAnimations,
+ std::placeholders::_1,
+ std::ref(thePresentAnimations)));
+ }
+}
+
+void DoKeyframeProperty(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue, bool inDoDiffValue,
+ TAnimationCorePtr inAnimationCore, TSlideGraphCorePtr inSlideGraphCore,
+ TSlideCorePtr inSlideCore, TAnimationFloatPairList &inAnimationFloatPairs,
+ float inEaseIn, float inEaseOut)
+{
+ TGraphSlidePair theGraphSlidePair = inSlideGraphCore->GetAssociatedGraph(inInstance);
+ float theCurrentTime =
+ inSlideCore->GetSlideTime(inSlideGraphCore->GetGraphActiveSlide(theGraphSlidePair.first));
+ DoKeyframeProperty(inSlide, inInstance, inProperty, inValue, theCurrentTime, inDoDiffValue,
+ inAnimationCore, inAnimationFloatPairs, inEaseIn, inEaseOut);
+}
+
+void DoKeyframeProperty(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue, bool inDoDiffValue,
+ TAnimationCorePtr inAnimationCore, TSlideGraphCorePtr inSlideGraphCore,
+ TSlideCorePtr inSlideCore, TAnimationFloatPairList &inAnimationFloatPairs,
+ bool inSmoothInterpolation)
+{
+ float theEaseIn = 0.0f, theEaseOut = 0.0f;
+ if (inSmoothInterpolation)
+ theEaseIn = theEaseOut = 100.f;
+ DoKeyframeProperty(inSlide, inInstance, inProperty, inValue, inDoDiffValue, inAnimationCore,
+ inSlideGraphCore, inSlideCore, inAnimationFloatPairs, theEaseIn, theEaseOut);
+}
+
+TAnimationFloatPair CreateAnimationFloatPair(Qt3DSDMAnimationHandle inAnimation,
+ const SValue &inValue,
+ TAnimationCorePtr inAnimationCore)
+{
+ SAnimationInfo theInfo(inAnimationCore->GetAnimationInfo(inAnimation));
+ float theValue = GetAnimationValue(theInfo.m_Index, inValue);
+ return make_pair(inAnimation, theValue);
+}
+
+void InsertUniqueAnimationFloatPair(Qt3DSDMAnimationHandle inAnimation,
+ TAnimationFloatPairList &inList, const SValue &inValue,
+ TAnimationCorePtr inAnimationCore)
+{
+ TAnimationFloatPair thePair = CreateAnimationFloatPair(inAnimation, inValue, inAnimationCore);
+ insert_or_update(thePair, inList,
+ std::bind(AnimationFloatPairContainsAnimation, inAnimation, std::placeholders::_1));
+}
+
+bool CStudioAnimationSystem::SetAnimatedInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ tuple<bool, size_t> arity = GetVariantAnimatableAndArity(inValue);
+ if (get<0>(arity)) {
+ if (m_AutoKeyframe && IsPropertyAnimated(inInstance, inProperty)) // prerequisite for
+ // autoset-keyframes is
+ // that the property is
+ // already animated.
+ {
+ DoKeyframeProperty(inSlide, inInstance, inProperty, inValue, true, m_AnimationCore,
+ m_SlideGraphCore, m_SlideCore, m_AnimationFloatPairs,
+ m_SmoothInterpolation);
+ return true;
+ }
+
+ TAnimationHandleList thePresentAnimations;
+ GetPresentAnimations(inSlide, inInstance, inProperty, std::cref(m_AnimationFloatPairs),
+ m_AnimationCore, thePresentAnimations);
+ if (!thePresentAnimations.empty()) {
+ TAnimationFloatPairList thePreList(m_AnimationFloatPairs);
+ do_all(thePresentAnimations, std::bind(InsertUniqueAnimationFloatPair, std::placeholders::_1,
+ std::ref(m_AnimationFloatPairs),
+ std::cref(inValue), m_AnimationCore));
+
+
+ if (m_Consumer && m_refreshCallback) {
+ // Only create a single refresh per transaction stack
+ if (((CTransactionConsumer *)m_Consumer.get())->m_TransactionList.size() == 0) {
+ CreateGenericTransactionWithConsumer(
+ __FILE__, __LINE__, m_Consumer,
+ std::bind(m_refreshCallback, inInstance),
+ std::bind(m_refreshCallback, inInstance));
+ }
+ }
+
+ CreateGenericTransactionWithConsumer(
+ __FILE__, __LINE__, m_Consumer,
+ std::bind(assign_to<TAnimationFloatPairList>, m_AnimationFloatPairs,
+ std::ref(m_AnimationFloatPairs)),
+ std::bind(assign_to<TAnimationFloatPairList>, thePreList,
+ std::ref(m_AnimationFloatPairs)));
+ return true;
+ }
+ }
+ return false;
+}
+
+void CStudioAnimationSystem::SetAutoKeyframe(bool inAutoKeyframe)
+{
+ m_AutoKeyframe = inAutoKeyframe;
+}
+bool CStudioAnimationSystem::GetAutoKeyframe() const
+{
+ return m_AutoKeyframe;
+}
+
+Qt3DSDMSlideHandle CStudioAnimationSystem::GetApplicableGraphAndSlide(
+ Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty, const SValue &inValue)
+{
+ Qt3DSDMSlideHandle theApplicableSlide;
+ tuple<bool, size_t> arity = GetVariantAnimatableAndArity(inValue);
+ if (get<0>(arity))
+ theApplicableSlide = m_SlideSystem->GetApplicableSlide(inInstance, inProperty);
+ return theApplicableSlide;
+}
+
+void InsertUniqueAnimationKeyframesPair(TAnimationKeyframesPairList &ioList, SAnimationInfo &inInfo,
+ TKeyframeList &inKeyframes)
+{
+ bool theFound = false;
+ for (TAnimationKeyframesPairList::iterator theAnimationKeyframeIter = ioList.begin();
+ theAnimationKeyframeIter < ioList.end(); ++theAnimationKeyframeIter) {
+ if (IsAnimationInfoEqual(theAnimationKeyframeIter->first, inInfo.m_Slide, inInfo.m_Instance,
+ inInfo.m_Property, inInfo.m_Index)) {
+ theFound = true;
+ // Overwrite the existing value
+ SAnimationInfo &theInfo = theAnimationKeyframeIter->first;
+ theInfo.m_AnimationType = inInfo.m_AnimationType;
+ theInfo.m_DynamicFirstKeyframe = inInfo.m_DynamicFirstKeyframe;
+ theAnimationKeyframeIter->second = inKeyframes;
+ break;
+ }
+ }
+ if (!theFound) {
+ ioList.push_back(std::make_pair(inInfo, inKeyframes));
+ }
+}
+
+void CStudioAnimationSystem::Animate(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ SValue theValue;
+ m_PropertySystem->GetInstancePropertyValue(inInstance, inProperty, theValue);
+ Qt3DSDMSlideHandle theApplicableSlide =
+ GetApplicableGraphAndSlide(inInstance, inProperty, theValue.toOldSkool());
+ if (theApplicableSlide.Valid()) {
+ // Check if previously we have set animation & keyframes
+ DataModelDataType::Value theDataType = m_PropertySystem->GetDataType(inProperty);
+ std::tuple<bool, size_t> theArity = GetDatatypeAnimatableAndArity(theDataType);
+ bool theFound = false;
+ for (size_t i = 0; i < std::get<1>(theArity); ++i) {
+ TAnimationKeyframesPairList::iterator theAnimationKeyframeIter =
+ m_DeletedAnimationData.begin();
+ for (; theAnimationKeyframeIter < m_DeletedAnimationData.end();
+ ++theAnimationKeyframeIter) {
+ if (IsAnimationInfoEqual(theAnimationKeyframeIter->first, theApplicableSlide,
+ inInstance, inProperty, i)) {
+ theFound = true;
+
+ // We use previously set animation & keyframes to create new animation &
+ // keyframe
+ SAnimationInfo &theInfo = theAnimationKeyframeIter->first;
+ Qt3DSDMAnimationHandle theAnimation = m_AnimationCore->CreateAnimation(
+ theInfo.m_Slide, theInfo.m_Instance, theInfo.m_Property, theInfo.m_Index,
+ theInfo.m_AnimationType, theInfo.m_DynamicFirstKeyframe);
+
+ TKeyframeList theKeyframes = theAnimationKeyframeIter->second;
+ for (TKeyframeList::const_iterator theKeyframeIter = theKeyframes.begin();
+ theKeyframeIter < theKeyframes.end(); ++theKeyframeIter)
+ m_AnimationCore->InsertKeyframe(theAnimation, *theKeyframeIter);
+
+ break;
+ }
+ }
+ }
+
+ if (!theFound)
+ DoKeyframeProperty(theApplicableSlide, inInstance, inProperty, theValue.toOldSkool(),
+ true, m_AnimationCore, m_SlideGraphCore, m_SlideCore,
+ m_AnimationFloatPairs, m_SmoothInterpolation);
+ }
+}
+
+void CStudioAnimationSystem::Deanimate(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ DataModelDataType::Value theDataType = m_PropertySystem->GetDataType(inProperty);
+ std::tuple<bool, size_t> theArity = GetDatatypeAnimatableAndArity(theDataType);
+ for (size_t i = 0; i < std::get<1>(theArity); ++i) {
+ Qt3DSDMAnimationHandle theAnimationHandle =
+ GetControllingAnimation(inInstance, inProperty, i);
+
+ if (theAnimationHandle.Valid()) {
+ // Get animation & keyframe data and save it
+ SAnimationInfo theInfo(m_AnimationCore->GetAnimationInfo(theAnimationHandle));
+ TKeyframeHandleList theKeyframeHandles;
+ m_AnimationCore->GetKeyframes(theAnimationHandle, theKeyframeHandles);
+ TKeyframeList theKeyframeList;
+ for (TKeyframeHandleList::const_iterator theKeyframeIter = theKeyframeHandles.begin();
+ theKeyframeIter < theKeyframeHandles.end(); ++theKeyframeIter)
+ theKeyframeList.push_back(m_AnimationCore->GetKeyframeData(*theKeyframeIter));
+ InsertUniqueAnimationKeyframesPair(m_DeletedAnimationData, theInfo, theKeyframeList);
+
+ // Delete the animation
+ m_AnimationCore->DeleteAnimation(theAnimationHandle);
+ }
+ }
+}
+
+void CStudioAnimationSystem::KeyframeProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, bool inDoDiffValue)
+{
+ SValue theValue;
+ m_PropertySystem->GetInstancePropertyValue(inInstance, inProperty, theValue);
+ Qt3DSDMSlideHandle theApplicableSlide =
+ GetApplicableGraphAndSlide(inInstance, inProperty, theValue.toOldSkool());
+ if (theApplicableSlide.Valid())
+ DoKeyframeProperty(theApplicableSlide, inInstance, inProperty, theValue.toOldSkool(),
+ inDoDiffValue, m_AnimationCore, m_SlideGraphCore, m_SlideCore,
+ m_AnimationFloatPairs, m_SmoothInterpolation);
+}
+void CStudioAnimationSystem::SetOrCreateKeyframe(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ float inTimeInSeconds,
+ SGetOrSetKeyframeInfo *inKeyframeInfo,
+ size_t inNumInfos)
+{
+ qt3dsdm::DataModelDataType::Value thePropertyType = m_PropertySystem->GetDataType(inProperty);
+ Qt3DSDMSlideHandle theApplicableSlide;
+ std::tuple<bool, size_t> arity = GetDatatypeAnimatableAndArity(thePropertyType);
+ if (std::get<0>(arity)) {
+ theApplicableSlide = m_SlideSystem->GetApplicableSlide(inInstance, inProperty);
+ if (theApplicableSlide.Valid()) {
+
+ TAnimationHandleList thePresentAnimations;
+ GetPresentAnimations(theApplicableSlide, inInstance, inProperty,
+ std::cref(m_AnimationFloatPairs), m_AnimationCore,
+ thePresentAnimations);
+ size_t numIterations = std::min(inNumInfos, get<1>(arity));
+ if (thePresentAnimations.empty()) {
+ for (size_t idx = 0, end = numIterations; idx < end; ++idx) {
+ CreateAnimationAndAdd(theApplicableSlide, inInstance, inProperty, idx,
+ m_AnimationCore, thePresentAnimations);
+ }
+ }
+ for (size_t idx = 0, end = numIterations; idx < end; ++idx) {
+ CreateKeyframeExplicit(thePresentAnimations[idx], inKeyframeInfo[idx].m_Value,
+ inTimeInSeconds, m_AnimationCore,
+ inKeyframeInfo[idx].m_EaseIn, inKeyframeInfo[idx].m_EaseOut);
+ if (inKeyframeInfo[idx].m_AnimationTrackIsDynamic)
+ m_AnimationCore->SetFirstKeyframeDynamic(thePresentAnimations[idx], true);
+ }
+ erase_if(m_AnimationFloatPairs, std::bind(AnimationExistsInPresentAnimations,
+ std::placeholders::_1,
+ std::ref(thePresentAnimations)));
+ }
+ }
+}
+
+inline bool FindMatchingAnimation(Qt3DSDMAnimationHandle inAnimation,
+ TAnimationCorePtr inAnimationCore, size_t inIndex)
+{
+ return inAnimationCore->GetAnimationInfo(inAnimation).m_Index == inIndex;
+}
+
+Qt3DSDMAnimationHandle CStudioAnimationSystem::GetControllingAnimation(
+ Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty, size_t inIndex) const
+{
+ Qt3DSDMSlideHandle theApplicableSlide =
+ m_SlideSystem->GetApplicableSlide(inInstance, inProperty);
+ // first check our anim float pairs
+ for (size_t idx = 0, end = m_AnimationFloatPairs.size(); idx < end; ++idx) {
+ const SAnimationInfo &theInfo =
+ m_AnimationCore->GetAnimationInfo(m_AnimationFloatPairs[idx].first);
+ if (IsAnimationInfoEqual(theInfo, theApplicableSlide, inInstance, inProperty, inIndex))
+ return m_AnimationFloatPairs[idx].first;
+ }
+ // Use the cache lookup instead of linear search algorithm
+ return m_AnimationCore->GetAnimation(theApplicableSlide, inInstance, inProperty, inIndex);
+}
+
+bool CStudioAnimationSystem::IsPropertyAnimatable(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ DataModelDataType::Value theDataType = m_PropertySystem->GetDataType(inProperty);
+ std::tuple<bool, size_t> theArity = GetDatatypeAnimatableAndArity(theDataType);
+ if (std::get<0>(theArity))
+ return m_SlideGraphCore->GetAssociatedGraph(inInstance).first.Valid();
+ return false;
+}
+
+bool CStudioAnimationSystem::IsPropertyAnimated(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ DataModelDataType::Value theDataType = m_PropertySystem->GetDataType(inProperty);
+ std::tuple<bool, size_t> theArity = GetDatatypeAnimatableAndArity(theDataType);
+ for (size_t i = 0; i < std::get<1>(theArity); ++i) {
+ if (GetControllingAnimation(inInstance, inProperty, i).Valid())
+ return true;
+ }
+ return false;
+}
+
+void CStudioAnimationSystem::SetConsumer(TTransactionConsumerPtr inConsumer)
+{
+ m_Consumer = inConsumer;
+}
+
+void CStudioAnimationSystem::setRefreshCallback(TRefreshCallbackFunc func)
+{
+ m_refreshCallback = func;
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/StudioAnimationSystem.h b/src/Runtime/ogl-runtime/src/dm/systems/StudioAnimationSystem.h
new file mode 100644
index 00000000..e6fdf755
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/StudioAnimationSystem.h
@@ -0,0 +1,134 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef STUDIOANIMATIONSYSTEMIMPLH
+#define STUDIOANIMATIONSYSTEMIMPLH
+
+#include "Qt3DSDMAnimation.h"
+#include "Qt3DSDMSlides.h"
+#include "Qt3DSDMSlideCore.h"
+#include "Qt3DSDMSlideGraphCore.h"
+#include "Qt3DSDMTransactions.h"
+#include "Qt3DSDMDataCore.h"
+#include "Qt3DSDMSignals.h"
+
+namespace qt3dsdm {
+
+typedef std::pair<Qt3DSDMAnimationHandle, float> TAnimationFloatPair;
+typedef std::vector<TAnimationFloatPair> TAnimationFloatPairList;
+
+class CStudioAnimationSystem : public IStudioAnimationSystem,
+ public ITransactionProducer
+{
+ Q_DISABLE_COPY(CStudioAnimationSystem)
+
+ TPropertySystemPtr m_PropertySystem;
+ TSlideSystemPtr m_SlideSystem;
+ TSlideCorePtr m_SlideCore;
+ TSlideGraphCorePtr m_SlideGraphCore;
+ TAnimationCorePtr m_AnimationCore;
+ TRefreshCallbackFunc m_refreshCallback = nullptr;
+
+ bool m_AutoKeyframe;
+ // When a property has an animation associated with it, then writes
+ // do not go all the way down to the db. They stay on this object.
+ TAnimationFloatPairList m_AnimationFloatPairs;
+ bool m_SmoothInterpolation;
+
+ TAnimationKeyframesPairList m_DeletedAnimationData; // list to store deanimated animation &
+ // keyframe data. This will be use if user
+ // wants to animate the same property again
+
+ TTransactionConsumerPtr m_Consumer;
+
+ std::vector<std::shared_ptr<ISignalConnection>> m_Connections;
+
+public:
+ CStudioAnimationSystem(TPropertySystemPtr inPropertySystem, TSlideSystemPtr inSlideSystem,
+ TSlideCorePtr inSlideCore, TSlideGraphCorePtr inSlideGraphCore,
+ TAnimationCorePtr inAnimationCore);
+
+ void ClearTemporaryAnimationValues();
+ void ClearTemporaryAnimationValues(Qt3DSDMAnimationHandle inAnimation);
+
+ void SetPropertySystem(TPropertySystemPtr inPropertySystem)
+ {
+ m_PropertySystem = inPropertySystem;
+ } // HACK: TODO: We should really consider having all the subsytem know everyone else without
+ // passing in so many things in the constructor
+
+ //====================================================================
+ // IStudioAnimationSystem implementation
+ //====================================================================
+ void SetAutoKeyframe(bool inAutoKeyframe) override;
+ bool GetAutoKeyframe() const override;
+ void Animate(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty) override;
+ void Deanimate(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty) override;
+ void KeyframeProperty(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
+ bool inDoDiffValue) override;
+ void SetOrCreateKeyframe(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, float inTimeInSeconds,
+ SGetOrSetKeyframeInfo *inKeyframeInfo, size_t inNumInfos) override;
+ Qt3DSDMAnimationHandle GetControllingAnimation(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ size_t inIndex) const override;
+ bool IsPropertyAnimatable(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const override;
+ bool IsPropertyAnimated(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const override;
+ void SetInterpolation(bool inSmooth) override { m_SmoothInterpolation = inSmooth; }
+
+ bool GetAnimatedInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const override;
+ bool SetAnimatedInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) override;
+ //====================================================================
+
+ void SetConsumer(TTransactionConsumerPtr inConsumer) override;
+
+ void setRefreshCallback(TRefreshCallbackFunc func) override;
+
+private:
+ void OnAnimationDeleted(Qt3DSDMAnimationHandle inAnimation);
+
+ Qt3DSDMSlideHandle GetApplicableGraphAndSlide(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue);
+
+ void OverrideChannelIfAnimated(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex, float inSeconds,
+ bool &ioAnimated, SValue &outValue) const;
+};
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/StudioCoreSystem.cpp b/src/Runtime/ogl-runtime/src/dm/systems/StudioCoreSystem.cpp
new file mode 100644
index 00000000..f9f0e2c8
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/StudioCoreSystem.cpp
@@ -0,0 +1,409 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "StudioCoreSystem.h"
+#include "SlideCoreProducer.h"
+#include "SlideGraphCoreProducer.h"
+#include "DataCoreProducer.h"
+#include "AnimationCoreProducer.h"
+#include "ActionCoreProducer.h"
+#include "Qt3DSDMSignals.h"
+#include "Qt3DSDMMetaData.h"
+#include "Qt3DSDMGuides.h"
+
+using namespace std;
+
+namespace qt3dsdm {
+
+inline bool AnimationInstanceMatches(Qt3DSDMAnimationHandle inAnimation,
+ TAnimationCorePtr inAnimationCore,
+ Qt3DSDMInstanceHandle inInstance)
+{
+ return inInstance == inAnimationCore->GetAnimationInfo(inAnimation).m_Instance;
+}
+
+inline bool AnimationPropertyMatches(Qt3DSDMAnimationHandle inAnimation,
+ TAnimationCorePtr inAnimationCore,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ return inProperty == inAnimationCore->GetAnimationInfo(inAnimation).m_Property;
+}
+
+inline bool AnimationSlideMatches(Qt3DSDMAnimationHandle inAnimation,
+ TAnimationCorePtr inAnimationCore, Qt3DSDMSlideHandle inSlide)
+{
+ return inSlide == inAnimationCore->GetAnimationInfo(inAnimation).m_Slide;
+}
+
+inline bool AnimationSlideInstancePropertyMatch(Qt3DSDMAnimationHandle inAnimation,
+ TAnimationCorePtr inAnimationCore,
+ Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ SAnimationInfo theInfo = inAnimationCore->GetAnimationInfo(inAnimation);
+ return theInfo.m_Slide == inSlide && theInfo.m_Instance == inInstance
+ && theInfo.m_Property == inProperty;
+}
+
+inline bool AnimationInstancesPropertiesMatch(Qt3DSDMAnimationHandle inAnimation,
+ TAnimationCorePtr inAnimationCore,
+ const TInstanceHandleList &inInstances,
+ const TPropertyHandleList &inProperties)
+{
+ SAnimationInfo theInfo = inAnimationCore->GetAnimationInfo(inAnimation);
+ return exists(inInstances, std::bind(equal_to<int>(), theInfo.m_Instance,
+ std::placeholders::_1))
+ && exists(inProperties, std::bind(equal_to<int>(), theInfo.m_Property,
+ std::placeholders::_1));
+}
+
+void EraseAnimationsThatMatch(TAnimationCorePtr inAnimationCore,
+ function<bool(Qt3DSDMAnimationHandle)> inPredicate)
+{
+ TAnimationHandleList theAnimations;
+ inAnimationCore->GetAnimations(theAnimations);
+ function<bool(Qt3DSDMAnimationHandle)> theComp(std::bind(
+ complement<function<bool(Qt3DSDMAnimationHandle)>, Qt3DSDMAnimationHandle>, inPredicate,
+ std::placeholders::_1));
+ TAnimationHandleList::iterator theRemovals =
+ remove_if(theAnimations.begin(), theAnimations.end(), theComp);
+ for_each(theAnimations.begin(), theRemovals,
+ std::bind(&IAnimationCore::DeleteAnimation, inAnimationCore, std::placeholders::_1));
+}
+
+void EraseActions(TDataCorePtr inDataCore, TActionCorePtr inActionCore,
+ const TActionHandleList &inActions)
+{
+ for (TActionHandleList::const_iterator theActionIter = inActions.begin();
+ theActionIter != inActions.end(); ++theActionIter) {
+ Qt3DSDMInstanceHandle theActionInstance;
+ inActionCore->DeleteAction(*theActionIter, theActionInstance);
+ inDataCore->DeleteInstance(theActionInstance);
+ }
+}
+
+void CascadeInstanceDelete(Qt3DSDMInstanceHandle inInstance, TDataCorePtr inDataCore,
+ TSlideCorePtr inSlideCore, TSlideGraphCorePtr inSlideGraphCore,
+ TAnimationCorePtr inAnimationCore, TActionCorePtr inActionCore)
+{
+ inSlideCore->DeleteAllInstanceEntries(inInstance);
+
+ inSlideGraphCore->DissociateInstance(inInstance);
+
+ function<bool(Qt3DSDMAnimationHandle)> thePredicate(
+ std::bind(AnimationInstanceMatches, std::placeholders::_1, inAnimationCore, inInstance));
+ EraseAnimationsThatMatch(inAnimationCore, thePredicate);
+
+ TActionHandleList theActions;
+ inActionCore->GetActions(inInstance, theActions);
+ EraseActions(inDataCore, inActionCore, theActions);
+}
+
+void CascadePropertyRemove(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
+ TSlideCorePtr inSlideCore, TSlideGraphCorePtr inSlideGraphCore,
+ TAnimationCorePtr inAnimationCore)
+{
+ inSlideCore->DeleteAllPropertyEntries(inProperty);
+ function<bool(Qt3DSDMAnimationHandle)> thePredicate(
+ std::bind(AnimationPropertyMatches, std::placeholders::_1, inAnimationCore, inProperty));
+ EraseAnimationsThatMatch(inAnimationCore, thePredicate);
+}
+
+void CascadeSlideDelete(Qt3DSDMSlideHandle inSlide, TDataCorePtr inDataCore,
+ TSlideCorePtr inSlideCore, TSlideGraphCorePtr inSlideGraphCore,
+ TAnimationCorePtr inAnimationCore, TActionCorePtr inActionCore)
+{
+ Qt3DSDMSlideGraphHandle theGraph = inSlideGraphCore->GetSlideGraph(inSlide);
+ if (theGraph.Valid()) {
+ TSlideHandleList theChildren;
+ inSlideCore->GetChildSlides(inSlide, theChildren);
+ TInstanceHandleList instances;
+ for (size_t idx = 0, end = theChildren.size(); idx < end; ++idx) {
+ instances.clear();
+ inSlideCore->DeleteSlide(theChildren[idx], instances);
+ for (size_t instIdx = 0, instEnd = instances.size(); instIdx < instEnd; ++instIdx)
+ inDataCore->DeleteInstance(instances[instIdx]);
+ }
+ inSlideGraphCore->DeleteSlideGraph(theGraph);
+ }
+
+ else {
+ Qt3DSDMSlideHandle theMaster(inSlideCore->GetParentSlide(inSlide));
+ if (theMaster.Valid()) {
+ Qt3DSDMSlideGraphHandle theGraph = inSlideGraphCore->GetSlideGraph(theMaster);
+ if (theGraph.Valid()) {
+ /*
+ tricky stuff. The slide change was recorded in the transaction system when the
+ slide was created. But since there didn't *have* to be a slide change when the
+ slide was destroyed there was no slide change recorded at that point.
+
+ Then on the first redo, the system quietly switched the active slide to the new
+ slide. On the second redo the system crashed due to attempting to access the
+ new slide after it had been deleted (as nothing switched the system back to the
+ current slide).
+
+ So the correct answer is that the cascading system needs to *always* set the
+ active slide, even if it seems like it would be, at the moment, unnecessary
+ because the slide getting deleted is not currently active. This is the mirror
+ of the fact that new slide *always* sets the active slide so it does make
+ logical sense.*/
+ Qt3DSDMSlideHandle theNewActiveSlide =
+ inSlideGraphCore->GetGraphActiveSlide(theGraph);
+ if (theNewActiveSlide == inSlide) {
+ TSlideHandleList theChildren;
+ inSlideCore->GetChildSlides(theMaster, theChildren);
+ size_t idx = 0;
+ for (size_t end = theChildren.size(); idx < end; ++idx) {
+ if (theChildren[idx] != inSlide) {
+ theNewActiveSlide = theChildren[idx];
+ break;
+ }
+ }
+ if (theNewActiveSlide == inSlide)
+ theNewActiveSlide = theMaster;
+ }
+ inSlideGraphCore->SetGraphActiveSlide(theGraph, theNewActiveSlide);
+ }
+ }
+ }
+ EraseAnimationsThatMatch(inAnimationCore,
+ std::bind(AnimationSlideMatches,
+ std::placeholders::_1, inAnimationCore, inSlide));
+
+ TActionHandleList theActions;
+ inActionCore->GetActions(inSlide, theActions);
+ EraseActions(inDataCore, inActionCore, theActions);
+}
+
+void CascadeSlidePropertyRemove(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, TAnimationCorePtr inAnimationCore)
+{
+ EraseAnimationsThatMatch(inAnimationCore,
+ std::bind(AnimationSlideInstancePropertyMatch,
+ std::placeholders::_1, inAnimationCore,
+ inSlide, inInstance, inProperty));
+}
+
+void CascadeInstanceParentRemoved(Qt3DSDMInstanceHandle inInstance, Qt3DSDMInstanceHandle inParent,
+ TDataCorePtr inDataCore, TSlideCorePtr inSlideCore,
+ TAnimationCorePtr inAnimationCore)
+{
+ TPropertyHandleList theProperties;
+ inDataCore->GetInstanceProperties(inParent, theProperties);
+ TInstanceHandleList allInstances;
+ inDataCore->GetInstances(allInstances);
+ function<bool(Qt3DSDMInstanceHandle)> InstanceOrDerived(
+ std::bind(&IDataCore::IsInstanceOrDerivedFrom, inDataCore,
+ std::placeholders::_1, inInstance));
+ function<bool(Qt3DSDMInstanceHandle)> DerivedComplement(
+ std::bind(complement<function<bool(Qt3DSDMInstanceHandle)>, Qt3DSDMInstanceHandle>,
+ InstanceOrDerived, std::placeholders::_1));
+ TInstanceHandleList::iterator all_derived =
+ remove_if(allInstances.begin(), allInstances.end(), DerivedComplement);
+ TInstanceHandleList derivedInstances(allInstances.begin(), all_derived);
+ inSlideCore->DeleteAllInstancePropertyEntries(derivedInstances, theProperties);
+ EraseAnimationsThatMatch(
+ inAnimationCore, std::bind(AnimationInstancesPropertiesMatch,
+ std::placeholders::_1, inAnimationCore,
+ std::cref(derivedInstances), std::cref(theProperties)));
+}
+
+void CascadeBeforeAnimationDeleted(Qt3DSDMAnimationHandle inAnimation,
+ TAnimationCorePtr inAnimationCore, TDataCorePtr inDataCore,
+ TSlideCorePtr inSlideCore)
+{
+ SAnimationInfo theInfo = inAnimationCore->GetAnimationInfo(inAnimation);
+ SValue theSlideValue;
+ if (inDataCore->IsInstance(theInfo.m_Instance) && inSlideCore->IsSlide(theInfo.m_Slide)
+ && inSlideCore->GetSpecificInstancePropertyValue(theInfo.m_Slide, theInfo.m_Instance,
+ theInfo.m_Property, theSlideValue)
+ && inAnimationCore->GetKeyframeCount(inAnimation)) {
+ float theTime = inSlideCore->GetSlideTime(theInfo.m_Slide);
+ float theValue = inAnimationCore->EvaluateAnimation(inAnimation, theTime);
+ SetAnimationValue(theValue, theInfo.m_Index, theSlideValue);
+ inSlideCore->ForceSetInstancePropertyValue(theInfo.m_Slide, theInfo.m_Instance,
+ theInfo.m_Property, theSlideValue);
+ }
+}
+
+void CascadeBeforeKeyframeErased(Qt3DSDMKeyframeHandle inKeyframe, TAnimationCorePtr inAnimationCore,
+ TDataCorePtr inDataCore, TSlideCorePtr inSlideCore)
+{
+ Qt3DSDMAnimationHandle theAnimation = inAnimationCore->GetAnimationForKeyframe(inKeyframe);
+ if (inAnimationCore->GetKeyframeCount(theAnimation) == 1)
+ CascadeBeforeAnimationDeleted(theAnimation, inAnimationCore, inDataCore, inSlideCore);
+}
+
+CStudioCoreSystem::CStudioCoreSystem(TStringTablePtr strTable)
+ : m_StringTable(strTable.get() != NULL ? strTable : IStringTable::CreateStringTable())
+ , m_DataCore(new CDataCoreProducer(m_StringTable))
+ , m_SlideCore(new CSlideCoreProducer(m_StringTable))
+ , m_SlideGraphCore(new CSlideGraphCoreProducer())
+ , m_AnimationCore(new CAnimationCoreProducer())
+ , m_ActionCore(new CActionCoreProducer(m_StringTable))
+ , m_NewMetaData(
+ IMetaData::CreateNewMetaData(dynamic_pointer_cast<CDataCoreProducer>(m_DataCore)))
+ , m_GuideSystem(IGuideSystem::CreateGuideSystem())
+{
+ IDataCoreSignalProvider *theProvider =
+ dynamic_cast<IDataCoreSignalProvider *>(m_DataCore.get());
+ m_Connections.push_back(theProvider->ConnectInstanceDeleted(
+ std::bind(CascadeInstanceDelete, std::placeholders::_1, m_DataCore, m_SlideCore,
+ m_SlideGraphCore, m_AnimationCore, m_ActionCore)));
+ m_Connections.push_back(theProvider->ConnectPropertyRemoved(std::bind(
+ CascadePropertyRemove, std::placeholders::_1,
+ std::placeholders::_2, m_SlideCore, m_SlideGraphCore, m_AnimationCore)));
+ m_Connections.push_back(theProvider->ConnectInstanceParentRemoved(std::bind(
+ CascadeInstanceParentRemoved, std::placeholders::_1,
+ std::placeholders::_2, m_DataCore, m_SlideCore, m_AnimationCore)));
+ ISlideCoreSignalProvider *theSlideCoreSignalProvider =
+ dynamic_cast<ISlideCoreSignalProvider *>(m_SlideCore.get());
+ m_Connections.push_back(theSlideCoreSignalProvider->ConnectBeforeSlideDeleted(
+ std::bind(CascadeSlideDelete, std::placeholders::_1, m_DataCore, m_SlideCore,
+ m_SlideGraphCore, m_AnimationCore, m_ActionCore)));
+ m_Connections.push_back(theSlideCoreSignalProvider->ConnectInstancePropertyValueRemoved(
+ std::bind(CascadeSlidePropertyRemove, std::placeholders::_1,
+ std::placeholders::_2, std::placeholders::_3, m_AnimationCore)));
+ IAnimationCoreSignalProvider *theAnimProvider =
+ dynamic_cast<IAnimationCoreSignalProvider *>(m_AnimationCore.get());
+ m_Connections.push_back(theAnimProvider->ConnectBeforeAnimationDeleted(
+ std::bind(CascadeBeforeAnimationDeleted, std::placeholders::_1,
+ m_AnimationCore, m_DataCore, m_SlideCore)));
+ m_Connections.push_back(theAnimProvider->ConnectBeforeKeyframeErased(
+ std::bind(CascadeBeforeKeyframeErased, std::placeholders::_1,
+ m_AnimationCore, m_DataCore, m_SlideCore)));
+ m_Connections.push_back(theAnimProvider->ConnectBeforeAllKeyframesErased(
+ std::bind(CascadeBeforeAnimationDeleted, std::placeholders::_1,
+ m_AnimationCore, m_DataCore, m_SlideCore)));
+}
+
+CStudioCoreSystem::~CStudioCoreSystem()
+{
+}
+
+std::shared_ptr<IDataCore> CStudioCoreSystem::GetDataCore()
+{
+ return m_DataCore;
+}
+std::shared_ptr<ISlideCore> CStudioCoreSystem::GetSlideCore()
+{
+ return m_SlideCore;
+}
+std::shared_ptr<ISlideGraphCore> CStudioCoreSystem::GetSlideGraphCore()
+{
+ return m_SlideGraphCore;
+}
+std::shared_ptr<IAnimationCore> CStudioCoreSystem::GetAnimationCore()
+{
+ return m_AnimationCore;
+}
+std::shared_ptr<IActionCore> CStudioCoreSystem::GetActionCore()
+{
+ return m_ActionCore;
+}
+std::shared_ptr<ICustomPropCore> CStudioCoreSystem::GetCustomPropCore()
+{
+ return m_CustomPropCore;
+}
+std::shared_ptr<IMetaData> CStudioCoreSystem::GetNewMetaData()
+{
+ return m_NewMetaData;
+}
+std::shared_ptr<IGuideSystem> CStudioCoreSystem::GetGuideSystem()
+{
+ return m_GuideSystem;
+}
+
+std::shared_ptr<IDataCore> CStudioCoreSystem::GetTransactionlessDataCore()
+{
+ return dynamic_cast<CDataCoreProducer *>(m_DataCore.get())->GetTransactionlessDataCore();
+}
+std::shared_ptr<ISlideCore> CStudioCoreSystem::GetTransactionlessSlideCore()
+{
+ return dynamic_cast<CSlideCoreProducer *>(m_SlideCore.get())->GetTransactionlessSlideCore();
+}
+std::shared_ptr<ISlideGraphCore> CStudioCoreSystem::GetTransactionlessSlideGraphCore()
+{
+ return dynamic_cast<CSlideGraphCoreProducer *>(m_SlideGraphCore.get())
+ ->GetTransactionlessSlideGraphCore();
+}
+std::shared_ptr<IAnimationCore> CStudioCoreSystem::GetTransactionlessAnimationCore()
+{
+ return dynamic_cast<CAnimationCoreProducer *>(m_AnimationCore.get())
+ ->GetTransactionlessAnimationCore();
+}
+std::shared_ptr<IActionCore> CStudioCoreSystem::GetTransactionlessActionCore()
+{
+ return dynamic_cast<CActionCoreProducer *>(m_ActionCore.get())->GetTransactionlessActionCore();
+}
+
+inline bool InstanceSpecificNameMatches(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, const TCharStr &inName,
+ const CSimpleDataCore &inData)
+{
+ TPropertyHandleList theProperties;
+ inData.GetAggregateInstanceProperties(inInstance, theProperties);
+ SValue theValue;
+ if (exists(theProperties, std::bind(equal_to<int>(), inProperty, std::placeholders::_1))
+ && inData.GetSpecificInstancePropertyValue(inInstance, inProperty, theValue)) {
+ return inName == get<TDataStrPtr>(theValue)->GetData();
+ }
+ return false;
+}
+
+Qt3DSDMInstanceHandle CStudioCoreSystem::FindInstanceByName(Qt3DSDMPropertyHandle inNameProperty,
+ const TCharStr &inName) const
+{
+ TInstanceHandleList theInstances;
+ m_DataCore->GetInstances(theInstances);
+ TInstanceHandleList::iterator theFind = find_if<TInstanceHandleList::iterator>(
+ theInstances,
+ std::bind(InstanceSpecificNameMatches, std::placeholders::_1, inNameProperty, std::cref(inName),
+ std::cref(*dynamic_cast<CDataCoreProducer *>(m_DataCore.get())
+ ->GetTransactionlessDataCore())));
+ if (theFind != theInstances.end())
+ return *theFind;
+ return 0;
+}
+
+void CStudioCoreSystem::SetConsumer(TTransactionConsumerPtr inConsumer)
+{
+ DoSetConsumer(inConsumer, m_DataCore);
+ DoSetConsumer(inConsumer, m_SlideCore);
+ DoSetConsumer(inConsumer, m_SlideGraphCore);
+ DoSetConsumer(inConsumer, m_AnimationCore);
+ DoSetConsumer(inConsumer, m_ActionCore);
+ DoSetConsumer(inConsumer, m_GuideSystem);
+ // In general the meta data doesn't participate in the undo/redo system except
+ // in special cases.
+ if (!inConsumer)
+ DoSetConsumer(inConsumer, m_NewMetaData);
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/StudioCoreSystem.h b/src/Runtime/ogl-runtime/src/dm/systems/StudioCoreSystem.h
new file mode 100644
index 00000000..18f1dad6
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/StudioCoreSystem.h
@@ -0,0 +1,94 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef STUDIOCORESYSTEMH
+#define STUDIOCORESYSTEMH
+#include "Qt3DSDMTransactions.h"
+#include "Qt3DSDMHandles.h"
+
+namespace qt3dsdm {
+class IDataCore;
+class ISlideCore;
+class ISlideGraphCore;
+class IAnimationCore;
+class IActionCore;
+class ICustomPropCore;
+class ISignalConnection;
+class IMetaData;
+class IGuideSystem;
+
+// Manages cascading operations between cores so that the entire group of
+// cores stays up to date.
+class CStudioCoreSystem : public ITransactionProducer
+{
+ Q_DISABLE_COPY(CStudioCoreSystem)
+
+ TStringTablePtr m_StringTable;
+ std::shared_ptr<IDataCore> m_DataCore;
+ std::shared_ptr<ISlideCore> m_SlideCore;
+ std::shared_ptr<ISlideGraphCore> m_SlideGraphCore;
+ std::shared_ptr<IAnimationCore> m_AnimationCore;
+ std::shared_ptr<IActionCore> m_ActionCore;
+ std::shared_ptr<ICustomPropCore> m_CustomPropCore;
+ std::shared_ptr<IMetaData> m_NewMetaData;
+ std::shared_ptr<IGuideSystem> m_GuideSystem;
+
+ std::vector<std::shared_ptr<ISignalConnection>> m_Connections;
+
+public:
+ CStudioCoreSystem(TStringTablePtr strTable = TStringTablePtr());
+ virtual ~CStudioCoreSystem();
+ TStringTablePtr GetStringTablePtr() const { return m_StringTable; }
+
+ std::shared_ptr<IDataCore> GetDataCore();
+ std::shared_ptr<ISlideCore> GetSlideCore();
+ std::shared_ptr<ISlideGraphCore> GetSlideGraphCore();
+ std::shared_ptr<IAnimationCore> GetAnimationCore();
+ std::shared_ptr<IActionCore> GetActionCore();
+ std::shared_ptr<ICustomPropCore> GetCustomPropCore();
+ std::shared_ptr<IMetaData> GetNewMetaData();
+ std::shared_ptr<IGuideSystem> GetGuideSystem();
+
+ std::shared_ptr<IDataCore> GetTransactionlessDataCore();
+ std::shared_ptr<ISlideCore> GetTransactionlessSlideCore();
+ std::shared_ptr<ISlideGraphCore> GetTransactionlessSlideGraphCore();
+ std::shared_ptr<IAnimationCore> GetTransactionlessAnimationCore();
+ std::shared_ptr<IActionCore> GetTransactionlessActionCore();
+ std::shared_ptr<ICustomPropCore> GetTransactionlessCustomPropCore();
+
+ Qt3DSDMInstanceHandle FindInstanceByName(Qt3DSDMPropertyHandle inNameProperty,
+ const TCharStr &inName) const;
+
+ void SetConsumer(TTransactionConsumerPtr inConsumer) override;
+};
+
+typedef std::shared_ptr<CStudioCoreSystem> TStudioCoreSystemPtr;
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/StudioFullSystem.cpp b/src/Runtime/ogl-runtime/src/dm/systems/StudioFullSystem.cpp
new file mode 100644
index 00000000..c98f8a81
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/StudioFullSystem.cpp
@@ -0,0 +1,647 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "StudioFullSystem.h"
+#include "StudioCoreSystem.h"
+#include "StudioPropertySystem.h"
+#include "SlideSystem.h"
+#include "StudioAnimationSystem.h"
+#include "ActionSystem.h"
+#include "SignalsImpl.h"
+#include "SimpleDataCore.h"
+#include "SimpleSlideCore.h"
+#include "SimpleSlideGraphCore.h"
+#include "SimpleAnimationCore.h"
+#include "DataCoreProducer.h"
+#include "SlideCoreProducer.h"
+#include "SlideGraphCoreProducer.h"
+#include "ActionCoreProducer.h"
+
+using namespace std;
+
+namespace qt3dsdm {
+
+template <typename TDoTransaction, typename TUndoTransaction>
+inline void NotifyConsumer(TTransactionConsumerPtr inConsumer, TDoTransaction inDoNotification,
+ TUndoTransaction inUndoNotification)
+{
+ if (inConsumer) {
+ inConsumer->OnDoNotification(inDoNotification);
+ inConsumer->OnUndoNotification(inUndoNotification);
+ } else {
+ inDoNotification(); // No consumer, send notification right away
+ }
+}
+
+void NotifySlideCreated(TTransactionConsumerPtr &inConsumer,
+ IStudioFullSystemSignalSender *inSender, Qt3DSDMSlideHandle inSlide)
+{
+ NotifyConsumer(inConsumer,
+ bind(&IStudioFullSystemSignalSender::SendSlideCreated, inSender, inSlide),
+ bind(&IStudioFullSystemSignalSender::SendSlideDeleted, inSender, inSlide));
+}
+
+void NotifySlideDeleted(TTransactionConsumerPtr &inConsumer,
+ IStudioFullSystemSignalSender *inSender, Qt3DSDMSlideHandle inSlide)
+{
+ NotifyConsumer(inConsumer,
+ bind(&IStudioFullSystemSignalSender::SendSlideDeleted, inSender, inSlide),
+ bind(&IStudioFullSystemSignalSender::SendSlideCreated, inSender, inSlide));
+}
+
+void NotifySlideRearranged(TTransactionConsumerPtr &inConsumer,
+ IStudioFullSystemSignalSender *inSender, Qt3DSDMSlideHandle inSlide,
+ int inOldIndex, int inNewIndex)
+{
+ NotifyConsumer(inConsumer, bind(&IStudioFullSystemSignalSender::SendSlideRearranged, inSender,
+ inSlide, inOldIndex, inNewIndex),
+ bind(&IStudioFullSystemSignalSender::SendSlideRearranged, inSender, inSlide,
+ inNewIndex, inOldIndex));
+}
+
+void SendInstancePropertyValueChanged(TDataCorePtr inCore, IStudioFullSystemSignalSender *inSender,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ // Ignore when the instance is not an instance (undoing an add operation may create this, as
+ // transactions are run first and notifications second).
+ if (inCore->IsInstance(inInstance))
+ inSender->SendInstancePropertyValue(inInstance, inProperty);
+}
+
+void NotifyInstancePropertyChanged(TTransactionConsumerPtr &inConsumer, TDataCorePtr inCore,
+ IStudioFullSystemSignalSender *inSender,
+ Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
+ bool inIsAggregate)
+{
+ if (inConsumer) {
+ if (inIsAggregate == false) {
+ NotifyConsumer(
+ inConsumer,
+ bind(SendInstancePropertyValueChanged, inCore, inSender, inInstance, inProperty),
+ bind(SendInstancePropertyValueChanged, inCore, inSender, inInstance, inProperty));
+ }
+ } else {
+ SendInstancePropertyValueChanged(inCore, inSender, inInstance, inProperty);
+ }
+}
+
+void RunAnimations(IStudioFullSystemSignalSender *inSender, Qt3DSDMSlideHandle inMaster,
+ Qt3DSDMSlideHandle inSlide, TAnimationCorePtr inAnimationCore,
+ TDataCorePtr inDataCore, TTransactionConsumerPtr &inConsumer)
+{
+ TAnimationInfoList theAnimations;
+ inAnimationCore->GetAnimations(theAnimations, inMaster, inSlide);
+ size_t theEnd = theAnimations.size();
+ for (size_t theIndex = 0; theIndex < theEnd; ++theIndex) {
+ SAnimationInfo &theInfo(theAnimations[theIndex]);
+ NotifyInstancePropertyChanged(inConsumer, inDataCore, inSender, theInfo.m_Instance,
+ theInfo.m_Property, false);
+ }
+}
+
+void NotifyComponentSeconds(TTransactionConsumerPtr &inConsumer,
+ IStudioFullSystemSignalSender *inSender, Qt3DSDMSlideHandle inSlide,
+ TDataCorePtr inCore, TAnimationCorePtr inAnimationCore,
+ TStudioAnimationSystemPtr inAnimationSystem,
+ TSlideSystemPtr inSlideSystem)
+{
+ Qt3DSDMSlideHandle theMaster = inSlideSystem->GetMasterSlide(inSlide);
+ NotifyConsumer(inConsumer, bind(&IStudioFullSystemSignalSender::SendBeginComponentSeconds,
+ inSender, theMaster),
+ bind(&IStudioFullSystemSignalSender::SendComponentSeconds, inSender, theMaster));
+ RunAnimations(inSender, theMaster, inSlide, inAnimationCore, inCore, inConsumer);
+ dynamic_cast<CStudioAnimationSystem *>(inAnimationSystem.get())
+ ->ClearTemporaryAnimationValues();
+ NotifyConsumer(
+ inConsumer, bind(&IStudioFullSystemSignalSender::SendComponentSeconds, inSender, theMaster),
+ bind(&IStudioFullSystemSignalSender::SendBeginComponentSeconds, inSender, theMaster));
+}
+
+void NotifyPropertyLinked(TTransactionConsumerPtr &inConsumer, TDataCorePtr inCore,
+ IStudioFullSystemSignalSender *inSender, Qt3DSDMSlideHandle inMaster,
+ Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
+ bool inAggregate)
+{
+ if (inAggregate == false) {
+ NotifyConsumer(inConsumer, bind(&IStudioFullSystemSignalSender::SendPropertyLinked,
+ inSender, inMaster, inInstance, inProperty),
+ bind(&IStudioFullSystemSignalSender::SendPropertyUnlinked, inSender,
+ inMaster, inInstance, inProperty));
+ NotifyInstancePropertyChanged(inConsumer, inCore, inSender, inInstance, inProperty,
+ inAggregate);
+ }
+}
+
+void NotifyPropertyUnlinked(TTransactionConsumerPtr &inConsumer, TDataCorePtr inCore,
+ IStudioFullSystemSignalSender *inSender, Qt3DSDMSlideHandle inMaster,
+ Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
+ bool inAggregate)
+{
+ if (inAggregate == false) {
+ NotifyConsumer(inConsumer, bind(&IStudioFullSystemSignalSender::SendPropertyUnlinked,
+ inSender, inMaster, inInstance, inProperty),
+ bind(&IStudioFullSystemSignalSender::SendPropertyLinked, inSender, inMaster,
+ inInstance, inProperty));
+ NotifyInstancePropertyChanged(inConsumer, inCore, inSender, inInstance, inProperty,
+ inAggregate);
+ }
+}
+
+void NotifyActiveSlide(TTransactionConsumerPtr &inConsumer, TDataCorePtr inCore,
+ IStudioFullSystemSignalSender *inSender, Qt3DSDMSlideHandle inMaster,
+ int /*inIndex*/, Qt3DSDMSlideHandle inOldSlide, Qt3DSDMSlideHandle inNewSlide,
+ TAnimationCorePtr inAnimationCore, TSlideSystemPtr inSlideSystem)
+{
+ TInstancePropertyPairList thePropertyList;
+ inSlideSystem->GetUnionOfProperties(inOldSlide, inNewSlide, thePropertyList);
+ for (size_t idx = 0, end = thePropertyList.size(); idx < end; ++idx)
+ NotifyInstancePropertyChanged(inConsumer, inCore, inSender, thePropertyList[idx].first,
+ thePropertyList[idx].second, false);
+
+ RunAnimations(inSender, inMaster, inNewSlide, inAnimationCore, inCore, inConsumer);
+}
+
+void NotifyAnimationCreated(TTransactionConsumerPtr &inConsumer,
+ IStudioFullSystemSignalSender *inSender,
+ Qt3DSDMAnimationHandle inAnimation, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, bool inIsAggregate)
+{
+ if (!inIsAggregate) {
+ NotifyConsumer(inConsumer, bind(&IStudioFullSystemSignalSender::SendAnimationCreated,
+ inSender, inAnimation, inInstance, inProperty),
+ bind(&IStudioFullSystemSignalSender::SendAnimationDeleted, inSender,
+ inAnimation, inInstance, inProperty));
+ }
+}
+
+void NotifyAnimationDeleted(TTransactionConsumerPtr &inConsumer, TDataCorePtr inCore,
+ IStudioFullSystemSignalSender *inSender,
+ Qt3DSDMAnimationHandle inAnimation, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ NotifyConsumer(inConsumer, bind(&IStudioFullSystemSignalSender::SendAnimationDeleted, inSender,
+ inAnimation, inInstance, inProperty),
+ bind(&IStudioFullSystemSignalSender::SendAnimationCreated, inSender, inAnimation,
+ inInstance, inProperty));
+ NotifyInstancePropertyChanged(inConsumer, inCore, inSender, inInstance, inProperty, false);
+}
+
+void NotifyAnimationChanged(TTransactionConsumerPtr &inConsumer, TDataCorePtr inCore,
+ IStudioFullSystemSignalSender *inSender,
+ Qt3DSDMAnimationHandle inAnimation, TAnimationCorePtr inAnimationCore,
+ bool inIsAggregate)
+{
+ if (!inIsAggregate) {
+ SAnimationInfo theInfo(inAnimationCore->GetAnimationInfo(inAnimation));
+ NotifyInstancePropertyChanged(inConsumer, inCore, inSender, theInfo.m_Instance,
+ theInfo.m_Property, inIsAggregate);
+ }
+}
+
+void NotifyKeyframeInserted(TTransactionConsumerPtr &inConsumer, TDataCorePtr inCore,
+ IStudioFullSystemSignalSender *inSender,
+ Qt3DSDMAnimationHandle inAnimation, Qt3DSDMKeyframeHandle inKeyframe,
+ TAnimationCorePtr inAnimationCore, bool inIsAggregate)
+{
+ if (!inIsAggregate) {
+ NotifyConsumer(inConsumer, bind(&IStudioFullSystemSignalSender::SendKeyframeInserted,
+ inSender, inAnimation, inKeyframe),
+ bind(&IStudioFullSystemSignalSender::SendKeyframeErased, inSender,
+ inAnimation, inKeyframe));
+ NotifyAnimationChanged(inConsumer, inCore, inSender, inAnimation, inAnimationCore, false);
+ }
+}
+
+void NotifyKeyframeErased(TTransactionConsumerPtr &inConsumer, TDataCorePtr inCore,
+ IStudioFullSystemSignalSender *inSender,
+ Qt3DSDMAnimationHandle inAnimation, Qt3DSDMKeyframeHandle inKeyframe,
+ TAnimationCorePtr inAnimationCore)
+{
+ NotifyConsumer(inConsumer, bind(&IStudioFullSystemSignalSender::SendKeyframeErased, inSender,
+ inAnimation, inKeyframe),
+ bind(&IStudioFullSystemSignalSender::SendKeyframeInserted, inSender, inAnimation,
+ inKeyframe));
+ NotifyAnimationChanged(inConsumer, inCore, inSender, inAnimation, inAnimationCore, false);
+}
+
+void NotifyKeyframeUpdated(TTransactionConsumerPtr &inConsumer, TDataCorePtr inCore,
+ IStudioFullSystemSignalSender *inSender, Qt3DSDMKeyframeHandle inKeyframe,
+ TAnimationCorePtr inAnimationCore)
+{
+ NotifyConsumer(inConsumer,
+ bind(&IStudioFullSystemSignalSender::SendKeyframeUpdated, inSender, inKeyframe),
+ bind(&IStudioFullSystemSignalSender::SendKeyframeUpdated, inSender, inKeyframe));
+ Qt3DSDMAnimationHandle theAnimation(inAnimationCore->GetAnimationForKeyframe(inKeyframe));
+ NotifyAnimationChanged(inConsumer, inCore, inSender, theAnimation, inAnimationCore, false);
+}
+
+void NotifyConnectFirstKeyframeDynamicSet(TTransactionConsumerPtr &inConsumer, TDataCorePtr inCore,
+ IStudioFullSystemSignalSender *inSender,
+ Qt3DSDMAnimationHandle inAnimation, bool inDynamic,
+ TAnimationCorePtr inAnimationCore)
+{
+ NotifyConsumer(inConsumer,
+ bind(&IStudioFullSystemSignalSender::SendConnectFirstKeyframeDynamicSet,
+ inSender, inAnimation, inDynamic),
+ bind(&IStudioFullSystemSignalSender::SendConnectFirstKeyframeDynamicSet,
+ inSender, inAnimation, inDynamic));
+ NotifyAnimationChanged(inConsumer, inCore, inSender, inAnimation, inAnimationCore, false);
+}
+
+inline ISlideCoreSignalProvider *GetSlideSignaller(TSlideCorePtr inSlideCore)
+{
+ return dynamic_cast<CSlideCoreProducer *>(inSlideCore.get());
+}
+
+void NotifyInstanceCreated(TTransactionConsumerPtr &inConsumer,
+ IStudioFullSystemSignalSender *inSender, Qt3DSDMInstanceHandle instance)
+{
+ NotifyConsumer(inConsumer,
+ bind(&IStudioFullSystemSignalSender::SendInstanceCreated, inSender, instance),
+ bind(&IStudioFullSystemSignalSender::SendInstanceDeleted, inSender, instance));
+}
+
+void NotifyInstanceDeleted(TTransactionConsumerPtr &inConsumer,
+ IStudioFullSystemSignalSender *inSender, Qt3DSDMInstanceHandle instance)
+{
+ NotifyConsumer(inConsumer,
+ bind(&IStudioFullSystemSignalSender::SendInstanceDeleted, inSender, instance),
+ bind(&IStudioFullSystemSignalSender::SendInstanceCreated, inSender, instance));
+}
+
+void NotifyActionCreated(TTransactionConsumerPtr &inConsumer,
+ IStudioFullSystemSignalSender *inSender, Qt3DSDMActionHandle inAction,
+ Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance)
+{
+ NotifyConsumer(inConsumer, bind(&IStudioFullSystemSignalSender::SendActionCreated, inSender,
+ inAction, inSlide, inInstance),
+ bind(&IStudioFullSystemSignalSender::SendActionDeleted, inSender, inAction,
+ inSlide, inInstance));
+}
+
+void NotifyActionDestroyed(TTransactionConsumerPtr &inConsumer,
+ IStudioFullSystemSignalSender *inSender, Qt3DSDMActionHandle inAction,
+ Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance)
+{
+ NotifyConsumer(inConsumer, bind(&IStudioFullSystemSignalSender::SendActionDeleted, inSender,
+ inAction, inSlide, inInstance),
+ bind(&IStudioFullSystemSignalSender::SendActionCreated, inSender, inAction,
+ inSlide, inInstance));
+}
+
+void SendActionEvent(Qt3DSDMActionHandle inAction, TActionCorePtr inCore,
+ function<void()> inFunction)
+{
+ if (inCore->HandleValid(inAction))
+ inFunction();
+}
+
+void NotifyTriggerObjectSet(TTransactionConsumerPtr &inConsumer,
+ IStudioFullSystemSignalSender *inSender, Qt3DSDMActionHandle inAction,
+ TActionCorePtr inCore)
+{
+ function<void()> theFunc(
+ bind(&IStudioFullSystemSignalSender::SendTriggerObjectSet, inSender, inAction));
+ NotifyConsumer(inConsumer, bind(SendActionEvent, inAction, inCore, theFunc),
+ bind(SendActionEvent, inAction, inCore, theFunc));
+}
+
+void NotifyTargetObjectSet(TTransactionConsumerPtr &inConsumer,
+ IStudioFullSystemSignalSender *inSender, Qt3DSDMActionHandle inAction,
+ TActionCorePtr inCore)
+{
+ function<void()> theFunc(
+ bind(&IStudioFullSystemSignalSender::SendTargetObjectSet, inSender, inAction));
+ NotifyConsumer(inConsumer, bind(SendActionEvent, inAction, inCore, theFunc),
+ bind(SendActionEvent, inAction, inCore, theFunc));
+}
+
+void NotifyEventSet(TTransactionConsumerPtr &inConsumer, IStudioFullSystemSignalSender *inSender,
+ Qt3DSDMActionHandle inAction, TActionCorePtr inCore)
+{
+ function<void()> theFunc(
+ bind(&IStudioFullSystemSignalSender::SendEventSet, inSender, inAction));
+ NotifyConsumer(inConsumer, bind(SendActionEvent, inAction, inCore, theFunc),
+ bind(SendActionEvent, inAction, inCore, theFunc));
+}
+
+void NotifyHandlerSet(TTransactionConsumerPtr &inConsumer, IStudioFullSystemSignalSender *inSender,
+ Qt3DSDMActionHandle inAction, TActionCorePtr inCore)
+{
+ function<void()> theFunc(
+ bind(&IStudioFullSystemSignalSender::SendHandlerSet, inSender, inAction));
+ NotifyConsumer(inConsumer, bind(SendActionEvent, inAction, inCore, theFunc),
+ bind(SendActionEvent, inAction, inCore, theFunc));
+}
+
+void NotifyHandlerArgumentValueSet(TTransactionConsumerPtr &inConsumer,
+ IStudioFullSystemSignalSender *inSender,
+ Qt3DSDMHandlerArgHandle inAction, TActionCorePtr inCore)
+{
+ function<void()> theFunc(
+ bind(&IStudioFullSystemSignalSender::SendHandlerArgumentValueSet, inSender, inAction));
+ Qt3DSDMActionHandle theActionHdl(inCore->GetHandlerArgumentInfo(inAction).m_Action);
+ NotifyConsumer(inConsumer, bind(SendActionEvent, theActionHdl, inCore, theFunc),
+ bind(SendActionEvent, theActionHdl, inCore, theFunc));
+}
+
+void NotifyAllKeyframesErased(TTransactionConsumerPtr &inConsumer,
+ IStudioFullSystemSignalSender *inSender,
+ TAnimationCorePtr inAnimationCore, Qt3DSDMAnimationHandle inAnimation)
+{
+ if (inConsumer) {
+ TKeyframeHandleList theKeyframes;
+ inAnimationCore->GetKeyframes(inAnimation, theKeyframes);
+ for (size_t idx = 0, end = theKeyframes.size(); idx < end; ++idx) {
+ inConsumer->OnDoNotification(bind(&IStudioFullSystemSignalSender::SendKeyframeErased,
+ inSender, inAnimation, theKeyframes[idx]));
+ inConsumer->OnUndoNotification(
+ bind(&IStudioFullSystemSignalSender::SendKeyframeInserted, inSender, inAnimation,
+ theKeyframes[idx]));
+ }
+ }
+}
+
+CStudioFullSystem::CStudioFullSystem(std::shared_ptr<CStudioCoreSystem> inCoreSystem,
+ Qt3DSDMInstanceHandle inSlideInstance,
+ Qt3DSDMPropertyHandle inComponentGuidProperty,
+ Qt3DSDMInstanceHandle inActionInstance,
+ Qt3DSDMPropertyHandle inActionEyeball)
+ : m_CoreSystem(inCoreSystem)
+ , m_SlideSystem(new SSlideSystem(m_CoreSystem->GetDataCore(), m_CoreSystem->GetSlideCore(),
+ m_CoreSystem->GetSlideGraphCore(),
+ m_CoreSystem->GetAnimationCore(), inSlideInstance,
+ inComponentGuidProperty))
+ , m_ActionSystem(new CActionSystem(m_CoreSystem->GetDataCore(), m_CoreSystem->GetSlideCore(),
+ m_CoreSystem->GetSlideGraphCore(),
+ m_CoreSystem->GetActionCore(), m_SlideSystem,
+ inActionInstance, inActionEyeball))
+ , m_AggregateOperation(false)
+{
+ // TODO: Too many parameters passed in to the subsystem. Just make them know about FullSystem so
+ // they can get whatever they want
+ CStudioAnimationSystem *theAnimationSystem = new CStudioAnimationSystem(
+ m_PropertySystem, m_SlideSystem, m_CoreSystem->GetSlideCore(),
+ m_CoreSystem->GetSlideGraphCore(), m_CoreSystem->GetAnimationCore());
+ m_AnimationSystem = std::shared_ptr<qt3dsdm::IStudioAnimationSystem>(theAnimationSystem);
+
+ m_PropertySystem = std::shared_ptr<qt3dsdm::IPropertySystem>(
+ new CStudioPropertySystem(m_CoreSystem->GetNewMetaData(), m_CoreSystem->GetDataCore(),
+ m_SlideSystem, m_AnimationSystem));
+ theAnimationSystem->SetPropertySystem(m_PropertySystem);
+
+ TDataCorePtr dataCore(m_CoreSystem->GetDataCore());
+
+ static_cast<SSlideSystem *>(m_SlideSystem.get())->SetPropertySystem(m_PropertySystem);
+
+ ISlideSystemSignalProvider *theSlideSignaller =
+ dynamic_cast<SSlideSystem *>(m_SlideSystem.get())->GetSignalProvider();
+ m_Signaller = CreateStudioFullSystemSignaller(theSlideSignaller);
+ IStudioFullSystemSignalSender *theSystemSender =
+ dynamic_cast<IStudioFullSystemSignalSender *>(m_Signaller.get());
+ m_Connections.push_back(theSlideSignaller->ConnectSlideRearranged(
+ bind(NotifySlideRearranged, ref(m_Consumer), theSystemSender,
+ std::placeholders::_1,
+ std::placeholders::_2, std::placeholders::_3)));
+ m_Connections.push_back(theSlideSignaller->ConnectPropertyLinked(
+ bind(NotifyPropertyLinked, ref(m_Consumer), dataCore, theSystemSender,
+ std::placeholders::_1,
+ std::placeholders::_2, std::placeholders::_3,
+ std::cref(m_AggregateOperation))));
+ m_Connections.push_back(theSlideSignaller->ConnectPropertyUnlinked(
+ bind(NotifyPropertyUnlinked, ref(m_Consumer), dataCore, theSystemSender,
+ std::placeholders::_1,
+ std::placeholders::_2, std::placeholders::_3,
+ std::cref(m_AggregateOperation))));
+
+ m_Connections.push_back(theSlideSignaller->ConnectActiveSlide(
+ bind(NotifyActiveSlide, ref(m_Consumer), dataCore, theSystemSender,
+ std::placeholders::_1,
+ std::placeholders::_2, std::placeholders::_3, std::placeholders::_4,
+ GetAnimationCore(), GetSlideSystem())));
+
+ IDataCoreSignalProvider *theDataSignals =
+ dynamic_cast<IDataCoreSignalProvider *>(m_CoreSystem->GetDataCore().get());
+ m_Connections.push_back(theDataSignals->ConnectInstanceCreated(
+ bind(NotifyInstanceCreated, ref(m_Consumer), theSystemSender, std::placeholders::_1)));
+ m_Connections.push_back(theDataSignals->ConnectInstanceDeleted(
+ bind(NotifyInstanceDeleted, ref(m_Consumer), theSystemSender, std::placeholders::_1)));
+
+ ISlideCoreSignalProvider *theSlideCoreSignaller =
+ dynamic_cast<ISlideCoreSignalProvider *>(m_CoreSystem->GetSlideCore().get());
+ m_Connections.push_back(theSlideCoreSignaller->ConnectInstancePropertyValueSet(
+ bind(NotifyInstancePropertyChanged, ref(m_Consumer), dataCore, theSystemSender,
+ std::placeholders::_2, std::placeholders::_3,
+ std::cref(m_AggregateOperation))));
+ m_Connections.push_back(theSlideCoreSignaller->ConnectSlideTimeChanged(
+ bind(NotifyComponentSeconds, ref(m_Consumer), theSystemSender, std::placeholders::_1,
+ dataCore, GetAnimationCore(), GetAnimationSystem(), GetSlideSystem())));
+ m_Connections.push_back(theSlideCoreSignaller->ConnectSlideCreated(
+ bind(NotifySlideCreated, ref(m_Consumer), theSystemSender, std::placeholders::_1)));
+ m_Connections.push_back(theSlideCoreSignaller->ConnectSlideDeleted(
+ bind(NotifySlideDeleted, ref(m_Consumer), theSystemSender, std::placeholders::_1)));
+
+ IAnimationCoreSignalProvider *theAnimationSignals =
+ dynamic_cast<IAnimationCoreSignalProvider *>(GetAnimationCore().get());
+ m_Connections.push_back(theAnimationSignals->ConnectAnimationCreated(
+ bind(NotifyAnimationCreated, ref(m_Consumer), theSystemSender,
+ std::placeholders::_1, std::placeholders::_3, std::placeholders::_4,
+ std::cref(m_AggregateOperation))));
+ m_Connections.push_back(theAnimationSignals->ConnectAnimationDeleted(
+ bind(NotifyAnimationDeleted, ref(m_Consumer), dataCore, theSystemSender,
+ std::placeholders::_1, std::placeholders::_3, std::placeholders::_4)));
+ m_Connections.push_back(theAnimationSignals->ConnectKeyframeInserted(
+ bind(NotifyKeyframeInserted, ref(m_Consumer), dataCore, theSystemSender,
+ std::placeholders::_1, std::placeholders::_2,
+ GetAnimationCore(), std::cref(m_AggregateOperation))));
+ m_Connections.push_back(theAnimationSignals->ConnectKeyframeErased(
+ bind(NotifyKeyframeErased, ref(m_Consumer), dataCore, theSystemSender,
+ std::placeholders::_1, std::placeholders::_2,
+ GetAnimationCore())));
+ m_Connections.push_back(theAnimationSignals->ConnectKeyframeUpdated(
+ bind(NotifyKeyframeUpdated, ref(m_Consumer), dataCore, theSystemSender,
+ std::placeholders::_1, GetAnimationCore())));
+ m_Connections.push_back(theAnimationSignals->ConnectFirstKeyframeDynamicSet(
+ bind(NotifyConnectFirstKeyframeDynamicSet, ref(m_Consumer), dataCore,
+ theSystemSender, std::placeholders::_1,
+ std::placeholders::_2, GetAnimationCore())));
+ m_Connections.push_back(theAnimationSignals->ConnectBeforeAllKeyframesErased(
+ bind(NotifyAllKeyframesErased, ref(m_Consumer), theSystemSender,
+ GetAnimationCore(), std::placeholders::_1)));
+
+ IInstancePropertyCoreSignalProvider *thePropertyCoreSignaller =
+ dynamic_cast<CStudioPropertySystem *>(m_PropertySystem.get())
+ ->GetPropertyCoreSignalProvider();
+ m_Connections.push_back(thePropertyCoreSignaller->ConnectInstancePropertyValue(
+ bind(NotifyInstancePropertyChanged, ref(m_Consumer), dataCore, theSystemSender,
+ std::placeholders::_1, std::placeholders::_2, std::cref(m_AggregateOperation))));
+
+ thePropertyCoreSignaller = dynamic_cast<CStudioPropertySystem *>(m_PropertySystem.get())
+ ->GetImmediatePropertyCoreSignalProvider();
+ m_Connections.push_back(thePropertyCoreSignaller->ConnectInstancePropertyValue(
+ bind(&IStudioFullSystemSignalSender::SendInstancePropertyValue, theSystemSender,
+ std::placeholders::_1, std::placeholders::_2)));
+
+ thePropertyCoreSignaller =
+ dynamic_cast<IInstancePropertyCoreSignalProvider *>(m_CoreSystem->GetDataCore().get());
+ m_Connections.push_back(thePropertyCoreSignaller->ConnectInstancePropertyValue(
+ bind(NotifyInstancePropertyChanged, ref(m_Consumer), dataCore, theSystemSender,
+ std::placeholders::_1, std::placeholders::_2, std::cref(m_AggregateOperation))));
+
+ IActionCoreSignalProvider *theActionSignals =
+ dynamic_cast<IActionCoreSignalProvider *>(m_CoreSystem->GetActionCore().get());
+ m_Connections.push_back(theActionSignals->ConnectTriggerObjectSet(
+ bind(NotifyTriggerObjectSet, ref(m_Consumer), theSystemSender,
+ std::placeholders::_1, GetActionCore())));
+ m_Connections.push_back(theActionSignals->ConnectTargetObjectSet(
+ bind(NotifyTargetObjectSet, ref(m_Consumer), theSystemSender,
+ std::placeholders::_1, GetActionCore())));
+ m_Connections.push_back(theActionSignals->ConnectEventSet(
+ bind(NotifyEventSet, ref(m_Consumer), theSystemSender,
+ std::placeholders::_1, GetActionCore())));
+ m_Connections.push_back(theActionSignals->ConnectHandlerSet(
+ bind(NotifyHandlerSet, ref(m_Consumer), theSystemSender,
+ std::placeholders::_1, GetActionCore())));
+ m_Connections.push_back(theActionSignals->ConnectHandlerArgumentValueSet(bind(
+ NotifyHandlerArgumentValueSet, ref(m_Consumer), theSystemSender,
+ std::placeholders::_1, GetActionCore())));
+
+ IActionSystemSignalProvider *theActionSystemSignals =
+ dynamic_cast<CActionSystem *>(m_ActionSystem.get())->GetSignalProvider();
+ m_Connections.push_back(theActionSystemSignals->ConnectActionCreated(
+ bind(NotifyActionCreated, ref(m_Consumer), theSystemSender,
+ std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)));
+ m_Connections.push_back(theActionSystemSignals->ConnectActionDeleted(
+ bind(NotifyActionDestroyed, ref(m_Consumer), theSystemSender,
+ std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)));
+}
+
+CStudioFullSystem::~CStudioFullSystem()
+{
+}
+
+std::shared_ptr<IPropertySystem> CStudioFullSystem::GetPropertySystem()
+{
+ return m_PropertySystem;
+}
+std::shared_ptr<ISlideSystem> CStudioFullSystem::GetSlideSystem()
+{
+ return m_SlideSystem;
+}
+std::shared_ptr<ISlideCore> CStudioFullSystem::GetSlideCore()
+{
+ return m_CoreSystem->GetSlideCore();
+}
+std::shared_ptr<IAnimationCore> CStudioFullSystem::GetAnimationCore()
+{
+ return m_CoreSystem->GetAnimationCore();
+}
+std::shared_ptr<IStudioAnimationSystem> CStudioFullSystem::GetAnimationSystem()
+{
+ return m_AnimationSystem;
+}
+std::shared_ptr<IActionCore> CStudioFullSystem::GetActionCore()
+{
+ return m_CoreSystem->GetActionCore();
+}
+std::shared_ptr<IActionSystem> CStudioFullSystem::GetActionSystem()
+{
+ return m_ActionSystem;
+}
+
+std::shared_ptr<IPropertySystem> CStudioFullSystem::GetPropertySystem() const
+{
+ return m_PropertySystem;
+}
+std::shared_ptr<ISlideSystem> CStudioFullSystem::GetSlideSystem() const
+{
+ return m_SlideSystem;
+}
+std::shared_ptr<ISlideCore> CStudioFullSystem::GetSlideCore() const
+{
+ return m_CoreSystem->GetSlideCore();
+}
+std::shared_ptr<IAnimationCore> CStudioFullSystem::GetAnimationCore() const
+{
+ return m_CoreSystem->GetAnimationCore();
+}
+std::shared_ptr<IStudioAnimationSystem> CStudioFullSystem::GetAnimationSystem() const
+{
+ return m_AnimationSystem;
+}
+std::shared_ptr<IActionCore> CStudioFullSystem::GetActionCore() const
+{
+ return m_CoreSystem->GetActionCore();
+}
+std::shared_ptr<IActionSystem> CStudioFullSystem::GetActionSystem() const
+{
+ return m_ActionSystem;
+}
+
+std::shared_ptr<CStudioCoreSystem> CStudioFullSystem::GetCoreSystem()
+{
+ return m_CoreSystem;
+}
+
+bool CStudioFullSystem::GetCanonicalInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ SValue theTemp;
+ bool retval = dynamic_cast<const CStudioPropertySystem *>(m_PropertySystem.get())
+ ->GetCanonicalInstancePropertyValue(inInstance, inProperty, theTemp);
+ if (retval)
+ outValue = theTemp.toOldSkool();
+ return retval;
+}
+
+Qt3DSDMInstanceHandle CStudioFullSystem::FindInstanceByName(Qt3DSDMPropertyHandle inNameProperty,
+ const TCharStr &inName) const
+{
+ return m_CoreSystem->FindInstanceByName(inNameProperty, inName);
+}
+
+void CStudioFullSystem::SetConsumer(TTransactionConsumerPtr inConsumer)
+{
+ m_CoreSystem->SetConsumer(inConsumer);
+ DoSetConsumer(inConsumer, m_AnimationSystem);
+ m_Consumer = inConsumer;
+}
+
+IStudioFullSystemSignalProvider *CStudioFullSystem::GetSignalProvider()
+{
+ return dynamic_cast<IStudioFullSystemSignalProvider *>(m_Signaller.get());
+}
+
+IStudioFullSystemSignalSender *CStudioFullSystem::GetSignalSender()
+{
+ return dynamic_cast<IStudioFullSystemSignalSender *>(m_Signaller.get());
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/StudioFullSystem.h b/src/Runtime/ogl-runtime/src/dm/systems/StudioFullSystem.h
new file mode 100644
index 00000000..9411e783
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/StudioFullSystem.h
@@ -0,0 +1,164 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef STUDIOFULLSYSTEMH
+#define STUDIOFULLSYSTEMH
+#include "Qt3DSDMTransactions.h"
+#include "Qt3DSDMHandles.h"
+#include "Qt3DSDMSignals.h"
+#include "Qt3DSDMDataTypes.h"
+
+namespace qt3dsdm {
+class IPropertySystem;
+class ISlideSystem;
+class IStudioAnimationSystem;
+class CStudioCoreSystem;
+class IInstancePropertyCore;
+class INotificationEngine;
+class IAnimationCore;
+class IActionCore;
+class ISlideCore;
+class IActionSystem;
+class ISignalConnection;
+
+class IStudioFullSystemSerializeHelper
+{
+public:
+ virtual ~IStudioFullSystemSerializeHelper() {}
+ /**
+ * Given an instance, set the name if possible. Called for parents of existing instances
+ * so we can find instances by name later. There is an implicit assumption for partial
+ * serialization that none of the instances that are serialized out are base instances
+ * for other serialized instances. There is another implicit assumption that the system
+ * can name any instances used a base.
+ */
+ virtual bool GetInstanceName(Qt3DSDMInstanceHandle inInstance, TCharStr &outName) = 0;
+};
+
+typedef std::shared_ptr<IStudioFullSystemSerializeHelper> TStudioFullSystemSerializeHelperPtr;
+
+// The full studio system needs extra information in the deserialize stage. This information
+// requires knowledge of the larger studio universe in order to work and thus clients need to
+// pass in an interface.
+class IStudioFullSystemDeserializeHelper
+{
+public:
+ virtual ~IStudioFullSystemDeserializeHelper() {}
+ /**
+ * Return an instance by name. Whatever method was used above to name instances
+ * should be used to find a given instance by name.
+ */
+ virtual Qt3DSDMInstanceHandle FindInstanceByName(const TCharStr &inName) = 0;
+ /**
+ * Translate a given guid. For pass 1, you should only translate ids and just return identity
+ * for anything that isn't an id.
+ */
+ virtual void TranslateGuidPass1(Qt3DSDMPropertyHandle inProperty, SLong4 inValue) = 0;
+ /**
+ * Now translate guids that are used as data variables. These are links to other objects and
+ *the GUID
+ * information should come from what was created in pass 1.
+ */
+ virtual SLong4 TranslateGuidPass2(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, SLong4 inValue) = 0;
+};
+
+typedef std::shared_ptr<IStudioFullSystemDeserializeHelper> TStudioFullSystemDeserializeHelperPtr;
+
+class CStudioFullSystem : public ITransactionProducer
+{
+ Q_DISABLE_COPY(CStudioFullSystem)
+
+ // Base that the other types are built upon
+ std::shared_ptr<CStudioCoreSystem> m_CoreSystem;
+
+ // The data model exposed to studio
+ std::shared_ptr<IPropertySystem> m_PropertySystem;
+ std::shared_ptr<ISlideSystem> m_SlideSystem;
+ std::shared_ptr<IStudioAnimationSystem> m_AnimationSystem;
+ std::shared_ptr<IActionSystem> m_ActionSystem;
+
+ std::vector<std::shared_ptr<ISignalConnection>> m_Connections;
+
+ TTransactionConsumerPtr m_Consumer;
+ TSignalItemPtr m_Signaller;
+ bool m_AggregateOperation;
+
+public:
+ CStudioFullSystem(std::shared_ptr<CStudioCoreSystem> inCoreSystem,
+ Qt3DSDMInstanceHandle inSlideInstance,
+ Qt3DSDMPropertyHandle inComponentGuidProperty,
+ Qt3DSDMInstanceHandle inActionInstance, Qt3DSDMPropertyHandle inActionEyeball);
+ virtual ~CStudioFullSystem();
+
+ void BeginAggregateOperation() { m_AggregateOperation = true; }
+ void EndAggregateOperation() { m_AggregateOperation = false; }
+
+ std::shared_ptr<IPropertySystem> GetPropertySystem();
+ std::shared_ptr<ISlideSystem> GetSlideSystem();
+ std::shared_ptr<ISlideCore> GetSlideCore();
+ std::shared_ptr<IAnimationCore> GetAnimationCore();
+ std::shared_ptr<IStudioAnimationSystem> GetAnimationSystem();
+ std::shared_ptr<IActionCore> GetActionCore();
+ std::shared_ptr<IActionSystem> GetActionSystem();
+
+ std::shared_ptr<IPropertySystem> GetPropertySystem() const;
+ std::shared_ptr<ISlideSystem> GetSlideSystem() const;
+ std::shared_ptr<ISlideCore> GetSlideCore() const;
+ std::shared_ptr<IAnimationCore> GetAnimationCore() const;
+ std::shared_ptr<IStudioAnimationSystem> GetAnimationSystem() const;
+ std::shared_ptr<IActionCore> GetActionCore() const;
+ std::shared_ptr<IActionSystem> GetActionSystem() const;
+
+ // Don't use this unless you are a test harness or some other more-knowledgeable-than-ordinary
+ // entity.
+ std::shared_ptr<CStudioCoreSystem> GetCoreSystem();
+
+ // Ignoring animation and the currently active slide, get the canonical instance property value
+ // for this instance.
+ bool GetCanonicalInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const;
+ Qt3DSDMInstanceHandle FindInstanceByName(Qt3DSDMPropertyHandle inNameProperty,
+ const TCharStr &inName) const;
+
+ void SetConsumer(TTransactionConsumerPtr inConsumer) override;
+ TTransactionConsumerPtr GetConsumer() { return m_Consumer; }
+
+ // This signal provider sends signals during undo/redo and during
+ // animation runs.
+ IStudioFullSystemSignalProvider *GetSignalProvider();
+
+ // Return the signal sender so that we can activate/deactivate signals
+ IStudioFullSystemSignalSender *GetSignalSender();
+};
+
+typedef std::shared_ptr<CStudioFullSystem> TStudioFullSystemPtr;
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/StudioPropertySystem.cpp b/src/Runtime/ogl-runtime/src/dm/systems/StudioPropertySystem.cpp
new file mode 100644
index 00000000..78fabc6b
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/StudioPropertySystem.cpp
@@ -0,0 +1,233 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "Qt3DSDMPrefix.h"
+#include "StudioPropertySystem.h"
+#include "StudioAnimationSystem.h"
+#include "SignalsImpl.h"
+
+using namespace std;
+
+namespace qt3dsdm {
+
+CStudioPropertySystem::CStudioPropertySystem(std::shared_ptr<IMetaData> inMetaData,
+ TDataCorePtr inDataCore, TSlideSystemPtr inSlideSystem,
+ TStudioAnimationSystemPtr inStudioAnimationSystem)
+ : m_MetaData(inMetaData)
+ , m_DataCore(inDataCore)
+ , m_SlideSystem(inSlideSystem)
+ , m_StudioAnimationSystem(inStudioAnimationSystem)
+{
+ m_PropertyCoreSignaller = CreatePropertyCoreSignaller();
+ m_ImmediateModePropertyCoreSignaller = CreatePropertyCoreSignaller();
+}
+
+DataModelDataType::Value CStudioPropertySystem::GetDataType(Qt3DSDMPropertyHandle inProperty) const
+{
+ if (m_DataCore->IsProperty(inProperty))
+ return m_DataCore->GetProperty(inProperty).m_Type;
+ return DataModelDataType::None;
+}
+
+TCharStr CStudioPropertySystem::GetName(Qt3DSDMPropertyHandle inProperty) const
+{
+ if (m_DataCore->IsProperty(inProperty))
+ return m_DataCore->GetProperty(inProperty).m_Name;
+ return TCharStr();
+}
+
+TCharStr CStudioPropertySystem::GetFormalName(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ if (inInstance.Valid() && inProperty.Valid())
+ return m_MetaData->GetFormalName(inInstance, inProperty);
+ return TCharStr();
+}
+
+AdditionalMetaDataType::Value
+CStudioPropertySystem::GetAdditionalMetaDataType(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ return m_MetaData->GetAdditionalMetaDataType(inInstance, inProperty);
+}
+
+TMetaDataData
+CStudioPropertySystem::GetAdditionalMetaDataData(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ return m_MetaData->GetAdditionalMetaDataData(inInstance, inProperty);
+}
+
+Qt3DSDMInstanceHandle CStudioPropertySystem::GetPropertyOwner(Qt3DSDMPropertyHandle inProperty) const
+{
+
+ qt3dsdm::Qt3DSDMPropertyDefinition thePropDef = m_DataCore->GetProperty(inProperty);
+ return thePropDef.m_Instance;
+}
+
+Qt3DSDMPropertyHandle
+CStudioPropertySystem::GetAggregateInstancePropertyByName(Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inStr) const
+{
+ return m_DataCore->GetAggregateInstancePropertyByName(inInstance, inStr);
+}
+
+void CStudioPropertySystem::GetAggregateInstanceProperties(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleList &outProperties) const
+{
+ m_DataCore->GetAggregateInstanceProperties(inInstance, outProperties);
+}
+
+bool CStudioPropertySystem::HasAggregateInstanceProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ return m_DataCore->HasAggregateInstanceProperty(inInstance, inProperty);
+}
+
+bool ApplyValueAndReturnTrue(const SValue &inValue, SValue &outValue)
+{
+ outValue = inValue;
+ return true;
+}
+
+bool CStudioPropertySystem::GetInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ if (!m_DataCore->IsInstance(inInstance))
+ return false;
+ if (!m_DataCore->IsProperty(inProperty))
+ return false;
+
+ Qt3DSDMSlideHandle theAnimationSlide;
+ theAnimationSlide = m_SlideSystem->GetApplicableSlide(inInstance, inProperty);
+ SValue theTemp;
+ bool retval = SetDefault(GetDataType(inProperty), theTemp);
+ if (retval && theAnimationSlide.Valid()
+ && m_StudioAnimationSystem->GetAnimatedInstancePropertyValue(theAnimationSlide, inInstance,
+ inProperty, theTemp))
+ return ApplyValueAndReturnTrue(theTemp, outValue);
+ if (theAnimationSlide.Valid()
+ && m_SlideSystem->GetInstancePropertyValue(theAnimationSlide, inInstance, inProperty,
+ theTemp))
+ return ApplyValueAndReturnTrue(theTemp, outValue);
+ return m_DataCore->GetInstancePropertyValue(inInstance, inProperty, outValue);
+}
+
+void CStudioPropertySystem::SetInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ m_DataCore->CheckValue(inInstance, inProperty, inValue);
+
+ Qt3DSDMSlideHandle theApplicableSlide;
+ theApplicableSlide = m_SlideSystem->GetApplicableSlide(inInstance, inProperty);
+ if (theApplicableSlide.Valid()) {
+ if (!m_StudioAnimationSystem->SetAnimatedInstancePropertyValue(
+ theApplicableSlide, inInstance, inProperty, inValue.toOldSkool())) {
+ // Force set on slide where item exists as it doesn't exist on the root.
+ m_SlideSystem->ForceSetInstancePropertyValue(theApplicableSlide, inInstance, inProperty,
+ inValue.toOldSkool());
+ }
+ } else {
+ m_DataCore->SetInstancePropertyValue(inInstance, inProperty, inValue);
+ }
+}
+
+Qt3DSDMInstanceHandle CStudioPropertySystem::CreateInstance()
+{
+ return m_DataCore->CreateInstance();
+}
+
+void CStudioPropertySystem::GetInstances(TInstanceHandleList &outInstances) const
+{
+ m_DataCore->GetInstances(outInstances);
+}
+
+void CStudioPropertySystem::DeleteInstance(Qt3DSDMInstanceHandle inHandle)
+{
+ m_DataCore->DeleteInstance(inHandle);
+}
+
+void CStudioPropertySystem::DeriveInstance(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent)
+{
+ m_DataCore->DeriveInstance(inInstance, inParent);
+}
+
+bool CStudioPropertySystem::IsInstanceOrDerivedFrom(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent) const
+{
+ return m_DataCore->IsInstanceOrDerivedFrom(inInstance, inParent);
+}
+
+QVector<Qt3DSDMPropertyHandle>
+CStudioPropertySystem::GetControllableProperties(Qt3DSDMInstanceHandle inInst) const
+{
+ vector<Qt3DSDMMetaDataPropertyHandle> propList;
+ QVector<Qt3DSDMPropertyHandle> outList;
+ m_MetaData->GetMetaDataProperties(inInst, propList);
+
+ for (const auto it : qAsConst(propList)) {
+ auto metadata = m_MetaData->GetMetaDataPropertyInfo(it).getValue();
+
+ if ((metadata.m_Controllable
+ || (metadata.m_Animatable
+ && m_StudioAnimationSystem->IsPropertyAnimatable(inInst, metadata.m_Property)))
+ && !metadata.m_IsHidden) {
+ outList.append(metadata.m_Property);
+ }
+ }
+ return outList;
+}
+
+Qt3DSDMPropertyHandle CStudioPropertySystem::AddProperty(Qt3DSDMInstanceHandle inInstance,
+ TCharPtr inName,
+ DataModelDataType::Value inPropType)
+{
+ return m_DataCore->AddProperty(inInstance, inName, inPropType);
+}
+
+bool CStudioPropertySystem::HandleValid(int inHandle) const
+{
+ return m_DataCore->HandleValid(inHandle);
+}
+
+bool CStudioPropertySystem::GetCanonicalInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ SValue theTempValue;
+ if (m_SlideSystem->GetCanonicalInstancePropertyValue(inInstance, inProperty, theTempValue)) {
+ outValue = SValue(theTempValue);
+ return true;
+ }
+ return m_DataCore->GetInstancePropertyValue(inInstance, inProperty, outValue);
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/StudioPropertySystem.h b/src/Runtime/ogl-runtime/src/dm/systems/StudioPropertySystem.h
new file mode 100644
index 00000000..67abcf98
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/StudioPropertySystem.h
@@ -0,0 +1,132 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef INSTANCEPROPERTYCORESYSTEMH
+#define INSTANCEPROPERTYCORESYSTEMH
+
+#include "Qt3DSDMSlides.h"
+#include "Qt3DSDMAnimation.h"
+#include "Qt3DSDMSignals.h"
+#include "Qt3DSDMDataCore.h"
+
+namespace qt3dsdm {
+
+typedef std::tuple<Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, SValue> TTemporaryPropertyValue;
+typedef std::vector<TTemporaryPropertyValue> TTemporaryPropertyValueList;
+
+/**
+ * Get/set instance properties taking the slide and slide graph, and animation systems into
+ *account.
+ * Also takes care of notifying external entities when a property changes.
+ */
+class CStudioPropertySystem : public IPropertySystem
+{
+ std::shared_ptr<IMetaData> m_MetaData;
+ TDataCorePtr m_DataCore;
+
+ TSlideSystemPtr m_SlideSystem;
+ TStudioAnimationSystemPtr m_StudioAnimationSystem;
+
+ TSignalItemPtr m_PropertyCoreSignaller;
+ TSignalItemPtr m_ImmediateModePropertyCoreSignaller;
+
+public:
+ CStudioPropertySystem(std::shared_ptr<IMetaData> inMetaData, TDataCorePtr inDataCore,
+ TSlideSystemPtr inSlideSystem,
+ TStudioAnimationSystemPtr inStudioAnimationSystem);
+
+ IInstancePropertyCoreSignalProvider *GetPropertyCoreSignalProvider()
+ {
+ return dynamic_cast<IInstancePropertyCoreSignalProvider *>(m_PropertyCoreSignaller.get());
+ }
+ // The immediate signaller is used before changes have been committed for very live feedback.
+ IInstancePropertyCoreSignalProvider *GetImmediatePropertyCoreSignalProvider()
+ {
+ return dynamic_cast<IInstancePropertyCoreSignalProvider *>(
+ m_ImmediateModePropertyCoreSignaller.get());
+ }
+
+ IInstancePropertyCoreSignalSender *GetPropertyCoreSignalSender()
+ {
+ return dynamic_cast<IInstancePropertyCoreSignalSender *>(m_PropertyCoreSignaller.get());
+ }
+
+ DataModelDataType::Value GetDataType(Qt3DSDMPropertyHandle inProperty) const override;
+ TCharStr GetName(Qt3DSDMPropertyHandle inProperty) const override;
+ TCharStr GetFormalName(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const override;
+ virtual AdditionalMetaDataType::Value
+ GetAdditionalMetaDataType(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const override;
+ TMetaDataData GetAdditionalMetaDataData(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const override;
+ Qt3DSDMInstanceHandle GetPropertyOwner(Qt3DSDMPropertyHandle inProperty) const override;
+
+ Qt3DSDMPropertyHandle GetAggregateInstancePropertyByName(Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inStr) const override;
+ void GetAggregateInstanceProperties(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleList &outProperties) const override;
+ bool HasAggregateInstanceProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const override;
+
+ bool GetInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const override;
+ void SetInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override;
+
+ Qt3DSDMInstanceHandle CreateInstance() override;
+ void GetInstances(TInstanceHandleList &outInstances) const override;
+ void DeleteInstance(Qt3DSDMInstanceHandle inHandle) override;
+
+ void DeriveInstance(Qt3DSDMInstanceHandle inInstance, Qt3DSDMInstanceHandle inParent) override;
+ bool IsInstanceOrDerivedFrom(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent) const override;
+
+ Qt3DSDMPropertyHandle AddProperty(Qt3DSDMInstanceHandle inInstance, TCharPtr inName,
+ DataModelDataType::Value inPropType) override;
+ bool HandleValid(int inHandle) const override;
+
+ // Get the instance property value from the slide that owns the instance or the data core if the
+ // slide doesn't have the value
+ bool GetCanonicalInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const;
+
+ QVector<Qt3DSDMPropertyHandle> GetControllableProperties(
+ Qt3DSDMInstanceHandle inInst) const override;
+
+private:
+ static bool DerivedGuidMatches(qt3dsdm::IDataCore &inDataCore,
+ qt3dsdm::Qt3DSDMInstanceHandle inInstance,
+ qt3dsdm::Qt3DSDMPropertyHandle inProperty, qt3dsdm::SLong4 inGuid);
+ CStudioPropertySystem(const CStudioPropertySystem&) = delete;
+ CStudioPropertySystem& operator=(const CStudioPropertySystem&) = delete;
+};
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/VectorTransactions.h b/src/Runtime/ogl-runtime/src/dm/systems/VectorTransactions.h
new file mode 100644
index 00000000..ff1fe2e2
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/VectorTransactions.h
@@ -0,0 +1,235 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef VECTORTRANSACTIONSH
+#define VECTORTRANSACTIONSH
+
+namespace qt3dsdm {
+template <typename TItemType>
+inline void VecInsert(std::vector<TItemType> &inItems, const TItemType &inItem, size_t inIndex)
+{
+ inItems.insert(inItems.begin() + inIndex, inItem);
+}
+
+template <typename TItemType>
+inline void VecErase(std::vector<TItemType> &inItems, const TItemType &inItem)
+{
+ erase_if(inItems, std::bind(std::equal_to<TItemType>(), inItem, std::placeholders::_1));
+}
+
+template <typename TItemType>
+inline void VecInsertTransaction(const char *inFile, int inLine, std::vector<TItemType> &inItems,
+ size_t inIndex, TTransactionConsumerPtr &inConsumer)
+{
+ TItemType theItem = inItems.at(inIndex);
+ TTransactionPtr theTransaction(DoCreateGenericTransaction(
+ inFile, inLine, std::bind(VecInsert<TItemType>, std::ref(inItems), theItem, inIndex),
+ std::bind(VecErase<TItemType>, std::ref(inItems), theItem)));
+ inConsumer->OnTransaction(theTransaction);
+}
+
+template <typename TItemType>
+inline void VecEraseTransaction(const char *inFile, int inLine, std::vector<TItemType> &inItems,
+ size_t inIndex, const TItemType &inItem,
+ TTransactionConsumerPtr &inConsumer)
+{
+ TTransactionPtr theTransaction(DoCreateGenericTransaction(
+ inFile, inLine, std::bind(VecErase<TItemType>, std::ref(inItems), inItem),
+ std::bind(VecInsert<TItemType>, std::ref(inItems), inItem, inIndex)));
+ inConsumer->OnTransaction(theTransaction);
+}
+
+template <typename TItemType>
+inline void CreateVecInsertTransaction(const char *inFile, int inLine,
+ TTransactionConsumerPtr inConsumer, const TItemType &inItem,
+ std::vector<TItemType> &inItems)
+{
+ using namespace std;
+ size_t theDistance = distance(inItems.begin(), find(inItems.begin(), inItems.end(), inItem));
+ RunWithConsumer(inConsumer, std::bind(VecInsertTransaction<TItemType>, inFile, inLine,
+ std::ref(inItems), theDistance, std::placeholders::_1));
+}
+
+template <typename TItemType>
+inline void CreateVecEraseTransaction(const char *inFile, int inLine,
+ TTransactionConsumerPtr inConsumer, const TItemType &inItem,
+ std::vector<TItemType> &inItems)
+{
+ using namespace std;
+ size_t theDistance = distance(inItems.begin(), find(inItems.begin(), inItems.end(), inItem));
+ RunWithConsumer(inConsumer,
+ std::bind(VecEraseTransaction<TItemType>, inFile, inLine, std::ref(inItems),
+ theDistance, std::ref(inItem), std::placeholders::_1));
+}
+
+template <typename TKeyType, typename TValueType, typename THashType>
+struct HashMapAction
+{
+ std::unordered_map<TKeyType, TValueType, THashType> &m_HashMap;
+ std::pair<TKeyType, TValueType> m_Value;
+
+ HashMapAction(std::unordered_map<TKeyType, TValueType, THashType> &map,
+ const std::pair<TKeyType, TValueType> &val)
+ : m_HashMap(map)
+ , m_Value(val)
+ {
+ }
+ bool Exists() { return m_HashMap.find(m_Value.first) != m_HashMap.end(); }
+ void Add()
+ {
+ Q_ASSERT(!Exists());
+ m_HashMap.insert(m_Value);
+ }
+ void Remove()
+ {
+ Q_ASSERT(Exists());
+ m_HashMap.erase(m_HashMap.find(m_Value.first));
+ }
+};
+
+template <typename TKeyType, typename TValueType, typename THashType>
+struct HashMapInsertTransaction : public HashMapAction<TKeyType, TValueType, THashType>,
+ public ITransaction,
+ public IMergeableTransaction<TValueType>
+{
+ typedef HashMapAction<TKeyType, TValueType, THashType> base;
+ HashMapInsertTransaction(const char *inFile, int inLine,
+ std::unordered_map<TKeyType, TValueType, THashType> &map,
+ const std::pair<TKeyType, TValueType> &val)
+ : HashMapAction<TKeyType, TValueType, THashType>(map, val)
+ , ITransaction(inFile, inLine)
+ {
+ }
+ void Do() override { base::Add(); }
+ void Undo() override { base::Remove(); }
+ void Update(const TValueType &inValue) override { base::m_Value.second = inValue; }
+};
+
+template <typename TKeyType, typename TValueType, typename THashType>
+struct HashMapEraseTransaction : public HashMapAction<TKeyType, TValueType, THashType>,
+ public ITransaction
+{
+ typedef HashMapAction<TKeyType, TValueType, THashType> base;
+ HashMapEraseTransaction(const char *inFile, int inLine,
+ std::unordered_map<TKeyType, TValueType, THashType> &map,
+ const std::pair<TKeyType, TValueType> &val)
+ : HashMapAction<TKeyType, TValueType, THashType>(map, val)
+ , ITransaction(inFile, inLine)
+ {
+ }
+ void Do() override { base::Remove(); }
+ void Undo() override { base::Add(); }
+};
+
+template <typename TKeyType, typename TValueType, typename THashType>
+inline std::shared_ptr<IMergeableTransaction<TValueType>>
+CreateHashMapInsertTransaction(const char *inFile, int inLine, TTransactionConsumerPtr inConsumer,
+ const std::pair<TKeyType, TValueType> &inItem,
+ std::unordered_map<TKeyType, TValueType, THashType> &inItems)
+{
+ using namespace std;
+ std::shared_ptr<IMergeableTransaction<TValueType>> retval;
+ if (inConsumer) {
+ std::shared_ptr<HashMapInsertTransaction<TKeyType, TValueType, THashType>> transaction(
+ std::make_shared<HashMapInsertTransaction<TKeyType, TValueType, THashType>>(
+ inFile, inLine, std::ref(inItems), std::cref(inItem)));
+ retval = static_pointer_cast<IMergeableTransaction<TValueType>>(transaction);
+ inConsumer->OnTransaction(static_pointer_cast<ITransaction>(transaction));
+ }
+ return retval;
+}
+
+template <typename TKeyType, typename TValueType, typename THashType>
+inline void
+CreateHashMapEraseTransaction(const char *inFile, int inLine, TTransactionConsumerPtr inConsumer,
+ const std::pair<TKeyType, TValueType> &inItem,
+ std::unordered_map<TKeyType, TValueType, THashType> &inItems)
+{
+ using namespace std;
+ if (inConsumer)
+ inConsumer->OnTransaction(static_pointer_cast<ITransaction>(
+ std::make_shared<HashMapEraseTransaction<TKeyType, TValueType, THashType>>(
+ inFile, inLine, std::ref(inItems), std::cref(inItem))));
+}
+
+template <typename TKeyType, typename TValueType, typename THashType>
+struct HashMapSwapTransaction : public ITransaction, public IMergeableTransaction<TValueType>
+{
+ typedef std::unordered_map<TKeyType, TValueType, THashType> TMapType;
+
+ TMapType &m_HashMap;
+ TKeyType m_Key;
+ TValueType m_OldValue;
+ TValueType m_NewValue;
+
+ HashMapSwapTransaction(const char *inFile, int inLine, TMapType &inMap, const TKeyType &inKey,
+ const TValueType &inOldVal, const TValueType &inNewVal)
+ : ITransaction(inFile, inLine)
+ , m_HashMap(inMap)
+ , m_Key(inKey)
+ , m_OldValue(inOldVal)
+ , m_NewValue(inNewVal)
+ {
+ }
+
+ bool Exists() { return m_HashMap.find(m_Key) != m_HashMap.end(); }
+ void SetValue(const TValueType &inVal)
+ {
+ typename TMapType::iterator find(m_HashMap.find(m_Key));
+ if (find != m_HashMap.end())
+ find->second = inVal;
+ else
+ m_HashMap.insert(std::make_pair(m_Key, inVal));
+ }
+ void Do() override { SetValue(m_NewValue); }
+ void Undo() override { SetValue(m_OldValue); }
+ void Update(const TValueType &inValue) override { m_NewValue = inValue; }
+};
+
+template <typename TKeyType, typename TValueType, typename THashType>
+inline std::shared_ptr<IMergeableTransaction<TValueType>>
+CreateHashMapSwapTransaction(const char *inFile, int inLine, TTransactionConsumerPtr inConsumer,
+ const TKeyType &inKey, const TValueType &inOldValue,
+ const TValueType &inNewValue,
+ std::unordered_map<TKeyType, TValueType, THashType> &inItems)
+{
+ using namespace std;
+ std::shared_ptr<IMergeableTransaction<TValueType>> retval;
+ if (inConsumer) {
+ std::shared_ptr<HashMapSwapTransaction<TKeyType, TValueType, THashType>> transaction =
+ std::make_shared<HashMapSwapTransaction<TKeyType, TValueType, THashType>>(
+ inFile, inLine, std::ref(inItems), inKey, inOldValue, inNewValue);
+ retval = static_pointer_cast<IMergeableTransaction<TValueType>>(transaction);
+ inConsumer->OnTransaction(static_pointer_cast<ITransaction>(transaction));
+ }
+ return retval;
+}
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/ActionCoreProducer.cpp b/src/Runtime/ogl-runtime/src/dm/systems/cores/ActionCoreProducer.cpp
new file mode 100644
index 00000000..c262c239
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/ActionCoreProducer.cpp
@@ -0,0 +1,289 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "ActionCoreProducer.h"
+#include "HandleSystemTransactions.h"
+#include "VectorTransactions.h"
+#include "SignalsImpl.h"
+
+using namespace std;
+
+namespace qt3dsdm {
+
+Qt3DSDMActionHandle CActionCoreProducer::CreateAction(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner,
+ SLong4 inTriggerTargetObjects)
+{
+ Qt3DSDMActionHandle retval =
+ m_Data->CreateAction(inInstance, inSlide, inOwner, inTriggerTargetObjects);
+ CREATE_HANDLE_CREATE_TRANSACTION(m_Consumer, retval, m_Data->m_Objects);
+ return retval;
+}
+
+void CActionCoreProducer::DeleteAction(Qt3DSDMActionHandle inAction,
+ Qt3DSDMInstanceHandle &outInstance)
+{
+ // Ensure action exists
+ SAction *theAction = CSimpleActionCore::GetActionNF(inAction, m_Data->m_Objects);
+ CREATE_HANDLE_DELETE_TRANSACTION(m_Consumer, inAction, m_Data->m_Objects);
+ do_all(theAction->m_ActionInfo.m_HandlerArgs,
+ std::bind(DoCreateHandleDeleteTransaction, __FILE__, __LINE__, m_Consumer,
+ std::placeholders::_1, std::ref(m_Data->m_Objects)));
+ m_Data->DeleteAction(inAction, outInstance);
+}
+
+const SActionInfo &CActionCoreProducer::GetActionInfo(Qt3DSDMActionHandle inAction) const
+{
+ return m_Data->GetActionInfo(inAction);
+}
+
+void CActionCoreProducer::GetActions(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inOwner,
+ TActionHandleList &outActions) const
+{
+ return m_Data->GetActions(inSlide, inOwner, outActions);
+}
+
+void CActionCoreProducer::GetActions(Qt3DSDMSlideHandle inSlide, TActionHandleList &outActions) const
+{
+ return m_Data->GetActions(inSlide, outActions);
+}
+
+void CActionCoreProducer::GetActions(Qt3DSDMInstanceHandle inOwner,
+ TActionHandleList &outActions) const
+{
+ return m_Data->GetActions(inOwner, outActions);
+}
+
+void CActionCoreProducer::GetActions(TActionHandleList &outActions) const
+{
+ return m_Data->GetActions(outActions);
+}
+
+Qt3DSDMInstanceHandle CActionCoreProducer::GetActionInstance(Qt3DSDMActionHandle inAction) const
+{
+ return m_Data->GetActionInstance(inAction);
+}
+
+Qt3DSDMActionHandle
+CActionCoreProducer::GetActionByInstance(Qt3DSDMInstanceHandle inActionInstance) const
+{
+ return m_Data->GetActionByInstance(inActionInstance);
+}
+
+void CActionCoreProducer::SetTriggerObject(Qt3DSDMActionHandle inAction,
+ const SObjectRefType &inTriggerObject)
+{
+ SAction *theAction = CSimpleActionCore::GetActionNF(inAction, m_Data->m_Objects);
+ if (m_Consumer) {
+ m_Consumer->OnTransaction(TTransactionPtr(CREATE_GENERIC_TRANSACTION(
+ std::bind(&CSimpleActionCore::SetTriggerObject, m_Data, inAction, inTriggerObject),
+ std::bind(&CSimpleActionCore::SetTriggerObject, m_Data, inAction,
+ theAction->m_ActionInfo.m_TriggerObject))));
+ }
+ m_Data->SetTriggerObject(inAction, inTriggerObject);
+ GetSignalSender()->SendTriggerObjectSet(inAction, theAction->m_ActionInfo.m_TriggerObject);
+}
+
+void CActionCoreProducer::SetTargetObject(Qt3DSDMActionHandle inAction,
+ const SObjectRefType &inTargetObject)
+{
+ SAction *theAction = CSimpleActionCore::GetActionNF(inAction, m_Data->m_Objects);
+ if (m_Consumer) {
+ m_Consumer->OnTransaction(TTransactionPtr(CREATE_GENERIC_TRANSACTION(
+ std::bind(&CSimpleActionCore::SetTargetObject, m_Data, inAction, inTargetObject),
+ std::bind(&CSimpleActionCore::SetTargetObject, m_Data, inAction,
+ theAction->m_ActionInfo.m_TargetObject))));
+ }
+ m_Data->SetTargetObject(inAction, inTargetObject);
+ GetSignalSender()->SendTargetObjectSet(inAction, theAction->m_ActionInfo.m_TargetObject);
+}
+
+void CActionCoreProducer::SetEvent(Qt3DSDMActionHandle inAction, const wstring &inEventHandle)
+{
+ SAction *theAction = CSimpleActionCore::GetActionNF(inAction, m_Data->m_Objects);
+ if (m_Consumer) {
+ m_Consumer->OnTransaction(TTransactionPtr(CREATE_GENERIC_TRANSACTION(
+ std::bind(&CSimpleActionCore::SetEvent, m_Data, inAction, inEventHandle),
+ std::bind(&CSimpleActionCore::SetEvent, m_Data, inAction,
+ theAction->m_ActionInfo.m_Event))));
+ }
+ m_Data->SetEvent(inAction, inEventHandle);
+ GetSignalSender()->SendEventSet(inAction, inEventHandle);
+}
+
+void CActionCoreProducer::SetHandler(Qt3DSDMActionHandle inAction, const wstring &inHandlerHandle)
+{
+ SAction *theAction = CSimpleActionCore::GetActionNF(inAction, m_Data->m_Objects);
+ if (m_Consumer) {
+ m_Consumer->OnTransaction(TTransactionPtr(CREATE_GENERIC_TRANSACTION(
+ std::bind(&CSimpleActionCore::SetHandler, m_Data, inAction, inHandlerHandle),
+ std::bind(&CSimpleActionCore::SetHandler, m_Data, inAction,
+ theAction->m_ActionInfo.m_Handler))));
+ }
+ m_Data->SetHandler(inAction, inHandlerHandle);
+ GetSignalSender()->SendHandlerSet(inAction, inHandlerHandle);
+}
+
+Qt3DSDMHandlerArgHandle CActionCoreProducer::AddHandlerArgument(Qt3DSDMActionHandle inAction,
+ const TCharStr &inName,
+ HandlerArgumentType::Value inArgType,
+ DataModelDataType::Value inValueType)
+{
+ Qt3DSDMHandlerArgHandle retval =
+ m_Data->AddHandlerArgument(inAction, inName, inArgType, inValueType);
+ SAction *theAction = CSimpleActionCore::GetActionNF(inAction, m_Data->m_Objects);
+ CreateVecInsertTransaction<Qt3DSDMHandlerArgHandle>(__FILE__, __LINE__, m_Consumer, retval,
+ theAction->m_ActionInfo.m_HandlerArgs);
+ CREATE_HANDLE_CREATE_TRANSACTION(m_Consumer, retval, m_Data->m_Objects);
+ GetSignalSender()->SendHandlerArgumentAdded(inAction, retval, inName, inArgType, inValueType);
+ return retval;
+}
+
+void CActionCoreProducer::RemoveHandlerArgument(Qt3DSDMHandlerArgHandle inHandlerArgument)
+{
+ SHandlerArgument *theHandlerArgument =
+ CSimpleActionCore::GetHandlerArgumentNF(inHandlerArgument, m_Data->m_Objects);
+ SAction *theAction = CSimpleActionCore::GetActionNF(
+ theHandlerArgument->m_HandlerArgInfo.m_Action, m_Data->m_Objects);
+ if (exists(theAction->m_ActionInfo.m_HandlerArgs,
+ std::bind(equal_to<Qt3DSDMHandlerArgHandle>(), inHandlerArgument,
+ std::placeholders::_1))) {
+ CreateVecEraseTransaction<Qt3DSDMHandlerArgHandle>(__FILE__, __LINE__, m_Consumer,
+ inHandlerArgument,
+ theAction->m_ActionInfo.m_HandlerArgs);
+ CREATE_HANDLE_DELETE_TRANSACTION(m_Consumer, inHandlerArgument, m_Data->m_Objects);
+ }
+ m_Data->RemoveHandlerArgument(inHandlerArgument);
+ GetSignalSender()->SendHandlerArgumentRemoved(theAction->m_Handle, theHandlerArgument->m_Handle,
+ theHandlerArgument->m_HandlerArgInfo.m_Name,
+ theHandlerArgument->m_HandlerArgInfo.m_ArgType,
+ theHandlerArgument->m_HandlerArgInfo.m_ValueType);
+}
+
+const SHandlerArgumentInfo &
+CActionCoreProducer::GetHandlerArgumentInfo(Qt3DSDMHandlerArgHandle inHandlerArgument) const
+{
+ return m_Data->GetHandlerArgumentInfo(inHandlerArgument);
+}
+
+void CActionCoreProducer::GetHandlerArguments(Qt3DSDMActionHandle inAction,
+ THandlerArgHandleList &outHandlerArguments) const
+{
+ return m_Data->GetHandlerArguments(inAction, outHandlerArguments);
+}
+
+void CActionCoreProducer::GetHandlerArgumentValue(Qt3DSDMHandlerArgHandle inHandlerArgument,
+ SValue &outValue) const
+{
+ return m_Data->GetHandlerArgumentValue(inHandlerArgument, outValue);
+}
+
+void CActionCoreProducer::SetHandlerArgumentValue(Qt3DSDMHandlerArgHandle inHandlerArgument,
+ const SValue &inValue)
+{
+ SHandlerArgument *theHandlerArgument =
+ CSimpleActionCore::GetHandlerArgumentNF(inHandlerArgument, m_Data->m_Objects);
+ if (m_Consumer) {
+ m_Consumer->OnTransaction(TTransactionPtr(CREATE_GENERIC_TRANSACTION(
+ std::bind(&CSimpleActionCore::SetHandlerArgumentValue, m_Data, inHandlerArgument,
+ inValue),
+ std::bind(&CSimpleActionCore::SetHandlerArgumentValue, m_Data, inHandlerArgument,
+ theHandlerArgument->m_HandlerArgInfo.m_Value))));
+ }
+ m_Data->SetHandlerArgumentValue(inHandlerArgument, inValue);
+ GetSignalSender()->SendHandlerArgumentValueSet(inHandlerArgument, inValue);
+}
+
+// CHandleBase
+bool CActionCoreProducer::HandleValid(int inHandle) const
+{
+ return m_Data->HandleValid(inHandle);
+}
+
+// ITransactionProducer implementation
+void CActionCoreProducer::SetConsumer(TTransactionConsumerPtr inConsumer)
+{
+ m_Consumer = inConsumer;
+}
+
+TSignalConnectionPtr CActionCoreProducer::ConnectTriggerObjectSet(
+ const std::function<void(Qt3DSDMActionHandle, SObjectRefType &)> &inCallback)
+{
+ return GetSignalProvider()->ConnectTriggerObjectSet(inCallback);
+}
+TSignalConnectionPtr CActionCoreProducer::ConnectTargetObjectSet(
+ const std::function<void(Qt3DSDMActionHandle, SObjectRefType &)> &inCallback)
+{
+ return GetSignalProvider()->ConnectTargetObjectSet(inCallback);
+}
+TSignalConnectionPtr CActionCoreProducer::ConnectEventSet(
+ const std::function<void(Qt3DSDMActionHandle, const wstring &)> &inCallback)
+{
+ return GetSignalProvider()->ConnectEventSet(inCallback);
+}
+TSignalConnectionPtr CActionCoreProducer::ConnectHandlerSet(
+ const std::function<void(Qt3DSDMActionHandle, const wstring &)> &inCallback)
+{
+ return GetSignalProvider()->ConnectHandlerSet(inCallback);
+}
+
+TSignalConnectionPtr CActionCoreProducer::ConnectHandlerArgumentAdded(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMHandlerArgHandle, const TCharStr &,
+ HandlerArgumentType::Value, DataModelDataType::Value)> &inCallback)
+{
+ return GetSignalProvider()->ConnectHandlerArgumentAdded(inCallback);
+}
+TSignalConnectionPtr CActionCoreProducer::ConnectHandlerArgumentRemoved(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMHandlerArgHandle, const TCharStr &,
+ HandlerArgumentType::Value, DataModelDataType::Value)> &inCallback)
+{
+ return GetSignalProvider()->ConnectHandlerArgumentRemoved(inCallback);
+}
+TSignalConnectionPtr CActionCoreProducer::ConnectHandlerArgumentValueSet(
+ const std::function<void(Qt3DSDMHandlerArgHandle, const SValue &)> &inCallback)
+{
+ return GetSignalProvider()->ConnectHandlerArgumentValueSet(inCallback);
+}
+
+void CActionCoreProducer::InitSignaller()
+{
+ m_Signaller = CreateActionCoreSignaller();
+}
+
+IActionCoreSignalProvider *CActionCoreProducer::GetSignalProvider()
+{
+ return dynamic_cast<IActionCoreSignalProvider *>(m_Signaller.get());
+}
+
+IActionCoreSignalSender *CActionCoreProducer::GetSignalSender()
+{
+ return dynamic_cast<IActionCoreSignalSender *>(m_Signaller.get());
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/ActionCoreProducer.h b/src/Runtime/ogl-runtime/src/dm/systems/cores/ActionCoreProducer.h
new file mode 100644
index 00000000..bf65a387
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/ActionCoreProducer.h
@@ -0,0 +1,125 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef ACTIONCOREPRODUCERH
+#define ACTIONCOREPRODUCERH
+
+#include "SimpleActionCore.h"
+#include "Qt3DSDMTransactions.h"
+#include "Qt3DSDMSignals.h"
+#include "Qt3DSDMStringTable.h"
+
+namespace qt3dsdm {
+class CActionCoreProducer : public IActionCore,
+ public ITransactionProducer,
+ public IActionCoreSignalProvider
+{
+ Q_DISABLE_COPY(CActionCoreProducer)
+
+ TSimpleActionCorePtr m_Data;
+ TTransactionConsumerPtr m_Consumer;
+ TSignalItemPtr m_Signaller;
+
+public:
+ CActionCoreProducer(TStringTablePtr inStringTable)
+ : m_Data(new CSimpleActionCore(inStringTable))
+ {
+ InitSignaller();
+ }
+
+ TSimpleActionCorePtr GetTransactionlessActionCore() const { return m_Data; }
+
+ // IActionCore implementation
+ IStringTable &GetStringTable() const override { return m_Data->GetStringTable(); }
+ TStringTablePtr GetStringTablePtr() const override { return m_Data->GetStringTablePtr(); }
+ // Action
+ Qt3DSDMActionHandle CreateAction(Qt3DSDMInstanceHandle inInstance, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner, SLong4 inTriggerTargetObjects) override;
+ void DeleteAction(Qt3DSDMActionHandle inAction, Qt3DSDMInstanceHandle &outInstance) override;
+ const SActionInfo &GetActionInfo(Qt3DSDMActionHandle inAction) const override;
+ void GetActions(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inOwner,
+ TActionHandleList &outActions) const override;
+ void GetActions(Qt3DSDMSlideHandle inSlide, TActionHandleList &outActions) const override;
+ void GetActions(Qt3DSDMInstanceHandle inOwner, TActionHandleList &outActions) const override;
+ void GetActions(TActionHandleList &outActions) const override;
+ Qt3DSDMInstanceHandle GetActionInstance(Qt3DSDMActionHandle inAction) const override;
+ Qt3DSDMActionHandle GetActionByInstance(Qt3DSDMInstanceHandle inActionInstance) const override;
+
+ // Action Properties
+ void SetTriggerObject(Qt3DSDMActionHandle inAction, const SObjectRefType &inTriggerObject) override;
+ void SetTargetObject(Qt3DSDMActionHandle inAction, const SObjectRefType &inTargetObject) override;
+ void SetEvent(Qt3DSDMActionHandle inAction, const wstring &inEventHandle) override;
+ void SetHandler(Qt3DSDMActionHandle inAction, const wstring &inHandlerHandle) override;
+
+ // Action Argument
+ Qt3DSDMHandlerArgHandle AddHandlerArgument(Qt3DSDMActionHandle inAction, const TCharStr &inName,
+ HandlerArgumentType::Value inArgType,
+ DataModelDataType::Value inValueType) override;
+ void RemoveHandlerArgument(Qt3DSDMHandlerArgHandle inHandlerArgument) override;
+ const SHandlerArgumentInfo &
+ GetHandlerArgumentInfo(Qt3DSDMHandlerArgHandle inHandlerArgument) const override;
+ void GetHandlerArguments(Qt3DSDMActionHandle inAction,
+ THandlerArgHandleList &outHandlerArguments) const override;
+
+ // Action Argument Properties
+ void GetHandlerArgumentValue(Qt3DSDMHandlerArgHandle inHandlerArgument, SValue &outValue) const override;
+ void SetHandlerArgumentValue(Qt3DSDMHandlerArgHandle inHandlerArgument, const SValue &inValue) override;
+
+ // CHandleBase
+ bool HandleValid(int inHandle) const override;
+
+ // ITransactionProducer implementation
+ void SetConsumer(TTransactionConsumerPtr inConsumer) override;
+
+ TSignalConnectionPtr ConnectTriggerObjectSet(
+ const std::function<void(Qt3DSDMActionHandle, SObjectRefType &)> &inCallback) override;
+ TSignalConnectionPtr ConnectTargetObjectSet(
+ const std::function<void(Qt3DSDMActionHandle, SObjectRefType &)> &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectEventSet(const std::function<void(Qt3DSDMActionHandle, const wstring &)> &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectHandlerSet(const std::function<void(Qt3DSDMActionHandle, const wstring &)> &inCallback) override;
+
+ TSignalConnectionPtr ConnectHandlerArgumentAdded(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMHandlerArgHandle, const TCharStr &,
+ HandlerArgumentType::Value, DataModelDataType::Value)> &inCallback) override;
+ TSignalConnectionPtr ConnectHandlerArgumentRemoved(
+ const std::function<void(Qt3DSDMActionHandle, Qt3DSDMHandlerArgHandle, const TCharStr &,
+ HandlerArgumentType::Value, DataModelDataType::Value)> &inCallback) override;
+ TSignalConnectionPtr ConnectHandlerArgumentValueSet(
+ const std::function<void(Qt3DSDMHandlerArgHandle, const SValue &)> &inCallback) override;
+
+private:
+ void InitSignaller();
+ IActionCoreSignalProvider *GetSignalProvider();
+ IActionCoreSignalSender *GetSignalSender();
+};
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/AnimationCoreProducer.cpp b/src/Runtime/ogl-runtime/src/dm/systems/cores/AnimationCoreProducer.cpp
new file mode 100644
index 00000000..14d18240
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/AnimationCoreProducer.cpp
@@ -0,0 +1,488 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "AnimationCoreProducer.h"
+#include "HandleSystemTransactions.h"
+#include "VectorTransactions.h"
+#include "SignalsImpl.h"
+#ifdef _WIN32
+#pragma warning(disable : 4512) // assignment operator not generated
+#endif
+
+using namespace std;
+
+namespace qt3dsdm {
+
+struct SArtistEditedUndoRedoScope
+{
+ TSimpleAnimationCorePtr m_AnimationCore;
+ Qt3DSDMAnimationHandle m_Animation;
+ TTransactionConsumerPtr m_Consumer;
+ bool m_ArtistEdited;
+ SArtistEditedUndoRedoScope(TSimpleAnimationCorePtr inAnimCore, Qt3DSDMAnimationHandle inAnim,
+ TTransactionConsumerPtr inConsumer)
+ : m_AnimationCore(inAnimCore)
+ , m_Animation(inAnim)
+ , m_Consumer(inConsumer)
+ , m_ArtistEdited(inAnimCore->IsArtistEdited(inAnim))
+ {
+ }
+ ~SArtistEditedUndoRedoScope()
+ {
+ bool edited = m_AnimationCore->IsArtistEdited(m_Animation);
+ if (m_Consumer && edited != m_ArtistEdited) {
+ m_Consumer->OnTransaction(TTransactionPtr(CREATE_GENERIC_TRANSACTION(
+ std::bind(&CSimpleAnimationCore::SetIsArtistEdited, m_AnimationCore, m_Animation,
+ edited),
+ std::bind(&CSimpleAnimationCore::SetIsArtistEdited, m_AnimationCore, m_Animation,
+ m_ArtistEdited))));
+ }
+ }
+};
+
+struct SLookupCacheDoUndoOp : public ITransaction
+{
+ std::shared_ptr<SAnimationTrack> m_Animation;
+ TSimpleAnimationCorePtr m_AnimationCore;
+ bool m_AddOnDo;
+ SLookupCacheDoUndoOp(const char *inFile, int inLine, Qt3DSDMAnimationHandle inAnimHandle,
+ TSimpleAnimationCorePtr inCore, bool addOnDo)
+ : ITransaction(inFile, inLine)
+ , m_AnimationCore(inCore)
+ , m_AddOnDo(addOnDo)
+ {
+ THandleObjectMap::const_iterator theIter(inCore->m_Objects.find(inAnimHandle));
+ if (theIter != inCore->m_Objects.end())
+ m_Animation = static_pointer_cast<SAnimationTrack>(theIter->second);
+ }
+ void Remove()
+ {
+ if (m_Animation)
+ m_AnimationCore->RemoveAnimationFromLookupCache(m_Animation);
+ }
+ void Add()
+ {
+ if (m_Animation)
+ m_AnimationCore->AddAnimationToLookupCache(m_Animation);
+ }
+ void Do() override
+ {
+ if (m_AddOnDo)
+ Add();
+ else
+ Remove();
+ }
+ void Undo() override
+ {
+ if (m_AddOnDo)
+ Remove();
+ else
+ Add();
+ }
+};
+
+Qt3DSDMAnimationHandle
+CAnimationCoreProducer::CreateAnimation(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex,
+ EAnimationType inAnimationType, bool inFirstKeyframeDynamic)
+{
+ Qt3DSDMAnimationHandle retval = m_Data->CreateAnimation(inSlide, inInstance, inProperty, inIndex,
+ inAnimationType, inFirstKeyframeDynamic);
+
+ CREATE_HANDLE_CREATE_TRANSACTION(m_Consumer, retval, m_Data->m_Objects);
+ if (m_Consumer)
+ m_Consumer->OnTransaction(
+ std::make_shared<SLookupCacheDoUndoOp>(__FILE__, __LINE__, retval, m_Data, true));
+ GetSignalSender()->SendAnimationCreated(retval, inSlide, inInstance, inProperty, inIndex,
+ inAnimationType);
+ return retval;
+}
+
+void CAnimationCoreProducer::DeleteAnimation(Qt3DSDMAnimationHandle inAnimation)
+{
+ // Ensure animation exists
+ SAnimationTrack *theAnimation =
+ CSimpleAnimationCore::GetAnimationNF(inAnimation, m_Data->m_Objects);
+ GetSignalSender()->SendBeforeAnimationDeleted(inAnimation);
+ if (m_Consumer)
+ m_Consumer->OnTransaction(std::make_shared<SLookupCacheDoUndoOp>(
+ __FILE__, __LINE__, inAnimation, m_Data, false));
+ CREATE_HANDLE_DELETE_TRANSACTION(m_Consumer, inAnimation, m_Data->m_Objects);
+ do_all(theAnimation->m_Keyframes,
+ std::bind(DoCreateHandleDeleteTransaction, __FILE__, __LINE__, m_Consumer,
+ std::placeholders::_1, std::ref(m_Data->m_Objects)));
+ SAnimationInfo theInfo = m_Data->GetAnimationInfo(inAnimation);
+ m_Data->DeleteAnimation(inAnimation);
+ GetSignalSender()->SendAnimationDeleted(inAnimation, theInfo.m_Slide, theInfo.m_Instance,
+ theInfo.m_Property, theInfo.m_Index,
+ theInfo.m_AnimationType);
+}
+
+Qt3DSDMAnimationHandle CAnimationCoreProducer::GetAnimation(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ size_t inIndex) const
+{
+ return m_Data->GetAnimation(inSlide, inInstance, inProperty, inIndex);
+}
+
+SAnimationInfo CAnimationCoreProducer::GetAnimationInfo(Qt3DSDMAnimationHandle inAnimation) const
+{
+ return m_Data->GetAnimationInfo(inAnimation);
+}
+
+void CAnimationCoreProducer::GetAnimations(TAnimationHandleList &outAnimations) const
+{
+ return m_Data->GetAnimations(outAnimations);
+}
+
+void CAnimationCoreProducer::GetAnimations(TAnimationInfoList &outAnimations,
+ Qt3DSDMSlideHandle inMaster,
+ Qt3DSDMSlideHandle inSlide) const
+{
+ return m_Data->GetAnimations(outAnimations, inMaster, inSlide);
+}
+
+void CAnimationCoreProducer::SetFirstKeyframeDynamic(Qt3DSDMAnimationHandle inAnimation,
+ bool inValue)
+{
+ SAnimationInfo theInfo(m_Data->GetAnimationInfo(inAnimation));
+ SArtistEditedUndoRedoScope __editedScope(m_Data, inAnimation, m_Consumer);
+ if (m_Consumer) {
+ m_Consumer->OnTransaction(TTransactionPtr(CREATE_GENERIC_TRANSACTION(
+ std::bind(&CSimpleAnimationCore::SetFirstKeyframeDynamic, m_Data, inAnimation,
+ inValue),
+ std::bind(&CSimpleAnimationCore::SetFirstKeyframeDynamic, m_Data, inAnimation,
+ theInfo.m_DynamicFirstKeyframe))));
+ }
+ m_Data->SetFirstKeyframeDynamic(inAnimation, inValue);
+ GetSignalSender()->SendFirstKeyframeDynamicSet(inAnimation, inValue);
+}
+
+inline void DirtyKeyframes(Qt3DSDMAnimationHandle inAnimation, THandleObjectMap &inObjects)
+{
+ SAnimationTrack *theAnimation = CSimpleAnimationCore::GetAnimationNF(inAnimation, inObjects);
+ theAnimation->m_KeyframesDirty = true;
+}
+
+inline void CreateDirtyKeyframesTransaction(TTransactionConsumerPtr inConsumer,
+ Qt3DSDMAnimationHandle inAnimation,
+ THandleObjectMap &inObjects)
+{
+ if (inConsumer) {
+ inConsumer->OnTransaction(TTransactionPtr(CREATE_GENERIC_TRANSACTION(
+ std::bind(DirtyKeyframes, inAnimation, std::ref(inObjects)),
+ std::bind(DirtyKeyframes, inAnimation, std::ref(inObjects)))));
+ }
+}
+
+Qt3DSDMKeyframeHandle CAnimationCoreProducer::InsertKeyframe(Qt3DSDMAnimationHandle inAnimation,
+ const TKeyframe &inKeyframe)
+{
+ SArtistEditedUndoRedoScope __editedScope(m_Data, inAnimation, m_Consumer);
+ Qt3DSDMKeyframeHandle retval = m_Data->InsertKeyframe(inAnimation, inKeyframe);
+ SAnimationTrack *theAnimation =
+ CSimpleAnimationCore::GetAnimationNF(inAnimation, m_Data->m_Objects);
+ CreateVecInsertTransaction<Qt3DSDMKeyframeHandle>(__FILE__, __LINE__, m_Consumer, retval,
+ theAnimation->m_Keyframes);
+ CREATE_HANDLE_CREATE_TRANSACTION(m_Consumer, retval, m_Data->m_Objects);
+ CreateDirtyKeyframesTransaction(m_Consumer, inAnimation, m_Data->m_Objects);
+ GetSignalSender()->SendKeyframeInserted(inAnimation, retval, inKeyframe);
+ return retval;
+}
+
+void CAnimationCoreProducer::EraseKeyframe(Qt3DSDMKeyframeHandle inKeyframe)
+{
+ SKeyframe *theKeyframe = CSimpleAnimationCore::GetKeyframeNF(inKeyframe, m_Data->m_Objects);
+ SArtistEditedUndoRedoScope __editedScope(m_Data, theKeyframe->m_Animation, m_Consumer);
+ GetSignalSender()->SendBeforeKeyframeErased(inKeyframe);
+ SAnimationTrack *theAnimation =
+ CSimpleAnimationCore::GetAnimationNF(theKeyframe->m_Animation, m_Data->m_Objects);
+ if (exists(theAnimation->m_Keyframes, std::bind(equal_to<int>(), inKeyframe,
+ std::placeholders::_1))) {
+ CreateVecEraseTransaction<Qt3DSDMKeyframeHandle>(__FILE__, __LINE__, m_Consumer, inKeyframe,
+ theAnimation->m_Keyframes);
+ CREATE_HANDLE_DELETE_TRANSACTION(m_Consumer, inKeyframe, m_Data->m_Objects);
+ CreateDirtyKeyframesTransaction(m_Consumer, theKeyframe->m_Animation, m_Data->m_Objects);
+ }
+ int theKeyframeHandle = theKeyframe->m_Handle;
+ TKeyframe theData = theKeyframe->m_Keyframe;
+ m_Data->EraseKeyframe(inKeyframe);
+ GetSignalSender()->SendKeyframeErased(theAnimation->m_Handle, theKeyframeHandle, theData);
+}
+
+template <typename TDataType>
+struct VectorSwapTransaction : public ITransaction
+{
+ vector<TDataType> m_Data;
+ vector<TDataType> &m_Target;
+ VectorSwapTransaction(const char *inFile, int inLine, vector<TDataType> &inTarget)
+ : ITransaction(inFile, inLine)
+ , m_Data(inTarget)
+ , m_Target(inTarget)
+ {
+ }
+ void Do() override { std::swap(m_Data, m_Target); }
+ void Undo() override { Do(); }
+};
+
+void CAnimationCoreProducer::DeleteAllKeyframes(Qt3DSDMAnimationHandle inAnimation)
+{
+ // Ensure animation exists
+ SAnimationTrack *theAnimation =
+ CSimpleAnimationCore::GetAnimationNF(inAnimation, m_Data->m_Objects);
+ SArtistEditedUndoRedoScope __editedScope(m_Data, inAnimation, m_Consumer);
+ GetSignalSender()->SendBeforeAllKeyframesErased(inAnimation);
+ do_all(theAnimation->m_Keyframes,
+ std::bind(DoCreateHandleDeleteTransaction, __FILE__, __LINE__, m_Consumer,
+ std::placeholders::_1, std::ref(m_Data->m_Objects)));
+ if (m_Consumer)
+ m_Consumer->OnTransaction(std::make_shared<VectorSwapTransaction<Qt3DSDMKeyframeHandle>>(
+ __FILE__, __LINE__, std::ref(theAnimation->m_Keyframes)));
+ theAnimation->m_Keyframes.clear();
+}
+
+Qt3DSDMAnimationHandle
+CAnimationCoreProducer::GetAnimationForKeyframe(Qt3DSDMKeyframeHandle inKeyframe) const
+{
+ return m_Data->GetAnimationForKeyframe(inKeyframe);
+}
+
+struct KeyframeDataTransaction : public ITransaction, public IMergeableTransaction<TKeyframe>
+{
+ TSimpleAnimationCorePtr m_AnimationCore;
+ Qt3DSDMKeyframeHandle m_Keyframe;
+ TKeyframe m_OldData;
+ TKeyframe m_NewData;
+
+ KeyframeDataTransaction(const char *inFile, int inLine, TSimpleAnimationCorePtr animCore,
+ Qt3DSDMKeyframeHandle keyframe, TKeyframe oldData, TKeyframe newData)
+ : ITransaction(inFile, inLine)
+ , m_AnimationCore(animCore)
+ , m_Keyframe(keyframe)
+ , m_OldData(oldData)
+ , m_NewData(newData)
+ {
+ }
+
+ void Do() override { m_AnimationCore->DoSetKeyframeData(m_Keyframe, m_NewData); }
+ void Undo() override { m_AnimationCore->DoSetKeyframeData(m_Keyframe, m_OldData); }
+
+ void Update(const TKeyframe &inKeyframe) override { m_NewData = inKeyframe; }
+};
+
+void CAnimationCoreProducer::SetKeyframeData(Qt3DSDMKeyframeHandle inKeyframe,
+ const TKeyframe &inData)
+{
+ SKeyframe *theKeyframe = CSimpleAnimationCore::GetKeyframeNF(inKeyframe, m_Data->m_Objects);
+ SArtistEditedUndoRedoScope __editedScope(m_Data, theKeyframe->m_Animation, m_Consumer);
+ TKeyframe theNewData(inData);
+ TKeyframe theOldData = theKeyframe->m_Keyframe;
+ m_Data->SetKeyframeData(inKeyframe, inData);
+ TKeyframeDataMergeMap::iterator iter(m_KeyframeMergeMap.find(inKeyframe));
+ if (iter != m_KeyframeMergeMap.end())
+ iter->second->Update(theNewData);
+ else {
+ if (m_Consumer) {
+ std::shared_ptr<KeyframeDataTransaction> theKeyframeTransaction(
+ std::make_shared<KeyframeDataTransaction>(__FILE__, __LINE__, m_Data, inKeyframe,
+ theOldData, theNewData));
+ m_Consumer->OnTransaction(static_pointer_cast<ITransaction>(theKeyframeTransaction));
+ m_KeyframeMergeMap.insert(make_pair(
+ inKeyframe,
+ static_pointer_cast<IMergeableTransaction<TKeyframe>>(theKeyframeTransaction)));
+ }
+ GetSignalSender()->SendKeyframeUpdated(inKeyframe, inData);
+ }
+}
+
+TKeyframe CAnimationCoreProducer::GetKeyframeData(Qt3DSDMKeyframeHandle inKeyframe) const
+{
+ return m_Data->GetKeyframeData(inKeyframe);
+}
+
+void CAnimationCoreProducer::GetKeyframes(Qt3DSDMAnimationHandle inAnimation,
+ TKeyframeHandleList &outKeyframes) const
+{
+ return m_Data->GetKeyframes(inAnimation, outKeyframes);
+}
+
+size_t CAnimationCoreProducer::GetKeyframeCount(Qt3DSDMAnimationHandle inAnimation) const
+{
+ return m_Data->GetKeyframeCount(inAnimation);
+}
+
+void CAnimationCoreProducer::OffsetAnimations(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ long inMillisecondOffset)
+{
+ float theOffsetSeconds = static_cast<float>(inMillisecondOffset) / 1000.f;
+ for (THandleObjectMap::const_iterator iter = m_Data->m_Objects.begin(),
+ end = m_Data->m_Objects.end();
+ iter != end; ++iter) {
+ SAnimationTrack *theTrack = static_cast<SAnimationTrack *>(iter->second.get());
+ if (theTrack->m_Slide == inSlide && theTrack->m_Instance == inInstance) {
+ for (size_t keyframeIdx = 0, keyframeEnd = theTrack->m_Keyframes.size();
+ keyframeIdx < keyframeEnd; ++keyframeIdx) {
+ Qt3DSDMKeyframeHandle theKeyframeHandle(theTrack->m_Keyframes[keyframeIdx]);
+ TKeyframe theCurrentKeyframe = m_Data->GetKeyframeData(theKeyframeHandle);
+
+ float seconds = qt3dsdm::GetKeyframeSeconds(theCurrentKeyframe);
+
+ theCurrentKeyframe =
+ qt3dsdm::SetKeyframeSeconds(theCurrentKeyframe, seconds + theOffsetSeconds);
+
+ SetKeyframeData(theKeyframeHandle, theCurrentKeyframe);
+ }
+ }
+ }
+}
+
+void CAnimationCoreProducer::SetIsArtistEdited(Qt3DSDMAnimationHandle inAnimation, bool inEdited)
+{
+ SArtistEditedUndoRedoScope __editedScope(m_Data, inAnimation, m_Consumer);
+ m_Data->SetIsArtistEdited(inAnimation, inEdited);
+}
+
+bool CAnimationCoreProducer::IsArtistEdited(Qt3DSDMAnimationHandle inAnimation) const
+{
+ return m_Data->IsArtistEdited(inAnimation);
+}
+// Animation Evaluation.
+float CAnimationCoreProducer::EvaluateAnimation(Qt3DSDMAnimationHandle inAnimation,
+ float inSeconds) const
+{
+ return m_Data->EvaluateAnimation(inAnimation, inSeconds);
+}
+
+bool CAnimationCoreProducer::KeyframeValid(Qt3DSDMKeyframeHandle inKeyframe) const
+{
+ return m_Data->KeyframeValid(inKeyframe);
+}
+
+bool CAnimationCoreProducer::AnimationValid(Qt3DSDMAnimationHandle inAnimation) const
+{
+ return m_Data->AnimationValid(inAnimation);
+}
+
+void CAnimationCoreProducer::CopyAnimations(Qt3DSDMSlideHandle inSourceSlide,
+ Qt3DSDMInstanceHandle inSourceInstance,
+ Qt3DSDMSlideHandle inDestSlide,
+ Qt3DSDMInstanceHandle inDestInstance)
+{
+ std::vector<SAnimationTrack *> theAnimations;
+ for (THandleObjectMap::const_iterator iter = m_Data->m_Objects.begin(),
+ end = m_Data->m_Objects.end();
+ iter != end; ++iter) {
+ SAnimationTrack *theTrack = static_cast<SAnimationTrack *>(iter->second.get());
+ if (theTrack->m_Instance == inSourceInstance && theTrack->m_Slide == inSourceSlide)
+ theAnimations.push_back(theTrack);
+ }
+ for (size_t idx = 0, end = theAnimations.size(); idx < end; ++idx) {
+ const SAnimationTrack &newTrack(*theAnimations[idx]);
+ Qt3DSDMAnimationHandle theNewAnimation(
+ CreateAnimation(inDestSlide, inDestInstance, newTrack.m_Property, newTrack.m_Index,
+ newTrack.m_AnimationType, newTrack.m_FirstKeyframeDynamic));
+ for (size_t keyIdx = 0, keyEnd = newTrack.m_Keyframes.size(); keyIdx < keyEnd; ++keyIdx)
+ InsertKeyframe(theNewAnimation, GetKeyframeData(newTrack.m_Keyframes[keyIdx]));
+ }
+}
+
+// ITransactionProducer implementation
+void CAnimationCoreProducer::SetConsumer(TTransactionConsumerPtr inConsumer)
+{
+ m_Consumer = inConsumer;
+ m_KeyframeMergeMap.clear();
+}
+
+TSignalConnectionPtr CAnimationCoreProducer::ConnectAnimationCreated(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle, size_t, EAnimationType)> &inCallback)
+{
+ return GetSignalProvider()->ConnectAnimationCreated(inCallback);
+}
+TSignalConnectionPtr CAnimationCoreProducer::ConnectBeforeAnimationDeleted(
+ const std::function<void(Qt3DSDMAnimationHandle)> &inCallback)
+{
+ return GetSignalProvider()->ConnectBeforeAnimationDeleted(inCallback);
+}
+TSignalConnectionPtr CAnimationCoreProducer::ConnectAnimationDeleted(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle, size_t, EAnimationType)> &inCallback)
+{
+ return GetSignalProvider()->ConnectAnimationDeleted(inCallback);
+}
+TSignalConnectionPtr CAnimationCoreProducer::ConnectKeyframeInserted(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle, const TKeyframe &)>
+ &inCallback)
+{
+ return GetSignalProvider()->ConnectKeyframeInserted(inCallback);
+}
+TSignalConnectionPtr CAnimationCoreProducer::ConnectBeforeKeyframeErased(
+ const std::function<void(Qt3DSDMKeyframeHandle)> &inCallback)
+{
+ return GetSignalProvider()->ConnectBeforeKeyframeErased(inCallback);
+}
+TSignalConnectionPtr CAnimationCoreProducer::ConnectKeyframeErased(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle, const TKeyframe &)>
+ &inCallback)
+{
+ return GetSignalProvider()->ConnectKeyframeErased(inCallback);
+}
+TSignalConnectionPtr CAnimationCoreProducer::ConnectBeforeAllKeyframesErased(
+ const std::function<void(Qt3DSDMAnimationHandle)> &inCallback)
+{
+ return GetSignalProvider()->ConnectBeforeAllKeyframesErased(inCallback);
+}
+TSignalConnectionPtr CAnimationCoreProducer::ConnectKeyframeUpdated(
+ const std::function<void(Qt3DSDMKeyframeHandle, const TKeyframe &)> &inCallback)
+{
+ return GetSignalProvider()->ConnectKeyframeUpdated(inCallback);
+}
+TSignalConnectionPtr CAnimationCoreProducer::ConnectFirstKeyframeDynamicSet(
+ const std::function<void(Qt3DSDMAnimationHandle, bool)> &inCallback)
+{
+ return GetSignalProvider()->ConnectFirstKeyframeDynamicSet(inCallback);
+}
+
+void CAnimationCoreProducer::InitSignaller()
+{
+ m_Signaller = CreateAnimationCoreSignaller();
+}
+
+IAnimationCoreSignalProvider *CAnimationCoreProducer::GetSignalProvider()
+{
+ return dynamic_cast<IAnimationCoreSignalProvider *>(m_Signaller.get());
+}
+
+IAnimationCoreSignalSender *CAnimationCoreProducer::GetSignalSender()
+{
+ return dynamic_cast<IAnimationCoreSignalSender *>(m_Signaller.get());
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/AnimationCoreProducer.h b/src/Runtime/ogl-runtime/src/dm/systems/cores/AnimationCoreProducer.h
new file mode 100644
index 00000000..17603d64
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/AnimationCoreProducer.h
@@ -0,0 +1,148 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef ANIMATIONCOREPRODUCERH
+#define ANIMATIONCOREPRODUCERH
+#include "SimpleAnimationCore.h"
+#include "Qt3DSDMTransactions.h"
+#include "Qt3DSDMSignals.h"
+
+namespace qt3dsdm {
+class CAnimationCoreProducer : public IAnimationCore,
+ public ITransactionProducer,
+ public IAnimationCoreSignalProvider
+{
+ Q_DISABLE_COPY(CAnimationCoreProducer)
+
+ typedef std::shared_ptr<IMergeableTransaction<TKeyframe>> TKeyframeDataMergeMapEntry;
+ typedef std::unordered_map<int, TKeyframeDataMergeMapEntry> TKeyframeDataMergeMap;
+
+ TSimpleAnimationCorePtr m_Data;
+ TTransactionConsumerPtr m_Consumer;
+ TSignalItemPtr m_Signaller;
+ TKeyframeDataMergeMap m_KeyframeMergeMap;
+
+public:
+ CAnimationCoreProducer()
+ : m_Data(new CSimpleAnimationCore())
+ {
+ InitSignaller();
+ }
+ CAnimationCoreProducer(TStringTablePtr strTable)
+ : m_Data(new CSimpleAnimationCore(strTable))
+ {
+ InitSignaller();
+ }
+
+ TSimpleAnimationCorePtr GetTransactionlessAnimationCore() const { return m_Data; }
+
+ // IAnimationManger implementation
+
+ Qt3DSDMAnimationHandle CreateAnimation(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex,
+ EAnimationType inAnimationType,
+ bool inFirstKeyframeDynamic) override;
+ void DeleteAnimation(Qt3DSDMAnimationHandle inAnimation) override;
+ Qt3DSDMAnimationHandle GetAnimation(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex) const override;
+ SAnimationInfo GetAnimationInfo(Qt3DSDMAnimationHandle inAnimation) const override;
+ void GetAnimations(TAnimationHandleList &outAnimations) const override;
+ void GetAnimations(TAnimationInfoList &outAnimations, Qt3DSDMSlideHandle inMaster,
+ Qt3DSDMSlideHandle inSlide) const override;
+ void GetSpecificInstanceAnimations(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ TAnimationHandleList &outAnimations) override
+ {
+ m_Data->GetSpecificInstanceAnimations(inSlide, inInstance, outAnimations);
+ }
+
+ void SetFirstKeyframeDynamic(Qt3DSDMAnimationHandle inAnimation, bool inValue) override;
+
+ Qt3DSDMKeyframeHandle InsertKeyframe(Qt3DSDMAnimationHandle inAnimation,
+ const TKeyframe &inKeyframe) override;
+ void EraseKeyframe(Qt3DSDMKeyframeHandle) override;
+ void DeleteAllKeyframes(Qt3DSDMAnimationHandle inAnimation) override;
+ Qt3DSDMAnimationHandle GetAnimationForKeyframe(Qt3DSDMKeyframeHandle inKeyframe) const override;
+ TKeyframe GetKeyframeData(Qt3DSDMKeyframeHandle inKeyframe) const override;
+ void SetKeyframeData(Qt3DSDMKeyframeHandle inKeyframe, const TKeyframe &inData) override;
+ void GetKeyframes(Qt3DSDMAnimationHandle inAnimation, TKeyframeHandleList &outKeyframes) const override;
+ size_t GetKeyframeCount(Qt3DSDMAnimationHandle inAnimation) const override;
+ bool IsFirstKeyframe(Qt3DSDMKeyframeHandle inKeyframe) const override
+ {
+ return m_Data->IsFirstKeyframe(inKeyframe);
+ }
+ void OffsetAnimations(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ long inMillisecondOffset) override;
+
+ void SetIsArtistEdited(Qt3DSDMAnimationHandle inAnimation, bool inEdited = true) override;
+ bool IsArtistEdited(Qt3DSDMAnimationHandle inAnimation) const override;
+
+ // Animation Evaluation.
+ float EvaluateAnimation(Qt3DSDMAnimationHandle inAnimation, float inSeconds) const override;
+
+ bool KeyframeValid(Qt3DSDMKeyframeHandle inKeyframe) const override;
+ bool AnimationValid(Qt3DSDMAnimationHandle inAnimation) const override;
+
+ void CopyAnimations(Qt3DSDMSlideHandle inSourceSlide, Qt3DSDMInstanceHandle inSourceInstance,
+ Qt3DSDMSlideHandle inDestSlide, Qt3DSDMInstanceHandle inDestInstance) override;
+
+ // ITransactionProducer implementation
+ void SetConsumer(TTransactionConsumerPtr inConsumer) override;
+
+ TSignalConnectionPtr ConnectAnimationCreated(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle, size_t, EAnimationType)> &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectBeforeAnimationDeleted(const std::function<void(Qt3DSDMAnimationHandle)> &inCallback) override;
+ TSignalConnectionPtr ConnectAnimationDeleted(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle, size_t, EAnimationType)> &inCallback) override;
+ TSignalConnectionPtr ConnectKeyframeInserted(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle, const TKeyframe &)>
+ &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectBeforeKeyframeErased(const std::function<void(Qt3DSDMKeyframeHandle)> &inCallback) override;
+ TSignalConnectionPtr ConnectKeyframeErased(
+ const std::function<void(Qt3DSDMAnimationHandle, Qt3DSDMKeyframeHandle, const TKeyframe &)>
+ &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectBeforeAllKeyframesErased(const std::function<void(Qt3DSDMAnimationHandle)> &inCallback) override;
+ TSignalConnectionPtr ConnectKeyframeUpdated(
+ const std::function<void(Qt3DSDMKeyframeHandle, const TKeyframe &)> &inCallback) override;
+ TSignalConnectionPtr ConnectFirstKeyframeDynamicSet(
+ const std::function<void(Qt3DSDMAnimationHandle, bool)> &inCallback) override;
+
+private:
+ void InitSignaller();
+ IAnimationCoreSignalProvider *GetSignalProvider();
+ IAnimationCoreSignalSender *GetSignalSender();
+};
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/DataCoreProducer.cpp b/src/Runtime/ogl-runtime/src/dm/systems/cores/DataCoreProducer.cpp
new file mode 100644
index 00000000..5c3cc924
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/DataCoreProducer.cpp
@@ -0,0 +1,457 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "DataCoreProducer.h"
+#include "HandleSystemTransactions.h"
+#include "VectorTransactions.h"
+#include "SignalsImpl.h"
+#ifdef _WIN32
+#pragma warning(disable : 4503) // decorated name length exceeded
+#endif
+namespace qt3dsdm {
+
+Qt3DSDMInstanceHandle CDataCoreProducer::CreateInstance(Qt3DSDMInstanceHandle inTargetId)
+{
+ Qt3DSDMInstanceHandle retval = m_Data->CreateInstance(inTargetId);
+ CREATE_HANDLE_CREATE_TRANSACTION(m_Consumer, retval, m_Data->m_Objects);
+ GetDataCoreSender()->SignalInstanceCreated(retval);
+ return retval;
+}
+
+inline tuple<Qt3DSDMPropertyHandle, Qt3DSDMPropertyDefinition>
+TransformProperty(Qt3DSDMPropertyHandle inProperty, CSimpleDataCore &inData)
+{
+ return make_tuple(inProperty, inData.GetProperty(inProperty));
+}
+
+inline void SignalPropertyRemoved(Qt3DSDMInstanceHandle inInstance,
+ tuple<Qt3DSDMPropertyHandle, Qt3DSDMPropertyDefinition> inData,
+ IDataCoreSignalSender *inSender)
+{
+ inSender->SignalPropertyRemoved(inInstance, get<0>(inData), get<1>(inData).m_Name.wide_str(),
+ get<1>(inData).m_Type);
+}
+
+void CDataCoreProducer::DeleteInstance(Qt3DSDMInstanceHandle inInstance)
+{
+ TIntList theProperties;
+ TIntList theInstances;
+
+ GetDataCoreSender()->SignalBeforeInstanceDeleted(inInstance);
+ // Ensure the instance exists
+ m_Data->GetInstanceNF(inInstance, m_Data->m_Objects);
+ do_all(m_Data->m_Objects,
+ std::bind(CSimpleDataCore::FindRelatedItemsForDelete, inInstance.GetHandleValue(),
+ std::ref(theProperties), std::ref(theInstances), std::placeholders::_1));
+
+ if (m_Consumer) {
+ CREATE_HANDLE_DELETE_TRANSACTION(m_Consumer, inInstance, m_Data->m_Objects);
+ do_all(theProperties, std::bind(HandleDeleteTransaction, __FILE__, __LINE__,
+ std::placeholders::_1,
+ std::ref(m_Data->m_Objects), m_Consumer));
+ }
+
+ vector<tuple<Qt3DSDMPropertyHandle, Qt3DSDMPropertyDefinition>> theDefinitionList;
+ theDefinitionList.resize(theProperties.size());
+
+ function<tuple<Qt3DSDMPropertyHandle, Qt3DSDMPropertyDefinition>(Qt3DSDMPropertyHandle)>
+ thePropertyTransform(bind(TransformProperty, std::placeholders::_1, ref(*m_Data)));
+ transform(theProperties.begin(), theProperties.end(), theDefinitionList.begin(),
+ thePropertyTransform);
+
+ GetDataCoreSender()->SignalInstanceDeleted(inInstance);
+
+ m_Data->DeleteInstance(inInstance);
+ // Signal that these theProperties are no longer with us.
+ do_all(theDefinitionList, bind(SignalPropertyRemoved, inInstance,
+ std::placeholders::_1, GetDataCoreSender()));
+}
+
+bool CDataCoreProducer::IsInstanceOrDerivedFrom(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent) const
+{
+ return m_Data->IsInstanceOrDerivedFrom(inInstance, inParent);
+}
+
+void CDataCoreProducer::GetInstances(TInstanceHandleList &outInstances) const
+{
+ m_Data->GetInstances(outInstances);
+}
+void CDataCoreProducer::GetInstancesDerivedFrom(TInstanceHandleList &outInstances,
+ Qt3DSDMInstanceHandle inParentHandle) const
+{
+ m_Data->GetInstancesDerivedFrom(outInstances, inParentHandle);
+}
+
+struct ClearInstanceParentCacheTransaction : public ITransaction
+{
+ const CDataModelInstance &m_Instance;
+ ClearInstanceParentCacheTransaction(const char *inFile, int inLine,
+ const CDataModelInstance &inst)
+ : ITransaction(inFile, inLine)
+ , m_Instance(inst)
+ {
+ }
+ void Do() override { m_Instance.ClearParentCache(); }
+ void Undo() override { m_Instance.ClearParentCache(); }
+};
+
+void CDataCoreProducer::DeriveInstance(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent)
+{
+ m_Data->DeriveInstance(inInstance, inParent);
+ TDataModelInstancePtr theInstance =
+ CSimpleDataCore::GetInstanceNF(inInstance, m_Data->m_Objects);
+ if (m_Consumer) {
+ CreateHashMapInsertTransaction(
+ __FILE__, __LINE__, m_Consumer,
+ make_pair(inParent.GetHandleValue(),
+ CSimpleDataCore::GetInstanceNF(inParent, m_Data->m_Objects)),
+ theInstance->m_Parents);
+ m_Consumer->OnTransaction(std::static_pointer_cast<ITransaction>(
+ std::make_shared<ClearInstanceParentCacheTransaction>(__FILE__, __LINE__,
+ *theInstance)));
+ }
+ GetDataCoreSender()->SignalInstanceDerived(inInstance, inParent);
+}
+
+void CDataCoreProducer::GetInstanceParents(Qt3DSDMInstanceHandle inHandle,
+ TInstanceHandleList &outParents) const
+{
+ m_Data->GetInstanceParents(inHandle, outParents);
+}
+
+Qt3DSDMPropertyHandle CDataCoreProducer::AddProperty(Qt3DSDMInstanceHandle inInstance,
+ TCharPtr inName, DataModelDataType::Value inPropType)
+{
+ Qt3DSDMPropertyHandle retval = m_Data->AddProperty(inInstance, inName, inPropType);
+ TDataModelInstancePtr theInstance =
+ CSimpleDataCore::GetInstanceNF(inInstance, m_Data->m_Objects);
+ CreateVecInsertTransaction<int>(__FILE__, __LINE__, m_Consumer, retval,
+ theInstance->m_Properties);
+ CREATE_HANDLE_CREATE_TRANSACTION(m_Consumer, retval, m_Data->m_Objects);
+ GetDataCoreSender()->SignalPropertyAdded(inInstance, retval, inName, inPropType);
+ return retval;
+}
+
+void CDataCoreProducer::GetInstanceProperties(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleList &outProperties) const
+{
+ m_Data->GetInstanceProperties(inInstance, outProperties);
+}
+
+const Qt3DSDMPropertyDefinition &
+CDataCoreProducer::GetProperty(Qt3DSDMPropertyHandle inProperty) const
+{
+ return m_Data->GetProperty(inProperty);
+}
+
+void CDataCoreProducer::RemoveProperty(Qt3DSDMPropertyHandle inProperty)
+{
+ Qt3DSDMPropertyDefinition theDef = GetProperty(inProperty);
+ TDataModelInstancePtr theInstance =
+ CSimpleDataCore::GetInstanceNF(theDef.m_Instance, m_Data->m_Objects);
+ if (find_if<TIntList::iterator>(theInstance->m_Properties,
+ std::bind(equal_to<int>(), inProperty, std::placeholders::_1))
+ != theInstance->m_Properties.end()) {
+ CreateVecEraseTransaction<int>(__FILE__, __LINE__, m_Consumer, inProperty,
+ theInstance->m_Properties);
+ CREATE_HANDLE_DELETE_TRANSACTION(m_Consumer, inProperty, m_Data->m_Objects);
+ GetDataCoreSender()->SignalPropertyRemoved(theDef.m_Instance, inProperty,
+ theDef.m_Name.wide_str(), theDef.m_Type);
+ m_Data->RemoveProperty(inProperty);
+ } else {
+ throw PropertyNotFound(L"");
+ }
+}
+
+inline void AddCopyInstancePropertyTransaction(int inProperty, const TIntList &inOriginalList,
+ CDataModelInstance &inInstance,
+ TTransactionConsumerPtr &inConsumer)
+{
+ // if this property was never in the original list
+ if (find_if<TIntList::const_iterator>(inOriginalList,
+ std::bind(equal_to<int>(), inProperty,
+ std::placeholders::_1))
+ == inOriginalList.end())
+ CreateVecInsertTransaction<int>(__FILE__, __LINE__, inConsumer,
+ Qt3DSDMPropertyHandle(inProperty), inInstance.m_Properties);
+}
+
+inline void AddCopyInstanceValuePropertyTransaction(const TPropertyPair &inProperty,
+ const TPropertyPairHash &inOriginalList,
+ CDataModelInstance &inInstance,
+ TTransactionConsumerPtr &inConsumer)
+{
+ // if this property was never in the original list
+ if (inOriginalList.end() == inOriginalList.find(inProperty.first))
+ CreateHashMapInsertTransaction(__FILE__, __LINE__, inConsumer, inProperty,
+ inInstance.m_PropertyValues);
+}
+
+struct InstancePropertyValuesTransaction : public ITransaction
+{
+ CDataModelInstance &m_Instance;
+ TIntList m_OldProperties;
+ TPropertyPairList m_OldValues;
+ TIntList m_NewProperties;
+ TPropertyPairList m_NewValues;
+
+ InstancePropertyValuesTransaction(const char *inFile, int inLine,
+ CDataModelInstance &inInstance)
+ : ITransaction(inFile, inLine)
+ , m_Instance(inInstance)
+ , m_OldProperties(inInstance.m_Properties)
+ {
+ inInstance.ToPropertyPairList(m_OldValues);
+ }
+
+ void SetNew()
+ {
+ m_NewProperties = m_Instance.m_Properties;
+ m_Instance.ToPropertyPairList(m_NewValues);
+ }
+
+ void Do() override
+ {
+ m_Instance.m_Properties = m_NewProperties;
+ m_Instance.FromPropertyPairList(m_NewValues);
+ }
+
+ void Undo() override
+ {
+ m_Instance.m_Properties = m_OldProperties;
+ m_Instance.FromPropertyPairList(m_OldValues);
+ }
+};
+
+void CDataCoreProducer::CopyInstanceProperties(Qt3DSDMInstanceHandle inSrcInstance,
+ Qt3DSDMInstanceHandle inDestInstance)
+{
+ TDataModelInstancePtr theInstance =
+ CSimpleDataCore::GetInstanceNF(inDestInstance, m_Data->m_Objects);
+ if (m_Consumer) {
+ // Create the transaction object setting its 'old values' property to the current instance
+ // property values.
+ std::shared_ptr<InstancePropertyValuesTransaction> theTransaction(
+ std::make_shared<InstancePropertyValuesTransaction>(__FILE__, __LINE__,
+ ref(*theInstance)));
+
+ // Change the current instance property values
+ m_Data->CopyInstanceProperties(inSrcInstance, inDestInstance);
+
+ // Ask the transaction to copy the new values into it's new values datastructure.
+ theTransaction->SetNew();
+
+ m_Consumer->OnTransaction(std::static_pointer_cast<ITransaction>(theTransaction));
+ } else {
+ m_Data->CopyInstanceProperties(inSrcInstance, inDestInstance);
+ }
+}
+
+Qt3DSDMPropertyHandle
+CDataCoreProducer::GetAggregateInstancePropertyByName(Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inStr) const
+{
+ return m_Data->GetAggregateInstancePropertyByName(inInstance, inStr);
+}
+
+void CDataCoreProducer::GetAggregateInstanceProperties(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleList &outProperties) const
+{
+ m_Data->GetAggregateInstanceProperties(inInstance, outProperties);
+}
+
+void CDataCoreProducer::GetSpecificInstancePropertyValues(Qt3DSDMInstanceHandle inHandle,
+ TPropertyHandleValuePairList &outValues)
+{
+ m_Data->GetSpecificInstancePropertyValues(inHandle, outValues);
+}
+
+bool CDataCoreProducer::HasAggregateInstanceProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ return m_Data->HasAggregateInstanceProperty(inInstance, inProperty);
+}
+
+void CDataCoreProducer::CheckValue(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) const
+{
+ return m_Data->CheckValue(inInstance, inProperty, inValue);
+}
+
+bool CDataCoreProducer::GetInstancePropertyValue(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ return m_Data->GetInstancePropertyValue(inHandle, inProperty, outValue);
+}
+
+inline void EraseProperty(TPropertyPairHash &inProperties, int inProperty)
+{
+ inProperties.erase(
+ find_if(inProperties.begin(), inProperties.end(),
+ std::bind(CSimpleDataCore::InstancePropertyMatches, inProperty,
+ std::placeholders::_1)));
+}
+
+void CDataCoreProducer::SetInstancePropertyValue(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ // Two possible courses of actions. The property exists, in which case
+ // we need to get its old value.
+ // If it doesn't exist, then we need to erase for undo.
+ TPropertyValuePair theOldValue(PropertyValueFlags(PropertyValueFlags::SetViaAutoPropagate),
+ SInternValue(0.0f, GetStringTable()));
+ TDataModelInstancePtr theInstance = CSimpleDataCore::GetInstanceNF(inHandle, m_Data->m_Objects);
+ TPropertyPairHash::iterator theItem =
+ theInstance->m_PropertyValues.find(inProperty.GetHandleValue());
+ bool foundProp = theItem != theInstance->m_PropertyValues.end();
+ if (foundProp)
+ theOldValue = theItem->second;
+ m_Data->SetInstancePropertyValue(inHandle, inProperty, inValue);
+ TPropertyValuePair theNewValue =
+ theInstance->m_PropertyValues.find(inProperty.GetHandleValue())->second;
+ if (m_Consumer) {
+ // Check if we already have the entry
+ TSlideInstancePropertyPair theKey(inHandle, inProperty);
+ TPropertyMergeMap::iterator iter = m_PropertyMergeMap.find(theKey);
+ // Then we merge the values in to the original event where they
+ // first happened.
+ if (iter != m_PropertyMergeMap.end()) {
+ iter->second->Update(theNewValue);
+ return; // don't send the signal if we just updated value
+ } else // Else we add a new merge entry.
+ {
+ TPropertyMergeMapEntry theEntry;
+ if (!foundProp)
+ theEntry = CreateHashMapInsertTransaction(
+ __FILE__, __LINE__, m_Consumer,
+ make_pair(inProperty.GetHandleValue(), theNewValue),
+ theInstance->m_PropertyValues);
+ else
+ theEntry = CreateHashMapSwapTransaction(__FILE__, __LINE__, m_Consumer,
+ inProperty.GetHandleValue(), theOldValue,
+ theNewValue, theInstance->m_PropertyValues);
+ m_PropertyMergeMap.insert(std::make_pair(theKey, theEntry));
+ }
+ }
+ GetPropertyCoreSender()->SignalInstancePropertyValue(inHandle, inProperty, inValue);
+}
+
+bool CDataCoreProducer::HandleValid(int inHandle) const
+{
+ return m_Data->HandleValid(inHandle);
+}
+
+void CDataCoreProducer::SetConsumer(TTransactionConsumerPtr inConsumer)
+{
+ m_Consumer = inConsumer;
+ m_PropertyMergeMap.clear();
+}
+
+TSignalConnectionPtr CDataCoreProducer::ConnectInstancePropertyValue(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, const SValue &)>
+ &inCallback)
+{
+ return GetPropertyCoreProvider()->ConnectInstancePropertyValue(inCallback);
+}
+
+TSignalConnectionPtr CDataCoreProducer::ConnectInstanceCreated(
+ const std::function<void(Qt3DSDMInstanceHandle)> &inCallback)
+{
+ return GetDataCoreProvider()->ConnectInstanceCreated(inCallback);
+}
+
+TSignalConnectionPtr CDataCoreProducer::ConnectInstanceDeleted(
+ const std::function<void(Qt3DSDMInstanceHandle)> &inCallback)
+{
+ return GetDataCoreProvider()->ConnectInstanceDeleted(inCallback);
+}
+
+TSignalConnectionPtr CDataCoreProducer::ConnectBeforeInstanceDeleted(
+ const std::function<void(Qt3DSDMInstanceHandle)> &inCallback)
+{
+ return GetDataCoreProvider()->ConnectBeforeInstanceDeleted(inCallback);
+}
+
+TSignalConnectionPtr CDataCoreProducer::ConnectInstanceDerived(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMInstanceHandle)> &inCallback)
+{
+ return GetDataCoreProvider()->ConnectInstanceDerived(inCallback);
+}
+
+TSignalConnectionPtr CDataCoreProducer::ConnectInstanceParentRemoved(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMInstanceHandle)> &inCallback)
+{
+ return GetDataCoreProvider()->ConnectInstanceParentRemoved(inCallback);
+}
+
+TSignalConnectionPtr CDataCoreProducer::ConnectPropertyAdded(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, TCharPtr,
+ DataModelDataType::Value)> &inCallback)
+{
+ return GetDataCoreProvider()->ConnectPropertyAdded(inCallback);
+}
+
+TSignalConnectionPtr CDataCoreProducer::ConnectPropertyRemoved(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, TCharPtr,
+ DataModelDataType::Value)> &inCallback)
+{
+ return GetDataCoreProvider()->ConnectPropertyRemoved(inCallback);
+}
+
+void CDataCoreProducer::InitSignallers()
+{
+ m_InstancePropertyCoreSignaller = CreatePropertyCoreSignaller();
+ m_DataCoreSignaller = CreateDataCoreSignaller();
+}
+
+IInstancePropertyCoreSignalProvider *CDataCoreProducer::GetPropertyCoreProvider()
+{
+ return dynamic_cast<IInstancePropertyCoreSignalProvider *>(
+ m_InstancePropertyCoreSignaller.get());
+}
+
+IInstancePropertyCoreSignalSender *CDataCoreProducer::GetPropertyCoreSender()
+{
+ return dynamic_cast<IInstancePropertyCoreSignalSender *>(m_InstancePropertyCoreSignaller.get());
+}
+
+IDataCoreSignalProvider *CDataCoreProducer::GetDataCoreProvider()
+{
+ return dynamic_cast<IDataCoreSignalProvider *>(m_DataCoreSignaller.get());
+}
+
+IDataCoreSignalSender *CDataCoreProducer::GetDataCoreSender()
+{
+ return dynamic_cast<IDataCoreSignalSender *>(m_DataCoreSignaller.get());
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/DataCoreProducer.h b/src/Runtime/ogl-runtime/src/dm/systems/cores/DataCoreProducer.h
new file mode 100644
index 00000000..8d89bfab
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/DataCoreProducer.h
@@ -0,0 +1,175 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef DATACOREPRODUCERH
+#define DATACOREPRODUCERH
+
+#include "Qt3DSDMTransactions.h"
+#include "SimpleDataCore.h"
+#include "Qt3DSDMSignals.h"
+#include "SimpleSlideCore.h"
+
+namespace qt3dsdm {
+
+class CDataCoreProducer : public IDataCore,
+ public ITransactionProducer,
+ public IInstancePropertyCoreSignalProvider,
+ public IDataCoreSignalProvider
+{
+ typedef std::shared_ptr<IMergeableTransaction<TPropertyValuePair>> TPropertyMergeMapEntry;
+ typedef std::unordered_map<TSlideInstancePropertyPair, TPropertyMergeMapEntry>
+ TPropertyMergeMap;
+
+ TTransactionConsumerPtr m_Consumer;
+ TSimpleDataCorePtr m_Data;
+ TSignalItemPtr m_InstancePropertyCoreSignaller;
+ TSignalItemPtr m_DataCoreSignaller;
+
+ TPropertyMergeMap m_PropertyMergeMap;
+
+public:
+ CDataCoreProducer(TStringTablePtr inStringTable)
+ : m_Data(new CSimpleDataCore(inStringTable))
+ {
+ InitSignallers();
+ }
+ virtual ~CDataCoreProducer() {}
+
+ IStringTable &GetStringTable() const override { return m_Data->GetStringTable(); }
+ std::shared_ptr<IStringTable> GetStringTablePtr() const override
+ {
+ return m_Data->GetStringTablePtr();
+ }
+
+ // IHandleBase
+ bool HandleValid(int inHandle) const override;
+
+ // IInstancePropertyCore
+ //===============================================================
+ Qt3DSDMPropertyHandle GetAggregateInstancePropertyByName(Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inStr) const override;
+ void GetAggregateInstanceProperties(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleList &outProperties) const override;
+ void GetSpecificInstancePropertyValues(Qt3DSDMInstanceHandle inHandle,
+ TPropertyHandleValuePairList &outValues) override;
+ bool HasAggregateInstanceProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const override;
+
+ void CheckValue(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) const override;
+ bool GetInstancePropertyValue(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const override;
+ void SetInstancePropertyValue(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override;
+ //===============================================================
+
+ // IDataCore
+ //===============================================================
+ Qt3DSDMInstanceHandle CreateInstance(Qt3DSDMInstanceHandle hdl = Qt3DSDMInstanceHandle()) override;
+ void GetInstances(TInstanceHandleList &outInstances) const override;
+ void GetInstancesDerivedFrom(TInstanceHandleList &outInstances,
+ Qt3DSDMInstanceHandle inParent) const override;
+ void DeleteInstance(Qt3DSDMInstanceHandle inHandle) override;
+
+ void DeriveInstance(Qt3DSDMInstanceHandle inInstance, Qt3DSDMInstanceHandle inParent) override;
+ void GetInstanceParents(Qt3DSDMInstanceHandle inHandle,
+ TInstanceHandleList &outParents) const override;
+ bool IsInstanceOrDerivedFrom(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent) const override;
+
+ Qt3DSDMPropertyHandle AddProperty(Qt3DSDMInstanceHandle inInstance, TCharPtr inName,
+ DataModelDataType::Value inPropType) override;
+ void GetInstanceProperties(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleList &outProperties) const override;
+ const Qt3DSDMPropertyDefinition &GetProperty(Qt3DSDMPropertyHandle inProperty) const override;
+ void RemoveProperty(Qt3DSDMPropertyHandle inProperty) override;
+ void CopyInstanceProperties(Qt3DSDMInstanceHandle inSrcInstance,
+ Qt3DSDMInstanceHandle inDestInstance) override;
+
+ void RemoveCachedValues(Qt3DSDMInstanceHandle inInstance) override
+ {
+ m_Data->RemoveCachedValues(inInstance);
+ }
+ bool IsInstance(int inHandle) const override { return m_Data->IsInstance(inHandle); }
+ bool IsProperty(int inHandle) const override { return m_Data->IsProperty(inHandle); }
+ //===============================================================
+
+ //===============================================================
+ // Set the current consumer
+ //===============================================================
+ void SetConsumer(TTransactionConsumerPtr inConsumer) override;
+
+ //===============================================================
+ // Return a serializable data model for load/save
+ //===============================================================
+ virtual TSimpleDataCorePtr GetTransactionlessDataCore() { return m_Data; }
+ virtual TSimpleDataCorePtr GetTransactionlessDataCore() const { return m_Data; }
+
+ //===============================================================
+ // Signal provider implementation
+ //===============================================================
+ TSignalConnectionPtr ConnectInstancePropertyValue(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, const SValue &)>
+ &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectInstanceCreated(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectInstanceDeleted(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectBeforeInstanceDeleted(const std::function<void(Qt3DSDMInstanceHandle)> &inCallback) override;
+ TSignalConnectionPtr ConnectInstanceDerived(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMInstanceHandle)> &inCallback) override;
+ TSignalConnectionPtr ConnectInstanceParentRemoved(
+ const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMInstanceHandle)> &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectPropertyAdded(const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ TCharPtr, DataModelDataType::Value)> &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectPropertyRemoved(const std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ TCharPtr, DataModelDataType::Value)> &inCallback) override;
+
+private:
+ CDataCoreProducer(const CDataCoreProducer&) = delete;
+ CDataCoreProducer& operator=(const CDataCoreProducer&) = delete;
+
+ template <typename TTransactionType>
+ inline void RunWithConsumer(TTransactionType inTransaction)
+ {
+ qt3dsdm::RunWithConsumer(m_Consumer, inTransaction);
+ }
+
+ void InitSignallers();
+ IInstancePropertyCoreSignalProvider *GetPropertyCoreProvider();
+ IInstancePropertyCoreSignalSender *GetPropertyCoreSender();
+ IDataCoreSignalProvider *GetDataCoreProvider();
+ IDataCoreSignalSender *GetDataCoreSender();
+};
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleActionCore.cpp b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleActionCore.cpp
new file mode 100644
index 00000000..b2f35538
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleActionCore.cpp
@@ -0,0 +1,240 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "SimpleActionCore.h"
+
+namespace qt3dsdm {
+
+Qt3DSDMActionHandle CSimpleActionCore::CreateAction(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner,
+ SLong4 inTriggerTargetObjects)
+{
+ int nextId = GetNextId();
+ Qt3DSDMActionHandle retval = CreateActionWithHandle(nextId, inInstance, inSlide, inOwner);
+ SetTriggerObject(retval, inTriggerTargetObjects);
+ SetTargetObject(retval, inTriggerTargetObjects);
+ return retval;
+}
+
+void CSimpleActionCore::DeleteAction(Qt3DSDMActionHandle inAction, Qt3DSDMInstanceHandle &outInstance)
+{
+ SAction *theAction = GetActionNF(inAction, m_Objects);
+ outInstance = theAction->m_ActionInfo.m_Instance;
+ do_all(theAction->m_ActionInfo.m_HandlerArgs,
+ std::bind(EraseHandle, std::placeholders::_1, std::ref(m_Objects)));
+ EraseHandle(inAction, m_Objects);
+}
+
+const SActionInfo &CSimpleActionCore::GetActionInfo(Qt3DSDMActionHandle inAction) const
+{
+ const SAction *theAction = GetActionNF(inAction, m_Objects);
+ return theAction->m_ActionInfo;
+}
+
+inline void AddIfActionMatches(const THandleObjectPair &inPair, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner, TActionHandleList &outActions)
+{
+ if (inPair.second->GetType() == CHandleObject::EHandleObjectTypeAction) {
+ const SAction *theAction = static_cast<SAction *>(inPair.second.get());
+ if ((!inSlide.Valid() || inSlide == theAction->m_ActionInfo.m_Slide)
+ && (!inOwner.Valid() || inOwner == theAction->m_ActionInfo.m_Owner))
+ outActions.push_back(inPair.first);
+ }
+}
+
+// Return all actions that belong to a certain instance in a certain slide
+void CSimpleActionCore::GetActions(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inOwner,
+ TActionHandleList &outActions) const
+{
+ outActions.clear();
+ do_all(m_Objects,
+ std::bind(AddIfActionMatches,
+ std::placeholders::_1, inSlide, inOwner, std::ref(outActions)));
+}
+
+// Return all actions that exist in a certain slide
+void CSimpleActionCore::GetActions(Qt3DSDMSlideHandle inSlide, TActionHandleList &outActions) const
+{
+ GetActions(inSlide, 0, outActions);
+}
+
+// Return all actions that belong to a certain instance
+void CSimpleActionCore::GetActions(Qt3DSDMInstanceHandle inOwner,
+ TActionHandleList &outActions) const
+{
+ GetActions(0, inOwner, outActions);
+}
+
+// Return all actions
+void CSimpleActionCore::GetActions(TActionHandleList &outActions) const
+{
+ outActions.clear();
+ outActions.reserve(m_Objects.size());
+ do_all(m_Objects,
+ std::bind(MaybeAddObject<SAction, Qt3DSDMActionHandle>,
+ std::placeholders::_1, std::ref(outActions)));
+}
+
+// Return the instance that was allocated for this action.
+Qt3DSDMInstanceHandle CSimpleActionCore::GetActionInstance(Qt3DSDMActionHandle inAction) const
+{
+ return GetActionNF(inAction, m_Objects)->m_ActionInfo.m_Instance;
+}
+
+inline bool ActionInstanceMatches(const THandleObjectPair &inPair, Qt3DSDMInstanceHandle inInstance)
+{
+ if (inPair.second->GetType() == CHandleObject::EHandleObjectTypeAction) {
+ const SAction *theAction = static_cast<SAction *>(inPair.second.get());
+ if (inInstance == theAction->m_ActionInfo.m_Instance)
+ return true;
+ }
+ return false;
+}
+
+// Reverse lookup into the action system so you can match actions to instances.
+Qt3DSDMActionHandle
+CSimpleActionCore::GetActionByInstance(Qt3DSDMInstanceHandle inActionInstance) const
+{
+ THandleObjectMap::const_iterator theAction =
+ find_if(m_Objects.begin(), m_Objects.end(),
+ std::bind(ActionInstanceMatches, std::placeholders::_1, inActionInstance));
+ if (theAction != m_Objects.end())
+ return theAction->first;
+ throw ActionNotFound(L"");
+}
+
+// Action Properties
+void CSimpleActionCore::SetTriggerObject(Qt3DSDMActionHandle inAction,
+ const SObjectRefType &inTriggerObject)
+{
+ SAction *theAction = GetActionNF(inAction, m_Objects);
+ theAction->m_ActionInfo.m_TriggerObject = inTriggerObject;
+}
+
+void CSimpleActionCore::SetTargetObject(Qt3DSDMActionHandle inAction,
+ const SObjectRefType &inTargetObject)
+{
+ SAction *theAction = GetActionNF(inAction, m_Objects);
+ theAction->m_ActionInfo.m_TargetObject = inTargetObject;
+}
+
+void CSimpleActionCore::SetEvent(Qt3DSDMActionHandle inAction, const wstring &inEventHandle)
+{
+ SAction *theAction = GetActionNF(inAction, m_Objects);
+ theAction->m_ActionInfo.m_Event = inEventHandle;
+}
+
+void CSimpleActionCore::SetHandler(Qt3DSDMActionHandle inAction, const wstring &inHandlerHandle)
+{
+ SAction *theAction = GetActionNF(inAction, m_Objects);
+ theAction->m_ActionInfo.m_Handler = inHandlerHandle;
+}
+
+// Action Argument
+Qt3DSDMHandlerArgHandle CSimpleActionCore::AddHandlerArgument(Qt3DSDMActionHandle inAction,
+ const TCharStr &inName,
+ HandlerArgumentType::Value inArgType,
+ DataModelDataType::Value inValueType)
+{
+ int nextId = GetNextId();
+ return AddHandlerArgumentWithHandle(nextId, inAction, inName, inArgType, inValueType);
+}
+
+void CSimpleActionCore::RemoveHandlerArgument(Qt3DSDMHandlerArgHandle inHandlerArgument)
+{
+ SHandlerArgument *theHandlerArgument = GetHandlerArgumentNF(inHandlerArgument, m_Objects);
+ SAction *theAction = GetActionNF(theHandlerArgument->m_HandlerArgInfo.m_Action, m_Objects);
+ EraseHandle(inHandlerArgument, m_Objects);
+ erase_if(theAction->m_ActionInfo.m_HandlerArgs,
+ std::bind(equal_to<int>(), std::placeholders::_1, inHandlerArgument.GetHandleValue()));
+}
+
+const SHandlerArgumentInfo &
+CSimpleActionCore::GetHandlerArgumentInfo(Qt3DSDMHandlerArgHandle inHandlerArgument) const
+{
+ if (HandleValid(inHandlerArgument)) {
+ const SHandlerArgument *theHandlerArgument =
+ GetHandlerArgumentNF(inHandlerArgument, m_Objects);
+ return theHandlerArgument->m_HandlerArgInfo;
+ } else {
+ static SHandlerArgumentInfo dummy;
+ return dummy;
+ }
+}
+
+void CSimpleActionCore::GetHandlerArguments(Qt3DSDMActionHandle inAction,
+ THandlerArgHandleList &outHandlerArguments) const
+{
+ const SAction *theAction = GetActionNF(inAction, m_Objects);
+ outHandlerArguments = theAction->m_ActionInfo.m_HandlerArgs;
+}
+
+// Action Argument Properties
+void CSimpleActionCore::GetHandlerArgumentValue(Qt3DSDMHandlerArgHandle inHandlerArgument,
+ SValue &outValue) const
+{
+ const SHandlerArgument *theHandlerArgument = GetHandlerArgumentNF(inHandlerArgument, m_Objects);
+ outValue = theHandlerArgument->m_HandlerArgInfo.m_Value;
+}
+
+void CSimpleActionCore::SetHandlerArgumentValue(Qt3DSDMHandlerArgHandle inHandlerArgument,
+ const SValue &inValue)
+{
+ SHandlerArgument *theHandlerArgument = GetHandlerArgumentNF(inHandlerArgument, m_Objects);
+ theHandlerArgument->m_HandlerArgInfo.m_Value = inValue;
+}
+
+// Helper functions
+Qt3DSDMActionHandle CSimpleActionCore::CreateActionWithHandle(int inHandle,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner)
+{
+ if (HandleValid(inHandle))
+ throw HandleExists(L"");
+ m_Objects.insert(make_pair(
+ inHandle, (THandleObjectPtr) new SAction(inHandle, inInstance, inSlide, inOwner)));
+ return inHandle;
+}
+
+Qt3DSDMHandlerArgHandle
+CSimpleActionCore::AddHandlerArgumentWithHandle(int inHandle, Qt3DSDMActionHandle inAction,
+ const TCharStr &inName, HandlerArgumentType::Value inArgType,
+ DataModelDataType::Value inValueType)
+{
+ if (HandleValid(inHandle))
+ throw HandleExists(L"");
+ m_Objects.insert(make_pair(inHandle, (THandleObjectPtr) new SHandlerArgument(
+ inHandle, inAction, inName, inArgType, inValueType)));
+ SAction *theAction = GetActionNF(inAction, m_Objects);
+ theAction->m_ActionInfo.m_HandlerArgs.push_back(inHandle);
+ return inHandle;
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleActionCore.h b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleActionCore.h
new file mode 100644
index 00000000..1e229f18
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleActionCore.h
@@ -0,0 +1,165 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef ACTIONCOREH
+#define ACTIONCOREH
+
+#include "Qt3DSDMActionCore.h"
+#include "HandleSystemBase.h"
+#include "Qt3DSDMErrors.h"
+
+namespace qt3dsdm {
+struct SAction : public CHandleObject
+{
+ SActionInfo m_ActionInfo;
+
+ SAction() {}
+
+ SAction(int inHandle, Qt3DSDMInstanceHandle inInstance, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner)
+ : CHandleObject(inHandle)
+ , m_ActionInfo(inInstance, inSlide, inOwner)
+ {
+ }
+
+ static const EHandleObjectType s_Type = CHandleObject::EHandleObjectTypeAction;
+ EHandleObjectType GetType() override { return s_Type; }
+};
+
+struct SHandlerArgument : public CHandleObject
+{
+ SHandlerArgumentInfo m_HandlerArgInfo;
+
+ SHandlerArgument() {}
+
+ SHandlerArgument(int inHandle, Qt3DSDMActionHandle inAction, const TCharStr &inName,
+ HandlerArgumentType::Value inArgType, DataModelDataType::Value inValueType)
+ : CHandleObject(inHandle)
+ , m_HandlerArgInfo(inAction, inName, inArgType, inValueType)
+ {
+ }
+
+ static const EHandleObjectType s_Type = CHandleObject::EHandleObjectTypeActionHandlerArgument;
+ EHandleObjectType GetType() override { return s_Type; }
+};
+
+class CSimpleActionCore : public CHandleBase, public IActionCore
+{
+ mutable TStringTablePtr m_StringTable;
+
+public: // Use
+ CSimpleActionCore(TStringTablePtr strTable)
+ : m_StringTable(strTable)
+ {
+ }
+
+ IStringTable &GetStringTable() const override { return *m_StringTable.get(); }
+ TStringTablePtr GetStringTablePtr() const override { return m_StringTable; }
+ // Action
+ Qt3DSDMActionHandle CreateAction(Qt3DSDMInstanceHandle inInstance, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner, SLong4 inTriggerTargetObjects) override;
+ void DeleteAction(Qt3DSDMActionHandle inAction, Qt3DSDMInstanceHandle &outInstance) override;
+ const SActionInfo &GetActionInfo(Qt3DSDMActionHandle inAction) const override;
+ void GetActions(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inOwner,
+ TActionHandleList &outActions) const override;
+ void GetActions(Qt3DSDMSlideHandle inSlide, TActionHandleList &outActions) const override;
+ void GetActions(Qt3DSDMInstanceHandle inOwner, TActionHandleList &outActions) const override;
+ void GetActions(TActionHandleList &outActions) const override;
+
+ // Return the instance that was allocated for this action.
+ Qt3DSDMInstanceHandle GetActionInstance(Qt3DSDMActionHandle inAction) const override;
+ // Reverse lookup into the action system so you can match actions to instances.
+ Qt3DSDMActionHandle GetActionByInstance(Qt3DSDMInstanceHandle inActionInstance) const override;
+
+ // Action Properties
+ void SetTriggerObject(Qt3DSDMActionHandle inAction, const SObjectRefType &inTriggerObject) override;
+ void SetTargetObject(Qt3DSDMActionHandle inAction, const SObjectRefType &inTargetObject) override;
+ void SetEvent(Qt3DSDMActionHandle inAction, const wstring &inEvent) override;
+ void SetHandler(Qt3DSDMActionHandle inAction, const wstring &inHandler) override;
+
+ // Action Argument
+ Qt3DSDMHandlerArgHandle AddHandlerArgument(Qt3DSDMActionHandle inAction, const TCharStr &inName,
+ HandlerArgumentType::Value inArgType,
+ DataModelDataType::Value inValueType) override;
+ void RemoveHandlerArgument(Qt3DSDMHandlerArgHandle inHandlerArgument) override;
+ const SHandlerArgumentInfo &
+ GetHandlerArgumentInfo(Qt3DSDMHandlerArgHandle inHandlerArgument) const override;
+ void GetHandlerArguments(Qt3DSDMActionHandle inAction,
+ THandlerArgHandleList &outHandlerArguments) const override;
+
+ // Action Argument Properties
+ void GetHandlerArgumentValue(Qt3DSDMHandlerArgHandle inHandlerArgument, SValue &outValue) const override;
+ void SetHandlerArgumentValue(Qt3DSDMHandlerArgHandle inHandlerArgument, const SValue &inValue) override;
+
+ // CHandleBase
+ bool HandleValid(int inHandle) const override { return CHandleBase::HandleValid(inHandle); }
+
+ // Helper functions
+ Qt3DSDMActionHandle CreateActionWithHandle(int inHandle, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inOwner);
+ Qt3DSDMHandlerArgHandle AddHandlerArgumentWithHandle(int inHandle, Qt3DSDMActionHandle inAction,
+ const TCharStr &inName,
+ HandlerArgumentType::Value inArgType,
+ DataModelDataType::Value inValueType);
+
+ static SAction *GetActionNF(int inHandle, THandleObjectMap &inObjects)
+ {
+ return const_cast<SAction *>(
+ GetActionNF(inHandle, static_cast<const THandleObjectMap &>(inObjects)));
+ }
+
+ static const SAction *GetActionNF(int inHandle, const THandleObjectMap &inObjects)
+ {
+ const SAction *theAction = GetHandleObject<SAction>(inHandle, inObjects);
+ if (theAction)
+ return theAction;
+ throw ActionNotFound(L"");
+ }
+
+ static SHandlerArgument *GetHandlerArgumentNF(int inHandle, THandleObjectMap &inObjects)
+ {
+ return const_cast<SHandlerArgument *>(
+ GetHandlerArgumentNF(inHandle, static_cast<const THandleObjectMap &>(inObjects)));
+ }
+
+ static const SHandlerArgument *GetHandlerArgumentNF(int inHandle,
+ const THandleObjectMap &inObjects)
+ {
+ const SHandlerArgument *theItem = GetHandleObject<SHandlerArgument>(inHandle, inObjects);
+ if (theItem)
+ return theItem;
+ throw HandlerArgumentNotFound(L"");
+ }
+};
+
+typedef std::shared_ptr<CSimpleActionCore> TSimpleActionCorePtr;
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleAnimationCore.cpp b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleAnimationCore.cpp
new file mode 100644
index 00000000..00d6df4e
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleAnimationCore.cpp
@@ -0,0 +1,618 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "SimpleAnimationCore.h"
+
+#ifdef _WIN32
+#pragma warning(disable : 4503) // decorated name length exceeded
+#endif
+
+typedef long INT32;
+typedef float FLOAT;
+#define DATALOGGER_CUBICROOT 0
+
+struct SPerfLogEvent
+{
+ SPerfLogEvent(int) {}
+};
+
+typedef SPerfLogEvent TPerfLogMathEvent1;
+
+#include "Qt3DSCubicRoots.h"
+#include "Qt3DSCubicRootsImpl.h"
+#include "Qt3DSBezierEval.h"
+using namespace std;
+
+namespace qt3dsdm {
+
+Qt3DSDMAnimationHandle
+CSimpleAnimationCore::CreateAnimation(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex,
+ EAnimationType inAnimationType, bool inFirstKeyframeDynamic)
+{
+ if (GetAnimation(inSlide, inInstance, inProperty, inIndex).Valid())
+ throw AnimationExists(L"");
+
+ int nextId = GetNextId();
+ Qt3DSDMAnimationHandle retval = CreateAnimationWithHandle(
+ nextId, inSlide, inInstance, inProperty, inIndex, inAnimationType, inFirstKeyframeDynamic);
+ AddAnimationToLookupCache(retval);
+ return retval;
+}
+
+void CSimpleAnimationCore::DeleteAnimation(Qt3DSDMAnimationHandle inAnimation)
+{
+ RemoveAnimationFromLookupCache(inAnimation);
+ SAnimationTrack *theItem = GetAnimationNF(inAnimation, m_Objects);
+ do_all(theItem->m_Keyframes, std::bind(EraseHandle,
+ std::placeholders::_1, std::ref(m_Objects)));
+ EraseHandle(inAnimation, m_Objects);
+}
+
+void CSimpleAnimationCore::EnsureAnimationCache() const
+{
+ if (m_AnimationMatchesCache.size() == 0) {
+ for (THandleObjectMap::const_iterator theIter = m_Objects.begin(), theEnd = m_Objects.end();
+ theIter != theEnd; ++theIter) {
+ if (theIter->second->GetType() == CHandleObject::EHandleObjectTypeSAnimationTrack)
+ AddAnimationToLookupCache(static_pointer_cast<SAnimationTrack>(theIter->second));
+ }
+ }
+}
+
+Qt3DSDMAnimationHandle CSimpleAnimationCore::GetAnimation(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ size_t inIndex) const
+{
+ EnsureAnimationCache();
+
+ pair<TStateInstanceAnimationMap::const_iterator, TStateInstanceAnimationMap::const_iterator>
+ theRange(m_AnimationMatchesCache.equal_range(
+ make_pair(inSlide.GetHandleValue(), inInstance.GetHandleValue())));
+ for (TStateInstanceAnimationMap::const_iterator theIter = theRange.first;
+ theIter != theRange.second; ++theIter) {
+ std::shared_ptr<SAnimationTrack> theItem = theIter->second;
+ if (inSlide.GetHandleValue() == theItem->m_Slide
+ && inInstance.GetHandleValue() == theItem->m_Instance
+ && inProperty.GetHandleValue() == theItem->m_Property && inIndex == theItem->m_Index)
+ return theItem->m_Handle;
+ }
+ return 0;
+}
+
+SAnimationInfo CSimpleAnimationCore::GetAnimationInfo(Qt3DSDMAnimationHandle inAnimation) const
+{
+ if (m_Objects.find(inAnimation) != m_Objects.end()) {
+ const SAnimationTrack *theItem = GetAnimationNF(inAnimation, m_Objects);
+ return CreateAnimationInfo(theItem->m_Slide, theItem->m_Instance, theItem->m_Property,
+ theItem->m_Index, theItem->m_AnimationType,
+ theItem->m_FirstKeyframeDynamic, theItem->m_ArtistEdited);
+ }
+ return SAnimationInfo();
+}
+
+inline void AddIfAnimation(const THandleObjectPair &inPair, TAnimationHandleList &outAnimations)
+{
+ if (inPair.second->GetType() == CHandleObject::EHandleObjectTypeSAnimationTrack)
+ outAnimations.push_back(inPair.first);
+}
+
+void CSimpleAnimationCore::GetAnimations(TAnimationHandleList &outAnimations) const
+{
+ outAnimations.clear();
+ do_all(m_Objects, std::bind(AddIfAnimation, std::placeholders::_1, std::ref(outAnimations)));
+}
+
+void CSimpleAnimationCore::GetAnimations(TAnimationInfoList &outAnimations,
+ Qt3DSDMSlideHandle inMaster,
+ Qt3DSDMSlideHandle inSlide) const
+{
+ outAnimations.clear();
+ for (THandleObjectMap::const_iterator iter = m_Objects.begin(), end = m_Objects.end();
+ iter != end; ++iter) {
+ if (iter->second->GetType() == CHandleObject::EHandleObjectTypeSAnimationTrack) {
+ const SAnimationTrack *theItem =
+ static_cast<const SAnimationTrack *>(iter->second.get());
+ // If either master or slide is valid, then item slide must match.
+ // If item slide matches neither, then we ignore unless neither are valid.
+ bool keep = (theItem->m_Slide == inMaster || theItem->m_Slide == inSlide)
+ || (inMaster.Valid() == false && inSlide.Valid() == false);
+ if (keep) {
+ outAnimations.push_back(
+ CreateAnimationInfo(theItem->m_Slide, theItem->m_Instance, theItem->m_Property,
+ theItem->m_Index, theItem->m_AnimationType,
+ theItem->m_FirstKeyframeDynamic, theItem->m_ArtistEdited));
+ }
+ }
+ }
+}
+
+inline void AddSpecificAnimationsIf(const THandleObjectPair &inPair, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ TAnimationHandleList &outAnimations)
+{
+ if (inPair.second->GetType() == CHandleObject::EHandleObjectTypeSAnimationTrack) {
+ const SAnimationTrack *theTrack = static_cast<const SAnimationTrack *>(inPair.second.get());
+ if (theTrack->m_Slide == inSlide && theTrack->m_Instance == inInstance)
+ outAnimations.push_back(inPair.first);
+ }
+}
+
+void CSimpleAnimationCore::GetSpecificInstanceAnimations(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ TAnimationHandleList &outAnimations)
+{
+ EnsureAnimationCache();
+ pair<TStateInstanceAnimationMap::const_iterator, TStateInstanceAnimationMap::const_iterator>
+ theRange(m_AnimationMatchesCache.equal_range(
+ make_pair(inSlide.GetHandleValue(), inInstance.GetHandleValue())));
+ for (TStateInstanceAnimationMap::const_iterator iter = theRange.first; iter != theRange.second;
+ ++iter)
+ outAnimations.push_back(iter->second->m_Handle);
+}
+
+void CSimpleAnimationCore::SetFirstKeyframeDynamic(Qt3DSDMAnimationHandle inAnimation, bool inValue)
+{
+ SAnimationTrack *theItem = GetAnimationNF(inAnimation, m_Objects);
+ theItem->m_FirstKeyframeDynamic = inValue;
+ SetIsArtistEdited(inAnimation);
+}
+
+inline void CheckKeyframeType(EAnimationType inExpected, const TKeyframe &inKeyframe)
+{
+ if (inExpected != GetKeyframeType(inKeyframe))
+ throw AnimationKeyframeTypeError(L"");
+}
+
+// keyframe manipulation
+Qt3DSDMKeyframeHandle CSimpleAnimationCore::InsertKeyframe(Qt3DSDMAnimationHandle inAnimation,
+ const TKeyframe &inKeyframe)
+{
+ SAnimationTrack *theItem = GetAnimationNF(inAnimation, m_Objects);
+ CheckKeyframeType(theItem->m_AnimationType, inKeyframe);
+ int nextId = GetNextId();
+ m_Objects.insert(
+ make_pair(nextId, (THandleObjectPtr) new SKeyframe(nextId, inAnimation, inKeyframe)));
+ theItem->m_Keyframes.push_back(nextId);
+ theItem->m_KeyframesDirty = true;
+ SetIsArtistEdited(inAnimation);
+ return nextId;
+}
+
+void CSimpleAnimationCore::EraseKeyframe(Qt3DSDMKeyframeHandle inKeyframe)
+{
+ SKeyframe *theKeyframe = GetKeyframeNF(inKeyframe, m_Objects);
+ int theAnimHandle(theKeyframe->m_Animation);
+ SAnimationTrack *theItem = GetAnimationNF(theAnimHandle, m_Objects);
+ EraseHandle(inKeyframe, m_Objects);
+ erase_if(theItem->m_Keyframes, std::bind(equal_to<int>(),
+ std::placeholders::_1, inKeyframe.GetHandleValue()));
+ SetIsArtistEdited(theAnimHandle);
+}
+
+void CSimpleAnimationCore::DeleteAllKeyframes(Qt3DSDMAnimationHandle inAnimation)
+{
+ SAnimationTrack *theItem = GetAnimationNF(inAnimation, m_Objects);
+ do_all(theItem->m_Keyframes, std::bind(EraseHandle,
+ std::placeholders::_1, std::ref(m_Objects)));
+ theItem->m_Keyframes.clear();
+ SetIsArtistEdited(inAnimation);
+}
+
+Qt3DSDMAnimationHandle
+CSimpleAnimationCore::GetAnimationForKeyframe(Qt3DSDMKeyframeHandle inKeyframe) const
+{
+ const SKeyframe *theKeyframe = GetKeyframeNF(inKeyframe, m_Objects);
+ return theKeyframe->m_Animation;
+}
+
+TKeyframe CSimpleAnimationCore::GetKeyframeData(Qt3DSDMKeyframeHandle inKeyframe) const
+{
+ const SKeyframe *theKeyframe = GetKeyframeNF(inKeyframe, m_Objects);
+ return theKeyframe->m_Keyframe;
+}
+
+void CSimpleAnimationCore::SetKeyframeData(Qt3DSDMKeyframeHandle inKeyframe, const TKeyframe &inData)
+{
+ DoSetKeyframeData(inKeyframe, inData);
+ SKeyframe *theKeyframe = GetKeyframeNF(inKeyframe, m_Objects);
+ SetIsArtistEdited(theKeyframe->m_Animation);
+}
+
+void CSimpleAnimationCore::DoSetKeyframeData(Qt3DSDMKeyframeHandle inKeyframe,
+ const TKeyframe &inData)
+{
+ SKeyframe *theKeyframe = GetKeyframeNF(inKeyframe, m_Objects);
+ CheckKeyframeType(GetKeyframeType(theKeyframe->m_Keyframe), inData);
+ theKeyframe->m_Keyframe = inData;
+ SAnimationTrack *theItem = GetAnimationNF(theKeyframe->m_Animation, m_Objects);
+ theItem->m_KeyframesDirty = true;
+}
+
+bool KeyframeLessThan(int inLeftSide, int inRightSide, const THandleObjectMap &inObjects)
+{
+ const SKeyframe *theLeft = CSimpleAnimationCore::GetKeyframeNF(inLeftSide, inObjects);
+ const SKeyframe *theRight = CSimpleAnimationCore::GetKeyframeNF(inRightSide, inObjects);
+ return KeyframeTime(theLeft->m_Keyframe) < KeyframeTime(theRight->m_Keyframe);
+}
+
+void SortKeyframes(TKeyframeHandleList &inKeyframes, const THandleObjectMap &inObjects)
+{
+ return stable_sort(inKeyframes.begin(), inKeyframes.end(),
+ std::bind(KeyframeLessThan, std::placeholders::_1,
+ std::placeholders::_2, std::ref(inObjects)));
+}
+
+void CheckKeyframesSorted(const SAnimationTrack *theItem, const THandleObjectMap &inObjects)
+{
+ if (theItem->m_KeyframesDirty) {
+ SAnimationTrack *theNonConst = const_cast<SAnimationTrack *>(theItem);
+ SortKeyframes(theNonConst->m_Keyframes, inObjects);
+ theNonConst->m_KeyframesDirty = false;
+ }
+}
+
+void CSimpleAnimationCore::GetKeyframes(Qt3DSDMAnimationHandle inAnimation,
+ TKeyframeHandleList &outKeyframes) const
+{
+ const SAnimationTrack *theItem = GetAnimationNF(inAnimation, m_Objects);
+ CheckKeyframesSorted(theItem, m_Objects);
+ outKeyframes = theItem->m_Keyframes;
+}
+
+size_t CSimpleAnimationCore::GetKeyframeCount(Qt3DSDMAnimationHandle inAnimation) const
+{
+ const SAnimationTrack *theItem = GetAnimationNF(inAnimation, m_Objects);
+ return theItem->m_Keyframes.size();
+}
+
+bool CSimpleAnimationCore::IsFirstKeyframe(Qt3DSDMKeyframeHandle inKeyframe) const
+{
+ Qt3DSDMAnimationHandle theAnimation = GetAnimationForKeyframe(inKeyframe);
+ if (theAnimation.Valid()) {
+ const SAnimationTrack *theItem = GetAnimationNF(theAnimation, m_Objects);
+ return theItem->m_Keyframes.size() && theItem->m_Keyframes[0] == inKeyframe;
+ }
+ return false;
+}
+
+void CSimpleAnimationCore::OffsetAnimations(Qt3DSDMSlideHandle /*inSlide*/,
+ Qt3DSDMInstanceHandle /*inInstance*/, long /*inOffset*/)
+{
+ throw std::runtime_error("unimplemented");
+}
+
+void CSimpleAnimationCore::SetIsArtistEdited(Qt3DSDMAnimationHandle inAnimation, bool inEdited)
+{
+ if (m_Objects.find(inAnimation) == m_Objects.end()) {
+ Q_ASSERT(false);
+ return;
+ }
+ SAnimationTrack *theItem = GetAnimationNF(inAnimation, m_Objects);
+ if (theItem->m_ArtistEdited != inEdited)
+ theItem->m_ArtistEdited = inEdited;
+}
+
+bool CSimpleAnimationCore::IsArtistEdited(Qt3DSDMAnimationHandle inAnimation) const
+{
+ if (m_Objects.find(inAnimation) == m_Objects.end()) {
+ return false;
+ }
+ const SAnimationTrack *theItem = GetAnimationNF(inAnimation, m_Objects);
+ return theItem->m_ArtistEdited;
+}
+
+inline bool KeyframeTimeLessThan(int inKeyframe, float inSeconds, const THandleObjectMap &inObjects)
+{
+ const SKeyframe *theKeyframe = CSimpleAnimationCore::GetKeyframeNF(inKeyframe, inObjects);
+ return KeyframeTime(theKeyframe->m_Keyframe) < inSeconds;
+}
+
+inline bool KeyframeValueTimeLessThan(const TKeyframe &inLeft, const TKeyframe &inRight)
+{
+ return KeyframeTime(inLeft) < KeyframeTime(inRight);
+}
+
+TKeyframe IntToKeyframe(int inKeyframe, const THandleObjectMap &inObjects)
+{
+ const SKeyframe *theKeyframe = CSimpleAnimationCore::GetKeyframeNF(inKeyframe, inObjects);
+ return theKeyframe->m_Keyframe;
+}
+
+inline float KeyframeValue(int inKeyframe, const THandleObjectMap &inObjects)
+{
+ const SKeyframe *theKeyframe = CSimpleAnimationCore::GetKeyframeNF(inKeyframe, inObjects);
+ return KeyframeValueValue(theKeyframe->m_Keyframe);
+}
+
+inline float EvaluateLinear(float inS1, float inS2, float inV1, float inV2, float inSeconds)
+{
+ float amount = (inSeconds - inS1) / (inS2 - inS1);
+ return inV1 + amount * (inV2 - inV1);
+}
+
+inline float EvaluateLinearKeyframe(SLinearKeyframe &inK1, SLinearKeyframe &inK2, float inSeconds)
+{
+ return EvaluateLinear(inK1.m_KeyframeSeconds, inK2.m_KeyframeSeconds, inK1.m_KeyframeValue,
+ inK2.m_KeyframeValue, inSeconds);
+}
+
+inline float DoBezierEvaluation(float inSeconds, const SBezierKeyframe &inK1,
+ const SBezierKeyframe &inK2)
+{
+ return Q3DStudio::EvaluateBezierKeyframe(
+ inSeconds, inK1.m_KeyframeSeconds, inK1.m_KeyframeValue, inK1.m_OutTangentTime,
+ inK1.m_OutTangentValue, inK2.m_InTangentTime, inK2.m_InTangentValue, inK2.m_KeyframeSeconds,
+ inK2.m_KeyframeValue);
+}
+
+// Animation Evaluation.
+float CSimpleAnimationCore::EvaluateAnimation(Qt3DSDMAnimationHandle inAnimation,
+ float inSeconds) const
+{
+ const SAnimationTrack *theItem = GetAnimationNF(inAnimation, m_Objects);
+ if (theItem->m_Keyframes.empty())
+ return 0.0f;
+ CheckKeyframesSorted(theItem, m_Objects);
+ // Default to linear for now.
+ SLinearKeyframe theKeyframe = { 0 };
+ theKeyframe.m_KeyframeSeconds = inSeconds;
+ TKeyframe theSearchKey(theKeyframe);
+ function<TKeyframe(int)> theIntToKeyframe(
+ std::bind(IntToKeyframe, std::placeholders::_1, std::ref(m_Objects)));
+
+ TKeyframeHandleList::const_iterator theBound =
+ lower_bound(theItem->m_Keyframes.begin(), theItem->m_Keyframes.end(), theSearchKey,
+ [theIntToKeyframe](const Qt3DSDMKeyframeHandle &inLeft,
+ const TKeyframe &inRight)
+ {return KeyframeTime(theIntToKeyframe(inLeft)) < KeyframeTime(inRight);});
+
+ if (theBound == theItem->m_Keyframes.end())
+ return KeyframeValue(theItem->m_Keyframes.back(), m_Objects);
+ if (theBound == theItem->m_Keyframes.begin())
+ return KeyframeValue(*theItem->m_Keyframes.begin(), m_Objects);
+
+ TKeyframeHandleList::const_iterator theStartIter = theBound;
+ --theStartIter;
+
+ // Both iterators must be valid at this point...
+ Qt3DSDMKeyframeHandle theStart = *theStartIter;
+ Qt3DSDMKeyframeHandle theFinish = *theBound;
+ switch (theItem->m_AnimationType) {
+ default:
+ throw AnimationEvaluationError(L"");
+ case EAnimationTypeLinear: {
+ SLinearKeyframe k1 = get<SLinearKeyframe>(theIntToKeyframe(theStart));
+ SLinearKeyframe k2 = get<SLinearKeyframe>(theIntToKeyframe(theFinish));
+ return EvaluateLinearKeyframe(k1, k2, inSeconds);
+ }
+ case EAnimationTypeBezier: {
+ SBezierKeyframe k1 = get<SBezierKeyframe>(theIntToKeyframe(theStart));
+ SBezierKeyframe k2 = get<SBezierKeyframe>(theIntToKeyframe(theFinish));
+ return DoBezierEvaluation(inSeconds, k1, k2);
+ }
+ case EAnimationTypeEaseInOut: {
+ SEaseInEaseOutKeyframe k1 = get<SEaseInEaseOutKeyframe>(theIntToKeyframe(theStart));
+ SEaseInEaseOutKeyframe k2 = get<SEaseInEaseOutKeyframe>(theIntToKeyframe(theFinish));
+ return DoBezierEvaluation(
+ inSeconds, CreateBezierKeyframeFromEaseInEaseOutKeyframe(NULL, k1, &k2.m_KeyframeValue),
+ CreateBezierKeyframeFromEaseInEaseOutKeyframe(&k1.m_KeyframeValue, k2, NULL));
+ }
+ }
+}
+
+bool CSimpleAnimationCore::KeyframeValid(Qt3DSDMKeyframeHandle inKeyframe) const
+{
+ return HandleObjectValid<SKeyframe>(inKeyframe, m_Objects);
+}
+
+bool CSimpleAnimationCore::AnimationValid(Qt3DSDMAnimationHandle inAnimation) const
+{
+ return HandleObjectValid<SAnimationTrack>(inAnimation, m_Objects);
+}
+
+Qt3DSDMAnimationHandle CSimpleAnimationCore::CreateAnimationWithHandle(
+ int inHandle, Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex, EAnimationType inAnimationType,
+ bool inFirstKeyframeDynamic)
+{
+ if (HandleValid(inHandle))
+ throw HandleExists(L"");
+ m_Objects.insert(make_pair(inHandle, (THandleObjectPtr) new SAnimationTrack(
+ inHandle, inSlide, inInstance, inProperty, inIndex,
+ inAnimationType, inFirstKeyframeDynamic, true)));
+ return inHandle;
+}
+
+void CSimpleAnimationCore::AddAnimationToLookupCache(Qt3DSDMAnimationHandle inAnimation) const
+{
+ THandleObjectMap::const_iterator theAnim = m_Objects.find(inAnimation);
+ if (theAnim != m_Objects.end())
+ AddAnimationToLookupCache(static_pointer_cast<SAnimationTrack>(theAnim->second));
+}
+void CSimpleAnimationCore::RemoveAnimationFromLookupCache(Qt3DSDMAnimationHandle inAnimation) const
+{
+ THandleObjectMap::const_iterator theAnim = m_Objects.find(inAnimation);
+ if (theAnim != m_Objects.end())
+ RemoveAnimationFromLookupCache(static_pointer_cast<SAnimationTrack>(theAnim->second));
+}
+
+// Ensure there is only one of these in the multimap.
+void CSimpleAnimationCore::AddAnimationToLookupCache(
+ std::shared_ptr<SAnimationTrack> inAnimation) const
+{
+ Qt3DSDMSlideHandle theSlide = inAnimation->m_Slide;
+ Qt3DSDMInstanceHandle theInstance = inAnimation->m_Instance;
+ pair<TStateInstanceAnimationMap::iterator, TStateInstanceAnimationMap::iterator> theRange =
+ m_AnimationMatchesCache.equal_range(
+ make_pair(theSlide.GetHandleValue(), theInstance.GetHandleValue()));
+ for (TStateInstanceAnimationMap::iterator theIter = theRange.first; theIter != theRange.second;
+ ++theIter) {
+ if (theIter->second == inAnimation)
+ return;
+ }
+ m_AnimationMatchesCache.insert(
+ make_pair(make_pair(theSlide.GetHandleValue(), theInstance.GetHandleValue()), inAnimation));
+}
+
+// Remove this from the multimap
+void CSimpleAnimationCore::RemoveAnimationFromLookupCache(
+ std::shared_ptr<SAnimationTrack> inAnimation) const
+{
+ TStateInstanceAnimationMap &theMap(m_AnimationMatchesCache);
+ Qt3DSDMSlideHandle theSlide = inAnimation->m_Slide;
+ Qt3DSDMInstanceHandle theInstance = inAnimation->m_Instance;
+ pair<TStateInstanceAnimationMap::iterator, TStateInstanceAnimationMap::iterator> theRange =
+ theMap.equal_range(make_pair(theSlide.GetHandleValue(), theInstance.GetHandleValue()));
+ for (TStateInstanceAnimationMap::iterator theIter = theRange.first; theIter != theRange.second;
+ ++theIter) {
+ if (theIter->second == inAnimation) {
+ theMap.erase(theIter);
+ break;
+ }
+ }
+}
+
+//================================================================================
+// UICDMAnimation.h function implementations
+//================================================================================
+
+void CopyKeyframe(Qt3DSDMAnimationHandle inAnimation, Qt3DSDMKeyframeHandle inKeyframe,
+ const IAnimationCore &inSourceAnimationCore, IAnimationCore &inDestAnimationCore)
+{
+ TKeyframe theData = inSourceAnimationCore.GetKeyframeData(inKeyframe);
+ inDestAnimationCore.InsertKeyframe(inAnimation, theData);
+}
+
+void CopyKeyframes(const IAnimationCore &inSourceAnimationCore, IAnimationCore &inDestAnimationCore,
+ Qt3DSDMAnimationHandle inDestAnimation, const TKeyframeHandleList &inKeyframes)
+{
+ do_all(inKeyframes,
+ std::bind(CopyKeyframe, inDestAnimation, std::placeholders::_1,
+ std::cref(inSourceAnimationCore), std::ref(inDestAnimationCore)));
+}
+
+Qt3DSDMAnimationHandle CopyAnimation(TAnimationCorePtr inAnimationCore,
+ Qt3DSDMAnimationHandle inAnimation, Qt3DSDMSlideHandle inNewSlide,
+ Qt3DSDMInstanceHandle inNewInstance,
+ Qt3DSDMPropertyHandle inNewProperty, size_t inNewIndex)
+{
+ TKeyframeHandleList theKeyframes;
+ inAnimationCore->GetKeyframes(inAnimation, theKeyframes);
+ SAnimationInfo theInfo(inAnimationCore->GetAnimationInfo(inAnimation));
+ Qt3DSDMAnimationHandle theAnimation =
+ inAnimationCore->CreateAnimation(inNewSlide, inNewInstance, inNewProperty, inNewIndex,
+ theInfo.m_AnimationType, theInfo.m_DynamicFirstKeyframe);
+ CopyKeyframes(*inAnimationCore, *inAnimationCore, theAnimation, theKeyframes);
+ return theAnimation;
+}
+
+SBezierKeyframe GetBezierKeyframeData(Qt3DSDMKeyframeHandle inKeyframe,
+ const IAnimationCore &inAnimationCore)
+{
+ return get<SBezierKeyframe>(inAnimationCore.GetKeyframeData(inKeyframe));
+}
+
+SEaseInEaseOutKeyframe GetEaseInEaseOutKeyframeData(Qt3DSDMKeyframeHandle inKeyframe,
+ const IAnimationCore &inAnimationCore)
+{
+ return get<SEaseInEaseOutKeyframe>(inAnimationCore.GetKeyframeData(inKeyframe));
+}
+
+TKeyframeHandleList::iterator SafeIncrementIterator(TKeyframeHandleList::iterator inIter,
+ const TKeyframeHandleList::iterator &inEnd)
+{
+ return inIter == inEnd ? inEnd : inIter + 1;
+}
+
+void GetKeyframesAsBezier(Qt3DSDMAnimationHandle inAnimation, const IAnimationCore &inAnimationCore,
+ TBezierKeyframeList &outKeyframes)
+{
+ SAnimationInfo theInfo(inAnimationCore.GetAnimationInfo(inAnimation));
+ TKeyframeHandleList theKeyframes;
+ inAnimationCore.GetKeyframes(inAnimation, theKeyframes);
+ outKeyframes.resize(theKeyframes.size());
+ switch (theInfo.m_AnimationType) {
+ default:
+ throw invalid_argument("AnimationType");
+ case EAnimationTypeBezier:
+ transform(theKeyframes.begin(), theKeyframes.end(), outKeyframes.begin(),
+ std::bind(GetBezierKeyframeData, std::placeholders::_1,
+ std::cref(inAnimationCore)));
+ break;
+ case EAnimationTypeEaseInOut: {
+
+ TKeyframeHandleList::iterator theEndKeyframe = theKeyframes.end();
+
+ typedef std::function<SEaseInEaseOutKeyframe(Qt3DSDMKeyframeHandle)> TConvertFunc;
+ TConvertFunc theDataConverter(
+ std::bind(GetEaseInEaseOutKeyframeData, std::placeholders::_1,
+ std::cref(inAnimationCore)));
+
+ TKeyframeHandleList::iterator thePreviousKeyframe = theKeyframes.begin();
+
+ TKeyframeHandleList::iterator theCurrentKeyframe =
+ SafeIncrementIterator(thePreviousKeyframe, theEndKeyframe);
+
+ TKeyframeHandleList::iterator theNextKeyframe =
+ SafeIncrementIterator(theCurrentKeyframe, theEndKeyframe);
+
+ TBezierKeyframeList::iterator theResult(outKeyframes.begin());
+
+ if (thePreviousKeyframe != theEndKeyframe) {
+ float *theNextValuePtr = NULL;
+ float theNextValue;
+ if (theCurrentKeyframe != theEndKeyframe) {
+ theNextValue = theDataConverter(*theCurrentKeyframe).m_KeyframeValue;
+ theNextValuePtr = &theNextValue;
+ }
+ *theResult = CreateBezierKeyframeFromEaseInEaseOutKeyframe(
+ NULL, theDataConverter(*thePreviousKeyframe), theNextValuePtr);
+ theResult = theResult + 1;
+ }
+ for (; theCurrentKeyframe != theEndKeyframe;
+ ++thePreviousKeyframe,
+ theCurrentKeyframe = SafeIncrementIterator(theCurrentKeyframe, theEndKeyframe),
+ theNextKeyframe = SafeIncrementIterator(theNextKeyframe, theEndKeyframe),
+ ++theResult) {
+ float theLastValue(theDataConverter(*thePreviousKeyframe).m_KeyframeValue);
+ float *theNextValuePtr = NULL;
+ float theNextValue;
+ if (theNextKeyframe != theEndKeyframe) {
+ theNextValue = theDataConverter(*theNextKeyframe).m_KeyframeValue;
+ theNextValuePtr = &theNextValue;
+ }
+ *theResult = CreateBezierKeyframeFromEaseInEaseOutKeyframe(
+ &theLastValue, theDataConverter(*theCurrentKeyframe), theNextValuePtr);
+ }
+ } break;
+ }
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleAnimationCore.h b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleAnimationCore.h
new file mode 100644
index 00000000..cb4c4154
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleAnimationCore.h
@@ -0,0 +1,230 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef ANIMATIONCOREH
+#define ANIMATIONCOREH
+#include "Qt3DSDMAnimation.h"
+#include "HandleSystemBase.h"
+#include <unordered_map>
+
+namespace {
+struct pair_hash {
+ template <class T1, class T2>
+ std::size_t operator () (const std::pair<T1, T2> &p) const {
+ auto h1 = std::hash<T1>{}(p.first);
+ auto h2 = std::hash<T2>{}(p.second);
+
+ return h1 ^ h2;
+ }
+ };
+}
+
+namespace qt3dsdm {
+struct SAnimationTrack : public CHandleObject
+{
+ int m_Slide;
+ int m_Instance;
+ int m_Property;
+ EAnimationType m_AnimationType;
+ size_t m_Index;
+ TKeyframeHandleList m_Keyframes;
+ bool m_KeyframesDirty;
+ bool m_FirstKeyframeDynamic;
+ bool m_ArtistEdited;
+
+ SAnimationTrack()
+ : m_Slide(0)
+ , m_Instance(0)
+ , m_Property(0)
+ , m_AnimationType(EAnimationTypeLinear)
+ , m_Index(0)
+ , m_KeyframesDirty(false)
+ , m_FirstKeyframeDynamic(false)
+ , m_ArtistEdited(true)
+ {
+ }
+
+ SAnimationTrack(int inHandle, Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex, EAnimationType inAnimationType,
+ bool inFirstKeyframeDynamic, bool inArtistEdited)
+ : CHandleObject(inHandle)
+ , m_Slide(inSlide)
+ , m_Instance(inInstance)
+ , m_Property(inProperty)
+ , m_AnimationType(inAnimationType)
+ , m_Index(inIndex)
+ , m_KeyframesDirty(false)
+ , m_FirstKeyframeDynamic(inFirstKeyframeDynamic)
+ , m_ArtistEdited(inArtistEdited)
+ {
+ }
+
+ static const EHandleObjectType s_Type = CHandleObject::EHandleObjectTypeSAnimationTrack;
+ EHandleObjectType GetType() override { return s_Type; }
+};
+
+struct SKeyframe : public CHandleObject
+{
+ TKeyframe m_Keyframe;
+ int m_Animation;
+
+ SKeyframe(int inHandle, int inAnimation, const TKeyframe &inKeyframe)
+ : CHandleObject(inHandle)
+ , m_Keyframe(inKeyframe)
+ , m_Animation(inAnimation)
+ {
+ }
+
+ static const EHandleObjectType s_Type = CHandleObject::EHandleObjectTypeSKeyframe;
+ EHandleObjectType GetType() override { return s_Type; }
+};
+
+class CAnimationCoreProducer;
+
+class CSimpleAnimationCore : public CHandleBase, public IAnimationCore
+{
+ TStringTablePtr m_StringTable;
+ typedef std::unordered_multimap<std::pair<int, int>,
+ std::shared_ptr<SAnimationTrack>, pair_hash> TStateInstanceAnimationMap;
+ // state,instance pair map to animation handle to speed up querying if a particular
+ // property is animated.
+ mutable TStateInstanceAnimationMap m_AnimationMatchesCache;
+
+public: // Use
+ friend class CAnimationCoreProducer;
+ // We don't use the string table ptr we are constructed with
+ // but the testing system needs an unified interface to creating
+ // objects
+ CSimpleAnimationCore() {}
+ CSimpleAnimationCore(TStringTablePtr strTable)
+ : m_StringTable(strTable)
+ {
+ }
+ TStringTablePtr GetStringTablePtr() const { return m_StringTable; }
+
+ Qt3DSDMAnimationHandle CreateAnimation(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex,
+ EAnimationType inAnimationType,
+ bool inFirstKeyframeDynamic) override;
+ void DeleteAnimation(Qt3DSDMAnimationHandle inAnimation) override;
+ Qt3DSDMAnimationHandle GetAnimation(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex) const override;
+ SAnimationInfo GetAnimationInfo(Qt3DSDMAnimationHandle inAnimation) const override;
+ void GetAnimations(TAnimationHandleList &outAnimations) const override;
+ void GetAnimations(TAnimationInfoList &outAnimations, Qt3DSDMSlideHandle inMaster,
+ Qt3DSDMSlideHandle inSlide) const override;
+ void GetSpecificInstanceAnimations(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ TAnimationHandleList &outAnimations) override;
+
+ void SetFirstKeyframeDynamic(Qt3DSDMAnimationHandle inAnimation, bool inValue) override;
+
+ // keyframe manipulation
+ Qt3DSDMKeyframeHandle InsertKeyframe(Qt3DSDMAnimationHandle inAnimation,
+ const TKeyframe &inKeyframe) override;
+ void EraseKeyframe(Qt3DSDMKeyframeHandle inKeyframe) override;
+ void DeleteAllKeyframes(Qt3DSDMAnimationHandle inAnimation) override;
+ Qt3DSDMAnimationHandle GetAnimationForKeyframe(Qt3DSDMKeyframeHandle inKeyframe) const override;
+ TKeyframe GetKeyframeData(Qt3DSDMKeyframeHandle inKeyframe) const override;
+ void SetKeyframeData(Qt3DSDMKeyframeHandle inKeyframe, const TKeyframe &inData) override;
+ // Set the keyframe data, but don't set the artist edited flag. Used for undo/redo operations
+ // where the artist edited flag has handeled by a different transaction
+ void DoSetKeyframeData(Qt3DSDMKeyframeHandle inKeyframe, const TKeyframe &inData);
+ void GetKeyframes(Qt3DSDMAnimationHandle inAnimation, TKeyframeHandleList &outKeyframes) const override;
+ size_t GetKeyframeCount(Qt3DSDMAnimationHandle inAnimation) const override;
+ bool IsFirstKeyframe(Qt3DSDMKeyframeHandle inKeyframe) const override;
+ // Only implemented in the producer for now.
+ void OffsetAnimations(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance,
+ long inOffset) override;
+
+ void SetIsArtistEdited(Qt3DSDMAnimationHandle inAnimation, bool inEdited = true) override;
+ bool IsArtistEdited(Qt3DSDMAnimationHandle inAnimation) const override;
+
+ // Animation Evaluation.
+ float EvaluateAnimation(Qt3DSDMAnimationHandle inAnimation, float inSeconds) const override;
+
+ bool KeyframeValid(Qt3DSDMKeyframeHandle inKeyframe) const override;
+ bool AnimationValid(Qt3DSDMAnimationHandle inAnimation) const override;
+
+ // Only implemented at the producer level, not at the simple core level.
+ void CopyAnimations(Qt3DSDMSlideHandle /*inSourceSlide*/,
+ Qt3DSDMInstanceHandle /*inSourceInstance*/,
+ Qt3DSDMSlideHandle /*inDestSlide*/, Qt3DSDMInstanceHandle /*inDestInstance*/) override
+ {
+ throw AnimationNotFound(L"");
+ }
+
+ // Lookup cache management so we can find particular animations quickly.
+ void ClearAnimationMatchesLookupCache() const { m_AnimationMatchesCache.clear(); }
+ void AddAnimationToLookupCache(Qt3DSDMAnimationHandle inAnimation) const;
+ void RemoveAnimationFromLookupCache(Qt3DSDMAnimationHandle inAnimation) const;
+ void AddAnimationToLookupCache(std::shared_ptr<SAnimationTrack> inAnimation) const;
+ void RemoveAnimationFromLookupCache(std::shared_ptr<SAnimationTrack> inAnimation) const;
+
+ void EnsureAnimationCache() const;
+
+ Qt3DSDMAnimationHandle CreateAnimationWithHandle(int inHandle, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, size_t inIndex,
+ EAnimationType inAnimationType,
+ bool inFirstKeyframeDynamic);
+
+ static SAnimationTrack *GetAnimationNF(int inHandle, THandleObjectMap &inObjects)
+ {
+ return const_cast<SAnimationTrack *>(
+ GetAnimationNF(inHandle, static_cast<const THandleObjectMap &>(inObjects)));
+ }
+
+ static const SAnimationTrack *GetAnimationNF(int inHandle, const THandleObjectMap &inObjects)
+ {
+ const SAnimationTrack *theAnimation = GetHandleObject<SAnimationTrack>(inHandle, inObjects);
+ if (theAnimation)
+ return theAnimation;
+ throw AnimationNotFound(L"");
+ }
+
+ static SKeyframe *GetKeyframeNF(int inHandle, THandleObjectMap &inObjects)
+ {
+ return const_cast<SKeyframe *>(
+ GetKeyframeNF(inHandle, static_cast<const THandleObjectMap &>(inObjects)));
+ }
+
+ static const SKeyframe *GetKeyframeNF(int inHandle, const THandleObjectMap &inObjects)
+ {
+ const SKeyframe *theItem = GetHandleObject<SKeyframe>(inHandle, inObjects);
+ if (theItem)
+ return theItem;
+ throw AnimationKeyframeNotFound(L"");
+ }
+};
+
+typedef std::shared_ptr<CSimpleAnimationCore> TSimpleAnimationCorePtr;
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleDataCore.cpp b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleDataCore.cpp
new file mode 100644
index 00000000..d6a1470b
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleDataCore.cpp
@@ -0,0 +1,574 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "SimpleDataCore.h"
+
+namespace qt3dsdm {
+Qt3DSDMDebugLogFunction g_DataModelDebugLogger = NULL;
+// Instances
+Qt3DSDMInstanceHandle CSimpleDataCore::CreateInstance(Qt3DSDMInstanceHandle hdl)
+{
+ int nextId = hdl;
+ if (hdl.Valid() == false)
+ nextId = GetNextId();
+
+ return CreateInstanceWithHandle(nextId);
+}
+
+inline void RemoveParentFromClass(int inParent, int inChild, THandleObjectMap &inMap)
+{
+ TDataModelInstancePtr theInstance = CSimpleDataCore::GetInstanceNF(inChild, inMap);
+ theInstance->m_Parents.erase(theInstance->m_Parents.find(inParent));
+ // Cascade the delete operation
+}
+
+void CSimpleDataCore::DeleteInstance(Qt3DSDMInstanceHandle inHandle)
+{
+ // Ensure it exists in the first place.
+ CSimpleDataCore::GetInstanceNF(inHandle, m_Objects); // Check for instance existance
+ CSimpleDataCore::EraseHandle(inHandle, m_Objects);
+ TIntList properties;
+ TIntList instances;
+ do_all(m_Objects, std::bind(FindRelatedItemsForDelete, inHandle.GetHandleValue(),
+ std::ref(properties), std::ref(instances), std::placeholders::_1));
+ do_all(instances, std::bind(RemoveParentFromClass, inHandle.GetHandleValue(),
+ std::placeholders::_1, std::ref(m_Objects)));
+ do_all(properties, std::bind(EraseHandle, std::placeholders::_1, std::ref(m_Objects)));
+}
+
+void CSimpleDataCore::GetInstances(TInstanceHandleList &outInstances) const
+{
+ // reserve the vector to m_Objects.size() to prevent vector reallocation
+ // m_Objects.size() is the upper bound of the no of instances
+ // the exact no of instances = m_Objects.size() - the no of properties as added by
+ // CClientDataModelBridge::InitializeDataCore (as of now, we have 31 properties)
+ outInstances.reserve(m_Objects.size());
+ do_all(m_Objects, std::bind(MaybeAddObject<CDataModelInstance, Qt3DSDMInstanceHandle>,
+ std::placeholders::_1, std::ref(outInstances)));
+}
+
+// Get instances that are derived from a specific parent
+void CSimpleDataCore::GetInstancesDerivedFrom(TInstanceHandleList &outInstances,
+ Qt3DSDMInstanceHandle inParentHandle) const
+{
+ do_all(m_Objects, std::bind(&CSimpleDataCore::AddInstanceIfDerivedFrom, this,
+ std::placeholders::_1,
+ std::ref(outInstances), inParentHandle));
+}
+
+// add instance that is derived from a specific parent
+void CSimpleDataCore::AddInstanceIfDerivedFrom(const std::pair<int, THandleObjectPtr> &inItem,
+ TInstanceHandleList &outInstances,
+ Qt3DSDMInstanceHandle inParentHandle) const
+{
+ if (inItem.second->GetType() == CHandleObject::EHandleObjectTypeCDataModelInstance) {
+ TDataModelInstancePtr theInstance = static_pointer_cast<CDataModelInstance>(inItem.second);
+ if (IsInstanceOrDerivedFromHelper(theInstance, inParentHandle))
+ outInstances.push_back(inItem.first);
+ }
+}
+
+// Derivation
+void CSimpleDataCore::DeriveInstance(Qt3DSDMInstanceHandle inInstance, Qt3DSDMInstanceHandle inParent)
+{
+ if (g_DataModelDebugLogger)
+ g_DataModelDebugLogger("CSimpleDataCore::DeriveInstance Enter");
+ TDataModelInstancePtr theInstance = CSimpleDataCore::GetInstanceNF(inInstance, m_Objects);
+ if (theInstance->m_Parents.find(inParent) == theInstance->m_Parents.end()) {
+ std::shared_ptr<CDataModelInstance> theParent(GetInstanceNF(inParent, m_Objects));
+ theInstance->m_Parents.insert(make_pair(inParent, theParent));
+ }
+ if (g_DataModelDebugLogger)
+ g_DataModelDebugLogger("CSimpleDataCore::DeriveInstance Leave");
+}
+
+void CSimpleDataCore::GetInstanceParents(Qt3DSDMInstanceHandle inHandle,
+ TInstanceHandleList &outParents) const
+{
+ const TDataModelInstancePtr theInstance = GetInstanceNF(inHandle, m_Objects);
+ for (CDataModelInstance::TInstancePairList::const_iterator theParent =
+ theInstance->m_Parents.begin();
+ theParent != theInstance->m_Parents.end(); ++theParent)
+ outParents.push_back(theParent->first);
+}
+
+inline bool ComparePropertyNames(const TCharStr &inName, int inPropHandle,
+ const THandleObjectMap &inObjects)
+{
+ if (CSimpleDataCore::GetPropertyDefinitionNF(inPropHandle, inObjects)->m_Definition.m_Name
+ == inName)
+ return true;
+ return false;
+}
+
+inline const wchar_t *SafeStrPtr(const wchar_t *inData)
+{
+ return inData == NULL ? L"" : inData;
+}
+
+// Properties
+Qt3DSDMPropertyHandle CSimpleDataCore::AddProperty(Qt3DSDMInstanceHandle inInstance, TCharPtr inName,
+ DataModelDataType::Value inPropType)
+{
+ QT3DSDM_LOG_FUNCTION("CSimpleDataCore::AddProperty");
+ QT3DSDM_DEBUG_LOG(m_StringTable->GetNarrowStr(inName));
+ TDataModelInstancePtr theInstance = GetInstanceNF(inInstance, m_Objects);
+ TCharStr theName(inName);
+ if (find_if<TIntList::iterator>(
+ theInstance->m_Properties,
+ std::bind(ComparePropertyNames, std::ref(theName),
+ std::placeholders::_1, std::ref(m_Objects)))
+ != theInstance->m_Properties.end()) {
+ QT3DSDM_DEBUG_LOG("Property Exists!!");
+ throw PropertyExists(L"");
+ }
+
+ int nextId = GetNextId();
+ return AddPropertyWithHandle(nextId, inInstance, inName, inPropType);
+}
+
+void CSimpleDataCore::GetInstanceProperties(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleList &outProperties) const
+{
+ transformv_all(GetInstanceNF(inInstance, m_Objects)->m_Properties, outProperties);
+}
+
+const Qt3DSDMPropertyDefinition &CSimpleDataCore::GetProperty(Qt3DSDMPropertyHandle inProperty) const
+{
+ const CDataModelPropertyDefinitionObject *theProp =
+ GetPropertyDefinitionNF(inProperty, m_Objects);
+ return theProp->m_Definition;
+}
+
+void CSimpleDataCore::RemoveProperty(Qt3DSDMPropertyHandle inProperty)
+{
+ CDataModelPropertyDefinitionObject *theProp =
+ CSimpleDataCore::GetPropertyDefinitionNF(inProperty, m_Objects);
+ TDataModelInstancePtr theInstance =
+ CSimpleDataCore::GetInstanceNF(theProp->m_Definition.m_Instance, m_Objects);
+ erase_if(theInstance->m_Properties,
+ std::bind(equal_to<int>(), inProperty.GetHandleValue(), std::placeholders::_1));
+ CSimpleDataCore::EraseHandle(inProperty, m_Objects);
+}
+
+inline bool PropertyMatches(int inProperty, Qt3DSDMPropertyHandle inTarget)
+{
+ return inProperty == inTarget.GetHandleValue();
+}
+
+inline bool GetInstanceValue(Qt3DSDMInstanceHandle inInstanceHandle,
+ Qt3DSDMPropertyHandle inPropertyHandle, CSimpleDataCore &inDataCore,
+ SValue &outValue)
+{
+ const TDataModelInstancePtr theInstance =
+ CSimpleDataCore::GetInstanceNF(inInstanceHandle, inDataCore.m_Objects);
+
+ TPropertyPairHash::const_iterator theInstanceProp =
+ theInstance->m_PropertyValues.find(inPropertyHandle.GetHandleValue());
+ if (theInstanceProp != theInstance->m_PropertyValues.end()) {
+ outValue = theInstanceProp->second.second.GetValue();
+ return true;
+ }
+ return false;
+}
+
+inline void CopyInstanceProperty(Qt3DSDMPropertyHandle inSrcPropertyHandle,
+ Qt3DSDMInstanceHandle inSrcInstanceHandle,
+ Qt3DSDMInstanceHandle inInstanceHandle, CSimpleDataCore &inDataCore)
+{
+ // create the property definition that matches the source
+ const Qt3DSDMPropertyDefinition &theProperty = inDataCore.GetProperty(inSrcPropertyHandle);
+ Qt3DSDMPropertyHandle theNewProperty =
+ inDataCore.AddProperty(inInstanceHandle, theProperty.m_Name.wide_str(), theProperty.m_Type);
+ // copy the value if one exists on the src.
+ SValue theValue;
+ if (GetInstanceValue(inSrcInstanceHandle, inSrcPropertyHandle, inDataCore, theValue))
+ inDataCore.SetInstancePropertyValue(inInstanceHandle, theNewProperty, theValue);
+}
+
+// logic : if destination property is one gained through derivation in inSrcInstanceHandle, copy the
+// value over.
+inline void CopyAggregatedPropertyValues(Qt3DSDMPropertyHandle inDestPropertyHandle,
+ Qt3DSDMInstanceHandle inSrcInstanceHandle,
+ Qt3DSDMInstanceHandle inInstanceHandle,
+ const TPropertyHandleList &inSrcNonAggregateList,
+ CSimpleDataCore &inDataCore)
+{
+ if (find_if(inSrcNonAggregateList.begin(), inSrcNonAggregateList.end(),
+ bind(PropertyMatches, inDestPropertyHandle, std::placeholders::_1))
+ == inSrcNonAggregateList.end()
+ && inDataCore.HasAggregateInstanceProperty(inSrcInstanceHandle, inDestPropertyHandle)) {
+ SValue theValue;
+ if (GetInstanceValue(inSrcInstanceHandle, inDestPropertyHandle, inDataCore, theValue))
+ inDataCore.SetInstancePropertyValue(inInstanceHandle, inDestPropertyHandle, theValue);
+ }
+}
+
+void CSimpleDataCore::CopyInstanceProperties(Qt3DSDMInstanceHandle inSrcInstance,
+ Qt3DSDMInstanceHandle inDestInstance)
+{
+ TPropertyHandleList theList;
+ GetInstanceProperties(inSrcInstance, theList);
+ do_all(theList, bind(CopyInstanceProperty, std::placeholders::_1,
+ inSrcInstance, inDestInstance, ref(*this)));
+
+ TPropertyHandleList theDestList;
+ GetAggregateInstanceProperties(inDestInstance, theDestList);
+ do_all(theDestList, std::bind(CopyAggregatedPropertyValues, std::placeholders::_1,
+ inSrcInstance, inDestInstance,
+ theList, std::ref(*this)));
+}
+
+void CSimpleDataCore::RemoveCachedValues(Qt3DSDMInstanceHandle inInstance)
+{
+ const TDataModelInstancePtr theInstance = CSimpleDataCore::GetInstanceNF(inInstance, m_Objects);
+ theInstance->RemoveCachedValues();
+}
+
+void GetAggregateProperties(const TDataModelInstancePtr inInstance, TIntList &inVisited,
+ TPropertyHandleList &outProperties)
+{
+ if (find(inVisited.begin(), inVisited.end(), inInstance->m_Handle) == inVisited.end()) {
+ inVisited.push_back(inInstance->m_Handle);
+ size_t theSize = outProperties.size();
+ outProperties.resize(theSize + inInstance->m_Properties.size());
+ transform(inInstance->m_Properties.begin(), inInstance->m_Properties.end(),
+ outProperties.begin() + theSize, identity<int>);
+ for (CDataModelInstance::TInstancePairList::const_iterator theParent =
+ inInstance->m_Parents.begin();
+ theParent != inInstance->m_Parents.end(); ++theParent)
+ GetAggregateProperties(theParent->second, inVisited, outProperties);
+ }
+}
+
+template <typename TPredicate>
+inline std::tuple<bool, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle>
+RecurseFindProperty(const TDataModelInstancePtr inInstance, TPredicate inPredicate)
+{
+ TIntList::const_iterator theFind = eastl::find_if(inInstance->m_Properties.begin(),
+ inInstance->m_Properties.end(), inPredicate);
+ if (theFind != inInstance->m_Properties.end())
+ return make_tuple(true, inInstance->m_Handle, *theFind);
+
+ for (CDataModelInstance::TInstancePairList::const_iterator theParent =
+ inInstance->m_Parents.begin();
+ theParent != inInstance->m_Parents.end(); ++theParent) {
+ std::tuple<bool, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle> theValue =
+ RecurseFindProperty(theParent->second, inPredicate);
+ if (get<0>(theValue))
+ return theValue;
+ }
+ return make_tuple(false, 0, 0);
+}
+
+inline bool PropertyNameMatches(int inProperty, const THandleObjectMap &inObjects,
+ const TCharStr &inStr)
+{
+ const CDataModelPropertyDefinitionObject *theProp =
+ CSimpleDataCore::GetPropertyDefinitionNF(inProperty, inObjects);
+ return (theProp->m_Definition.m_Name == inStr);
+}
+
+Qt3DSDMPropertyHandle
+CSimpleDataCore::GetAggregateInstancePropertyByName(Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inStr) const
+{
+ const TDataModelInstancePtr theInstance = GetInstanceNF(inInstance, m_Objects);
+ return get<2>(
+ RecurseFindProperty(theInstance, std::bind(PropertyNameMatches,
+ std::placeholders::_1, std::ref(m_Objects),
+ std::ref(inStr))));
+}
+
+// A simplified RecurseFindProperty function
+bool RecurseFindPropertyMatches(const TDataModelInstancePtr inInstance,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ TIntList::const_iterator theFind =
+ find(inInstance->m_Properties.begin(), inInstance->m_Properties.end(),
+ inProperty.GetHandleValue());
+ if (theFind != inInstance->m_Properties.end())
+ return true;
+
+ for (CDataModelInstance::TInstancePairList::const_iterator theParent =
+ inInstance->m_Parents.begin();
+ theParent != inInstance->m_Parents.end(); ++theParent) {
+ if (RecurseFindPropertyMatches(theParent->second, inProperty))
+ return true;
+ }
+ return false;
+}
+
+bool CSimpleDataCore::HasAggregateInstanceProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ const TDataModelInstancePtr theInstance = GetInstanceNF(inInstance, m_Objects);
+ if (theInstance->m_PropertyValues.find(inProperty.GetHandleValue())
+ != theInstance->m_PropertyValues.end())
+ return true;
+
+ return RecurseFindPropertyMatches(theInstance, inProperty);
+}
+
+void CSimpleDataCore::GetAggregateInstanceProperties(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleList &outProperties) const
+{
+ TIntList inVisited;
+ const TDataModelInstancePtr theInstance = GetInstanceNF(inInstance, m_Objects);
+ GetAggregateProperties(theInstance, inVisited, outProperties);
+}
+
+void CSimpleDataCore::CheckValue(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) const
+{
+ CheckPropertyExistence(GetInstanceNF(inInstance, m_Objects), inProperty, m_Objects);
+ const CDataModelPropertyDefinitionObject *theDefinition =
+ CSimpleDataCore::GetPropertyDefinitionNF(inProperty, m_Objects);
+ CheckValueType(theDefinition->m_Definition.m_Type, inValue);
+}
+
+bool CSimpleDataCore::GetInstancePropertyValueHelper(const TDataModelInstancePtr inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ TPropertyPairHash::const_iterator theInstanceProp =
+ inInstance->m_PropertyValues.find(inProperty);
+ if (theInstanceProp != inInstance->m_PropertyValues.end()) {
+ outValue = theInstanceProp->second.second.GetValue();
+ return true;
+ } else {
+ // Is the property valid?
+ const CDataModelPropertyDefinitionObject *theProp =
+ GetPropertyDefinitionNF(inProperty, m_Objects);
+ int thePropInstance = theProp->m_Definition.m_Instance;
+ if (thePropInstance != inInstance->m_Handle) {
+ for (CDataModelInstance::TInstancePairList::const_iterator theParent =
+ inInstance->m_Parents.begin();
+ theParent != inInstance->m_Parents.end(); ++theParent) {
+ if (IsInstanceOrDerivedFromHelper(theParent->second, thePropInstance)
+ && GetInstancePropertyValueHelper(theParent->second, inProperty, outValue)) {
+ // Quietly propagate to this instance so next time we won't go through this
+ // large property lookup chain.
+ inInstance->m_PropertyValues.insert(std::make_pair(
+ inProperty,
+ TPropertyValuePair(
+ PropertyValueFlags(PropertyValueFlags::SetViaAutoPropagate),
+ SInternValue::ISwearThisHasAlreadyBeenInternalized(outValue))));
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
+
+bool CSimpleDataCore::GetInstancePropertyValue(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ if (IsInstance(inHandle) == false || IsProperty(inProperty) == false) {
+ Q_ASSERT(0);
+ return false;
+ }
+ const TDataModelInstancePtr theInstance = GetInstanceNF(inHandle, m_Objects);
+ return GetInstancePropertyValueHelper(theInstance, inProperty, outValue);
+}
+
+void CSimpleDataCore::SetInstancePropertyValue(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ if (IsInstance(inHandle) == false || IsProperty(inProperty) == false) {
+ Q_ASSERT(0);
+ return;
+ }
+ CheckValue(inHandle, inProperty, inValue);
+ UncheckedSetSpecificInstancePropertyValue(inHandle, inProperty, inValue, PropertyValueFlags());
+}
+
+void CSimpleDataCore::GetSpecificInstancePropertyValues(Qt3DSDMInstanceHandle inHandle,
+ TPropertyHandleValuePairList &outValues)
+{
+ if (IsInstance(inHandle) == false)
+ return;
+
+ TDataModelInstancePtr theInstance = GetInstanceNF(inHandle, m_Objects);
+ for (TPropertyPairHash::const_iterator theIter = theInstance->m_PropertyValues.begin(),
+ theEnd = theInstance->m_PropertyValues.end();
+ theIter != theEnd; ++theIter) {
+ const pair<int, TPropertyValuePair> &thePair(*theIter);
+ if (thePair.second.first.IsSetViaAutoPropagation() == false) {
+ Qt3DSDMPropertyHandle thePropertyHandle(thePair.first);
+ SValue theValue(thePair.second.second.GetValue());
+ outValues.push_back(make_pair(thePair.first, theValue));
+ }
+ }
+}
+
+bool CSimpleDataCore::IsInstance(int inHandle) const
+{
+ return HandleObjectValid<CDataModelInstance>(inHandle, m_Objects);
+}
+bool CSimpleDataCore::IsProperty(int inHandle) const
+{
+ return HandleObjectValid<CDataModelPropertyDefinitionObject>(inHandle, m_Objects);
+}
+
+Qt3DSDMInstanceHandle CSimpleDataCore::CreateInstanceWithHandle(int inHandle)
+{
+ if (g_DataModelDebugLogger)
+ g_DataModelDebugLogger("CSimpleDataCore::CreateInstance Enter");
+ if (HandleValid(inHandle)) {
+ if (g_DataModelDebugLogger) {
+ g_DataModelDebugLogger("CSimpleDataCore::CreateInstance Handle Exists!!");
+ char buf[32];
+ sprintf(buf, "%d", inHandle);
+ g_DataModelDebugLogger(buf);
+ }
+ throw HandleExists(L"");
+ }
+
+ THandleObjectPtr theHandleObjectPtr(new CDataModelInstance(inHandle));
+ const pair<int, THandleObjectPtr> thePair(std::make_pair(inHandle, theHandleObjectPtr));
+ m_Objects.insert(thePair);
+
+ if (g_DataModelDebugLogger)
+ g_DataModelDebugLogger("CSimpleDataCore::CreateInstance Leave");
+
+ return inHandle;
+}
+
+Qt3DSDMPropertyHandle CSimpleDataCore::AddPropertyWithHandle(int inHandle,
+ Qt3DSDMInstanceHandle inInstance,
+ TCharPtr inName,
+ DataModelDataType::Value inPropType)
+{
+ QT3DSDM_DEBUG_LOG("CSimpleDataCore::AddPropertyWithHandle Enter");
+ QT3DSDM_DEBUG_LOG(m_StringTable->GetNarrowStr(inName));
+ if (HandleValid(inHandle)) {
+ if (g_DataModelDebugLogger) {
+ g_DataModelDebugLogger("CSimpleDataCore::AddPropertyWithHandle Handle Exists!!");
+ char buf[32];
+ sprintf(buf, "%d", inHandle);
+ g_DataModelDebugLogger(buf);
+ }
+
+ throw HandleExists(L"");
+ }
+
+ TDataModelInstancePtr theInstance = GetInstanceNF(inInstance, m_Objects);
+
+ Qt3DSDMPropertyDefinition theDefinition(inInstance, SafeStrPtr(inName), inPropType);
+ THandleObjectPtr theHandleObjectPtr(
+ new CDataModelPropertyDefinitionObject(inHandle, theDefinition));
+ const pair<int, THandleObjectPtr> thePair(std::make_pair(inHandle, theHandleObjectPtr));
+ m_Objects.insert(thePair);
+ theInstance->m_Properties.push_back(inHandle);
+ QT3DSDM_DEBUG_LOG("CSimpleDataCore::AddPropertyWithHandle Leave");
+ return inHandle;
+}
+
+bool CSimpleDataCore::GetSpecificInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ const TDataModelInstancePtr theInstance = GetInstanceNF(inInstance, m_Objects);
+ TPropertyPairHash::const_iterator theInstanceProp =
+ theInstance->m_PropertyValues.find(inProperty);
+ if (theInstanceProp != theInstance->m_PropertyValues.end()) {
+ outValue = theInstanceProp->second.second.GetValue();
+ return true;
+ }
+ return false;
+}
+
+void CSimpleDataCore::GetSpecificInstancePropertyValues(Qt3DSDMInstanceHandle inInstance,
+ TPropertyPairHash &outValues) const
+{
+ const TDataModelInstancePtr theInstance = GetInstanceNF(inInstance, m_Objects);
+ outValues = theInstance->m_PropertyValues;
+}
+
+void CSimpleDataCore::UncheckedSetSpecificInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue,
+ PropertyValueFlags inIsUserSet)
+{
+ TDataModelInstancePtr theInstance = GetInstanceNF(inInstance, m_Objects);
+ TPropertyValuePair theValuePair(inIsUserSet, SInternValue(inValue, GetStringTable()));
+
+ std::pair<TPropertyPairHash::iterator, bool> theInsert = theInstance->m_PropertyValues.insert(
+ std::make_pair(inProperty.GetHandleValue(), theValuePair));
+ if (theInsert.second == false)
+ theInsert.first->second = theValuePair;
+}
+
+bool CSimpleDataCore::CheckParentPropertyExistenceWithFail(const TDataModelInstancePtr inInstance,
+ int inProperty,
+ const THandleObjectMap &inObjects)
+{
+ if (find(inInstance->m_Properties.begin(), inInstance->m_Properties.end(), inProperty)
+ != inInstance->m_Properties.end())
+ return true;
+ for (CDataModelInstance::TInstancePairList::const_iterator theParent =
+ inInstance->m_Parents.begin();
+ theParent != inInstance->m_Parents.end(); ++theParent) {
+ if (CheckParentPropertyExistenceWithFail(theParent->second, inProperty, inObjects))
+ return true;
+ }
+ return false;
+}
+
+// safety check to see if property exists
+void CSimpleDataCore::CheckPropertyExistence(const TDataModelInstancePtr inInstance, int inProperty,
+ const THandleObjectMap &inObjects)
+{
+ if (!CheckParentPropertyExistenceWithFail(inInstance, inProperty, inObjects))
+ throw PropertyNotFound(L"");
+}
+
+bool CSimpleDataCore::IsInstanceOrDerivedFromHelper(const TDataModelInstancePtr inInstance,
+ Qt3DSDMInstanceHandle inParent) const
+{
+ if (inInstance->m_Handle == inParent) // Am I this object?
+ return true;
+ return inInstance->IsDerivedFrom(inParent);
+}
+
+bool CSimpleDataCore::IsInstanceOrDerivedFrom(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent) const
+{
+ if (IsInstance(inInstance) == false || IsInstance(inParent) == false)
+ return false;
+ if (inInstance == inParent) // Am I this object?
+ return true;
+ const TDataModelInstancePtr theInstance = GetInstanceNF(inInstance, m_Objects);
+ return IsInstanceOrDerivedFromHelper(theInstance, inParent);
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleDataCore.h b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleDataCore.h
new file mode 100644
index 00000000..2664dab4
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleDataCore.h
@@ -0,0 +1,373 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef DATACOREH
+#define DATACOREH
+
+#include "Qt3DSDMDataTypes.h"
+#include "Qt3DSDMSignals.h"
+#include "HandleSystemBase.h"
+#include "Qt3DSDMPropertyDefinition.h"
+#include "Qt3DSDMDataCore.h"
+#include "Qt3DSDMStringTable.h"
+#include <unordered_set>
+#include "Qt3DSDMValue.h"
+
+namespace qt3dsdm {
+
+struct PropertyValueFlags
+{
+ enum Enum {
+ // Property values that are set via event propagation should
+ // not be serialized to a file. The auto-propagation step
+ // is meant to make looking up property values quicker because
+ // the the derivation chain doesn't need to be followed to get
+ // the latest default value.
+ SetViaAutoPropagate = 1,
+ };
+
+ int m_Flags;
+
+ PropertyValueFlags()
+ : m_Flags(0)
+ {
+ }
+ explicit PropertyValueFlags(int inFlags)
+ : m_Flags(inFlags)
+ {
+ }
+
+ bool IsSetViaAutoPropagation() const { return (m_Flags & SetViaAutoPropagate) > 0; }
+};
+
+// Pair of property value flags and property value. The property value flags allow
+// us to track metadata that is
+typedef std::pair<PropertyValueFlags, SInternValue> TPropertyValuePair;
+typedef std::unordered_map<int, TPropertyValuePair> TPropertyPairHash;
+// Property pairs are referred to by property handle.
+typedef std::pair<int, TPropertyValuePair> TPropertyPair;
+typedef std::vector<TPropertyPair> TPropertyPairList;
+
+class CDataModelPropertyDefinitionObject : public CHandleObject
+{
+public:
+ Qt3DSDMPropertyDefinition m_Definition;
+
+ CDataModelPropertyDefinitionObject(int inHandle, const Qt3DSDMPropertyDefinition &inDefinition)
+ : CHandleObject(inHandle)
+ , m_Definition(inDefinition)
+ {
+ }
+ CDataModelPropertyDefinitionObject() {}
+
+ static const EHandleObjectType s_Type =
+ CHandleObject::EHandleObjectTypeCDataModelPropertyDefinitionObject;
+ EHandleObjectType GetType() override { return s_Type; }
+};
+
+typedef std::unordered_map<int, SInternValue> TIntStringVariantList;
+
+class CDataModelInstance : public CHandleObject
+{
+public:
+ typedef std::pair<int, std::shared_ptr<CDataModelInstance>> TInstancePair;
+ typedef std::unordered_map<int, std::shared_ptr<CDataModelInstance>> TInstancePairList;
+ typedef std::unordered_map<int, bool> TInstanceParentMap;
+
+ TInstancePairList m_Parents;
+ mutable TInstanceParentMap m_CachedParents;
+ // Properties specific to this class
+ TIntList m_Properties;
+ TPropertyPairHash m_PropertyValues;
+
+ CDataModelInstance() {}
+ CDataModelInstance(int inHandle)
+ : CHandleObject(inHandle)
+ {
+ }
+
+ void ToPropertyPairList(TPropertyPairList &outList) const
+ {
+ for (TPropertyPairHash::const_iterator iter = m_PropertyValues.begin(),
+ end = m_PropertyValues.end();
+ iter != end; ++iter)
+ outList.push_back(*iter);
+ }
+
+ void FromPropertyPairList(const TPropertyPairList &inList)
+ {
+ m_PropertyValues.clear();
+ for (TPropertyPairList::const_iterator iter = inList.begin(), end = inList.end();
+ iter != end; ++iter)
+ m_PropertyValues.insert(*iter);
+ }
+
+ void ClearParentCache() const { m_CachedParents.clear(); }
+
+ bool IsDerivedFrom(Qt3DSDMInstanceHandle inParent) const
+ {
+ std::pair<TInstanceParentMap::iterator, bool> theQueryResult =
+ m_CachedParents.insert(std::make_pair(inParent.GetHandleValue(), false));
+ // If the insert failed, returned what the hashtable already had in it
+ if (theQueryResult.second == false)
+ return theQueryResult.first->second;
+
+ // Else find a valid answer
+ if (m_Parents.find(inParent.GetHandleValue()) != m_Parents.end()) {
+ theQueryResult.first->second = true;
+ } else {
+ for (TInstancePairList::const_iterator iter = m_Parents.begin(), end = m_Parents.end();
+ iter != end; ++iter) {
+ if (iter->second->IsDerivedFrom(inParent)) {
+ theQueryResult.first->second = true;
+ break;
+ }
+ }
+ }
+
+ // Note that we inserted false to begin with. This means that
+ // we can return the insert result here safely as if it wasn't
+ // supposed to be false, we would have set it above.
+ return theQueryResult.first->second;
+ }
+
+ void RemoveCachedValues()
+ {
+ vector<int> theCachedProperties;
+
+ for (TPropertyPairHash::iterator theProperty = m_PropertyValues.begin(),
+ end = m_PropertyValues.end();
+ theProperty != end; ++theProperty) {
+ if (theProperty->second.first.IsSetViaAutoPropagation())
+ theCachedProperties.push_back(theProperty->first);
+ }
+
+ for (size_t idx = 0, end = theCachedProperties.size(); idx < end; ++idx)
+ m_PropertyValues.erase(theCachedProperties[idx]);
+ }
+
+ // CHandleObject
+ static const EHandleObjectType s_Type = CHandleObject::EHandleObjectTypeCDataModelInstance;
+ EHandleObjectType GetType() override { return s_Type; }
+};
+
+typedef std::shared_ptr<CDataModelInstance> TDataModelInstancePtr;
+
+class CSimpleDataCore : public CHandleBase, public IDataCore
+{
+ mutable TStringTablePtr m_StringTable;
+
+public:
+ CSimpleDataCore(TStringTablePtr strTable)
+ : m_StringTable(strTable)
+ {
+ }
+ CSimpleDataCore(const CSimpleDataCore &inOther)
+ : CHandleBase(inOther)
+ , m_StringTable(inOther.m_StringTable)
+ {
+ }
+
+ CSimpleDataCore &operator=(const CSimpleDataCore &inOther)
+ {
+ CHandleBase::operator=(inOther);
+ return *this;
+ }
+
+ IStringTable &GetStringTable() const override { return *m_StringTable.get(); }
+ TStringTablePtr GetStringTablePtr() const override { return m_StringTable; }
+
+ // IHandleBase
+ bool HandleValid(int inHandle) const override
+ {
+ return m_Objects.find(inHandle) != m_Objects.end();
+ }
+
+ // IInstancePropertyCore
+ Qt3DSDMPropertyHandle GetAggregateInstancePropertyByName(Qt3DSDMInstanceHandle inInstance,
+ const TCharStr &inStr) const override;
+ void GetAggregateInstanceProperties(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleList &outProperties) const override;
+ void GetSpecificInstancePropertyValues(Qt3DSDMInstanceHandle inHandle,
+ TPropertyHandleValuePairList &outValues) override;
+ bool HasAggregateInstanceProperty(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const override;
+ void CheckValue(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) const override;
+ bool GetInstancePropertyValue(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const override;
+ void SetInstancePropertyValue(Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override;
+
+ // IDataCore
+ //===============================================================
+ Qt3DSDMInstanceHandle CreateInstance(Qt3DSDMInstanceHandle hdl = Qt3DSDMInstanceHandle()) override;
+ void DeleteInstance(Qt3DSDMInstanceHandle inHandle) override;
+ void GetInstances(TInstanceHandleList &outInstances) const override;
+ void GetInstancesDerivedFrom(TInstanceHandleList &outInstances,
+ Qt3DSDMInstanceHandle inParentHandle) const override;
+
+ void DeriveInstance(Qt3DSDMInstanceHandle inInstance, Qt3DSDMInstanceHandle inParent) override;
+ void GetInstanceParents(Qt3DSDMInstanceHandle inHandle,
+ TInstanceHandleList &outParents) const override;
+ // Returns true if inParent == inInstance || inInstance is derived from inParent somehow.
+ // Recursive.
+ bool IsInstanceOrDerivedFrom(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMInstanceHandle inParent) const override;
+
+ Qt3DSDMPropertyHandle AddProperty(Qt3DSDMInstanceHandle inClass, TCharPtr inName,
+ DataModelDataType::Value inPropType) override;
+ const Qt3DSDMPropertyDefinition &GetProperty(Qt3DSDMPropertyHandle inProperty) const override;
+ void GetInstanceProperties(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleList &outProperties) const override;
+ void RemoveProperty(Qt3DSDMPropertyHandle inProperty) override;
+ void CopyInstanceProperties(Qt3DSDMInstanceHandle inSrcInstance,
+ Qt3DSDMInstanceHandle inDestInstance) override;
+ void RemoveCachedValues(Qt3DSDMInstanceHandle inInstance) override;
+
+ bool IsInstance(int inHandle) const override;
+ bool IsProperty(int inHandle) const override;
+ //===============================================================
+
+ bool GetSpecificInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const;
+ void GetSpecificInstancePropertyValues(Qt3DSDMInstanceHandle inInstance,
+ TPropertyPairHash &outValues) const;
+
+ static CDataModelPropertyDefinitionObject *GetPropertyDefinitionNF(int inHandle,
+ THandleObjectMap &inObjects)
+ {
+ return const_cast<CDataModelPropertyDefinitionObject *>(
+ GetPropertyDefinitionNF(inHandle, static_cast<const THandleObjectMap &>(inObjects)));
+ }
+
+ static const CDataModelPropertyDefinitionObject *
+ GetPropertyDefinitionNF(int inHandle, const THandleObjectMap &inObjects)
+ {
+ const CDataModelPropertyDefinitionObject *theClass =
+ GetHandleObject<CDataModelPropertyDefinitionObject>(inHandle, inObjects);
+ if (theClass)
+ return theClass;
+ throw PropertyNotFound(L"");
+ }
+
+ static TDataModelInstancePtr GetInstance(int inHandle, const THandleObjectMap &inObjects)
+ {
+ THandleObjectMap::const_iterator theFind(inObjects.find(inHandle));
+ // dynamic cast isn't allowed in runtime code as the runtime doesn't enable rtti.
+ if (theFind != inObjects.end())
+ return std::static_pointer_cast<CDataModelInstance>(theFind->second);
+ return TDataModelInstancePtr();
+ }
+
+ static TDataModelInstancePtr GetInstanceNF(int inHandle, const THandleObjectMap &inObjects)
+ {
+ TDataModelInstancePtr retval = GetInstance(inHandle, inObjects);
+ if (retval)
+ return retval;
+ throw InstanceNotFound(L"");
+ }
+
+ static inline bool InstancePairMatches(int inHandle,
+ const CDataModelInstance::TInstancePair &inInstancePair)
+ {
+ return inHandle == inInstancePair.first;
+ }
+
+ // if inInstance doesn't exists in inObjects, it will push back NULL instead of throwing
+ // exception
+ static inline void UncheckAddInstancePair(CDataModelInstance::TInstancePairList &outInstances,
+ Qt3DSDMInstanceHandle inInstance,
+ THandleObjectMap &inObjects)
+ {
+ outInstances.insert(
+ std::make_pair(inInstance, CSimpleDataCore::GetInstance(inInstance, inObjects)));
+ }
+
+ static inline bool InstancePropertyMatches(int inProp, const TPropertyPair &inPropPair)
+ {
+ return inProp == inPropPair.first;
+ }
+
+ static bool CheckParentPropertyExistenceWithFail(const TDataModelInstancePtr inInstance,
+ int inProperty,
+ const THandleObjectMap &inObjects);
+
+ static void CheckPropertyExistence(const TDataModelInstancePtr inInstance, int inProperty,
+ const THandleObjectMap &inObjects);
+
+ static inline void FindRelatedItemsForDelete(int inInstance, TIntList &outProperties,
+ TIntList &outChildInstances,
+ const std::pair<int, THandleObjectPtr> &inPair)
+ {
+
+ using namespace std;
+ if (inPair.second->GetType() == CHandleObject::EHandleObjectTypeCDataModelInstance) {
+ TDataModelInstancePtr theInstance =
+ static_pointer_cast<CDataModelInstance>(inPair.second);
+ // No longer a parent class.
+ if (find_if(theInstance->m_Parents.begin(), theInstance->m_Parents.end(),
+ std::bind(InstancePairMatches, inInstance, std::placeholders::_1))
+ != theInstance->m_Parents.end())
+ outChildInstances.push_back(inPair.first);
+ } else if (inPair.second->GetType()
+ == CHandleObject::EHandleObjectTypeCDataModelPropertyDefinitionObject) {
+ const CDataModelPropertyDefinitionObject *theProperty =
+ static_cast<const CDataModelPropertyDefinitionObject *>(inPair.second.get());
+ if (theProperty->m_Definition.m_Instance.GetHandleValue() == inInstance)
+ outProperties.push_back(inPair.first);
+ }
+ }
+
+protected:
+ bool IsInstanceOrDerivedFromHelper(const TDataModelInstancePtr inInstance,
+ Qt3DSDMInstanceHandle inParent) const;
+ void AddInstanceIfDerivedFrom(const std::pair<int, THandleObjectPtr> &inItem,
+ TInstanceHandleList &outInstances,
+ Qt3DSDMInstanceHandle inParentHandle) const;
+
+ bool GetInstancePropertyValueHelper(const TDataModelInstancePtr inInstance,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const;
+
+ // Create an instance *at* this specific handle position
+ // This is used for special cases of serialization
+ Qt3DSDMInstanceHandle CreateInstanceWithHandle(int inHandle);
+ Qt3DSDMPropertyHandle AddPropertyWithHandle(int inHandle, Qt3DSDMInstanceHandle inClass,
+ TCharPtr inName, DataModelDataType::Value inPropType);
+
+ void UncheckedSetSpecificInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue,
+ PropertyValueFlags inIsUserSet);
+};
+
+typedef std::shared_ptr<CSimpleDataCore> TSimpleDataCorePtr;
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideCore.cpp b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideCore.cpp
new file mode 100644
index 00000000..87eadb9f
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideCore.cpp
@@ -0,0 +1,420 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "SimpleSlideCore.h"
+
+using namespace std;
+#ifdef _WIN32
+#pragma warning(disable : 4503)
+#endif
+
+namespace qt3dsdm {
+
+Qt3DSDMSlideHandle CSimpleSlideCore::CreateSlide(Qt3DSDMInstanceHandle inInstance)
+{
+ int nextId = GetNextId();
+ return CreateSlideWithHandle(nextId, inInstance);
+}
+
+Qt3DSDMInstanceHandle CSimpleSlideCore::GetSlideInstance(Qt3DSDMSlideHandle inSlide) const
+{
+ return GetSlideNF(inSlide, m_Objects)->m_Instance;
+}
+
+inline bool SlideInstanceMatches(const THandleObjectPair &inPair, int inInstance)
+{
+ if (inPair.second->GetType() == CHandleObject::EHandleObjectTypeSSlide
+ && static_cast<const SSlide *>(inPair.second.get())->m_Instance == inInstance)
+ return true;
+ return false;
+}
+
+Qt3DSDMSlideHandle CSimpleSlideCore::GetSlideByInstance(Qt3DSDMInstanceHandle inInstance) const
+{
+ THandleObjectMap::const_iterator theSlide =
+ find_if(m_Objects.begin(), m_Objects.end(),
+ std::bind(SlideInstanceMatches,
+ std::placeholders::_1, inInstance.GetHandleValue()));
+ if (theSlide != m_Objects.end())
+ return theSlide->first;
+ throw SlideNotFound(L"");
+}
+
+void RecurseDeleteSlide(Qt3DSDMSlideHandle inSlide, THandleObjectMap &inObjects,
+ TInstanceHandleList &outInstances)
+{
+ SSlide *theSlide = CSimpleSlideCore::GetSlideNF(inSlide, inObjects);
+ do_all(theSlide->m_Children,
+ std::bind(RecurseDeleteSlide, std::placeholders::_1,
+ std::ref(inObjects), std::ref(outInstances)));
+ outInstances.push_back(theSlide->m_Instance);
+ CHandleBase::EraseHandle(inSlide, inObjects);
+}
+
+void CSimpleSlideCore::DeleteSlide(Qt3DSDMSlideHandle inSlide, TInstanceHandleList &outInstances)
+{
+ SSlide *theSlide = GetSlideNF(inSlide, m_Objects);
+ if (theSlide->m_Parent) {
+ SSlide *theParent = GetSlideNF(theSlide->m_Parent, m_Objects);
+ erase_if(theParent->m_Children, std::bind(equal_to<int>(), theSlide->m_Handle,
+ std::placeholders::_1));
+ }
+ RecurseDeleteSlide(inSlide, m_Objects, outInstances);
+}
+
+template <typename TDataType, typename TVectorType>
+inline void MaybeAddObject(const THandleObjectPair &inPair, vector<TVectorType> &outVectorItems)
+{
+ if (inPair.second->GetType() == TDataType::s_Type)
+ outVectorItems.push_back(inPair.first);
+}
+
+void CSimpleSlideCore::GetSlides(TSlideHandleList &outSlides) const
+{
+ do_all(m_Objects,
+ std::bind(MaybeAddObject<SSlide, Qt3DSDMSlideHandle>,
+ std::placeholders::_1, std::ref(outSlides)));
+}
+
+float CSimpleSlideCore::GetSlideTime(Qt3DSDMSlideHandle inSlide) const
+{
+ return GetSlideNF(inSlide, m_Objects)->m_Time;
+}
+
+void CSimpleSlideCore::SetSlideTime(Qt3DSDMSlideHandle inSlide, float inNewTime)
+{
+ GetSlideNF(inSlide, m_Objects)->m_Time = inNewTime;
+}
+
+void CSimpleSlideCore::DeriveSlide(Qt3DSDMSlideHandle inSlide, Qt3DSDMSlideHandle inParent,
+ int inIndex)
+{
+ int oldParent = GetSlideNF(inSlide, m_Objects)->m_Parent;
+ if (oldParent)
+ erase_if(GetSlideNF(oldParent, m_Objects)->m_Children,
+ std::bind(equal_to<int>(), inSlide, std::placeholders::_1));
+ if (inParent.Valid()) {
+ SSlide *theParent = GetSlideNF(inParent, m_Objects);
+ if (exists(theParent->m_Children, std::bind(equal_to<int>(), inSlide,
+ std::placeholders::_1)))
+ throw SlideDerivationError(L"Already derived");
+ if (inIndex < 0 || inIndex >= (int)theParent->m_Children.size())
+ inIndex = (int)theParent->m_Children.size();
+ theParent->m_Children.insert(theParent->m_Children.begin() + inIndex,
+ inSlide.GetHandleValue());
+ }
+ GetSlideNF(inSlide, m_Objects)->m_Parent = inParent;
+}
+
+Qt3DSDMSlideHandle CSimpleSlideCore::GetParentSlide(Qt3DSDMSlideHandle inSlide) const
+{
+ return GetSlideNF(inSlide, m_Objects)->m_Parent;
+}
+
+void CSimpleSlideCore::GetChildSlides(Qt3DSDMSlideHandle inSlide,
+ TSlideHandleList &outChildren) const
+{
+ transformv_all(GetSlideNF(inSlide, m_Objects)->m_Children, outChildren);
+}
+
+int CSimpleSlideCore::GetChildIndex(Qt3DSDMSlideHandle inParent, Qt3DSDMSlideHandle inChild) const
+{
+ const SSlide *theSlide = GetSlideNF(inParent, m_Objects);
+ size_t dist = distance(theSlide->m_Children.begin(),
+ find_if<TIntList::const_iterator>(
+ theSlide->m_Children, std::bind(equal_to<int>(), inChild,
+ std::placeholders::_1)));
+ if (dist == theSlide->m_Children.size())
+ throw SlideChildNotFoundError(L"");
+ return (int)dist;
+}
+
+bool CSimpleSlideCore::GetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ const SSlide *theSlide = GetSlideNF(inSlide, m_Objects);
+ SInternValue *theValue = theSlide->GetInstancePropertyValue(inHandle, inProperty);
+ if (theValue) {
+ outValue = theValue->GetValue();
+ return true;
+ }
+ if (theSlide->m_Parent)
+ return GetInstancePropertyValue(theSlide->m_Parent, inHandle, inProperty, outValue);
+ return false;
+}
+
+std::pair<SSlide *, SInternValue *> CSimpleSlideCore::ResolveSetInstancePropertyValue(
+ Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle, Qt3DSDMPropertyHandle inProperty)
+{
+ SSlide *theSlide = CSimpleSlideCore::GetSlideNF(inSlide, m_Objects);
+ SInternValue *theValue = theSlide->GetInstancePropertyValue(inHandle, inProperty);
+ // If we have the value already *or* or parent is not a valid slide, then return now
+ if (theValue || theSlide->m_Parent == 0)
+ return std::make_pair(theSlide, theValue);
+ // Else give our parent a chance.
+ return ResolveSetInstancePropertyValue(theSlide->m_Parent, inHandle, inProperty);
+}
+
+void CSimpleSlideCore::SetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ std::pair<SSlide *, SInternValue *> theTarget(
+ ResolveSetInstancePropertyValue(inSlide, inHandle, inProperty));
+ SInternValue theValue(inValue, GetStringTable());
+ if (theTarget.second)
+ *theTarget.second = theValue;
+ else
+ theTarget.first->SetInstancePropertyValue(inHandle, inProperty, theValue);
+}
+
+void CSimpleSlideCore::ForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ CSimpleSlideCore::ForceSetPropertyValue(GetStringTable(), m_Objects, inSlide, inHandle,
+ inProperty, inValue);
+}
+
+void CSimpleSlideCore::forceSetInstancePropertyValueOnAllSlides(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ for (auto &it : m_Objects) {
+ if (it.second->GetType() == SSlide::s_Type) {
+ Qt3DSDMSlideHandle slide(it.first);
+ ForceSetInstancePropertyValue(slide, inInstance, inProperty, inValue);
+ }
+ }
+}
+
+bool CSimpleSlideCore::GetSpecificInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ const SSlide *theSlide = GetSlideNF(inSlide, m_Objects);
+ SInternValue *theValue = theSlide->GetInstancePropertyValue(inInstance, inProperty);
+ if (theValue) {
+ outValue = theValue->GetValue();
+ return true;
+ }
+ return false;
+}
+
+void CSimpleSlideCore::GetSpecificInstancePropertyValues(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleValuePairList &outValues)
+{
+ const SSlide *theSlide = GetSlideNF(inSlide, m_Objects);
+ theSlide->GetSpecificInstancePropertyValues(inInstance, outValues);
+}
+
+void CSimpleSlideCore::GetSlidePropertyEntries(Qt3DSDMSlideHandle inSlide,
+ TSlideEntryList &outEntries) const
+{
+ const SSlide *theSlide = GetSlideNF(inSlide, m_Objects);
+ theSlide->ToSlideEntryList(outEntries);
+}
+
+bool CSimpleSlideCore::ContainsProperty(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ const SSlide *theSlide = GetSlideNF(inSlide, m_Objects);
+ return theSlide->GetInstancePropertyValue(inHandle, inProperty) != NULL;
+}
+
+Qt3DSDMSlideHandle CSimpleSlideCore::CreateSlideWithHandle(int inHandle,
+ Qt3DSDMInstanceHandle inInstance)
+{
+ if (HandleValid(inHandle))
+ throw HandleExists(L"");
+ m_Objects.insert(make_pair(inHandle, (THandleObjectPtr) new SSlide(inHandle, inInstance)));
+ return inHandle;
+}
+
+void CSimpleSlideCore::GetSlideProperties(Qt3DSDMSlideHandle inSlide,
+ TSlideEntryList &outProperties) const
+{
+ outProperties.clear();
+ GetSlidePropertyEntries(inSlide, outProperties);
+}
+
+bool CSimpleSlideCore::IsSlide(Qt3DSDMSlideHandle inSlide) const
+{
+ return m_Objects.find(inSlide) != m_Objects.end();
+}
+
+void CSimpleSlideCore::ForceSetPropertyValue(IStringTable &inStringTable,
+ THandleObjectMap &inObjects, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue)
+{
+ CSimpleSlideCore::GetSlideNF(inSlide, inObjects)
+ ->SetInstancePropertyValue(inHandle, inProperty, SInternValue(inValue, inStringTable));
+}
+
+void CSimpleSlideCore::PushPropertyValueToChildren(Qt3DSDMSlideHandle inParent,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ ForceSetPropertyValue(GetStringTable(), m_Objects, inParent, inHandle, inProperty, inValue);
+ do_all(CSimpleSlideCore::GetSlideNF(inParent, m_Objects)->m_Children,
+ std::bind(ForceSetPropertyValue, std::ref(GetStringTable()), std::ref(m_Objects),
+ std::placeholders::_1, inHandle, inProperty, inValue));
+}
+
+inline void AddIntersectingEntry(TSlideEntryList &outEntries, Qt3DSDMInstanceHandle inst,
+ Qt3DSDMPropertyHandle prop, const SInternValue &inValue)
+{
+ outEntries.push_back(TSlideEntry(inst, prop, inValue.GetValue()));
+}
+
+void CSimpleSlideCore::GetIntersectingProperties(Qt3DSDMSlideHandle inSlide1,
+ Qt3DSDMSlideHandle inSlide2,
+ TSlideEntryList &outEntries) const
+{
+ const SSlide *theSlide1 = GetSlideNF(inSlide1, m_Objects);
+ const SSlide *theSlide2 = GetSlideNF(inSlide2, m_Objects);
+ theSlide1->IntersectProperties(
+ *theSlide2, std::bind(AddIntersectingEntry, std::ref(outEntries),
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3));
+}
+
+void CSimpleSlideCore::PushIntersectingProperties(Qt3DSDMSlideHandle inSlide1,
+ Qt3DSDMSlideHandle inSlide2,
+ Qt3DSDMSlideHandle inDestination)
+{
+ const SSlide *theSlide1 = GetSlideNF(inSlide1, m_Objects);
+ const SSlide *theSlide2 = GetSlideNF(inSlide2, m_Objects);
+ SSlide *theDest = GetSlideNF(inDestination, m_Objects);
+ theSlide1->IntersectProperties(
+ *theSlide2, std::bind(&SSlide::SetInstancePropertyValue, theDest,
+ std::placeholders::_1, std::placeholders::_2,
+ std::placeholders::_3));
+}
+
+void CSimpleSlideCore::ClearPropertyValue(THandleObjectMap &inObjects, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ CSimpleSlideCore::GetSlideNF(inSlide, inObjects)
+ ->RemoveInstancePropertyValue(inInstance, inProperty);
+}
+
+inline void DoForEachSlide(std::pair<int, THandleObjectPtr> inObject,
+ std::function<void(SSlide *)> inFunction)
+{
+ inFunction((SSlide *)inObject.second.get());
+}
+
+void CSimpleSlideCore::ForEachSlide(std::function<void(SSlide *)> inFunction)
+{
+ do_all(m_Objects, std::bind(DoForEachSlide, std::placeholders::_1, inFunction));
+}
+
+void LookupSlideAndDoSomething(Qt3DSDMSlideHandle inSlide, THandleObjectMap &inObjects,
+ std::function<void(SSlide *)> inFunction)
+{
+ inFunction(CSimpleSlideCore::GetSlideNF(inSlide, inObjects));
+}
+
+void CSimpleSlideCore::ForEachChild(Qt3DSDMSlideHandle inParent,
+ std::function<void(SSlide *)> inFunction)
+{
+ do_all(GetSlideNF(inParent, m_Objects)->m_Children,
+ std::bind(LookupSlideAndDoSomething, std::placeholders::_1, m_Objects, inFunction));
+}
+
+bool InstanceMatches(Qt3DSDMInstanceHandle inTarget, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle)
+{
+ return inTarget == inHandle;
+}
+
+bool PropertyMatches(Qt3DSDMPropertyHandle inTarget, Qt3DSDMInstanceHandle,
+ Qt3DSDMPropertyHandle inProp)
+{
+ return inTarget == inProp;
+}
+
+bool InstancePropertyMatchesVector(const TInstanceHandleList &inInstances,
+ const TPropertyHandleList &inProperties,
+ Qt3DSDMInstanceHandle slideInst, Qt3DSDMPropertyHandle slideProp)
+{
+ return std::find(inInstances.begin(), inInstances.end(), slideInst) != inInstances.end()
+ && std::find(inProperties.begin(), inProperties.end(), slideProp) != inProperties.end();
+}
+
+bool InstancePropertyMatches(const Qt3DSDMInstanceHandle inInstance,
+ const Qt3DSDMPropertyHandle inProperty, Qt3DSDMInstanceHandle slideInst,
+ Qt3DSDMPropertyHandle slideProp)
+{
+ return inInstance == slideInst && inProperty == slideProp;
+}
+
+void CSimpleSlideCore::DeleteAllInstanceEntries(Qt3DSDMInstanceHandle inHandle)
+{
+ std::function<bool(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)> predicate(
+ std::bind(InstanceMatches, inHandle, std::placeholders::_1, std::placeholders::_2));
+ ForEachSlide(std::bind(&SSlide::ClearPropertiesIf, std::placeholders::_1, predicate));
+}
+
+void CSimpleSlideCore::DeleteAllPropertyEntries(Qt3DSDMPropertyHandle inHandle)
+{
+ std::function<bool(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)> predicate(
+ std::bind(PropertyMatches, inHandle, std::placeholders::_1, std::placeholders::_2));
+ ForEachSlide(std::bind(&SSlide::ClearPropertiesIf, std::placeholders::_1, predicate));
+}
+
+void CSimpleSlideCore::DeleteAllInstancePropertyEntries(const TInstanceHandleList &inInstances,
+ const TPropertyHandleList &inProperties)
+{
+ std::function<bool(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)> predicate(
+ std::bind(InstancePropertyMatchesVector, inInstances, inProperties,
+ std::placeholders::_1, std::placeholders::_2));
+ ForEachSlide(std::bind(&SSlide::ClearPropertiesIf, std::placeholders::_1, predicate));
+}
+
+void CSimpleSlideCore::ClearChildrenPropertyValues(Qt3DSDMSlideHandle inParent,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ std::function<bool(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)> predicate(
+ std::bind(InstancePropertyMatches, inHandle, inProperty,
+ std::placeholders::_1, std::placeholders::_2));
+ ForEachChild(inParent, std::bind(&SSlide::ClearPropertiesIf, std::placeholders::_1, predicate));
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideCore.h b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideCore.h
new file mode 100644
index 00000000..278ef777
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideCore.h
@@ -0,0 +1,408 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef SLIDECOREH
+#define SLIDECOREH
+#include "HandleSystemBase.h"
+#include "Qt3DSDMSlideCore.h"
+#include "SimpleDataCore.h"
+#include "Qt3DSDMStringTable.h"
+#include <unordered_map>
+#include <QtCore/qdebug.h>
+
+namespace std {
+
+template<> struct hash<std::pair<int,int> >
+{
+ typedef std::pair<int,int> argument_type;
+ typedef std::size_t result_type;
+ result_type operator()(std::pair<int,int> const& pa) const
+ {
+ result_type const h1 ( std::hash<int>{}(pa.first) );
+ result_type const h2 ( std::hash<int>{}(pa.second) );
+ return h1 ^ (h2 << 1);
+ }
+};
+
+}
+
+namespace qt3dsdm {
+
+// The first revision of this
+typedef std::pair<int, int> TSlideInstancePropertyPair;
+typedef std::unordered_map<TSlideInstancePropertyPair, SInternValue > TSlideEntryHash;
+
+using std::make_pair;
+
+// Abstract access to these objects a little bit because in the future we are going to
+// reorganize the data such that getting a defined set of properties for a single instance is
+// very fast.
+struct SSlide : public CHandleObject
+{
+ SSlide()
+ : m_Instance(0)
+ , m_Parent(0)
+ {
+ }
+ SSlide(int inHandle, int inInstance)
+ : CHandleObject(inHandle)
+ , m_Instance(inInstance)
+ , m_Parent(0)
+ , m_Time(0)
+ {
+ }
+ int m_Instance;
+ int m_Parent;
+ TIntList m_Children;
+ TSlideEntryHash m_Properties;
+ float m_Time;
+
+ // Returns true if it was inserted, false if the property value was set.
+ bool SetInstancePropertyValue(Qt3DSDMInstanceHandle inInstance, Qt3DSDMPropertyHandle inProperty,
+ const SInternValue &inValue)
+ {
+ TSlideInstancePropertyPair theKey(inInstance.GetHandleValue(), inProperty.GetHandleValue());
+ std::pair<TSlideEntryHash::iterator, bool> insertResult =
+ m_Properties.insert(std::make_pair(theKey, inValue));
+
+ if (insertResult.second == false)
+ insertResult.first->second = inValue;
+ return insertResult.second;
+ }
+ // Returns true if the property was deleted
+ bool RemoveInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty)
+ {
+ TSlideInstancePropertyPair theKey(inInstance.GetHandleValue(), inProperty.GetHandleValue());
+ TSlideEntryHash::iterator find(m_Properties.find(theKey));
+ if (find != m_Properties.end()) {
+ m_Properties.erase(find);
+ return true;
+ }
+ return false;
+ }
+ // Return a pointer to out property value. This allows quicker checks for isset and such
+ SInternValue *GetInstancePropertyValue(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty) const
+ {
+ TSlideInstancePropertyPair theKey(inInstance.GetHandleValue(), inProperty.GetHandleValue());
+ TSlideEntryHash::const_iterator find(m_Properties.find(theKey));
+ if (find != m_Properties.end())
+ return const_cast<SInternValue *>(&find->second);
+ return NULL;
+ }
+
+ void GetSpecificInstancePropertyValues(Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleValuePairList &outProperties) const
+ {
+ for (TSlideEntryHash::const_iterator theIter = m_Properties.begin(),
+ theEnd = m_Properties.end();
+ theIter != theEnd; ++theIter) {
+ if (theIter->first.first == inInstance)
+ outProperties.push_back(
+ make_pair(theIter->first.second, theIter->second.GetValue()));
+ }
+ }
+
+ bool HasProperty(std::function<bool(const TSlideEntry &)> inPredicate) const
+ {
+ for (TSlideEntryHash::const_iterator theIter = m_Properties.begin(),
+ theEnd = m_Properties.end();
+ theIter != theEnd; ++theIter) {
+ if (inPredicate(TSlideEntry(theIter->first.first, theIter->first.second,
+ theIter->second.GetValue())))
+ return true;
+ }
+ return false;
+ }
+
+ void DeleteSlideEntries(TSlideEntryList &outList,
+ std::function<bool(const TSlideEntry &)> inPredicate)
+ {
+ for (TSlideEntryHash::const_iterator theIter = m_Properties.begin(),
+ theEnd = m_Properties.end();
+ theIter != theEnd; ++theIter) {
+ if (inPredicate(TSlideEntry(theIter->first.first, theIter->first.second,
+ theIter->second.GetValue()))) {
+ outList.push_back(TSlideEntry(theIter->first.first, theIter->first.second,
+ theIter->second.GetValue()));
+ }
+ }
+ DeleteEntriesFromList(outList);
+ }
+
+ void DeleteEntriesFromList(const TSlideEntryList &inList)
+ {
+ for (size_t idx = 0, end = inList.size(); idx < end; ++idx)
+ m_Properties.erase(
+ std::pair<int, int>(std::get<0>(inList[idx]), std::get<1>(inList[idx])));
+ }
+
+ void InsertSlideEntries(const TSlideEntryList &inList, IStringTable &inStringTable)
+ {
+ for (size_t idx = 0, end = inList.size(); idx < end; ++idx) {
+ TSlideInstancePropertyPair theKey(std::get<0>(inList[idx]), std::get<1>(inList[idx]));
+
+ if (m_Properties.find(theKey) != m_Properties.end()) {
+ // The only known case when this condition happens is when DnD a sub-presentation to
+ // the scene as a texture rect then undoing.
+ qWarning() << __FUNCTION__ << ": Instance/Property Pair" << theKey
+ << "already exists, erasing it.";
+ m_Properties.erase(theKey);
+ }
+
+ m_Properties.insert(
+ std::make_pair(theKey, SInternValue(std::get<2>(inList[idx]), inStringTable)));
+ }
+ }
+
+ // Convert to the older, straight forward representation of the
+ // data in this slide.
+ void ToSlideEntryList(TSlideEntryList &outList) const
+ {
+ for (TSlideEntryHash::const_iterator theIter = m_Properties.begin(),
+ theEnd = m_Properties.end();
+ theIter != theEnd; ++theIter)
+ outList.push_back(TSlideEntry(theIter->first.first, theIter->first.second,
+ theIter->second.GetValue()));
+ }
+
+ void FromSlideEntryList(const TSlideEntryList &inList, IStringTable &inStringTable)
+ {
+ using namespace std;
+ m_Properties.clear();
+ for (TSlideEntryList::const_iterator theIter = inList.begin(), theEnd = inList.end();
+ theIter != theEnd; ++theIter)
+ SetInstancePropertyValue(get<0>(*theIter), get<1>(*theIter),
+ SInternValue(get<2>(*theIter), inStringTable));
+ }
+
+ // result is the instance, property, myvalue, othervalue
+ void IntersectProperties(const SSlide &inOther,
+ std::function<void(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ SInternValue, SInternValue)>
+ inResult) const
+ {
+ for (TSlideEntryHash::const_iterator theIter = m_Properties.begin(),
+ theEnd = m_Properties.end();
+ theIter != theEnd; ++theIter) {
+ SInternValue *otherValue =
+ inOther.GetInstancePropertyValue(theIter->first.first, theIter->first.second);
+ if (otherValue)
+ inResult(theIter->first.first, theIter->first.second, theIter->second, *otherValue);
+ }
+ }
+
+ // Call the predicate, if it returns true set the property for all properties.
+ // This allows a third party to manipulate the property values during the process.
+ void SetPropertyValuesIf(
+ IStringTable &inStringTable,
+ std::function<bool(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle, SValue &)> inPredIntercept)
+ {
+ for (TSlideEntryHash::iterator theIter = m_Properties.begin(), theEnd = m_Properties.end();
+ theIter != theEnd; ++theIter) {
+ SValue theValue(theIter->second.GetValue());
+ if (inPredIntercept(theIter->first.first, theIter->first.second, theValue))
+ theIter->second = SInternValue(theValue, inStringTable);
+ }
+ }
+
+ void
+ ClearPropertiesIf(std::function<bool(Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle)> inPredicate)
+ {
+ bool foundOne;
+ do {
+ foundOne = false;
+ for (TSlideEntryHash::iterator theIter = m_Properties.begin(),
+ theEnd = m_Properties.end();
+ theIter != theEnd; ++theIter) {
+ if (inPredicate(theIter->first.first, theIter->first.second)) {
+ foundOne = true;
+ m_Properties.erase(theIter->first);
+ break;
+ }
+ }
+
+ } while (foundOne);
+ }
+
+ static const EHandleObjectType s_Type = CHandleObject::EHandleObjectTypeSSlide;
+ EHandleObjectType GetType() override { return s_Type; }
+};
+
+class CSimpleSlideCore : public CHandleBase, public ISlideCore
+{
+ TStringTablePtr m_StringTable;
+
+public: // use
+ CSimpleSlideCore(TStringTablePtr inStrTable)
+ : m_StringTable(inStrTable)
+ {
+ }
+
+ TStringTablePtr GetStringTablePtr() const override { return m_StringTable; }
+ IStringTable &GetStringTable() const override { return *m_StringTable.get(); }
+ Qt3DSDMSlideHandle CreateSlide(Qt3DSDMInstanceHandle inInstance) override;
+ Qt3DSDMInstanceHandle GetSlideInstance(Qt3DSDMSlideHandle inSlide) const override;
+ Qt3DSDMSlideHandle GetSlideByInstance(Qt3DSDMInstanceHandle inInstance) const override;
+ void DeleteSlide(Qt3DSDMSlideHandle inSlide, TInstanceHandleList &outInstances) override;
+ void GetSlides(TSlideHandleList &outSlides) const override;
+
+ float GetSlideTime(Qt3DSDMSlideHandle inSlide) const override;
+ void SetSlideTime(Qt3DSDMSlideHandle inSlide, float inNewTime) override;
+
+ void DeriveSlide(Qt3DSDMSlideHandle inSlide, Qt3DSDMSlideHandle inParent, int inIndex = -1) override;
+ Qt3DSDMSlideHandle GetParentSlide(Qt3DSDMSlideHandle inSlide) const override;
+ void GetChildSlides(Qt3DSDMSlideHandle inSlide, TSlideHandleList &outChildren) const override;
+ int GetChildIndex(Qt3DSDMSlideHandle inParent, Qt3DSDMSlideHandle inChild) const override;
+
+ bool GetInstancePropertyValue(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const override;
+ void SetInstancePropertyValue(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override;
+
+ // Return the slide this property should be set on, along with the previous value if any.
+ // Set the value on the slide.
+ std::pair<SSlide *, SInternValue *>
+ ResolveSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty);
+ void ForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override;
+ void forceSetInstancePropertyValueOnAllSlides(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) override;
+
+ bool GetSpecificInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const override;
+
+ void GetSpecificInstancePropertyValues(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleValuePairList &outValues) override;
+
+ void GetSlidePropertyEntries(Qt3DSDMSlideHandle inSlide, TSlideEntryList &outEntries) const override;
+
+ void PushPropertyValueToChildren(Qt3DSDMSlideHandle inParent, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override;
+
+ void GetIntersectingProperties(Qt3DSDMSlideHandle inSlide1, Qt3DSDMSlideHandle inSlide2,
+ TSlideEntryList &outEntries) const override;
+ void PushIntersectingProperties(Qt3DSDMSlideHandle inSlide1, Qt3DSDMSlideHandle inSlide2,
+ Qt3DSDMSlideHandle inDestination) override;
+
+ void ClearChildrenPropertyValues(Qt3DSDMSlideHandle inParent, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty) override;
+
+ void DeleteAllInstanceEntries(Qt3DSDMInstanceHandle inHandle) override;
+ void DeleteAllPropertyEntries(Qt3DSDMPropertyHandle inHandle) override;
+ void DeleteAllInstancePropertyEntries(const TInstanceHandleList &inInstances,
+ const TPropertyHandleList &inProperties) override;
+
+ bool ContainsProperty(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty) const override;
+ bool HandleValid(int inHandle) const override { return CHandleBase::HandleValid(inHandle); }
+
+ Qt3DSDMSlideHandle CreateSlideWithHandle(int inHandle, Qt3DSDMInstanceHandle inInstance);
+ void GetSlideProperties(Qt3DSDMSlideHandle inSlide, TSlideEntryList &outProperties) const;
+
+ bool IsSlide(Qt3DSDMSlideHandle inSlide) const override;
+
+ // Possibly alter every slide in the database
+ void ForEachSlide(std::function<void(SSlide *)> inFunction);
+ void ForEachChild(Qt3DSDMSlideHandle inSlide, std::function<void(SSlide *)> inFunction);
+
+ // Only implemented at the producer level, not at this lower level.
+ void CopyProperties(Qt3DSDMSlideHandle /*inSourceSlide*/,
+ Qt3DSDMInstanceHandle /*inSourceInstance*/,
+ Qt3DSDMSlideHandle /*inDestSlide*/, Qt3DSDMInstanceHandle /*inDestInstance*/) override
+ {
+ throw SlideNotFound(L"");
+ }
+
+ static SSlide *GetSlideNF(int inHandle, THandleObjectMap &inObjects)
+ {
+ return const_cast<SSlide *>(
+ GetSlideNF(inHandle, static_cast<const THandleObjectMap &>(inObjects)));
+ }
+
+ static const SSlide *GetSlideNF(int inHandle, const THandleObjectMap &inObjects)
+ {
+ const SSlide *theSlide = GetHandleObject<SSlide>(inHandle, inObjects);
+ if (theSlide)
+ return theSlide;
+ throw SlideNotFound(L"");
+ }
+
+ static inline bool PropertyFound(int inInstance, int inProperty, const TSlideEntry &inEntry)
+ {
+ if (inInstance == std::get<0>(inEntry) && inProperty == std::get<1>(inEntry))
+ return true;
+ return false;
+ }
+
+ static void ForceSetPropertyValue(IStringTable &inStringTable, THandleObjectMap &inObjects,
+ Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue);
+
+ static void ClearPropertyValue(THandleObjectMap &inObjects, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty);
+
+ static inline bool SlideEntryInstanceMatches(const TSlideEntry &inEntry,
+ Qt3DSDMInstanceHandle inHandle)
+ {
+ using namespace std;
+ if (inHandle.GetHandleValue() == get<0>(inEntry))
+ return true;
+ return false;
+ }
+
+ static inline bool SlideEntryPropertyMatches(const TSlideEntry &inEntry,
+ Qt3DSDMPropertyHandle inProperty)
+ {
+ using namespace std;
+ return inProperty.GetHandleValue() == get<1>(inEntry);
+ }
+
+ static inline bool SlideEntryInstancePropertyMatches(const TSlideEntry &inEntry,
+ const TInstanceHandleList &inInstances,
+ const TPropertyHandleList &inProperties)
+ {
+ using namespace std;
+ return exists(inInstances, std::bind(equal_to<int>(), get<0>(inEntry),
+ std::placeholders::_1))
+ && exists(inProperties, std::bind(equal_to<int>(), get<1>(inEntry),
+ std::placeholders::_1));
+ }
+};
+
+typedef std::shared_ptr<CSimpleSlideCore> TSimpleSlideCorePtr;
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideGraphCore.cpp b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideGraphCore.cpp
new file mode 100644
index 00000000..5f1de1ea
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideGraphCore.cpp
@@ -0,0 +1,169 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "SimpleSlideGraphCore.h"
+
+using namespace std;
+
+namespace qt3dsdm {
+
+Qt3DSDMSlideGraphHandle CSimpleSlideGraphCore::CreateSlideGraph(Qt3DSDMSlideHandle inRoot)
+{
+ int nextId = GetNextId();
+ return CreateSlideGraphWithHandle(nextId, inRoot);
+}
+
+Qt3DSDMSlideHandle CSimpleSlideGraphCore::GetGraphRoot(Qt3DSDMSlideGraphHandle inGraph) const
+{
+ return GetSlideGraphNF(inGraph, m_Objects)->m_Root;
+}
+
+inline bool RootSlideMatches(const THandleObjectPair &inPair, Qt3DSDMSlideHandle inSlide)
+{
+ const SSlideGraph *theGraph = static_cast<SSlideGraph *>(inPair.second.get());
+ if (theGraph->m_Root == inSlide)
+ return true;
+ return false;
+}
+
+Qt3DSDMSlideGraphHandle CSimpleSlideGraphCore::GetSlideGraph(Qt3DSDMSlideHandle inSlide) const
+{
+ THandleObjectMap::const_iterator theFind = find_if<THandleObjectMap::const_iterator>(
+ m_Objects, std::bind(RootSlideMatches, std::placeholders::_1, inSlide));
+ if (theFind != m_Objects.end())
+ return theFind->first;
+ return 0;
+}
+
+inline Qt3DSDMSlideGraphHandle ToGraphHandle(const THandleObjectPair &inPair)
+{
+ return inPair.first;
+}
+
+void CSimpleSlideGraphCore::GetSlideGraphs(TSlideGraphHandleList &outGraphs) const
+{
+ outGraphs.resize(m_Objects.size());
+ transform(m_Objects.begin(), m_Objects.end(), outGraphs.begin(), ToGraphHandle);
+}
+
+void CSimpleSlideGraphCore::DeleteSlideGraph(Qt3DSDMSlideGraphHandle inHandle)
+{
+ TSlideInstancePairList theAssociatedInstances;
+ GetAssociatedInstances(inHandle, theAssociatedInstances);
+ for (size_t idx = 0, end = theAssociatedInstances.size(); idx < end; ++idx)
+ DissociateInstance(theAssociatedInstances[idx].second);
+ EraseHandle(inHandle, m_Objects);
+}
+
+void CSimpleSlideGraphCore::AssociateInstance(Qt3DSDMSlideGraphHandle inSlideGraph,
+ Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance)
+{
+ pair<TInstanceToGraphMap::iterator, bool> theResult =
+ m_InstanceToGraph.insert(make_pair(inInstance, make_pair(inSlideGraph, inSlide)));
+ Q_ASSERT(theResult.second);
+ if (theResult.second == false) {
+ theResult.first->second.first = inSlideGraph;
+ theResult.first->second.second = inSlide;
+ }
+ pair<TGraphToInstanceMap::iterator, bool> theGraphResult =
+ m_GraphToInstances.insert(make_pair(inSlideGraph, TSlideInstancePairList()));
+ insert_unique(theGraphResult.first->second, make_pair(inSlide, inInstance));
+}
+
+void CSimpleSlideGraphCore::GetAssociatedInstances(Qt3DSDMSlideGraphHandle inSlideGraph,
+ TSlideInstancePairList &outAssociations) const
+{
+ TGraphToInstanceMap::const_iterator theFind = m_GraphToInstances.find(inSlideGraph);
+ if (theFind != m_GraphToInstances.end())
+ outAssociations.insert(outAssociations.end(), theFind->second.begin(),
+ theFind->second.end());
+}
+
+TGraphSlidePair CSimpleSlideGraphCore::GetAssociatedGraph(Qt3DSDMInstanceHandle inInstance) const
+{
+ TInstanceToGraphMap::const_iterator theResult = m_InstanceToGraph.find(inInstance);
+ if (theResult != m_InstanceToGraph.end())
+ return theResult->second;
+ return TGraphSlidePair();
+}
+
+struct SInstanceMatcher
+{
+ Qt3DSDMInstanceHandle m_Instance;
+ SInstanceMatcher(Qt3DSDMInstanceHandle inInst)
+ : m_Instance(inInst)
+ {
+ }
+ bool operator()(const pair<Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle> &inItem) const
+ {
+ return m_Instance == inItem.second;
+ }
+};
+
+void CSimpleSlideGraphCore::DissociateInstance(Qt3DSDMInstanceHandle inInstance)
+{
+ TGraphSlidePair theAssociatedGraph(GetAssociatedGraph(inInstance));
+
+ TGraphToInstanceMap::iterator theFind = m_GraphToInstances.find(theAssociatedGraph.first);
+ if (theFind != m_GraphToInstances.end()) {
+ erase_if(theFind->second, SInstanceMatcher(inInstance));
+ if (theFind->second.size() == 0)
+ m_GraphToInstances.erase(theAssociatedGraph.first);
+ }
+
+ m_InstanceToGraph.erase(inInstance);
+}
+
+void CSimpleSlideGraphCore::SetGraphActiveSlide(Qt3DSDMSlideGraphHandle inGraph,
+ Qt3DSDMSlideHandle inSlide)
+{
+ GetSlideGraphNF(inGraph, m_Objects)->m_ActiveSlide = inSlide;
+}
+
+Qt3DSDMSlideHandle CSimpleSlideGraphCore::GetGraphActiveSlide(Qt3DSDMSlideGraphHandle inGraph) const
+{
+ const SSlideGraph *theSlide = GetSlideGraphNF(inGraph, m_Objects);
+ if (theSlide->m_ActiveSlide)
+ return theSlide->m_ActiveSlide;
+ return theSlide->m_Root;
+}
+
+bool CSimpleSlideGraphCore::HandleValid(int inHandle) const
+{
+ return CHandleBase::HandleValid(inHandle);
+}
+
+Qt3DSDMSlideGraphHandle CSimpleSlideGraphCore::CreateSlideGraphWithHandle(int inHandle,
+ Qt3DSDMSlideHandle inRoot)
+{
+ m_Objects.insert(make_pair(inHandle, (THandleObjectPtr) new SSlideGraph(inHandle, inRoot)));
+ return inHandle;
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideGraphCore.h b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideGraphCore.h
new file mode 100644
index 00000000..484d6750
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/SimpleSlideGraphCore.h
@@ -0,0 +1,134 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef SLIDEGRAPHCOREH
+#define SLIDEGRAPHCOREH
+#include "Qt3DSDMStringTable.h"
+#include "Qt3DSDMSlideGraphCore.h"
+#include "HandleSystemBase.h"
+#include "Qt3DSDMErrors.h"
+
+namespace qt3dsdm {
+using namespace std;
+struct SSlideGraph : public CHandleObject
+{
+ SSlideGraph()
+ : m_Root(0)
+ , m_ActiveSlide(0)
+ {
+ }
+ SSlideGraph(int inHandle, int inSlideRoot)
+ : CHandleObject(inHandle)
+ , m_Root(inSlideRoot)
+ , m_ActiveSlide(0)
+ {
+ }
+ Qt3DSDMSlideHandle m_Root;
+ Qt3DSDMSlideHandle m_ActiveSlide;
+
+ static const EHandleObjectType s_Type = CHandleObject::EHandleObjectTypeSSlideGraph;
+ EHandleObjectType GetType() override { return s_Type; }
+};
+
+class CSimpleSlideGraphCore : public CHandleBase, public ISlideGraphCore
+{
+ TStringTablePtr m_StringTable;
+ typedef std::unordered_map<Qt3DSDMInstanceHandle,
+ pair<Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle>, std::hash<int>>
+ TInstanceToGraphMap;
+ typedef std::unordered_map<Qt3DSDMSlideGraphHandle, TSlideInstancePairList, std::hash<int>>
+ TGraphToInstanceMap;
+
+ TInstanceToGraphMap m_InstanceToGraph;
+ TGraphToInstanceMap m_GraphToInstances;
+
+public:
+ CSimpleSlideGraphCore(TStringTablePtr strTable = TStringTablePtr())
+ : m_StringTable(strTable)
+ {
+ }
+ TStringTablePtr GetStringTablePtr() { return m_StringTable; }
+ /**
+ * A slide graph is used to associate a set of instances to a set of slides.
+ * This allows rapid lookup of properties, as an implementation of these.
+ * There are a few assumptions here. First is that a given slide can be a member
+ * of one and only one graph (i.e. it does not derive from another slide outside of the graph).
+ * Second is that an instance is a member of one and only one graph.
+ */
+ Qt3DSDMSlideGraphHandle CreateSlideGraph(Qt3DSDMSlideHandle inRoot) override;
+ Qt3DSDMSlideHandle GetGraphRoot(Qt3DSDMSlideGraphHandle inGraph) const override;
+ Qt3DSDMSlideGraphHandle GetSlideGraph(Qt3DSDMSlideHandle inSlide) const override;
+ void GetSlideGraphs(TSlideGraphHandleList &outGraphs) const override;
+ void DeleteSlideGraph(Qt3DSDMSlideGraphHandle inHandle) override;
+
+ /**
+ * Associate a given instance handle with a given graph. This will ensure that property
+ *lookups
+ * will travel through this graph before they hit the main data core. Instances may be
+ *associated
+ * with a sub-slide of a given graph, not just the root. An instance associated with the root
+ *is
+ * implicitly associated with any root-derived slides.
+ */
+ void AssociateInstance(Qt3DSDMSlideGraphHandle inSlideGraph, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance) override;
+ void GetAssociatedInstances(Qt3DSDMSlideGraphHandle inSlideGraph,
+ TSlideInstancePairList &outAssociations) const override;
+ TGraphSlidePair GetAssociatedGraph(Qt3DSDMInstanceHandle inInstance) const override;
+ void DissociateInstance(Qt3DSDMInstanceHandle inInstance) override;
+
+ /**
+ * All graphs always have an active slide. This is assumed to be the root right off the bat.
+ */
+ void SetGraphActiveSlide(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide) override;
+ Qt3DSDMSlideHandle GetGraphActiveSlide(Qt3DSDMSlideGraphHandle inGraph) const override;
+
+ bool HandleValid(int inHandle) const override;
+
+ Qt3DSDMSlideGraphHandle CreateSlideGraphWithHandle(int inHandle, Qt3DSDMSlideHandle inRoot);
+
+ static SSlideGraph *GetSlideGraphNF(int inHandle, THandleObjectMap &inObjects)
+ {
+ return const_cast<SSlideGraph *>(
+ GetSlideGraphNF(inHandle, static_cast<const THandleObjectMap &>(inObjects)));
+ }
+
+ static const SSlideGraph *GetSlideGraphNF(int inHandle, const THandleObjectMap &inObjects)
+ {
+ const SSlideGraph *theSlide = GetHandleObject<SSlideGraph>(inHandle, inObjects);
+ if (theSlide)
+ return theSlide;
+ throw SlideGraphNotFound(L"");
+ }
+};
+
+typedef std::shared_ptr<CSimpleSlideGraphCore> TSimpleSlideGraphCorePtr;
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/SlideCoreProducer.cpp b/src/Runtime/ogl-runtime/src/dm/systems/cores/SlideCoreProducer.cpp
new file mode 100644
index 00000000..86b0d1fe
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/SlideCoreProducer.cpp
@@ -0,0 +1,562 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#ifdef _WIN32
+#pragma warning(disable : 4503) // decorated name length exceeded
+#endif
+#include "SlideCoreProducer.h"
+#include "HandleSystemTransactions.h"
+#include "VectorTransactions.h"
+#include "SignalsImpl.h"
+
+using namespace std;
+
+namespace qt3dsdm {
+
+Qt3DSDMSlideHandle CSlideCoreProducer::CreateSlide(Qt3DSDMInstanceHandle inInstance)
+{
+ Qt3DSDMSlideHandle retval = m_Data->CreateSlide(inInstance);
+ CREATE_HANDLE_CREATE_TRANSACTION(m_Consumer, retval, m_Data->m_Objects);
+ GetSignalSender()->SendSlideCreated(retval);
+ return retval;
+}
+
+Qt3DSDMInstanceHandle CSlideCoreProducer::GetSlideInstance(Qt3DSDMSlideHandle inSlide) const
+{
+ return m_Data->GetSlideInstance(inSlide);
+}
+
+Qt3DSDMSlideHandle CSlideCoreProducer::GetSlideByInstance(Qt3DSDMInstanceHandle inSlide) const
+{
+ return m_Data->GetSlideByInstance(inSlide);
+}
+
+void SendPropertyRemoved(const TSlideEntry &inEntry, Qt3DSDMSlideHandle inSlide,
+ ISlideCoreSignalSender *inSender)
+{
+ inSender->SendPropertyValueRemoved(inSlide, get<0>(inEntry), get<1>(inEntry), get<2>(inEntry));
+}
+
+void RecurseCreateDeleteTransactions(TTransactionConsumerPtr inConsumer, Qt3DSDMSlideHandle inSlide,
+ THandleObjectMap &inObjects, ISlideCoreSignalSender *inSender)
+{
+ SSlide *theSlide = CSimpleSlideCore::GetSlideNF(inSlide, inObjects);
+ inSender->SendBeforeSlideDeleted(theSlide->m_Handle);
+ do_all(theSlide->m_Children, std::bind(RecurseCreateDeleteTransactions, inConsumer,
+ std::placeholders::_1,
+ std::ref(inObjects), inSender));
+ if (inConsumer)
+ CREATE_HANDLE_DELETE_TRANSACTION(inConsumer, inSlide, inObjects);
+ inSender->SendSlideDeleted(theSlide->m_Handle);
+}
+
+void CSlideCoreProducer::DeleteSlide(Qt3DSDMSlideHandle inSlide, TInstanceHandleList &outInstances)
+{
+ // Ensure exists
+ SSlide *theSlide = CSimpleSlideCore::GetSlideNF(inSlide, m_Data->m_Objects);
+ if (theSlide->m_Parent) {
+ SSlide *theParent = CSimpleSlideCore::GetSlideNF(theSlide->m_Parent, m_Data->m_Objects);
+ CreateVecEraseTransaction<int>(__FILE__, __LINE__, m_Consumer, inSlide,
+ theParent->m_Children);
+ }
+ RecurseCreateDeleteTransactions(m_Consumer, inSlide, m_Data->m_Objects, GetSignalSender());
+ // Not any more...
+ m_Data->DeleteSlide(inSlide, outInstances);
+}
+
+void CSlideCoreProducer::GetSlides(TSlideHandleList &outSlides) const
+{
+ m_Data->GetSlides(outSlides);
+}
+
+float CSlideCoreProducer::GetSlideTime(Qt3DSDMSlideHandle inSlide) const
+{
+ return m_Data->GetSlideTime(inSlide);
+}
+
+void CSlideCoreProducer::SetSlideTime(Qt3DSDMSlideHandle inSlide, float inNewTime)
+{
+ SSlide *theSlide = CSimpleSlideCore::GetSlideNF(inSlide, m_Data->m_Objects);
+ float oldTime = theSlide->m_Time;
+ theSlide->m_Time = inNewTime;
+ if (m_Consumer) {
+ m_Consumer->OnTransaction(std::shared_ptr<ITransaction>(CREATE_GENERIC_TRANSACTION(
+ std::bind(&CSlideCoreProducer::SetSlideTime, this, inSlide, inNewTime),
+ std::bind(&CSlideCoreProducer::SetSlideTime, this, inSlide, oldTime))));
+ } else
+ GetSignalSender()->SendSlideTimeChanged(inSlide);
+}
+
+inline void SetSlideParent(THandleObjectMap &inObjects, int inSlide, int inParent)
+{
+ CSimpleSlideCore::GetSlideNF(inSlide, inObjects)->m_Parent = inParent;
+}
+
+void CSlideCoreProducer::DeriveSlide(Qt3DSDMSlideHandle inSlide, Qt3DSDMSlideHandle inParent,
+ int inIndex)
+{
+ // Integrity checks to ensure operation will proceed
+ SSlide *theSlide = CSimpleSlideCore::GetSlideNF(inSlide, m_Data->m_Objects);
+ SSlide *theNewParent = NULL;
+ if (inParent)
+ theNewParent = CSimpleSlideCore::GetSlideNF(inParent, m_Data->m_Objects);
+ SSlide *theOldParent = NULL;
+ if (theSlide->m_Parent)
+ theOldParent = CSimpleSlideCore::GetSlideNF(theSlide->m_Parent, m_Data->m_Objects);
+
+ if (theSlide->m_Parent && m_Consumer) {
+ m_Consumer->OnTransaction(TTransactionPtr(CREATE_GENERIC_TRANSACTION(
+ std::bind(SetSlideParent, std::ref(m_Data->m_Objects), inSlide, inParent),
+ std::bind(SetSlideParent, std::ref(m_Data->m_Objects), inSlide,
+ theSlide->m_Parent))));
+ if (theOldParent)
+ CreateVecEraseTransaction<int>(__FILE__, __LINE__, m_Consumer, inSlide,
+ theOldParent->m_Children);
+ GetSignalSender()->SendSlideDerived(inSlide, 0, inIndex);
+ }
+ m_Data->DeriveSlide(inSlide, inParent, inIndex);
+ if (theNewParent)
+ CreateVecInsertTransaction<int>(__FILE__, __LINE__, m_Consumer, inSlide,
+ theNewParent->m_Children);
+ GetSignalSender()->SendSlideDerived(inSlide, inParent, inIndex);
+}
+
+Qt3DSDMSlideHandle CSlideCoreProducer::GetParentSlide(Qt3DSDMSlideHandle inSlide) const
+{
+ return m_Data->GetParentSlide(inSlide);
+}
+
+void CSlideCoreProducer::GetChildSlides(Qt3DSDMSlideHandle inSlide,
+ TSlideHandleList &outChildren) const
+{
+ m_Data->GetChildSlides(inSlide, outChildren);
+}
+
+int CSlideCoreProducer::GetChildIndex(Qt3DSDMSlideHandle inParent, Qt3DSDMSlideHandle inChild) const
+{
+ return m_Data->GetChildIndex(inParent, inChild);
+}
+
+bool CSlideCoreProducer::GetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ return m_Data->GetInstancePropertyValue(inSlide, inHandle, inProperty, outValue);
+}
+
+inline void EraseProperty(TSlideEntryList &inProperties, int inInstance, int inProperty)
+{
+ erase_if(inProperties,
+ std::bind(CSimpleSlideCore::PropertyFound, inInstance, inProperty,
+ std::placeholders::_1));
+}
+
+void CSlideCoreProducer::SetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ std::pair<SSlide *, SInternValue *> slideAndProp(
+ m_Data->ResolveSetInstancePropertyValue(inSlide, inHandle, inProperty));
+ DoForceSetInstancePropertyValue(slideAndProp.first->m_Handle, inHandle, inProperty, inValue);
+}
+
+struct HashMapDataValueInsertTransaction
+ : public HashMapInsertTransaction<TSlideInstancePropertyPair, SInternValue,
+ TSlideEntryHash::hasher>
+{
+ typedef HashMapInsertTransaction<TSlideInstancePropertyPair, SInternValue,
+ TSlideEntryHash::hasher>
+ TBase;
+ HashMapDataValueInsertTransaction(
+ const char *inFile, int inLine, TSlideEntryHash &map,
+ const std::pair<TSlideInstancePropertyPair, SInternValue> &val)
+ : TBase(inFile, inLine, map, val)
+ {
+ }
+ void Do() override
+ {
+ std::pair<int, int> theKey = m_Value.first;
+ SValue theTempValue = m_Value.second.GetValue();
+ TDataStrPtr theStrPtr;
+ if (GetValueType(theTempValue) == DataModelDataType::String) {
+ theStrPtr = qt3dsdm::get<TDataStrPtr>(theTempValue);
+ }
+ (void)theStrPtr;
+ TBase::Add();
+ }
+};
+
+inline void CSlideCoreProducer::DoForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ SSlide *theSlide = CSimpleSlideCore::GetSlideNF(inSlide, m_Data->m_Objects);
+ SInternValue theNewValue(inValue, m_Data->GetStringTable());
+ SInternValue *theCurrentValue(theSlide->GetInstancePropertyValue(inHandle, inProperty));
+
+ std::pair<int, int> theKey(inHandle, inProperty);
+ SlideInstancePropertyKey mergeMapKey(inSlide, inHandle, inProperty);
+ TSlidePropertyMergeMap::iterator iter = m_PropertyMergeMap.find(mergeMapKey);
+ if (iter != m_PropertyMergeMap.end()) {
+ const SValue &theTempValue(theNewValue.GetValue());
+ CSimpleSlideCore::ForceSetPropertyValue(m_Data->GetStringTable(), m_Data->m_Objects,
+ inSlide, inHandle, inProperty, theTempValue);
+ iter->second->Update(theNewValue);
+ if (GetValueType(theTempValue) == DataModelDataType::String) {
+ TDataStrPtr theStrPtr = qt3dsdm::get<TDataStrPtr>(theTempValue);
+ QT3DSDM_DEBUG_LOG(m_Data->GetStringTable().GetNarrowStr(theStrPtr->GetData()));
+ }
+ return; // don't signal
+ } else {
+ TSlidePropertyMergeMapEntry theEntry;
+ if (theCurrentValue) {
+ theEntry =
+ CreateHashMapSwapTransaction(__FILE__, __LINE__, m_Consumer, theKey,
+ *theCurrentValue, theNewValue, theSlide->m_Properties);
+ } else {
+ if (m_Consumer) {
+ std::shared_ptr<HashMapDataValueInsertTransaction> theTransaction =
+ std::make_shared<HashMapDataValueInsertTransaction>(
+ __FILE__, __LINE__, std::ref(theSlide->m_Properties),
+ std::make_pair(theKey, theNewValue));
+ m_Consumer->OnTransaction(theTransaction);
+ theEntry = theTransaction;
+ }
+ }
+ if (theEntry)
+ m_PropertyMergeMap.insert(make_pair(mergeMapKey, theEntry));
+ CSimpleSlideCore::ForceSetPropertyValue(m_Data->GetStringTable(), m_Data->m_Objects,
+ inSlide, inHandle, inProperty,
+ theNewValue.GetValue());
+ GetSignalSender()->SendPropertyValueSet(inSlide, inHandle, inProperty,
+ theNewValue.GetValue());
+ }
+}
+
+void CSlideCoreProducer::ForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ if (m_Consumer)
+ DoForceSetInstancePropertyValue(inSlide, inHandle, inProperty, inValue);
+ else
+ m_Data->ForceSetInstancePropertyValue(inSlide, inHandle, inProperty, inValue);
+}
+
+void CSlideCoreProducer::forceSetInstancePropertyValueOnAllSlides(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ m_Data->forceSetInstancePropertyValueOnAllSlides(inInstance, inProperty, inValue);
+}
+
+bool CSlideCoreProducer::GetSpecificInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ SValue &outValue) const
+{
+ return m_Data->GetSpecificInstancePropertyValue(inSlide, inInstance, inProperty, outValue);
+}
+
+bool CSlideCoreProducer::ContainsProperty(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty) const
+{
+ return m_Data->ContainsProperty(inSlide, inHandle, inProperty);
+}
+
+void CSlideCoreProducer::GetSlidePropertyEntries(Qt3DSDMSlideHandle inSlide,
+ TSlideEntryList &outEntries) const
+{
+ return m_Data->GetSlidePropertyEntries(inSlide, outEntries);
+}
+
+void CSlideCoreProducer::PushPropertyValueToChildren(Qt3DSDMSlideHandle inParent,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue)
+{
+ SSlide *theParent = CSimpleSlideCore::GetSlideNF(inParent, m_Data->m_Objects);
+ DoForceSetInstancePropertyValue(inParent, inHandle, inProperty, inValue);
+ do_all(theParent->m_Children, std::bind(&CSlideCoreProducer::DoForceSetInstancePropertyValue,
+ this, std::placeholders::_1,
+ inHandle, inProperty, inValue));
+}
+
+inline void ClearValueWithTransactions(TTransactionConsumerPtr inConsumer,
+ THandleObjectMap &inObjects,
+ ISlideCoreSignalSender *inSignalSender, int inSlide,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ SSlide *theSlide = CSimpleSlideCore::GetSlideNF(inSlide, inObjects);
+ SInternValue *theCurrentValue(theSlide->GetInstancePropertyValue(inHandle, inProperty));
+ if (theCurrentValue) {
+ SValue theValue(theCurrentValue->GetValue());
+ std::pair<int, int> theKey(inHandle, inProperty);
+ CreateHashMapEraseTransaction(__FILE__, __LINE__, inConsumer,
+ std::make_pair(theKey, *theCurrentValue),
+ theSlide->m_Properties);
+ CSimpleSlideCore::ClearPropertyValue(inObjects, inSlide, inHandle, inProperty);
+ inSignalSender->SendPropertyValueRemoved(inSlide, inHandle, inProperty, theValue);
+ }
+}
+
+void CSlideCoreProducer::ClearChildrenPropertyValues(Qt3DSDMSlideHandle inParent,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty)
+{
+ SSlide *theParent = CSimpleSlideCore::GetSlideNF(inParent, m_Data->m_Objects);
+ do_all(theParent->m_Children,
+ std::bind(ClearValueWithTransactions, m_Consumer, std::ref(m_Data->m_Objects),
+ GetSignalSender(), std::placeholders::_1, inHandle, inProperty));
+}
+
+typedef tuple<int, TSlideEntryList, TSlideEntryList> TSlideSlideEntryTuple;
+typedef std::vector<TSlideSlideEntryTuple> TSlideSlideEntryTupleList;
+
+inline void CreateVectorPreReplaceData(THandleObjectPair inPair,
+ TSlideSlideEntryTupleList &outSlideSlideEntries,
+ function<bool(const TSlideEntry &)> inPredicate)
+{
+ if (inPair.second->GetType() == CHandleObject::EHandleObjectTypeSSlide) {
+ SSlide *theSlide = static_cast<SSlide *>(inPair.second.get());
+ if (theSlide->HasProperty(inPredicate)) {
+ outSlideSlideEntries.push_back(
+ TSlideSlideEntryTuple(inPair.first, TSlideEntryList(), TSlideEntryList()));
+ theSlide->DeleteSlideEntries(get<1>(outSlideSlideEntries.back()), inPredicate);
+ }
+ }
+}
+
+inline void RunInsert(tuple<int, TSlideEntryList, TSlideEntryList> &inTuple,
+ THandleObjectMap &inObjects, IStringTable &inStringTable)
+{
+ SSlide *theSlide = CSimpleSlideCore::GetSlideNF(get<0>(inTuple), inObjects);
+ theSlide->InsertSlideEntries(get<1>(inTuple), inStringTable);
+}
+
+inline void RunFullInsert(std::shared_ptr<TSlideSlideEntryTupleList> inList,
+ THandleObjectMap &inObjects, IStringTable &inStringTable)
+{
+ for (TSlideSlideEntryTupleList::iterator theIter = inList->begin(); theIter != inList->end();
+ ++theIter)
+ RunInsert(*theIter, inObjects, inStringTable);
+}
+
+inline void RunFullErase(std::shared_ptr<TSlideSlideEntryTupleList> inList,
+ THandleObjectMap &inObjects)
+{
+ for (TSlideSlideEntryTupleList::iterator theIter = inList->begin(); theIter != inList->end();
+ ++theIter) {
+ SSlide *theSlide = CSimpleSlideCore::GetSlideNF(get<0>(*theIter), inObjects);
+ theSlide->DeleteEntriesFromList(std::get<1>(*theIter));
+ }
+}
+
+void DeleteAllSlideEntriesWithUndo(TTransactionConsumerPtr inConsumer, IStringTable &inStringTable,
+ THandleObjectMap &inObjects,
+ function<bool(const TSlideEntry &)> inPredicate)
+{
+ std::shared_ptr<TSlideSlideEntryTupleList> theEntries(new TSlideSlideEntryTupleList);
+ do_all(inObjects,
+ std::bind(CreateVectorPreReplaceData,
+ std::placeholders::_1, std::ref(*theEntries), inPredicate));
+ if (inConsumer)
+ CreateGenericTransactionWithConsumer(
+ __FILE__, __LINE__, inConsumer,
+ std::bind(RunFullErase, theEntries, std::ref(inObjects)),
+ std::bind(RunFullInsert, theEntries, std::ref(inObjects),
+ std::ref(inStringTable)));
+}
+
+void CSlideCoreProducer::DeleteAllInstanceEntries(Qt3DSDMInstanceHandle inInstance)
+{
+ DeleteAllSlideEntriesWithUndo(
+ m_Consumer, GetStringTable(), m_Data->m_Objects,
+ std::bind(CSimpleSlideCore::SlideEntryInstanceMatches, std::placeholders::_1, inInstance));
+}
+void CSlideCoreProducer::DeleteAllPropertyEntries(Qt3DSDMPropertyHandle inHandle)
+{
+ DeleteAllSlideEntriesWithUndo(
+ m_Consumer, GetStringTable(), m_Data->m_Objects,
+ std::bind(CSimpleSlideCore::SlideEntryPropertyMatches, std::placeholders::_1, inHandle));
+}
+
+void CSlideCoreProducer::DeleteAllInstancePropertyEntries(const TInstanceHandleList &inInstances,
+ const TPropertyHandleList &inProperties)
+{
+ DeleteAllSlideEntriesWithUndo(m_Consumer, GetStringTable(), m_Data->m_Objects,
+ std::bind(CSimpleSlideCore::SlideEntryInstancePropertyMatches,
+ std::placeholders::_1, std::cref(inInstances),
+ std::cref(inProperties)));
+}
+
+void CSlideCoreProducer::GetIntersectingProperties(Qt3DSDMSlideHandle inSlide1,
+ Qt3DSDMSlideHandle inSlide2,
+ TSlideEntryList &outEntries) const
+{
+ return m_Data->GetIntersectingProperties(inSlide1, inSlide2, outEntries);
+}
+
+bool InstancePropMatches(Qt3DSDMInstanceHandle instance, Qt3DSDMPropertyHandle prop,
+ const TSlideEntry &entry)
+{
+ return instance == get<0>(entry) && prop == get<1>(entry);
+}
+
+bool SendPropertyAddedIfNotInList(Qt3DSDMInstanceHandle instance, Qt3DSDMPropertyHandle prop,
+ SValue & /*value*/, const TSlideEntryList &inList,
+ Qt3DSDMSlideHandle inSource, Qt3DSDMSlideHandle inSlide,
+ ISlideCoreSignalSender * /*inSignalSender*/)
+{
+ if (find_if<TSlideEntryList::const_iterator>(
+ inList, std::bind(InstancePropMatches, instance, prop, std::placeholders::_1))
+ == inList.end()) {
+ return true;
+ }
+ return false;
+}
+
+// destination gets the properties from slide 1 that have corresponding entries in slide 2
+void CSlideCoreProducer::PushIntersectingProperties(Qt3DSDMSlideHandle inSlide1,
+ Qt3DSDMSlideHandle inSlide2,
+ Qt3DSDMSlideHandle inDestination)
+{
+ SSlide *theDest = CSimpleSlideCore::GetSlideNF(inDestination, m_Data->m_Objects);
+ TSlideEntryList theProperties;
+ theDest->ToSlideEntryList(theProperties);
+ m_Data->PushIntersectingProperties(inSlide1, inSlide2, inDestination);
+ theDest->SetPropertyValuesIf(GetStringTable(), std::bind(SendPropertyAddedIfNotInList,
+ std::placeholders::_1,
+ std::placeholders::_2,
+ std::placeholders::_3,
+ theProperties, inSlide1,
+ inDestination, GetSignalSender()));
+ if (m_Consumer) {
+ TSlideEntryList theResult;
+ theDest->ToSlideEntryList(theResult);
+ m_Consumer->OnTransaction(TTransactionPtr(
+ CREATE_GENERIC_TRANSACTION(std::bind(&SSlide::FromSlideEntryList, theDest, theResult,
+ std::ref(GetStringTable())),
+ std::bind(&SSlide::FromSlideEntryList, theDest,
+ theProperties, std::ref(GetStringTable())))));
+ }
+}
+
+void CSlideCoreProducer::CopyProperties(Qt3DSDMSlideHandle inSourceSlide,
+ Qt3DSDMInstanceHandle inSourceInstance,
+ Qt3DSDMSlideHandle inDestSlide,
+ Qt3DSDMInstanceHandle inDestInstance)
+{
+ SSlide *sourceSlide = CSimpleSlideCore::GetSlideNF(inSourceSlide, m_Data->m_Objects);
+
+ for (TSlideEntryHash::iterator theIter = sourceSlide->m_Properties.begin(),
+ theEnd = sourceSlide->m_Properties.end();
+ theIter != theEnd; ++theIter) {
+ if (theIter->first.first == inSourceInstance) {
+ // Set it once so it appears in the slide
+ // Then call the main method that will send the events.
+ DoForceSetInstancePropertyValue(inDestSlide, inDestInstance, theIter->first.second,
+ theIter->second.GetValue());
+ }
+ }
+}
+
+bool CSlideCoreProducer::HandleValid(int inHandle) const
+{
+ return m_Data->HandleValid(inHandle);
+}
+
+bool CSlideCoreProducer::IsSlide(Qt3DSDMSlideHandle inSlide) const
+{
+ return m_Data->IsSlide(inSlide);
+}
+
+void CSlideCoreProducer::SetConsumer(TTransactionConsumerPtr inConsumer)
+{
+ m_Consumer = inConsumer;
+ m_PropertyMergeMap.clear();
+}
+
+TSignalConnectionPtr
+CSlideCoreProducer::ConnectSlideCreated(const std::function<void(Qt3DSDMSlideHandle)> &inCallback)
+{
+ return GetSignalProvider()->ConnectSlideCreated(inCallback);
+}
+TSignalConnectionPtr CSlideCoreProducer::ConnectBeforeSlideDeleted(
+ const std::function<void(Qt3DSDMSlideHandle)> &inCallback)
+{
+ return GetSignalProvider()->ConnectBeforeSlideDeleted(inCallback);
+}
+TSignalConnectionPtr
+CSlideCoreProducer::ConnectSlideDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback)
+{
+ return GetSignalProvider()->ConnectSlideDeleted(inCallback);
+}
+TSignalConnectionPtr CSlideCoreProducer::ConnectSlideDerived(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMSlideHandle, int)> &inCallback)
+{
+ return GetSignalProvider()->ConnectSlideDerived(inCallback);
+}
+TSignalConnectionPtr CSlideCoreProducer::ConnectInstancePropertyValueSet(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue &)> &inCallback)
+{
+ return GetSignalProvider()->ConnectInstancePropertyValueSet(inCallback);
+}
+TSignalConnectionPtr CSlideCoreProducer::ConnectInstancePropertyValueRemoved(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue &)> &inCallback)
+{
+ return GetSignalProvider()->ConnectInstancePropertyValueRemoved(inCallback);
+}
+TSignalConnectionPtr CSlideCoreProducer::ConnectSlideTimeChanged(
+ const std::function<void(Qt3DSDMSlideHandle)> &inCallback)
+{
+ return GetSignalProvider()->ConnectSlideTimeChanged(inCallback);
+}
+
+void CSlideCoreProducer::InitSignaller()
+{
+ m_SlideCoreSignaller = CreateSlideCoreSignaller();
+}
+
+ISlideCoreSignalProvider *CSlideCoreProducer::GetSignalProvider()
+{
+ return dynamic_cast<ISlideCoreSignalProvider *>(m_SlideCoreSignaller.get());
+}
+ISlideCoreSignalSender *CSlideCoreProducer::GetSignalSender()
+{
+ return dynamic_cast<ISlideCoreSignalSender *>(m_SlideCoreSignaller.get());
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/SlideCoreProducer.h b/src/Runtime/ogl-runtime/src/dm/systems/cores/SlideCoreProducer.h
new file mode 100644
index 00000000..dec0297d
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/SlideCoreProducer.h
@@ -0,0 +1,190 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef SLIDECOREPRODUCERH
+#define SLIDECOREPRODUCERH
+#include "Qt3DSDMTransactions.h"
+#include "SimpleSlideCore.h"
+#include "Qt3DSDMSignals.h"
+
+namespace qt3dsdm {
+struct SlideInstancePropertyKey
+{
+ int m_Slide;
+ int m_Instance;
+ int m_Property;
+ SlideInstancePropertyKey(int slide, int inst, int prop)
+ : m_Slide(slide)
+ , m_Instance(inst)
+ , m_Property(prop)
+ {
+ }
+ SlideInstancePropertyKey()
+ : m_Slide(0)
+ , m_Instance(0)
+ , m_Property(0)
+ {
+ }
+
+ bool operator==(const SlideInstancePropertyKey &inOther) const
+ {
+ return m_Slide == inOther.m_Slide && m_Instance == inOther.m_Instance
+ && m_Property == inOther.m_Property;
+ }
+};
+
+struct SlideInstancePropertyKeyHasher
+{
+ std::size_t operator()(const SlideInstancePropertyKey &inEntry) const
+ {
+ return std::hash<int>()(inEntry.m_Slide) ^ std::hash<int>()(inEntry.m_Instance)
+ ^ std::hash<int>()(inEntry.m_Property);
+ }
+};
+
+typedef std::shared_ptr<IMergeableTransaction<SInternValue>> TSlidePropertyMergeMapEntry;
+typedef std::unordered_map<SlideInstancePropertyKey, TSlidePropertyMergeMapEntry,
+ SlideInstancePropertyKeyHasher>
+ TSlidePropertyMergeMap;
+
+class CSlideCoreProducer : public ISlideCore,
+ public ITransactionProducer,
+ public ISlideCoreSignalProvider
+{
+ Q_DISABLE_COPY(CSlideCoreProducer)
+
+ TTransactionConsumerPtr m_Consumer;
+ TSimpleSlideCorePtr m_Data;
+ TSignalItemPtr m_SlideCoreSignaller;
+ TSlidePropertyMergeMap m_PropertyMergeMap;
+
+public:
+ CSlideCoreProducer(TStringTablePtr inStrTable)
+ : m_Data(new CSimpleSlideCore(inStrTable))
+ {
+ InitSignaller();
+ }
+
+ IStringTable &GetStringTable() const override { return m_Data->GetStringTable(); }
+ TStringTablePtr GetStringTablePtr() const override { return m_Data->GetStringTablePtr(); }
+
+ TSimpleSlideCorePtr GetTransactionlessSlideCore() { return m_Data; }
+ TSimpleSlideCorePtr GetTransactionlessSlideCore() const { return m_Data; }
+
+ Qt3DSDMSlideHandle CreateSlide(Qt3DSDMInstanceHandle inInstance) override;
+ Qt3DSDMInstanceHandle GetSlideInstance(Qt3DSDMSlideHandle inSlide) const override;
+ Qt3DSDMSlideHandle GetSlideByInstance(Qt3DSDMInstanceHandle inSlide) const override;
+ void DeleteSlide(Qt3DSDMSlideHandle inSlide, TInstanceHandleList &outInstances) override;
+ void GetSlides(TSlideHandleList &outSlides) const override;
+
+ float GetSlideTime(Qt3DSDMSlideHandle inSlide) const override;
+ void SetSlideTime(Qt3DSDMSlideHandle inSlide, float inNewTime) override;
+
+ void DeriveSlide(Qt3DSDMSlideHandle inSlide, Qt3DSDMSlideHandle inParent, int inIndex = -1) override;
+ Qt3DSDMSlideHandle GetParentSlide(Qt3DSDMSlideHandle inSlide) const override;
+ void GetChildSlides(Qt3DSDMSlideHandle inSlide, TSlideHandleList &outChildren) const override;
+ int GetChildIndex(Qt3DSDMSlideHandle inParent, Qt3DSDMSlideHandle inChild) const override;
+
+ bool GetInstancePropertyValue(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const override;
+ void SetInstancePropertyValue(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override;
+ void ForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override;
+ void forceSetInstancePropertyValueOnAllSlides(Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue) override;
+ bool GetSpecificInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ Qt3DSDMPropertyHandle inProperty, SValue &outValue) const override;
+ void GetSpecificInstancePropertyValues(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance,
+ TPropertyHandleValuePairList &outValues) override
+ {
+ return m_Data->GetSpecificInstancePropertyValues(inSlide, inInstance, outValues);
+ }
+ bool ContainsProperty(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty) const override;
+ void GetSlidePropertyEntries(Qt3DSDMSlideHandle inSlide, TSlideEntryList &outEntries) const override;
+
+ void PushPropertyValueToChildren(Qt3DSDMSlideHandle inParent, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty, const SValue &inValue) override;
+ void ClearChildrenPropertyValues(Qt3DSDMSlideHandle inParent, Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty) override;
+ void DeleteAllInstanceEntries(Qt3DSDMInstanceHandle inHandle) override;
+ void DeleteAllPropertyEntries(Qt3DSDMPropertyHandle inHandle) override;
+ void DeleteAllInstancePropertyEntries(const TInstanceHandleList &inInstances,
+ const TPropertyHandleList &inProperties) override;
+
+ void GetIntersectingProperties(Qt3DSDMSlideHandle inSlide1, Qt3DSDMSlideHandle inSlide2,
+ TSlideEntryList &outEntries) const override;
+ void PushIntersectingProperties(Qt3DSDMSlideHandle inSlide1, Qt3DSDMSlideHandle inSlide2,
+ Qt3DSDMSlideHandle inDestination) override;
+ void CopyProperties(Qt3DSDMSlideHandle inSourceSlide, Qt3DSDMInstanceHandle inSourceInstance,
+ Qt3DSDMSlideHandle inDestSlide, Qt3DSDMInstanceHandle inDestInstance) override;
+
+ bool IsSlide(Qt3DSDMSlideHandle inSlide) const override;
+
+ bool HandleValid(int inHandle) const override;
+
+ void SetConsumer(TTransactionConsumerPtr inConsumer) override;
+
+ //===================================================================
+ // Signals
+ //===================================================================
+
+ virtual TSignalConnectionPtr
+ ConnectSlideCreated(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectBeforeSlideDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectSlideDeleted(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override;
+ TSignalConnectionPtr ConnectSlideDerived(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMSlideHandle, int)> &inCallback) override;
+ TSignalConnectionPtr ConnectInstancePropertyValueSet(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue &)> &inCallback) override;
+ TSignalConnectionPtr ConnectInstancePropertyValueRemoved(
+ const std::function<void(Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle, Qt3DSDMPropertyHandle,
+ const SValue &)> &inCallback) override;
+ virtual TSignalConnectionPtr
+ ConnectSlideTimeChanged(const std::function<void(Qt3DSDMSlideHandle)> &inCallback) override;
+
+private:
+ inline void DoForceSetInstancePropertyValue(Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inHandle,
+ Qt3DSDMPropertyHandle inProperty,
+ const SValue &inValue);
+ void InitSignaller();
+ ISlideCoreSignalProvider *GetSignalProvider();
+ ISlideCoreSignalSender *GetSignalSender();
+};
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/SlideGraphCoreProducer.cpp b/src/Runtime/ogl-runtime/src/dm/systems/cores/SlideGraphCoreProducer.cpp
new file mode 100644
index 00000000..c514108c
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/SlideGraphCoreProducer.cpp
@@ -0,0 +1,245 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSDMPrefix.h"
+#include "SlideGraphCoreProducer.h"
+#include "HandleSystemTransactions.h"
+#include "VectorTransactions.h"
+#include "SignalsImpl.h"
+using namespace std;
+
+namespace qt3dsdm {
+
+Qt3DSDMSlideGraphHandle CSlideGraphCoreProducer::CreateSlideGraph(Qt3DSDMSlideHandle inRoot)
+{
+ Qt3DSDMSlideGraphHandle retval(m_Data->CreateSlideGraph(inRoot));
+ CREATE_HANDLE_CREATE_TRANSACTION(m_Consumer, retval, m_Data->m_Objects);
+ GetSignalSender()->SendGraphCreated(retval, inRoot);
+ return retval;
+}
+
+Qt3DSDMSlideHandle CSlideGraphCoreProducer::GetGraphRoot(Qt3DSDMSlideGraphHandle inGraph) const
+{
+ return m_Data->GetGraphRoot(inGraph);
+}
+
+Qt3DSDMSlideGraphHandle CSlideGraphCoreProducer::GetSlideGraph(Qt3DSDMSlideHandle inSlide) const
+{
+ return m_Data->GetSlideGraph(inSlide);
+}
+
+void CSlideGraphCoreProducer::GetSlideGraphs(TSlideGraphHandleList &outGraphs) const
+{
+ return m_Data->GetSlideGraphs(outGraphs);
+}
+
+struct DissocateAllInstanceTrans : public ITransaction
+{
+ std::shared_ptr<CSimpleSlideGraphCore> m_Graph;
+ Qt3DSDMSlideGraphHandle m_Handle;
+ TSlideInstancePairList m_Instances;
+ DissocateAllInstanceTrans(const char *inFile, int inLine,
+ std::shared_ptr<CSimpleSlideGraphCore> inGraph,
+ Qt3DSDMSlideGraphHandle inHandle)
+ : ITransaction(inFile, inLine)
+ , m_Graph(inGraph)
+ , m_Handle(inHandle)
+ {
+ inGraph->GetAssociatedInstances(m_Handle, m_Instances);
+ }
+ void Do() override
+ {
+ for (size_t idx = 0, end = m_Instances.size(); idx < end; ++idx)
+ m_Graph->DissociateInstance(m_Instances[idx].second);
+ }
+ void Undo() override
+ {
+ for (size_t idx = 0, end = m_Instances.size(); idx < end; ++idx)
+ m_Graph->AssociateInstance(m_Handle, m_Instances[idx].first, m_Instances[idx].second);
+ }
+};
+
+void CSlideGraphCoreProducer::DeleteSlideGraph(Qt3DSDMSlideGraphHandle inHandle)
+{
+ SSlideGraph *theGraph = CSimpleSlideGraphCore::GetSlideGraphNF(inHandle, m_Data->m_Objects);
+ Qt3DSDMSlideHandle theRootSlide(theGraph->m_Root);
+ if (m_Consumer)
+ m_Consumer->OnTransaction(
+ make_shared<DissocateAllInstanceTrans>(__FILE__, __LINE__, m_Data, inHandle));
+ CREATE_HANDLE_DELETE_TRANSACTION(m_Consumer, inHandle, m_Data->m_Objects);
+ m_Data->DeleteSlideGraph(inHandle);
+ GetSignalSender()->SendGraphDeleted(inHandle, theRootSlide);
+}
+
+struct SInstanceAssociateTrans : public ITransaction
+{
+ std::shared_ptr<CSimpleSlideGraphCore> m_Graph;
+ Qt3DSDMSlideGraphHandle m_GraphHandle;
+ Qt3DSDMSlideHandle m_Slide;
+ Qt3DSDMInstanceHandle m_Instance;
+ bool m_InsertOnDo;
+ SInstanceAssociateTrans(const char *inFile, int inLine,
+ std::shared_ptr<CSimpleSlideGraphCore> inGraph,
+ Qt3DSDMSlideGraphHandle inGraphHandle, Qt3DSDMSlideHandle inSlideHandle,
+ Qt3DSDMInstanceHandle inInstance, bool inInsertOnDo)
+ : ITransaction(inFile, inLine)
+ , m_Graph(inGraph)
+ , m_GraphHandle(inGraphHandle)
+ , m_Slide(inSlideHandle)
+ , m_Instance(inInstance)
+ , m_InsertOnDo(inInsertOnDo)
+ {
+ }
+ void Insert() { m_Graph->AssociateInstance(m_GraphHandle, m_Slide, m_Instance); }
+ void Remove() { m_Graph->DissociateInstance(m_Instance); }
+
+ void Do() override
+ {
+ if (m_InsertOnDo)
+ Insert();
+ else
+ Remove();
+ }
+ void Undo() override
+ {
+ if (m_InsertOnDo)
+ Remove();
+ else
+ Insert();
+ }
+};
+
+void CSlideGraphCoreProducer::AssociateInstance(Qt3DSDMSlideGraphHandle inSlideGraph,
+ Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance)
+{
+ m_Data->AssociateInstance(inSlideGraph, inSlide, inInstance);
+ if (m_Consumer)
+ m_Consumer->OnTransaction(make_shared<SInstanceAssociateTrans>(
+ __FILE__, __LINE__, m_Data, inSlideGraph, inSlide, inInstance, true));
+
+ GetSignalSender()->SendInstanceAssociated(inSlideGraph, inSlide, inInstance);
+}
+void CSlideGraphCoreProducer::GetAssociatedInstances(Qt3DSDMSlideGraphHandle inSlideGraph,
+ TSlideInstancePairList &outAssociations) const
+{
+ m_Data->GetAssociatedInstances(inSlideGraph, outAssociations);
+}
+
+TGraphSlidePair CSlideGraphCoreProducer::GetAssociatedGraph(Qt3DSDMInstanceHandle inInstance) const
+{
+ return m_Data->GetAssociatedGraph(inInstance);
+}
+
+void CSlideGraphCoreProducer::DissociateInstance(Qt3DSDMInstanceHandle inInstance)
+{
+ TGraphSlidePair theAssociatedGraph(m_Data->GetAssociatedGraph(inInstance));
+
+ if (theAssociatedGraph.first.Valid()) {
+ m_Data->DissociateInstance(inInstance);
+ if (m_Consumer)
+ m_Consumer->OnTransaction(make_shared<SInstanceAssociateTrans>(
+ __FILE__, __LINE__, m_Data, theAssociatedGraph.first, theAssociatedGraph.second,
+ inInstance, false));
+ GetSignalSender()->SendInstanceDissociated(theAssociatedGraph.first,
+ theAssociatedGraph.second, inInstance);
+ }
+}
+
+void CSlideGraphCoreProducer::SetGraphActiveSlide(Qt3DSDMSlideGraphHandle inGraph,
+ Qt3DSDMSlideHandle inSlide)
+{
+ if (m_Consumer) {
+ Qt3DSDMSlideHandle current = m_Data->GetGraphActiveSlide(inGraph);
+ TTransactionPtr theTransaction(CREATE_GENERIC_TRANSACTION(
+ bind(&CSimpleSlideGraphCore::SetGraphActiveSlide, m_Data, inGraph, inSlide),
+ bind(&CSimpleSlideGraphCore::SetGraphActiveSlide, m_Data, inGraph, current)));
+ m_Consumer->OnTransaction(theTransaction);
+ }
+ m_Data->SetGraphActiveSlide(inGraph, inSlide);
+ GetSignalSender()->SendGraphActiveSlide(inGraph, inSlide);
+}
+
+Qt3DSDMSlideHandle CSlideGraphCoreProducer::GetGraphActiveSlide(Qt3DSDMSlideGraphHandle inGraph) const
+{
+ return m_Data->GetGraphActiveSlide(inGraph);
+}
+
+bool CSlideGraphCoreProducer::HandleValid(int inHandle) const
+{
+ return m_Data->HandleValid(inHandle);
+}
+
+void CSlideGraphCoreProducer::SetConsumer(TTransactionConsumerPtr inConsumer)
+{
+ m_Consumer = inConsumer;
+}
+
+TSignalConnectionPtr CSlideGraphCoreProducer::ConnectGraphCreated(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback)
+{
+ return GetSignalProvider()->ConnectGraphCreated(inCallback);
+}
+TSignalConnectionPtr CSlideGraphCoreProducer::ConnectGraphDeleted(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback)
+{
+ return GetSignalProvider()->ConnectGraphDeleted(inCallback);
+}
+TSignalConnectionPtr CSlideGraphCoreProducer::ConnectInstanceAssociated(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback)
+{
+ return GetSignalProvider()->ConnectInstanceAssociated(inCallback);
+}
+TSignalConnectionPtr CSlideGraphCoreProducer::ConnectInstanceDissociated(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback)
+{
+ return GetSignalProvider()->ConnectInstanceDissociated(inCallback);
+}
+TSignalConnectionPtr CSlideGraphCoreProducer::ConnectGraphActiveSlide(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback)
+{
+ return GetSignalProvider()->ConnectGraphActiveSlide(inCallback);
+}
+
+void CSlideGraphCoreProducer::InitSignaller()
+{
+ m_Signaller = CreateSlideGraphCoreSignaller();
+}
+
+ISlideGraphCoreSignalProvider *CSlideGraphCoreProducer::GetSignalProvider()
+{
+ return dynamic_cast<ISlideGraphCoreSignalProvider *>(m_Signaller.get());
+}
+
+ISlideGraphCoreSignalSender *CSlideGraphCoreProducer::GetSignalSender()
+{
+ return dynamic_cast<ISlideGraphCoreSignalSender *>(m_Signaller.get());
+}
+}
diff --git a/src/Runtime/ogl-runtime/src/dm/systems/cores/SlideGraphCoreProducer.h b/src/Runtime/ogl-runtime/src/dm/systems/cores/SlideGraphCoreProducer.h
new file mode 100644
index 00000000..5b34cdb9
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/dm/systems/cores/SlideGraphCoreProducer.h
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef SLIDEGRAPHCOREPRODUCERH
+#define SLIDEGRAPHCOREPRODUCERH
+#include "SimpleSlideGraphCore.h"
+#include "Qt3DSDMTransactions.h"
+#include "Qt3DSDMSignals.h"
+
+namespace qt3dsdm {
+class CSlideGraphCoreProducer : public ISlideGraphCore,
+ public ITransactionProducer,
+ public ISlideGraphCoreSignalProvider
+{
+ Q_DISABLE_COPY(CSlideGraphCoreProducer)
+
+ TSimpleSlideGraphCorePtr m_Data;
+ TTransactionConsumerPtr m_Consumer;
+ TSignalItemPtr m_Signaller;
+
+public:
+ CSlideGraphCoreProducer(TStringTablePtr strTable = TStringTablePtr())
+ : m_Data(new CSimpleSlideGraphCore(strTable))
+ {
+ InitSignaller();
+ }
+ TSimpleSlideGraphCorePtr GetTransactionlessSlideGraphCore() { return m_Data; }
+ TSimpleSlideGraphCorePtr GetTransactionlessSlideGraphCore() const { return m_Data; }
+
+ Qt3DSDMSlideGraphHandle CreateSlideGraph(Qt3DSDMSlideHandle inRoot) override;
+ Qt3DSDMSlideHandle GetGraphRoot(Qt3DSDMSlideGraphHandle inGraph) const override;
+ Qt3DSDMSlideGraphHandle GetSlideGraph(Qt3DSDMSlideHandle inSlide) const override;
+ void GetSlideGraphs(TSlideGraphHandleList &outGraphs) const override;
+ void DeleteSlideGraph(Qt3DSDMSlideGraphHandle inHandle) override;
+
+ void AssociateInstance(Qt3DSDMSlideGraphHandle inSlideGraph, Qt3DSDMSlideHandle inSlide,
+ Qt3DSDMInstanceHandle inInstance) override;
+ void GetAssociatedInstances(Qt3DSDMSlideGraphHandle inSlideGraph,
+ TSlideInstancePairList &outAssociations) const override;
+ TGraphSlidePair GetAssociatedGraph(Qt3DSDMInstanceHandle inInstance) const override;
+ void DissociateInstance(Qt3DSDMInstanceHandle inInstance) override;
+
+ void SetGraphActiveSlide(Qt3DSDMSlideGraphHandle inGraph, Qt3DSDMSlideHandle inSlide) override;
+ Qt3DSDMSlideHandle GetGraphActiveSlide(Qt3DSDMSlideGraphHandle inGraph) const override;
+
+ bool HandleValid(int inHandle) const override;
+ void SetConsumer(TTransactionConsumerPtr inConsumer) override;
+
+ //===================================================================
+ // Signals
+ //===================================================================
+ TSignalConnectionPtr ConnectGraphCreated(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback) override;
+ TSignalConnectionPtr ConnectGraphDeleted(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback) override;
+ TSignalConnectionPtr ConnectInstanceAssociated(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback) override;
+ TSignalConnectionPtr ConnectInstanceDissociated(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle, Qt3DSDMInstanceHandle)>
+ &inCallback) override;
+ TSignalConnectionPtr ConnectGraphActiveSlide(
+ const std::function<void(Qt3DSDMSlideGraphHandle, Qt3DSDMSlideHandle)> &inCallback) override;
+
+private:
+ void InitSignaller();
+ ISlideGraphCoreSignalProvider *GetSignalProvider();
+ ISlideGraphCoreSignalSender *GetSignalSender();
+};
+}
+
+#endif
diff --git a/src/Runtime/Source/engine/EnginePrefix.h b/src/Runtime/ogl-runtime/src/engine/EnginePrefix.h
index d9017850..d9017850 100644
--- a/src/Runtime/Source/engine/EnginePrefix.h
+++ b/src/Runtime/ogl-runtime/src/engine/EnginePrefix.h
diff --git a/src/Runtime/Source/engine/NVImageScaler.h b/src/Runtime/ogl-runtime/src/engine/NVImageScaler.h
index 069604a6..069604a6 100644
--- a/src/Runtime/Source/engine/NVImageScaler.h
+++ b/src/Runtime/ogl-runtime/src/engine/NVImageScaler.h
diff --git a/src/Runtime/Source/engine/OpenKodeInclude.h b/src/Runtime/ogl-runtime/src/engine/OpenKodeInclude.h
index 06bdf006..06bdf006 100644
--- a/src/Runtime/Source/engine/OpenKodeInclude.h
+++ b/src/Runtime/ogl-runtime/src/engine/OpenKodeInclude.h
diff --git a/src/Runtime/Source/engine/Qt3DSEGLInfo.h b/src/Runtime/ogl-runtime/src/engine/Qt3DSEGLInfo.h
index 7be2c09e..7be2c09e 100644
--- a/src/Runtime/Source/engine/Qt3DSEGLInfo.h
+++ b/src/Runtime/ogl-runtime/src/engine/Qt3DSEGLInfo.h
diff --git a/src/Runtime/Source/engine/Qt3DSEGLWindowSystem.h b/src/Runtime/ogl-runtime/src/engine/Qt3DSEGLWindowSystem.h
index 770f5c9f..770f5c9f 100644
--- a/src/Runtime/Source/engine/Qt3DSEGLWindowSystem.h
+++ b/src/Runtime/ogl-runtime/src/engine/Qt3DSEGLWindowSystem.h
diff --git a/src/Runtime/Source/engine/Qt3DSPluginDLL.h b/src/Runtime/ogl-runtime/src/engine/Qt3DSPluginDLL.h
index 1ba7cf08..1ba7cf08 100644
--- a/src/Runtime/Source/engine/Qt3DSPluginDLL.h
+++ b/src/Runtime/ogl-runtime/src/engine/Qt3DSPluginDLL.h
diff --git a/src/Runtime/Source/engine/Qt3DSRenderRuntimeBinding.cpp b/src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBinding.cpp
index cd99a95b..cd99a95b 100644
--- a/src/Runtime/Source/engine/Qt3DSRenderRuntimeBinding.cpp
+++ b/src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBinding.cpp
diff --git a/src/Runtime/Source/engine/Qt3DSRenderRuntimeBinding.h b/src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBinding.h
index ad0c4e6b..ad0c4e6b 100644
--- a/src/Runtime/Source/engine/Qt3DSRenderRuntimeBinding.h
+++ b/src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBinding.h
diff --git a/src/Runtime/Source/engine/Qt3DSRenderRuntimeBindingImpl.h b/src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBindingImpl.h
index 92cb8658..92cb8658 100644
--- a/src/Runtime/Source/engine/Qt3DSRenderRuntimeBindingImpl.h
+++ b/src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBindingImpl.h
diff --git a/src/Runtime/Source/engine/Qt3DSRenderRuntimeBindingImplRenderer.cpp b/src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBindingImplRenderer.cpp
index b41c83b9..b41c83b9 100644
--- a/src/Runtime/Source/engine/Qt3DSRenderRuntimeBindingImplRenderer.cpp
+++ b/src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBindingImplRenderer.cpp
diff --git a/src/Runtime/Source/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp b/src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
index a4b3bc7e..a4b3bc7e 100644
--- a/src/Runtime/Source/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
+++ b/src/Runtime/ogl-runtime/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
diff --git a/src/Runtime/Source/engine/Qt3DSRuntimeView.cpp b/src/Runtime/ogl-runtime/src/engine/Qt3DSRuntimeView.cpp
index fc6c3cac..fc6c3cac 100644
--- a/src/Runtime/Source/engine/Qt3DSRuntimeView.cpp
+++ b/src/Runtime/ogl-runtime/src/engine/Qt3DSRuntimeView.cpp
diff --git a/src/Runtime/Source/engine/Qt3DSRuntimeView.h b/src/Runtime/ogl-runtime/src/engine/Qt3DSRuntimeView.h
index 9ade9c7f..9ade9c7f 100644
--- a/src/Runtime/Source/engine/Qt3DSRuntimeView.h
+++ b/src/Runtime/ogl-runtime/src/engine/Qt3DSRuntimeView.h
diff --git a/src/Runtime/Source/engine/Qt3DSTegraInputEngine.cpp b/src/Runtime/ogl-runtime/src/engine/Qt3DSTegraInputEngine.cpp
index bb9a7f95..bb9a7f95 100644
--- a/src/Runtime/Source/engine/Qt3DSTegraInputEngine.cpp
+++ b/src/Runtime/ogl-runtime/src/engine/Qt3DSTegraInputEngine.cpp
diff --git a/src/Runtime/Source/engine/Qt3DSTegraInputEngine.h b/src/Runtime/ogl-runtime/src/engine/Qt3DSTegraInputEngine.h
index 29f20f29..29f20f29 100644
--- a/src/Runtime/Source/engine/Qt3DSTegraInputEngine.h
+++ b/src/Runtime/ogl-runtime/src/engine/Qt3DSTegraInputEngine.h
diff --git a/src/Runtime/Source/engine/Qt3DSWindowSystem.h b/src/Runtime/ogl-runtime/src/engine/Qt3DSWindowSystem.h
index 173dd837..173dd837 100644
--- a/src/Runtime/Source/engine/Qt3DSWindowSystem.h
+++ b/src/Runtime/ogl-runtime/src/engine/Qt3DSWindowSystem.h
diff --git a/src/Runtime/Source/event/EventFactory.cpp b/src/Runtime/ogl-runtime/src/event/EventFactory.cpp
index 4bf776c6..4bf776c6 100644
--- a/src/Runtime/Source/event/EventFactory.cpp
+++ b/src/Runtime/ogl-runtime/src/event/EventFactory.cpp
diff --git a/src/Runtime/Source/event/EventFactory.h b/src/Runtime/ogl-runtime/src/event/EventFactory.h
index 10fe6b72..10fe6b72 100644
--- a/src/Runtime/Source/event/EventFactory.h
+++ b/src/Runtime/ogl-runtime/src/event/EventFactory.h
diff --git a/src/Runtime/Source/event/EventPoller.cpp b/src/Runtime/ogl-runtime/src/event/EventPoller.cpp
index a8115953..a8115953 100644
--- a/src/Runtime/Source/event/EventPoller.cpp
+++ b/src/Runtime/ogl-runtime/src/event/EventPoller.cpp
diff --git a/src/Runtime/Source/event/EventPoller.h b/src/Runtime/ogl-runtime/src/event/EventPoller.h
index 99ac27d6..99ac27d6 100644
--- a/src/Runtime/Source/event/EventPoller.h
+++ b/src/Runtime/ogl-runtime/src/event/EventPoller.h
diff --git a/src/Runtime/Source/event/EventPollingSystem.h b/src/Runtime/ogl-runtime/src/event/EventPollingSystem.h
index 4d414066..4d414066 100644
--- a/src/Runtime/Source/event/EventPollingSystem.h
+++ b/src/Runtime/ogl-runtime/src/event/EventPollingSystem.h
diff --git a/src/Runtime/Source/event/EventSystem.h b/src/Runtime/ogl-runtime/src/event/EventSystem.h
index a9e3dbc5..a9e3dbc5 100644
--- a/src/Runtime/Source/event/EventSystem.h
+++ b/src/Runtime/ogl-runtime/src/event/EventSystem.h
diff --git a/src/Runtime/Source/event/EventSystemC.cpp b/src/Runtime/ogl-runtime/src/event/EventSystemC.cpp
index 8bfdb81c..8bfdb81c 100644
--- a/src/Runtime/Source/event/EventSystemC.cpp
+++ b/src/Runtime/ogl-runtime/src/event/EventSystemC.cpp
diff --git a/src/Runtime/Source/event/EventSystemC.h b/src/Runtime/ogl-runtime/src/event/EventSystemC.h
index 2517eae4..2517eae4 100644
--- a/src/Runtime/Source/event/EventSystemC.h
+++ b/src/Runtime/ogl-runtime/src/event/EventSystemC.h
diff --git a/src/Runtime/Source/event/test/CanProviderDemo.cpp b/src/Runtime/ogl-runtime/src/event/test/CanProviderDemo.cpp
index dc51e9db..dc51e9db 100644
--- a/src/Runtime/Source/event/test/CanProviderDemo.cpp
+++ b/src/Runtime/ogl-runtime/src/event/test/CanProviderDemo.cpp
diff --git a/src/Runtime/Source/event/test/CanProviderDemo.h b/src/Runtime/ogl-runtime/src/event/test/CanProviderDemo.h
index 7d6788bc..7d6788bc 100644
--- a/src/Runtime/Source/event/test/CanProviderDemo.h
+++ b/src/Runtime/ogl-runtime/src/event/test/CanProviderDemo.h
diff --git a/src/Runtime/Source/foundation/AutoDeallocatorAllocator.h b/src/Runtime/ogl-runtime/src/foundation/AutoDeallocatorAllocator.h
index 5cbbc8bb..5cbbc8bb 100644
--- a/src/Runtime/Source/foundation/AutoDeallocatorAllocator.h
+++ b/src/Runtime/ogl-runtime/src/foundation/AutoDeallocatorAllocator.h
diff --git a/src/Runtime/Source/foundation/ConvertUTF.cpp b/src/Runtime/ogl-runtime/src/foundation/ConvertUTF.cpp
index a71a3aeb..a71a3aeb 100644
--- a/src/Runtime/Source/foundation/ConvertUTF.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/ConvertUTF.cpp
diff --git a/src/Runtime/Source/foundation/ConvertUTF.h b/src/Runtime/ogl-runtime/src/foundation/ConvertUTF.h
index 93614a0c..93614a0c 100644
--- a/src/Runtime/Source/foundation/ConvertUTF.h
+++ b/src/Runtime/ogl-runtime/src/foundation/ConvertUTF.h
diff --git a/src/Runtime/Source/foundation/EASTL_new.cpp b/src/Runtime/ogl-runtime/src/foundation/EASTL_new.cpp
index 61e8e0b4..61e8e0b4 100644
--- a/src/Runtime/Source/foundation/EASTL_new.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/EASTL_new.cpp
diff --git a/src/Runtime/Source/foundation/FastAllocator.h b/src/Runtime/ogl-runtime/src/foundation/FastAllocator.h
index c296bcb6..c296bcb6 100644
--- a/src/Runtime/Source/foundation/FastAllocator.h
+++ b/src/Runtime/ogl-runtime/src/foundation/FastAllocator.h
diff --git a/src/Runtime/Source/foundation/FileTools.cpp b/src/Runtime/ogl-runtime/src/foundation/FileTools.cpp
index aa1e7384..aa1e7384 100644
--- a/src/Runtime/Source/foundation/FileTools.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/FileTools.cpp
diff --git a/src/Runtime/Source/foundation/FileTools.h b/src/Runtime/ogl-runtime/src/foundation/FileTools.h
index 57455256..57455256 100644
--- a/src/Runtime/Source/foundation/FileTools.h
+++ b/src/Runtime/ogl-runtime/src/foundation/FileTools.h
diff --git a/src/Runtime/Source/foundation/IOStreams.cpp b/src/Runtime/ogl-runtime/src/foundation/IOStreams.cpp
index f1adfbc0..f1adfbc0 100644
--- a/src/Runtime/Source/foundation/IOStreams.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/IOStreams.cpp
diff --git a/src/Runtime/Source/foundation/IOStreams.h b/src/Runtime/ogl-runtime/src/foundation/IOStreams.h
index 855e5209..855e5209 100644
--- a/src/Runtime/Source/foundation/IOStreams.h
+++ b/src/Runtime/ogl-runtime/src/foundation/IOStreams.h
diff --git a/src/Runtime/Source/foundation/LICENCE_SOCKET.TXT b/src/Runtime/ogl-runtime/src/foundation/LICENCE_SOCKET.TXT
index 9b9ab805..9b9ab805 100644
--- a/src/Runtime/Source/foundation/LICENCE_SOCKET.TXT
+++ b/src/Runtime/ogl-runtime/src/foundation/LICENCE_SOCKET.TXT
diff --git a/src/Runtime/Source/foundation/LICENSE_CONVERTUTF.TXT b/src/Runtime/ogl-runtime/src/foundation/LICENSE_CONVERTUTF.TXT
index 254acdfe..254acdfe 100644
--- a/src/Runtime/Source/foundation/LICENSE_CONVERTUTF.TXT
+++ b/src/Runtime/ogl-runtime/src/foundation/LICENSE_CONVERTUTF.TXT
diff --git a/src/Runtime/Source/foundation/PoolingAllocator.h b/src/Runtime/ogl-runtime/src/foundation/PoolingAllocator.h
index 9d939fdc..9d939fdc 100644
--- a/src/Runtime/Source/foundation/PoolingAllocator.h
+++ b/src/Runtime/ogl-runtime/src/foundation/PoolingAllocator.h
diff --git a/src/Runtime/Source/foundation/PreAllocatedAllocator.h b/src/Runtime/ogl-runtime/src/foundation/PreAllocatedAllocator.h
index aea03577..aea03577 100644
--- a/src/Runtime/Source/foundation/PreAllocatedAllocator.h
+++ b/src/Runtime/ogl-runtime/src/foundation/PreAllocatedAllocator.h
diff --git a/src/Runtime/Source/foundation/Qt3DS.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DS.h
index 041923c3..041923c3 100644
--- a/src/Runtime/Source/foundation/Qt3DS.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DS.h
diff --git a/src/Runtime/Source/foundation/Qt3DSAllocator.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSAllocator.h
index cdbbe5f9..cdbbe5f9 100644
--- a/src/Runtime/Source/foundation/Qt3DSAllocator.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSAllocator.h
diff --git a/src/Runtime/Source/foundation/Qt3DSAllocatorCallback.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSAllocatorCallback.h
index ebbf8198..ebbf8198 100644
--- a/src/Runtime/Source/foundation/Qt3DSAllocatorCallback.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSAllocatorCallback.h
diff --git a/src/Runtime/Source/foundation/Qt3DSAssert.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSAssert.h
index a628159f..a628159f 100644
--- a/src/Runtime/Source/foundation/Qt3DSAssert.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSAssert.h
diff --git a/src/Runtime/Source/foundation/Qt3DSAtomic.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSAtomic.h
index 69c7d3b4..69c7d3b4 100644
--- a/src/Runtime/Source/foundation/Qt3DSAtomic.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSAtomic.h
diff --git a/src/Runtime/Source/foundation/Qt3DSBasicTemplates.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSBasicTemplates.h
index f14c7b32..f14c7b32 100644
--- a/src/Runtime/Source/foundation/Qt3DSBasicTemplates.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSBasicTemplates.h
diff --git a/src/Runtime/Source/foundation/Qt3DSBounds3.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSBounds3.h
index fda4a6d4..fda4a6d4 100644
--- a/src/Runtime/Source/foundation/Qt3DSBounds3.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSBounds3.h
diff --git a/src/Runtime/Source/foundation/Qt3DSBroadcastingAllocator.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSBroadcastingAllocator.h
index dc6ae7b5..dc6ae7b5 100644
--- a/src/Runtime/Source/foundation/Qt3DSBroadcastingAllocator.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSBroadcastingAllocator.h
diff --git a/src/Runtime/Source/foundation/Qt3DSContainers.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSContainers.h
index de86d856..de86d856 100644
--- a/src/Runtime/Source/foundation/Qt3DSContainers.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSContainers.h
diff --git a/src/Runtime/Source/foundation/Qt3DSDataRef.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSDataRef.h
index ad860cef..ad860cef 100644
--- a/src/Runtime/Source/foundation/Qt3DSDataRef.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSDataRef.h
diff --git a/src/Runtime/Source/foundation/Qt3DSDiscriminatedUnion.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSDiscriminatedUnion.h
index 1957eb23..1957eb23 100644
--- a/src/Runtime/Source/foundation/Qt3DSDiscriminatedUnion.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSDiscriminatedUnion.h
diff --git a/src/Runtime/Source/foundation/Qt3DSFPU.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSFPU.h
index e4a47f0c..e4a47f0c 100644
--- a/src/Runtime/Source/foundation/Qt3DSFPU.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSFPU.h
diff --git a/src/Runtime/Source/foundation/Qt3DSFastIPC.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSFastIPC.h
index 800c3dfd..800c3dfd 100644
--- a/src/Runtime/Source/foundation/Qt3DSFastIPC.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSFastIPC.h
diff --git a/src/Runtime/Source/foundation/Qt3DSFlags.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSFlags.h
index 765f386f..765f386f 100644
--- a/src/Runtime/Source/foundation/Qt3DSFlags.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSFlags.h
diff --git a/src/Runtime/Source/foundation/Qt3DSFoundation.cpp b/src/Runtime/ogl-runtime/src/foundation/Qt3DSFoundation.cpp
index 8687cd69..8687cd69 100644
--- a/src/Runtime/Source/foundation/Qt3DSFoundation.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSFoundation.cpp
diff --git a/src/Runtime/Source/foundation/Qt3DSFoundation.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSFoundation.h
index 19065d20..19065d20 100644
--- a/src/Runtime/Source/foundation/Qt3DSFoundation.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSFoundation.h
diff --git a/src/Runtime/Source/foundation/Qt3DSIPC.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSIPC.h
index 9bcea1af..9bcea1af 100644
--- a/src/Runtime/Source/foundation/Qt3DSIPC.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSIPC.h
diff --git a/src/Runtime/Source/foundation/Qt3DSIndexableLinkedList.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSIndexableLinkedList.h
index ff36b42a..ff36b42a 100644
--- a/src/Runtime/Source/foundation/Qt3DSIndexableLinkedList.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSIndexableLinkedList.h
diff --git a/src/Runtime/Source/foundation/Qt3DSIntrinsics.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSIntrinsics.h
index 1d6ac7a5..1d6ac7a5 100644
--- a/src/Runtime/Source/foundation/Qt3DSIntrinsics.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSIntrinsics.h
diff --git a/src/Runtime/Source/foundation/Qt3DSInvasiveLinkedList.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSInvasiveLinkedList.h
index da90e120..da90e120 100644
--- a/src/Runtime/Source/foundation/Qt3DSInvasiveLinkedList.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSInvasiveLinkedList.h
diff --git a/src/Runtime/Source/foundation/Qt3DSInvasiveSet.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSInvasiveSet.h
index 772a2308..772a2308 100644
--- a/src/Runtime/Source/foundation/Qt3DSInvasiveSet.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSInvasiveSet.h
diff --git a/src/Runtime/Source/foundation/Qt3DSLogging.cpp b/src/Runtime/ogl-runtime/src/foundation/Qt3DSLogging.cpp
index 257b39b2..257b39b2 100644
--- a/src/Runtime/Source/foundation/Qt3DSLogging.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSLogging.cpp
diff --git a/src/Runtime/Source/foundation/Qt3DSLogging.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSLogging.h
index 4fcb77b5..4fcb77b5 100644
--- a/src/Runtime/Source/foundation/Qt3DSLogging.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSLogging.h
diff --git a/src/Runtime/Source/foundation/Qt3DSMat33.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSMat33.h
index 6fa69eb5..6fa69eb5 100644
--- a/src/Runtime/Source/foundation/Qt3DSMat33.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSMat33.h
diff --git a/src/Runtime/Source/foundation/Qt3DSMat44.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSMat44.h
index 53a66e2b..53a66e2b 100644
--- a/src/Runtime/Source/foundation/Qt3DSMat44.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSMat44.h
diff --git a/src/Runtime/Source/foundation/Qt3DSMath.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSMath.h
index 931852e7..931852e7 100644
--- a/src/Runtime/Source/foundation/Qt3DSMath.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSMath.h
diff --git a/src/Runtime/Source/foundation/Qt3DSMathUtils.cpp b/src/Runtime/ogl-runtime/src/foundation/Qt3DSMathUtils.cpp
index 7eee7405..7eee7405 100644
--- a/src/Runtime/Source/foundation/Qt3DSMathUtils.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSMathUtils.cpp
diff --git a/src/Runtime/Source/foundation/Qt3DSMathUtils.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSMathUtils.h
index 6d3d0abc..6d3d0abc 100644
--- a/src/Runtime/Source/foundation/Qt3DSMathUtils.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSMathUtils.h
diff --git a/src/Runtime/Source/foundation/Qt3DSMemoryBuffer.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSMemoryBuffer.h
index bee2f0c2..bee2f0c2 100644
--- a/src/Runtime/Source/foundation/Qt3DSMemoryBuffer.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSMemoryBuffer.h
diff --git a/src/Runtime/Source/foundation/Qt3DSMutex.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSMutex.h
index 5b717e5c..5b717e5c 100644
--- a/src/Runtime/Source/foundation/Qt3DSMutex.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSMutex.h
diff --git a/src/Runtime/Source/foundation/Qt3DSNoCopy.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSNoCopy.h
index 817f5e19..817f5e19 100644
--- a/src/Runtime/Source/foundation/Qt3DSNoCopy.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSNoCopy.h
diff --git a/src/Runtime/Source/foundation/Qt3DSOption.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSOption.h
index 18d6c3b2..18d6c3b2 100644
--- a/src/Runtime/Source/foundation/Qt3DSOption.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSOption.h
diff --git a/src/Runtime/Source/foundation/Qt3DSPerfTimer.cpp b/src/Runtime/ogl-runtime/src/foundation/Qt3DSPerfTimer.cpp
index 06fb5d38..06fb5d38 100644
--- a/src/Runtime/Source/foundation/Qt3DSPerfTimer.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSPerfTimer.cpp
diff --git a/src/Runtime/Source/foundation/Qt3DSPerfTimer.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSPerfTimer.h
index c63091c0..c63091c0 100644
--- a/src/Runtime/Source/foundation/Qt3DSPerfTimer.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSPerfTimer.h
diff --git a/src/Runtime/Source/foundation/Qt3DSPlane.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSPlane.h
index 378c3bc9..378c3bc9 100644
--- a/src/Runtime/Source/foundation/Qt3DSPlane.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSPlane.h
diff --git a/src/Runtime/Source/foundation/Qt3DSPool.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSPool.h
index 5bd07f86..5bd07f86 100644
--- a/src/Runtime/Source/foundation/Qt3DSPool.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSPool.h
diff --git a/src/Runtime/Source/foundation/Qt3DSPreprocessor.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSPreprocessor.h
index 371d3e67..371d3e67 100644
--- a/src/Runtime/Source/foundation/Qt3DSPreprocessor.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSPreprocessor.h
diff --git a/src/Runtime/Source/foundation/Qt3DSQuat.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSQuat.h
index 2792f977..2792f977 100644
--- a/src/Runtime/Source/foundation/Qt3DSQuat.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSQuat.h
diff --git a/src/Runtime/Source/foundation/Qt3DSRefCounted.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSRefCounted.h
index b500b5fc..b500b5fc 100644
--- a/src/Runtime/Source/foundation/Qt3DSRefCounted.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSRefCounted.h
diff --git a/src/Runtime/Source/foundation/Qt3DSSemaphore.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSSemaphore.h
index f58bb6e0..f58bb6e0 100644
--- a/src/Runtime/Source/foundation/Qt3DSSemaphore.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSSemaphore.h
diff --git a/src/Runtime/Source/foundation/Qt3DSSimpleTypes.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSSimpleTypes.h
index d73be064..92f17245 100644
--- a/src/Runtime/Source/foundation/Qt3DSSimpleTypes.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSSimpleTypes.h
@@ -38,6 +38,7 @@
// Platform specific types:
// Design note: Its OK to use int for general loop variables and temps.
+#include <QtCore/qglobal.h>
#include "foundation/Qt3DS.h"
#include "foundation/Qt3DSPreprocessor.h"
#include "EABase/eabase.h"
@@ -45,14 +46,21 @@
namespace qt3ds {
#endif //#ifndef QT3DS_DOXYGEN
-typedef uint8_t QT3DSU8;
-typedef int8_t QT3DSI8;
-typedef uint16_t QT3DSU16;
-typedef int16_t QT3DSI16;
-typedef uint32_t QT3DSU32;
-typedef int32_t QT3DSI32;
-typedef uint64_t QT3DSU64;
-typedef int64_t QT3DSI64;
+typedef quint8 QT3DSU8;
+typedef qint8 QT3DSI8;
+typedef quint16 QT3DSU16;
+typedef qint16 QT3DSI16;
+typedef quint32 QT3DSU32;
+typedef qint32 QT3DSI32;
+
+// Android's definition of GLuint64 as unsigned long (64-bits) requires this workaround
+#if Q_PROCESSOR_WORDSIZE == 8 && defined(Q_OS_ANDROID)
+typedef unsigned long QT3DSU64;
+#else
+typedef quint64 QT3DSU64;
+#endif
+
+typedef qint64 QT3DSI64;
typedef float QT3DSF32;
typedef double QT3DSF64;
typedef QT3DSI32 IntBool;
diff --git a/src/Runtime/Source/foundation/Qt3DSStringTokenizer.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSStringTokenizer.h
index 5229babd..5229babd 100644
--- a/src/Runtime/Source/foundation/Qt3DSStringTokenizer.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSStringTokenizer.h
diff --git a/src/Runtime/Source/foundation/Qt3DSSync.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSSync.h
index a36afaeb..a36afaeb 100644
--- a/src/Runtime/Source/foundation/Qt3DSSync.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSSync.h
diff --git a/src/Runtime/Source/foundation/Qt3DSSystem.cpp b/src/Runtime/ogl-runtime/src/foundation/Qt3DSSystem.cpp
index e87a25ea..e87a25ea 100644
--- a/src/Runtime/Source/foundation/Qt3DSSystem.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSSystem.cpp
diff --git a/src/Runtime/Source/foundation/Qt3DSSystem.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSSystem.h
index 84ca87d1..84ca87d1 100644
--- a/src/Runtime/Source/foundation/Qt3DSSystem.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSSystem.h
diff --git a/src/Runtime/Source/foundation/Qt3DSThread.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSThread.h
index 84e169d6..84e169d6 100644
--- a/src/Runtime/Source/foundation/Qt3DSThread.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSThread.h
diff --git a/src/Runtime/Source/foundation/Qt3DSTime.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSTime.h
index 955bd7e0..955bd7e0 100644
--- a/src/Runtime/Source/foundation/Qt3DSTime.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSTime.h
diff --git a/src/Runtime/Source/foundation/Qt3DSTransform.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSTransform.h
index 0fee0a81..0fee0a81 100644
--- a/src/Runtime/Source/foundation/Qt3DSTransform.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSTransform.h
diff --git a/src/Runtime/Source/foundation/Qt3DSUnionCast.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSUnionCast.h
index a3d03555..a3d03555 100644
--- a/src/Runtime/Source/foundation/Qt3DSUnionCast.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSUnionCast.h
diff --git a/src/Runtime/Source/foundation/Qt3DSUtilities.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSUtilities.h
index cb9ae6a2..cb9ae6a2 100644
--- a/src/Runtime/Source/foundation/Qt3DSUtilities.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSUtilities.h
diff --git a/src/Runtime/Source/foundation/Qt3DSVec2.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSVec2.h
index 0d86c915..0d86c915 100644
--- a/src/Runtime/Source/foundation/Qt3DSVec2.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSVec2.h
diff --git a/src/Runtime/Source/foundation/Qt3DSVec3.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSVec3.h
index 24ab8231..24ab8231 100644
--- a/src/Runtime/Source/foundation/Qt3DSVec3.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSVec3.h
diff --git a/src/Runtime/Source/foundation/Qt3DSVec4.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSVec4.h
index acccd48c..acccd48c 100644
--- a/src/Runtime/Source/foundation/Qt3DSVec4.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSVec4.h
diff --git a/src/Runtime/Source/foundation/Qt3DSVersionNumber.h b/src/Runtime/ogl-runtime/src/foundation/Qt3DSVersionNumber.h
index 5942ef72..5942ef72 100644
--- a/src/Runtime/Source/foundation/Qt3DSVersionNumber.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Qt3DSVersionNumber.h
diff --git a/src/Runtime/Source/foundation/SerializationTypes.h b/src/Runtime/ogl-runtime/src/foundation/SerializationTypes.h
index c7fe5ce7..c7fe5ce7 100644
--- a/src/Runtime/Source/foundation/SerializationTypes.h
+++ b/src/Runtime/ogl-runtime/src/foundation/SerializationTypes.h
diff --git a/src/Runtime/Source/foundation/Socket.cpp b/src/Runtime/ogl-runtime/src/foundation/Socket.cpp
index df00e606..df00e606 100644
--- a/src/Runtime/Source/foundation/Socket.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/Socket.cpp
diff --git a/src/Runtime/Source/foundation/Socket.h b/src/Runtime/ogl-runtime/src/foundation/Socket.h
index f561ab83..f561ab83 100644
--- a/src/Runtime/Source/foundation/Socket.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Socket.h
diff --git a/src/Runtime/Source/foundation/StrConvertUTF.h b/src/Runtime/ogl-runtime/src/foundation/StrConvertUTF.h
index 965867c9..965867c9 100644
--- a/src/Runtime/Source/foundation/StrConvertUTF.h
+++ b/src/Runtime/ogl-runtime/src/foundation/StrConvertUTF.h
diff --git a/src/Runtime/Source/foundation/StringConversion.h b/src/Runtime/ogl-runtime/src/foundation/StringConversion.h
index a55ebb3e..a55ebb3e 100644
--- a/src/Runtime/Source/foundation/StringConversion.h
+++ b/src/Runtime/ogl-runtime/src/foundation/StringConversion.h
diff --git a/src/Runtime/Source/foundation/StringConversionImpl.h b/src/Runtime/ogl-runtime/src/foundation/StringConversionImpl.h
index c5063e6d..c5063e6d 100644
--- a/src/Runtime/Source/foundation/StringConversionImpl.h
+++ b/src/Runtime/ogl-runtime/src/foundation/StringConversionImpl.h
diff --git a/src/Runtime/Source/foundation/StringTable.cpp b/src/Runtime/ogl-runtime/src/foundation/StringTable.cpp
index 47130dca..47130dca 100644
--- a/src/Runtime/Source/foundation/StringTable.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/StringTable.cpp
diff --git a/src/Runtime/Source/foundation/StringTable.h b/src/Runtime/ogl-runtime/src/foundation/StringTable.h
index aa57857a..aa57857a 100644
--- a/src/Runtime/Source/foundation/StringTable.h
+++ b/src/Runtime/ogl-runtime/src/foundation/StringTable.h
diff --git a/src/Runtime/Source/foundation/StringTools.h b/src/Runtime/ogl-runtime/src/foundation/StringTools.h
index 43324b46..43324b46 100644
--- a/src/Runtime/Source/foundation/StringTools.h
+++ b/src/Runtime/ogl-runtime/src/foundation/StringTools.h
diff --git a/src/Runtime/Source/foundation/TaggedPointer.h b/src/Runtime/ogl-runtime/src/foundation/TaggedPointer.h
index aa227250..aa227250 100644
--- a/src/Runtime/Source/foundation/TaggedPointer.h
+++ b/src/Runtime/ogl-runtime/src/foundation/TaggedPointer.h
diff --git a/src/Runtime/Source/foundation/ThreadSafeQueue.h b/src/Runtime/ogl-runtime/src/foundation/ThreadSafeQueue.h
index 462b6d49..462b6d49 100644
--- a/src/Runtime/Source/foundation/ThreadSafeQueue.h
+++ b/src/Runtime/ogl-runtime/src/foundation/ThreadSafeQueue.h
diff --git a/src/Runtime/Source/foundation/TrackingAllocator.cpp b/src/Runtime/ogl-runtime/src/foundation/TrackingAllocator.cpp
index 242b0ac0..242b0ac0 100644
--- a/src/Runtime/Source/foundation/TrackingAllocator.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/TrackingAllocator.cpp
diff --git a/src/Runtime/Source/foundation/TrackingAllocator.h b/src/Runtime/ogl-runtime/src/foundation/TrackingAllocator.h
index 4fd58069..4fd58069 100644
--- a/src/Runtime/Source/foundation/TrackingAllocator.h
+++ b/src/Runtime/ogl-runtime/src/foundation/TrackingAllocator.h
diff --git a/src/Runtime/Source/foundation/Utils.h b/src/Runtime/ogl-runtime/src/foundation/Utils.h
index 33c24004..33c24004 100644
--- a/src/Runtime/Source/foundation/Utils.h
+++ b/src/Runtime/ogl-runtime/src/foundation/Utils.h
diff --git a/src/Runtime/Source/foundation/XML.cpp b/src/Runtime/ogl-runtime/src/foundation/XML.cpp
index 34840103..bd12dfaf 100644
--- a/src/Runtime/Source/foundation/XML.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/XML.cpp
@@ -39,7 +39,6 @@
#include "foundation/Utils.h"
#include "foundation/Qt3DSAtomic.h"
#include "EASTL/hash_map.h"
-#include "utf8.h"
#ifdef QT3DS_VC
#include <windows.h> //output debug string
@@ -435,45 +434,9 @@ struct SimpleXmlWriter
Write(SNameNS(name, ns));
Write("=\"");
- size_t valueLen = strlen(nonNull(value));
- TXMLCharPtr start = value;
- TXMLCharPtr end = value + valueLen;
- TXMLCharPtr last = start;
- uint32_t item = 0;
- // Write out the data escaping unicode values where necessary
- // I am using utf8::internal because it returns an error code and does not through
- // exceptions; we don't always know the system we are running on will support or handle
- // exceptions gracefully.
- for (utf8::internal::utf_error err_code = utf8::internal::validate_next(start, end, item);
- last != end && err_code == utf8::internal::UTF8_OK;
- err_code = utf8::internal::validate_next(start, end, item)) {
- switch (item) {
- case '\r':
- break;
- case '\n':
- Write("&#10;");
- break;
- case '\t':
- Write("&#09;");
- break;
- case '<':
- Write("&lt;");
- break;
- case '>':
- Write("&gt;");
- break;
- case '"':
- Write("&quot;");
- break;
- case '&':
- Write("&amp;");
- break;
- default:
- m_Stream.Write(NVConstDataRef<QT3DSU8>((const QT3DSU8 *)last, (QT3DSU32)(start - last)));
- break;
- }
- last = start;
- }
+
+ QString str = QString::fromUtf8(nonNull(value)).toHtmlEscaped();
+ Write(str.toUtf8().constData());
Write("\"");
}
template <typename TData>
@@ -486,32 +449,9 @@ struct SimpleXmlWriter
{
if (!isTrivial(value)) {
Close(false);
- size_t valueLen = strlen(nonNull(value));
- TXMLCharPtr start = value;
- TXMLCharPtr end = value + valueLen;
- TXMLCharPtr last = start;
- uint32_t item = 0;
- // Write out the data escaping unicode values where necessary
- for (utf8::internal::utf_error err_code =
- utf8::internal::validate_next(start, end, item);
- last != end && err_code == utf8::internal::UTF8_OK;
- err_code = utf8::internal::validate_next(start, end, item)) {
- switch (item) {
- case '<':
- Write("&lt;");
- break;
- case '>':
- Write("&gt;");
- break;
- case '&':
- Write("&amp;");
- break;
- default:
- m_Stream.Write(NVConstDataRef<QT3DSU8>((const QT3DSU8 *)last, (QT3DSU32)(start - last)));
- break;
- }
- last = start;
- }
+
+ QString str = QString::fromUtf8(nonNull(value)).toHtmlEscaped();
+ Write(str.toUtf8().constData());
m_OpenElements.back().second = true;
}
}
diff --git a/src/Runtime/Source/foundation/XML.h b/src/Runtime/ogl-runtime/src/foundation/XML.h
index 360bfdd7..360bfdd7 100644
--- a/src/Runtime/Source/foundation/XML.h
+++ b/src/Runtime/ogl-runtime/src/foundation/XML.h
diff --git a/src/Runtime/Source/foundation/linux/LICENSE.TXT b/src/Runtime/ogl-runtime/src/foundation/linux/LICENSE.TXT
index f40caef8..f40caef8 100644
--- a/src/Runtime/Source/foundation/linux/LICENSE.TXT
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/LICENSE.TXT
diff --git a/src/Runtime/Source/foundation/linux/Qt3DSLinuxAoS.h b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxAoS.h
index 6bcb4406..6bcb4406 100644
--- a/src/Runtime/Source/foundation/linux/Qt3DSLinuxAoS.h
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxAoS.h
diff --git a/src/Runtime/Source/foundation/linux/Qt3DSLinuxAtomic.cpp b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxAtomic.cpp
index f0045dd9..f0045dd9 100644
--- a/src/Runtime/Source/foundation/linux/Qt3DSLinuxAtomic.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxAtomic.cpp
diff --git a/src/Runtime/Source/foundation/linux/Qt3DSLinuxFPU.cpp b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxFPU.cpp
index c3eae215..c3eae215 100644
--- a/src/Runtime/Source/foundation/linux/Qt3DSLinuxFPU.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxFPU.cpp
diff --git a/src/Runtime/Source/foundation/linux/Qt3DSLinuxFile.h b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxFile.h
index 1369735f..1369735f 100644
--- a/src/Runtime/Source/foundation/linux/Qt3DSLinuxFile.h
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxFile.h
diff --git a/src/Runtime/Source/foundation/linux/Qt3DSLinuxInlineAoS.h b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxInlineAoS.h
index 0443ba90..0443ba90 100644
--- a/src/Runtime/Source/foundation/linux/Qt3DSLinuxInlineAoS.h
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxInlineAoS.h
diff --git a/src/Runtime/Source/foundation/linux/Qt3DSLinuxIntrinsics.h b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxIntrinsics.h
index 70974609..70974609 100644
--- a/src/Runtime/Source/foundation/linux/Qt3DSLinuxIntrinsics.h
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxIntrinsics.h
diff --git a/src/Runtime/Source/foundation/linux/Qt3DSLinuxMutex.cpp b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxMutex.cpp
index bbc55829..bbc55829 100644
--- a/src/Runtime/Source/foundation/linux/Qt3DSLinuxMutex.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxMutex.cpp
diff --git a/src/Runtime/Source/foundation/linux/Qt3DSLinuxSemaphore.cpp b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxSemaphore.cpp
index 90aab79a..90aab79a 100644
--- a/src/Runtime/Source/foundation/linux/Qt3DSLinuxSemaphore.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxSemaphore.cpp
diff --git a/src/Runtime/Source/foundation/linux/Qt3DSLinuxString.h b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxString.h
index a4645f2b..a4645f2b 100644
--- a/src/Runtime/Source/foundation/linux/Qt3DSLinuxString.h
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxString.h
diff --git a/src/Runtime/Source/foundation/linux/Qt3DSLinuxSync.cpp b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxSync.cpp
index 52f9d7ab..52f9d7ab 100644
--- a/src/Runtime/Source/foundation/linux/Qt3DSLinuxSync.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxSync.cpp
diff --git a/src/Runtime/Source/foundation/linux/Qt3DSLinuxThread.cpp b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxThread.cpp
index fa6e069e..fa6e069e 100644
--- a/src/Runtime/Source/foundation/linux/Qt3DSLinuxThread.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxThread.cpp
diff --git a/src/Runtime/Source/foundation/linux/Qt3DSLinuxTime.cpp b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxTime.cpp
index 6b3e93e4..6b3e93e4 100644
--- a/src/Runtime/Source/foundation/linux/Qt3DSLinuxTime.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxTime.cpp
diff --git a/src/Runtime/Source/foundation/linux/Qt3DSLinuxTrigConstants.h b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxTrigConstants.h
index 120dec78..120dec78 100644
--- a/src/Runtime/Source/foundation/linux/Qt3DSLinuxTrigConstants.h
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/Qt3DSLinuxTrigConstants.h
diff --git a/src/Runtime/Source/foundation/linux/SocketImpl.h b/src/Runtime/ogl-runtime/src/foundation/linux/SocketImpl.h
index 4c3fcb73..4c3fcb73 100644
--- a/src/Runtime/Source/foundation/linux/SocketImpl.h
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/SocketImpl.h
diff --git a/src/Runtime/Source/foundation/linux/qt_attribution.json b/src/Runtime/ogl-runtime/src/foundation/linux/qt_attribution.json
index 3c3bed6b..3c3bed6b 100644
--- a/src/Runtime/Source/foundation/linux/qt_attribution.json
+++ b/src/Runtime/ogl-runtime/src/foundation/linux/qt_attribution.json
diff --git a/src/Runtime/Source/foundation/macos/Qt3DSUnixAtomic.cpp b/src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixAtomic.cpp
index c1ac3965..c1ac3965 100644
--- a/src/Runtime/Source/foundation/macos/Qt3DSUnixAtomic.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixAtomic.cpp
diff --git a/src/Runtime/Source/foundation/macos/Qt3DSUnixFPU.cpp b/src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixFPU.cpp
index 59c9850d..59c9850d 100644
--- a/src/Runtime/Source/foundation/macos/Qt3DSUnixFPU.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixFPU.cpp
diff --git a/src/Runtime/Source/foundation/macos/Qt3DSUnixMutex.cpp b/src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixMutex.cpp
index bbc55829..bbc55829 100644
--- a/src/Runtime/Source/foundation/macos/Qt3DSUnixMutex.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixMutex.cpp
diff --git a/src/Runtime/Source/foundation/macos/Qt3DSUnixSemaphore.cpp b/src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixSemaphore.cpp
index 90aab79a..90aab79a 100644
--- a/src/Runtime/Source/foundation/macos/Qt3DSUnixSemaphore.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixSemaphore.cpp
diff --git a/src/Runtime/Source/foundation/macos/Qt3DSUnixSync.cpp b/src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixSync.cpp
index 52f9d7ab..52f9d7ab 100644
--- a/src/Runtime/Source/foundation/macos/Qt3DSUnixSync.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixSync.cpp
diff --git a/src/Runtime/Source/foundation/macos/Qt3DSUnixTime.cpp b/src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixTime.cpp
index 58eadcb6..58eadcb6 100644
--- a/src/Runtime/Source/foundation/macos/Qt3DSUnixTime.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/macos/Qt3DSUnixTime.cpp
diff --git a/src/Runtime/Source/foundation/qt_attribution.json b/src/Runtime/ogl-runtime/src/foundation/qt_attribution.json
index 537d8be3..537d8be3 100644
--- a/src/Runtime/Source/foundation/qt_attribution.json
+++ b/src/Runtime/ogl-runtime/src/foundation/qt_attribution.json
diff --git a/src/Runtime/Source/foundation/windows/LICENSE.TXT b/src/Runtime/ogl-runtime/src/foundation/windows/LICENSE.TXT
index f40caef8..f40caef8 100644
--- a/src/Runtime/Source/foundation/windows/LICENSE.TXT
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/LICENSE.TXT
diff --git a/src/Runtime/Source/foundation/windows/Qt3DSWindowsAoS.h b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsAoS.h
index c654ec79..c654ec79 100644
--- a/src/Runtime/Source/foundation/windows/Qt3DSWindowsAoS.h
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsAoS.h
diff --git a/src/Runtime/Source/foundation/windows/Qt3DSWindowsAtomic.cpp b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsAtomic.cpp
index 4f95d3dd..4f95d3dd 100644
--- a/src/Runtime/Source/foundation/windows/Qt3DSWindowsAtomic.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsAtomic.cpp
diff --git a/src/Runtime/Source/foundation/windows/Qt3DSWindowsFPU.cpp b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsFPU.cpp
index 47242801..47242801 100644
--- a/src/Runtime/Source/foundation/windows/Qt3DSWindowsFPU.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsFPU.cpp
diff --git a/src/Runtime/Source/foundation/windows/Qt3DSWindowsFile.h b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsFile.h
index 6c232a54..6c232a54 100644
--- a/src/Runtime/Source/foundation/windows/Qt3DSWindowsFile.h
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsFile.h
diff --git a/src/Runtime/Source/foundation/windows/Qt3DSWindowsInclude.h b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsInclude.h
index f01c9f1a..f01c9f1a 100644
--- a/src/Runtime/Source/foundation/windows/Qt3DSWindowsInclude.h
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsInclude.h
diff --git a/src/Runtime/Source/foundation/windows/Qt3DSWindowsInlineAoS.h b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsInlineAoS.h
index 60c57894..60c57894 100644
--- a/src/Runtime/Source/foundation/windows/Qt3DSWindowsInlineAoS.h
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsInlineAoS.h
diff --git a/src/Runtime/Source/foundation/windows/Qt3DSWindowsIntrinsics.h b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsIntrinsics.h
index 3e0b3e8f..3e0b3e8f 100644
--- a/src/Runtime/Source/foundation/windows/Qt3DSWindowsIntrinsics.h
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsIntrinsics.h
diff --git a/src/Runtime/Source/foundation/windows/Qt3DSWindowsMutex.cpp b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsMutex.cpp
index c5fef09f..c5fef09f 100644
--- a/src/Runtime/Source/foundation/windows/Qt3DSWindowsMutex.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsMutex.cpp
diff --git a/src/Runtime/Source/foundation/windows/Qt3DSWindowsSemaphore.cpp b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsSemaphore.cpp
index bb14c104..bb14c104 100644
--- a/src/Runtime/Source/foundation/windows/Qt3DSWindowsSemaphore.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsSemaphore.cpp
diff --git a/src/Runtime/Source/foundation/windows/Qt3DSWindowsString.h b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsString.h
index 8d5fcd31..8d5fcd31 100644
--- a/src/Runtime/Source/foundation/windows/Qt3DSWindowsString.h
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsString.h
diff --git a/src/Runtime/Source/foundation/windows/Qt3DSWindowsSync.cpp b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsSync.cpp
index 49667e94..49667e94 100644
--- a/src/Runtime/Source/foundation/windows/Qt3DSWindowsSync.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsSync.cpp
diff --git a/src/Runtime/Source/foundation/windows/Qt3DSWindowsThread.cpp b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsThread.cpp
index 3a30de8c..3a30de8c 100644
--- a/src/Runtime/Source/foundation/windows/Qt3DSWindowsThread.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsThread.cpp
diff --git a/src/Runtime/Source/foundation/windows/Qt3DSWindowsTime.cpp b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsTime.cpp
index 9215d642..9215d642 100644
--- a/src/Runtime/Source/foundation/windows/Qt3DSWindowsTime.cpp
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsTime.cpp
diff --git a/src/Runtime/Source/foundation/windows/Qt3DSWindowsTrigConstants.h b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsTrigConstants.h
index e3da844c..e3da844c 100644
--- a/src/Runtime/Source/foundation/windows/Qt3DSWindowsTrigConstants.h
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/Qt3DSWindowsTrigConstants.h
diff --git a/src/Runtime/Source/foundation/windows/SocketImpl.h b/src/Runtime/ogl-runtime/src/foundation/windows/SocketImpl.h
index f72203bd..f72203bd 100644
--- a/src/Runtime/Source/foundation/windows/SocketImpl.h
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/SocketImpl.h
diff --git a/src/Runtime/Source/foundation/windows/qt_attribution.json b/src/Runtime/ogl-runtime/src/foundation/windows/qt_attribution.json
index e0310cfa..e0310cfa 100644
--- a/src/Runtime/Source/foundation/windows/qt_attribution.json
+++ b/src/Runtime/ogl-runtime/src/foundation/windows/qt_attribution.json
diff --git a/src/Runtime/Source/hdr/CUDABSDFMipmap.cpp b/src/Runtime/ogl-runtime/src/hdr/CUDABSDFMipmap.cpp
index 94f6712f..94f6712f 100644
--- a/src/Runtime/Source/hdr/CUDABSDFMipmap.cpp
+++ b/src/Runtime/ogl-runtime/src/hdr/CUDABSDFMipmap.cpp
diff --git a/src/Runtime/Source/hdr/CUDABSDFMipmap.h b/src/Runtime/ogl-runtime/src/hdr/CUDABSDFMipmap.h
index 33e0b91c..33e0b91c 100644
--- a/src/Runtime/Source/hdr/CUDABSDFMipmap.h
+++ b/src/Runtime/ogl-runtime/src/hdr/CUDABSDFMipmap.h
diff --git a/src/Runtime/Source/hdr/GLComputeMipMap.h b/src/Runtime/ogl-runtime/src/hdr/GLComputeMipMap.h
index a1a7ce5f..a1a7ce5f 100644
--- a/src/Runtime/Source/hdr/GLComputeMipMap.h
+++ b/src/Runtime/ogl-runtime/src/hdr/GLComputeMipMap.h
diff --git a/src/Runtime/Source/hdr/GLComputeMipmap.cpp b/src/Runtime/ogl-runtime/src/hdr/GLComputeMipmap.cpp
index 36b550dd..36b550dd 100644
--- a/src/Runtime/Source/hdr/GLComputeMipmap.cpp
+++ b/src/Runtime/ogl-runtime/src/hdr/GLComputeMipmap.cpp
diff --git a/src/Runtime/Source/hdr/HDR.cpp b/src/Runtime/ogl-runtime/src/hdr/HDR.cpp
index 9abe2b3b..9abe2b3b 100644
--- a/src/Runtime/Source/hdr/HDR.cpp
+++ b/src/Runtime/ogl-runtime/src/hdr/HDR.cpp
diff --git a/src/Runtime/Source/hdr/HDR.h b/src/Runtime/ogl-runtime/src/hdr/HDR.h
index fbc4ea41..fbc4ea41 100644
--- a/src/Runtime/Source/hdr/HDR.h
+++ b/src/Runtime/ogl-runtime/src/hdr/HDR.h
diff --git a/src/Runtime/Source/hdr/MipmapBSDF.cpp b/src/Runtime/ogl-runtime/src/hdr/MipmapBSDF.cpp
index fd57015e..fd57015e 100644
--- a/src/Runtime/Source/hdr/MipmapBSDF.cpp
+++ b/src/Runtime/ogl-runtime/src/hdr/MipmapBSDF.cpp
diff --git a/src/Runtime/Source/hdr/MipmapBSDF.cu b/src/Runtime/ogl-runtime/src/hdr/MipmapBSDF.cu
index 6ddac4be..6ddac4be 100644
--- a/src/Runtime/Source/hdr/MipmapBSDF.cu
+++ b/src/Runtime/ogl-runtime/src/hdr/MipmapBSDF.cu
diff --git a/src/Runtime/Source/hdr/MipmapBSDF.h b/src/Runtime/ogl-runtime/src/hdr/MipmapBSDF.h
index be8f1366..be8f1366 100644
--- a/src/Runtime/Source/hdr/MipmapBSDF.h
+++ b/src/Runtime/ogl-runtime/src/hdr/MipmapBSDF.h
diff --git a/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportContainers.h b/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportContainers.h
new file mode 100644
index 00000000..2f2a72ee
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportContainers.h
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DS_IMPORT_CONTAINERS_H
+#define QT3DS_IMPORT_CONTAINERS_H
+
+#include "EASTL/hash_map.h"
+#include "EASTL/hash_set.h"
+#include "EASTL/vector.h"
+#include "foundation/Qt3DSDataRef.h"
+#include "Qt3DSDMWStrOps.h"
+
+namespace qt3dsimp {
+
+#define QT3DSIMP_FOREACH(idxnm, val) \
+ for (QT3DSU32 idxnm = 0, __numItems = (QT3DSU32)val; idxnm < __numItems; ++idxnm)
+
+template <typename TKey, typename TValue, typename THash = eastl::hash<TKey>,
+ typename TPredicate = eastl::equal_to<TKey>>
+struct ImportHashMap : public eastl::hash_map<TKey, TValue, THash, TPredicate>
+{
+ using base_type = eastl::hash_map<TKey, TValue, THash, TPredicate>;
+
+ ImportHashMap() {}
+
+
+
+ bool contains(const TKey &key) const { return find(key) != base_type::end(); }
+};
+template <typename TKey>
+struct ImportHashSet : public eastl::hash_set<TKey, eastl::hash<TKey>, eastl::equal_to<TKey>>
+{
+ using base_type = eastl::hash_set<TKey, eastl::hash<TKey>, eastl::equal_to<TKey>>;
+ ImportHashSet() {}
+ bool contains(const TKey &key) const { return base_type::find(key) != base_type::end(); }
+};
+template <typename TValue>
+struct ImportArray : public eastl::vector<TValue>
+{
+ using base_type = eastl::vector<TValue>;
+
+ ImportArray() {}
+ operator NVConstDataRef<TValue>() const
+ {
+ return NVConstDataRef<TValue>(base_type::data(), (QT3DSU32) base_type::size());
+ }
+
+ operator NVDataRef<TValue>() {
+ return NVDataRef<TValue>(base_type::data(), (QT3DSU32) base_type::size());
+ }
+};
+
+inline NVConstDataRef<wchar_t> toRef(const wchar_t *data, QT3DSU32 len = 0)
+{
+ if (IsTrivial(data))
+ return NVConstDataRef<wchar_t>(L"", 0);
+ len = len ? len : (QT3DSU32)wcslen(data);
+ return NVConstDataRef<wchar_t>(data, len);
+}
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportLibPrecompile.h b/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportLibPrecompile.h
new file mode 100644
index 00000000..34da79d0
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportLibPrecompile.h
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#pragma once
+
+#include "foundation/Qt3DS.h"
+#include "foundation/Qt3DSDataRef.h"
+#include "foundation/Qt3DSOption.h"
+#include "render/Qt3DSRenderBaseTypes.h"
+#include <map>
+#include <vector>
+#include <string>
+#include <exception>
+#include <set>
+#include <iostream>
+#include <sstream>
+#include <fstream>
+#include "Qt3DSDMDataTypes.h"
+#include "foundation/Qt3DSIntrinsics.h"
+#include "foundation/Qt3DSBasicTemplates.h"
+
+namespace qt3dsimp {
+using namespace qt3ds;
+using namespace qt3ds::foundation;
+using namespace qt3ds::render;
+using namespace qt3dsdm;
+using namespace std;
+}
+
+// TODO: reference additional headers your program requires here
diff --git a/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportMesh.cpp b/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportMesh.cpp
new file mode 100644
index 00000000..1535b911
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportMesh.cpp
@@ -0,0 +1,829 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifdef WIN32
+#pragma warning(disable : 4100)
+#endif
+#include "Qt3DSImportLibPrecompile.h"
+#include "Qt3DSImportMesh.h"
+
+using namespace qt3dsimp;
+
+#ifdef QT3DS_X86
+
+// Ensure our objects are of expected sizes. This keeps us honest
+// And ensures that we can load the datastructures we expect to by simply
+// mapping the memory.
+QT3DS_COMPILE_TIME_ASSERT(sizeof(NVRenderComponentTypes::Enum) == 4);
+QT3DS_COMPILE_TIME_ASSERT(sizeof(NVRenderDrawMode::Enum) == 4);
+QT3DS_COMPILE_TIME_ASSERT(sizeof(NVRenderVertexBufferEntry) == 20);
+QT3DS_COMPILE_TIME_ASSERT(sizeof(VertexBuffer) == 20);
+QT3DS_COMPILE_TIME_ASSERT(sizeof(IndexBuffer) == 12);
+QT3DS_COMPILE_TIME_ASSERT(sizeof(MeshSubset) == 40);
+QT3DS_COMPILE_TIME_ASSERT(sizeof(MeshDataHeader) == 12);
+QT3DS_COMPILE_TIME_ASSERT(sizeof(Mesh) == 56);
+
+#endif
+
+#define QT3DSIMP_FOREACH(idxnm, val) \
+ for (QT3DSU32 idxnm = 0, __numItems = (QT3DSU32)val; idxnm < __numItems; ++idxnm)
+
+namespace {
+
+struct MeshSubsetV1
+{
+ // See description of a logical vertex buffer below
+ QT3DSU32 m_LogicalVbufIndex;
+ // QT3DS_MAX_U32 means use all available items
+ QT3DSU32 m_Count;
+ // Offset is in item size, not bytes.
+ QT3DSU32 m_Offset;
+ // Bounds of this subset. This is filled in by the builder
+ // see AddMeshSubset
+ NVBounds3 m_Bounds;
+};
+
+struct LogicalVertexBuffer
+{
+ QT3DSU32 m_ByteOffset;
+ QT3DSU32 m_ByteSize;
+ LogicalVertexBuffer(QT3DSU32 byteOff, QT3DSU32 byteSize)
+ : m_ByteOffset(byteOff)
+ , m_ByteSize(byteSize)
+ {
+ }
+ LogicalVertexBuffer()
+ : m_ByteOffset(0)
+ , m_ByteSize(0)
+ {
+ }
+};
+
+struct MeshV1
+{
+ VertexBuffer m_VertexBuffer;
+ IndexBuffer m_IndexBuffer;
+ SOffsetDataRef<LogicalVertexBuffer> m_LogicalVertexBuffers; // may be empty
+ SOffsetDataRef<MeshSubsetV1> m_Subsets;
+ NVRenderDrawMode::Enum m_DrawMode;
+ NVRenderWinding::Enum m_Winding;
+ typedef MeshSubsetV1 TSubsetType;
+};
+
+template <typename TSerializer>
+void Serialize(TSerializer &serializer, MeshV1 &mesh)
+{
+ QT3DSU8 *baseAddr = reinterpret_cast<QT3DSU8 *>(&mesh);
+ serializer.streamify(mesh.m_VertexBuffer.m_Entries);
+ serializer.align();
+ QT3DSIMP_FOREACH(entry, mesh.m_VertexBuffer.m_Entries.size())
+ {
+ MeshVertexBufferEntry &entryData = const_cast<MeshVertexBufferEntry &>(
+ mesh.m_VertexBuffer.m_Entries.index(baseAddr, entry));
+ serializer.streamifyCharPointerOffset(entryData.m_NameOffset);
+ serializer.align();
+ }
+ serializer.streamify(mesh.m_VertexBuffer.m_Data);
+ serializer.align();
+ serializer.streamify(mesh.m_IndexBuffer.m_Data);
+ serializer.align();
+ serializer.streamify(mesh.m_LogicalVertexBuffers);
+ serializer.align();
+ serializer.streamify(mesh.m_Subsets);
+ serializer.align();
+}
+
+struct MeshSubsetV2
+{
+ QT3DSU32 m_LogicalVbufIndex;
+ QT3DSU32 m_Count;
+ QT3DSU32 m_Offset;
+ NVBounds3 m_Bounds;
+ SOffsetDataRef<char16_t> m_Name;
+};
+
+struct MeshV2
+{
+ static const char16_t *s_DefaultName;
+
+ VertexBuffer m_VertexBuffer;
+ IndexBuffer m_IndexBuffer;
+ SOffsetDataRef<LogicalVertexBuffer> m_LogicalVertexBuffers; // may be empty
+ SOffsetDataRef<MeshSubsetV2> m_Subsets;
+ NVRenderDrawMode::Enum m_DrawMode;
+ NVRenderWinding::Enum m_Winding;
+ typedef MeshSubsetV2 TSubsetType;
+};
+
+template <typename TSerializer>
+void Serialize(TSerializer &serializer, MeshV2 &mesh)
+{
+ QT3DSU8 *baseAddr = reinterpret_cast<QT3DSU8 *>(&mesh);
+ serializer.streamify(mesh.m_VertexBuffer.m_Entries);
+ serializer.align();
+ QT3DSIMP_FOREACH(entry, mesh.m_VertexBuffer.m_Entries.size())
+ {
+ MeshVertexBufferEntry &entryData = const_cast<MeshVertexBufferEntry &>(
+ mesh.m_VertexBuffer.m_Entries.index(baseAddr, entry));
+ serializer.streamifyCharPointerOffset(entryData.m_NameOffset);
+ serializer.align();
+ }
+ serializer.streamify(mesh.m_VertexBuffer.m_Data);
+ serializer.align();
+ serializer.streamify(mesh.m_IndexBuffer.m_Data);
+ serializer.align();
+ serializer.streamify(mesh.m_LogicalVertexBuffers);
+ serializer.align();
+ serializer.streamify(mesh.m_Subsets);
+ serializer.align();
+ QT3DSIMP_FOREACH(entry, mesh.m_Subsets.size())
+ {
+ MeshSubsetV2 &theSubset = const_cast<MeshSubsetV2 &>(mesh.m_Subsets.index(baseAddr, entry));
+ serializer.streamify(theSubset.m_Name);
+ serializer.align();
+ }
+}
+
+// Localize the knowledge required to read/write a mesh into one function
+// written in such a way that you can both read and write by passing
+// in one serializer type or another.
+// This function needs to be careful to request alignment after every write of a
+// buffer that may leave us unaligned. The easiest way to be correct is to request
+// alignment a lot. The hardest way is to use knowledge of the datatypes and
+// only request alignment when necessary.
+template <typename TSerializer>
+void Serialize(TSerializer &serializer, Mesh &mesh)
+{
+ QT3DSU8 *baseAddr = reinterpret_cast<QT3DSU8 *>(&mesh);
+ serializer.streamify(mesh.m_VertexBuffer.m_Entries);
+ serializer.align();
+ QT3DSIMP_FOREACH(entry, mesh.m_VertexBuffer.m_Entries.size())
+ {
+ MeshVertexBufferEntry &entryData = mesh.m_VertexBuffer.m_Entries.index(baseAddr, entry);
+ serializer.streamifyCharPointerOffset(entryData.m_NameOffset);
+ serializer.align();
+ }
+ serializer.streamify(mesh.m_VertexBuffer.m_Data);
+ serializer.align();
+ serializer.streamify(mesh.m_IndexBuffer.m_Data);
+ serializer.align();
+ serializer.streamify(mesh.m_Subsets);
+ serializer.align();
+ QT3DSIMP_FOREACH(entry, mesh.m_Subsets.size())
+ {
+ MeshSubset &theSubset = const_cast<MeshSubset &>(mesh.m_Subsets.index(baseAddr, entry));
+ serializer.streamify(theSubset.m_Name);
+ serializer.align();
+ }
+ serializer.streamify(mesh.m_Joints);
+ serializer.align();
+}
+
+struct TotallingSerializer
+{
+ QT3DSU32 m_NumBytes;
+ QT3DSU8 *m_BaseAddress;
+ TotallingSerializer(QT3DSU8 *inBaseAddr)
+ : m_NumBytes(0)
+ , m_BaseAddress(inBaseAddr)
+ {
+ }
+ template <typename TDataType>
+ void streamify(const SOffsetDataRef<TDataType> &data)
+ {
+ m_NumBytes += data.size() * sizeof(TDataType);
+ }
+ void streamify(const char *data)
+ {
+ if (data == NULL)
+ data = "";
+ QT3DSU32 len = (QT3DSU32)strlen(data) + 1;
+ m_NumBytes += 4;
+ m_NumBytes += len;
+ }
+ void streamifyCharPointerOffset(QT3DSU32 inOffset)
+ {
+ if (inOffset) {
+ const char *dataPtr = (const char *)(inOffset + m_BaseAddress);
+ streamify(dataPtr);
+ } else
+ streamify("");
+ }
+ bool needsAlignment() const { return getAlignmentAmount() > 0; }
+ QT3DSU32 getAlignmentAmount() const { return 4 - (m_NumBytes % 4); }
+ void align()
+ {
+ if (needsAlignment())
+ m_NumBytes += getAlignmentAmount();
+ }
+};
+
+struct ByteWritingSerializer
+{
+ IOutStream &m_Stream;
+ TotallingSerializer m_ByteCounter;
+ QT3DSU8 *m_BaseAddress;
+ ByteWritingSerializer(IOutStream &str, QT3DSU8 *inBaseAddress)
+ : m_Stream(str)
+ , m_ByteCounter(inBaseAddress)
+ , m_BaseAddress(inBaseAddress)
+ {
+ }
+
+ template <typename TDataType>
+ void streamify(const SOffsetDataRef<TDataType> &data)
+ {
+ m_ByteCounter.streamify(data);
+ m_Stream.Write(data.begin(m_BaseAddress), data.size());
+ }
+ void streamify(const char *data)
+ {
+ m_ByteCounter.streamify(data);
+ if (data == NULL)
+ data = "";
+ QT3DSU32 len = (QT3DSU32)strlen(data) + 1;
+ m_Stream.Write(len);
+ m_Stream.Write(data, len);
+ }
+ void streamifyCharPointerOffset(QT3DSU32 inOffset)
+ {
+ const char *dataPtr = (const char *)(inOffset + m_BaseAddress);
+ streamify(dataPtr);
+ }
+
+ void align()
+ {
+ if (m_ByteCounter.needsAlignment()) {
+ QT3DSU8 buffer[] = { 0, 0, 0, 0 };
+ m_Stream.Write(buffer, m_ByteCounter.getAlignmentAmount());
+ m_ByteCounter.align();
+ }
+ }
+};
+
+struct MemoryAssigningSerializer
+{
+ QT3DSU8 *m_Memory;
+ QT3DSU8 *m_BaseAddress;
+ QT3DSU32 m_Size;
+ TotallingSerializer m_ByteCounter;
+ bool m_Failure;
+ MemoryAssigningSerializer(QT3DSU8 *data, QT3DSU32 size, QT3DSU32 startOffset)
+ : m_Memory(data + startOffset)
+ , m_BaseAddress(data)
+ , m_Size(size)
+ , m_ByteCounter(data)
+ , m_Failure(false)
+ {
+ // We expect 4 byte aligned memory to begin with
+ QT3DS_ASSERT((((size_t)m_Memory) % 4) == 0);
+ }
+
+ template <typename TDataType>
+ void streamify(const SOffsetDataRef<TDataType> &_data)
+ {
+ SOffsetDataRef<TDataType> &data = const_cast<SOffsetDataRef<TDataType> &>(_data);
+ if (m_Failure) {
+ data.m_Size = 0;
+ data.m_Offset = 0;
+ return;
+ }
+ QT3DSU32 current = m_ByteCounter.m_NumBytes;
+ m_ByteCounter.streamify(_data);
+ if (m_ByteCounter.m_NumBytes > m_Size) {
+ data.m_Size = 0;
+ data.m_Offset = 0;
+ m_Failure = true;
+ return;
+ }
+ QT3DSU32 numBytes = m_ByteCounter.m_NumBytes - current;
+ if (numBytes) {
+ data.m_Offset = (QT3DSU32)(m_Memory - m_BaseAddress);
+ updateMemoryBuffer(numBytes);
+ } else {
+ data.m_Offset = 0;
+ data.m_Size = 0;
+ }
+ }
+ void streamify(const char *&_data)
+ {
+ QT3DSU32 len;
+ m_ByteCounter.m_NumBytes += 4;
+ if (m_ByteCounter.m_NumBytes > m_Size) {
+ _data = "";
+ m_Failure = true;
+ return;
+ }
+ qt3ds::intrinsics::memCopy(&len, m_Memory, 4);
+ updateMemoryBuffer(4);
+ m_ByteCounter.m_NumBytes += len;
+ if (m_ByteCounter.m_NumBytes > m_Size) {
+ _data = "";
+ m_Failure = true;
+ return;
+ }
+ _data = (const char *)m_Memory;
+ updateMemoryBuffer(len);
+ }
+ void streamifyCharPointerOffset(QT3DSU32 &inOffset)
+ {
+ const char *dataPtr;
+ streamify(dataPtr);
+ inOffset = (QT3DSU32)(dataPtr - (const char *)m_BaseAddress);
+ }
+ void align()
+ {
+ if (m_ByteCounter.needsAlignment()) {
+ QT3DSU32 numBytes = m_ByteCounter.getAlignmentAmount();
+ m_ByteCounter.align();
+ updateMemoryBuffer(numBytes);
+ }
+ }
+ void updateMemoryBuffer(QT3DSU32 numBytes) { m_Memory += numBytes; }
+};
+
+inline QT3DSU32 GetMeshDataSize(Mesh &mesh)
+{
+ TotallingSerializer s(reinterpret_cast<QT3DSU8 *>(&mesh));
+ Serialize(s, mesh);
+ return s.m_NumBytes;
+}
+
+template <typename TDataType>
+QT3DSU32 NextIndex(const QT3DSU8 *inBaseAddress, const SOffsetDataRef<QT3DSU8> data, QT3DSU32 idx)
+{
+ QT3DSU32 numItems = data.size() / sizeof(TDataType);
+ if (idx < numItems) {
+ const TDataType *dataPtr(reinterpret_cast<const TDataType *>(data.begin(inBaseAddress)));
+ return dataPtr[idx];
+ } else {
+ QT3DS_ASSERT(false);
+ return 0;
+ }
+}
+
+template <typename TDataType>
+QT3DSU32 NextIndex(NVConstDataRef<QT3DSU8> data, QT3DSU32 idx)
+{
+ QT3DSU32 numItems = data.size() / sizeof(TDataType);
+ if (idx < numItems) {
+ const TDataType *dataPtr(reinterpret_cast<const TDataType *>(data.begin()));
+ return dataPtr[idx];
+ } else {
+ QT3DS_ASSERT(false);
+ return 0;
+ }
+}
+
+inline QT3DSU32 NextIndex(NVConstDataRef<QT3DSU8> inData,
+ qt3ds::render::NVRenderComponentTypes::Enum inCompType, QT3DSU32 idx)
+{
+ if (inData.size() == 0)
+ return idx;
+ switch (inCompType) {
+ case NVRenderComponentTypes::QT3DSU8:
+ return NextIndex<QT3DSU8>(inData, idx);
+ case NVRenderComponentTypes::QT3DSI8:
+ return NextIndex<QT3DSI8>(inData, idx);
+ case NVRenderComponentTypes::QT3DSU16:
+ return NextIndex<QT3DSU16>(inData, idx);
+ case NVRenderComponentTypes::QT3DSI16:
+ return NextIndex<QT3DSI16>(inData, idx);
+ case NVRenderComponentTypes::QT3DSU32:
+ return NextIndex<QT3DSU32>(inData, idx);
+ case NVRenderComponentTypes::QT3DSI32:
+ return NextIndex<QT3DSI32>(inData, idx);
+ default:
+ break;
+ }
+
+ // Invalid index buffer index type.
+ QT3DS_ASSERT(false);
+ return 0;
+}
+
+template <typename TMeshType>
+// Not exposed to the outside world
+TMeshType *DoInitialize(MeshBufHeaderFlags /*meshFlags*/, NVDataRef<QT3DSU8> data)
+{
+ QT3DSU8 *newMem = data.begin();
+ QT3DSU32 amountLeft = data.size() - sizeof(TMeshType);
+ MemoryAssigningSerializer s(newMem, amountLeft, sizeof(TMeshType));
+ TMeshType *retval = (TMeshType *)newMem;
+ Serialize(s, *retval);
+ if (s.m_Failure)
+ return NULL;
+ return retval;
+}
+}
+
+NVBounds3 Mesh::CalculateSubsetBounds(const NVRenderVertexBufferEntry &inEntry,
+ NVConstDataRef<QT3DSU8> inVertxData, QT3DSU32 inStride,
+ NVConstDataRef<QT3DSU8> inIndexData,
+ qt3ds::render::NVRenderComponentTypes::Enum inIndexCompType,
+ QT3DSU32 inSubsetCount, QT3DSU32 inSubsetOffset)
+{
+ NVBounds3 retval(NVBounds3::empty());
+ const NVRenderVertexBufferEntry &entry(inEntry);
+ if (entry.m_ComponentType != NVRenderComponentTypes::QT3DSF32 || entry.m_NumComponents != 3) {
+ QT3DS_ASSERT(false);
+ return retval;
+ }
+
+ const QT3DSU8 *beginPtr = inVertxData.begin();
+ QT3DSU32 numBytes = inVertxData.size();
+ QT3DSU32 dataStride = inStride;
+ QT3DSU32 posOffset = entry.m_FirstItemOffset;
+ // The loop below could be template specialized *if* we wanted to do this.
+ // and the perf of the existing loop was determined to be a problem.
+ // Else I would rather stay way from the template specialization.
+ QT3DSIMP_FOREACH(idx, inSubsetCount)
+ {
+ QT3DSU32 dataIdx = NextIndex(inIndexData, inIndexCompType, idx + inSubsetOffset);
+ QT3DSU32 finalOffset = (dataIdx * dataStride) + posOffset;
+ if (finalOffset + sizeof(QT3DSVec3) <= numBytes) {
+ const QT3DSU8 *dataPtr = beginPtr + finalOffset;
+ retval.include(*reinterpret_cast<const QT3DSVec3 *>(dataPtr));
+ } else {
+ QT3DS_ASSERT(false);
+ }
+ }
+
+ return retval;
+}
+
+void Mesh::Save(IOutStream &outStream) const
+{
+ Mesh &mesh(const_cast<Mesh &>(*this));
+ QT3DSU8 *baseAddress = reinterpret_cast<QT3DSU8 *>(&mesh);
+ QT3DSU32 numBytes = sizeof(Mesh) + GetMeshDataSize(mesh);
+ MeshDataHeader header(numBytes);
+ outStream.Write(header);
+ outStream.Write(*this);
+ ByteWritingSerializer writer(outStream, baseAddress);
+ Serialize(writer, mesh);
+}
+
+wchar_t g_DefaultName[] = { 0 };
+
+const wchar_t *Mesh::s_DefaultName = g_DefaultName;
+
+template <typename TMeshType>
+struct SubsetNameHandler
+{
+};
+
+template <>
+struct SubsetNameHandler<MeshV1>
+{
+ void AssignName(const QT3DSU8 * /*v1BaseAddress*/, const MeshSubsetV1 & /*mesh*/,
+ QT3DSU8 * /*baseAddress*/, QT3DSU8 *& /*nameBuffer*/, MeshSubset &outDest)
+ {
+ outDest.m_Name = SOffsetDataRef<char16_t>();
+ }
+ QT3DSU32 NameLength(const MeshSubsetV1 &) { return 0; }
+};
+
+using qt3ds::intrinsics::memCopy;
+
+template <>
+struct SubsetNameHandler<MeshV2>
+{
+ void AssignName(const QT3DSU8 *v2BaseAddress, const MeshSubsetV2 &mesh, QT3DSU8 *baseAddress,
+ QT3DSU8 *&nameBuffer, MeshSubset &outDest)
+ {
+ outDest.m_Name.m_Size = mesh.m_Name.m_Size;
+ outDest.m_Name.m_Offset = (QT3DSU32)(nameBuffer - baseAddress);
+ QT3DSU32 dtypeSize = mesh.m_Name.m_Size * 2;
+ memCopy(nameBuffer, mesh.m_Name.begin(v2BaseAddress), dtypeSize);
+ nameBuffer += dtypeSize;
+ }
+ QT3DSU32 NameLength(const MeshSubsetV2 &mesh) { return (mesh.m_Name.size() + 1) * 2; }
+};
+
+QT3DSU32 GetAlignedOffset(QT3DSU32 offset, QT3DSU32 align)
+{
+ QT3DSU32 leftover = offset % align;
+ if (leftover)
+ return offset + (align - leftover);
+ return offset;
+}
+
+template <typename TPreviousMeshType>
+Mesh *CreateMeshFromPreviousMesh(TPreviousMeshType *temp, NVAllocatorCallback &alloc)
+{
+ QT3DSU32 newMeshSize = sizeof(Mesh);
+ QT3DSU8 *tempBaseAddress = reinterpret_cast<QT3DSU8 *>(temp);
+ QT3DSU32 alignment = sizeof(void *);
+
+ QT3DSU32 vertBufferSize = GetAlignedOffset(temp->m_VertexBuffer.m_Data.size(), alignment);
+ newMeshSize += vertBufferSize;
+ QT3DSU32 entryDataSize = temp->m_VertexBuffer.m_Entries.size() * sizeof(MeshVertexBufferEntry);
+ newMeshSize += entryDataSize;
+ QT3DSU32 indexBufferSize = GetAlignedOffset(temp->m_IndexBuffer.m_Data.size(), alignment);
+ newMeshSize += indexBufferSize;
+ QT3DSU32 entryNameSize = 0;
+ for (QT3DSU32 entryIdx = 0, entryEnd = temp->m_VertexBuffer.m_Entries.size(); entryIdx < entryEnd;
+ ++entryIdx) {
+ const qt3ds::render::NVRenderVertexBufferEntry theEntry =
+ temp->m_VertexBuffer.m_Entries.index(tempBaseAddress, entryIdx)
+ .ToVertexBufferEntry(tempBaseAddress);
+ const char *namePtr = theEntry.m_Name;
+ if (namePtr == NULL)
+ namePtr = "";
+
+ entryNameSize += (QT3DSU32)strlen(theEntry.m_Name) + 1;
+ }
+ entryNameSize = GetAlignedOffset(entryNameSize, alignment);
+
+ newMeshSize += entryNameSize;
+ QT3DSU32 subsetBufferSize = temp->m_Subsets.size() * sizeof(MeshSubset);
+ newMeshSize += subsetBufferSize;
+ QT3DSU32 nameLength = 0;
+ for (QT3DSU32 subsetIdx = 0, subsetEnd = temp->m_Subsets.size(); subsetIdx < subsetEnd;
+ ++subsetIdx) {
+ nameLength += SubsetNameHandler<TPreviousMeshType>().NameLength(
+ temp->m_Subsets.index(tempBaseAddress, subsetIdx));
+ }
+ nameLength = GetAlignedOffset(nameLength, alignment);
+
+ newMeshSize += nameLength;
+
+ Mesh *retval = (Mesh *)alloc.allocate(newMeshSize, "TempData", __FILE__, __LINE__);
+ new (retval) Mesh();
+ QT3DSU8 *baseOffset = reinterpret_cast<QT3DSU8 *>(retval);
+ QT3DSU8 *vertBufferData = baseOffset + sizeof(Mesh);
+ QT3DSU8 *entryBufferData = vertBufferData + vertBufferSize;
+ QT3DSU8 *entryNameBuffer = entryBufferData + entryDataSize;
+ QT3DSU8 *indexBufferData = entryNameBuffer + entryNameSize;
+ QT3DSU8 *subsetBufferData = indexBufferData + indexBufferSize;
+ QT3DSU8 *nameData = subsetBufferData + subsetBufferSize;
+
+ retval->m_DrawMode = temp->m_DrawMode;
+ retval->m_Winding = temp->m_Winding;
+ retval->m_VertexBuffer = temp->m_VertexBuffer;
+ retval->m_VertexBuffer.m_Data.m_Offset = (QT3DSU32)(vertBufferData - baseOffset);
+ retval->m_VertexBuffer.m_Entries.m_Offset = (QT3DSU32)(entryBufferData - baseOffset);
+ memCopy(vertBufferData, temp->m_VertexBuffer.m_Data.begin(tempBaseAddress),
+ temp->m_VertexBuffer.m_Data.size());
+ memCopy(entryBufferData, temp->m_VertexBuffer.m_Entries.begin(tempBaseAddress), entryDataSize);
+ QT3DSIMP_FOREACH(idx, temp->m_VertexBuffer.m_Entries.size())
+ {
+ const MeshVertexBufferEntry &src =
+ temp->m_VertexBuffer.m_Entries.index(tempBaseAddress, idx);
+ MeshVertexBufferEntry &dest = retval->m_VertexBuffer.m_Entries.index(baseOffset, idx);
+
+ const char *targetName = reinterpret_cast<const char *>(src.m_NameOffset + tempBaseAddress);
+ if (src.m_NameOffset == 0)
+ targetName = "";
+ QT3DSU32 nameLen = (QT3DSU32)strlen(targetName) + 1;
+ dest.m_NameOffset = (QT3DSU32)(entryNameBuffer - baseOffset);
+ memCopy(entryNameBuffer, targetName, nameLen);
+ entryNameBuffer += nameLen;
+ }
+
+ retval->m_IndexBuffer = temp->m_IndexBuffer;
+ retval->m_IndexBuffer.m_Data.m_Offset = (QT3DSU32)(indexBufferData - baseOffset);
+ memCopy(indexBufferData, temp->m_IndexBuffer.m_Data.begin(tempBaseAddress),
+ temp->m_IndexBuffer.m_Data.size());
+
+ retval->m_Subsets.m_Size = temp->m_Subsets.m_Size;
+ retval->m_Subsets.m_Offset = (QT3DSU32)(subsetBufferData - baseOffset);
+ QT3DSIMP_FOREACH(idx, temp->m_Subsets.size())
+ {
+ MeshSubset &dest = const_cast<MeshSubset &>(retval->m_Subsets.index(baseOffset, idx));
+ const typename TPreviousMeshType::TSubsetType &src =
+ temp->m_Subsets.index(tempBaseAddress, idx);
+ dest.m_Count = src.m_Count;
+ dest.m_Offset = src.m_Offset;
+ dest.m_Bounds = src.m_Bounds;
+ SubsetNameHandler<TPreviousMeshType>().AssignName(tempBaseAddress, src, baseOffset,
+ nameData, dest);
+ }
+ alloc.deallocate(temp);
+ return retval;
+}
+
+Mesh *Mesh::Load(NVAllocatorCallback &alloc, IInStream &inStream)
+{
+ MeshDataHeader header;
+ inStream.Read(header);
+ QT3DS_ASSERT(header.m_FileId == MeshDataHeader::GetFileId());
+ if (header.m_FileId != MeshDataHeader::GetFileId())
+ return NULL;
+ if (header.m_FileVersion < 1 || header.m_FileVersion > MeshDataHeader::GetCurrentFileVersion())
+ return NULL;
+ if (header.m_SizeInBytes < sizeof(Mesh))
+ return NULL;
+ QT3DSU8 *newMem = (QT3DSU8 *)alloc.allocate(header.m_SizeInBytes, "Mesh", __FILE__, __LINE__);
+ QT3DSU32 amountRead = inStream.Read(NVDataRef<QT3DSU8>(newMem, header.m_SizeInBytes));
+ if (amountRead != header.m_SizeInBytes)
+ goto failure;
+
+ if (header.m_FileVersion == 1) {
+ MeshV1 *temp = DoInitialize<MeshV1>(header.m_HeaderFlags,
+ NVDataRef<QT3DSU8>(newMem, header.m_SizeInBytes));
+ if (temp == NULL)
+ goto failure;
+ return CreateMeshFromPreviousMesh(temp, alloc);
+
+ } else if (header.m_FileVersion == 2) {
+ MeshV2 *temp = DoInitialize<MeshV2>(header.m_HeaderFlags,
+ NVDataRef<QT3DSU8>(newMem, header.m_SizeInBytes));
+ if (temp == NULL)
+ goto failure;
+ return CreateMeshFromPreviousMesh(temp, alloc);
+ } else {
+ Mesh *retval = Initialize(header.m_FileVersion, header.m_HeaderFlags,
+ NVDataRef<QT3DSU8>(newMem, header.m_SizeInBytes));
+ if (retval == NULL)
+ goto failure;
+ return retval;
+ }
+
+failure:
+ QT3DS_ASSERT(false);
+ alloc.deallocate(newMem);
+ return NULL;
+}
+
+Mesh *Mesh::Initialize(QT3DSU16 meshVersion, MeshBufHeaderFlags meshFlags, NVDataRef<QT3DSU8> data)
+{
+ if (meshVersion != MeshDataHeader::GetCurrentFileVersion())
+ return NULL;
+ return DoInitialize<Mesh>(meshFlags, data);
+}
+
+// Multimesh support where you have multiple meshes in a single file.
+// Save multi where you have overridden the allocator.
+QT3DSU32 Mesh::SaveMulti(NVAllocatorCallback &alloc, ISeekableIOStream &inStream, QT3DSU32 inId) const
+{
+ QT3DSU32 nextId = 1;
+ MeshMultiHeader tempHeader;
+ MeshMultiHeader *theHeader = NULL;
+ MeshMultiHeader *theWriteHeader = NULL;
+
+ QT3DSI64 newMeshStartPos = 0;
+ if (inStream.GetLength() != 0) {
+ theHeader = LoadMultiHeader(alloc, inStream);
+ if (theHeader == NULL) {
+ QT3DS_ASSERT(false);
+ return 0;
+ }
+ QT3DSU8 *headerBaseAddr = reinterpret_cast<QT3DSU8 *>(theHeader);
+ for (QT3DSU32 idx = 0, end = theHeader->m_Entries.size(); idx < end; ++idx) {
+ if (inId != 0) {
+ QT3DS_ASSERT(inId != theHeader->m_Entries.index(headerBaseAddr, idx).m_MeshId);
+ }
+ nextId = qMax(nextId, theHeader->m_Entries.index(headerBaseAddr, idx).m_MeshId + 1);
+ }
+ newMeshStartPos =
+ sizeof(MeshMultiHeader) + theHeader->m_Entries.size() * sizeof(MeshMultiEntry);
+ theWriteHeader = theHeader;
+ } else
+ theWriteHeader = &tempHeader;
+
+ inStream.SetPosition(-newMeshStartPos, SeekPosition::End);
+ QT3DSI64 meshOffset = inStream.GetPosition();
+
+ Save(inStream);
+
+ if (inId != 0)
+ nextId = inId;
+ QT3DSU8 *theWriteBaseAddr = reinterpret_cast<QT3DSU8 *>(theWriteHeader);
+ // Now write a new header out.
+ inStream.Write(theWriteHeader->m_Entries.begin(theWriteBaseAddr),
+ theWriteHeader->m_Entries.size());
+ MeshMultiEntry newEntry(static_cast<QT3DSI64>(meshOffset), nextId);
+ inStream.Write(newEntry);
+ theWriteHeader->m_Entries.m_Size++;
+ inStream.Write(*theWriteHeader);
+
+ if (theHeader != NULL) {
+ alloc.deallocate(theHeader);
+ }
+ return static_cast<QT3DSU32>(nextId);
+}
+
+// Load a single mesh directly from a multi file with the provided overridden items
+SMultiLoadResult Mesh::LoadMulti(NVAllocatorCallback &alloc, ISeekableIOStream &inStream,
+ QT3DSU32 inId)
+{
+ MeshMultiHeader *theHeader(LoadMultiHeader(alloc, inStream));
+ if (theHeader == NULL) {
+ return SMultiLoadResult();
+ }
+ QT3DSU64 fileOffset = (QT3DSU64)-1;
+ QT3DSU32 theId = inId;
+ QT3DSU8 *theHeaderBaseAddr = reinterpret_cast<QT3DSU8 *>(theHeader);
+ bool foundMesh = false;
+ for (QT3DSU32 idx = 0, end = theHeader->m_Entries.size(); idx < end && !foundMesh; ++idx) {
+ const MeshMultiEntry &theEntry(theHeader->m_Entries.index(theHeaderBaseAddr, idx));
+ if (theEntry.m_MeshId == inId || (inId == 0 && theEntry.m_MeshId > theId)) {
+ if (theEntry.m_MeshId == inId)
+ foundMesh = true;
+ theId = qMax(theId, (QT3DSU32)theEntry.m_MeshId);
+ fileOffset = theEntry.m_MeshOffset;
+ }
+ }
+ Mesh *retval = NULL;
+ if (fileOffset == (QT3DSU64)-1) {
+ goto endFunction;
+ }
+
+ inStream.SetPosition(static_cast<QT3DSI64>(fileOffset), SeekPosition::Begin);
+ retval = Load(alloc, inStream);
+endFunction:
+ if (theHeader != NULL)
+ alloc.deallocate(theHeader);
+ return SMultiLoadResult(retval, theId);
+}
+
+// Returns true if this is a multimesh (several meshes in one file).
+bool Mesh::IsMulti(ISeekableIOStream &inStream)
+{
+ MeshMultiHeader theHeader;
+ inStream.SetPosition(-((QT3DSI64)(sizeof(MeshMultiHeader))), SeekPosition::End);
+ QT3DSU32 numBytes = inStream.Read(theHeader);
+ if (numBytes != sizeof(MeshMultiHeader))
+ return false;
+ return theHeader.m_Version == MeshMultiHeader::GetMultiStaticFileId();
+}
+// Load a multi header from a stream.
+MeshMultiHeader *Mesh::LoadMultiHeader(NVAllocatorCallback &alloc, ISeekableIOStream &inStream)
+{
+ MeshMultiHeader theHeader;
+ inStream.SetPosition(-((QT3DSI64)sizeof(MeshMultiHeader)), SeekPosition::End);
+ QT3DSU32 numBytes = inStream.Read(theHeader);
+ if (numBytes != sizeof(MeshMultiHeader)
+ || theHeader.m_FileId != MeshMultiHeader::GetMultiStaticFileId()
+ || theHeader.m_Version > MeshMultiHeader::GetMultiStaticVersion()) {
+ return NULL;
+ }
+ size_t allocSize =
+ sizeof(MeshMultiHeader) + theHeader.m_Entries.m_Size * sizeof(MeshMultiEntry);
+ MeshMultiHeader *retval =
+ (MeshMultiHeader *)alloc.allocate(allocSize, "MeshMultiHeader", __FILE__, __LINE__);
+ if (retval == NULL) {
+ QT3DS_ASSERT(false);
+ return NULL;
+ }
+ QT3DSU8 *baseAddr = reinterpret_cast<QT3DSU8 *>(retval);
+ QT3DSU8 *entryData = baseAddr + sizeof(MeshMultiHeader);
+ *retval = theHeader;
+ retval->m_Entries.m_Offset = (QT3DSU32)(entryData - baseAddr);
+ inStream.SetPosition(-((QT3DSI64)allocSize), SeekPosition::End);
+
+ numBytes =
+ inStream.Read(reinterpret_cast<MeshMultiEntry *>(entryData), retval->m_Entries.m_Size);
+ if (numBytes != retval->m_Entries.m_Size * sizeof(MeshMultiEntry)) {
+ QT3DS_ASSERT(false);
+ alloc.deallocate(retval);
+ retval = NULL;
+ }
+ return retval;
+}
+
+QT3DSU32 GetHighestId(NVAllocatorCallback &inAlloc, MeshMultiHeader *inHeader)
+{
+ if (inHeader == NULL) {
+ QT3DS_ASSERT(false);
+ return 0;
+ }
+ QT3DSU8 *baseHeaderAddr = reinterpret_cast<QT3DSU8 *>(inHeader);
+ QT3DSU32 highestId = 0;
+ for (QT3DSU32 idx = 0, end = inHeader->m_Entries.size(); idx < end; ++idx)
+ highestId = qMax(highestId, inHeader->m_Entries.index(baseHeaderAddr, idx).m_MeshId);
+ inAlloc.deallocate(inHeader);
+ return highestId;
+}
+
+QT3DSU32 Mesh::GetHighestMultiVersion(NVAllocatorCallback &alloc, ISeekableIOStream &inStream)
+{
+ return GetHighestId(alloc, LoadMultiHeader(alloc, inStream));
+}
diff --git a/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportMesh.h b/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportMesh.h
new file mode 100644
index 00000000..36b7a841
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportMesh.h
@@ -0,0 +1,530 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DS_IMPORT_MESH_H
+#define QT3DS_IMPORT_MESH_H
+#include "foundation/Qt3DS.h"
+#include "foundation/Qt3DSDataRef.h"
+#include "render/Qt3DSRenderBaseTypes.h"
+#include "foundation/Qt3DSBounds3.h"
+#include "foundation/Qt3DSAllocatorCallback.h"
+#include "foundation/IOStreams.h"
+
+namespace qt3dsimp {
+using namespace qt3ds;
+using namespace qt3ds::foundation;
+using namespace qt3ds::render;
+template <typename TDataType>
+struct SOffsetDataRef
+{
+ QT3DSU32 m_Offset;
+ QT3DSU32 m_Size;
+ SOffsetDataRef()
+ : m_Offset(0)
+ , m_Size(0)
+ {
+ }
+ TDataType *begin(QT3DSU8 *inBase) { return reinterpret_cast<TDataType *>(inBase + m_Offset); }
+ TDataType *end(QT3DSU8 *inBase) { return begin(inBase) + m_Size; }
+ const TDataType *begin(const QT3DSU8 *inBase) const
+ {
+ return reinterpret_cast<const TDataType *>(inBase + m_Offset);
+ }
+ const TDataType *end(const QT3DSU8 *inBase) const { return begin(inBase) + m_Size; }
+ QT3DSU32 size() const { return m_Size; }
+ bool empty() const { return m_Size == 0; }
+ TDataType &index(QT3DSU8 *inBase, QT3DSU32 idx)
+ {
+ QT3DS_ASSERT(idx < m_Size);
+ return begin(inBase)[idx];
+ }
+ const TDataType &index(const QT3DSU8 *inBase, QT3DSU32 idx) const
+ {
+ QT3DS_ASSERT(idx < m_Size);
+ return begin(inBase)[idx];
+ }
+};
+
+struct MeshVertexBufferEntry
+{
+ QT3DSU32 m_NameOffset;
+ /** Datatype of the this entry points to in the buffer */
+ NVRenderComponentTypes::Enum m_ComponentType;
+ /** Number of components of each data member. 1,2,3, or 4. Don't be stupid.*/
+ QT3DSU32 m_NumComponents;
+ /** Offset from the beginning of the buffer of the first item */
+ QT3DSU32 m_FirstItemOffset;
+ MeshVertexBufferEntry()
+ : m_NameOffset(0)
+ , m_ComponentType(NVRenderComponentTypes::QT3DSF32)
+ , m_NumComponents(3)
+ , m_FirstItemOffset(0)
+ {
+ }
+ NVRenderVertexBufferEntry ToVertexBufferEntry(QT3DSU8 *inBaseAddress)
+ {
+ const char *nameBuffer = "";
+ if (m_NameOffset)
+ nameBuffer = reinterpret_cast<const char *>(inBaseAddress + m_NameOffset);
+ return NVRenderVertexBufferEntry(nameBuffer, m_ComponentType, m_NumComponents,
+ m_FirstItemOffset);
+ }
+};
+
+struct VertexBuffer
+{
+ SOffsetDataRef<MeshVertexBufferEntry> m_Entries;
+ QT3DSU32 m_Stride;
+ SOffsetDataRef<QT3DSU8> m_Data;
+ VertexBuffer(SOffsetDataRef<MeshVertexBufferEntry> entries, QT3DSU32 stride,
+ SOffsetDataRef<QT3DSU8> data)
+ : m_Entries(entries)
+ , m_Stride(stride)
+ , m_Data(data)
+ {
+ }
+ VertexBuffer()
+ : m_Stride(0)
+ {
+ }
+};
+
+struct IndexBuffer
+{
+ // Component types must be either QT3DSU16 or QT3DSU8 in order for the
+ // graphics hardware to deal with the buffer correctly.
+ NVRenderComponentTypes::Enum m_ComponentType;
+ SOffsetDataRef<QT3DSU8> m_Data;
+ // Either QT3DSU8 or QT3DSU16 component types are allowed by the underlying rendering
+ // system, so you would be wise to stick with those.
+ IndexBuffer(NVRenderComponentTypes::Enum compType, SOffsetDataRef<QT3DSU8> data)
+ : m_ComponentType(compType)
+ , m_Data(data)
+ {
+ }
+ IndexBuffer()
+ : m_ComponentType(NVRenderComponentTypes::Unknown)
+ {
+ }
+};
+
+template <QT3DSU32 TNumBytes>
+struct MeshPadding
+{
+ QT3DSU8 m_Padding[TNumBytes];
+ MeshPadding() { memZero(m_Padding, TNumBytes); }
+};
+
+struct MeshSubset
+{
+ // QT3DS_MAX_U32 means use all available items
+ QT3DSU32 m_Count;
+ // Offset is in item size, not bytes.
+ QT3DSU32 m_Offset;
+ // Bounds of this subset. This is filled in by the builder
+ // see AddMeshSubset
+ NVBounds3 m_Bounds;
+
+ // Subsets have to be named else artists will be unable to use
+ // a mesh with multiple subsets as they won't have any idea
+ // while part of the model a given mesh actually maps to.
+ SOffsetDataRef<char16_t> m_Name;
+
+ MeshSubset(QT3DSU32 count, QT3DSU32 off, const NVBounds3 &bounds, SOffsetDataRef<char16_t> inName)
+ : m_Count(count)
+ , m_Offset(off)
+ , m_Bounds(bounds)
+ , m_Name(inName)
+ {
+ }
+ MeshSubset()
+ : m_Count((QT3DSU32)-1)
+ , m_Offset(0)
+ , m_Bounds(NVBounds3::empty())
+ {
+ }
+ bool HasCount() const { return m_Count != QT3DS_MAX_U32; }
+};
+
+// Placeholder for bitflags in the mesh header.
+struct MeshBufHeaderFlagValues
+{
+ enum Enum {};
+};
+
+struct MeshBufHeaderFlags : NVFlags<MeshBufHeaderFlagValues::Enum, QT3DSU16>
+{
+ MeshBufHeaderFlags() {}
+ MeshBufHeaderFlags(QT3DSU16 value)
+ : NVFlags<MeshBufHeaderFlagValues::Enum, QT3DSU16>(value)
+ {
+ }
+ // Binary or creates an integer.
+ MeshBufHeaderFlags(int value)
+ : NVFlags<MeshBufHeaderFlagValues::Enum, QT3DSU16>((QT3DSU16)value)
+ {
+ }
+};
+
+struct MeshDataHeader
+{
+ static QT3DSU32 GetFileId() { return (QT3DSU32)-929005747; }
+ static QT3DSU16 GetCurrentFileVersion() { return 3; }
+ QT3DSU32 m_FileId;
+ QT3DSU16 m_FileVersion;
+ MeshBufHeaderFlags m_HeaderFlags;
+ QT3DSU32 m_SizeInBytes;
+ MeshDataHeader(QT3DSU32 size = 0)
+ : m_FileId(GetFileId())
+ , m_FileVersion(GetCurrentFileVersion())
+ , m_SizeInBytes(size)
+ {
+ }
+};
+
+struct Joint
+{
+ QT3DSI32 m_JointID;
+ QT3DSI32 m_ParentID;
+ QT3DSF32 m_invBindPose[16];
+ QT3DSF32 m_localToGlobalBoneSpace[16];
+
+ Joint(QT3DSI32 jointID, QT3DSI32 parentID, const QT3DSF32 *invBindPose,
+ const QT3DSF32 *localToGlobalBoneSpace)
+ : m_JointID(jointID)
+ , m_ParentID(parentID)
+ {
+ ::memcpy(m_invBindPose, invBindPose, sizeof(float) * 16);
+ ::memcpy(m_localToGlobalBoneSpace, localToGlobalBoneSpace, sizeof(float) * 16);
+ }
+ Joint()
+ : m_JointID(-1)
+ , m_ParentID(-1)
+ {
+ ::memset(m_invBindPose, 0, sizeof(float) * 16);
+ ::memset(m_localToGlobalBoneSpace, 0, sizeof(float) * 16);
+ }
+};
+
+// Tells us what offset a mesh with this ID starts.
+struct MeshMultiEntry
+{
+ QT3DSU64 m_MeshOffset;
+ QT3DSU32 m_MeshId;
+ QT3DSU32 m_Padding;
+ MeshMultiEntry()
+ : m_MeshOffset(0)
+ , m_MeshId(0)
+ , m_Padding(0)
+ {
+ }
+ MeshMultiEntry(QT3DSU64 mo, QT3DSU32 meshId)
+ : m_MeshOffset(mo)
+ , m_MeshId(meshId)
+ , m_Padding(0)
+ {
+ }
+};
+
+// The multi headers are actually saved at the end of the file.
+// Thus when you append to the file we overwrite the last header
+// then write out a new header structure.
+// The last 8 bytes of the file contain the multi header.
+// The previous N*8 bytes contain the mesh entries.
+struct MeshMultiHeader
+{
+ QT3DSU32 m_FileId;
+ QT3DSU32 m_Version;
+ SOffsetDataRef<MeshMultiEntry> m_Entries;
+ static QT3DSU32 GetMultiStaticFileId() { return (QT3DSU32)555777497; }
+ static QT3DSU32 GetMultiStaticVersion() { return 1; }
+
+ MeshMultiHeader()
+ : m_FileId(GetMultiStaticFileId())
+ , m_Version(GetMultiStaticVersion())
+ {
+ }
+};
+
+struct Mesh;
+
+// Result of a multi-load operation. This returns both the mesh
+// and the id of the mesh that was loaded.
+struct SMultiLoadResult
+{
+ Mesh *m_Mesh;
+ QT3DSU32 m_Id;
+ SMultiLoadResult(Mesh *inMesh, QT3DSU32 inId)
+ : m_Mesh(inMesh)
+ , m_Id(inId)
+ {
+ }
+ SMultiLoadResult()
+ : m_Mesh(NULL)
+ , m_Id(0)
+ {
+ }
+ operator Mesh *() { return m_Mesh; }
+};
+
+/**
+* A Mesh defines one vertex buffer layout, one or more logical vertex buffers
+* one index buffer, and a set of defined draw calls (subsets).
+*
+* The vertex buffer data is held together continguously and the layout cannot
+* change. There can be several actual vertex buffers on the card, however, in order
+* to facilitate using index buffer components of smaller component sizes than there
+* are actual vertex buffer data entries. For instance, you may have a very large vertex
+* buffer, larger than 64 K but openglES has a restriction on the size of the index buffer
+*component
+* that it cannot be larger than two bytes per entry. So you would need to split the vertex
+*buffer
+* into multiple logical vertex buffers and adjust your indexes such that you indexed into
+* only one logical vertex buffer per draw call.
+*
+* No logical vertex buffers means that the vertex buffer index on a mesh subset will be
+*ignored.
+*/
+struct Mesh
+{
+ static const wchar_t *s_DefaultName;
+
+ VertexBuffer m_VertexBuffer;
+ IndexBuffer m_IndexBuffer;
+ SOffsetDataRef<MeshSubset> m_Subsets;
+ SOffsetDataRef<Joint> m_Joints;
+ NVRenderDrawMode::Enum m_DrawMode;
+ NVRenderWinding::Enum m_Winding;
+
+ Mesh()
+ : m_DrawMode(NVRenderDrawMode::Triangles)
+ , m_Winding(NVRenderWinding::CounterClockwise)
+ {
+ }
+ Mesh(VertexBuffer vbuf, IndexBuffer ibuf, const SOffsetDataRef<MeshSubset> &insts,
+ const SOffsetDataRef<Joint> &joints,
+ NVRenderDrawMode::Enum drawMode = NVRenderDrawMode::Triangles,
+ NVRenderWinding::Enum winding = NVRenderWinding::CounterClockwise)
+ : m_VertexBuffer(vbuf)
+ , m_IndexBuffer(ibuf)
+ , m_Subsets(insts)
+ , m_Joints(joints)
+ , m_DrawMode(drawMode)
+ , m_Winding(winding)
+ {
+ }
+
+ QT3DSU8 *GetBaseAddress() { return reinterpret_cast<QT3DSU8 *>(this); }
+ const QT3DSU8 *GetBaseAddress() const { return reinterpret_cast<const QT3DSU8 *>(this); }
+
+ static const char *GetPositionAttrName() { return "attr_pos"; }
+ static const char *GetNormalAttrName() { return "attr_norm"; }
+ static const char *GetUVAttrName() { return "attr_uv0"; }
+ static const char *GetUV2AttrName() { return "attr_uv1"; }
+ static const char *GetTexTanAttrName() { return "attr_textan"; }
+ static const char *GetTexBinormalAttrName() { return "attr_binormal"; }
+ static const char *GetWeightAttrName() { return "attr_weight"; }
+ static const char *GetBoneIndexAttrName() { return "attr_boneid"; }
+ static const char *GetColorAttrName() { return "attr_color"; }
+
+ // Run through the vertex buffer items indicated by subset
+ // Assume vbuf entry[posEntryIndex] is the position entry
+ // This entry has to be QT3DSF32 and 3 components.
+ // Using this entry and the (possibly empty) index buffer
+ // along with the (possibly emtpy) logical vbuf data
+ // return a bounds of the given vertex buffer.
+ static NVBounds3 CalculateSubsetBounds(const NVRenderVertexBufferEntry &inEntry,
+ NVConstDataRef<QT3DSU8> inVertxData, QT3DSU32 inStride,
+ NVConstDataRef<QT3DSU8> inIndexData,
+ qt3ds::render::NVRenderComponentTypes::Enum inIndexCompType,
+ QT3DSU32 inSubsetCount, QT3DSU32 inSubsetOffset);
+
+ // Format is:
+ // MeshDataHeader
+ // mesh data.
+ void Save(IOutStream &outStream) const;
+
+ // Save a mesh using fopen and fwrite
+ bool Save(const char *inFilePath) const;
+
+ // read the header, then read the object.
+ // Object data is written in LE format for now.
+ // Free the new mesh by calling:
+ // alloc.deallocate( mesh );
+ // All the memory is allocated once and then pointers are back
+ // filled, so this will work.
+ static Mesh *Load(NVAllocatorCallback &alloc, IInStream &inStream);
+
+ // Load a mesh using fopen and fread
+ // Mesh needs to be freed by the caller using free
+ static Mesh *Load(const char *inFilePath);
+
+ // Create a mesh given this header, and that data. data.size() must match
+ // header.SizeInBytes. The mesh returned starts a data[0], so however data
+ // was allocated is how the mesh should be deallocated.
+ static Mesh *Initialize(QT3DSU16 meshVersion, MeshBufHeaderFlags meshFlags, NVDataRef<QT3DSU8> data);
+
+ // Multimesh support where you have multiple meshes in a single file.
+ // Save multi where you have overridden the allocator.
+ QT3DSU32 SaveMulti(NVAllocatorCallback &alloc, ISeekableIOStream &inStream, QT3DSU32 inId = 0) const;
+ // You can save multiple meshes in a file. Each mesh returns an incrementing
+ // integer for the multi file. The original meshes aren't changed, and the file
+ // is appended to.
+ QT3DSU32 SaveMulti(const char *inFilePath) const;
+
+ // Load a single mesh directly from a multi file with the provided overridden items
+ // Loading a multimesh with id == 0 indicates to just load the mesh with the highest id.
+ static SMultiLoadResult LoadMulti(NVAllocatorCallback &alloc, ISeekableIOStream &inStream,
+ QT3DSU32 inId = 0);
+ // Load a single mesh using c file API and malloc/free.
+ static SMultiLoadResult LoadMulti(const char *inFilePath, QT3DSU32 inId);
+ // Returns true if this is a multimesh (several meshes in one file).
+ static bool IsMulti(ISeekableIOStream &inStream);
+ // Load a multi header from a stream.
+ static MeshMultiHeader *LoadMultiHeader(NVAllocatorCallback &alloc,
+ ISeekableIOStream &inStream);
+ // Load a multi header from a file using malloc. Header needs to be freed using free.
+ static MeshMultiHeader *LoadMultiHeader(const char *inFilePath);
+
+ // Get the highest mesh version from a stream.
+ static QT3DSU32 GetHighestMultiVersion(NVAllocatorCallback &alloc, ISeekableIOStream &inStream);
+ // Get the highest mesh version from a file.
+ static QT3DSU32 GetHighestMultiVersion(const char *inFilePath);
+};
+
+struct ScopedMesh
+{
+ Mesh *m_Mesh;
+ NVAllocatorCallback *m_Callback;
+ ScopedMesh(Mesh *m, NVAllocatorCallback *cback = NULL)
+ : m_Mesh(m)
+ , m_Callback(cback)
+ {
+ }
+ ~ScopedMesh()
+ {
+ if (m_Mesh) {
+ if (m_Callback)
+ m_Callback->deallocate(m_Mesh);
+ else
+ free(m_Mesh);
+ }
+ }
+ Mesh *operator->() { return m_Mesh; }
+ operator Mesh *() { return m_Mesh; }
+};
+
+struct MeshBuilderVBufEntry
+{
+ const char *m_Name;
+ NVConstDataRef<QT3DSU8> m_Data;
+ NVRenderComponentTypes::Enum m_ComponentType;
+ QT3DSU32 m_NumComponents;
+ MeshBuilderVBufEntry()
+ : m_Name(NULL)
+ , m_ComponentType(NVRenderComponentTypes::Unknown)
+ , m_NumComponents(0)
+ {
+ }
+ MeshBuilderVBufEntry(const char *name, NVConstDataRef<QT3DSU8> data,
+ NVRenderComponentTypes::Enum componentType, QT3DSU32 numComponents)
+ : m_Name(name)
+ , m_Data(data)
+ , m_ComponentType(componentType)
+ , m_NumComponents(numComponents)
+ {
+ }
+};
+
+// Useful class to build up a mesh. Necessary since meshes don't include that
+// sort of utility.
+class MeshBuilder
+{
+protected:
+ virtual ~MeshBuilder() {}
+public:
+ virtual void Release() = 0;
+ virtual void Reset() = 0;
+ // Set the draw parameters for any subsets. Defaults to triangles and counter clockwise
+ virtual void SetDrawParameters(NVRenderDrawMode::Enum drawMode,
+ NVRenderWinding::Enum winding) = 0;
+ // Set the vertex buffer and have the mesh builder interleave the data for you
+ virtual bool SetVertexBuffer(NVConstDataRef<MeshBuilderVBufEntry> entries) = 0;
+ // Set the vertex buffer from interleaved data.
+ virtual void SetVertexBuffer(NVConstDataRef<NVRenderVertexBufferEntry> entries, QT3DSU32 stride,
+ NVConstDataRef<QT3DSU8> data) = 0;
+ // The builder (and the majority of the rest of the product) only supports unsigned 16 bit
+ // indexes
+ virtual void SetIndexBuffer(NVConstDataRef<QT3DSU8> data, NVRenderComponentTypes::Enum comp) = 0;
+ // Assets if the supplied parameters are out of range.
+ virtual void AddJoint(QT3DSI32 jointID, QT3DSI32 parentID, const QT3DSF32 *invBindPose,
+ const QT3DSF32 *localToGlobalBoneSpace) = 0;
+ /**
+ * Add a subset, which equates roughly to a draw call.
+ * A logical vertex buffer allows you to have more that 64K vertexes but still
+ * use u16 index buffers. In any case, if the mesh has an index buffer then this subset
+ * refers to that index buffer, else it is assumed to index into the vertex buffer.
+ * count and offset do exactly what they seem to do, while boundsPositionEntryIndex, if set to
+ * something other than QT3DS_MAX_U32, drives the calculation of the aa-bounds of the subset
+ * using mesh::CalculateSubsetBounds
+ */
+ virtual void AddMeshSubset(const wchar_t *inSubsetName = Mesh::s_DefaultName,
+ QT3DSU32 count = QT3DS_MAX_U32, QT3DSU32 offset = 0,
+ QT3DSU32 boundsPositionEntryIndex = QT3DS_MAX_U32) = 0;
+
+ virtual void AddMeshSubset(const wchar_t *inSubsetName, QT3DSU32 count, QT3DSU32 offset,
+ const NVBounds3 &inBounds) = 0;
+
+ // Call to optimize the index and vertex buffers. This doesn't change the subset information,
+ // each triangle is rendered precisely the same.
+ // It just orders the vertex data so we iterate through it as linearly as possible.
+ // This *only* works if the *entire* builder is using triangles as the draw mode. This will be
+ // a disaster if that
+ // condition is not met.
+ virtual void OptimizeMesh() = 0;
+
+ /**
+ * @brief This functions stitches together sub-meshes with the same material.
+ * This re-writes the index buffer
+ *
+ * @return no return.
+ */
+ virtual void ConnectSubMeshes() = 0;
+
+ // Return the current mesh. This is only good for this function call, item may change or be
+ // released
+ // due to any further function calls.
+ virtual Mesh &GetMesh() = 0;
+
+ // Uses new/delete.
+ static MeshBuilder &CreateMeshBuilder();
+};
+}
+
+#endif
diff --git a/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportMeshBuilder.cpp b/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportMeshBuilder.cpp
new file mode 100644
index 00000000..e8c6d92e
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportMeshBuilder.cpp
@@ -0,0 +1,598 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSImportLibPrecompile.h"
+#include "Qt3DSImportMesh.h"
+#include "foundation/Qt3DSMemoryBuffer.h"
+#include "Qt3DSImportContainers.h"
+
+using namespace qt3dsimp;
+
+// Disable mesh optimization. TODO: After removing NvTriStrip need
+// to implement mesh optimization.
+//#define DISABLE_MESH_OPTIMIZATION 1
+
+// It turns out we can't enable vertex remapping because it would break
+// mesh morphing.
+#define DISABLE_VERTEX_REMAP 1
+
+namespace {
+template <typename TDataType>
+NVConstDataRef<TDataType> toRefBuf(QT3DSU8 *bufData, QT3DSU32 off, QT3DSU32 size)
+{
+ QT3DS_ASSERT(size % sizeof(TDataType) == 0);
+ if (size)
+ return NVConstDataRef<TDataType>((TDataType *)(bufData + off), size / sizeof(TDataType));
+ return NVConstDataRef<TDataType>();
+}
+struct DynamicVBuf
+{
+ QT3DSU32 m_Stride;
+ ImportArray<NVRenderVertexBufferEntry> m_VertexBufferEntries;
+ MemoryBuffer<RawAllocator> m_VertexData;
+
+ void clear()
+ {
+ m_Stride = 0;
+ m_VertexBufferEntries.clear();
+ m_VertexData.clear();
+ }
+};
+struct DynamicIndexBuf
+{
+ NVRenderComponentTypes::Enum m_CompType;
+ MemoryBuffer<RawAllocator> m_IndexData;
+ DynamicIndexBuf() {}
+
+ void clear() { m_IndexData.clear(); }
+};
+
+struct SubsetDesc
+{
+ QT3DSU32 m_Count;
+ QT3DSU32 m_Offset;
+
+ NVBounds3 m_Bounds;
+ QString m_Name;
+ SubsetDesc(QT3DSU32 c, QT3DSU32 off)
+ : m_Count(c)
+ , m_Offset(off)
+ {
+ }
+ SubsetDesc()
+ : m_Count(0)
+ , m_Offset(0)
+ {
+ }
+};
+
+QT3DSU32 GetAlignedOffset(QT3DSU32 offset, QT3DSU32 align)
+{
+ QT3DSU32 leftover = offset % align;
+ if (leftover)
+ return offset + (align - leftover);
+ return offset;
+}
+
+class MeshBuilderImpl : public MeshBuilder
+{
+ DynamicVBuf m_VertexBuffer;
+ DynamicIndexBuf m_IndexBuffer;
+ ImportArray<Joint> m_Joints;
+ ImportArray<SubsetDesc> m_MeshSubsetDescs;
+ NVRenderDrawMode::Enum m_DrawMode;
+ NVRenderWinding::Enum m_Winding;
+ MemoryBuffer<RawAllocator> m_RemappedVertexData;
+ MemoryBuffer<RawAllocator> m_NewIndexBuffer;
+ ImportArray<QT3DSU8> m_MeshBuffer;
+
+public:
+ MeshBuilderImpl() { Reset(); }
+ virtual ~MeshBuilderImpl() { Reset(); }
+ void Release() override { delete this; }
+ void Reset() override
+ {
+ m_VertexBuffer.clear();
+ m_IndexBuffer.clear();
+ m_Joints.clear();
+ m_MeshSubsetDescs.clear();
+ m_DrawMode = NVRenderDrawMode::Triangles;
+ m_Winding = NVRenderWinding::CounterClockwise;
+ m_MeshBuffer.clear();
+ }
+
+ void SetDrawParameters(NVRenderDrawMode::Enum drawMode, NVRenderWinding::Enum winding) override
+ {
+ m_DrawMode = drawMode;
+ m_Winding = winding;
+ }
+
+ // Somewhat burly method to interleave the data as tightly as possible
+ // while taking alignment into account.
+ bool SetVertexBuffer(NVConstDataRef<MeshBuilderVBufEntry> entries) override
+ {
+ QT3DSU32 currentOffset = 0;
+ QT3DSU32 bufferAlignment = 0;
+ QT3DSU32 numItems = 0;
+ bool retval = true;
+ QT3DSIMP_FOREACH(idx, entries.size())
+ {
+ const MeshBuilderVBufEntry &entry(entries[idx]);
+ // Ignore entries with no data.
+ if (entry.m_Data.begin() == NULL || entry.m_Data.size() == 0)
+ continue;
+
+ QT3DSU32 alignment = NVRenderComponentTypes::getSizeofType(entry.m_ComponentType);
+ bufferAlignment = qMax(bufferAlignment, alignment);
+ QT3DSU32 byteSize = alignment * entry.m_NumComponents;
+
+ if (entry.m_Data.size() % alignment != 0) {
+ QT3DS_ASSERT(false);
+ retval = false;
+ }
+
+ QT3DSU32 localNumItems = entry.m_Data.size() / byteSize;
+ if (numItems == 0) {
+ numItems = localNumItems;
+ } else if (numItems != localNumItems) {
+ QT3DS_ASSERT(false);
+ retval = false;
+ numItems = qMin(numItems, localNumItems);
+ }
+ // Lots of platforms can't handle non-aligned data.
+ // so ensure we are aligned.
+ currentOffset = GetAlignedOffset(currentOffset, alignment);
+ NVRenderVertexBufferEntry vbufEntry(entry.m_Name, entry.m_ComponentType,
+ entry.m_NumComponents, currentOffset);
+ m_VertexBuffer.m_VertexBufferEntries.push_back(vbufEntry);
+ currentOffset += byteSize;
+ }
+ m_VertexBuffer.m_Stride = GetAlignedOffset(currentOffset, bufferAlignment);
+
+ // Packed interleave the data
+ QT3DSIMP_FOREACH(idx, numItems)
+ {
+ QT3DSU32 dataOffset = 0;
+ QT3DSIMP_FOREACH(entryIdx, entries.size())
+ {
+ const MeshBuilderVBufEntry &entry(entries[entryIdx]);
+ // Ignore entries with no data.
+ if (entry.m_Data.begin() == NULL || entry.m_Data.size() == 0)
+ continue;
+
+ QT3DSU32 alignment = NVRenderComponentTypes::getSizeofType(entry.m_ComponentType);
+ QT3DSU32 byteSize = alignment * entry.m_NumComponents;
+ QT3DSU32 offset = byteSize * idx;
+ QT3DSU32 newOffset = GetAlignedOffset(dataOffset, alignment);
+ if (newOffset != dataOffset)
+ m_VertexBuffer.m_VertexData.writeZeros(newOffset - dataOffset);
+ m_VertexBuffer.m_VertexData.write(entry.m_Data.begin() + offset, byteSize);
+ dataOffset = newOffset + byteSize;
+ }
+ QT3DS_ASSERT(dataOffset == m_VertexBuffer.m_Stride);
+ }
+ return retval;
+ }
+
+ void SetVertexBuffer(NVConstDataRef<NVRenderVertexBufferEntry> entries, QT3DSU32 stride,
+ NVConstDataRef<QT3DSU8> data) override
+ {
+ QT3DSIMP_FOREACH(idx, (QT3DSU32)entries.size())
+ {
+ m_VertexBuffer.m_VertexBufferEntries.push_back(entries[idx]);
+ }
+ m_VertexBuffer.m_VertexData.write(data.begin(), data.size());
+ if (stride == 0) {
+ // Calculate the stride of the buffer using the vbuf entries
+ QT3DSIMP_FOREACH(idx, entries.size())
+ {
+ const NVRenderVertexBufferEntry &entry(entries[idx]);
+ stride = qMax(stride, entry.m_FirstItemOffset
+ + (entry.m_NumComponents * NVRenderComponentTypes::getSizeofType(
+ entry.m_ComponentType)));
+ }
+ }
+ m_VertexBuffer.m_Stride = stride;
+ }
+
+ void SetIndexBuffer(NVConstDataRef<QT3DSU8> data, NVRenderComponentTypes::Enum comp) override
+ {
+ m_IndexBuffer.m_CompType = comp;
+ m_IndexBuffer.m_IndexData.write(data.begin(), data.size());
+ }
+
+ void AddJoint(QT3DSI32 jointID, QT3DSI32 parentID, const QT3DSF32 *invBindPose,
+ const QT3DSF32 *localToGlobalBoneSpace) override
+ {
+ m_Joints.push_back(Joint(jointID, parentID, invBindPose, localToGlobalBoneSpace));
+ }
+
+ SubsetDesc CreateSubset(const wchar_t *inName, QT3DSU32 count, QT3DSU32 offset)
+ {
+ if (inName == NULL)
+ inName = L"";
+ SubsetDesc retval(count, offset);
+ retval.m_Name = QString::fromWCharArray(inName);
+ return retval;
+ }
+
+ // indexBuffer QT3DS_MAX_U32 means no index buffer.
+ // count of QT3DS_MAX_U32 means use all available items
+ // offset means exactly what you would think. Offset is in item size, not bytes.
+ void AddMeshSubset(const wchar_t *inName, QT3DSU32 count, QT3DSU32 offset,
+ QT3DSU32 boundsPositionEntryIndex) override
+ {
+ SubsetDesc retval = CreateSubset(inName, count, offset);
+ if (boundsPositionEntryIndex != QT3DS_MAX_U32) {
+ retval.m_Bounds = Mesh::CalculateSubsetBounds(
+ m_VertexBuffer.m_VertexBufferEntries[boundsPositionEntryIndex],
+ m_VertexBuffer.m_VertexData, m_VertexBuffer.m_Stride, m_IndexBuffer.m_IndexData,
+ m_IndexBuffer.m_CompType, count, offset);
+ }
+ m_MeshSubsetDescs.push_back(retval);
+ }
+
+ void AddMeshSubset(const wchar_t *inName, QT3DSU32 count, QT3DSU32 offset,
+ const NVBounds3 &inBounds) override
+ {
+ SubsetDesc retval = CreateSubset(inName, count, offset);
+ retval.m_Bounds = inBounds;
+ m_MeshSubsetDescs.push_back(retval);
+ }
+#ifndef DISABLE_MESH_OPTIMIZATION
+ void DeletePrimitiveGroup(PrimitiveGroup *&inGroup)
+ {
+ if (inGroup)
+ delete[] inGroup;
+ inGroup = NULL;
+ }
+#endif
+ // We connect sub meshes which habe the same material
+ void ConnectSubMeshes() override
+ {
+ if (m_MeshSubsetDescs.size() < 2) {
+ // nothing to do
+ return;
+ }
+
+ QT3DSU32 matDuplicates = 0;
+
+ // as a pre-step we check if we have duplicate material at all
+ for (QT3DSU32 i = 0, subsetEnd = m_MeshSubsetDescs.size(); i < subsetEnd && !matDuplicates;
+ ++i) {
+ SubsetDesc &currentSubset = m_MeshSubsetDescs[i];
+
+ for (QT3DSU32 j = 0, subsetEnd = m_MeshSubsetDescs.size(); j < subsetEnd; ++j) {
+ SubsetDesc &theSubset = m_MeshSubsetDescs[j];
+
+ if (i == j)
+ continue;
+
+ if (currentSubset.m_Name == theSubset.m_Name) {
+ matDuplicates++;
+ break; // found a duplicate bail out
+ }
+ }
+ }
+
+ // did we find some duplicates?
+ if (matDuplicates) {
+ ImportArray<SubsetDesc> newMeshSubsetDescs;
+ ImportArray<SubsetDesc>::iterator theIter;
+ QString curMatName;
+ m_NewIndexBuffer.clear();
+
+ for (theIter = m_MeshSubsetDescs.begin(); theIter != m_MeshSubsetDescs.end();
+ ++theIter) {
+ bool bProcessed = false;
+
+ for (ImportArray<SubsetDesc>::iterator iter = newMeshSubsetDescs.begin();
+ iter != newMeshSubsetDescs.end(); ++iter) {
+ if (theIter->m_Name == iter->m_Name) {
+ bProcessed = true;
+ break;
+ }
+ }
+
+ if (bProcessed)
+ continue;
+
+ curMatName = theIter->m_Name;
+
+ QT3DSU32 theIndexCompSize =
+ NVRenderComponentTypes::getSizeofType(m_IndexBuffer.m_CompType);
+ // get pointer to indices
+ QT3DSU8 *theIndices =
+ (m_IndexBuffer.m_IndexData.begin()) + (theIter->m_Offset * theIndexCompSize);
+ // write new offset
+ theIter->m_Offset = m_NewIndexBuffer.size() / theIndexCompSize;
+ // store indices
+ m_NewIndexBuffer.write(theIndices, theIter->m_Count * theIndexCompSize);
+
+ for (QT3DSU32 j = 0, subsetEnd = m_MeshSubsetDescs.size(); j < subsetEnd; ++j) {
+ if (theIter == &m_MeshSubsetDescs[j])
+ continue;
+
+ SubsetDesc &theSubset = m_MeshSubsetDescs[j];
+
+ if (curMatName == theSubset.m_Name) {
+ // get pointer to indices
+ QT3DSU8 *theIndices = (m_IndexBuffer.m_IndexData.begin())
+ + (theSubset.m_Offset * theIndexCompSize);
+ // store indices
+ m_NewIndexBuffer.write(theIndices, theSubset.m_Count * theIndexCompSize);
+ // increment indices count
+ theIter->m_Count += theSubset.m_Count;
+ }
+ }
+
+ newMeshSubsetDescs.push_back(*theIter);
+ }
+
+ m_MeshSubsetDescs.clear();
+ m_MeshSubsetDescs = newMeshSubsetDescs;
+ m_IndexBuffer.m_IndexData.clear();
+ m_IndexBuffer.m_IndexData.write(m_NewIndexBuffer.begin(), m_NewIndexBuffer.size());
+
+ // compute new bounding box
+ for (theIter = m_MeshSubsetDescs.begin(); theIter != m_MeshSubsetDescs.end();
+ ++theIter) {
+ theIter->m_Bounds = Mesh::CalculateSubsetBounds(
+ m_VertexBuffer.m_VertexBufferEntries[0], m_VertexBuffer.m_VertexData,
+ m_VertexBuffer.m_Stride, m_IndexBuffer.m_IndexData, m_IndexBuffer.m_CompType,
+ theIter->m_Count, theIter->m_Offset);
+ }
+ }
+ }
+
+ // Here is the NVTriStrip magic.
+ void OptimizeMesh() override
+ {
+ if (NVRenderComponentTypes::getSizeofType(m_IndexBuffer.m_CompType) != 2) {
+ // we currently re-arrange unsigned int indices.
+ // this is because NvTriStrip only supports short indices
+ QT3DS_ASSERT(NVRenderComponentTypes::getSizeofType(m_IndexBuffer.m_CompType) == 4);
+ return;
+ }
+#ifndef DISABLE_MESH_OPTIMIZATION
+ SetCacheSize(CACHESIZE_GEFORCE3);
+ SetStitchStrips(true);
+ SetMinStripSize(0);
+ // Create the optimized list indices
+ SetListsOnly(true);
+ // Optimize the indices using NvTriStrip
+
+ // First, nv-tri-strip all of the indexes. They shouldn't be interleaved, meaning
+ // there is an assumption here that mesh subset1 doesn't uses indexes from mesh subset 2.
+ // They may share vertexes, however, which means that we need to be careful when remapping
+ // them.
+ // Have to go subset by subset in order for the tri-strip to avoid stepping on subsets.
+ m_NewIndexBuffer.clear();
+ for (QT3DSU32 subsetIdx = 0, subsetEnd = m_MeshSubsetDescs.size(); subsetIdx < subsetEnd;
+ ++subsetIdx) {
+ SubsetDesc &theSubset = m_MeshSubsetDescs[subsetIdx];
+ QT3DSU16 *theIndices =
+ reinterpret_cast<QT3DSU16 *>(m_IndexBuffer.m_IndexData.begin()) + theSubset.m_Offset;
+ QT3DSU32 theIndexCount = theSubset.m_Count;
+ QT3DSU16 theNumGroups = 0;
+ PrimitiveGroup *thePrimitiveGroupsList = NULL;
+ theSubset.m_Offset = m_NewIndexBuffer.size() / sizeof(QT3DSU16);
+ theSubset.m_Count = 0;
+
+ // We don't support larger vertex buffers. That requires splitting the buffer,
+ // an operation we haven't implemented (yet).
+ if (GenerateStrips(theIndices, theIndexCount, &thePrimitiveGroupsList, &theNumGroups)) {
+ if (theNumGroups) {
+ QT3DS_ASSERT(theNumGroups == 1);
+ PrimitiveGroup &srcGroup(thePrimitiveGroupsList[0]);
+ QT3DS_ASSERT(srcGroup.type == PT_LIST);
+ m_NewIndexBuffer.write(srcGroup.indices, srcGroup.numIndices);
+ theSubset.m_Count = srcGroup.numIndices;
+ }
+ }
+
+ DeletePrimitiveGroup(thePrimitiveGroupsList);
+ }
+ m_IndexBuffer.m_IndexData.clear();
+ m_IndexBuffer.m_IndexData.write(m_NewIndexBuffer.begin(), m_NewIndexBuffer.size());
+
+#ifndef DISABLE_VERTEX_REMAP
+ // This operation does not go subset by subset
+ // by rather remaps the entire vertex buffer in one shot
+ // once all of the index buffers are setup.
+ QT3DSU16 *theIndices = reinterpret_cast<QT3DSU16 *>(m_IndexBuffer.m_IndexData.begin());
+ QT3DSU32 theIndexCount = m_IndexBuffer.m_IndexData.size() / sizeof(QT3DSU16);
+
+ // Setup input to the remap system
+ QT3DSU16 theNumGroups = 1;
+ PrimitiveGroup thePrimitiveGroup;
+ thePrimitiveGroup.type = PT_LIST;
+ thePrimitiveGroup.numIndices = theIndexCount;
+ thePrimitiveGroup.indices = new QT3DSU16[theIndexCount];
+ memCopy(thePrimitiveGroup.indices, theIndices, theIndexCount * sizeof(QT3DSU16));
+
+ PrimitiveGroup *theRemappedGroup = NULL;
+ QT3DSU32 vertBufByteSize = m_VertexBuffer.m_VertexData.size();
+ QT3DSU32 numVertexIndices = vertBufByteSize / m_VertexBuffer.m_Stride;
+ QT3DS_ASSERT(numVertexIndices < QT3DS_MAX_U16);
+ QT3DSU32 vertBufStride = m_VertexBuffer.m_Stride;
+ // This remaps the vertexes
+ RemapIndices(&thePrimitiveGroup, theNumGroups, static_cast<QT3DSU16>(numVertexIndices),
+ &theRemappedGroup);
+ m_RemappedVertexData.reserve(vertBufByteSize);
+ const QT3DSU8 *srcVertexPtr(m_VertexBuffer.m_VertexData.begin());
+ QT3DSU8 *dstVertexPtr(m_RemappedVertexData.begin());
+ QT3DS_ASSERT(theNumGroups == 1);
+ for (QT3DSU32 theGroupIdx = 0; theGroupIdx < 1; ++theGroupIdx) {
+ PrimitiveGroup &srcGroup(thePrimitiveGroup);
+ PrimitiveGroup &dstGroup(theRemappedGroup[theGroupIdx]);
+ QT3DS_ASSERT(srcGroup.type == PT_LIST);
+
+ for (QT3DSU32 theIndexIdx = 0; theIndexIdx < srcGroup.numIndices; ++theIndexIdx) {
+ QT3DSU16 srcIndex = srcGroup.indices[theIndexIdx];
+ QT3DSU16 dstIndex = dstGroup.indices[theIndexIdx];
+ QT3DS_ASSERT(dstIndex * m_VertexBuffer.m_Stride < vertBufByteSize);
+ QT3DS_ASSERT(srcIndex * m_VertexBuffer.m_Stride < vertBufByteSize);
+ // Maybe add in a check to see if we possibly already copied this information
+ // That would of course be only an optimization.
+ memCopy(dstVertexPtr + dstIndex * vertBufStride,
+ srcVertexPtr + srcIndex * vertBufStride, vertBufStride);
+ theIndices[theIndexIdx] = dstIndex;
+ }
+ memCopy(m_VertexBuffer.m_VertexData.begin(), m_RemappedVertexData.begin(),
+ vertBufByteSize);
+ }
+
+ DeletePrimitiveGroup(theRemappedGroup);
+#endif // DISABLE_VERTEX_REMAP
+#endif // DISABLE_MESH_OPTIMIZATION
+ }
+
+ template <typename TDataType>
+ static void Assign(QT3DSU8 *inBaseAddress, QT3DSU8 *inDataAddress,
+ SOffsetDataRef<TDataType> &inBuffer, const TDataType *inDestData,
+ QT3DSU32 inDestSize)
+ {
+ inBuffer.m_Offset = (QT3DSU32)(inDataAddress - inBaseAddress);
+ inBuffer.m_Size = inDestSize;
+ memCopy(inDataAddress, inDestData, inDestSize * sizeof(TDataType));
+ }
+ template <typename TDataType>
+ static void Assign(QT3DSU8 *inBaseAddress, QT3DSU8 *inDataAddress,
+ SOffsetDataRef<TDataType> &inBuffer, QT3DSU32 inDestSize)
+ {
+ inBuffer.m_Offset = (QT3DSU32)(inDataAddress - inBaseAddress);
+ inBuffer.m_Size = inDestSize;
+ }
+ // Return the current mesh. This is only good for this function call, item may change or be
+ // released
+ // due to any further function calls.
+ Mesh &GetMesh() override
+ {
+ QT3DSU32 meshSize = sizeof(Mesh);
+ QT3DSU32 alignment = sizeof(void *);
+ QT3DSU32 vertDataSize = GetAlignedOffset(m_VertexBuffer.m_VertexData.size(), alignment);
+ meshSize += vertDataSize;
+ QT3DSU32 entrySize = m_VertexBuffer.m_VertexBufferEntries.size()
+ * sizeof(qt3ds::render::NVRenderVertexBufferEntry);
+ meshSize += entrySize;
+ QT3DSU32 entryNameSize = 0;
+ for (QT3DSU32 idx = 0, end = m_VertexBuffer.m_VertexBufferEntries.size(); idx < end; ++idx) {
+ const qt3ds::render::NVRenderVertexBufferEntry &theEntry(
+ m_VertexBuffer.m_VertexBufferEntries[idx]);
+ const char *entryName = theEntry.m_Name;
+ if (entryName == NULL)
+ entryName = "";
+ entryNameSize += (QT3DSU32)(strlen(theEntry.m_Name)) + 1;
+ }
+ entryNameSize = GetAlignedOffset(entryNameSize, alignment);
+ meshSize += entryNameSize;
+ QT3DSU32 indexBufferSize = GetAlignedOffset(m_IndexBuffer.m_IndexData.size(), alignment);
+ meshSize += indexBufferSize;
+ QT3DSU32 subsetSize = m_MeshSubsetDescs.size() * sizeof(MeshSubset);
+ QT3DSU32 nameSize = 0;
+ for (QT3DSU32 idx = 0, end = m_MeshSubsetDescs.size(); idx < end; ++idx) {
+ if (!m_MeshSubsetDescs[idx].m_Name.isEmpty())
+ nameSize += m_MeshSubsetDescs[idx].m_Name.size() + 1;
+ }
+ nameSize *= sizeof(char16_t);
+ nameSize = GetAlignedOffset(nameSize, alignment);
+
+ meshSize += subsetSize + nameSize;
+ QT3DSU32 jointsSize = m_Joints.size() * sizeof(qt3dsimp::Joint);
+ meshSize += jointsSize;
+ m_MeshBuffer.resize(meshSize);
+ QT3DSU8 *baseAddress = m_MeshBuffer.data();
+ Mesh *retval = reinterpret_cast<Mesh *>(baseAddress);
+ retval->m_DrawMode = m_DrawMode;
+ retval->m_Winding = m_Winding;
+ QT3DSU8 *vertBufferData = baseAddress + sizeof(Mesh);
+ QT3DSU8 *vertEntryData = vertBufferData + vertDataSize;
+ QT3DSU8 *vertEntryNameData = vertEntryData + entrySize;
+ QT3DSU8 *indexBufferData = vertEntryNameData + entryNameSize;
+ QT3DSU8 *subsetBufferData = indexBufferData + indexBufferSize;
+ QT3DSU8 *nameBufferData = subsetBufferData + subsetSize;
+ QT3DSU8 *jointBufferData = nameBufferData + nameSize;
+
+ retval->m_VertexBuffer.m_Stride = m_VertexBuffer.m_Stride;
+ Assign(baseAddress, vertBufferData, retval->m_VertexBuffer.m_Data,
+ m_VertexBuffer.m_VertexData.begin(), m_VertexBuffer.m_VertexData.size());
+ retval->m_VertexBuffer.m_Entries.m_Size = m_VertexBuffer.m_VertexBufferEntries.size();
+ retval->m_VertexBuffer.m_Entries.m_Offset = (QT3DSU32)(vertEntryData - baseAddress);
+ for (QT3DSU32 idx = 0, end = m_VertexBuffer.m_VertexBufferEntries.size(); idx < end; ++idx) {
+ const qt3ds::render::NVRenderVertexBufferEntry &theEntry(
+ m_VertexBuffer.m_VertexBufferEntries[idx]);
+ MeshVertexBufferEntry &theDestEntry(
+ retval->m_VertexBuffer.m_Entries.index(baseAddress, idx));
+ theDestEntry.m_ComponentType = theEntry.m_ComponentType;
+ theDestEntry.m_FirstItemOffset = theEntry.m_FirstItemOffset;
+ theDestEntry.m_NumComponents = theEntry.m_NumComponents;
+ const char *targetName = theEntry.m_Name;
+ if (targetName == NULL)
+ targetName = "";
+
+ QT3DSU32 entryNameLen = (QT3DSU32)(strlen(targetName)) + 1;
+ theDestEntry.m_NameOffset = (QT3DSU32)(vertEntryNameData - baseAddress);
+ memCopy(vertEntryNameData, theEntry.m_Name, entryNameLen);
+ vertEntryNameData += entryNameLen;
+ }
+
+ retval->m_IndexBuffer.m_ComponentType = m_IndexBuffer.m_CompType;
+ Assign(baseAddress, indexBufferData, retval->m_IndexBuffer.m_Data,
+ m_IndexBuffer.m_IndexData.begin(), m_IndexBuffer.m_IndexData.size());
+ Assign(baseAddress, subsetBufferData, retval->m_Subsets, m_MeshSubsetDescs.size());
+ for (QT3DSU32 idx = 0, end = m_MeshSubsetDescs.size(); idx < end; ++idx) {
+ SubsetDesc &theDesc = m_MeshSubsetDescs[idx];
+ MeshSubset &theSubset = reinterpret_cast<MeshSubset *>(subsetBufferData)[idx];
+ theSubset.m_Bounds = theDesc.m_Bounds;
+ theSubset.m_Count = theDesc.m_Count;
+ theSubset.m_Offset = theDesc.m_Offset;
+ if (!theDesc.m_Name.isEmpty()) {
+ theSubset.m_Name.m_Size = theDesc.m_Name.size() + 1;
+ theSubset.m_Name.m_Offset = (QT3DSU32)(nameBufferData - baseAddress);
+ std::transform(theDesc.m_Name.begin(), theDesc.m_Name.end(),
+ reinterpret_cast<char16_t *>(nameBufferData),
+ [](QChar c) { return static_cast<char16_t>(c.unicode()); });
+ reinterpret_cast<char16_t *>(nameBufferData)[theDesc.m_Name.size()] = 0;
+ nameBufferData += (theDesc.m_Name.size() + 1) * sizeof(char16_t);
+ } else {
+ theSubset.m_Name.m_Size = 0;
+ theSubset.m_Name.m_Offset = 0;
+ }
+ }
+ Assign(baseAddress, jointBufferData, retval->m_Joints, m_Joints.data(), m_Joints.size());
+ return *retval;
+ }
+};
+}
+
+// Uses new/delete.
+MeshBuilder &MeshBuilder::CreateMeshBuilder()
+{
+ return *(new MeshBuilderImpl());
+}
diff --git a/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportPath.cpp b/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportPath.cpp
new file mode 100644
index 00000000..3523ef59
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportPath.cpp
@@ -0,0 +1,152 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "Qt3DSImportLibPrecompile.h"
+#include "Qt3DSImportPath.h"
+#include "foundation/Qt3DSBroadcastingAllocator.h"
+#include "foundation/Qt3DSAtomic.h"
+
+using namespace qt3dsimp;
+
+void SPathBuffer::Save(IOutStream &outStream) const
+{
+ outStream.Write(GetFileTag());
+ outStream.Write(GetFileVersion());
+ outStream.Write((QT3DSU32)m_Commands.size());
+ outStream.Write((QT3DSU32)m_Data.size());
+ outStream.Write(toU8ConstDataRef((PathCommand::Enum *)m_Commands.begin(), m_Commands.size()));
+ outStream.Write(toU8ConstDataRef((QT3DSF32 *)m_Data.begin(), m_Data.size()));
+}
+
+SPathBuffer *SPathBuffer::Load(IInStream &inStream, NVFoundationBase &inFoundation)
+{
+ QT3DSU64 fileTag;
+ QT3DSU32 version, numCommands, numData;
+ inStream.Read(fileTag);
+ inStream.Read(version);
+ inStream.Read(numCommands);
+ inStream.Read(numData);
+ if (fileTag != GetFileTag()) {
+ qCCritical(INVALID_OPERATION, "Invalid file, not a path file");
+ return NULL;
+ }
+ if (version > GetFileVersion()) {
+ qCCritical(INVALID_OPERATION, "Version number out of range.");
+ return NULL;
+ }
+ QT3DSU32 commandSize = numCommands * sizeof(QT3DSU32);
+ QT3DSU32 dataSize = numData * sizeof(QT3DSF32);
+ QT3DSU32 objectSize = sizeof(SPathBuffer);
+ QT3DSU32 allocSize = objectSize + commandSize + dataSize;
+ QT3DSU8 *rawData =
+ (QT3DSU8 *)inFoundation.getAllocator().allocate(allocSize, "SPathBuffer", __FILE__, __LINE__);
+ SPathBuffer *retval = new (rawData) SPathBuffer();
+ QT3DSU8 *commandBuffer = rawData + sizeof(SPathBuffer);
+ QT3DSU8 *dataBuffer = commandBuffer + commandSize;
+ inStream.Read(commandBuffer, commandSize);
+ inStream.Read(dataBuffer, dataSize);
+ retval->m_Commands = toDataRef((PathCommand::Enum *)commandBuffer, numCommands);
+ retval->m_Data = toDataRef((QT3DSF32 *)dataBuffer, numData);
+ return retval;
+}
+
+void SPathBuffer::Free(NVAllocatorCallback &inAllocator)
+{
+ inAllocator.deallocate(this);
+}
+
+namespace {
+struct SBuilder : public IPathBufferBuilder
+{
+ NVFoundationBase &m_Foundation;
+ nvvector<PathCommand::Enum> m_Commands;
+ nvvector<QT3DSF32> m_Data;
+ QT3DSI32 m_RefCount;
+
+ SBuilder(NVFoundationBase &inFoundation)
+ : m_Foundation(inFoundation)
+ , m_Commands(inFoundation.getAllocator(), "m_Commands")
+ , m_Data(inFoundation.getAllocator(), "m_Data")
+ , m_RefCount(0)
+ {
+ }
+
+ void addRef() override { atomicIncrement(&m_RefCount); }
+
+ void release() override
+ {
+ atomicDecrement(&m_RefCount);
+ if (m_RefCount <= 0) {
+ NVAllocatorCallback &theAlloc(m_Foundation.getAllocator());
+ NVDelete(theAlloc, this);
+ }
+ }
+
+ void Clear() override
+ {
+ m_Commands.clear();
+ m_Data.clear();
+ }
+
+ void Push(const QT3DSVec2 inPos)
+ {
+ m_Data.push_back(inPos.x);
+ m_Data.push_back(inPos.y);
+ }
+
+ void MoveTo(const QT3DSVec2 &inPos) override
+ {
+ m_Commands.push_back(PathCommand::MoveTo);
+ Push(inPos);
+ }
+
+ void CubicCurveTo(const QT3DSVec2 &inC1, const QT3DSVec2 &inC2, const QT3DSVec2 &inP2) override
+ {
+ m_Commands.push_back(PathCommand::CubicCurveTo);
+ Push(inC1);
+ Push(inC2);
+ Push(inP2);
+ }
+
+ void Close() override { m_Commands.push_back(PathCommand::Close); }
+
+ // Points back to internal data structures, must use or copy.
+ SPathBuffer GetPathBuffer() override
+ {
+ SPathBuffer retval;
+ retval.m_Data = m_Data;
+ retval.m_Commands = m_Commands;
+ return retval;
+ }
+};
+}
+
+IPathBufferBuilder &IPathBufferBuilder::CreateBuilder(NVFoundationBase &inFoundation)
+{
+ return *QT3DS_NEW(inFoundation.getAllocator(), SBuilder)(inFoundation);
+}
diff --git a/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportPath.h b/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportPath.h
new file mode 100644
index 00000000..3b52c8ce
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/importlib/Qt3DSImportPath.h
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#pragma once
+#ifndef QT3DS_IMPORT_PATH_H
+#define QT3DS_IMPORT_PATH_H
+#include "foundation/Qt3DS.h"
+#include "foundation/Qt3DSDataRef.h"
+#include "render/Qt3DSRenderBaseTypes.h"
+#include "foundation/Qt3DSBounds3.h"
+#include "foundation/Qt3DSAllocatorCallback.h"
+#include "foundation/IOStreams.h"
+#include "foundation/Qt3DSFoundation.h"
+#include "foundation/Qt3DSRefCounted.h"
+#include "foundation/Qt3DSVec2.h"
+
+namespace qt3dsimp {
+using namespace qt3ds;
+using namespace qt3ds::foundation;
+using namespace qt3ds::render;
+struct PathCommand
+{
+ enum Enum {
+ Noner = 0,
+ MoveTo, // 2 floats
+ CubicCurveTo, // 6 floats, c1, c2, p2. p1 is existing location
+ Close, // 0 floats
+ };
+};
+
+struct SPathBuffer
+{
+ // 64 bit random number to uniquely identify this file type.
+ static QT3DSU64 GetFileTag() { return 0x7b1a41633c43a6afULL; }
+ static QT3DSU32 GetFileVersion() { return 1; }
+ NVConstDataRef<PathCommand::Enum> m_Commands;
+ NVConstDataRef<QT3DSF32> m_Data;
+ SPathBuffer() {}
+ void Save(IOutStream &outStream) const;
+ static SPathBuffer *Load(IInStream &inStream, NVFoundationBase &inFoundation);
+
+ // Object is unused after this call. Anything created with Load must use this function.
+ void Free(NVAllocatorCallback &inAllocator);
+ SPathBuffer *Copy(NVAllocatorCallback &inAllocator) const;
+};
+
+class IPathBufferBuilder : public NVRefCounted
+{
+public:
+ virtual void Clear() = 0;
+
+ virtual void MoveTo(const QT3DSVec2 &inPos) = 0;
+ virtual void CubicCurveTo(const QT3DSVec2 &inC1, const QT3DSVec2 &inC2, const QT3DSVec2 &inP2) = 0;
+ virtual void Close() = 0;
+ // Points back to internal data structures, must use or copy.
+ virtual SPathBuffer GetPathBuffer() = 0;
+
+ static IPathBufferBuilder &CreateBuilder(NVFoundationBase &inFoundation);
+};
+}
+
+#endif \ No newline at end of file
diff --git a/src/Runtime/Qt3DSRuntime/Qt3DSRuntime.pro b/src/Runtime/ogl-runtime/src/ogl-runtime-dylib/ogl-runtime-dylib.pro
index 54aa0442..48929cfc 100644
--- a/src/Runtime/Qt3DSRuntime/Qt3DSRuntime.pro
+++ b/src/Runtime/ogl-runtime/src/ogl-runtime-dylib/ogl-runtime-dylib.pro
@@ -9,23 +9,23 @@ include(../commoninclude.pri)
QT += qml
boot2qt: {
- RESOURCES += ../res.qrc
+ RESOURCES += ../../res.qrc
DEFINES += EMBEDDED_LINUX # TODO: Is there a compile-time flag for boot2qt?
}
integrity|ios {
- RESOURCES += ../res.qrc
+ RESOURCES += ../../res.qrc
}
SOURCES += \
- ../Source/viewer/Qt3DSAudioPlayerImpl.cpp \
- ../Source/viewer/Qt3DSViewerApp.cpp
+ ../viewer/Qt3DSAudioPlayerImpl.cpp \
+ ../viewer/Qt3DSViewerApp.cpp
HEADERS += \
- ../Source/viewer/qt3dsruntimeglobal.h \
- ../Source/viewer/Qt3DSAudioPlayerImpl.h \
- ../Source/viewer/Qt3DSViewerApp.h \
- ../Source/viewer/Qt3DSViewerTimer.h
+ ../viewer/qt3dsruntimeglobal.h \
+ ../viewer/Qt3DSAudioPlayerImpl.h \
+ ../viewer/Qt3DSViewerApp.h \
+ ../viewer/Qt3DSViewerTimer.h
linux|qnx|mingw {
BEGIN_ARCHIVE = -Wl,--whole-archive
@@ -54,7 +54,7 @@ win32 {
LIBS += \
-lws2_32
- RESOURCES += ../platformres.qrc
+ RESOURCES += ../../platformres.qrc
}
linux {
diff --git a/src/Runtime/ogl-runtime/src/ogl-runtime-static/ogl-runtime-static.pro b/src/Runtime/ogl-runtime/src/ogl-runtime-static/ogl-runtime-static.pro
new file mode 100644
index 00000000..8b2c95a4
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/ogl-runtime-static/ogl-runtime-static.pro
@@ -0,0 +1,656 @@
+TEMPLATE = lib
+TARGET = qt3dsruntimestatic
+CONFIG += staticlib
+include(../commoninclude.pri)
+
+!boot2qt:!integrity:!ios {
+ RESOURCES += ../../res.qrc
+}
+
+linux {
+ DEFINES += _POSIX_C_SOURCE=199309L
+ QMAKE_LFLAGS += -lrt
+}
+
+DEFINES += QT3DS_BUILDING_LIBRARY DISABLE_MESH_OPTIMIZATION
+
+QT += qml
+QT += quick-private
+
+# Foundation
+SOURCES += \
+ ../foundation/ConvertUTF.cpp \
+ ../foundation/EASTL_new.cpp \
+ ../foundation/FileTools.cpp \
+ ../foundation/IOStreams.cpp \
+ ../foundation/Qt3DSLogging.cpp \
+ ../foundation/Qt3DSFoundation.cpp \
+ ../foundation/Qt3DSMathUtils.cpp \
+ ../foundation/Qt3DSPerfTimer.cpp \
+ ../foundation/Qt3DSSystem.cpp \
+ ../foundation/Socket.cpp \
+ ../foundation/StringTable.cpp \
+ ../foundation/XML.cpp \
+ ../foundation/TrackingAllocator.cpp \
+ ../runtimerender/q3dsqmlrender.cpp \
+ ../engine/Qt3DSRenderRuntimeBinding.cpp \
+ ../engine/Qt3DSRenderRuntimeBindingImplRenderer.cpp \
+ ../engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp \
+ ../engine/Qt3DSTegraInputEngine.cpp \
+ ../runtime/Qt3DSActivationManager.cpp \
+ ../runtime/Qt3DSAnimationSystem.cpp \
+ ../runtime/Qt3DSApplication.cpp \
+ ../runtime/Qt3DSAttributeHashes.cpp \
+ ../runtime/Qt3DSComponentManager.cpp \
+ ../runtime/Qt3DSElementSystem.cpp \
+ ../runtime/Qt3DSEventCallbacks.cpp \
+ ../runtime/Qt3DSInputEngine.cpp \
+ ../runtime/Qt3DSLogicSystem.cpp \
+ ../runtime/Qt3DSCommandHelper.cpp \
+ ../runtime/Qt3DSElementHelper.cpp \
+ ../runtime/Qt3DSOutputMemoryStream.cpp \
+ ../runtime/Qt3DSParametersSystem.cpp \
+ ../runtime/Qt3DSPresentation.cpp \
+ ../runtime/Qt3DSPresentationFrameData.cpp \
+ ../runtime/Qt3DSQmlElementHelper.cpp \
+ ../runtime/Qt3DSQmlEngine.cpp \
+ ../runtime/Qt3DSSlideSystem.cpp \
+ ../runtime/Qt3DSTimePolicy.cpp \
+ ../runtime/q3dsvariantconfig.cpp \
+ ../runtime/q3dsmaterialdefinitionparser.cpp \
+ ../runtimerender/graphobjects/Qt3DSRenderCamera.cpp \
+ ../runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp \
+ ../runtimerender/graphobjects/Qt3DSRenderDynamicObject.cpp \
+ ../runtimerender/graphobjects/Qt3DSRenderEffect.cpp \
+ ../runtimerender/graphobjects/Qt3DSRenderImage.cpp \
+ ../runtimerender/graphobjects/Qt3DSRenderLayer.cpp \
+ ../runtimerender/graphobjects/Qt3DSRenderLight.cpp \
+ ../runtimerender/graphobjects/Qt3DSRenderLightmaps.cpp \
+ ../runtimerender/graphobjects/Qt3DSRenderModel.cpp \
+ ../runtimerender/graphobjects/Qt3DSRenderNode.cpp \
+ ../runtimerender/graphobjects/Qt3DSRenderPath.cpp \
+ ../runtimerender/graphobjects/Qt3DSRenderPresentation.cpp \
+ ../runtimerender/graphobjects/Qt3DSRenderScene.cpp \
+ ../runtimerender/graphobjects/Qt3DSRenderText.cpp \
+ ../runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp \
+ ../runtimerender/rendererimpl/Qt3DSRendererImpl.cpp \
+ ../runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp \
+ ../runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp \
+ ../runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp \
+ ../runtimerender/rendererimpl/Qt3DSRendererImplShaders.cpp \
+ ../runtimerender/resourcemanager/Qt3DSRenderBufferLoader.cpp \
+ ../runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp \
+ ../runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.cpp \
+ ../runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.cpp \
+ ../runtimerender/resourcemanager/Qt3DSRenderLoadedTextureBMP.cpp \
+ ../runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.cpp \
+ ../runtimerender/resourcemanager/Qt3DSRenderLoadedTextureGIF.cpp \
+ ../runtimerender/resourcemanager/Qt3DSRenderLoadedTextureHDR.cpp \
+ ../runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.cpp \
+ ../runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.cpp \
+ ../runtimerender/resourcemanager/Qt3DSRenderResourceManager.cpp \
+ ../runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.cpp \
+ ../runtimerender/Qt3DSOffscreenRenderManager.cpp \
+ ../runtimerender/Qt3DSOldNBustedRenderPlugin.cpp \
+ ../runtimerender/Qt3DSOnscreenTextRenderer.cpp \
+ ../runtimerender/Qt3DSQtTextRenderer.cpp \
+ ../runtimerender/Qt3DSRenderClippingFrustum.cpp \
+ ../runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp \
+ ../runtimerender/Qt3DSRenderCustomMaterialSystem.cpp \
+ ../runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp \
+ ../runtimerender/Qt3DSRenderDynamicObjectSystem.cpp \
+ ../runtimerender/Qt3DSRenderEffectSystem.cpp \
+ ../runtimerender/Qt3DSRendererUtil.cpp \
+ ../runtimerender/Qt3DSRenderEulerAngles.cpp \
+ ../runtimerender/Qt3DSRenderGpuProfiler.cpp \
+ ../runtimerender/Qt3DSRenderGraphObjectSerializer.cpp \
+ ../runtimerender/Qt3DSRenderImageScaler.cpp \
+ ../runtimerender/Qt3DSRenderInputStreamFactory.cpp \
+ ../runtimerender/Qt3DSRenderPathManager.cpp \
+ ../runtimerender/Qt3DSRenderPixelGraphicsRenderer.cpp \
+ ../runtimerender/Qt3DSRenderPixelGraphicsTypes.cpp \
+ ../runtimerender/Qt3DSRenderPlugin.cpp \
+ ../runtimerender/Qt3DSRenderRay.cpp \
+ ../runtimerender/Qt3DSRenderRenderList.cpp \
+ ../runtimerender/Qt3DSRenderShaderCache.cpp \
+ ../runtimerender/Qt3DSRenderShaderCodeGenerator.cpp \
+ ../runtimerender/Qt3DSRenderShaderCodeGeneratorV2.cpp \
+ ../runtimerender/Qt3DSRenderShadowMap.cpp \
+ ../runtimerender/Qt3DSRenderSubpresentation.cpp \
+ ../runtimerender/Qt3DSRenderTextTextureAtlas.cpp \
+ ../runtimerender/Qt3DSRenderTextTextureCache.cpp \
+ ../runtimerender/Qt3DSRenderTextureAtlas.cpp \
+ ../runtimerender/Qt3DSRenderThreadPool.cpp \
+ ../runtimerender/Qt3DSRenderUIPLoader.cpp \
+ ../runtimerender/Qt3DSRenderUIPSharedTranslation.cpp \
+ ../runtimerender/Qt3DSRenderWidgets.cpp \
+ ../runtimerender/Qt3DSTextRenderer.cpp \
+ ../system/Qt3DSAssert.cpp \
+ ../system/Qt3DSBoundingBox.cpp \
+ ../system/Qt3DSColor.cpp \
+ ../system/Qt3DSCubicRoots.cpp \
+ ../system/Qt3DSDataLogger.cpp \
+ ../system/Qt3DSDLLManager.cpp \
+ ../system/Qt3DSEulerAngles.cpp \
+ ../system/Qt3DSFile.cpp \
+ ../system/Qt3DSFileStream.cpp \
+ ../system/Qt3DSFunctionWrappers.cpp \
+ ../system/Qt3DSMatrix.cpp \
+ ../system/Qt3DSMemory.cpp \
+ ../system/Qt3DSMemoryFilter.cpp \
+ ../system/Qt3DSMemoryHeap.cpp \
+ ../system/Qt3DSMemoryManager.cpp \
+ ../system/Qt3DSMemoryPool.cpp \
+ ../system/Qt3DSMemoryProbe.cpp \
+ ../system/Qt3DSMemoryStatistics.cpp \
+ ../system/Qt3DSMemoryTracker.cpp \
+ ../system/Qt3DSTimer.cpp \
+ ../system/Qt3DSTypes.cpp \
+ ../system/Qt3DSVector3.cpp \
+ ../uipparser/Qt3DSUIPParserActionHelper.cpp \
+ ../uipparser/Qt3DSUIPParserImpl.cpp \
+ ../uipparser/Qt3DSUIPParserObjectRefHelper.cpp \
+ ../runtimerender/Qt3DSRenderContextCore.cpp \
+ ../runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.cpp \
+ ../runtimerender/Qt3DSDistanceFieldRenderer.cpp \
+ ../runtimerender/Qt3DSFontDatabase.cpp \
+ ../runtimerender/Qt3DSDistanceFieldGlyphCacheManager.cpp \
+ ../runtimerender/Qt3DSDistanceFieldGlyphCache.cpp \
+ ../engine/Qt3DSRuntimeView.cpp
+
+HEADERS += \
+ ../foundation/ConvertUTF.h \
+ ../foundation/FileTools.h \
+ ../foundation/StringTools.h \
+ ../foundation/IOStreams.h \
+ ../foundation/Qt3DSLogging.h \
+ ../foundation/Qt3DSFoundation.h \
+ ../foundation/Qt3DSMathUtils.h \
+ ../foundation/Qt3DSPerfTimer.h \
+ ../foundation/Qt3DSSystem.h \
+ ../foundation/Socket.h \
+ ../foundation/StringTable.h \
+ ../foundation/XML.h \
+ ../foundation/AutoDeallocatorAllocator.h \
+ ../foundation/FastAllocator.h \
+ ../foundation/PoolingAllocator.h \
+ ../foundation/PreAllocatedAllocator.h \
+ ../foundation/Qt3DS.h \
+ ../foundation/Qt3DSAllocator.h \
+ ../foundation/Qt3DSAllocatorCallback.h \
+ ../foundation/Qt3DSAssert.h \
+ ../foundation/Qt3DSAtomic.h \
+ ../foundation/Qt3DSBasicTemplates.h \
+ ../foundation/Qt3DSBounds3.h \
+ ../foundation/Qt3DSBroadcastingAllocator.h \
+ ../foundation/Qt3DSContainers.h \
+ ../foundation/Qt3DSDataRef.h \
+ ../foundation/Qt3DSDiscriminatedUnion.h \
+ ../foundation/Qt3DSFastIPC.h \
+ ../foundation/Qt3DSFlags.h \
+ ../foundation/Qt3DSFPU.h \
+ ../foundation/Qt3DSIndexableLinkedList.h \
+ ../foundation/Qt3DSIntrinsics.h \
+ ../foundation/Qt3DSInvasiveLinkedList.h \
+ ../foundation/Qt3DSInvasiveSet.h \
+ ../foundation/Qt3DSIPC.h \
+ ../foundation/Qt3DSMat33.h \
+ ../foundation/Qt3DSMat44.h \
+ ../foundation/Qt3DSMath.h \
+ ../foundation/Qt3DSMemoryBuffer.h \
+ ../foundation/Qt3DSMutex.h \
+ ../foundation/Qt3DSNoCopy.h \
+ ../foundation/Qt3DSOption.h \
+ ../foundation/Qt3DSPlane.h \
+ ../foundation/Qt3DSPool.h \
+ ../foundation/Qt3DSPreprocessor.h \
+ ../foundation/Qt3DSQuat.h \
+ ../foundation/Qt3DSRefCounted.h \
+ ../foundation/Qt3DSSemaphore.h \
+ ../foundation/Qt3DSSimpleTypes.h \
+ ../foundation/Qt3DSStringTokenizer.h \
+ ../foundation/Qt3DSSync.h \
+ ../foundation/Qt3DSThread.h \
+ ../foundation/Qt3DSTime.h \
+ ../foundation/Qt3DSTransform.h \
+ ../foundation/Qt3DSUnionCast.h \
+ ../foundation/Qt3DSUtilities.h \
+ ../foundation/Qt3DSVec2.h \
+ ../foundation/Qt3DSVec3.h \
+ ../foundation/Qt3DSVec4.h \
+ ../foundation/Qt3DSVersionNumber.h \
+ ../foundation/SerializationTypes.h \
+ ../foundation/StrConvertUTF.h \
+ ../foundation/StringConversion.h \
+ ../foundation/StringConversionImpl.h \
+ ../foundation/TaggedPointer.h \
+ ../foundation/ThreadSafeQueue.h \
+ ../foundation/TrackingAllocator.h \
+ ../foundation/Utils.h \
+ ../runtimerender/q3dsqmlrender.h \
+ ../engine/Qt3DSRenderRuntimeBinding.h \
+ ../engine/Qt3DSRenderRuntimeBindingImpl.h \
+ ../engine/Qt3DSTegraInputEngine.h \
+ ../runtime/Qt3DSActivationManager.h \
+ ../runtime/Qt3DSAnimationSystem.h \
+ ../runtime/Qt3DSApplication.h \
+ ../runtime/Qt3DSAttributeHashes.h \
+ ../runtime/Qt3DSComponentManager.h \
+ ../runtime/Qt3DSElementSystem.h \
+ ../runtime/Qt3DSEventCallbacks.h \
+ ../runtime/Qt3DSInputEngine.h \
+ ../runtime/Qt3DSLogicSystem.h \
+ ../runtime/Qt3DSCommandHelper.h \
+ ../runtime/Qt3DSElementHelper.h \
+ ../runtime/Qt3DSOutputMemoryStream.h \
+ ../runtime/Qt3DSParametersSystem.h \
+ ../runtime/Qt3DSPresentation.h \
+ ../runtime/Qt3DSPresentationFrameData.h \
+ ../runtime/Qt3DSQmlElementHelper.h \
+ ../runtime/Qt3DSQmlEngine.h \
+ ../runtime/Qt3DSSlideSystem.h \
+ ../runtime/Qt3DSTimePolicy.h \
+ ../runtime/Qt3DSApplicationValues.h \
+ ../runtime/Qt3DSIComponentManager.h \
+ ../runtime/Qt3DSIInputSystem.h \
+ ../runtime/Qt3DSInputDefs.h \
+ ../runtime/Qt3DSInputEventTypes.h \
+ ../runtime/Qt3DSIStateful.h \
+ ../runtime/Qt3DSIText.h \
+ ../runtime/Qt3DSKernelTypes.h \
+ ../runtime/q3dsvariantconfig_p.h \
+ ../runtime/q3dsmaterialdefinitionparser.h \
+ ../runtimerender/graphobjects/Qt3DSRenderCamera.h \
+ ../runtimerender/graphobjects/Qt3DSRenderCustomMaterial.h \
+ ../runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h \
+ ../runtimerender/graphobjects/Qt3DSRenderDynamicObject.h \
+ ../runtimerender/graphobjects/Qt3DSRenderEffect.h \
+ ../runtimerender/graphobjects/Qt3DSRenderGraphObject.h \
+ ../runtimerender/graphobjects/Qt3DSRenderImage.h \
+ ../runtimerender/graphobjects/Qt3DSRenderLayer.h \
+ ../runtimerender/graphobjects/Qt3DSRenderLight.h \
+ ../runtimerender/graphobjects/Qt3DSRenderLightmaps.h \
+ ../runtimerender/graphobjects/Qt3DSRenderMaterialDirty.h \
+ ../runtimerender/graphobjects/Qt3DSRenderModel.h \
+ ../runtimerender/graphobjects/Qt3DSRenderNode.h \
+ ../runtimerender/graphobjects/Qt3DSRenderPath.h \
+ ../runtimerender/graphobjects/Qt3DSRenderPathSubPath.h \
+ ../runtimerender/graphobjects/Qt3DSRenderPresentation.h \
+ ../runtimerender/graphobjects/Qt3DSRenderReferencedMaterial.h \
+ ../runtimerender/graphobjects/Qt3DSRenderScene.h \
+ ../runtimerender/graphobjects/Qt3DSRenderText.h \
+ ../runtimerender/Qt3DSOffscreenRenderKey.h \
+ ../runtimerender/Qt3DSOffscreenRenderManager.h \
+ ../runtimerender/Qt3DSOldNBustedRenderPlugin.h \
+ ../runtimerender/Qt3DSRender.h \
+ ../runtimerender/Qt3DSRenderableImage.h \
+ ../runtimerender/Qt3DSRenderClippingFrustum.h \
+ ../runtimerender/Qt3DSRenderCustomMaterialRenderContext.h \
+ ../runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.h \
+ ../runtimerender/Qt3DSRenderCustomMaterialSystem.h \
+ ../runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.h \
+ ../runtimerender/Qt3DSRenderDynamicObjectSystem.h \
+ ../runtimerender/Qt3DSRenderDynamicObjectSystemCommands.h \
+ ../runtimerender/Qt3DSRenderDynamicObjectSystemUtil.h \
+ ../runtimerender/Qt3DSRenderEffectSystem.h \
+ ../runtimerender/Qt3DSRenderer.h \
+ ../runtimerender/Qt3DSRendererUtil.h \
+ ../runtimerender/Qt3DSRenderEulerAngles.h \
+ ../runtimerender/Qt3DSRenderGraphObjectPickQuery.h \
+ ../runtimerender/Qt3DSRenderGraphObjectSerializer.h \
+ ../runtimerender/Qt3DSRenderGraphObjectTypes.h \
+ ../runtimerender/Qt3DSRenderImageScaler.h \
+ ../runtimerender/Qt3DSRenderImageTextureData.h \
+ ../runtimerender/Qt3DSRenderInputStreamFactory.h \
+ ../runtimerender/Qt3DSRenderMaterialHelpers.h \
+ ../runtimerender/Qt3DSRenderMaterialShaderGenerator.h \
+ ../runtimerender/Qt3DSRenderMesh.h \
+ ../runtimerender/Qt3DSRenderPathManager.h \
+ ../runtimerender/Qt3DSRenderPathMath.h \
+ ../runtimerender/Qt3DSRenderPathRenderContext.h \
+ ../runtimerender/Qt3DSRenderPixelGraphicsRenderer.h \
+ ../runtimerender/Qt3DSRenderPixelGraphicsTypes.h \
+ ../runtimerender/Qt3DSRenderPlugin.h \
+ ../runtimerender/Qt3DSRenderPluginCInterface.h \
+ ../runtimerender/Qt3DSRenderPluginGraphObject.h \
+ ../runtimerender/Qt3DSRenderPluginPropertyValue.h \
+ ../runtimerender/Qt3DSRenderProfiler.h \
+ ../runtimerender/Qt3DSRenderRay.h \
+ ../runtimerender/Qt3DSRenderRenderList.h \
+ ../runtimerender/Qt3DSRenderRotationHelper.h \
+ ../runtimerender/Qt3DSRenderShaderCache.h \
+ ../runtimerender/Qt3DSRenderShaderCodeGenerator.h \
+ ../runtimerender/Qt3DSRenderShaderCodeGeneratorV2.h \
+ ../runtimerender/Qt3DSRenderShaderKeys.h \
+ ../runtimerender/Qt3DSRenderShadowMap.h \
+ ../runtimerender/Qt3DSRenderSubpresentation.h \
+ ../runtimerender/Qt3DSRenderSubPresentationHelper.h \
+ ../runtimerender/Qt3DSRenderTaggedPointer.h \
+ ../runtimerender/Qt3DSRenderTessModeValues.h \
+ ../runtimerender/Qt3DSRenderTextTextureAtlas.h \
+ ../runtimerender/Qt3DSRenderTextTextureCache.h \
+ ../runtimerender/Qt3DSRenderTextTypes.h \
+ ../runtimerender/Qt3DSRenderTextureAtlas.h \
+ ../runtimerender/Qt3DSRenderThreadPool.h \
+ ../runtimerender/Qt3DSRenderUIPLoader.h \
+ ../runtimerender/Qt3DSRenderUIPSharedTranslation.h \
+ ../runtimerender/Qt3DSRenderWidgets.h \
+ ../runtimerender/Qt3DSTextRenderer.h \
+ ../runtimerender/rendererimpl/Qt3DSRenderableObjects.h \
+ ../runtimerender/rendererimpl/Qt3DSRendererImpl.h \
+ ../runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.h \
+ ../runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.h \
+ ../runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h \
+ ../runtimerender/rendererimpl/Qt3DSRendererImplShaders.h \
+ ../runtimerender/rendererimpl/Qt3DSVertexPipelineImpl.h \
+ ../runtimerender/resourcemanager/Qt3DSRenderBufferLoader.h \
+ ../runtimerender/resourcemanager/Qt3DSRenderBufferManager.h \
+ ../runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.h \
+ ../runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.h \
+ ../runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.h \
+ ../runtimerender/resourcemanager/Qt3DSRenderLoadedTextureFreeImageCompat.h \
+ ../runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.h \
+ ../runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.h \
+ ../runtimerender/resourcemanager/Qt3DSRenderResourceManager.h \
+ ../runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.h \
+ ../system/Qt3DSArray.h \
+ ../system/Qt3DSAssert.h \
+ ../system/Qt3DSAudioPlayer.h \
+ ../system/Qt3DSBasicPluginDLL.h \
+ ../system/Qt3DSBezierEval.h \
+ ../system/Qt3DSBoundingBox.h \
+ ../system/Qt3DSCircularArray.h \
+ ../system/Qt3DSColor.h \
+ ../system/Qt3DSConfig.h \
+ ../system/Qt3DSCubicRoots.h \
+ ../system/Qt3DSCubicRootsImpl.h \
+ ../system/Qt3DSDataLogger.h \
+ ../system/Qt3DSDataLogger.hpp \
+ ../system/Qt3DSDataLoggerEnums.h \
+ ../system/Qt3DSDataLoggerViewer.h \
+ ../system/Qt3DSDLLManager.h \
+ ../system/Qt3DSEGLTimer.h \
+ ../system/Qt3DSEndian.h \
+ ../system/Qt3DSEulerAngles.h \
+ ../system/Qt3DSFile.h \
+ ../system/Qt3DSFileStream.h \
+ ../system/Qt3DSFixedArray.h \
+ ../system/Qt3DSFNDTimer.h \
+ ../system/Qt3DSFunctionWrappers.h \
+ ../system/Qt3DSHash.h \
+ ../system/Qt3DSIFileStream.h \
+ ../system/Qt3DSIStream.h \
+ ../system/Qt3DSITimer.h \
+ ../system/Qt3DSMacros.h \
+ ../system/Qt3DSMatrix.h \
+ ../system/Qt3DSMemory.h \
+ ../system/Qt3DSMemoryFilter.h \
+ ../system/Qt3DSMemoryHeap.h \
+ ../system/Qt3DSMemoryManager.h \
+ ../system/Qt3DSMemoryPool.h \
+ ../system/Qt3DSMemoryProbe.h \
+ ../system/Qt3DSMemorySettings.h \
+ ../system/Qt3DSMemoryStatistics.h \
+ ../system/Qt3DSMemoryTracker.h \
+ ../system/Qt3DSPlatformSpecific.h \
+ ../system/Qt3DSTimer.h \
+ ../system/Qt3DSTypes.h \
+ ../system/Qt3DSVector3.h \
+ ../system/Qt3DSArray.inl \
+ ../system/Qt3DSCircularArray.inl \
+ ../system/Qt3DSFixedArray.inl \
+ ../state/Qt3DSState.h \
+ ../state/Qt3DSStateTypes.h \
+ ../state/Qt3DSStateScriptContext.h \
+ ../state/Qt3DSStateVisualBindingContextCommands.h \
+ ../uipparser/Qt3DSIPresentation.h \
+ ../uipparser/Qt3DSUIPParser.h \
+ ../uipparser/Qt3DSUIPParserActionHelper.h \
+ ../uipparser/Qt3DSUIPParserImpl.h \
+ ../uipparser/Qt3DSUIPParserObjectRefHelper.h \
+ ../runtime/Qt3DSCommandEventTypes.h \
+ ../runtime/Qt3DSEvent.h \
+ ../runtime/Qt3DSFrameworkTypes.h \
+ ../runtime/Qt3DSInputFrame.h \
+ ../runtime/Qt3DSIScene.h \
+ ../runtime/Qt3DSIScriptBridge.h \
+ ../runtime/Qt3DSPickFrame.h \
+ ../runtime/Qt3DSRuntimeFactory.h \
+ ../runtime/Qt3DSSceneManager.h \
+ ../engine/Qt3DSEGLInfo.h \
+ ../engine/Qt3DSEGLWindowSystem.h \
+ ../engine/Qt3DSPluginDLL.h \
+ ../engine/Qt3DSWindowSystem.h \
+ ../runtimerender/Qt3DSRenderContextCore.h \
+ ../runtimerender/Qt3DSRenderLightConstantProperties.h \
+ ../runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.h \
+ ../runtimerender/Qt3DSDistanceFieldRenderer.h \
+ ../runtimerender/Qt3DSFontDatabase_p.h \
+ ../runtimerender/Qt3DSDistanceFieldGlyphCacheManager_p.h \
+ ../runtimerender/Qt3DSDistanceFieldGlyphCache_p.h \
+ ../engine/Qt3DSRuntimeView.h
+
+win32 {
+SOURCES += \
+ ../foundation/windows/Qt3DSWindowsAtomic.cpp \
+ ../foundation/windows/Qt3DSWindowsFPU.cpp \
+ ../foundation/windows/Qt3DSWindowsMutex.cpp \
+ ../foundation/windows/Qt3DSWindowsSemaphore.cpp \
+ ../foundation/windows/Qt3DSWindowsSync.cpp \
+ ../foundation/windows/Qt3DSWindowsThread.cpp \
+ ../foundation/windows/Qt3DSWindowsTime.cpp
+
+HEADERS += \
+ ../foundation/windows/Qt3DSWindowsAoS.h \
+ ../foundation/windows/Qt3DSWindowsFile.h \
+ ../foundation/windows/Qt3DSWindowsInclude.h \
+ ../foundation/windows/Qt3DSWindowsInlineAoS.h \
+ ../foundation/windows/Qt3DSWindowsIntrinsics.h \
+ ../foundation/windows/Qt3DSWindowsString.h \
+ ../foundation/windows/Qt3DSWindowsTrigConstants.h
+}
+
+macos: SOURCES += \
+ ../foundation/macos/Qt3DSUnixAtomic.cpp \
+ ../foundation/macos/Qt3DSUnixFPU.cpp \
+ ../foundation/macos/Qt3DSUnixMutex.cpp \
+ ../foundation/macos/Qt3DSUnixSemaphore.cpp \
+ ../foundation/macos/Qt3DSUnixSync.cpp \
+ ../foundation/linux/Qt3DSLinuxThread.cpp \
+ ../foundation/macos/Qt3DSUnixTime.cpp
+
+linux|integrity|qnx {
+SOURCES += \
+ ../foundation/linux/Qt3DSLinuxAtomic.cpp \
+ ../foundation/linux/Qt3DSLinuxFPU.cpp \
+ ../foundation/linux/Qt3DSLinuxMutex.cpp \
+ ../foundation/linux/Qt3DSLinuxSemaphore.cpp \
+ ../foundation/linux/Qt3DSLinuxSync.cpp \
+ ../foundation/linux/Qt3DSLinuxThread.cpp \
+ ../foundation/linux/Qt3DSLinuxTime.cpp
+
+HEADERS += \
+ ../foundation/linux/Qt3DSLinuxAoS.h \
+ ../foundation/linux/Qt3DSLinuxFile.h \
+ ../foundation/linux/Qt3DSLinuxInlineAoS.h \
+ ../foundation/linux/Qt3DSLinuxIntrinsics.h \
+ ../foundation/linux/Qt3DSLinuxString.h \
+ ../foundation/linux/Qt3DSLinuxTrigConstants.h
+}
+
+# Libs
+SOURCES += \
+ ../platformspecific/$$PlatformSpecificDir/libs/nv_math/nv_math.cpp \
+ ../platformspecific/$$PlatformSpecificDir/libs/nv_math/nv_matrix.cpp \
+ ../platformspecific/$$PlatformSpecificDir/libs/nv_math/nv_quat.cpp
+
+# RenderBase
+SOURCES += \
+ ../render/Qt3DSRenderAtomicCounterBuffer.cpp \
+ ../render/Qt3DSRenderAttribLayout.cpp \
+ ../render/Qt3DSRenderBaseTypes.cpp \
+ ../render/Qt3DSRenderComputeShader.cpp \
+ ../render/Qt3DSRenderConstantBuffer.cpp \
+ ../render/Qt3DSRenderContext.cpp \
+ ../render/Qt3DSRenderDataBuffer.cpp \
+ ../render/Qt3DSRenderDepthStencilState.cpp \
+ ../render/Qt3DSRenderDrawIndirectBuffer.cpp \
+ ../render/Qt3DSRenderFragmentShader.cpp \
+ ../render/Qt3DSRenderFrameBuffer.cpp \
+ ../render/Qt3DSRenderGeometryShader.cpp \
+ ../render/Qt3DSRenderImageTexture.cpp \
+ ../render/Qt3DSRenderIndexBuffer.cpp \
+ ../render/Qt3DSRenderInputAssembler.cpp \
+ ../render/Qt3DSRenderOcclusionQuery.cpp \
+ ../render/Qt3DSRenderPathFontSpecification.cpp \
+ ../render/Qt3DSRenderPathFontText.cpp \
+ ../render/Qt3DSRenderPathRender.cpp \
+ ../render/Qt3DSRenderPathSpecification.cpp \
+ ../render/Qt3DSRenderProgramPipeline.cpp \
+ ../render/Qt3DSRenderQueryBase.cpp \
+ ../render/Qt3DSRenderRasterizerState.cpp \
+ ../render/Qt3DSRenderRenderBuffer.cpp \
+ ../render/Qt3DSRenderSampler.cpp \
+ ../render/Qt3DSRenderShaderProgram.cpp \
+ ../render/Qt3DSRenderStorageBuffer.cpp \
+ ../render/Qt3DSRenderSync.cpp \
+ ../render/Qt3DSRenderTessellationShader.cpp \
+ ../render/Qt3DSRenderTexture2D.cpp \
+ ../render/Qt3DSRenderTexture2DArray.cpp \
+ ../render/Qt3DSRenderTextureBase.cpp \
+ ../render/Qt3DSRenderTextureCube.cpp \
+ ../render/Qt3DSRenderTimerQuery.cpp \
+ ../render/Qt3DSRenderVertexBuffer.cpp \
+ ../render/Qt3DSRenderVertexShader.cpp
+
+HEADERS += \
+ ../render/Qt3DSRenderAtomicCounterBuffer.h \
+ ../render/Qt3DSRenderAttribLayout.h \
+ ../render/Qt3DSRenderBaseTypes.h \
+ ../render/Qt3DSRenderComputeShader.h \
+ ../render/Qt3DSRenderConstantBuffer.h \
+ ../render/Qt3DSRenderContext.h \
+ ../render/Qt3DSRenderDataBuffer.h \
+ ../render/Qt3DSRenderDepthStencilState.h \
+ ../render/Qt3DSRenderDrawable.h \
+ ../render/Qt3DSRenderDrawIndirectBuffer.h \
+ ../render/Qt3DSRenderFragmentShader.h \
+ ../render/Qt3DSRenderFrameBuffer.h \
+ ../render/Qt3DSRenderGeometryShader.h \
+ ../render/Qt3DSRenderImageTexture.h \
+ ../render/Qt3DSRenderIndexBuffer.h \
+ ../render/Qt3DSRenderInputAssembler.h \
+ ../render/Qt3DSRenderOcclusionQuery.h \
+ ../render/Qt3DSRenderPathFontSpecification.h \
+ ../render/Qt3DSRenderPathFontText.h \
+ ../render/Qt3DSRenderPathRender.h \
+ ../render/Qt3DSRenderPathSpecification.h \
+ ../render/Qt3DSRenderProgramPipeline.h \
+ ../render/Qt3DSRenderQueryBase.h \
+ ../render/Qt3DSRenderRasterizerState.h \
+ ../render/Qt3DSRenderRenderBuffer.h \
+ ../render/Qt3DSRenderSampler.h \
+ ../render/Qt3DSRenderShader.h \
+ ../render/Qt3DSRenderShaderConstant.h \
+ ../render/Qt3DSRenderShaderProgram.h \
+ ../render/Qt3DSRenderStorageBuffer.h \
+ ../render/Qt3DSRenderSync.h \
+ ../render/Qt3DSRenderTessellationShader.h \
+ ../render/Qt3DSRenderTexture2D.h \
+ ../render/Qt3DSRenderTexture2DArray.h \
+ ../render/Qt3DSRenderTextureBase.h \
+ ../render/Qt3DSRenderTextureCube.h \
+ ../render/Qt3DSRenderTimerQuery.h \
+ ../render/Qt3DSRenderVertexBuffer.h \
+ ../render/Qt3DSRenderVertexShader.h \
+ ../render/glg/Qt3DSGLImplObjects.h
+
+# Render
+SOURCES += \
+ ../render/backends/gl/Qt3DSOpenGLExtensions.cpp \
+ ../render/backends/gl/Qt3DSRenderBackendGL3.cpp \
+ ../render/backends/gl/Qt3DSRenderBackendGL4.cpp \
+ ../render/backends/gl/Qt3DSRenderBackendGLBase.cpp \
+ ../render/backends/gl/Qt3DSRenderContextGL.cpp \
+ ../render/backends/software/Qt3DSRenderBackendNULL.cpp \
+ ../render/backends/gl/Q3DSRenderBackendGLES2.cpp
+
+HEADERS += \
+ ../render/backends/Qt3DSRenderBackend.h \
+ ../render/backends/gl/Qt3DSOpenGLPrefix.h \
+ ../render/backends/gl/Qt3DSOpenGLUtil.h \
+ ../render/backends/gl/Qt3DSOpenGLExtensions.h \
+ ../render/backends/gl/Qt3DSRenderBackendGL3.h \
+ ../render/backends/gl/Qt3DSRenderBackendGL4.h \
+ ../render/backends/gl/Qt3DSRenderBackendGLBase.h \
+ ../render/backends/gl/Qt3DSRenderBackendInputAssemblerGL.h \
+ ../render/backends/gl/Qt3DSRenderBackendRenderStatesGL.h \
+ ../render/backends/gl/Qt3DSRenderBackendShaderProgramGL.h \
+ ../render/backends/software/Qt3DSRenderBackendNULL.h \
+ ../render/backends/gl/Q3DSRenderBackendGLES2.h
+
+# DataModel
+SOURCES += \
+ ../datamodel/Qt3DSMetadata.cpp \
+ ../importlib/Qt3DSImportMesh.cpp \
+ ../importlib/Qt3DSImportMeshBuilder.cpp \
+ ../importlib/Qt3DSImportPath.cpp \
+ ../dm/systems/Qt3DSDMMetaData.cpp \
+ ../dm/systems/Qt3DSDMXML.cpp \
+ ../dm/systems/Qt3DSDMStringTable.cpp \
+ ../dm/systems/Qt3DSDMComposerTypeDefinitions.cpp \
+ ../dm/systems/Qt3DSDMValue.cpp \
+ ../dm/systems/cores/SimpleDataCore.cpp
+
+HEADERS += \
+ ../datamodel/Qt3DSMetadata.h \
+ ../datamodel/DocumentResourceManagerScriptParser.h \
+ ../importlib/Qt3DSImportMesh.h \
+ ../importlib/Qt3DSImportPath.h \
+ ../dm/systems/Qt3DSDMMetaData.h \
+ ../dm/systems/Qt3DSDMXML.h \
+ ../dm/systems/Qt3DSDMStringTable.h \
+ ../dm/systems/Qt3DSDMHandles.h \
+ ../dm/systems/Qt3DSDMComposerTypeDefinitions.h \
+ ../dm/systems/Qt3DSDMValue.h \
+ ../dm/systems/cores/SimpleDataCore.h
+
+# Engine
+HEADERS += \
+ ../engine/EnginePrefix.h
+
+# Event
+SOURCES += \
+ ../event/EventFactory.cpp \
+ ../event/EventPoller.cpp \
+ ../event/EventSystemC.cpp
+
+HEADERS += \
+ ../event/EventPollingSystem.h \
+ ../event/EventSystem.h \
+ ../event/EventSystemC.h
+
+# Render
+HEADERS += \
+ ../runtimerender/android/DynamicLibLoader.h \
+ ../runtimerender/linux/DynamicLibLoader.h \
+ ../runtimerender/macos/DynamicLibLoader.h \
+ ../runtimerender/qnx/DynamicLibLoader.h \
+ ../runtimerender/windows/DynamicLibLoader.h
+
+# Runtime
+HEADERS += \
+ ../runtime/RuntimePrefix.h \
+ ../runtime/q3dsqmlscript.h \
+ ../runtime/q3dsqmlbehavior.h
+
+SOURCES += \
+ ../runtime/q3dsqmlscript.cpp \
+ ../runtime/q3dsqmlbehavior.cpp
+
+# System
+HEADERS += \
+ ../system/SystemPrefix.h
+
+DISTFILES += \
+ ../runtime/Qt3DSAttributeHashes.txt
diff --git a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/NvVec.h b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/NvVec.h
index 4e5b09ce..4e5b09ce 100644
--- a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/NvVec.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/NvVec.h
diff --git a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/misc.h b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/misc.h
index 983410f3..983410f3 100644
--- a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/misc.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/misc.h
diff --git a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_math.cpp b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_math.cpp
index b83cb39e..b83cb39e 100644
--- a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_math.cpp
+++ b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_math.cpp
diff --git a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_math.h b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_math.h
index cf2d8b30..cf2d8b30 100644
--- a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_math.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_math.h
diff --git a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_matrix.cpp b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_matrix.cpp
index e208ac31..e208ac31 100644
--- a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_matrix.cpp
+++ b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_matrix.cpp
diff --git a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_matrix.h b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_matrix.h
index 2a8e186e..2a8e186e 100644
--- a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_matrix.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_matrix.h
diff --git a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_quat.cpp b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_quat.cpp
index 6dc6d1a7..6dc6d1a7 100644
--- a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_quat.cpp
+++ b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_quat.cpp
diff --git a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_quat.h b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_quat.h
index 688c30a7..688c30a7 100644
--- a/src/Runtime/Source/platformspecific/android/jni/libs/nv_math/nv_quat.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/android/jni/libs/nv_math/nv_quat.h
diff --git a/src/Runtime/Source/platformspecific/linux/assets/courier+lucida_256.abc b/src/Runtime/ogl-runtime/src/platformspecific/linux/assets/courier+lucida_256.abc
index f7e3c2f6..f7e3c2f6 100644
--- a/src/Runtime/Source/platformspecific/linux/assets/courier+lucida_256.abc
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/assets/courier+lucida_256.abc
Binary files differ
diff --git a/src/Runtime/Source/platformspecific/linux/assets/courier+lucida_256.dds b/src/Runtime/ogl-runtime/src/platformspecific/linux/assets/courier+lucida_256.dds
index 5bde760b..5bde760b 100644
--- a/src/Runtime/Source/platformspecific/linux/assets/courier+lucida_256.dds
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/assets/courier+lucida_256.dds
Binary files differ
diff --git a/src/Runtime/Source/platformspecific/linux/assets/courier+lucida_512.abc b/src/Runtime/ogl-runtime/src/platformspecific/linux/assets/courier+lucida_512.abc
index 2ff78757..2ff78757 100644
--- a/src/Runtime/Source/platformspecific/linux/assets/courier+lucida_512.abc
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/assets/courier+lucida_512.abc
Binary files differ
diff --git a/src/Runtime/Source/platformspecific/linux/assets/courier+lucida_512.dds b/src/Runtime/ogl-runtime/src/platformspecific/linux/assets/courier+lucida_512.dds
index f9e76d94..f9e76d94 100644
--- a/src/Runtime/Source/platformspecific/linux/assets/courier+lucida_512.dds
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/assets/courier+lucida_512.dds
Binary files differ
diff --git a/src/Runtime/Source/platformspecific/linux/assets/font.frag b/src/Runtime/ogl-runtime/src/platformspecific/linux/assets/font.frag
index e4673cf8..e4673cf8 100644
--- a/src/Runtime/Source/platformspecific/linux/assets/font.frag
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/assets/font.frag
diff --git a/src/Runtime/Source/platformspecific/linux/assets/font.vert b/src/Runtime/ogl-runtime/src/platformspecific/linux/assets/font.vert
index 9f307a2f..9f307a2f 100644
--- a/src/Runtime/Source/platformspecific/linux/assets/font.vert
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/assets/font.vert
diff --git a/src/Runtime/Source/platformspecific/linux/libs/nv_color.h b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_color.h
index b9347529..b9347529 100644
--- a/src/Runtime/Source/platformspecific/linux/libs/nv_color.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_color.h
diff --git a/src/Runtime/Source/platformspecific/linux/libs/nv_debug.h b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_debug.h
index 2559dd6f..2559dd6f 100644
--- a/src/Runtime/Source/platformspecific/linux/libs/nv_debug.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_debug.h
diff --git a/src/Runtime/Source/platformspecific/linux/libs/nv_global.h b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_global.h
index 9d23d45f..9d23d45f 100644
--- a/src/Runtime/Source/platformspecific/linux/libs/nv_global.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_global.h
diff --git a/src/Runtime/Source/platformspecific/linux/libs/nv_math/NvVec.h b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/NvVec.h
index 4e5b09ce..4e5b09ce 100644
--- a/src/Runtime/Source/platformspecific/linux/libs/nv_math/NvVec.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/NvVec.h
diff --git a/src/Runtime/Source/platformspecific/linux/libs/nv_math/misc.h b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/misc.h
index 983410f3..983410f3 100644
--- a/src/Runtime/Source/platformspecific/linux/libs/nv_math/misc.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/misc.h
diff --git a/src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_math.cpp b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_math.cpp
index b83cb39e..b83cb39e 100644
--- a/src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_math.cpp
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_math.cpp
diff --git a/src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_math.h b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_math.h
index 2ef7bba0..2ef7bba0 100644
--- a/src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_math.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_math.h
diff --git a/src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_matrix.cpp b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_matrix.cpp
index e208ac31..e208ac31 100644
--- a/src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_matrix.cpp
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_matrix.cpp
diff --git a/src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_matrix.h b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_matrix.h
index 5f567f06..5f567f06 100644
--- a/src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_matrix.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_matrix.h
diff --git a/src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_quat.cpp b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_quat.cpp
index e66420c6..e66420c6 100644
--- a/src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_quat.cpp
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_quat.cpp
diff --git a/src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_quat.h b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_quat.h
index 2e97c717..2e97c717 100644
--- a/src/Runtime/Source/platformspecific/linux/libs/nv_math/nv_quat.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_math/nv_quat.h
diff --git a/src/Runtime/Source/platformspecific/linux/libs/nv_types.h b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_types.h
index 1d1b0300..1d1b0300 100644
--- a/src/Runtime/Source/platformspecific/linux/libs/nv_types.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/linux/libs/nv_types.h
diff --git a/src/Runtime/Source/platformspecific/macos/assets/courier+lucida_256.abc b/src/Runtime/ogl-runtime/src/platformspecific/macos/assets/courier+lucida_256.abc
index f7e3c2f6..f7e3c2f6 100644
--- a/src/Runtime/Source/platformspecific/macos/assets/courier+lucida_256.abc
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/assets/courier+lucida_256.abc
Binary files differ
diff --git a/src/Runtime/Source/platformspecific/macos/assets/courier+lucida_256.dds b/src/Runtime/ogl-runtime/src/platformspecific/macos/assets/courier+lucida_256.dds
index 5bde760b..5bde760b 100644
--- a/src/Runtime/Source/platformspecific/macos/assets/courier+lucida_256.dds
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/assets/courier+lucida_256.dds
Binary files differ
diff --git a/src/Runtime/Source/platformspecific/macos/assets/courier+lucida_512.abc b/src/Runtime/ogl-runtime/src/platformspecific/macos/assets/courier+lucida_512.abc
index 2ff78757..2ff78757 100644
--- a/src/Runtime/Source/platformspecific/macos/assets/courier+lucida_512.abc
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/assets/courier+lucida_512.abc
Binary files differ
diff --git a/src/Runtime/Source/platformspecific/macos/assets/courier+lucida_512.dds b/src/Runtime/ogl-runtime/src/platformspecific/macos/assets/courier+lucida_512.dds
index f9e76d94..f9e76d94 100644
--- a/src/Runtime/Source/platformspecific/macos/assets/courier+lucida_512.dds
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/assets/courier+lucida_512.dds
Binary files differ
diff --git a/src/Runtime/Source/platformspecific/macos/assets/font.frag b/src/Runtime/ogl-runtime/src/platformspecific/macos/assets/font.frag
index e4673cf8..e4673cf8 100644
--- a/src/Runtime/Source/platformspecific/macos/assets/font.frag
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/assets/font.frag
diff --git a/src/Runtime/Source/platformspecific/macos/assets/font.vert b/src/Runtime/ogl-runtime/src/platformspecific/macos/assets/font.vert
index 9f307a2f..9f307a2f 100644
--- a/src/Runtime/Source/platformspecific/macos/assets/font.vert
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/assets/font.vert
diff --git a/src/Runtime/Source/platformspecific/macos/libs/nv_color.h b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_color.h
index b9347529..b9347529 100644
--- a/src/Runtime/Source/platformspecific/macos/libs/nv_color.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_color.h
diff --git a/src/Runtime/Source/platformspecific/macos/libs/nv_debug.h b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_debug.h
index 2559dd6f..2559dd6f 100644
--- a/src/Runtime/Source/platformspecific/macos/libs/nv_debug.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_debug.h
diff --git a/src/Runtime/Source/platformspecific/macos/libs/nv_global.h b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_global.h
index 9d23d45f..9d23d45f 100644
--- a/src/Runtime/Source/platformspecific/macos/libs/nv_global.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_global.h
diff --git a/src/Runtime/Source/platformspecific/macos/libs/nv_math/NvVec.h b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/NvVec.h
index 4e5b09ce..4e5b09ce 100644
--- a/src/Runtime/Source/platformspecific/macos/libs/nv_math/NvVec.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/NvVec.h
diff --git a/src/Runtime/Source/platformspecific/macos/libs/nv_math/misc.h b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/misc.h
index 983410f3..983410f3 100644
--- a/src/Runtime/Source/platformspecific/macos/libs/nv_math/misc.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/misc.h
diff --git a/src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_math.cpp b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_math.cpp
index b83cb39e..b83cb39e 100644
--- a/src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_math.cpp
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_math.cpp
diff --git a/src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_math.h b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_math.h
index e777e409..e777e409 100644
--- a/src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_math.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_math.h
diff --git a/src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_matrix.cpp b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_matrix.cpp
index e208ac31..e208ac31 100644
--- a/src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_matrix.cpp
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_matrix.cpp
diff --git a/src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_matrix.h b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_matrix.h
index 0709f117..0709f117 100644
--- a/src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_matrix.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_matrix.h
diff --git a/src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_quat.cpp b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_quat.cpp
index ec497941..ec497941 100644
--- a/src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_quat.cpp
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_quat.cpp
diff --git a/src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_quat.h b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_quat.h
index 2afdcb71..2afdcb71 100644
--- a/src/Runtime/Source/platformspecific/macos/libs/nv_math/nv_quat.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_math/nv_quat.h
diff --git a/src/Runtime/Source/platformspecific/macos/libs/nv_types.h b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_types.h
index 1d1b0300..1d1b0300 100644
--- a/src/Runtime/Source/platformspecific/macos/libs/nv_types.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/macos/libs/nv_types.h
diff --git a/src/Runtime/Source/platformspecific/windows/assets/courier+lucida_256.abc b/src/Runtime/ogl-runtime/src/platformspecific/windows/assets/courier+lucida_256.abc
index f7e3c2f6..f7e3c2f6 100644
--- a/src/Runtime/Source/platformspecific/windows/assets/courier+lucida_256.abc
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/assets/courier+lucida_256.abc
Binary files differ
diff --git a/src/Runtime/Source/platformspecific/windows/assets/courier+lucida_256.dds b/src/Runtime/ogl-runtime/src/platformspecific/windows/assets/courier+lucida_256.dds
index 5bde760b..5bde760b 100644
--- a/src/Runtime/Source/platformspecific/windows/assets/courier+lucida_256.dds
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/assets/courier+lucida_256.dds
Binary files differ
diff --git a/src/Runtime/Source/platformspecific/windows/assets/courier+lucida_512.abc b/src/Runtime/ogl-runtime/src/platformspecific/windows/assets/courier+lucida_512.abc
index 2ff78757..2ff78757 100644
--- a/src/Runtime/Source/platformspecific/windows/assets/courier+lucida_512.abc
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/assets/courier+lucida_512.abc
Binary files differ
diff --git a/src/Runtime/Source/platformspecific/windows/assets/courier+lucida_512.dds b/src/Runtime/ogl-runtime/src/platformspecific/windows/assets/courier+lucida_512.dds
index f9e76d94..f9e76d94 100644
--- a/src/Runtime/Source/platformspecific/windows/assets/courier+lucida_512.dds
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/assets/courier+lucida_512.dds
Binary files differ
diff --git a/src/Runtime/Source/platformspecific/windows/assets/font.frag b/src/Runtime/ogl-runtime/src/platformspecific/windows/assets/font.frag
index e4673cf8..e4673cf8 100644
--- a/src/Runtime/Source/platformspecific/windows/assets/font.frag
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/assets/font.frag
diff --git a/src/Runtime/Source/platformspecific/windows/assets/font.vert b/src/Runtime/ogl-runtime/src/platformspecific/windows/assets/font.vert
index 9f307a2f..9f307a2f 100644
--- a/src/Runtime/Source/platformspecific/windows/assets/font.vert
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/assets/font.vert
diff --git a/src/Runtime/Source/platformspecific/windows/libs/nv_color.h b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_color.h
index b9347529..b9347529 100644
--- a/src/Runtime/Source/platformspecific/windows/libs/nv_color.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_color.h
diff --git a/src/Runtime/Source/platformspecific/windows/libs/nv_config/nv_config.h b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_config/nv_config.h
index fb0b88af..fb0b88af 100644
--- a/src/Runtime/Source/platformspecific/windows/libs/nv_config/nv_config.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_config/nv_config.h
diff --git a/src/Runtime/Source/platformspecific/windows/libs/nv_debug.h b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_debug.h
index 2559dd6f..2559dd6f 100644
--- a/src/Runtime/Source/platformspecific/windows/libs/nv_debug.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_debug.h
diff --git a/src/Runtime/Source/platformspecific/windows/libs/nv_global.h b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_global.h
index 9d23d45f..9d23d45f 100644
--- a/src/Runtime/Source/platformspecific/windows/libs/nv_global.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_global.h
diff --git a/src/Runtime/Source/platformspecific/windows/libs/nv_math/NvVec.h b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/NvVec.h
index 4e5b09ce..4e5b09ce 100644
--- a/src/Runtime/Source/platformspecific/windows/libs/nv_math/NvVec.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/NvVec.h
diff --git a/src/Runtime/Source/platformspecific/windows/libs/nv_math/misc.h b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/misc.h
index 983410f3..983410f3 100644
--- a/src/Runtime/Source/platformspecific/windows/libs/nv_math/misc.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/misc.h
diff --git a/src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_math.cpp b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_math.cpp
index b83cb39e..b83cb39e 100644
--- a/src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_math.cpp
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_math.cpp
diff --git a/src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_math.h b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_math.h
index ec729a79..ec729a79 100644
--- a/src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_math.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_math.h
diff --git a/src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_matrix.cpp b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_matrix.cpp
index e208ac31..e208ac31 100644
--- a/src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_matrix.cpp
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_matrix.cpp
diff --git a/src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_matrix.h b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_matrix.h
index 0e04568e..0e04568e 100644
--- a/src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_matrix.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_matrix.h
diff --git a/src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_quat.cpp b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_quat.cpp
index 9626eb8c..9626eb8c 100644
--- a/src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_quat.cpp
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_quat.cpp
diff --git a/src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_quat.h b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_quat.h
index 4c65cb9e..4c65cb9e 100644
--- a/src/Runtime/Source/platformspecific/windows/libs/nv_math/nv_quat.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_math/nv_quat.h
diff --git a/src/Runtime/Source/platformspecific/windows/libs/nv_types.h b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_types.h
index 1d1b0300..1d1b0300 100644
--- a/src/Runtime/Source/platformspecific/windows/libs/nv_types.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/libs/nv_types.h
diff --git a/src/Runtime/Source/platformspecific/windows/viewer/Resource.h b/src/Runtime/ogl-runtime/src/platformspecific/windows/viewer/Resource.h
index 58c9336e..58c9336e 100644
--- a/src/Runtime/Source/platformspecific/windows/viewer/Resource.h
+++ b/src/Runtime/ogl-runtime/src/platformspecific/windows/viewer/Resource.h
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsincubationcontroller.h b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsincubationcontroller.h
new file mode 100644
index 00000000..733037c6
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsincubationcontroller.h
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QCoreApplication>
+#include <QGuiApplication>
+#include <QQmlComponent>
+#include <QQuickItem>
+#include <QQmlIncubationController>
+#include <QScreen>
+
+class Q3DSIncubationController : public QObject, public QQmlIncubationController
+{
+ Q_OBJECT
+public:
+ explicit Q3DSIncubationController(QObject *parent = nullptr)
+ : QObject(parent)
+ , m_incubationTime(std::max(1, int(333 / QGuiApplication::primaryScreen()->refreshRate())))
+ {
+ startTimer(QGuiApplication::primaryScreen()->refreshRate());
+ }
+
+ void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE
+ {
+ incubateFor(m_incubationTime);
+ }
+
+private:
+ const int m_incubationTime;
+};
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstream.cpp b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstream.cpp
new file mode 100644
index 00000000..e1b9e857
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstream.cpp
@@ -0,0 +1,106 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "q3dsqmlstream.h"
+
+/*!
+ \qmltype QmlStream
+ \instantiates Q3DSQmlStream
+ \inqmlmodule Qt3DStudio
+ \ingroup OpenGLRuntime
+ \brief Allows streaming of QML as subpresentation.
+
+ \sa Studio3D, Presentation, SubPresentation
+*/
+/*!
+ \class Q3DSQmlStream
+ \inmodule OpenGLRuntime
+ \since Qt 3D Studio 2.0
+ \brief Allows streaming of QML as subpresentation.
+ \param parent
+ */
+
+/*!
+ * \brief Q3DSQmlStream::Q3DSQmlStream Constructor
+ * \param parent Optional parent object.
+ */
+Q3DSQmlStream::Q3DSQmlStream(QObject *parent)
+ : QObject(parent)
+ , m_item(nullptr)
+{
+}
+
+/*!
+ * \brief Q3DSQmlStream::~Q3DSQmlStream Destructor.
+ */
+Q3DSQmlStream::~Q3DSQmlStream()
+{
+}
+
+/*!
+ * \qmlproperty string QmlStream::presentationId
+ * Contains the presentation id of this subpresentation.
+ */
+/*!
+ * \property Q3DSQmlStream::presentationId
+ * Contains the presentation id of this subpresentation.
+ */
+QString Q3DSQmlStream::presentationId() const
+{
+ return m_presentationId;
+}
+
+/*!
+ * \qmlproperty Item QmlStream::item
+ * Contains the Item to be streamed as subpresentation.
+ */
+/*!
+ * \property Q3DSQmlStream::item
+ * Contains the QQuickItem to be streamed as subpresentation.
+ */
+QQuickItem *Q3DSQmlStream::item() const
+{
+ return m_item;
+}
+
+void Q3DSQmlStream::setPresentationId(const QString presentationId)
+{
+ if (m_presentationId != presentationId) {
+ m_presentationId = presentationId;
+ emit presentationIdChanged(presentationId);
+ }
+}
+
+void Q3DSQmlStream::setItem(QQuickItem *item)
+{
+ if (m_item != item) {
+ m_item = item;
+ emit itemChanged(item);
+ }
+}
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstream.h b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstream.h
new file mode 100644
index 00000000..74825902
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstream.h
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef Q3DS_QMLSTREAM_H
+#define Q3DS_QMLSTREAM_H
+
+#include <QObject>
+
+#include "q3dsqmlstreamer_global.h"
+
+QT_BEGIN_NAMESPACE
+class QQuickItem;
+QT_END_NAMESPACE
+
+class Q3DS_QMLSTREAMERSHARED_EXPORT Q3DSQmlStream : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString presentationId READ presentationId WRITE setPresentationId NOTIFY presentationIdChanged)
+ Q_PROPERTY(QQuickItem *item READ item WRITE setItem NOTIFY itemChanged)
+
+ Q_CLASSINFO("DefaultProperty", "item")
+public:
+ Q3DSQmlStream(QObject *parent = nullptr);
+ ~Q3DSQmlStream();
+
+ QString presentationId() const;
+ QQuickItem *item() const;
+
+public Q_SLOTS:
+ void setPresentationId(const QString presentationId);
+ void setItem(QQuickItem *item);
+
+Q_SIGNALS:
+ void presentationIdChanged(const QString presentationId);
+ void itemChanged(QQuickItem *item);
+
+private:
+ QString m_presentationId;
+ QQuickItem *m_item;
+};
+
+#endif // Q3DSQMLSTREAM_H
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamer_global.h b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamer_global.h
new file mode 100644
index 00000000..af12e6f0
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamer_global.h
@@ -0,0 +1,41 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef Q3DS_QMLSTREAMER_GLOBAL_H
+#define Q3DS_QMLSTREAMER_GLOBAL_H
+
+#include <QtCore/qglobal.h>
+
+#if defined(QMLSTREAMER_LIBRARY)
+# define Q3DS_QMLSTREAMERSHARED_EXPORT Q_DECL_EXPORT
+#else
+# define Q3DS_QMLSTREAMERSHARED_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // Q3DS_QMLSTREAMER_GLOBAL_H
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamerserviceimpl.cpp b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamerserviceimpl.cpp
new file mode 100644
index 00000000..78c0a36a
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamerserviceimpl.cpp
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "q3dsqmlstreamerserviceimpl.h"
+
+Q3DSQmlStreamServiceImpl::Q3DSQmlStreamServiceImpl()
+{
+
+}
+
+IQ3DSQmlStreamRenderer *Q3DSQmlStreamServiceImpl::getRenderer(const char *id)
+{
+ if (m_producers[QString(id)])
+ return m_producers[QString(id)]->getRenderer();
+ return nullptr;
+}
+
+bool Q3DSQmlStreamServiceImpl::registerProducer(IQ3DSQmlStreamProducer *producer, const char *id)
+{
+ m_producers[QString(id)] = producer;
+ return true;
+}
+
+void Q3DSQmlStreamServiceImpl::unregisterProducer(IQ3DSQmlStreamProducer *producer)
+{
+ auto iter = m_producers.begin();
+ for (; iter != m_producers.end(); ++iter) {
+ if (*iter == producer) {
+ m_producers.erase(iter);
+ return;
+ }
+ }
+}
+
+static Q3DSQmlStreamServiceImpl *service = nullptr;
+IQ3DSQmlStreamService *IQ3DSQmlStreamService::getQmlStreamService()
+{
+ if (!service)
+ service = new Q3DSQmlStreamServiceImpl();
+ return service;
+}
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamerserviceimpl.h b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamerserviceimpl.h
new file mode 100644
index 00000000..a17bf340
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamerserviceimpl.h
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef Q3DS_QMLSTREAM_SERVICE_IMPL_H
+#define Q3DS_QMLSTREAM_SERVICE_IMPL_H
+
+#include <QMap>
+
+#include "q3dsqmlstreamservice.h"
+
+#include "q3dsqmlstreamer_global.h"
+
+class Q3DSQmlStreamServiceImpl : public IQ3DSQmlStreamService
+{
+public:
+ Q3DSQmlStreamServiceImpl();
+
+ IQ3DSQmlStreamRenderer *getRenderer(const char *id) override;
+ bool registerProducer(IQ3DSQmlStreamProducer *producer, const char *id) override;
+ void unregisterProducer(IQ3DSQmlStreamProducer *producer) override;
+private:
+
+ QMap<QString, IQ3DSQmlStreamProducer *> m_producers;
+};
+
+#endif // Q3DS_QMLSTREAMER_SERVICE_IMPL_H
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproducer.cpp b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproducer.cpp
new file mode 100644
index 00000000..39eccb1b
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproducer.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "q3dsqmlstreamproducer.h"
+#include "q3dsqmlstreamrenderer.h"
+
+Q3DSQmlStreamProducer::Q3DSQmlStreamProducer(const QString &id, const QString &args,
+ QObject *parent)
+ : QObject(parent), m_id(id), m_args(args), m_renderer(new Q3DSQmlStreamRenderer)
+{
+
+}
+
+Q3DSQmlStreamProducer::~Q3DSQmlStreamProducer()
+{
+ delete m_renderer;
+}
+
+IQ3DSQmlStreamRenderer* Q3DSQmlStreamProducer::getRenderer()
+{
+ return m_renderer;
+}
+
+void Q3DSQmlStreamProducer::setPresentationItem(QQuickItem *item)
+{
+ m_renderer->setItem(item);
+}
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproducer.h b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproducer.h
new file mode 100644
index 00000000..d3b330d1
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproducer.h
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef Q3DS_QMLSTREAM_PRODUCER_H
+#define Q3DS_QMLSTREAM_PRODUCER_H
+
+#include <QObject>
+#include "q3dsqmlstreamservice.h"
+#include "q3dsqmlstreamer_global.h"
+
+QT_BEGIN_NAMESPACE
+class QQuickItem;
+QT_END_NAMESPACE
+
+class Q3DSQmlStreamRenderer;
+
+class Q3DS_QMLSTREAMERSHARED_EXPORT Q3DSQmlStreamProducer : public QObject,
+ public IQ3DSQmlStreamProducer
+{
+ Q_OBJECT
+public:
+ Q3DSQmlStreamProducer(const QString &id, const QString &args, QObject *parent = nullptr);
+ virtual ~Q3DSQmlStreamProducer();
+
+ IQ3DSQmlStreamRenderer* getRenderer() override;
+
+ void setPresentationItem(QQuickItem *item);
+
+private:
+ QString m_id;
+ QString m_args;
+ Q3DSQmlStreamRenderer *m_renderer;
+};
+
+#endif // Q3DS_QMLSTREAM_PRODUCER_H
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproxy.cpp b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproxy.cpp
new file mode 100644
index 00000000..9b8550cf
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproxy.cpp
@@ -0,0 +1,253 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "q3dsqmlstreamservice.h"
+#include "q3dsqmlstreamproxy.h"
+#include "q3dsqmlstreamproducer.h"
+#include "q3dsincubationcontroller.h"
+
+#include <QCoreApplication>
+#include <QGuiApplication>
+#include <QQmlComponent>
+#include <QQuickItem>
+#include <QQmlIncubationController>
+#include <QScreen>
+#include <QFileInfo>
+
+class Qt3DSQmlStreamEvent : public QEvent
+{
+public:
+ Qt3DSQmlStreamEvent(const QString &id, const QString &args)
+ : QEvent(QEvent::User), presentationId(id), presentationArgs(args), unregister(false)
+ {
+
+ }
+
+ Qt3DSQmlStreamEvent(const QString &id)
+ : QEvent(QEvent::User), presentationId(id), unregister(true)
+ {
+
+ }
+
+ QString presentationId;
+ QString presentationArgs;
+ bool unregister;
+};
+
+Q3DSQmlStreamProxy::renderitem::~renderitem()
+{
+ delete item;
+ delete component;
+}
+
+Q3DSQmlStreamProxy::Q3DSQmlStreamProxy(QObject *parent)
+ : QObject(parent), m_engine(nullptr), m_settings(nullptr)
+{
+}
+
+Q3DSQmlStreamProxy::~Q3DSQmlStreamProxy()
+{
+ for (Q3DSQmlStreamProducer *p : m_streamProducers) {
+ IQ3DSQmlStreamService::getQmlStreamService()->unregisterProducer(p);
+ delete p;
+ }
+}
+
+void Q3DSQmlStreamProxy::loadPresentationItem(const QString& presentationId,
+ const QString& presentationArgs)
+{
+ if (!m_engine) {
+ m_engine = new QQmlEngine;
+
+ // Add extra import path for binary installations
+ QString extraImportPath(QStringLiteral("%1/qml"));
+ m_engine->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath()));
+
+ m_engine->setIncubationController(new Q3DSIncubationController(this));
+ }
+
+ QString itemPath = presentationArgs;
+ itemPath.replace("\\", "/");
+
+ QUrl purl = QUrl(itemPath);
+ if (purl.isRelative()) {
+ purl.setPath(m_path.path() + QStringLiteral("/") + purl.path());
+ purl.setScheme(m_path.scheme());
+ } else {
+ purl = pathToUrl(itemPath);
+ }
+
+ QQmlComponent *component = new QQmlComponent(m_engine, purl);
+ if (!component)
+ return;
+ renderitem *item = new renderitem;
+ item->args = itemPath;
+ item->component = component;
+ item->presentationId = presentationId;
+ m_loadedItems.push_back(item);
+
+ if (component->isLoading())
+ connect(component, &QQmlComponent::statusChanged, this, &Q3DSQmlStreamProxy::itemLoaded);
+ else
+ itemLoaded();
+}
+
+void Q3DSQmlStreamProxy::itemLoaded()
+{
+ for (renderitem *item : m_loadedItems) {
+ if (item->item == nullptr && item->component->isLoading() == false) {
+ disconnect(item->component, &QQmlComponent::statusChanged,
+ this, &Q3DSQmlStreamProxy::itemLoaded);
+ if (!item->component->errors().isEmpty()) {
+ QList<QQmlError> errorList = item->component->errors();
+ for (const QQmlError &error: errorList)
+ qWarning() << error.url() << error.line() << error;
+ m_loadedItems.removeAll(item);
+ delete item;
+ } else {
+ QObject *root = item->component->create();
+ if (!root) {
+ QList<QQmlError> errorList = item->component->errors();
+ for (const QQmlError &error: errorList)
+ qWarning() << error.url() << error.line() << error;
+ m_loadedItems.removeAll(item);
+ delete item;
+ } else {
+ QQuickItem *qi = qobject_cast<QQuickItem *>(root);
+ if (!qi) {
+ m_loadedItems.removeAll(item);
+ delete item;
+ } else {
+ item->item = qi;
+ m_streamProducers[item->presentationId]->setPresentationItem(qi);
+ }
+ }
+ }
+ }
+ }
+}
+
+QUrl Q3DSQmlStreamProxy::pathToUrl(const QString &path)
+{
+ QUrl retval;
+ if (path.startsWith(QStringLiteral(":"))) {
+ retval.setScheme(QStringLiteral("qrc"));
+ retval.setPath(path.mid(1));
+ } else if (path.startsWith(QStringLiteral("qrc:"), Qt::CaseInsensitive)) {
+ retval.setScheme(QStringLiteral("qrc"));
+ retval.setPath(path.mid(4));
+ } else {
+ retval.setScheme(QStringLiteral("file"));
+ retval.setPath(path);
+ }
+ return retval;
+}
+
+bool Q3DSQmlStreamProxy::event(QEvent *event)
+{
+ if (event->type() == QEvent::User) {
+ Qt3DSQmlStreamEvent *e = static_cast<Qt3DSQmlStreamEvent *>(event);
+ Q3DSQmlStreamProducer *producer = nullptr;
+ if (e->unregister && m_streamProducers.contains(e->presentationId)) {
+ for (int i = 0; i < m_loadedItems.size(); i++) {
+ if (m_loadedItems[i]->presentationId == e->presentationId) {
+ delete m_loadedItems[i];
+ m_loadedItems.remove(i);
+ break;
+ }
+ }
+ producer = static_cast<Q3DSQmlStreamProducer *>(
+ m_streamProducers.take(e->presentationId));
+ IQ3DSQmlStreamService::getQmlStreamService()->unregisterProducer(producer);
+ delete producer;
+ return true;
+ }
+ if (!m_streamProducers.contains(e->presentationId)) {
+ producer = new Q3DSQmlStreamProducer(e->presentationId, e->presentationArgs, this);
+ m_streamProducers[e->presentationId] = producer;
+ IQ3DSQmlStreamService::getQmlStreamService()
+ ->registerProducer(producer, e->presentationId.toLatin1().data());
+ } else {
+ producer = static_cast<Q3DSQmlStreamProducer *>(m_streamProducers[e->presentationId]);
+ }
+
+ if (m_settings) {
+ bool streamFound = false;
+ for (Q3DSQmlStream *s : m_settings->qmlStreamsList()) {
+ if (s->presentationId() == e->presentationId) {
+ producer->setPresentationItem(s->item());
+ streamFound = true;
+ break;
+ }
+ }
+ if (!streamFound && !e->presentationArgs.isNull())
+ loadPresentationItem(e->presentationId, e->presentationArgs);
+ } else if (!e->presentationArgs.isNull()){
+ loadPresentationItem(e->presentationId, e->presentationArgs);
+ }
+ return true;
+ }
+ return false;
+}
+
+void Q3DSQmlStreamProxy::registerPresentation(const QString &presentationId, const QString &args)
+{
+ QCoreApplication::postEvent(this,
+ new Qt3DSQmlStreamEvent(QString(presentationId), QString(args)));
+}
+
+void Q3DSQmlStreamProxy::unregisterPresentation(const QString &presentationId)
+{
+ QCoreApplication::postEvent(this, new Qt3DSQmlStreamEvent(QString(presentationId)));
+}
+
+void Q3DSQmlStreamProxy::setSettings(Q3DSSubPresentationSettings *settings)
+{
+ m_settings = settings;
+}
+
+void Q3DSQmlStreamProxy::setPath(const QString& path)
+{
+ QString modPath = QFileInfo(path).path(); // path() strips filename out
+ m_path = pathToUrl(modPath);
+}
+
+void Q3DSQmlStreamProxy::setEngine(QQmlEngine *engine)
+{
+ if (m_engine)
+ delete m_engine;
+
+ m_engine = engine;
+
+ // Add extra import path for binary installations
+ QString extraImportPath(QStringLiteral("%1/qml"));
+ m_engine->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath()));
+
+ m_engine->setIncubationController(new Q3DSIncubationController(this));
+}
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproxy.h b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproxy.h
new file mode 100644
index 00000000..85a1cc6d
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamproxy.h
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef Q3DS_QMLSTREAM_PROXY_H
+#define Q3DS_QMLSTREAM_PROXY_H
+
+#include <QtCore/QObject>
+#include <QtCore/QEvent>
+#include <QtCore/QString>
+#include <QtCore/QVector>
+#include <QtQml/QQmlEngine>
+
+#include "q3dsqmlstreamproducer.h"
+#include "q3dsqmlsubpresentationsettings.h"
+
+class Q3DS_QMLSTREAMERSHARED_EXPORT Q3DSQmlStreamProxy : public QObject
+{
+ Q_OBJECT
+
+public:
+ Q3DSQmlStreamProxy(QObject *parent = nullptr);
+ ~Q3DSQmlStreamProxy();
+
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ void registerPresentation(const QString &presentationId, const QString &args);
+ void unregisterPresentation(const QString &presentationId);
+ void setSettings(Q3DSSubPresentationSettings *settings);
+ void setPath(const QString& path);
+ void setEngine(QQmlEngine *engine);
+
+private:
+ void loadPresentationItem(const QString& presentationId, const QString& presentationArgs);
+ void itemLoaded();
+ QUrl pathToUrl(const QString &path);
+
+ QQmlEngine *m_engine;
+ Q3DSSubPresentationSettings *m_settings;
+ QMap<QString, Q3DSQmlStreamProducer *> m_streamProducers;
+ struct renderitem {
+ QString args;
+ QString presentationId;
+ QQmlComponent *component;
+ QQuickItem *item;
+ renderitem()
+ : component(nullptr), item(nullptr) {}
+ ~renderitem();
+ };
+
+ QUrl m_path;
+ QVector<renderitem *> m_loadedItems;
+};
+
+#endif // Q3DS_QMLSTREAM_PROXY_H
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamrenderer.cpp b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamrenderer.cpp
new file mode 100644
index 00000000..f1879a6e
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamrenderer.cpp
@@ -0,0 +1,483 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "q3dsqmlstreamrenderer.h"
+
+#include <QCoreApplication>
+#include <qdebug.h>
+#include <QOpenGLContext>
+#include <QSurface>
+#include <QPainter>
+#include <QOpenGLFunctions>
+#include <QWindow>
+#include <QQuickWindow>
+#include <QQuickRenderControl>
+#include <QtQml/QQmlEngine>
+#include <QtQml/QQmlContext>
+#include <QQuickWindow>
+#include <QQuickItem>
+#include <QThread>
+#include <QOffscreenSurface>
+#include <QOpenGLFramebufferObject>
+#include <QOpenGLShaderProgram>
+#include <QOpenGLBuffer>
+#include <QOpenGLVertexArrayObject>
+
+Q_GLOBAL_STATIC(QThread, renderThread)
+Q_GLOBAL_STATIC(QAtomicInt, renderThreadClientCount)
+
+#define RenderEvent(name, value) \
+ class name : public QEvent \
+ { \
+ public: \
+ name() : QEvent(_type) {} \
+ static const QEvent::Type _type; \
+ }; \
+ const QEvent::Type name::_type = QEvent::Type(value);
+
+RenderEvent(InitializeRender, QEvent::User + 1)
+RenderEvent(RequestUpdate, QEvent::User + 2)
+RenderEvent(InitializeRenderThread, QEvent::User + 3)
+RenderEvent(PrepareRender, QEvent::User + 4)
+RenderEvent(Cleanup, QEvent::User + 5)
+
+#define EventType(e) (e::_type)
+
+class RenderControl : public QQuickRenderControl
+{
+public:
+ RenderControl(QWindow *w)
+ : m_window(w)
+ {
+ }
+
+ QWindow *renderWindow(QPoint *offset) Q_DECL_OVERRIDE
+ {
+ if (offset)
+ *offset = QPoint(0, 0);
+ return m_window;
+ }
+
+private:
+ QWindow *m_window;
+};
+
+Q3DSQmlStreamEventHandler::Q3DSQmlStreamEventHandler(Q3DSQmlStreamRenderer *renderer)
+ : m_renderer(renderer)
+{
+
+}
+
+bool Q3DSQmlStreamEventHandler::event(QEvent *e)
+{
+ switch (e->type()) {
+
+ case EventType(RequestUpdate): {
+ m_renderer->renderTexture();
+ return true;
+ }
+
+ case EventType(InitializeRenderThread): {
+ m_renderer->initializeRender();
+ return true;
+ }
+
+ case EventType(Cleanup): {
+ m_renderer->cleanup();
+ return true;
+ }
+
+ default:
+ break;
+ }
+ return QObject::event(e);
+}
+
+Q3DSQmlStreamRenderer::Q3DSQmlStreamRenderer()
+ : m_renderControl(nullptr)
+ , m_quickWindow(nullptr)
+ , m_rootItem(nullptr)
+ , m_frameBuffer(nullptr)
+ , m_program(nullptr)
+ , m_vao(nullptr)
+ , m_vertices(nullptr)
+ , m_context(nullptr)
+ , m_offscreenSurface(nullptr)
+ , m_renderObject(nullptr)
+ , m_renderThread(nullptr)
+ , m_requestUpdate(false)
+ , m_initialized(false)
+ , m_prepared(false)
+ , m_update(false)
+ , m_delayedUpdateRequest(false)
+{
+ renderThreadClientCount->fetchAndAddAcquire(1);
+
+ QSurfaceFormat format = QSurfaceFormat::defaultFormat();
+ if (QOpenGLContext::currentContext())
+ format = QOpenGLContext::currentContext()->format();
+ else {
+ format.setDepthBufferSize(24);
+ format.setStencilBufferSize(8);
+ }
+
+ m_offscreenSurface = new QOffscreenSurface;
+ m_offscreenSurface->setFormat(format);
+ m_offscreenSurface->create();
+
+ m_renderControl = new RenderControl(nullptr);
+
+ connect(m_renderControl, &QQuickRenderControl::renderRequested,
+ this, &Q3DSQmlStreamRenderer::requestUpdate);
+ connect(m_renderControl, &QQuickRenderControl::sceneChanged,
+ this, &Q3DSQmlStreamRenderer::requestUpdate);
+
+ m_quickWindow = new QQuickWindow(m_renderControl);
+ m_quickWindow->setClearBeforeRendering(true);
+ m_quickWindow->setColor(Qt::transparent);
+
+ m_renderObject = new Q3DSQmlStreamEventHandler(this);
+ renderThread->setObjectName(QStringLiteral("Qt3DSQmlStreamRenderer::renderThread"));
+ m_renderThread = renderThread;
+
+ m_renderObject->moveToThread(m_renderThread);
+ if (!m_renderThread->isRunning())
+ m_renderThread->start();
+}
+
+Q3DSQmlStreamRenderer::~Q3DSQmlStreamRenderer()
+{
+ QMutexLocker lock(&m_mutex);
+ QCoreApplication::postEvent(m_renderObject, new Cleanup());
+ m_waitCondition.wait(&m_mutex);
+
+ delete m_offscreenSurface;
+ delete m_renderControl;
+ delete m_quickWindow;
+ delete m_renderObject;
+
+ renderThreadClientCount->fetchAndSubAcquire(1);
+ if (renderThreadClientCount->load() == 0)
+ renderThread->quit();
+}
+
+void Q3DSQmlStreamRenderer::cleanup()
+{
+ if (m_context)
+ m_context->makeCurrent(m_offscreenSurface);
+ if (m_renderControl)
+ m_renderControl->invalidate();
+
+ delete m_frameBuffer;
+ delete m_program;
+ delete m_vertices;
+
+ if (m_context)
+ m_context->doneCurrent();
+ delete m_context;
+
+ if (m_renderObject)
+ m_renderObject->moveToThread(QCoreApplication::instance()->thread());
+ m_waitCondition.wakeOne();
+}
+
+bool Q3DSQmlStreamRenderer::initialize(QOpenGLContext *context, QSurface *surface)
+{
+ Q_UNUSED(surface);
+ QMutexLocker lock(&m_renderMutex);
+ if (!m_context) {
+ m_context = new QOpenGLContext();
+ m_context->setShareContext(context);
+ m_context->setFormat(context->format());
+ m_context->create();
+ m_context->moveToThread(m_renderThread);
+ }
+
+ if (!m_rootItem) {
+ return true;
+ }
+
+ if (m_initialized) {
+ Q_ASSERT(QOpenGLContext::areSharing(context, m_context));
+ return true;
+ }
+
+ m_rootItem->setParentItem(m_quickWindow->contentItem());
+
+ updateSizes();
+
+ m_initialized = true;
+ // Initialize render thread
+ QCoreApplication::postEvent(m_renderObject,
+ new InitializeRenderThread());
+ return true;
+}
+void Q3DSQmlStreamRenderer::initializeFboCopy()
+{
+ m_program = new QOpenGLShaderProgram;
+ if (m_context->format().renderableType() == QSurfaceFormat::OpenGLES) {
+ static const char *vsSource =
+ "attribute highp vec4 pos;\n"
+ "attribute highp vec2 tc;\n"
+ "varying lowp vec2 texcoord;\n"
+ "void main() {\n"
+ " texcoord = tc;\n"
+ " gl_Position = pos;\n"
+ "}\n";
+ static const char *fsSource =
+ "varying highp vec2 texcoord;\n"
+ "uniform sampler2D sampler;\n"
+ "void main() {\n"
+ " gl_FragColor = texture2D(sampler, texcoord);\n"
+ "}\n";
+ m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vsSource);
+ m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fsSource);
+ } else {
+ static const char *vsSource =
+ "#version 150 core\n"
+ "in vec4 pos;\n"
+ "in vec2 tc;\n"
+ "out vec2 texcoord;\n"
+ "void main() {\n"
+ " texcoord = tc;\n"
+ " gl_Position = pos;\n"
+ "}\n";
+ static const char *fsSource =
+ "#version 150 core\n"
+ "in vec2 texcoord;\n"
+ "out vec4 fragColor;\n"
+ "uniform sampler2D sampler;\n"
+ "void main() {\n"
+ " fragColor = texture(sampler, texcoord);\n"
+ "}\n";
+ m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vsSource);
+ m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fsSource);
+ }
+
+ m_program->bindAttributeLocation("pos", 0);
+ m_program->bindAttributeLocation("tc", 1);
+
+ if (!m_program->link()) {
+ QByteArray logData(m_program->log().toLocal8Bit());
+ const char *log = logData.data();
+ qFatal("Failed to create shader program: %s", log);
+ }
+
+ m_vertices = new QOpenGLBuffer;
+ m_vertices->create();
+ m_vertices->bind();
+
+ static const float vertices[] =
+ {
+ -1, -1, 0, 1, 0, 0,
+ 1, -1, 0, 1, 1, 0,
+ 1, 1, 0, 1, 1, 1,
+ -1, -1, 0, 1, 0, 0,
+ 1, 1, 0, 1, 1, 1,
+ -1, 1, 0, 1, 0, 1,
+ };
+
+ m_vertices->allocate(vertices, sizeof(vertices));
+ m_vertices->release();
+}
+
+void Q3DSQmlStreamRenderer::initializeRender()
+{
+ QMutexLocker lock(&m_renderMutex);
+ m_context->makeCurrent(m_offscreenSurface);
+ m_renderControl->initialize(m_context);
+ m_context->doneCurrent();
+ QCoreApplication::postEvent(this, new PrepareRender());
+}
+
+QSize Q3DSQmlStreamRenderer::getDesiredSize()
+{
+ return m_size;
+}
+
+E_TEXTURE_FORMAT Q3DSQmlStreamRenderer::getDesiredFormat()
+{
+ return E_TEXTURE_RGBA8;
+}
+
+bool Q3DSQmlStreamRenderer::isUpdateRequested()
+{
+ return m_update;
+}
+
+// Called by stream renderer client when it stops using the renderer
+// TODO: We are sharing the context so stop using it.
+void Q3DSQmlStreamRenderer::uninitialize()
+{
+}
+
+void Q3DSQmlStreamRenderer::setItem(QQuickItem *item)
+{
+ if (item && m_rootItem && m_initialized) {
+ QMutexLocker lock(&m_renderMutex);
+ m_rootItem->setParentItem(nullptr);
+ m_rootItem = item;
+ m_rootItem->setParentItem(m_quickWindow->contentItem());
+ updateSizes();
+ } else {
+ if (item && m_rootItem != item) {
+ m_rootItem = item;
+
+ if (m_context)
+ initialize(m_context, nullptr);
+ }
+ }
+}
+
+bool Q3DSQmlStreamRenderer::event(QEvent *event)
+{
+ switch (event->type()) {
+
+ case EventType(PrepareRender): {
+
+ m_renderControl->prepareThread(m_renderThread);
+ m_prepared = true;
+
+ if (m_delayedUpdateRequest) {
+ QCoreApplication::postEvent(this, new RequestUpdate());
+ m_delayedUpdateRequest = false;
+ }
+
+ return true;
+ }
+
+ case EventType(RequestUpdate): {
+
+ m_renderControl->polishItems();
+ QMutexLocker lock(&m_mutex);
+ QCoreApplication::postEvent(m_renderObject, new RequestUpdate());
+ m_waitCondition.wait(&m_mutex);
+ return true;
+ }
+
+ default:
+ break;
+ }
+
+ return QObject::event(event);
+}
+
+void Q3DSQmlStreamRenderer::updateSizes()
+{
+ if (m_rootItem->width() > 0 && m_rootItem->height() > 0) {
+ m_size = QSize(m_rootItem->width(), m_rootItem->height());
+ } else {
+ m_rootItem->setWidth(256);
+ m_rootItem->setHeight(256);
+ }
+
+ m_quickWindow->setGeometry(0, 0, m_size.width(), m_size.height());
+}
+
+void Q3DSQmlStreamRenderer::requestUpdate()
+{
+ if (!m_requestUpdate) {
+ m_requestUpdate = true;
+ if (m_initialized)
+ QCoreApplication::postEvent(this, new RequestUpdate());
+ else
+ m_delayedUpdateRequest = true;
+ }
+}
+
+void Q3DSQmlStreamRenderer::renderTexture()
+{
+ QMutexLocker lock(&m_renderMutex);
+ m_context->makeCurrent(m_offscreenSurface);
+
+ if (!m_frameBuffer || m_frameBuffer->size() != m_size) {
+ if (m_frameBuffer)
+ delete m_frameBuffer;
+
+ m_frameBuffer = new QOpenGLFramebufferObject(m_size);
+ m_frameBuffer->setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
+ m_quickWindow->setRenderTarget(m_frameBuffer);
+ }
+
+ {
+ QMutexLocker lock(&m_mutex);
+ if (m_requestUpdate) {
+ m_requestUpdate = false;
+ m_renderControl->sync();
+ m_renderControl->render();
+ m_waitCondition.wakeOne();
+ }
+ }
+
+ m_context->functions()->glFlush();
+ m_quickWindow->resetOpenGLState();
+ m_context->doneCurrent();
+ m_update = true;
+}
+
+void Q3DSQmlStreamRenderer::render()
+{
+ QMutexLocker lock(&m_renderMutex);
+ if (m_update && m_initialized) {
+ QOpenGLContext *context = QOpenGLContext::currentContext();
+ QOpenGLFunctions *func = context->functions();
+ GLuint texture = m_frameBuffer->texture();
+ func->glDisable(GL_DEPTH_TEST);
+ func->glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
+
+ if (!m_program)
+ initializeFboCopy();
+
+ m_program->bind();
+
+ if (!m_vao) {
+ m_vao = new QOpenGLVertexArrayObject;
+ m_vao->create();
+ m_vao->bind();
+ m_vertices->bind();
+
+ m_program->enableAttributeArray(0);
+ m_program->enableAttributeArray(1);
+ func->glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 6 * sizeof(float), 0);
+ func->glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 6 * sizeof(float),
+ (const void *)(4 * sizeof(GLfloat)));
+ m_vertices->release();
+ } else {
+ m_vao->bind();
+ }
+
+ func->glActiveTexture(GL_TEXTURE0);
+ func->glBindTexture(GL_TEXTURE_2D, texture);
+ func->glDrawArrays(GL_TRIANGLES, 0, 6);
+ func->glEnable(GL_DEPTH_TEST);
+
+ m_program->release();
+ m_vao->release();
+ }
+}
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamrenderer.h b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamrenderer.h
new file mode 100644
index 00000000..e9274794
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamrenderer.h
@@ -0,0 +1,124 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef Q3DS_QMLSTREAM_RENDERER_H
+#define Q3DS_QMLSTREAM_RENDERER_H
+
+#include "q3dsqmlstreamservice.h"
+
+#include <QOpenGLFunctions>
+#include <QSize>
+#include <QThread>
+#include <QWaitCondition>
+#include <QMutex>
+
+QT_BEGIN_NAMESPACE
+class QQuickRenderControl;
+class QQuickWindow;
+class QQuickItem;
+class QOpenGLContext;
+class QOffscreenSurface;
+class QOpenGLFramebufferObject;
+class QOpenGLShaderProgram;
+class QOpenGLBuffer;
+class QOpenGLVertexArrayObject;
+QT_END_NAMESPACE
+
+class Q3DSQmlStreamRenderer;
+
+class Q3DSQmlStreamEventHandler : public QObject
+{
+ Q_OBJECT
+public:
+ Q3DSQmlStreamEventHandler(Q3DSQmlStreamRenderer *renderer);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+
+private:
+ Q3DSQmlStreamRenderer *m_renderer;
+};
+
+class Q3DSQmlStreamRenderer : public QObject,
+ public IQ3DSQmlStreamRenderer
+{
+ Q_OBJECT
+public:
+ Q3DSQmlStreamRenderer();
+ virtual ~Q3DSQmlStreamRenderer();
+
+ bool initialize(QOpenGLContext *context, QSurface *surface) override;
+
+ QSize getDesiredSize() override;
+ E_TEXTURE_FORMAT getDesiredFormat() override;
+ bool isUpdateRequested() override;
+
+ void render() override;
+
+ void uninitialize() override;
+
+ void setItem(QQuickItem *item);
+
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+
+private:
+
+ void updateSizes();
+ void requestUpdate();
+ void cleanup();
+ void initializeRender();
+ void renderTexture();
+ void initializeFboCopy();
+
+ QSize m_size;
+ QMutex m_mutex, m_renderMutex;
+ QWaitCondition m_waitCondition;
+
+ QQuickRenderControl *m_renderControl;
+ QQuickWindow *m_quickWindow;
+ QQuickItem *m_rootItem;
+
+ QOpenGLFramebufferObject *m_frameBuffer;
+ QOpenGLShaderProgram *m_program;
+ QOpenGLVertexArrayObject *m_vao;
+ QOpenGLBuffer *m_vertices;
+ QOpenGLContext *m_context;
+ QOffscreenSurface *m_offscreenSurface;
+
+ Q3DSQmlStreamEventHandler *m_renderObject;
+ QThread *m_renderThread;
+
+ bool m_requestUpdate;
+ bool m_initialized;
+ bool m_prepared;
+ bool m_update;
+ bool m_delayedUpdateRequest;
+
+ friend class Q3DSQmlStreamEventHandler;
+};
+
+#endif // Q3DS_QMLSTREAM_RENDERER_H
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamservice.h b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamservice.h
new file mode 100644
index 00000000..2b44fe3b
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlstreamservice.h
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef Q3DS_QMLSTREAM_SERVICE_H
+#define Q3DS_QMLSTREAM_SERVICE_H
+
+#include <qglobal.h>
+#include <q3dsqmlstreamer_global.h>
+
+QT_BEGIN_NAMESPACE
+class QOpenGLContext;
+class QSurface;
+class QSize;
+QT_END_NAMESPACE
+
+enum E_TEXTURE_FORMAT
+{
+ E_TEXTURE_RGBA8,
+ E_TEXTURE_UNKNOWN
+};
+
+class Q3DS_QMLSTREAMERSHARED_EXPORT IQ3DSQmlStreamRenderer
+{
+public:
+ virtual bool initialize(QT_PREPEND_NAMESPACE(QOpenGLContext) *context, QSurface *surface) = 0;
+
+ virtual QSize getDesiredSize() = 0;
+ virtual E_TEXTURE_FORMAT getDesiredFormat() = 0;
+ virtual bool isUpdateRequested() = 0;
+
+ virtual void render() = 0;
+
+ virtual void uninitialize() = 0;
+};
+
+class Q3DS_QMLSTREAMERSHARED_EXPORT IQ3DSQmlStreamProducer
+{
+public:
+ virtual IQ3DSQmlStreamRenderer *getRenderer() = 0;
+};
+
+class Q3DS_QMLSTREAMERSHARED_EXPORT IQ3DSQmlStreamService
+{
+public:
+ virtual IQ3DSQmlStreamRenderer *getRenderer(const char *id) = 0;
+ virtual bool registerProducer(IQ3DSQmlStreamProducer *producer, const char *id) = 0;
+ virtual void unregisterProducer(IQ3DSQmlStreamProducer *producer) = 0;
+
+ static IQ3DSQmlStreamService *getQmlStreamService();
+};
+
+#endif // Q3DS_QMLSTREAM_SERVICE_H
+
+
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlsubpresentationsettings.cpp b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlsubpresentationsettings.cpp
new file mode 100644
index 00000000..bde5ad31
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlsubpresentationsettings.cpp
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "q3dsqmlsubpresentationsettings.h"
+#include "q3dsqmlstream.h"
+
+/*!
+ \qmltype SubPresentationSettings
+ \instantiates Q3DSSubPresentationSettings
+ \inqmlmodule Qt3DStudio
+ \ingroup OpenGLRuntime
+ \brief
+
+ \sa Studio3D, Presentation, QmlStream
+*/
+/*!
+ \class Q3DSSubPresentationSettings
+ \inmodule OpenGLRuntime
+ \since Qt 3D Studio 2.0
+ \brief Settings for subpresentations.
+ \param parent
+
+ \sa Q3DSPresentation, Q3DSQmlStream
+ */
+Q3DSSubPresentationSettings::Q3DSSubPresentationSettings(QObject *parent)
+ : QObject(parent)
+{
+}
+
+Q3DSSubPresentationSettings::~Q3DSSubPresentationSettings()
+{
+ qDeleteAll(m_list);
+}
+
+/*!
+ * \qmlproperty variant SubPresentationSettings::qmlStream
+ * Contains the QML streams to be used as subpresentations.
+ */
+/*!
+ * \property Q3DSSubPresentationSettings::qmlStreams
+ * Contains the QML streams to be used as subpresentations.
+ */
+QQmlListProperty<Q3DSQmlStream> Q3DSSubPresentationSettings::qmlStreams()
+{
+ return QQmlListProperty<Q3DSQmlStream>(this, m_list);
+}
+
+QList<Q3DSQmlStream *> Q3DSSubPresentationSettings::qmlStreamsList()
+{
+ return m_list;
+}
+
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlsubpresentationsettings.h b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlsubpresentationsettings.h
new file mode 100644
index 00000000..b295f2a0
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/q3dsqmlsubpresentationsettings.h
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef Q3DS_QML_SUBPRESENTATION_SETTINGS_H
+#define Q3DS_QML_SUBPRESENTATION_SETTINGS_H
+
+#include <QtCore/QObject>
+#include <QtCore/QList>
+#include <QtQml/QQmlListProperty>
+
+#include "q3dsqmlstream.h"
+#include "q3dsqmlstreamer_global.h"
+
+class Q3DS_QMLSTREAMERSHARED_EXPORT Q3DSSubPresentationSettings : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QQmlListProperty<Q3DSQmlStream> qmlStreams READ qmlStreams)
+public:
+
+ Q3DSSubPresentationSettings(QObject *parent = nullptr);
+ ~Q3DSSubPresentationSettings();
+
+ QQmlListProperty<Q3DSQmlStream> qmlStreams();
+ QList<Q3DSQmlStream *> qmlStreamsList();
+private:
+ QList<Q3DSQmlStream *> m_list;
+};
+
+#endif // Q3DS_QML_SUBPRESENTATION_SETTINGS_H
diff --git a/src/Runtime/ogl-runtime/src/qmlstreamer/qmlstreamer.pro b/src/Runtime/ogl-runtime/src/qmlstreamer/qmlstreamer.pro
new file mode 100644
index 00000000..5e82c7c0
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/qmlstreamer/qmlstreamer.pro
@@ -0,0 +1,50 @@
+TEMPLATE = lib
+TARGET = qt3dsqmlstreamer
+VERSION = $$MODULE_VERSION
+include($$PWD/../../commonplatform.pri)
+
+CONFIG += installed
+load(qt_helper_lib)
+
+# qt_helper_lib assumes non-qt lib, so it clears some qt variables, reset those
+CONFIG += qt
+QT += core qml quick opengl
+
+DEFINES += QMLSTREAMER_LIBRARY
+
+# The following define makes your compiler emit warnings if you use
+# any feature of Qt which as been marked as deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if you use deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+ q3dsqmlstream.cpp \
+ q3dsqmlstreamerserviceimpl.cpp \
+ q3dsqmlstreamproducer.cpp \
+ q3dsqmlstreamproxy.cpp \
+ q3dsqmlstreamrenderer.cpp \
+ q3dsqmlsubpresentationsettings.cpp
+
+HEADERS += \
+ q3dsincubationcontroller.h \
+ q3dsqmlstream.h \
+ q3dsqmlstreamer_global.h \
+ q3dsqmlstreamerserviceimpl.h \
+ q3dsqmlstreamproducer.h \
+ q3dsqmlstreamproxy.h \
+ q3dsqmlstreamrenderer.h \
+ q3dsqmlstreamservice.h \
+ q3dsqmlsubpresentationsettings.h
+
+INCLUDEPATH += \
+ $$PWD/../Runtime/ogl-runtime/src/engine \
+ $$PWD/../Runtime/ogl-runtime/src/system \
+ $$PWD/../QtExtras/qmlstreamer
+
+macos:QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/
diff --git a/src/Runtime/Source/render/Examples/Qt3DSRenderClearColorExample.cpp b/src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderClearColorExample.cpp
index f67cf717..f67cf717 100644
--- a/src/Runtime/Source/render/Examples/Qt3DSRenderClearColorExample.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderClearColorExample.cpp
diff --git a/src/Runtime/Source/render/Examples/Qt3DSRenderExample.cpp b/src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderExample.cpp
index d866cda0..d866cda0 100644
--- a/src/Runtime/Source/render/Examples/Qt3DSRenderExample.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderExample.cpp
diff --git a/src/Runtime/Source/render/Examples/Qt3DSRenderExample.h b/src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderExample.h
index 79bfd911..79bfd911 100644
--- a/src/Runtime/Source/render/Examples/Qt3DSRenderExample.h
+++ b/src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderExample.h
diff --git a/src/Runtime/Source/render/Examples/Qt3DSRenderExampleTools.cpp b/src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderExampleTools.cpp
index efae6f5e..efae6f5e 100644
--- a/src/Runtime/Source/render/Examples/Qt3DSRenderExampleTools.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderExampleTools.cpp
diff --git a/src/Runtime/Source/render/Examples/Qt3DSRenderExampleTools.h b/src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderExampleTools.h
index 5b402868..5b402868 100644
--- a/src/Runtime/Source/render/Examples/Qt3DSRenderExampleTools.h
+++ b/src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderExampleTools.h
diff --git a/src/Runtime/Source/render/Examples/Qt3DSRenderRenderToTextureExample.cpp b/src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderRenderToTextureExample.cpp
index e2cb4149..e2cb4149 100644
--- a/src/Runtime/Source/render/Examples/Qt3DSRenderRenderToTextureExample.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderRenderToTextureExample.cpp
diff --git a/src/Runtime/Source/render/Examples/Qt3DSRenderSpinningCubeExample.cpp b/src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderSpinningCubeExample.cpp
index 807f0821..807f0821 100644
--- a/src/Runtime/Source/render/Examples/Qt3DSRenderSpinningCubeExample.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Examples/Qt3DSRenderSpinningCubeExample.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderAtomicCounterBuffer.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderAtomicCounterBuffer.cpp
index 272c3e8c..272c3e8c 100644
--- a/src/Runtime/Source/render/Qt3DSRenderAtomicCounterBuffer.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderAtomicCounterBuffer.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderAtomicCounterBuffer.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderAtomicCounterBuffer.h
index 5ff449ea..5ff449ea 100644
--- a/src/Runtime/Source/render/Qt3DSRenderAtomicCounterBuffer.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderAtomicCounterBuffer.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderAttribLayout.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderAttribLayout.cpp
index 42641a04..42641a04 100644
--- a/src/Runtime/Source/render/Qt3DSRenderAttribLayout.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderAttribLayout.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderAttribLayout.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderAttribLayout.h
index da801c8e..da801c8e 100644
--- a/src/Runtime/Source/render/Qt3DSRenderAttribLayout.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderAttribLayout.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderBaseTypes.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderBaseTypes.cpp
index e881d27f..e881d27f 100644
--- a/src/Runtime/Source/render/Qt3DSRenderBaseTypes.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderBaseTypes.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderBaseTypes.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderBaseTypes.h
index fa5e6fcd..fa5e6fcd 100644
--- a/src/Runtime/Source/render/Qt3DSRenderBaseTypes.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderBaseTypes.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderComputeShader.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderComputeShader.cpp
index 01aef473..01aef473 100644
--- a/src/Runtime/Source/render/Qt3DSRenderComputeShader.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderComputeShader.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderComputeShader.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderComputeShader.h
index 1ab36bc0..1ab36bc0 100644
--- a/src/Runtime/Source/render/Qt3DSRenderComputeShader.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderComputeShader.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderConstantBuffer.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderConstantBuffer.cpp
index 1b3c43a9..1b3c43a9 100644
--- a/src/Runtime/Source/render/Qt3DSRenderConstantBuffer.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderConstantBuffer.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderConstantBuffer.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderConstantBuffer.h
index 5ede23b9..5ede23b9 100644
--- a/src/Runtime/Source/render/Qt3DSRenderConstantBuffer.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderConstantBuffer.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderContext.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderContext.cpp
index aa2cb30f..aa2cb30f 100644
--- a/src/Runtime/Source/render/Qt3DSRenderContext.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderContext.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderContext.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderContext.h
index dfaf1bb9..dfaf1bb9 100644
--- a/src/Runtime/Source/render/Qt3DSRenderContext.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderContext.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderDataBuffer.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderDataBuffer.cpp
index b00b0af0..b00b0af0 100644
--- a/src/Runtime/Source/render/Qt3DSRenderDataBuffer.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderDataBuffer.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderDataBuffer.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderDataBuffer.h
index 579e2361..579e2361 100644
--- a/src/Runtime/Source/render/Qt3DSRenderDataBuffer.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderDataBuffer.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderDepthStencilState.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderDepthStencilState.cpp
index 3ea47e23..3ea47e23 100644
--- a/src/Runtime/Source/render/Qt3DSRenderDepthStencilState.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderDepthStencilState.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderDepthStencilState.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderDepthStencilState.h
index e6b31981..e6b31981 100644
--- a/src/Runtime/Source/render/Qt3DSRenderDepthStencilState.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderDepthStencilState.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderDrawIndirectBuffer.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderDrawIndirectBuffer.cpp
index 9940003f..9940003f 100644
--- a/src/Runtime/Source/render/Qt3DSRenderDrawIndirectBuffer.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderDrawIndirectBuffer.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderDrawIndirectBuffer.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderDrawIndirectBuffer.h
index 81cd59d1..81cd59d1 100644
--- a/src/Runtime/Source/render/Qt3DSRenderDrawIndirectBuffer.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderDrawIndirectBuffer.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderDrawable.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderDrawable.h
index 0f78aacc..0f78aacc 100644
--- a/src/Runtime/Source/render/Qt3DSRenderDrawable.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderDrawable.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderFragmentShader.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderFragmentShader.cpp
index e2f31f1b..e2f31f1b 100644
--- a/src/Runtime/Source/render/Qt3DSRenderFragmentShader.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderFragmentShader.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderFragmentShader.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderFragmentShader.h
index f661605c..f661605c 100644
--- a/src/Runtime/Source/render/Qt3DSRenderFragmentShader.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderFragmentShader.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderFrameBuffer.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderFrameBuffer.cpp
index 0ab38428..0ab38428 100644
--- a/src/Runtime/Source/render/Qt3DSRenderFrameBuffer.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderFrameBuffer.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderFrameBuffer.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderFrameBuffer.h
index 1882a27d..1882a27d 100644
--- a/src/Runtime/Source/render/Qt3DSRenderFrameBuffer.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderFrameBuffer.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderGeometryShader.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderGeometryShader.cpp
index 50567287..50567287 100644
--- a/src/Runtime/Source/render/Qt3DSRenderGeometryShader.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderGeometryShader.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderGeometryShader.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderGeometryShader.h
index 2a643cfc..2a643cfc 100644
--- a/src/Runtime/Source/render/Qt3DSRenderGeometryShader.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderGeometryShader.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderImageTexture.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderImageTexture.cpp
index e987cc31..e987cc31 100644
--- a/src/Runtime/Source/render/Qt3DSRenderImageTexture.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderImageTexture.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderImageTexture.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderImageTexture.h
index 8b3469b0..8b3469b0 100644
--- a/src/Runtime/Source/render/Qt3DSRenderImageTexture.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderImageTexture.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderIndexBuffer.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderIndexBuffer.cpp
index 37f56bd2..37f56bd2 100644
--- a/src/Runtime/Source/render/Qt3DSRenderIndexBuffer.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderIndexBuffer.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderIndexBuffer.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderIndexBuffer.h
index 6b9c4711..6b9c4711 100644
--- a/src/Runtime/Source/render/Qt3DSRenderIndexBuffer.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderIndexBuffer.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderInputAssembler.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderInputAssembler.cpp
index e4d38b9d..e4d38b9d 100644
--- a/src/Runtime/Source/render/Qt3DSRenderInputAssembler.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderInputAssembler.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderInputAssembler.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderInputAssembler.h
index adac4c42..adac4c42 100644
--- a/src/Runtime/Source/render/Qt3DSRenderInputAssembler.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderInputAssembler.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderOcclusionQuery.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderOcclusionQuery.cpp
index d1b62d4c..d1b62d4c 100644
--- a/src/Runtime/Source/render/Qt3DSRenderOcclusionQuery.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderOcclusionQuery.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderOcclusionQuery.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderOcclusionQuery.h
index 04f64e97..04f64e97 100644
--- a/src/Runtime/Source/render/Qt3DSRenderOcclusionQuery.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderOcclusionQuery.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderPathFontSpecification.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathFontSpecification.cpp
index 3e9276aa..3e9276aa 100644
--- a/src/Runtime/Source/render/Qt3DSRenderPathFontSpecification.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathFontSpecification.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderPathFontSpecification.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathFontSpecification.h
index dad3f6bb..dad3f6bb 100644
--- a/src/Runtime/Source/render/Qt3DSRenderPathFontSpecification.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathFontSpecification.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderPathFontText.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathFontText.cpp
index aeaad13c..aeaad13c 100644
--- a/src/Runtime/Source/render/Qt3DSRenderPathFontText.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathFontText.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderPathFontText.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathFontText.h
index a1d103ac..a1d103ac 100644
--- a/src/Runtime/Source/render/Qt3DSRenderPathFontText.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathFontText.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderPathRender.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathRender.cpp
index 42982498..42982498 100644
--- a/src/Runtime/Source/render/Qt3DSRenderPathRender.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathRender.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderPathRender.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathRender.h
index c261ca31..c261ca31 100644
--- a/src/Runtime/Source/render/Qt3DSRenderPathRender.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathRender.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderPathSpecification.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathSpecification.cpp
index f4b26f11..f4b26f11 100644
--- a/src/Runtime/Source/render/Qt3DSRenderPathSpecification.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathSpecification.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderPathSpecification.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathSpecification.h
index 7c6faeda..7c6faeda 100644
--- a/src/Runtime/Source/render/Qt3DSRenderPathSpecification.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderPathSpecification.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderProgramPipeline.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderProgramPipeline.cpp
index b0a9f271..b0a9f271 100644
--- a/src/Runtime/Source/render/Qt3DSRenderProgramPipeline.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderProgramPipeline.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderProgramPipeline.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderProgramPipeline.h
index ce47146a..ce47146a 100644
--- a/src/Runtime/Source/render/Qt3DSRenderProgramPipeline.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderProgramPipeline.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderQueryBase.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderQueryBase.cpp
index f13bc499..f13bc499 100644
--- a/src/Runtime/Source/render/Qt3DSRenderQueryBase.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderQueryBase.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderQueryBase.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderQueryBase.h
index 7a7ead87..7a7ead87 100644
--- a/src/Runtime/Source/render/Qt3DSRenderQueryBase.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderQueryBase.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderRasterizerState.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderRasterizerState.cpp
index e7daf7f4..e7daf7f4 100644
--- a/src/Runtime/Source/render/Qt3DSRenderRasterizerState.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderRasterizerState.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderRasterizerState.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderRasterizerState.h
index 9b71ae42..9b71ae42 100644
--- a/src/Runtime/Source/render/Qt3DSRenderRasterizerState.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderRasterizerState.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderRenderBuffer.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderRenderBuffer.cpp
index b682bc1b..b682bc1b 100644
--- a/src/Runtime/Source/render/Qt3DSRenderRenderBuffer.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderRenderBuffer.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderRenderBuffer.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderRenderBuffer.h
index 41f4068a..41f4068a 100644
--- a/src/Runtime/Source/render/Qt3DSRenderRenderBuffer.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderRenderBuffer.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderSampler.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderSampler.cpp
index b02fc615..b02fc615 100644
--- a/src/Runtime/Source/render/Qt3DSRenderSampler.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderSampler.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderSampler.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderSampler.h
index 77d3f008..77d3f008 100644
--- a/src/Runtime/Source/render/Qt3DSRenderSampler.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderSampler.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderShader.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderShader.h
index 8d0a62c4..8d0a62c4 100644
--- a/src/Runtime/Source/render/Qt3DSRenderShader.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderShader.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderShaderConstant.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderShaderConstant.h
index 7fb57ffe..7fb57ffe 100644
--- a/src/Runtime/Source/render/Qt3DSRenderShaderConstant.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderShaderConstant.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderShaderProgram.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderShaderProgram.cpp
index 09f1094b..09f1094b 100644
--- a/src/Runtime/Source/render/Qt3DSRenderShaderProgram.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderShaderProgram.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderShaderProgram.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderShaderProgram.h
index 054db64b..054db64b 100644
--- a/src/Runtime/Source/render/Qt3DSRenderShaderProgram.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderShaderProgram.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderStorageBuffer.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderStorageBuffer.cpp
index ab632189..ab632189 100644
--- a/src/Runtime/Source/render/Qt3DSRenderStorageBuffer.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderStorageBuffer.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderStorageBuffer.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderStorageBuffer.h
index fefe6b08..fefe6b08 100644
--- a/src/Runtime/Source/render/Qt3DSRenderStorageBuffer.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderStorageBuffer.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderSync.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderSync.cpp
index 02d153a6..02d153a6 100644
--- a/src/Runtime/Source/render/Qt3DSRenderSync.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderSync.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderSync.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderSync.h
index 9dfeb28a..9dfeb28a 100644
--- a/src/Runtime/Source/render/Qt3DSRenderSync.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderSync.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderTessellationShader.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTessellationShader.cpp
index 7a0fd897..7a0fd897 100644
--- a/src/Runtime/Source/render/Qt3DSRenderTessellationShader.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTessellationShader.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderTessellationShader.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTessellationShader.h
index b69e56b1..b69e56b1 100644
--- a/src/Runtime/Source/render/Qt3DSRenderTessellationShader.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTessellationShader.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderTexture2D.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTexture2D.cpp
index c5ea4750..c5ea4750 100644
--- a/src/Runtime/Source/render/Qt3DSRenderTexture2D.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTexture2D.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderTexture2D.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTexture2D.h
index 29c7c1b4..29c7c1b4 100644
--- a/src/Runtime/Source/render/Qt3DSRenderTexture2D.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTexture2D.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderTexture2DArray.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTexture2DArray.cpp
index fc0dfa45..fc0dfa45 100644
--- a/src/Runtime/Source/render/Qt3DSRenderTexture2DArray.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTexture2DArray.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderTexture2DArray.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTexture2DArray.h
index 30ed6dbb..30ed6dbb 100644
--- a/src/Runtime/Source/render/Qt3DSRenderTexture2DArray.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTexture2DArray.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderTextureBase.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTextureBase.cpp
index c1c3e97d..c1c3e97d 100644
--- a/src/Runtime/Source/render/Qt3DSRenderTextureBase.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTextureBase.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderTextureBase.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTextureBase.h
index 872a634e..872a634e 100644
--- a/src/Runtime/Source/render/Qt3DSRenderTextureBase.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTextureBase.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderTextureCube.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTextureCube.cpp
index 0919daf3..0919daf3 100644
--- a/src/Runtime/Source/render/Qt3DSRenderTextureCube.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTextureCube.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderTextureCube.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTextureCube.h
index 7310d44d..7310d44d 100644
--- a/src/Runtime/Source/render/Qt3DSRenderTextureCube.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTextureCube.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderTimerQuery.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTimerQuery.cpp
index 4184436a..4184436a 100644
--- a/src/Runtime/Source/render/Qt3DSRenderTimerQuery.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTimerQuery.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderTimerQuery.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTimerQuery.h
index f909f374..f909f374 100644
--- a/src/Runtime/Source/render/Qt3DSRenderTimerQuery.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderTimerQuery.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderVertexBuffer.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderVertexBuffer.cpp
index 89d6204e..89d6204e 100644
--- a/src/Runtime/Source/render/Qt3DSRenderVertexBuffer.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderVertexBuffer.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderVertexBuffer.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderVertexBuffer.h
index 914afe27..914afe27 100644
--- a/src/Runtime/Source/render/Qt3DSRenderVertexBuffer.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderVertexBuffer.h
diff --git a/src/Runtime/Source/render/Qt3DSRenderVertexShader.cpp b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderVertexShader.cpp
index 3a53ad50..3a53ad50 100644
--- a/src/Runtime/Source/render/Qt3DSRenderVertexShader.cpp
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderVertexShader.cpp
diff --git a/src/Runtime/Source/render/Qt3DSRenderVertexShader.h b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderVertexShader.h
index 0a96045b..0a96045b 100644
--- a/src/Runtime/Source/render/Qt3DSRenderVertexShader.h
+++ b/src/Runtime/ogl-runtime/src/render/Qt3DSRenderVertexShader.h
diff --git a/src/Runtime/Source/render/backends/Qt3DSRenderBackend.h b/src/Runtime/ogl-runtime/src/render/backends/Qt3DSRenderBackend.h
index 12de5d88..12de5d88 100644
--- a/src/Runtime/Source/render/backends/Qt3DSRenderBackend.h
+++ b/src/Runtime/ogl-runtime/src/render/backends/Qt3DSRenderBackend.h
diff --git a/src/Runtime/Source/render/backends/gl/Q3DSRenderBackendGLES2.cpp b/src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.cpp
index d38c330c..d38c330c 100644
--- a/src/Runtime/Source/render/backends/gl/Q3DSRenderBackendGLES2.cpp
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.cpp
diff --git a/src/Runtime/Source/render/backends/gl/Q3DSRenderBackendGLES2.h b/src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.h
index 4890de0e..4890de0e 100644
--- a/src/Runtime/Source/render/backends/gl/Q3DSRenderBackendGLES2.h
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Q3DSRenderBackendGLES2.h
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSOpenGLExtensions.cpp b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLExtensions.cpp
index 564ecd5a..564ecd5a 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSOpenGLExtensions.cpp
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLExtensions.cpp
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSOpenGLExtensions.h b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLExtensions.h
index c9ba76a6..c9ba76a6 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSOpenGLExtensions.h
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLExtensions.h
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSOpenGLPrefix.h b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLPrefix.h
index 0e6dc6d4..0e6dc6d4 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSOpenGLPrefix.h
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLPrefix.h
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSOpenGLTokens.h b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLTokens.h
index 882e2761..882e2761 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSOpenGLTokens.h
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLTokens.h
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSOpenGLUtil.h b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLUtil.h
index 32f7dad7..32f7dad7 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSOpenGLUtil.h
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSOpenGLUtil.h
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL3.cpp b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.cpp
index f49f3a16..f49f3a16 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL3.cpp
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.cpp
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL3.h b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.h
index 7147b341..7147b341 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL3.h
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL3.h
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL4.cpp b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL4.cpp
index 083fc35e..083fc35e 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL4.cpp
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL4.cpp
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL4.h b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL4.h
index bfdc03b7..bfdc03b7 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL4.h
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGL4.h
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.cpp b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGLBase.cpp
index ba25ae7e..ba25ae7e 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.cpp
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGLBase.cpp
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.h b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGLBase.h
index 28e4dbb1..28e4dbb1 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGLBase.h
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendGLBase.h
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendInputAssemblerGL.h b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendInputAssemblerGL.h
index e14111af..e14111af 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendInputAssemblerGL.h
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendInputAssemblerGL.h
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendRenderStatesGL.h b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendRenderStatesGL.h
index 3a74a8e3..3a74a8e3 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendRenderStatesGL.h
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendRenderStatesGL.h
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendShaderProgramGL.h b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendShaderProgramGL.h
index f7caffd8..f7caffd8 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendShaderProgramGL.h
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderBackendShaderProgramGL.h
diff --git a/src/Runtime/Source/render/backends/gl/Qt3DSRenderContextGL.cpp b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderContextGL.cpp
index 88670ef7..88670ef7 100644
--- a/src/Runtime/Source/render/backends/gl/Qt3DSRenderContextGL.cpp
+++ b/src/Runtime/ogl-runtime/src/render/backends/gl/Qt3DSRenderContextGL.cpp
diff --git a/src/Runtime/Source/render/backends/software/Qt3DSRenderBackendNULL.cpp b/src/Runtime/ogl-runtime/src/render/backends/software/Qt3DSRenderBackendNULL.cpp
index af93e928..af93e928 100644
--- a/src/Runtime/Source/render/backends/software/Qt3DSRenderBackendNULL.cpp
+++ b/src/Runtime/ogl-runtime/src/render/backends/software/Qt3DSRenderBackendNULL.cpp
diff --git a/src/Runtime/Source/render/backends/software/Qt3DSRenderBackendNULL.h b/src/Runtime/ogl-runtime/src/render/backends/software/Qt3DSRenderBackendNULL.h
index 397ecfb1..397ecfb1 100644
--- a/src/Runtime/Source/render/backends/software/Qt3DSRenderBackendNULL.h
+++ b/src/Runtime/ogl-runtime/src/render/backends/software/Qt3DSRenderBackendNULL.h
diff --git a/src/Runtime/Source/render/glg/Qt3DSGLImplObjects.h b/src/Runtime/ogl-runtime/src/render/glg/Qt3DSGLImplObjects.h
index 28f246fd..28f246fd 100644
--- a/src/Runtime/Source/render/glg/Qt3DSGLImplObjects.h
+++ b/src/Runtime/ogl-runtime/src/render/glg/Qt3DSGLImplObjects.h
diff --git a/src/Runtime/Source/runtime/Qt3DSActivationManager.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSActivationManager.cpp
index 3d052742..3d052742 100644
--- a/src/Runtime/Source/runtime/Qt3DSActivationManager.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSActivationManager.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSActivationManager.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSActivationManager.h
index f343ac9b..f343ac9b 100644
--- a/src/Runtime/Source/runtime/Qt3DSActivationManager.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSActivationManager.h
diff --git a/src/Runtime/Source/runtime/Qt3DSAnimationSystem.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSAnimationSystem.cpp
index 84d1c6db..84d1c6db 100644
--- a/src/Runtime/Source/runtime/Qt3DSAnimationSystem.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSAnimationSystem.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSAnimationSystem.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSAnimationSystem.h
index 24542ad9..24542ad9 100644
--- a/src/Runtime/Source/runtime/Qt3DSAnimationSystem.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSAnimationSystem.h
diff --git a/src/Runtime/Source/runtime/Qt3DSApplication.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSApplication.cpp
index 20e3fd57..df2f00fa 100644
--- a/src/Runtime/Source/runtime/Qt3DSApplication.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSApplication.cpp
@@ -688,6 +688,7 @@ struct SApp : public IApplication
, m_createSuccessful(false)
, mRefCount(0)
{
+ m_PresentationId.append("__initial");
m_AudioPlayer.SetApplication(*this);
eastl::string tempStr(inAppDir);
CFileTools::NormalizePath(tempStr);
@@ -734,15 +735,22 @@ struct SApp : public IApplication
if (oldId == id)
return;
+ CRegisteredString idStr = m_CoreFactory->GetStringTable().RegisterStr(id);
// Update id key in m_AssetMap
TIdAssetMap::iterator iter
= m_AssetMap.find(m_CoreFactory->GetStringTable().RegisterStr(oldId));
if (iter != m_AssetMap.end()
&& iter->second->getType() == AssetValueTypes::Presentation) {
- CRegisteredString idStr = m_CoreFactory->GetStringTable().RegisterStr(id);
m_AssetMap.insert(eastl::make_pair(idStr, iter->second));
m_AssetMap.erase(iter);
}
+ for (unsigned i = 0; i < m_OrderedAssets.size(); i++) {
+ auto &asset = m_OrderedAssets[i];
+ if (oldId == asset.first.c_str()) {
+ asset.first = idStr;
+ break;
+ }
+ }
m_PresentationId.assign(qPrintable(id));
}
@@ -1489,12 +1497,12 @@ struct SApp : public IApplication
m_variantConfig.setVariantList(variantList);
bool retval = false;
if (extension.comparei("uip") == 0) {
- m_PresentationId.assign(filename.c_str());
+ m_PresentationId.assign("__initial");
eastl::string relativePath = "./";
relativePath.append(filename);
relativePath.append(".");
relativePath.append("uip");
- RegisterAsset(SPresentationAsset(RegisterStr(filename.c_str()),
+ RegisterAsset(SPresentationAsset(RegisterStr(m_PresentationId.c_str()),
RegisterStr(relativePath.c_str())));
m_AppLoadContext = IAppLoadContext::CreateXMLLoadContext(*this, "");
diff --git a/src/Runtime/Source/runtime/Qt3DSApplication.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSApplication.h
index 39cd3c4b..39cd3c4b 100644
--- a/src/Runtime/Source/runtime/Qt3DSApplication.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSApplication.h
diff --git a/src/Runtime/Source/runtime/Qt3DSApplicationValues.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSApplicationValues.h
index 80e8f73f..80e8f73f 100644
--- a/src/Runtime/Source/runtime/Qt3DSApplicationValues.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSApplicationValues.h
diff --git a/src/Runtime/Source/runtime/Qt3DSAttributeHashes.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSAttributeHashes.cpp
index 1daddc10..1daddc10 100644
--- a/src/Runtime/Source/runtime/Qt3DSAttributeHashes.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSAttributeHashes.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSAttributeHashes.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSAttributeHashes.h
index 1f712a8c..1f712a8c 100644
--- a/src/Runtime/Source/runtime/Qt3DSAttributeHashes.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSAttributeHashes.h
diff --git a/src/Runtime/Source/runtime/Qt3DSAttributeHashes.txt b/src/Runtime/ogl-runtime/src/runtime/Qt3DSAttributeHashes.txt
index 4168bbdc..4168bbdc 100644
--- a/src/Runtime/Source/runtime/Qt3DSAttributeHashes.txt
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSAttributeHashes.txt
diff --git a/src/Runtime/Source/runtime/Qt3DSCommandEventTypes.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSCommandEventTypes.h
index 01a12b44..01a12b44 100644
--- a/src/Runtime/Source/runtime/Qt3DSCommandEventTypes.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSCommandEventTypes.h
diff --git a/src/Runtime/Source/runtime/Qt3DSCommandHelper.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSCommandHelper.cpp
index 53c7648a..53c7648a 100644
--- a/src/Runtime/Source/runtime/Qt3DSCommandHelper.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSCommandHelper.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSCommandHelper.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSCommandHelper.h
index 412a51a1..412a51a1 100644
--- a/src/Runtime/Source/runtime/Qt3DSCommandHelper.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSCommandHelper.h
diff --git a/src/Runtime/Source/runtime/Qt3DSComponentManager.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSComponentManager.cpp
index d7ce0b6a..d7ce0b6a 100644
--- a/src/Runtime/Source/runtime/Qt3DSComponentManager.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSComponentManager.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSComponentManager.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSComponentManager.h
index 865b8aa9..865b8aa9 100644
--- a/src/Runtime/Source/runtime/Qt3DSComponentManager.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSComponentManager.h
diff --git a/src/Runtime/Source/runtime/Qt3DSElementHelper.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSElementHelper.cpp
index acf8849e..acf8849e 100644
--- a/src/Runtime/Source/runtime/Qt3DSElementHelper.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSElementHelper.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSElementHelper.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSElementHelper.h
index df2afddb..df2afddb 100644
--- a/src/Runtime/Source/runtime/Qt3DSElementHelper.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSElementHelper.h
diff --git a/src/Runtime/Source/runtime/Qt3DSElementSystem.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSElementSystem.cpp
index d8e18338..d8e18338 100644
--- a/src/Runtime/Source/runtime/Qt3DSElementSystem.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSElementSystem.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSElementSystem.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSElementSystem.h
index 12ebebd9..12ebebd9 100644
--- a/src/Runtime/Source/runtime/Qt3DSElementSystem.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSElementSystem.h
diff --git a/src/Runtime/Source/runtime/Qt3DSEvent.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSEvent.h
index aef317a5..aef317a5 100644
--- a/src/Runtime/Source/runtime/Qt3DSEvent.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSEvent.h
diff --git a/src/Runtime/Source/runtime/Qt3DSEventCallbacks.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSEventCallbacks.cpp
index 25d720ea..25d720ea 100644
--- a/src/Runtime/Source/runtime/Qt3DSEventCallbacks.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSEventCallbacks.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSEventCallbacks.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSEventCallbacks.h
index 5c17477d..5c17477d 100644
--- a/src/Runtime/Source/runtime/Qt3DSEventCallbacks.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSEventCallbacks.h
diff --git a/src/Runtime/Source/runtime/Qt3DSFrameworkTypes.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSFrameworkTypes.h
index 8cb5c3b8..8cb5c3b8 100644
--- a/src/Runtime/Source/runtime/Qt3DSFrameworkTypes.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSFrameworkTypes.h
diff --git a/src/Runtime/Source/runtime/Qt3DSIComponentManager.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSIComponentManager.h
index 8185da2d..8185da2d 100644
--- a/src/Runtime/Source/runtime/Qt3DSIComponentManager.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSIComponentManager.h
diff --git a/src/Runtime/Source/runtime/Qt3DSIInputSystem.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSIInputSystem.h
index 6cd201fb..6cd201fb 100644
--- a/src/Runtime/Source/runtime/Qt3DSIInputSystem.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSIInputSystem.h
diff --git a/src/Runtime/Source/runtime/Qt3DSIScene.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSIScene.h
index 7494ab0f..7494ab0f 100644
--- a/src/Runtime/Source/runtime/Qt3DSIScene.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSIScene.h
diff --git a/src/Runtime/Source/runtime/Qt3DSIScriptBridge.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSIScriptBridge.h
index abbfcd5b..abbfcd5b 100644
--- a/src/Runtime/Source/runtime/Qt3DSIScriptBridge.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSIScriptBridge.h
diff --git a/src/Runtime/Source/runtime/Qt3DSIStateful.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSIStateful.h
index 0eca293e..0eca293e 100644
--- a/src/Runtime/Source/runtime/Qt3DSIStateful.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSIStateful.h
diff --git a/src/Runtime/Source/runtime/Qt3DSIText.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSIText.h
index c4694fe2..c4694fe2 100644
--- a/src/Runtime/Source/runtime/Qt3DSIText.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSIText.h
diff --git a/src/Runtime/Source/runtime/Qt3DSInputDefs.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSInputDefs.h
index 447e424b..447e424b 100644
--- a/src/Runtime/Source/runtime/Qt3DSInputDefs.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSInputDefs.h
diff --git a/src/Runtime/Source/runtime/Qt3DSInputEngine.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSInputEngine.cpp
index d3cbe423..d3cbe423 100644
--- a/src/Runtime/Source/runtime/Qt3DSInputEngine.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSInputEngine.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSInputEngine.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSInputEngine.h
index bf75e5a1..bf75e5a1 100644
--- a/src/Runtime/Source/runtime/Qt3DSInputEngine.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSInputEngine.h
diff --git a/src/Runtime/Source/runtime/Qt3DSInputEventTypes.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSInputEventTypes.h
index 0b3c3981..0b3c3981 100644
--- a/src/Runtime/Source/runtime/Qt3DSInputEventTypes.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSInputEventTypes.h
diff --git a/src/Runtime/Source/runtime/Qt3DSInputFrame.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSInputFrame.h
index f80f3ebc..f80f3ebc 100644
--- a/src/Runtime/Source/runtime/Qt3DSInputFrame.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSInputFrame.h
diff --git a/src/Runtime/Source/runtime/Qt3DSKernelTypes.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSKernelTypes.h
index 0ad4ec61..0ad4ec61 100644
--- a/src/Runtime/Source/runtime/Qt3DSKernelTypes.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSKernelTypes.h
diff --git a/src/Runtime/Source/runtime/Qt3DSLogicSystem.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSLogicSystem.cpp
index 4a8341b4..4a8341b4 100644
--- a/src/Runtime/Source/runtime/Qt3DSLogicSystem.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSLogicSystem.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSLogicSystem.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSLogicSystem.h
index af13c91f..af13c91f 100644
--- a/src/Runtime/Source/runtime/Qt3DSLogicSystem.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSLogicSystem.h
diff --git a/src/Runtime/Source/runtime/Qt3DSOutputMemoryStream.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSOutputMemoryStream.cpp
index 06d0eee6..06d0eee6 100644
--- a/src/Runtime/Source/runtime/Qt3DSOutputMemoryStream.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSOutputMemoryStream.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSOutputMemoryStream.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSOutputMemoryStream.h
index da28245f..da28245f 100644
--- a/src/Runtime/Source/runtime/Qt3DSOutputMemoryStream.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSOutputMemoryStream.h
diff --git a/src/Runtime/Source/runtime/Qt3DSParametersSystem.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSParametersSystem.cpp
index 84b642cd..84b642cd 100644
--- a/src/Runtime/Source/runtime/Qt3DSParametersSystem.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSParametersSystem.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSParametersSystem.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSParametersSystem.h
index 50a4652d..50a4652d 100644
--- a/src/Runtime/Source/runtime/Qt3DSParametersSystem.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSParametersSystem.h
diff --git a/src/Runtime/Source/runtime/Qt3DSPickFrame.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSPickFrame.h
index 15da72c9..15da72c9 100644
--- a/src/Runtime/Source/runtime/Qt3DSPickFrame.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSPickFrame.h
diff --git a/src/Runtime/Source/runtime/Qt3DSPresentation.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSPresentation.cpp
index 0792119b..0792119b 100644
--- a/src/Runtime/Source/runtime/Qt3DSPresentation.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSPresentation.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSPresentation.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSPresentation.h
index 76b0a6e7..76b0a6e7 100644
--- a/src/Runtime/Source/runtime/Qt3DSPresentation.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSPresentation.h
diff --git a/src/Runtime/Source/runtime/Qt3DSPresentationFrameData.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSPresentationFrameData.cpp
index 649462aa..649462aa 100644
--- a/src/Runtime/Source/runtime/Qt3DSPresentationFrameData.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSPresentationFrameData.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSPresentationFrameData.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSPresentationFrameData.h
index 332cc84a..332cc84a 100644
--- a/src/Runtime/Source/runtime/Qt3DSPresentationFrameData.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSPresentationFrameData.h
diff --git a/src/Runtime/Source/runtime/Qt3DSQmlElementHelper.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSQmlElementHelper.cpp
index 9b58a733..9b58a733 100644
--- a/src/Runtime/Source/runtime/Qt3DSQmlElementHelper.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSQmlElementHelper.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSQmlElementHelper.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSQmlElementHelper.h
index ec36c8ed..ec36c8ed 100644
--- a/src/Runtime/Source/runtime/Qt3DSQmlElementHelper.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSQmlElementHelper.h
diff --git a/src/Runtime/Source/runtime/Qt3DSQmlEngine.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSQmlEngine.cpp
index e5aecc74..e5aecc74 100644
--- a/src/Runtime/Source/runtime/Qt3DSQmlEngine.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSQmlEngine.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSQmlEngine.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSQmlEngine.h
index a5ad382b..a5ad382b 100644
--- a/src/Runtime/Source/runtime/Qt3DSQmlEngine.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSQmlEngine.h
diff --git a/src/Runtime/Source/runtime/Qt3DSRuntimeFactory.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSRuntimeFactory.h
index fb46240c..fb46240c 100644
--- a/src/Runtime/Source/runtime/Qt3DSRuntimeFactory.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSRuntimeFactory.h
diff --git a/src/Runtime/Source/runtime/Qt3DSSceneManager.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSSceneManager.h
index 7d8297f4..7d8297f4 100644
--- a/src/Runtime/Source/runtime/Qt3DSSceneManager.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSSceneManager.h
diff --git a/src/Runtime/Source/runtime/Qt3DSSlideSystem.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSSlideSystem.cpp
index 33c7544d..33c7544d 100644
--- a/src/Runtime/Source/runtime/Qt3DSSlideSystem.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSSlideSystem.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSSlideSystem.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSSlideSystem.h
index d3accbd3..d3accbd3 100644
--- a/src/Runtime/Source/runtime/Qt3DSSlideSystem.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSSlideSystem.h
diff --git a/src/Runtime/Source/runtime/Qt3DSTimePolicy.cpp b/src/Runtime/ogl-runtime/src/runtime/Qt3DSTimePolicy.cpp
index e1efb8e0..e1efb8e0 100644
--- a/src/Runtime/Source/runtime/Qt3DSTimePolicy.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSTimePolicy.cpp
diff --git a/src/Runtime/Source/runtime/Qt3DSTimePolicy.h b/src/Runtime/ogl-runtime/src/runtime/Qt3DSTimePolicy.h
index 6a137196..6a137196 100644
--- a/src/Runtime/Source/runtime/Qt3DSTimePolicy.h
+++ b/src/Runtime/ogl-runtime/src/runtime/Qt3DSTimePolicy.h
diff --git a/src/Runtime/Source/runtime/RuntimePrefix.h b/src/Runtime/ogl-runtime/src/runtime/RuntimePrefix.h
index bf729ebf..bf729ebf 100644
--- a/src/Runtime/Source/runtime/RuntimePrefix.h
+++ b/src/Runtime/ogl-runtime/src/runtime/RuntimePrefix.h
diff --git a/src/Runtime/Source/runtime/q3dsmaterialdefinitionparser.cpp b/src/Runtime/ogl-runtime/src/runtime/q3dsmaterialdefinitionparser.cpp
index 913a24ec..913a24ec 100644
--- a/src/Runtime/Source/runtime/q3dsmaterialdefinitionparser.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/q3dsmaterialdefinitionparser.cpp
diff --git a/src/Runtime/Source/runtime/q3dsmaterialdefinitionparser.h b/src/Runtime/ogl-runtime/src/runtime/q3dsmaterialdefinitionparser.h
index f6d98bbf..f6d98bbf 100644
--- a/src/Runtime/Source/runtime/q3dsmaterialdefinitionparser.h
+++ b/src/Runtime/ogl-runtime/src/runtime/q3dsmaterialdefinitionparser.h
diff --git a/src/Runtime/Source/runtime/q3dsqmlbehavior.cpp b/src/Runtime/ogl-runtime/src/runtime/q3dsqmlbehavior.cpp
index 83b706eb..83b706eb 100644
--- a/src/Runtime/Source/runtime/q3dsqmlbehavior.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/q3dsqmlbehavior.cpp
diff --git a/src/Runtime/Source/runtime/q3dsqmlbehavior.h b/src/Runtime/ogl-runtime/src/runtime/q3dsqmlbehavior.h
index 76f4a4a0..76f4a4a0 100644
--- a/src/Runtime/Source/runtime/q3dsqmlbehavior.h
+++ b/src/Runtime/ogl-runtime/src/runtime/q3dsqmlbehavior.h
diff --git a/src/Runtime/Source/runtime/q3dsqmlscript.cpp b/src/Runtime/ogl-runtime/src/runtime/q3dsqmlscript.cpp
index 725c7520..725c7520 100644
--- a/src/Runtime/Source/runtime/q3dsqmlscript.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/q3dsqmlscript.cpp
diff --git a/src/Runtime/Source/runtime/q3dsqmlscript.h b/src/Runtime/ogl-runtime/src/runtime/q3dsqmlscript.h
index 3ad1118f..3ad1118f 100644
--- a/src/Runtime/Source/runtime/q3dsqmlscript.h
+++ b/src/Runtime/ogl-runtime/src/runtime/q3dsqmlscript.h
diff --git a/src/Runtime/Source/runtime/q3dsvariantconfig.cpp b/src/Runtime/ogl-runtime/src/runtime/q3dsvariantconfig.cpp
index e1fa04c6..e1fa04c6 100644
--- a/src/Runtime/Source/runtime/q3dsvariantconfig.cpp
+++ b/src/Runtime/ogl-runtime/src/runtime/q3dsvariantconfig.cpp
diff --git a/src/Runtime/Source/runtime/q3dsvariantconfig_p.h b/src/Runtime/ogl-runtime/src/runtime/q3dsvariantconfig_p.h
index 1905f44a..1905f44a 100644
--- a/src/Runtime/Source/runtime/q3dsvariantconfig_p.h
+++ b/src/Runtime/ogl-runtime/src/runtime/q3dsvariantconfig_p.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldGlyphCache.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldGlyphCache.cpp
index 3779aa56..3779aa56 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldGlyphCache.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldGlyphCache.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldGlyphCacheManager.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldGlyphCacheManager.cpp
index 750301dc..750301dc 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldGlyphCacheManager.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldGlyphCacheManager.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldGlyphCacheManager_p.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldGlyphCacheManager_p.h
index 19d3c088..19d3c088 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldGlyphCacheManager_p.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldGlyphCacheManager_p.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldGlyphCache_p.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldGlyphCache_p.h
index 679d3ad7..679d3ad7 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldGlyphCache_p.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldGlyphCache_p.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldRenderer.cpp
index 290964b2..290964b2 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldRenderer.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldRenderer.h
index 3af19a98..3af19a98 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSDistanceFieldRenderer.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSDistanceFieldRenderer.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSFontDatabase.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSFontDatabase.cpp
index b44cdbd1..b44cdbd1 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSFontDatabase.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSFontDatabase.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSFontDatabase_p.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSFontDatabase_p.h
index 73e03624..73e03624 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSFontDatabase_p.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSFontDatabase_p.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSOffscreenRenderKey.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOffscreenRenderKey.h
index 555c2689..555c2689 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSOffscreenRenderKey.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOffscreenRenderKey.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSOffscreenRenderManager.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOffscreenRenderManager.cpp
index 7d66c7a3..7d66c7a3 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSOffscreenRenderManager.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOffscreenRenderManager.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSOffscreenRenderManager.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOffscreenRenderManager.h
index 6d821624..6d821624 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSOffscreenRenderManager.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOffscreenRenderManager.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOldNBustedRenderPlugin.cpp
index 4028373b..4028373b 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOldNBustedRenderPlugin.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOldNBustedRenderPlugin.h
index 2753bac6..2753bac6 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOldNBustedRenderPlugin.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSOnscreenTextRenderer.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOnscreenTextRenderer.cpp
index 4b74c511..4b74c511 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSOnscreenTextRenderer.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSOnscreenTextRenderer.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSQtTextRenderer.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSQtTextRenderer.cpp
index 029ccea2..029ccea2 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSQtTextRenderer.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSQtTextRenderer.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRender.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRender.h
index e07dc6ec..e07dc6ec 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRender.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRender.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderClippingFrustum.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderClippingFrustum.cpp
index 86375566..86375566 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderClippingFrustum.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderClippingFrustum.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderClippingFrustum.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderClippingFrustum.h
index b788ad24..b788ad24 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderClippingFrustum.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderClippingFrustum.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderContextCore.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderContextCore.cpp
index 33e1bf6c..33e1bf6c 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderContextCore.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderContextCore.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderContextCore.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderContextCore.h
index 302571d2..302571d2 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderContextCore.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderContextCore.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialRenderContext.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialRenderContext.h
index 5283660c..5283660c 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialRenderContext.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialRenderContext.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp
index 62205ecd..62205ecd 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.h
index 44e2c064..44e2c064 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialShaderGenerator.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp
index aaf799fd..aaf799fd 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialSystem.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialSystem.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialSystem.h
index 6fe522fd..6fe522fd 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderCustomMaterialSystem.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderCustomMaterialSystem.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp
index 221f3296..221f3296 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.h
index 7453e1db..7453e1db 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderDynamicObjectSystem.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDynamicObjectSystem.cpp
index 92c337a0..92c337a0 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderDynamicObjectSystem.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDynamicObjectSystem.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderDynamicObjectSystem.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDynamicObjectSystem.h
index cfe022ee..cfe022ee 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderDynamicObjectSystem.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDynamicObjectSystem.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderDynamicObjectSystemCommands.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDynamicObjectSystemCommands.h
index 857dfa97..857dfa97 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderDynamicObjectSystemCommands.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDynamicObjectSystemCommands.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderDynamicObjectSystemUtil.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDynamicObjectSystemUtil.h
index b00b9963..b00b9963 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderDynamicObjectSystemUtil.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderDynamicObjectSystemUtil.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderEffectSystem.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderEffectSystem.cpp
index 65f52a64..65f52a64 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderEffectSystem.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderEffectSystem.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderEffectSystem.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderEffectSystem.h
index 879addc9..879addc9 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderEffectSystem.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderEffectSystem.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderEulerAngles.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderEulerAngles.cpp
index 2732f031..2732f031 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderEulerAngles.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderEulerAngles.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderEulerAngles.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderEulerAngles.h
index bf271e29..bf271e29 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderEulerAngles.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderEulerAngles.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderGpuProfiler.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGpuProfiler.cpp
index 740d8a71..740d8a71 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderGpuProfiler.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGpuProfiler.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderGraphObjectPickQuery.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGraphObjectPickQuery.h
index e63cad3f..e63cad3f 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderGraphObjectPickQuery.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGraphObjectPickQuery.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderGraphObjectSerializer.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGraphObjectSerializer.cpp
index 358c5aad..358c5aad 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderGraphObjectSerializer.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGraphObjectSerializer.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderGraphObjectSerializer.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGraphObjectSerializer.h
index 8f8420c1..8f8420c1 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderGraphObjectSerializer.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGraphObjectSerializer.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderGraphObjectTypes.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGraphObjectTypes.h
index 620f6c5d..620f6c5d 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderGraphObjectTypes.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderGraphObjectTypes.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderImageScaler.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderImageScaler.cpp
index d699179f..d699179f 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderImageScaler.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderImageScaler.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderImageScaler.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderImageScaler.h
index 27b51770..27b51770 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderImageScaler.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderImageScaler.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderImageTextureData.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderImageTextureData.h
index aaa73d7e..aaa73d7e 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderImageTextureData.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderImageTextureData.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderInputStreamFactory.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderInputStreamFactory.cpp
index 1a418b1e..1a418b1e 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderInputStreamFactory.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderInputStreamFactory.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderInputStreamFactory.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderInputStreamFactory.h
index e82134b8..e82134b8 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderInputStreamFactory.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderInputStreamFactory.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderLightConstantProperties.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderLightConstantProperties.h
index 4dcd62c5..4dcd62c5 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderLightConstantProperties.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderLightConstantProperties.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderMaterialHelpers.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderMaterialHelpers.h
index afb799e7..afb799e7 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderMaterialHelpers.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderMaterialHelpers.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderMaterialShaderGenerator.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderMaterialShaderGenerator.h
index e8b9880d..e8b9880d 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderMaterialShaderGenerator.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderMaterialShaderGenerator.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderMesh.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderMesh.h
index d6959ec8..d6959ec8 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderMesh.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderMesh.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderPathManager.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPathManager.cpp
index 5b2c51d4..5b2c51d4 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderPathManager.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPathManager.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderPathManager.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPathManager.h
index fc7e05f1..fc7e05f1 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderPathManager.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPathManager.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderPathMath.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPathMath.h
index e9eb2220..e9eb2220 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderPathMath.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPathMath.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderPathRenderContext.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPathRenderContext.h
index deeea281..deeea281 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderPathRenderContext.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPathRenderContext.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderPixelGraphicsRenderer.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPixelGraphicsRenderer.cpp
index 43f7c0b4..43f7c0b4 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderPixelGraphicsRenderer.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPixelGraphicsRenderer.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderPixelGraphicsRenderer.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPixelGraphicsRenderer.h
index b37cb26b..b37cb26b 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderPixelGraphicsRenderer.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPixelGraphicsRenderer.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderPixelGraphicsTypes.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPixelGraphicsTypes.cpp
index fe32437f..fe32437f 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderPixelGraphicsTypes.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPixelGraphicsTypes.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderPixelGraphicsTypes.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPixelGraphicsTypes.h
index 2c154c18..2c154c18 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderPixelGraphicsTypes.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPixelGraphicsTypes.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderPlugin.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPlugin.cpp
index e4e821f8..e4e821f8 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderPlugin.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPlugin.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderPlugin.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPlugin.h
index eb71f846..eb71f846 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderPlugin.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPlugin.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderPluginCInterface.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPluginCInterface.h
index ec7481a0..ec7481a0 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderPluginCInterface.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPluginCInterface.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderPluginGraphObject.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPluginGraphObject.h
index c0ea66b4..c0ea66b4 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderPluginGraphObject.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPluginGraphObject.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderPluginPropertyValue.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPluginPropertyValue.h
index a266e8d3..a266e8d3 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderPluginPropertyValue.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderPluginPropertyValue.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderProfiler.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderProfiler.h
index a5941c03..a5941c03 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderProfiler.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderProfiler.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderRay.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRay.cpp
index 5376b8b9..5376b8b9 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderRay.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRay.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderRay.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRay.h
index 705f7089..705f7089 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderRay.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRay.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderRenderList.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRenderList.cpp
index 05a7b2c4..05a7b2c4 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderRenderList.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRenderList.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderRenderList.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRenderList.h
index 957c3d78..957c3d78 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderRenderList.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRenderList.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderRotationHelper.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRotationHelper.h
index 19ba8eb7..19ba8eb7 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderRotationHelper.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderRotationHelper.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderShaderCache.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCache.cpp
index 1d947459..77d4ee64 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderShaderCache.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCache.cpp
@@ -282,6 +282,10 @@ struct ShaderCache : public IShaderCache
if (m_RenderContext.IsAdvancedBlendHwSupportedKHR())
m_InsertStr += "layout(blend_support_all_equations) out;\n";
+
+ m_InsertStr += "#ifndef NO_FRAG_OUTPUT\n";
+ m_InsertStr += "out vec4 fragOutput;\n";
+ m_InsertStr += "#endif\n";
}
}
@@ -367,6 +371,17 @@ struct ShaderCache : public IShaderCache
m_InsertStr.append(versionStr.toLatin1().data());
+ if (inFeatures.size()) {
+ for (QT3DSU32 idx = 0, end = inFeatures.size(); idx < end; ++idx) {
+ SShaderPreprocessorFeature feature(inFeatures[idx]);
+ m_InsertStr.append("#define ");
+ m_InsertStr.append(inFeatures[idx].m_Name.c_str());
+ m_InsertStr.append(" ");
+ m_InsertStr.append(feature.m_Enabled ? "1" : "0");
+ m_InsertStr.append("\n");
+ }
+ }
+
if (isGlES) {
if (!IQt3DSRenderer::IsGlEs3Context(m_RenderContext.GetRenderContextType())) {
if (shaderType == ShaderType::Fragment) {
@@ -435,31 +450,7 @@ struct ShaderCache : public IShaderCache
m_InsertStr += "#define TESSELLATION_EVALUATION_SHADER 1\n";
}
- int fragOutputIndex = int(m_InsertStr.size());
str.insert(0, m_InsertStr);
- if (inFeatures.size()) {
- eastl::string::size_type insertPos = int(m_InsertStr.size());
- m_InsertStr.clear();
- for (QT3DSU32 idx = 0, end = inFeatures.size(); idx < end; ++idx) {
- SShaderPreprocessorFeature feature(inFeatures[idx]);
- m_InsertStr.append("#define ");
- m_InsertStr.append(inFeatures[idx].m_Name.c_str());
- m_InsertStr.append(" ");
- m_InsertStr.append(feature.m_Enabled ? "1" : "0");
- m_InsertStr.append("\n");
- }
- str.insert(insertPos, m_InsertStr);
- fragOutputIndex = insertPos + int(m_InsertStr.size());
- }
-
- // Add fragOutput for desktop OpenGL and OpenGL ES 3.x after feature defines
- if (!isGlES || IQt3DSRenderer::IsGlEs3Context(m_RenderContext.GetRenderContextType())) {
- m_InsertStr.clear();
- m_InsertStr += "#ifndef NO_FRAG_OUTPUT\n";
- m_InsertStr += "out vec4 fragOutput;\n";
- m_InsertStr += "#endif\n";
- str.insert(fragOutputIndex, m_InsertStr);
- }
}
// Compile this program overwriting any existing ones.
NVRenderShaderProgram *
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderShaderCache.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCache.h
index 47e76f36..47e76f36 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderShaderCache.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCache.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderShaderCodeGenerator.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCodeGenerator.cpp
index d84c37de..d84c37de 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderShaderCodeGenerator.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCodeGenerator.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderShaderCodeGenerator.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCodeGenerator.h
index d68a3699..d68a3699 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderShaderCodeGenerator.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCodeGenerator.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderShaderCodeGeneratorV2.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCodeGeneratorV2.cpp
index cfdf47ae..cfdf47ae 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderShaderCodeGeneratorV2.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCodeGeneratorV2.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderShaderCodeGeneratorV2.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCodeGeneratorV2.h
index 6a6e967e..6a6e967e 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderShaderCodeGeneratorV2.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderCodeGeneratorV2.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderShaderKeys.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderKeys.h
index 5d02e414..5d02e414 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderShaderKeys.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShaderKeys.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderShadowMap.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShadowMap.cpp
index 983af55c..983af55c 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderShadowMap.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShadowMap.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderShadowMap.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShadowMap.h
index c5ba2eaa..c5ba2eaa 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderShadowMap.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderShadowMap.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderSubPresentationHelper.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderSubPresentationHelper.h
index d77c7a7f..d77c7a7f 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderSubPresentationHelper.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderSubPresentationHelper.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderSubpresentation.cpp
index 0b9d42d3..0b9d42d3 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderSubpresentation.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderSubpresentation.h
index 4adac84f..4adac84f 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderSubpresentation.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderSubpresentation.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderTaggedPointer.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTaggedPointer.h
index 8dd8bdd0..8dd8bdd0 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderTaggedPointer.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTaggedPointer.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderTessModeValues.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTessModeValues.h
index 15ea03c9..15ea03c9 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderTessModeValues.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTessModeValues.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderTextTextureAtlas.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTextureAtlas.cpp
index 81c1d232..81c1d232 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderTextTextureAtlas.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTextureAtlas.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderTextTextureAtlas.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTextureAtlas.h
index 7a3f1215..7a3f1215 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderTextTextureAtlas.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTextureAtlas.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderTextTextureCache.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTextureCache.cpp
index 8edbecaf..8edbecaf 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderTextTextureCache.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTextureCache.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderTextTextureCache.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTextureCache.h
index 45d40217..45d40217 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderTextTextureCache.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTextureCache.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderTextTypes.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTypes.h
index bbaaa38d..bbaaa38d 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderTextTypes.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextTypes.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderTextureAtlas.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextureAtlas.cpp
index 062e7d57..062e7d57 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderTextureAtlas.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextureAtlas.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderTextureAtlas.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextureAtlas.h
index 46f7bdb5..46f7bdb5 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderTextureAtlas.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderTextureAtlas.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderThreadPool.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderThreadPool.cpp
index c9c73230..c9c73230 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderThreadPool.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderThreadPool.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderThreadPool.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderThreadPool.h
index 990106a7..990106a7 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderThreadPool.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderThreadPool.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderUIPLoader.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderUIPLoader.cpp
index 9aad3973..9aad3973 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderUIPLoader.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderUIPLoader.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderUIPLoader.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderUIPLoader.h
index 2b70c687..2b70c687 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderUIPLoader.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderUIPLoader.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp
index a0594933..a0594933 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderUIPSharedTranslation.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderUIPSharedTranslation.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h
index 16ce139d..16ce139d 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderUIPSharedTranslation.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderWidgets.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderWidgets.cpp
index 311b2189..311b2189 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderWidgets.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderWidgets.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderWidgets.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderWidgets.h
index 28cb3322..28cb3322 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderWidgets.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderWidgets.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderableImage.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderableImage.h
index 5d4aa1c4..5d4aa1c4 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderableImage.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderableImage.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRenderer.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderer.h
index db3eee83..db3eee83 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRenderer.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderer.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRendererUtil.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRendererUtil.cpp
index 7bc108e0..7bc108e0 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRendererUtil.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRendererUtil.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSRendererUtil.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRendererUtil.h
index 96f36426..96f36426 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSRendererUtil.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRendererUtil.h
diff --git a/src/Runtime/Source/runtimerender/Qt3DSTextRenderer.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSTextRenderer.cpp
index 91a5eb78..91a5eb78 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSTextRenderer.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSTextRenderer.cpp
diff --git a/src/Runtime/Source/runtimerender/Qt3DSTextRenderer.h b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSTextRenderer.h
index 11c9ec6e..11c9ec6e 100644
--- a/src/Runtime/Source/runtimerender/Qt3DSTextRenderer.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSTextRenderer.h
diff --git a/src/Runtime/Source/runtimerender/android/DynamicLibLoader.h b/src/Runtime/ogl-runtime/src/runtimerender/android/DynamicLibLoader.h
index c968419a..c968419a 100644
--- a/src/Runtime/Source/runtimerender/android/DynamicLibLoader.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/android/DynamicLibLoader.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderCamera.cpp b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderCamera.cpp
index b9f9c200..b9f9c200 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderCamera.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderCamera.cpp
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderCamera.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderCamera.h
index be8d53e8..be8d53e8 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderCamera.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderCamera.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderCustomMaterial.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderCustomMaterial.h
index 593c7573..593c7573 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderCustomMaterial.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderCustomMaterial.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp
index e18a84d2..e18a84d2 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.cpp
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h
index 48c8d0ba..48c8d0ba 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderDefaultMaterial.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDynamicObject.cpp b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.cpp
index 2e1e6a07..2e1e6a07 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDynamicObject.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.cpp
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDynamicObject.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.h
index 92ab3b2a..92ab3b2a 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderDynamicObject.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderDynamicObject.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderEffect.cpp b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderEffect.cpp
index f074b6b1..f074b6b1 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderEffect.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderEffect.cpp
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderEffect.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderEffect.h
index c11c214c..c11c214c 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderEffect.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderEffect.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderGraphObject.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderGraphObject.h
index 58c48ed1..58c48ed1 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderGraphObject.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderGraphObject.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderImage.cpp b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderImage.cpp
index 1cbd6015..1cbd6015 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderImage.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderImage.cpp
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderImage.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderImage.h
index 9b71d3f1..9b71d3f1 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderImage.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderImage.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.cpp b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLayer.cpp
index 36a826cb..36a826cb 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLayer.cpp
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLayer.h
index 5c08e917..5c08e917 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLayer.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLayer.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.cpp b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLight.cpp
index 5c983243..5c983243 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLight.cpp
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLight.h
index 10f2b866..10f2b866 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLight.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLight.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLightmaps.cpp b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLightmaps.cpp
index 0e5e6c60..0e5e6c60 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLightmaps.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLightmaps.cpp
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLightmaps.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLightmaps.h
index 4480aea4..4480aea4 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderLightmaps.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderLightmaps.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderMaterialDirty.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderMaterialDirty.h
index c04c1b6b..c04c1b6b 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderMaterialDirty.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderMaterialDirty.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderModel.cpp b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderModel.cpp
index a78396c5..a78396c5 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderModel.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderModel.cpp
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderModel.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderModel.h
index cc5c4e27..cc5c4e27 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderModel.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderModel.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderNode.cpp b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderNode.cpp
index bf47bb8d..bf47bb8d 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderNode.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderNode.cpp
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderNode.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderNode.h
index 87a1500c..87a1500c 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderNode.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderNode.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPath.cpp b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPath.cpp
index bc637680..bc637680 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPath.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPath.cpp
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPath.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPath.h
index 7db3ef50..7db3ef50 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPath.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPath.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPathSubPath.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPathSubPath.h
index ed1f9beb..ed1f9beb 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPathSubPath.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPathSubPath.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPresentation.cpp b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPresentation.cpp
index 6403959e..6403959e 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPresentation.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPresentation.cpp
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPresentation.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPresentation.h
index 2403e3b8..2403e3b8 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderPresentation.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderPresentation.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderReferencedMaterial.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderReferencedMaterial.h
index d2043f0d..d2043f0d 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderReferencedMaterial.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderReferencedMaterial.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.cpp b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderScene.cpp
index 7917bd7a..7917bd7a 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderScene.cpp
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderScene.h
index 8c4d3fec..8c4d3fec 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderScene.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderScene.h
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.cpp b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderText.cpp
index 40a20c48..40a20c48 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderText.cpp
diff --git a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.h b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderText.h
index 13f5748a..13f5748a 100644
--- a/src/Runtime/Source/runtimerender/graphobjects/Qt3DSRenderText.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/graphobjects/Qt3DSRenderText.h
diff --git a/src/Runtime/Source/runtimerender/linux/DynamicLibLoader.h b/src/Runtime/ogl-runtime/src/runtimerender/linux/DynamicLibLoader.h
index cc5d077c..cc5d077c 100644
--- a/src/Runtime/Source/runtimerender/linux/DynamicLibLoader.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/linux/DynamicLibLoader.h
diff --git a/src/Runtime/Source/runtimerender/macos/DynamicLibLoader.h b/src/Runtime/ogl-runtime/src/runtimerender/macos/DynamicLibLoader.h
index c968419a..c968419a 100644
--- a/src/Runtime/Source/runtimerender/macos/DynamicLibLoader.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/macos/DynamicLibLoader.h
diff --git a/src/Runtime/Source/runtimerender/q3dsqmlrender.cpp b/src/Runtime/ogl-runtime/src/runtimerender/q3dsqmlrender.cpp
index f1bdd4d9..f1bdd4d9 100644
--- a/src/Runtime/Source/runtimerender/q3dsqmlrender.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/q3dsqmlrender.cpp
diff --git a/src/Runtime/Source/runtimerender/q3dsqmlrender.h b/src/Runtime/ogl-runtime/src/runtimerender/q3dsqmlrender.h
index 99b395de..99b395de 100644
--- a/src/Runtime/Source/runtimerender/q3dsqmlrender.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/q3dsqmlrender.h
diff --git a/src/Runtime/Source/runtimerender/qnx/DynamicLibLoader.h b/src/Runtime/ogl-runtime/src/runtimerender/qnx/DynamicLibLoader.h
index c968419a..c968419a 100644
--- a/src/Runtime/Source/runtimerender/qnx/DynamicLibLoader.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/qnx/DynamicLibLoader.h
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp
index fff7e32f..fff7e32f 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.h b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRenderableObjects.h
index a369f7a1..a369f7a1 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRenderableObjects.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRenderableObjects.h
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
index 0b3f6655..0b3f6655 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.h b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImpl.h
index 906afd69..906afd69 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImpl.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImpl.h
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
index 362a6027..362a6027 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.h b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.h
index 4e237b0b..4e237b0b 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.h
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp
index 07ee5132..07ee5132 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.h b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.h
index 616ebe1a..616ebe1a 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.h
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
index 4f274574..4f274574 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h
index 5b8d6e10..5b8d6e10 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplShaders.cpp b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.cpp
index a3d3fab5..a3d3fab5 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplShaders.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.cpp
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplShaders.h b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.h
index 1ac85dbf..1ac85dbf 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSRendererImplShaders.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.h
diff --git a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSVertexPipelineImpl.h b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSVertexPipelineImpl.h
index a9b5e7b2..a9b5e7b2 100644
--- a/src/Runtime/Source/runtimerender/rendererimpl/Qt3DSVertexPipelineImpl.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/rendererimpl/Qt3DSVertexPipelineImpl.h
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferLoader.cpp b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderBufferLoader.cpp
index 963186ff..963186ff 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferLoader.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderBufferLoader.cpp
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferLoader.h b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderBufferLoader.h
index 8d75e259..8d75e259 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferLoader.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderBufferLoader.h
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp
index eb23f3d0..eb23f3d0 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferManager.h b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.h
index 070ab675..070ab675 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderBufferManager.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.h
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.cpp b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.cpp
index e2cfbed1..e2cfbed1 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.cpp
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.h b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.h
index bc1773ce..bc1773ce 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderImageBatchLoader.h
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.cpp b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.cpp
index 11762733..11762733 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.cpp
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.h b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.h
index f0194000..f0194000 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTexture.h
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureBMP.cpp b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureBMP.cpp
index 29e75a89..29e75a89 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureBMP.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureBMP.cpp
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.cpp b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.cpp
index 19d41d11..19d41d11 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.cpp
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.h b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.h
index 8490b474..8490b474 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureDDS.h
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureFreeImageCompat.h b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureFreeImageCompat.h
index 13f317bd..13f317bd 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureFreeImageCompat.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureFreeImageCompat.h
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureGIF.cpp b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureGIF.cpp
index ece4d3a3..ece4d3a3 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureGIF.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureGIF.cpp
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureHDR.cpp b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureHDR.cpp
index defff295..defff295 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureHDR.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureHDR.cpp
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.cpp b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.cpp
index b1d4b050..b1d4b050 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.cpp
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.h b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.h
index 3a2d7628..3a2d7628 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderLoadedTextureKTX.h
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.cpp b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.cpp
index 023964f5..023964f5 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.cpp
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.h b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.h
index e633eb14..e633eb14 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderPrefilterTexture.h
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.cpp b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.cpp
index 25fbb414..25fbb414 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.cpp
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.h b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.h
index fb54c4dc..fb54c4dc 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceBufferObjects.h
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceManager.cpp b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceManager.cpp
index 35936885..35936885 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceManager.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceManager.cpp
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceManager.h b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceManager.h
index 675d644c..675d644c 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceManager.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceManager.h
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.cpp b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.cpp
index e877cbc9..e877cbc9 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.cpp
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.cpp
diff --git a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.h b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.h
index eb54713a..eb54713a 100644
--- a/src/Runtime/Source/runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/resourcemanager/Qt3DSRenderResourceTexture2D.h
diff --git a/src/Runtime/Source/runtimerender/windows/DynamicLibLoader.h b/src/Runtime/ogl-runtime/src/runtimerender/windows/DynamicLibLoader.h
index 09b028bc..09b028bc 100644
--- a/src/Runtime/Source/runtimerender/windows/DynamicLibLoader.h
+++ b/src/Runtime/ogl-runtime/src/runtimerender/windows/DynamicLibLoader.h
diff --git a/src/Runtime/ogl-runtime/src/src.pro b/src/Runtime/ogl-runtime/src/src.pro
new file mode 100644
index 00000000..0cb56c88
--- /dev/null
+++ b/src/Runtime/ogl-runtime/src/src.pro
@@ -0,0 +1,10 @@
+TEMPLATE = subdirs
+CONFIG += ordered
+
+SUBDIRS += \
+ 3rdparty \
+ dm \
+ qmlstreamer \
+ ogl-runtime-static \
+ ogl-runtime-dylib \
+ api
diff --git a/src/Runtime/Source/state/Qt3DSState.h b/src/Runtime/ogl-runtime/src/state/Qt3DSState.h
index 7f10f941..7f10f941 100644
--- a/src/Runtime/Source/state/Qt3DSState.h
+++ b/src/Runtime/ogl-runtime/src/state/Qt3DSState.h
diff --git a/src/Runtime/Source/state/Qt3DSStateScriptContext.h b/src/Runtime/ogl-runtime/src/state/Qt3DSStateScriptContext.h
index 49b119ea..49b119ea 100644
--- a/src/Runtime/Source/state/Qt3DSStateScriptContext.h
+++ b/src/Runtime/ogl-runtime/src/state/Qt3DSStateScriptContext.h
diff --git a/src/Runtime/Source/state/Qt3DSStateTypes.h b/src/Runtime/ogl-runtime/src/state/Qt3DSStateTypes.h
index 26aee0e0..26aee0e0 100644
--- a/src/Runtime/Source/state/Qt3DSStateTypes.h
+++ b/src/Runtime/ogl-runtime/src/state/Qt3DSStateTypes.h
diff --git a/src/Runtime/Source/state/Qt3DSStateVisualBindingContextCommands.h b/src/Runtime/ogl-runtime/src/state/Qt3DSStateVisualBindingContextCommands.h
index 4d08f695..4d08f695 100644
--- a/src/Runtime/Source/state/Qt3DSStateVisualBindingContextCommands.h
+++ b/src/Runtime/ogl-runtime/src/state/Qt3DSStateVisualBindingContextCommands.h
diff --git a/src/Runtime/Source/system/Qt3DSArray.h b/src/Runtime/ogl-runtime/src/system/Qt3DSArray.h
index 805b8b0a..805b8b0a 100644
--- a/src/Runtime/Source/system/Qt3DSArray.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSArray.h
diff --git a/src/Runtime/Source/system/Qt3DSArray.inl b/src/Runtime/ogl-runtime/src/system/Qt3DSArray.inl
index a9667fd2..a9667fd2 100644
--- a/src/Runtime/Source/system/Qt3DSArray.inl
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSArray.inl
diff --git a/src/Runtime/Source/system/Qt3DSAssert.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSAssert.cpp
index 63d38768..63d38768 100644
--- a/src/Runtime/Source/system/Qt3DSAssert.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSAssert.cpp
diff --git a/src/Runtime/Source/system/Qt3DSAssert.h b/src/Runtime/ogl-runtime/src/system/Qt3DSAssert.h
index a64ca7f6..a64ca7f6 100644
--- a/src/Runtime/Source/system/Qt3DSAssert.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSAssert.h
diff --git a/src/Runtime/Source/system/Qt3DSAudioPlayer.h b/src/Runtime/ogl-runtime/src/system/Qt3DSAudioPlayer.h
index 3b6f3ef8..3b6f3ef8 100644
--- a/src/Runtime/Source/system/Qt3DSAudioPlayer.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSAudioPlayer.h
diff --git a/src/Runtime/Source/system/Qt3DSBasicPluginDLL.h b/src/Runtime/ogl-runtime/src/system/Qt3DSBasicPluginDLL.h
index 63a2d1f6..63a2d1f6 100644
--- a/src/Runtime/Source/system/Qt3DSBasicPluginDLL.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSBasicPluginDLL.h
diff --git a/src/Runtime/Source/system/Qt3DSBezierEval.h b/src/Runtime/ogl-runtime/src/system/Qt3DSBezierEval.h
index c4d733a3..c4d733a3 100644
--- a/src/Runtime/Source/system/Qt3DSBezierEval.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSBezierEval.h
diff --git a/src/Runtime/Source/system/Qt3DSBoundingBox.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSBoundingBox.cpp
index 2a9331d1..2a9331d1 100644
--- a/src/Runtime/Source/system/Qt3DSBoundingBox.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSBoundingBox.cpp
diff --git a/src/Runtime/Source/system/Qt3DSBoundingBox.h b/src/Runtime/ogl-runtime/src/system/Qt3DSBoundingBox.h
index 988a9ba8..988a9ba8 100644
--- a/src/Runtime/Source/system/Qt3DSBoundingBox.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSBoundingBox.h
diff --git a/src/Runtime/Source/system/Qt3DSCircularArray.h b/src/Runtime/ogl-runtime/src/system/Qt3DSCircularArray.h
index be921673..be921673 100644
--- a/src/Runtime/Source/system/Qt3DSCircularArray.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSCircularArray.h
diff --git a/src/Runtime/Source/system/Qt3DSCircularArray.inl b/src/Runtime/ogl-runtime/src/system/Qt3DSCircularArray.inl
index 0d7f081f..0d7f081f 100644
--- a/src/Runtime/Source/system/Qt3DSCircularArray.inl
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSCircularArray.inl
diff --git a/src/Runtime/Source/system/Qt3DSColor.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSColor.cpp
index a44d488b..a44d488b 100644
--- a/src/Runtime/Source/system/Qt3DSColor.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSColor.cpp
diff --git a/src/Runtime/Source/system/Qt3DSColor.h b/src/Runtime/ogl-runtime/src/system/Qt3DSColor.h
index b917f46b..b917f46b 100644
--- a/src/Runtime/Source/system/Qt3DSColor.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSColor.h
diff --git a/src/Runtime/Source/system/Qt3DSConfig.h b/src/Runtime/ogl-runtime/src/system/Qt3DSConfig.h
index 49c644da..49c644da 100644
--- a/src/Runtime/Source/system/Qt3DSConfig.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSConfig.h
diff --git a/src/Runtime/Source/system/Qt3DSCubicRoots.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSCubicRoots.cpp
index ebcc54b8..ebcc54b8 100644
--- a/src/Runtime/Source/system/Qt3DSCubicRoots.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSCubicRoots.cpp
diff --git a/src/Runtime/Source/system/Qt3DSCubicRoots.h b/src/Runtime/ogl-runtime/src/system/Qt3DSCubicRoots.h
index b5ac0530..b5ac0530 100644
--- a/src/Runtime/Source/system/Qt3DSCubicRoots.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSCubicRoots.h
diff --git a/src/Runtime/Source/system/Qt3DSCubicRootsImpl.h b/src/Runtime/ogl-runtime/src/system/Qt3DSCubicRootsImpl.h
index 8cca59f9..8cca59f9 100644
--- a/src/Runtime/Source/system/Qt3DSCubicRootsImpl.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSCubicRootsImpl.h
diff --git a/src/Runtime/Source/system/Qt3DSDLLManager.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSDLLManager.cpp
index c6f6d80d..c6f6d80d 100644
--- a/src/Runtime/Source/system/Qt3DSDLLManager.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSDLLManager.cpp
diff --git a/src/Runtime/Source/system/Qt3DSDLLManager.h b/src/Runtime/ogl-runtime/src/system/Qt3DSDLLManager.h
index d670af2e..d670af2e 100644
--- a/src/Runtime/Source/system/Qt3DSDLLManager.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSDLLManager.h
diff --git a/src/Runtime/Source/system/Qt3DSDataLogger.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSDataLogger.cpp
index 2f45f012..2f45f012 100644
--- a/src/Runtime/Source/system/Qt3DSDataLogger.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSDataLogger.cpp
diff --git a/src/Runtime/Source/system/Qt3DSDataLogger.h b/src/Runtime/ogl-runtime/src/system/Qt3DSDataLogger.h
index b834edab..b834edab 100644
--- a/src/Runtime/Source/system/Qt3DSDataLogger.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSDataLogger.h
diff --git a/src/Runtime/Source/system/Qt3DSDataLogger.hpp b/src/Runtime/ogl-runtime/src/system/Qt3DSDataLogger.hpp
index 0900c4a4..0900c4a4 100644
--- a/src/Runtime/Source/system/Qt3DSDataLogger.hpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSDataLogger.hpp
diff --git a/src/Runtime/Source/system/Qt3DSDataLoggerEnums.h b/src/Runtime/ogl-runtime/src/system/Qt3DSDataLoggerEnums.h
index 27320e19..27320e19 100644
--- a/src/Runtime/Source/system/Qt3DSDataLoggerEnums.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSDataLoggerEnums.h
diff --git a/src/Runtime/Source/system/Qt3DSDataLoggerViewer.h b/src/Runtime/ogl-runtime/src/system/Qt3DSDataLoggerViewer.h
index 0eaf9f6a..0eaf9f6a 100644
--- a/src/Runtime/Source/system/Qt3DSDataLoggerViewer.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSDataLoggerViewer.h
diff --git a/src/Runtime/Source/system/Qt3DSEGLTimer.h b/src/Runtime/ogl-runtime/src/system/Qt3DSEGLTimer.h
index 4c9f4ce2..4c9f4ce2 100644
--- a/src/Runtime/Source/system/Qt3DSEGLTimer.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSEGLTimer.h
diff --git a/src/Runtime/Source/system/Qt3DSEndian.h b/src/Runtime/ogl-runtime/src/system/Qt3DSEndian.h
index f8913a72..f8913a72 100644
--- a/src/Runtime/Source/system/Qt3DSEndian.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSEndian.h
diff --git a/src/Runtime/Source/system/Qt3DSEulerAngles.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSEulerAngles.cpp
index 7c4364fc..7c4364fc 100644
--- a/src/Runtime/Source/system/Qt3DSEulerAngles.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSEulerAngles.cpp
diff --git a/src/Runtime/Source/system/Qt3DSEulerAngles.h b/src/Runtime/ogl-runtime/src/system/Qt3DSEulerAngles.h
index d0f53c56..d0f53c56 100644
--- a/src/Runtime/Source/system/Qt3DSEulerAngles.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSEulerAngles.h
diff --git a/src/Runtime/Source/system/Qt3DSFNDTimer.h b/src/Runtime/ogl-runtime/src/system/Qt3DSFNDTimer.h
index 8241e2ed..8241e2ed 100644
--- a/src/Runtime/Source/system/Qt3DSFNDTimer.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSFNDTimer.h
diff --git a/src/Runtime/Source/system/Qt3DSFile.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSFile.cpp
index a26b7351..a26b7351 100644
--- a/src/Runtime/Source/system/Qt3DSFile.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSFile.cpp
diff --git a/src/Runtime/Source/system/Qt3DSFile.h b/src/Runtime/ogl-runtime/src/system/Qt3DSFile.h
index e970cd2d..e970cd2d 100644
--- a/src/Runtime/Source/system/Qt3DSFile.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSFile.h
diff --git a/src/Runtime/Source/system/Qt3DSFileStream.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSFileStream.cpp
index 202e4ae7..202e4ae7 100644
--- a/src/Runtime/Source/system/Qt3DSFileStream.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSFileStream.cpp
diff --git a/src/Runtime/Source/system/Qt3DSFileStream.h b/src/Runtime/ogl-runtime/src/system/Qt3DSFileStream.h
index 49e272f4..49e272f4 100644
--- a/src/Runtime/Source/system/Qt3DSFileStream.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSFileStream.h
diff --git a/src/Runtime/Source/system/Qt3DSFixedArray.h b/src/Runtime/ogl-runtime/src/system/Qt3DSFixedArray.h
index 9f971d81..9f971d81 100644
--- a/src/Runtime/Source/system/Qt3DSFixedArray.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSFixedArray.h
diff --git a/src/Runtime/Source/system/Qt3DSFixedArray.inl b/src/Runtime/ogl-runtime/src/system/Qt3DSFixedArray.inl
index 55242243..55242243 100644
--- a/src/Runtime/Source/system/Qt3DSFixedArray.inl
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSFixedArray.inl
diff --git a/src/Runtime/Source/system/Qt3DSFunctionWrappers.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSFunctionWrappers.cpp
index e96c3ce1..e96c3ce1 100644
--- a/src/Runtime/Source/system/Qt3DSFunctionWrappers.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSFunctionWrappers.cpp
diff --git a/src/Runtime/Source/system/Qt3DSFunctionWrappers.h b/src/Runtime/ogl-runtime/src/system/Qt3DSFunctionWrappers.h
index 8fff62de..8fff62de 100644
--- a/src/Runtime/Source/system/Qt3DSFunctionWrappers.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSFunctionWrappers.h
diff --git a/src/Runtime/Source/system/Qt3DSHash.h b/src/Runtime/ogl-runtime/src/system/Qt3DSHash.h
index 8baa2dba..8baa2dba 100644
--- a/src/Runtime/Source/system/Qt3DSHash.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSHash.h
diff --git a/src/Runtime/Source/system/Qt3DSIFileStream.h b/src/Runtime/ogl-runtime/src/system/Qt3DSIFileStream.h
index 0b432601..0b432601 100644
--- a/src/Runtime/Source/system/Qt3DSIFileStream.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSIFileStream.h
diff --git a/src/Runtime/Source/system/Qt3DSIStream.h b/src/Runtime/ogl-runtime/src/system/Qt3DSIStream.h
index a4c11955..a4c11955 100644
--- a/src/Runtime/Source/system/Qt3DSIStream.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSIStream.h
diff --git a/src/Runtime/Source/system/Qt3DSITimer.h b/src/Runtime/ogl-runtime/src/system/Qt3DSITimer.h
index e73fbb95..e73fbb95 100644
--- a/src/Runtime/Source/system/Qt3DSITimer.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSITimer.h
diff --git a/src/Runtime/Source/system/Qt3DSMacros.h b/src/Runtime/ogl-runtime/src/system/Qt3DSMacros.h
index fbc40b4d..fbc40b4d 100644
--- a/src/Runtime/Source/system/Qt3DSMacros.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMacros.h
diff --git a/src/Runtime/Source/system/Qt3DSMatrix.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSMatrix.cpp
index b5310d0e..b5310d0e 100644
--- a/src/Runtime/Source/system/Qt3DSMatrix.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMatrix.cpp
diff --git a/src/Runtime/Source/system/Qt3DSMatrix.h b/src/Runtime/ogl-runtime/src/system/Qt3DSMatrix.h
index 4ef74420..4ef74420 100644
--- a/src/Runtime/Source/system/Qt3DSMatrix.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMatrix.h
diff --git a/src/Runtime/Source/system/Qt3DSMemory.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSMemory.cpp
index 17fa5c86..17fa5c86 100644
--- a/src/Runtime/Source/system/Qt3DSMemory.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemory.cpp
diff --git a/src/Runtime/Source/system/Qt3DSMemory.h b/src/Runtime/ogl-runtime/src/system/Qt3DSMemory.h
index cc04bf73..cc04bf73 100644
--- a/src/Runtime/Source/system/Qt3DSMemory.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemory.h
diff --git a/src/Runtime/Source/system/Qt3DSMemoryFilter.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryFilter.cpp
index f6d6591c..f6d6591c 100644
--- a/src/Runtime/Source/system/Qt3DSMemoryFilter.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryFilter.cpp
diff --git a/src/Runtime/Source/system/Qt3DSMemoryFilter.h b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryFilter.h
index df9367da..df9367da 100644
--- a/src/Runtime/Source/system/Qt3DSMemoryFilter.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryFilter.h
diff --git a/src/Runtime/Source/system/Qt3DSMemoryHeap.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryHeap.cpp
index 4ab36178..4ab36178 100644
--- a/src/Runtime/Source/system/Qt3DSMemoryHeap.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryHeap.cpp
diff --git a/src/Runtime/Source/system/Qt3DSMemoryHeap.h b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryHeap.h
index ba7c1306..ba7c1306 100644
--- a/src/Runtime/Source/system/Qt3DSMemoryHeap.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryHeap.h
diff --git a/src/Runtime/Source/system/Qt3DSMemoryManager.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryManager.cpp
index a1ace59e..a1ace59e 100644
--- a/src/Runtime/Source/system/Qt3DSMemoryManager.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryManager.cpp
diff --git a/src/Runtime/Source/system/Qt3DSMemoryManager.h b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryManager.h
index fa54fce7..fa54fce7 100644
--- a/src/Runtime/Source/system/Qt3DSMemoryManager.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryManager.h
diff --git a/src/Runtime/Source/system/Qt3DSMemoryPool.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryPool.cpp
index 44545d45..44545d45 100644
--- a/src/Runtime/Source/system/Qt3DSMemoryPool.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryPool.cpp
diff --git a/src/Runtime/Source/system/Qt3DSMemoryPool.h b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryPool.h
index 01b2e418..01b2e418 100644
--- a/src/Runtime/Source/system/Qt3DSMemoryPool.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryPool.h
diff --git a/src/Runtime/Source/system/Qt3DSMemoryProbe.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryProbe.cpp
index 4e977ee1..4e977ee1 100644
--- a/src/Runtime/Source/system/Qt3DSMemoryProbe.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryProbe.cpp
diff --git a/src/Runtime/Source/system/Qt3DSMemoryProbe.h b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryProbe.h
index 5f0844e8..5f0844e8 100644
--- a/src/Runtime/Source/system/Qt3DSMemoryProbe.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryProbe.h
diff --git a/src/Runtime/Source/system/Qt3DSMemorySettings.h b/src/Runtime/ogl-runtime/src/system/Qt3DSMemorySettings.h
index 54002424..54002424 100644
--- a/src/Runtime/Source/system/Qt3DSMemorySettings.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemorySettings.h
diff --git a/src/Runtime/Source/system/Qt3DSMemoryStatistics.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryStatistics.cpp
index 2f5eba0e..2f5eba0e 100644
--- a/src/Runtime/Source/system/Qt3DSMemoryStatistics.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryStatistics.cpp
diff --git a/src/Runtime/Source/system/Qt3DSMemoryStatistics.h b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryStatistics.h
index 81e30434..81e30434 100644
--- a/src/Runtime/Source/system/Qt3DSMemoryStatistics.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryStatistics.h
diff --git a/src/Runtime/Source/system/Qt3DSMemoryTracker.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryTracker.cpp
index 8aef9519..8aef9519 100644
--- a/src/Runtime/Source/system/Qt3DSMemoryTracker.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryTracker.cpp
diff --git a/src/Runtime/Source/system/Qt3DSMemoryTracker.h b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryTracker.h
index ee6ce699..ee6ce699 100644
--- a/src/Runtime/Source/system/Qt3DSMemoryTracker.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSMemoryTracker.h
diff --git a/src/Runtime/Source/system/Qt3DSPlatformSpecific.h b/src/Runtime/ogl-runtime/src/system/Qt3DSPlatformSpecific.h
index 3fc34016..3fc34016 100644
--- a/src/Runtime/Source/system/Qt3DSPlatformSpecific.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSPlatformSpecific.h
diff --git a/src/Runtime/Source/system/Qt3DSTimer.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSTimer.cpp
index d9e82eb9..d9e82eb9 100644
--- a/src/Runtime/Source/system/Qt3DSTimer.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSTimer.cpp
diff --git a/src/Runtime/Source/system/Qt3DSTimer.h b/src/Runtime/ogl-runtime/src/system/Qt3DSTimer.h
index 278bd4b4..278bd4b4 100644
--- a/src/Runtime/Source/system/Qt3DSTimer.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSTimer.h
diff --git a/src/Runtime/Source/system/Qt3DSTypes.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSTypes.cpp
index 25d41c8b..25d41c8b 100644
--- a/src/Runtime/Source/system/Qt3DSTypes.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSTypes.cpp
diff --git a/src/Runtime/Source/system/Qt3DSTypes.h b/src/Runtime/ogl-runtime/src/system/Qt3DSTypes.h
index 6330919c..65d57da8 100644
--- a/src/Runtime/Source/system/Qt3DSTypes.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSTypes.h
@@ -30,6 +30,8 @@
#pragma once
+#include <QtCore/qglobal.h>
+
//==============================================================================
// Namespace
//==============================================================================
@@ -39,14 +41,16 @@ namespace Q3DStudio {
// Typedefs
//==============================================================================
typedef bool BOOL; ///< true or false, usually 8 bits
-typedef signed char INT8; ///< A signed 8-bit integer, not a character
-typedef unsigned char UINT8; ///< An unsigned 8-bit integer 0-255, not a character
-typedef signed short INT16; ///< A signed 16-bit integer
-typedef unsigned short UINT16; ///< An unsigned 16-bit integer
-typedef int INT32; ///< A signed 32-bit integer
-typedef unsigned int UINT32; ///< An unsigned 32-bit integer
+typedef qint8 INT8; ///< A signed 8-bit integer, not a character
+typedef quint8 UINT8; ///< An unsigned 8-bit integer 0-255, not a character
+typedef qint16 INT16; ///< A signed 16-bit integer
+typedef quint16 UINT16; ///< An unsigned 16-bit integer
+typedef qint32 INT32; ///< A signed 32-bit integer
+typedef quint32 UINT32; ///< An unsigned 32-bit integer
typedef float FLOAT; ///< A 32-bit floating point number
typedef char CHAR; ///< String character, not a number
+typedef qint64 INT64;
+typedef quint64 UINT64;
#ifndef TRUE
#define TRUE 1
@@ -67,123 +71,11 @@ INT32 Q3DStudio_maxbits(const INT32 inBitCount, const BOOL inUnsigned);
#define AKMAX_INT32 0x7FFFFFFFL
#define AKMAX_UINT32 0xFFFFFFFFUL
-//==============================================================================
-// Platform specific vectors and matrices
-//==============================================================================
-#if defined(_PCPLATFORM)
-
-typedef FILE TFile;
-typedef size_t TFileSize;
-
#define Q3DStudio_INT64_C(x) x
#define Q3DStudio_UINT64_C(x) x
-typedef __int64 INT64;
-typedef unsigned __int64 UINT64;
-
-struct VECTOR4
-{
- union {
- FLOAT v[4];
- UINT32 u[4];
- };
-
- FLOAT &x() { return v[0]; }
- FLOAT &y() { return v[1]; }
- FLOAT &z() { return v[2]; }
- FLOAT &w() { return v[3]; }
-};
-
-struct MATRIX16
-{
- union {
- VECTOR4 v[4];
- FLOAT m[4][4];
- FLOAT f[16];
- };
-
- FLOAT &_11() { return f[0]; }
- FLOAT &_12() { return f[1]; }
- FLOAT &_13() { return f[2]; }
- FLOAT &_14() { return f[3]; }
- FLOAT &_21() { return f[4]; }
- FLOAT &_22() { return f[5]; }
- FLOAT &_23() { return f[6]; }
- FLOAT &_24() { return f[7]; }
- FLOAT &_31() { return f[8]; }
- FLOAT &_32() { return f[9]; }
- FLOAT &_33() { return f[10]; }
- FLOAT &_34() { return f[11]; }
- FLOAT &_41() { return f[12]; }
- FLOAT &_42() { return f[13]; }
- FLOAT &_43() { return f[14]; }
- FLOAT &_44() { return f[15]; }
-};
-
-#elif defined(_TEGRAPLATFORM)
-
-// TODO: sk - We used both WinCE and OpenKode file system utilities. Using non-OpenKode restores
-// functionality in a hacky way
-// but ultimately sticking to just 1 system would definitely be cleaner.
typedef FILE TFile;
typedef size_t TFileSize;
-// typedef KDFile TFile;
-// typedef KDsize TFileSize;
-
-#define Q3DStudio_INT64_C(x) x
-#define Q3DStudio_UINT64_C(x) x
-
-typedef __int64 INT64;
-typedef unsigned __int64 UINT64;
-
-struct VECTOR4
-{
- union {
- FLOAT v[4];
- UINT32 u[4];
- };
- FLOAT &x() { return v[0]; }
- FLOAT &y() { return v[1]; }
- FLOAT &z() { return v[2]; }
- FLOAT &w() { return v[3]; }
-};
-
-struct MATRIX16
-{
- union {
- VECTOR4 v[4];
- FLOAT m[4][4];
- FLOAT f[16];
- };
-
- FLOAT &_11() { return f[0]; }
- FLOAT &_12() { return f[1]; }
- FLOAT &_13() { return f[2]; }
- FLOAT &_14() { return f[3]; }
- FLOAT &_21() { return f[4]; }
- FLOAT &_22() { return f[5]; }
- FLOAT &_23() { return f[6]; }
- FLOAT &_24() { return f[7]; }
- FLOAT &_31() { return f[8]; }
- FLOAT &_32() { return f[9]; }
- FLOAT &_33() { return f[10]; }
- FLOAT &_34() { return f[11]; }
- FLOAT &_41() { return f[12]; }
- FLOAT &_42() { return f[13]; }
- FLOAT &_43() { return f[14]; }
- FLOAT &_44() { return f[15]; }
-};
-
-#elif defined(_LINUXPLATFORM) || defined(_INTEGRITYPLATFORM)
-
-typedef FILE TFile;
-typedef size_t TFileSize;
-
-#define Q3DStudio_INT64_C(x) x
-#define Q3DStudio_UINT64_C(x) x
-
-typedef int64_t INT64;
-typedef uint64_t UINT64;
struct VECTOR4
{
@@ -224,13 +116,6 @@ struct MATRIX16
FLOAT &_44() { return f[15]; }
};
-#else
-
-#error "A platform must be defined"
-
-#endif
-
typedef INT64 TMicroSeconds; ///< Time in microseconds
typedef INT64 TTimeUnit; ///< Time in milliseconds
-
} // namespace Q3DStudio
diff --git a/src/Runtime/Source/system/Qt3DSVector3.cpp b/src/Runtime/ogl-runtime/src/system/Qt3DSVector3.cpp
index 2d790f95..2d790f95 100644
--- a/src/Runtime/Source/system/Qt3DSVector3.cpp
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSVector3.cpp
diff --git a/src/Runtime/Source/system/Qt3DSVector3.h b/src/Runtime/ogl-runtime/src/system/Qt3DSVector3.h
index 08df028b..08df028b 100644
--- a/src/Runtime/Source/system/Qt3DSVector3.h
+++ b/src/Runtime/ogl-runtime/src/system/Qt3DSVector3.h
diff --git a/src/Runtime/Source/system/SystemPrefix.h b/src/Runtime/ogl-runtime/src/system/SystemPrefix.h
index aa1ba185..aa1ba185 100644
--- a/src/Runtime/Source/system/SystemPrefix.h
+++ b/src/Runtime/ogl-runtime/src/system/SystemPrefix.h
diff --git a/src/Runtime/Source/uipparser/Qt3DSIPresentation.h b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSIPresentation.h
index a9d36446..a9d36446 100644
--- a/src/Runtime/Source/uipparser/Qt3DSIPresentation.h
+++ b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSIPresentation.h
diff --git a/src/Runtime/Source/uipparser/Qt3DSUIPParser.h b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParser.h
index c3b4611b..c3b4611b 100644
--- a/src/Runtime/Source/uipparser/Qt3DSUIPParser.h
+++ b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParser.h
diff --git a/src/Runtime/Source/uipparser/Qt3DSUIPParserActionHelper.cpp b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserActionHelper.cpp
index ab6d751d..ab6d751d 100644
--- a/src/Runtime/Source/uipparser/Qt3DSUIPParserActionHelper.cpp
+++ b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserActionHelper.cpp
diff --git a/src/Runtime/Source/uipparser/Qt3DSUIPParserActionHelper.h b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserActionHelper.h
index 3d9d44ce..3d9d44ce 100644
--- a/src/Runtime/Source/uipparser/Qt3DSUIPParserActionHelper.h
+++ b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserActionHelper.h
diff --git a/src/Runtime/Source/uipparser/Qt3DSUIPParserImpl.cpp b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserImpl.cpp
index 9f7641b0..9f7641b0 100644
--- a/src/Runtime/Source/uipparser/Qt3DSUIPParserImpl.cpp
+++ b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserImpl.cpp
diff --git a/src/Runtime/Source/uipparser/Qt3DSUIPParserImpl.h b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserImpl.h
index 585dd857..585dd857 100644
--- a/src/Runtime/Source/uipparser/Qt3DSUIPParserImpl.h
+++ b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserImpl.h
diff --git a/src/Runtime/Source/uipparser/Qt3DSUIPParserObjectRefHelper.cpp b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserObjectRefHelper.cpp
index 19af2a9d..19af2a9d 100644
--- a/src/Runtime/Source/uipparser/Qt3DSUIPParserObjectRefHelper.cpp
+++ b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserObjectRefHelper.cpp
diff --git a/src/Runtime/Source/uipparser/Qt3DSUIPParserObjectRefHelper.h b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserObjectRefHelper.h
index fcd16985..fcd16985 100644
--- a/src/Runtime/Source/uipparser/Qt3DSUIPParserObjectRefHelper.h
+++ b/src/Runtime/ogl-runtime/src/uipparser/Qt3DSUIPParserObjectRefHelper.h
diff --git a/src/Runtime/Source/viewer/Qt3DSAudioPlayerImpl.cpp b/src/Runtime/ogl-runtime/src/viewer/Qt3DSAudioPlayerImpl.cpp
index b9fb9763..b9fb9763 100644
--- a/src/Runtime/Source/viewer/Qt3DSAudioPlayerImpl.cpp
+++ b/src/Runtime/ogl-runtime/src/viewer/Qt3DSAudioPlayerImpl.cpp
diff --git a/src/Runtime/Source/viewer/Qt3DSAudioPlayerImpl.h b/src/Runtime/ogl-runtime/src/viewer/Qt3DSAudioPlayerImpl.h
index bba5bd6a..bba5bd6a 100644
--- a/src/Runtime/Source/viewer/Qt3DSAudioPlayerImpl.h
+++ b/src/Runtime/ogl-runtime/src/viewer/Qt3DSAudioPlayerImpl.h
diff --git a/src/Runtime/Source/viewer/Qt3DSViewerApp.cpp b/src/Runtime/ogl-runtime/src/viewer/Qt3DSViewerApp.cpp
index 094f140f..094f140f 100644
--- a/src/Runtime/Source/viewer/Qt3DSViewerApp.cpp
+++ b/src/Runtime/ogl-runtime/src/viewer/Qt3DSViewerApp.cpp
diff --git a/src/Runtime/Source/viewer/Qt3DSViewerApp.h b/src/Runtime/ogl-runtime/src/viewer/Qt3DSViewerApp.h
index 975e3b12..975e3b12 100644
--- a/src/Runtime/Source/viewer/Qt3DSViewerApp.h
+++ b/src/Runtime/ogl-runtime/src/viewer/Qt3DSViewerApp.h
diff --git a/src/Runtime/Source/viewer/Qt3DSViewerTimer.h b/src/Runtime/ogl-runtime/src/viewer/Qt3DSViewerTimer.h
index de679ce9..de679ce9 100644
--- a/src/Runtime/Source/viewer/Qt3DSViewerTimer.h
+++ b/src/Runtime/ogl-runtime/src/viewer/Qt3DSViewerTimer.h
diff --git a/src/Runtime/Source/viewer/qt3dsruntimeglobal.h b/src/Runtime/ogl-runtime/src/viewer/qt3dsruntimeglobal.h
index 6732c85d..6732c85d 100644
--- a/src/Runtime/Source/viewer/qt3dsruntimeglobal.h
+++ b/src/Runtime/ogl-runtime/src/viewer/qt3dsruntimeglobal.h
diff --git a/src/Runtime/testres.qrc b/src/Runtime/ogl-runtime/testres.qrc
index 7b3c20bc..7b3c20bc 100644
--- a/src/Runtime/testres.qrc
+++ b/src/Runtime/ogl-runtime/testres.qrc
diff --git a/src/Runtime/AttributeHashes/AttributeHashes.cpp b/src/Runtime/ogl-runtime/tools/attributehashes/AttributeHashes.cpp
index 47d33ac7..b72b0b02 100644
--- a/src/Runtime/AttributeHashes/AttributeHashes.cpp
+++ b/src/Runtime/ogl-runtime/tools/attributehashes/AttributeHashes.cpp
@@ -212,7 +212,7 @@ int main(int argc, char *argv[])
std::ifstream theText(g_Text);
if (!theText) {
fprintf(stderr, "Failed: Could not input text file, set working directory to "
- "src\\Runtime\\Source\\runtime and try again.\n");
+ "src\\Runtime\\ogl-runtime\\src\\runtime and try again.\n");
return -1;
}
diff --git a/src/Runtime/AttributeHashes/AttributeHashes.pro b/src/Runtime/ogl-runtime/tools/attributehashes/attributehashes.pro
index 3be119d7..986084e0 100644
--- a/src/Runtime/AttributeHashes/AttributeHashes.pro
+++ b/src/Runtime/ogl-runtime/tools/attributehashes/attributehashes.pro
@@ -7,7 +7,7 @@ LIBS += \
-lws2_32
}
-include(../commoninclude.pri)
+include(../../commoninclude.pri)
SOURCES += AttributeHashes.cpp
diff --git a/src/Runtime/ogl-runtime/tools/tools.pro b/src/Runtime/ogl-runtime/tools/tools.pro
new file mode 100644
index 00000000..7c62eaea
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/tools.pro
@@ -0,0 +1,10 @@
+TEMPLATE = subdirs
+CONFIG += ordered
+
+!boot2qt:!integrity:!qnx {
+ SUBDIRS += viewer
+}
+
+win32 {
+ SUBDIRS += attributehashes
+}
diff --git a/src/Runtime/ogl-runtime/tools/viewer/Viewer.qrc b/src/Runtime/ogl-runtime/tools/viewer/Viewer.qrc
new file mode 100644
index 00000000..c808dca5
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/Viewer.qrc
@@ -0,0 +1,14 @@
+<RCC>
+ <qresource prefix="/">
+ <file alias="images/arrow.png">resources/images/arrow.png</file>
+ <file alias="images/arrow@2x.png">resources/images/arrow@2x.png</file>
+ <file alias="images/check.png">resources/images/check.png</file>
+ <file alias="images/check@2x.png">resources/images/check@2x.png</file>
+ <file>qml/main.qml</file>
+ <file>qml/StyledMenu.qml</file>
+ <file>qml/StyledMenuButton.qml</file>
+ <file>qml/StyledMenuItem.qml</file>
+ <file>qml/StyledMenuSeparator.qml</file>
+ <file>qml/StyledButton.qml</file>
+ </qresource>
+</RCC>
diff --git a/src/Runtime/ogl-runtime/tools/viewer/android/AndroidManifest.xml b/src/Runtime/ogl-runtime/tools/viewer/android/AndroidManifest.xml
new file mode 100644
index 00000000..3697a9a7
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/android/AndroidManifest.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0"?>
+<manifest package="org.qtproject.qt3dviewer" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.1" android:versionCode="1" android:installLocation="auto">
+ <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="-- %%INSERT_APP_NAME%% --" android:icon="@drawable/icon">
+ <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="-- %%INSERT_APP_NAME%% --" android:screenOrientation="unspecified" android:launchMode="singleTop">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.LAUNCHER"/>
+ </intent-filter>
+
+ <!-- Application arguments -->
+ <!-- meta-data android:name="android.app.arguments" android:value="arg1 arg2 arg3"/ -->
+ <!-- Application arguments -->
+
+ <meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --"/>
+ <meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
+ <meta-data android:name="android.app.repository" android:value="default"/>
+ <meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
+ <meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
+ <!-- Deploy Qt libs as part of package -->
+ <meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>
+ <meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
+ <meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
+ <!-- Run with local libs -->
+ <meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/>
+ <meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
+ <meta-data android:name="android.app.load_local_libs" android:value="-- %%INSERT_LOCAL_LIBS%% --"/>
+ <meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/>
+ <meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/>
+ <!-- Messages maps -->
+ <meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
+ <meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
+ <meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
+ <!-- Messages maps -->
+
+ <!-- Splash screen -->
+ <!-- meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/logo"/ -->
+ <!-- meta-data android:name="android.app.splash_screen_sticky" android:value="true"/ -->
+ <!-- Splash screen -->
+
+ <!-- Background running -->
+ <!-- Warning: changing this value to true may cause unexpected crashes if the
+ application still try to draw after
+ "applicationStateChanged(Qt::ApplicationSuspended)"
+ signal is sent! -->
+ <meta-data android:name="android.app.background_running" android:value="false"/>
+ <!-- Background running -->
+
+ <!-- auto screen scale factor -->
+ <meta-data android:name="android.app.auto_screen_scale_factor" android:value="false"/>
+ <!-- auto screen scale factor -->
+
+ <!-- extract android style -->
+ <!-- available android:values :
+ * full - useful QWidget & Quick Controls 1 apps
+ * minimal - useful for Quick Controls 2 apps, it is much faster than "full"
+ * none - useful for apps that don't use any of the above Qt modules
+ -->
+ <meta-data android:name="android.app.extract_android_style" android:value="full"/>
+ <!-- extract android style -->
+ </activity>
+
+ <!-- For adding service(s) please check: https://wiki.qt.io/AndroidServices -->
+
+ </application>
+
+ <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="16"/>
+ <supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
+
+ <!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.
+ Remove the comment if you do not require these default permissions. -->
+ <!-- %%INSERT_PERMISSIONS -->
+
+ <!-- The following comment will be replaced upon deployment with default features based on the dependencies of the application.
+ Remove the comment if you do not require these default features. -->
+ <!-- %%INSERT_FEATURES -->
+
+</manifest>
diff --git a/src/Runtime/ogl-runtime/tools/viewer/main.cpp b/src/Runtime/ogl-runtime/tools/viewer/main.cpp
new file mode 100644
index 00000000..12abd3b2
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/main.cpp
@@ -0,0 +1,384 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 - 2016 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "viewer.h"
+
+#include <QtGui/qguiapplication.h>
+#include <QtGui/qtouchdevice.h>
+#include <QtGui/qscreen.h>
+#include <QtCore/qcommandlineparser.h>
+#include <QtCore/qfile.h>
+#include <QtCore/qtimer.h>
+#include <QtGui/qopenglcontext.h>
+#include <QtStudio3D/q3dssurfaceviewer.h>
+#include <QtStudio3D/private/q3dsimagesequencegenerator_p.h>
+#include <QtQml/qqmlapplicationengine.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcontext.h>
+
+static QSurfaceFormat findIdealGLVersion()
+{
+ QSurfaceFormat fmt;
+ fmt.setProfile(QSurfaceFormat::CoreProfile);
+
+ // Advanced: Try 4.3 core (so we get compute shaders for instance)
+ fmt.setVersion(4, 3);
+ QOpenGLContext ctx;
+ ctx.setFormat(fmt);
+ if (ctx.create() && ctx.format().version() >= qMakePair(4, 3))
+ return fmt;
+
+ // Basic: Stick with 3.3 for now to keep less fortunate,
+ // Mesa-based systems happy
+ fmt.setVersion(3, 3);
+ ctx.setFormat(fmt);
+ if (ctx.create())
+ return fmt;
+
+ // We tried...
+ return QSurfaceFormat::defaultFormat();
+}
+
+static QSurfaceFormat findIdealGLESVersion()
+{
+ QSurfaceFormat fmt;
+
+ // Advanced: Try 3.1 (so we get compute shaders for instance)
+ fmt.setVersion(3, 1);
+ QOpenGLContext ctx;
+ ctx.setFormat(fmt);
+ if (ctx.create())
+ return fmt;
+
+ // Basic: OpenGL ES 3.0 is a hard requirement at the moment since we can
+ // only generate 300 es shaders, uniform buffers are mandatory.
+ fmt.setVersion(3, 0);
+ ctx.setFormat(fmt);
+ if (ctx.create())
+ return fmt;
+
+ // We tried...
+ return QSurfaceFormat::defaultFormat();
+}
+
+int main(int argc, char *argv[])
+{
+#if defined(Q_OS_MACOS)
+ QSurfaceFormat openGLFormat;
+ openGLFormat.setRenderableType(QSurfaceFormat::OpenGL);
+ openGLFormat.setProfile(QSurfaceFormat::CoreProfile);
+ openGLFormat.setMajorVersion(4);
+ openGLFormat.setMinorVersion(1);
+ openGLFormat.setStencilBufferSize(8);
+ QSurfaceFormat::setDefaultFormat(openGLFormat);
+#endif
+
+ QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+ QCoreApplication::setOrganizationName("The Qt Company");
+ QCoreApplication::setOrganizationDomain("qt.io");
+ QCoreApplication::setApplicationName("Qt 3D Viewer");
+
+ QGuiApplication a(argc, argv);
+
+#if !defined(Q_OS_MACOS)
+ QSurfaceFormat fmt;
+ if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL)
+ fmt = findIdealGLVersion();
+ else
+ fmt = findIdealGLESVersion();
+ fmt.setDepthBufferSize(24);
+ fmt.setStencilBufferSize(8);
+ QSurfaceFormat::setDefaultFormat(fmt);
+#endif
+
+ QCommandLineParser parser;
+ parser.addHelpOption();
+ parser.addPositionalArgument(
+ "file",
+ QCoreApplication::translate("main", "The presentation file to open."),
+ QCoreApplication::translate("main", "[file]"));
+
+ parser.addOption({"sequence",
+ QCoreApplication::translate("main",
+ "Generates an image sequence.\n"
+ "The file argument must be specified.\n"""
+ "Specifying any of the seq-* arguments\n"
+ "implies setting this option.")});
+ parser.addOption({"seq-start",
+ QCoreApplication::translate("main",
+ "Start time of the sequence in\n"
+ "milliseconds.\n"
+ "The default value is 0."),
+ QCoreApplication::translate("main", "ms"), QString::number(0)});
+ parser.addOption({"seq-end",
+ QCoreApplication::translate("main",
+ "End time of the sequence in\n"
+ "milliseconds.\n"
+ "The default value is 1000."),
+ QCoreApplication::translate("main", "ms"), QString::number(1000)});
+ parser.addOption({"seq-fps",
+ QCoreApplication::translate("main",
+ "Frames per second for the sequence.\n"
+ "The default value is 60."),
+ QCoreApplication::translate("main", "fps"), QString::number(60)});
+ parser.addOption({"seq-interval",
+ QCoreApplication::translate("main",
+ "Time interval between frames in\n"
+ "the sequence in milliseconds. The seq-fps argument is ignored"
+ "if this argument is used."),
+ QCoreApplication::translate("main", "ms"), QString::number(0)});
+ parser.addOption({"seq-width",
+ QCoreApplication::translate("main",
+ "Width of the image sequence.\n"
+ "The default value is 1920."),
+ QCoreApplication::translate("main", "pixels"), QString::number(1920)});
+ parser.addOption({"seq-height",
+ QCoreApplication::translate("main",
+ "Height of the image sequence.\n"
+ "The default value is 1080."),
+ QCoreApplication::translate("main", "pixels"), QString::number(1080)});
+ parser.addOption({"seq-outpath",
+ QCoreApplication::translate("main",
+ "Output path of the image sequence.\n"
+ "The default value is the current directory."),
+ QCoreApplication::translate("main", "path"), QStringLiteral(".")});
+ parser.addOption({"seq-outfile",
+ QCoreApplication::translate("main",
+ "Output filename base for the image\n"
+ "sequence.\n"
+ "The default value is derived from the presentation filename."),
+ QCoreApplication::translate("main", "file"), QStringLiteral("")});
+ parser.addOption({"connect",
+ QCoreApplication::translate("main",
+ "If this parameter is specified, the viewer\n"
+ "is started in connection mode.\n"
+ "The default value is 36000."),
+ QCoreApplication::translate("main", "port"), QString::number(36000)});
+ parser.addOption({"fullscreen",
+ QCoreApplication::translate("main",
+ "Starts the viewer in fullscreen mode.\n")});
+ parser.addOption({"maximized",
+ QCoreApplication::translate("main",
+ "Starts the viewer in maximized mode.")});
+ parser.addOption({"windowgeometry",
+ QCoreApplication::translate("main",
+ "Specifies the initial\n"
+ "window geometry using the X11-syntax.\n"
+ "For example: 1000x800+50+50"),
+ QCoreApplication::translate("main", "geometry"), QStringLiteral("")});
+ parser.addOption({"mattecolor",
+ QCoreApplication::translate("main",
+ "Specifies custom matte color\n"
+ "using #000000 syntax.\n"
+ "For example, white matte: #ffffff"),
+ QCoreApplication::translate("main", "color"), QStringLiteral("#333333")});
+ parser.addOption({"showstats",
+ QCoreApplication::translate("main",
+ "Show render statistics on screen.")});
+ parser.addOption({"scalemode",
+ QCoreApplication::translate("main",
+ "Specifies scaling mode.\n"
+ "The default value is 'center'."),
+ QCoreApplication::translate("main", "center|fit|fill"),
+ QStringLiteral("center")});
+ QCommandLineOption variantListOption({QStringLiteral("v"),
+ QStringLiteral("variants")},
+ QObject::tr("Gives list of variant groups and variants\n"
+ "to be loaded from the presentation.\n"
+ "For example VarGroupA:var1,VarGroupB:var4"),
+ QStringLiteral("variants"));
+ parser.addOption(variantListOption);
+
+ parser.process(a);
+
+ const QStringList files = parser.positionalArguments();
+ if (files.count() > 1) {
+ qWarning() << "Only one presentation file can be given.";
+ parser.showHelp(-1);
+ }
+
+ bool generateSequence = parser.isSet("sequence") || parser.isSet("seq-start")
+ || parser.isSet("seq-end") || parser.isSet("seq-fps")
+ || parser.isSet("seq-interval") || parser.isSet("seq-width")
+ || parser.isSet("seq-height") || parser.isSet("seq-outpath")
+ || parser.isSet("seq-outfile");
+
+ QStringList variantList;
+ if (parser.isSet(variantListOption)) {
+ QString variantOption = parser.value(variantListOption);
+ variantList = variantOption.split(QLatin1Char(','),
+ QString::SkipEmptyParts);
+ }
+
+#ifndef Q_OS_ANDROID
+ Q3DSImageSequenceGenerator *generator = nullptr;
+#endif
+ Viewer viewer(generateSequence);
+
+ // Figure out control size multiplier for devices using touch screens to ensure all controls
+ // have minimum usable size.
+ qreal sizeMultiplier = 1.0;
+ const auto touchDevices = QTouchDevice::devices();
+ if (touchDevices.size() > 0) {
+ // Find out the actual screen logical pixel size. Typically touch devices we care about
+ // only have a single screen, so we just check primary screen.
+ const auto screens = QGuiApplication::screens();
+ if (screens.size() > 0) {
+ QScreen *screen = screens.at(0);
+ qreal dpi = screen->physicalDotsPerInch() / screen->devicePixelRatio();
+ sizeMultiplier = dpi / 40.0; // divider chosen empirically
+ }
+ }
+
+ QQmlApplicationEngine engine;
+ // Set import paths so that standalone installation works
+ QString extraImportPath1(QStringLiteral("%1/qml"));
+ engine.addImportPath(extraImportPath1.arg(QGuiApplication::applicationDirPath()));
+#ifdef Q_OS_MACOS
+ QString extraImportPath2(QStringLiteral("%1/../../../../qml"));
+ engine.addImportPath(extraImportPath2.arg(QGuiApplication::applicationDirPath()));
+#endif
+
+ QQmlContext *ctx = engine.rootContext();
+ ctx->setContextProperty(QStringLiteral("_menuBackgroundColor"), QColor("#404244"));
+ ctx->setContextProperty(QStringLiteral("_menuSelectionColor"), QColor("#46a2da"));
+ ctx->setContextProperty(QStringLiteral("_menuBorderColor"), QColor("#727476"));
+ ctx->setContextProperty(QStringLiteral("_dialogBorderColor"), QColor("#404244"));
+ ctx->setContextProperty(QStringLiteral("_dialogBackgroundColor"), QColor("#2e2f30"));
+ ctx->setContextProperty(QStringLiteral("_dialogFieldColor"), QColor("#404244"));
+ ctx->setContextProperty(QStringLiteral("_dialogFieldBorderColor"), QColor("#262829"));
+ ctx->setContextProperty(QStringLiteral("_textColor"), QColor("#ffffff"));
+ ctx->setContextProperty(QStringLiteral("_disabledColor"), QColor("#727476"));
+ ctx->setContextProperty(QStringLiteral("_fontSize"), int(12 * sizeMultiplier));
+ ctx->setContextProperty(QStringLiteral("_controlBaseHeight"), int(24 * sizeMultiplier));
+ ctx->setContextProperty(QStringLiteral("_controlBaseWidth"), int(80 * sizeMultiplier));
+ ctx->setContextProperty(QStringLiteral("_controlPadding"), int(12 * sizeMultiplier));
+ ctx->setContextProperty(QStringLiteral("_viewerHelper"), &viewer);
+ qmlRegisterUncreatableType<Viewer>(
+ "Qt3DStudioViewer", 1, 0, "ViewerHelper",
+ QCoreApplication::translate("main",
+ "Creation of ViewerHelper not allowed from QML"));
+ engine.load(QUrl(QLatin1String("qrc:/qml/main.qml")));
+ Q_ASSERT(engine.rootObjects().size() > 0);
+ QWindow *appWindow = qobject_cast<QWindow *>(engine.rootObjects().at(0));
+ Q_ASSERT(appWindow);
+ viewer.setQmlRootObject(appWindow);
+
+ if (parser.isSet(QStringLiteral("windowgeometry"))) {
+ int width = 1280;
+ int height = 768;
+ int x = 50;
+ int y = 50;
+ QString geometryStr = parser.value(QStringLiteral("windowgeometry"));
+ const QStringList splitPlus = geometryStr.split(QLatin1Char('+'));
+ if (splitPlus.size() > 0) {
+ const QStringList splitX = splitPlus[0].split(QLatin1Char('x'));
+ if (splitX.size() >= 2) {
+ width = splitX[0].toInt();
+ height = splitX[1].toInt();
+ }
+ if (splitPlus.size() >= 3) {
+ x = splitPlus[1].toInt();
+ y = splitPlus[2].toInt();
+ }
+ }
+ appWindow->setGeometry(x, y, width, height);
+ }
+ if (parser.isSet(QStringLiteral("fullscreen")))
+ appWindow->setVisibility(QWindow::FullScreen);
+ else if (parser.isSet(QStringLiteral("maximized")))
+ appWindow->setVisibility(QWindow::Maximized);
+
+ if (parser.isSet(QStringLiteral("mattecolor"))) {
+ QColor matteColor(parser.value("mattecolor"));
+ if (matteColor != Qt::black) {
+ appWindow->setProperty("showMatteColor", QVariant::fromValue<QColor>(matteColor));
+ appWindow->setProperty("matteColor", QVariant::fromValue<QColor>(matteColor));
+ }
+ }
+ if (parser.isSet(QStringLiteral("showstats")))
+ appWindow->setProperty("showRenderStats", true);
+ if (parser.isSet(QStringLiteral("scalemode"))) {
+ QString scaleStr(parser.value("scalemode"));
+ if (scaleStr == QStringLiteral("fit"))
+ appWindow->setProperty("scaleMode", Q3DSViewerSettings::ScaleModeFit);
+ else if (scaleStr == QStringLiteral("fill"))
+ appWindow->setProperty("scaleMode", Q3DSViewerSettings::ScaleModeFill);
+ else
+ appWindow->setProperty("scaleMode", Q3DSViewerSettings::ScaleModeCenter);
+ }
+
+ viewer.setVariantList(variantList);
+
+#ifndef Q_OS_ANDROID
+ if (generateSequence) {
+ if (files.count() != 1) {
+ qWarning() << "Presentation file is required for generating an image sequence.";
+ parser.showHelp(-1);
+ }
+ generator = new Q3DSImageSequenceGenerator;
+ QObject::connect(generator, &Q3DSImageSequenceGenerator::progress,
+ &viewer, &Viewer::generatorProgress);
+ QObject::connect(generator, &Q3DSImageSequenceGenerator::finished,
+ &viewer, &Viewer::generatorFinished);
+ viewer.setGeneratorDetails(files.first());
+ generator->generateImageSequence(
+ files.first(),
+ parser.value("seq-start").toDouble(),
+ parser.value("seq-end").toDouble(),
+ parser.value("seq-fps").toDouble(),
+ parser.value("seq-interval").toDouble(),
+ parser.value("seq-width").toInt(),
+ parser.value("seq-height").toInt(),
+ parser.value("seq-outpath"),
+ parser.value("seq-outfile"));
+ } else
+#endif
+ if (!files.isEmpty()) {
+ // Load the presentation after window has been exposed to give QtQuick time to construct
+ // the application window properly
+ QTimer *exposeTimer = new QTimer(appWindow);
+ QObject::connect(exposeTimer, &QTimer::timeout, [&](){
+ if (appWindow->isExposed()) {
+ exposeTimer->stop();
+ exposeTimer->deleteLater();
+ viewer.loadFile(files.first());
+ }
+ });
+ exposeTimer->start(0);
+ } else {
+ viewer.setContentView(Viewer::ConnectView);
+ if (parser.isSet(QStringLiteral("connect")))
+ viewer.setConnectPort(parser.value(QStringLiteral("connect")).toInt());
+ viewer.connectRemote();
+ }
+
+ return a.exec();
+}
diff --git a/src/Runtime/ogl-runtime/tools/viewer/qml/StyledButton.qml b/src/Runtime/ogl-runtime/tools/viewer/qml/StyledButton.qml
new file mode 100644
index 00000000..400179de
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/qml/StyledButton.qml
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.7
+import QtQuick.Controls 2.2
+
+Button {
+ id: control
+ implicitWidth: _controlBaseWidth
+ implicitHeight: _controlBaseHeight
+
+ contentItem: Text {
+ width: _controlBaseWidth
+ text: control.text
+ height: _controlBaseHeight
+ font.pixelSize: _fontSize
+ color: _textColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ background: Rectangle {
+ color: control.down ? _menuSelectionColor : _dialogFieldColor
+ border.color: _dialogFieldBorderColor
+ radius: 2
+ }
+}
diff --git a/src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenu.qml b/src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenu.qml
new file mode 100644
index 00000000..6275dbc6
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenu.qml
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.7
+import QtQuick.Controls 2.2
+
+Menu {
+ id: control
+
+ property alias hovered: menuArea.containsMouse
+
+ width: contentItem.width + leftPadding + rightPadding
+ height: contentItem.height + topPadding + bottomPadding
+ padding: 1 // For background border
+ x: 0
+ y: parent.height
+ closePolicy: Popup.CloseOnPressOutsideParent | Popup.CloseOnEscape
+
+ contentItem: MouseArea {
+ id: menuArea
+ hoverEnabled: true
+ height: list.height
+ width: list.width
+ ListView {
+ id: list
+ boundsBehavior: Flickable.StopAtBounds
+ clip: true
+ model: control.contentModel
+ currentIndex: control.currentIndex
+ highlightRangeMode: ListView.ApplyRange
+ highlightMoveDuration: 0
+ Component.onCompleted: {
+ var maxItemWidth = 0;
+ var maxShortcutWidth = 0;
+ var totalHeight = 0
+ var extraWidth = 0
+ var i;
+ for (i = control.contentData.length - 1; i >= 0; --i) {
+ if (control.contentData[i].itemWidth !== undefined) {
+ maxItemWidth = Math.max(maxItemWidth, control.contentData[i].itemWidth);
+ maxShortcutWidth = Math.max(maxShortcutWidth,
+ control.contentData[i].shortcutWidth);
+ }
+ totalHeight += control.contentData[i].height
+ }
+ maxItemWidth += _controlPadding // minimum item spacer
+ for (i = control.contentData.length - 1; i >= 0; --i) {
+ if (control.contentData[i].itemSpacerWidth !== undefined) {
+ control.contentData[i].itemSpacerWidth
+ = maxItemWidth - control.contentData[i].itemWidth;
+ control.contentData[i].shortcutSpacerWidth
+ = maxShortcutWidth - control.contentData[i].shortcutWidth;
+ }
+ }
+ width = maxItemWidth + maxShortcutWidth + extraWidth
+ + control.contentData[0].leftPadding + control.contentData[0].rightPadding
+ + control.contentData[0].arrowWidth + control.contentData[0].checkMarkWidth;
+ height = totalHeight
+ }
+ }
+ }
+
+ background: Rectangle {
+ width: control.width
+ height: control.height
+ color: _menuBackgroundColor
+ border.color: _menuBorderColor
+ }
+}
diff --git a/src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenuButton.qml b/src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenuButton.qml
new file mode 100644
index 00000000..b5290c3d
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenuButton.qml
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.7
+import QtQuick.Controls 2.2
+
+Button {
+ id: control
+
+ property Menu menu: null
+ property ApplicationWindow window: null
+
+ onPressed: {
+ if (menu.visible)
+ menu.close();
+ else
+ menu.open();
+ }
+
+ onHoveredChanged: {
+ if (hovered && window.menuOpen) {
+ window.closeMenus();
+ menu.open();
+ }
+ }
+
+ hoverEnabled: true
+ width: contentItem.contentWidth + leftPadding + rightPadding
+ leftPadding: _controlPadding
+ rightPadding: _controlPadding
+ height: _controlBaseHeight
+ contentItem: Text {
+ text: control.text
+ font.pixelSize: _fontSize
+ opacity: enabled ? 1.0 : 0.3
+ color: _textColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ background: Rectangle {
+ opacity: enabled ? 1 : 0.3
+ color: control.down || control.hovered
+ ? _menuSelectionColor : _menuBackgroundColor
+ }
+}
diff --git a/src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenuItem.qml b/src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenuItem.qml
new file mode 100644
index 00000000..79049a90
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenuItem.qml
@@ -0,0 +1,159 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.7
+import QtQuick.Controls 2.2
+
+MenuItem {
+ id: control
+
+ property alias shortcut: shortcut.sequence
+ property string shortcutText
+ property alias itemSpacerWidth: itemSpacer.width
+ property alias shortcutSpacerWidth: shortcutSpacer.width
+ property alias itemWidth: itemLabel.width
+ property alias shortcutWidth: shortcutLabel.width
+ property bool showArrow: false
+ property int arrowWidth: arrow.width
+ property int checkMarkWidth: checkMark.width
+ property bool showCheckMark: false
+ property Menu arrowMenu: null
+
+ hoverEnabled: true
+ width: contentItem.width + leftPadding + rightPadding
+ height: contentItem.height + topPadding + bottomPadding
+ padding: 0
+ leftPadding: 0
+ rightPadding: 0
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ if (showArrow) {
+ if (!arrowMenu.visible) {
+ arrowMenuDelay.stop();
+ arrowMenu.open();
+ }
+ } else {
+ mouse.accepted = false;
+ }
+ }
+ }
+
+ onHoveredChanged: {
+ if (showArrow)
+ arrowMenuDelay.start();
+ }
+
+ Timer {
+ id: arrowMenuDelay
+ interval: 500
+ repeat: false
+ onTriggered: {
+ if (arrowMenu.visible) {
+ if (!control.hovered && !arrowMenu.hovered)
+ arrowMenu.close();
+ } else {
+ if (control.hovered)
+ arrowMenu.open();
+ }
+ }
+ }
+
+ Shortcut {
+ id: shortcut
+ context: Qt.ApplicationShortcut
+ onActivated: control.triggered()
+ }
+
+ contentItem: Row {
+ width: checkMark.width + itemLabel.width + itemSpacer.width
+ + shortcutLabel.width + shortcutSpacer.width + arrow.width
+ height: _controlBaseHeight
+ Item {
+ id: checkMark
+ width: 16
+ height: _controlBaseHeight
+ Image {
+ anchors.fill: parent
+ visible: control.showCheckMark
+ fillMode: Image.Pad
+ source: "qrc:/images/check.png"
+ }
+ }
+ Label {
+ id: itemLabel
+ text: control.text
+ font.pixelSize: _fontSize
+ horizontalAlignment: Text.AlignLeft
+ color: control.enabled ? _textColor : _disabledColor
+ verticalAlignment: Text.AlignVCenter
+ clip: true
+ width: contentWidth
+ height: _controlBaseHeight
+ }
+ Item {
+ id: itemSpacer
+ width: _controlPadding
+ height: _controlBaseHeight
+ }
+ Label {
+ id: shortcutLabel
+ text: shortcut.nativeText === "" ? control.shortcutText : shortcut.nativeText
+ font.pixelSize: _fontSize
+ horizontalAlignment: Text.AlignLeft
+ color: control.enabled ? _textColor : _disabledColor
+ verticalAlignment: Text.AlignVCenter
+ clip: true
+ width: contentWidth
+ height: _controlBaseHeight
+ }
+ Item {
+ id: shortcutSpacer
+ width: 0
+ height: _controlBaseHeight
+ }
+ Item {
+ id: arrow
+ width: 16
+ height: _controlBaseHeight
+ Image {
+ anchors.fill: parent
+ visible: control.showArrow
+ fillMode: Image.Pad
+ source: "qrc:/images/arrow.png"
+ }
+ }
+ }
+ background: Rectangle {
+ width: control.width
+ height: control.height
+ color: control.hovered ? _menuSelectionColor : _menuBackgroundColor
+ }
+}
diff --git a/src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenuSeparator.qml b/src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenuSeparator.qml
new file mode 100644
index 00000000..344d6678
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/qml/StyledMenuSeparator.qml
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.7
+import QtQuick.Controls 2.2
+
+MenuSeparator {
+ id: control
+ padding: 0
+ topPadding: 0
+ bottomPadding: 0
+ leftPadding: 0
+ rightPadding: 0
+ width: parent.width
+ height: 1
+ contentItem: Rectangle {
+ width: control.width - control.leftPadding - control.rightPadding
+ height: 1
+ color: _menuBorderColor
+ }
+}
diff --git a/src/Runtime/ogl-runtime/tools/viewer/qml/main.qml b/src/Runtime/ogl-runtime/tools/viewer/qml/main.qml
new file mode 100644
index 00000000..1357f396
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/qml/main.qml
@@ -0,0 +1,594 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.7
+import QtQuick.Controls 2.2
+import QtQuick.Dialogs 1.2
+import Qt3DStudioViewer 1.0
+import QtStudio3D.OpenGL 2.4
+import QtQuick.Window 2.2
+
+ApplicationWindow {
+ id: window
+ width: 1280
+ height: 768
+ visible: true
+ title: qsTr("Qt 3D Studio Viewer")
+
+ property bool menuOpen: fileMenu.visible || viewMenu.visible
+ property Item loadedContent: contentLoader ? contentLoader.item : null
+ property string error
+ property int previousVisibility
+
+ property color showMatteColor: Qt.rgba(0.2, 0.2, 0.2, 1)
+ property color hideMatteColor: Qt.rgba(0, 0, 0, 1)
+ property color matteColor: hideMatteColor
+ property bool showRenderStats: false
+ property int scaleMode: ViewerSettings.ScaleModeCenter
+
+ function closeMenus() {
+ fileMenu.close();
+ scaleMenu.close();
+ viewMenu.close();
+ }
+
+ Component.onCompleted: {
+ _viewerHelper.restoreWindowState(window);
+ previousVisibility = visibility;
+ }
+
+ onClosing: {
+ _viewerHelper.storeWindowState(window);
+ }
+
+ Timer {
+ id: infoTimer
+ repeat: false
+ interval: 5000
+
+ onTriggered: {
+ infoOverlay.visible = false;
+ }
+ }
+
+ Rectangle {
+ id: infoOverlay
+ visible: false
+ color: "black"
+ border.color: _dialogBorderColor
+ x: parent.width * 0.2
+ y: parent.height * 0.4
+ width: parent.width * 0.6
+ height: parent.height * 0.2
+ z: 20
+ Label {
+ id: infoLabel
+ anchors.fill: parent
+ color: _textColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ font.pixelSize: window.width / 40
+ }
+ }
+
+ Connections {
+ target: _viewerHelper
+ onShowInfoOverlay: {
+ // Show a brief info overlay
+ infoLabel.text = infoStr;
+ infoOverlay.visible = true;
+ infoTimer.restart();
+ }
+ }
+
+ MouseArea {
+ property int swipeStart: 0
+
+ anchors.fill: parent
+ z: 10
+ enabled: !ipEntry.visible
+
+ onPressed: {
+ if (window.visibility === Window.FullScreen)
+ swipeStart = mouse.y;
+ _viewerHelper.handleMousePress(mouse.x, mouse.y, mouse.button, mouse.buttons,
+ mouse.modifiers);
+ mouse.accepted = true;
+ }
+ onReleased: {
+ _viewerHelper.handleMouseRelease(mouse.x, mouse.y, mouse.button, mouse.buttons,
+ mouse.modifiers);
+ mouse.accepted = true;
+ }
+ onPositionChanged: {
+ // Swipe down to exit fullscreen mode
+ if (window.visibility === Window.FullScreen && mouse.y > swipeStart + (height / 8)) {
+ window.visibility = window.previousVisibility;
+ } else {
+ _viewerHelper.handleMouseMove(mouse.x, mouse.y, mouse.button, mouse.buttons,
+ mouse.modifiers);
+ }
+ }
+ }
+
+ DropArea {
+ anchors.fill: parent
+ onEntered: {
+ if (drag.hasUrls) {
+ var filename = _viewerHelper.convertUrlListToFilename(drag.urls);
+ if (filename === "")
+ drag.accepted = false;
+ }
+ }
+ onDropped: {
+ if (drop.hasUrls) {
+ var filename = _viewerHelper.convertUrlListToFilename(drop.urls);
+ if (filename === "")
+ drag.accepted = false;
+ else
+ _viewerHelper.loadFile(filename);
+ }
+ }
+ }
+
+ Loader {
+ id: contentLoader
+ anchors.fill: parent
+ sourceComponent: {
+ switch (_viewerHelper.contentView) {
+ case ViewerHelper.StudioView:
+ return studioContent;
+ case ViewerHelper.ConnectView:
+ return connectContent;
+ case ViewerHelper.SequenceView:
+ return sequenceContent;
+ default:
+ return emptyContent;
+ }
+ }
+ Timer {
+ id: asyncContentChanger
+ repeat: false
+ interval: 0
+ property int view: ViewerHelper.DefaultView
+ function changeView(newView) {
+ view = newView;
+ start();
+ }
+
+ onTriggered: {
+ _viewerHelper.contentView = view;
+ }
+ }
+ }
+
+ Component {
+ id: emptyContent
+ Rectangle {
+ color: "black"
+ Label {
+ anchors.fill: parent
+ text: window.error
+ color: _textColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ font.pixelSize: width / 80
+ }
+ }
+ }
+
+ Component {
+ id: studioContent
+ Studio3D {
+ id: studio3D
+
+ property alias hiderVisible: hider.visible
+
+ focus: true
+ ViewerSettings {
+ matteColor: window.matteColor
+ showRenderStats: window.showRenderStats
+ scaleMode: window.scaleMode
+ }
+
+ // Hider item keeps the Studio3D hidden until it starts running and we reset the
+ // animation time to the start
+ Rectangle {
+ id: hider
+ color: "black"
+ anchors.fill: parent
+ }
+
+ Timer {
+ id: revealTimer
+ repeat: false
+ interval: 0
+ onTriggered: {
+ hider.visible = false;
+ }
+ }
+
+ onRunningChanged: {
+ if (running) {
+ // Successfully opened a presentation, update the open folder
+ _viewerHelper.openFolder = presentation.source.toString();
+ // Force the animation to start from the beginning, as the first frame render
+ // can take some time as shaders are compiled on-demand
+ // Localization note: "Scene" needs to be the same as the default "Scene"
+ // element name generated in the Studio application.
+ presentation.goToTime(qsTr("Scene"), 0);
+ revealTimer.start();
+ }
+ }
+ onErrorChanged: {
+ if (error.length > 0) {
+ window.error = error;
+ asyncContentChanger.changeView(ViewerHelper.DefaultView);
+ }
+ }
+ }
+ }
+
+ Component {
+ id: connectContent
+ Rectangle {
+ color: "black"
+ Label {
+ anchors.fill: parent
+ text: _viewerHelper.connectText
+ color: _textColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ font.pixelSize: width / 40
+ }
+ }
+ }
+
+ Component {
+ id: sequenceContent
+ Rectangle {
+ property alias mainText: mainLabel.text
+ property alias detailsText: detailsLabel.text
+ color: "black"
+ Item {
+ anchors.fill: parent
+ Label {
+ id: mainLabel
+ color: _textColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignBottom
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottomMargin: _controlPadding
+ height: parent.height / 2
+ font.pixelSize: width / 40
+ text: qsTr("Image sequence generation initializing...")
+ }
+ Label {
+ id: detailsLabel
+ color: _textColor
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignTop
+ anchors.top: mainLabel.bottom
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.topMargin: _controlPadding
+ height: parent.height / 2
+ font.pixelSize: width / 50
+ }
+ }
+ }
+ }
+
+ Rectangle {
+ id: ipEntry
+ visible: false
+ color: _dialogBackgroundColor
+ border.color: _dialogBorderColor
+ y: (parent.height - height) / 2
+ x: (parent.width - width) / 2
+ z: 100
+ width: connectionEntry.width + (2 * _controlPadding)
+ height: connectionEntry.height + (2 * _controlPadding)
+
+ onVisibleChanged: {
+ if (visible) {
+ connectText.forceActiveFocus();
+ connectText.selectAll();
+ }
+ }
+
+ Grid {
+ id: connectionEntry
+ spacing: _controlPadding
+ columns: 2
+ y: _controlPadding
+ x: _controlPadding
+ Label {
+ id: ipEntryLabel
+ width: _controlBaseWidth
+ height: _controlBaseHeight
+ text: qsTr("Enter IP port:")
+ color: _textColor
+ font.pixelSize: _fontSize
+ verticalAlignment: Text.AlignVCenter
+ padding: _controlPadding / 2
+ }
+ TextField {
+ id: connectText
+ width: _controlBaseWidth
+ height: _controlBaseHeight
+ font.pixelSize: _fontSize
+ color: _textColor
+ selectByMouse: true
+ padding: _controlPadding / 6
+ enabled: ipEntry.visible
+ text: _viewerHelper.connectPort
+ validator: IntValidator {
+ bottom: 1
+ top: 65535
+ }
+
+ onAccepted: {
+ if (ipEntry.visible) {
+ _viewerHelper.contentView = ViewerHelper.ConnectView;
+ _viewerHelper.connectPort = Number(text);
+ _viewerHelper.connectRemote();
+ ipEntry.visible = false;
+ infoOverlay.visible = false;
+ }
+ }
+
+ background: Rectangle {
+ id: textBackground
+ color: _dialogFieldColor
+ border.width: 1
+ border.color: _dialogFieldBorderColor
+ radius: 2
+ }
+ }
+ StyledButton {
+ id: connectButton
+ width: _controlBaseWidth
+ text: qsTr("Connect")
+ onClicked: {
+ _viewerHelper.contentView = ViewerHelper.ConnectView;
+ _viewerHelper.connectPort = Number(connectText.text);
+ _viewerHelper.connectRemote();
+ ipEntry.visible = false;
+ infoOverlay.visible = false;
+ }
+ }
+ StyledButton {
+ id: cancelButton
+ width: _controlBaseWidth
+ text: qsTr("Cancel")
+ onClicked: {
+ ipEntry.visible = false;
+ }
+ }
+ }
+ }
+
+ Component {
+ id: fileDialogComponent
+ FileDialog {
+ id: fileDialog
+ title: qsTr("Choose Presentation or Project")
+ folder: _viewerHelper.openFolder
+ nameFilters: [qsTr("All supported formats (*.uip *.uia)"),
+ qsTr("Studio UI Presentation (*.uip)"),
+ qsTr("Application file (*.uia)")]
+ onAccepted: {
+ _viewerHelper.contentView = ViewerHelper.StudioView;
+ contentLoader.item.presentation.setSource(fileUrls[0]);
+ }
+ }
+ }
+
+ header: Rectangle {
+ height: _controlBaseHeight
+ color: _menuBackgroundColor
+ visible: window.visibility !== Window.FullScreen
+
+ Row {
+ anchors.fill: parent
+ StyledMenuButton {
+ id: fileButton
+ text: qsTr("File")
+ menu: fileMenu
+ window: window
+
+ StyledMenu {
+ id: fileMenu
+ StyledMenuItem {
+ text: qsTr("Open...")
+ shortcut: StandardKey.Open
+ enabled: _viewerHelper.contentView !== ViewerHelper.SequenceView
+ onTriggered: {
+ if (enabled) {
+ fileDialogLoader.sourceComponent = fileDialogComponent;
+ fileDialogLoader.item.open();
+ }
+ }
+ Loader {
+ id: fileDialogLoader
+ sourceComponent: Item {}
+ }
+ }
+ StyledMenuItem {
+ text: _viewerHelper.connected ? qsTr("Disconnect") : qsTr("Connect...")
+ shortcut: "F9"
+ enabled: _viewerHelper.contentView !== ViewerHelper.SequenceView
+ onTriggered: {
+ if (enabled) {
+ if (_viewerHelper.connected)
+ _viewerHelper.disconnectRemote();
+ else
+ ipEntry.visible = !ipEntry.visible;
+ }
+ }
+ }
+ StyledMenuItem {
+ text: qsTr("Reload")
+ enabled: _viewerHelper.contentView === ViewerHelper.StudioView
+ shortcut: "F5"
+ onTriggered: {
+ if (enabled) {
+ contentLoader.item.hiderVisible = true;
+ contentLoader.item.reset();
+ }
+ }
+ }
+ StyledMenuSeparator {}
+ StyledMenuItem {
+ text: qsTr("Quit")
+ shortcut: "Ctrl+Q"
+ onTriggered: {
+ window.close();
+ }
+ }
+ }
+ }
+ StyledMenuButton {
+ id: viewButton
+ text: qsTr("View")
+ menu: viewMenu
+ window: window
+
+ StyledMenu {
+ id: viewMenu
+ StyledMenuItem {
+ text: qsTr("Show Matte")
+ shortcut: "Ctrl+D"
+ enabled: _viewerHelper.contentView === ViewerHelper.StudioView
+ showCheckMark: window.matteColor !== window.hideMatteColor
+ onTriggered: {
+ if (enabled) {
+ if (window.matteColor === window.hideMatteColor)
+ window.matteColor = window.showMatteColor;
+ else
+ window.matteColor = window.hideMatteColor;
+ }
+ }
+ }
+ StyledMenuItem {
+ id: scaleMenuItem
+ text: qsTr("Scale Mode")
+ showArrow: true
+ arrowMenu: scaleMenu
+ shortcut: "Ctrl+Shift+S"
+ enabled: _viewerHelper.contentView === ViewerHelper.StudioView
+ onTriggered: {
+ if (enabled) {
+ scaleMenu.close();
+ if (window.scaleMode === ViewerSettings.ScaleModeCenter)
+ window.scaleMode = ViewerSettings.ScaleModeFit;
+ else if (window.scaleMode === ViewerSettings.ScaleModeFit)
+ window.scaleMode = ViewerSettings.ScaleModeFill;
+ else if (window.scaleMode === ViewerSettings.ScaleModeFill)
+ window.scaleMode = ViewerSettings.ScaleModeCenter;
+ }
+ }
+
+ StyledMenu {
+ id: scaleMenu
+ x: parent.width
+ y: 0
+
+ StyledMenuItem {
+ id: scaleCenter
+ text: qsTr("Center")
+ enabled: _viewerHelper.contentView === ViewerHelper.StudioView
+ showCheckMark: window.scaleMode === ViewerSettings.ScaleModeCenter
+ onTriggered: {
+ if (enabled)
+ window.scaleMode = ViewerSettings.ScaleModeCenter;
+ }
+ }
+ StyledMenuItem {
+ id: scaleFit
+ text: qsTr("Scale to Fit")
+ enabled: _viewerHelper.contentView === ViewerHelper.StudioView
+ showCheckMark: window.scaleMode === ViewerSettings.ScaleModeFit
+ onTriggered: {
+ if (enabled)
+ window.scaleMode = ViewerSettings.ScaleModeFit;
+ }
+ }
+ StyledMenuItem {
+ id: scaleFill
+ text: qsTr("Scale to Fill")
+ enabled: _viewerHelper.contentView === ViewerHelper.StudioView
+ showCheckMark: window.scaleMode === ViewerSettings.ScaleModeFill
+ onTriggered: {
+ if (enabled)
+ window.scaleMode = ViewerSettings.ScaleModeFill;
+ }
+ }
+ }
+ }
+ StyledMenuItem {
+ text: qsTr("Show Render Statistics")
+ shortcut: "F7"
+ enabled: _viewerHelper.contentView === ViewerHelper.StudioView
+ showCheckMark: window.showRenderStats
+ onTriggered: {
+ if (enabled)
+ window.showRenderStats = !window.showRenderStats;
+ }
+ }
+ StyledMenuSeparator {}
+ StyledMenuItem {
+ text: qsTr("Full Screen")
+ shortcut: "F11"
+ Shortcut {
+ sequence: "ESC"
+ context: Qt.ApplicationShortcut
+ enabled: window.visibility === Window.FullScreen
+ onActivated: {
+ window.visibility = window.previousVisibility;
+ }
+ }
+
+ onTriggered: {
+ if (window.visibility !== Window.FullScreen) {
+ window.previousVisibility = window.visibility
+ window.visibility = Window.FullScreen;
+ } else {
+ window.visibility = window.previousVisibility;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/Runtime/ogl-runtime/tools/viewer/remotedeploymentreceiver.cpp b/src/Runtime/ogl-runtime/tools/viewer/remotedeploymentreceiver.cpp
new file mode 100644
index 00000000..cdfa5b05
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/remotedeploymentreceiver.cpp
@@ -0,0 +1,202 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "remotedeploymentreceiver.h"
+#include "viewer.h"
+
+#include <QtNetwork>
+
+RemoteDeploymentReceiver::RemoteDeploymentReceiver(int serverPort, QObject *parent)
+ : QObject(parent)
+ , m_tcpServer(0)
+ , m_connection(0)
+ , m_temporaryDir(0)
+ , m_serverPort(serverPort)
+ , m_projectDeployed(false)
+{
+ m_incoming.setVersion(QDataStream::Qt_5_8);
+}
+
+RemoteDeploymentReceiver::~RemoteDeploymentReceiver()
+{
+ delete m_temporaryDir;
+ m_temporaryDir = 0;
+}
+
+void RemoteDeploymentReceiver::setPort(int value)
+{
+ m_serverPort = value;
+}
+
+QString RemoteDeploymentReceiver::startServer()
+{
+ if (m_tcpServer)
+ return QString();
+
+ m_tcpServer = new QTcpServer(this);
+ if (!m_tcpServer->listen(QHostAddress::Any, m_serverPort)) {
+ QString error = tr("Can't start the remote connection: '%1'")
+ .arg(m_tcpServer->errorString());
+ delete m_tcpServer;
+ m_tcpServer = 0;
+ return error;
+ }
+
+ QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();
+ // use the first non-localhost IPv4 address
+ for (int i = 0; i < ipAddressesList.size(); ++i) {
+ if (ipAddressesList.at(i) != QHostAddress::LocalHost
+ && ipAddressesList.at(i).toIPv4Address()) {
+ m_hostAddress = ipAddressesList.at(i);
+ break;
+ }
+ }
+
+ // if we did not find one, use IPv4 localhost
+ if (m_hostAddress.isNull())
+ m_hostAddress = QHostAddress(QHostAddress::LocalHost);
+
+ m_serverPort = m_tcpServer->serverPort();
+ connect(m_tcpServer, SIGNAL(newConnection()),
+ this, SLOT(acceptRemoteConnection()));
+ return QString();
+}
+
+void RemoteDeploymentReceiver::disconnectRemote()
+{
+ if (m_connection)
+ m_connection->disconnectFromHost();
+}
+
+void RemoteDeploymentReceiver::acceptRemoteConnection()
+{
+ Q_ASSERT(m_tcpServer);
+ Q_ASSERT(!m_connection);
+ m_connection = m_tcpServer->nextPendingConnection();
+ Q_ASSERT(m_connection);
+
+ m_incoming.setDevice(m_connection);
+
+ connect(m_connection, &QTcpSocket::disconnected,
+ this, &RemoteDeploymentReceiver::acceptRemoteDisconnection);
+
+ connect(m_connection, &QTcpSocket::readyRead,
+ this, &RemoteDeploymentReceiver::readProject);
+
+ Q_EMIT(remoteConnected());
+}
+
+void RemoteDeploymentReceiver::acceptRemoteDisconnection()
+{
+ Q_ASSERT(m_tcpServer);
+ Q_ASSERT(m_connection);
+ m_connection->deleteLater();
+ m_connection = 0;
+
+ m_incoming.setDevice(0);
+
+ Q_EMIT(remoteDisconnected());
+}
+
+void RemoteDeploymentReceiver::readProject()
+{
+ m_projectDeployed = false;
+ Q_EMIT(projectChanging());
+
+ m_incoming.startTransaction();
+
+ int totalBytes = 0;
+ m_incoming >> totalBytes;
+
+ Viewer *viewer = qobject_cast<Viewer *>(parent());
+ if (viewer && totalBytes != 0) {
+ viewer->updateProgress(
+ 100 * ((double)m_connection->bytesAvailable() / (double)totalBytes));
+ }
+
+ if (m_connection->bytesAvailable() < totalBytes) {
+ m_incoming.rollbackTransaction();
+ return;
+ }
+
+ int numberOfFiles = 0;
+ QString projectFile;
+ m_incoming >> numberOfFiles;
+ m_incoming >> projectFile;
+
+ QVector<QPair<QString, QByteArray> > files;
+ for (int i = 0; i < numberOfFiles; ++i) {
+ QString fileName;
+ QByteArray fileContents;
+ m_incoming >> fileName;
+ m_incoming >> fileContents;
+ files.append(qMakePair(fileName, fileContents));
+ }
+
+ if (!m_incoming.commitTransaction()) {
+ m_incoming.abortTransaction();
+ qWarning() << "Error transferring remote project in one payload";
+ return;
+ }
+
+ QFileInfo currentProject(m_projectFile);
+ if (projectFile != currentProject.fileName()) {
+ delete m_temporaryDir;
+ m_temporaryDir = 0;
+ }
+
+ if (!m_temporaryDir)
+ m_temporaryDir = new QTemporaryDir;
+
+ Q_ASSERT(m_temporaryDir->isValid());
+
+ for (const auto &file : qAsConst(files)) {
+ QString filePath = m_temporaryDir->path() + QDir::separator() + file.first;
+ QFile tmpFile(filePath);
+ QDir tmpFileDir = QFileInfo(tmpFile).absoluteDir();
+ if (!tmpFileDir.exists())
+ tmpFileDir.mkpath(".");
+ if (!tmpFile.open(QIODevice::WriteOnly)) {
+ delete m_temporaryDir;
+ m_temporaryDir = 0;
+ qWarning() << "Error opening temporary file for remote project:"
+ << filePath;
+ return;
+ }
+
+ if (file.first == projectFile)
+ m_projectFile = filePath;
+
+ tmpFile.write(file.second);
+ tmpFile.close();
+ }
+
+ m_projectDeployed = true;
+ Q_EMIT(projectChanged());
+}
diff --git a/src/Runtime/api/studio3d/q3dswidget_p.h b/src/Runtime/ogl-runtime/tools/viewer/remotedeploymentreceiver.h
index 03ca6aac..49f7de3f 100644
--- a/src/Runtime/api/studio3d/q3dswidget_p.h
+++ b/src/Runtime/ogl-runtime/tools/viewer/remotedeploymentreceiver.h
@@ -1,6 +1,5 @@
/****************************************************************************
**
-** Copyright (C) 2013 - 2016 NVIDIA Corporation.
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
@@ -28,66 +27,53 @@
**
****************************************************************************/
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the QtStudio3D API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-#ifndef Q3DSWIDGET_P_H
-#define Q3DSWIDGET_P_H
+#ifndef REMOTEDEPLOYMENTRECEIVER_H
+#define REMOTEDEPLOYMENTRECEIVER_H
-#include "q3dswidget.h"
-#include "Qt3DSViewerApp.h"
+#include <QtCore/qobject.h>
+#include <QtCore/qdatastream.h>
+#include <QtCore/qtemporarydir.h>
+#include <QtNetwork/qtcpserver.h>
-#include <QtCore/qtimer.h>
-
-QT_BEGIN_NAMESPACE
-
-class Q3DSViewerSettings;
-class Q3DSPresentation;
-
-class Q_STUDIO3D_EXPORT Q3DSWidgetPrivate : public QObject
+class RemoteDeploymentReceiver : public QObject
{
-public:
Q_OBJECT
- Q_DECLARE_PUBLIC(Q3DSWidget)
-
public:
- explicit Q3DSWidgetPrivate(Q3DSWidget *q);
- virtual ~Q3DSWidgetPrivate();
+ explicit RemoteDeploymentReceiver(int serverPort, QObject *parent);
+ ~RemoteDeploymentReceiver();
- void reset();
- void setUpdateInterval(int interval);
- bool initialize();
+ QString startServer();
+ void disconnectRemote();
- Q3DSViewerSettings *settings();
- Q3DSPresentation *presentation();
+ QHostAddress hostAddress() const { return m_hostAddress; }
+ int serverPort() const { return m_serverPort; }
+ void setServerPort(int port) { m_serverPort = port; }
+ bool isConnected() const { return m_connection; }
+ bool isProjectDeployed() const { return m_connection && m_projectDeployed; }
+ QString fileName() const { return m_projectFile; }
+
+Q_SIGNALS:
+ void projectChanged();
+ void projectChanging();
+ void remoteConnected();
+ void remoteDisconnected();
private Q_SLOTS:
- void shutdown();
+ void acceptRemoteConnection();
+ void acceptRemoteDisconnection();
+ void readProject();
+ void setPort(int value);
private:
- bool initializeRuntime();
- void releaseRuntime();
- void resetUpdateTimer();
-
- Q3DSWidget *q_ptr;
-
- Q3DSViewer::Q3DSViewerApp *m_viewerApp;
- QTimer *m_timer;
- int m_updateInterval;
- qreal m_pixelRatio;
- QElapsedTimer m_startupTimer;
-
- Q3DSViewerSettings *m_settings;
- Q3DSPresentation *m_presentation;
+ QTcpServer *m_tcpServer = nullptr;
+ QTcpSocket *m_connection = nullptr;
+ QHostAddress m_hostAddress;
+ QDataStream m_incoming;
+ QTemporaryDir *m_temporaryDir = nullptr;
+ QString m_projectFile;
+ bool m_projectDeployed;
+ int m_serverPort;
};
-QT_END_NAMESPACE
-
-#endif // Q3DSWIDGET_P_H
+#endif // REMOTEDEPLOYMENTRECEIVER_H
diff --git a/src/Runtime/ogl-runtime/tools/viewer/resources/images/3D-studio-viewer.ico b/src/Runtime/ogl-runtime/tools/viewer/resources/images/3D-studio-viewer.ico
new file mode 100644
index 00000000..c15cd68a
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/resources/images/3D-studio-viewer.ico
Binary files differ
diff --git a/src/Runtime/ogl-runtime/tools/viewer/resources/images/3D-studio-viewer.svg b/src/Runtime/ogl-runtime/tools/viewer/resources/images/3D-studio-viewer.svg
new file mode 100644
index 00000000..69a14f48
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/resources/images/3D-studio-viewer.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="512px" height="512px" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
+ <title>icon_512x512</title>
+ <desc>Created with Sketch.</desc>
+ <defs>
+ <polygon id="path-1" points="64 0 0 48 0 112 64 160 128 112 128 48"></polygon>
+ <path d="M45.6534039,84.7089559 L45.6534039,97.4054197 L15.0588235,128 L0,112.941176 L30.1176471,82.8235294 L43.7426612,82.8235294 C35.3039365,74.0299707 30.1176471,62.091235 30.1176471,48.9411765 C30.1176471,21.9117111 52.0293581,0 79.0588235,0 C106.088289,0 128,21.9117111 128,48.9411765 C128,75.9706419 106.088289,97.8823529 79.0588235,97.8823529 C66.1449913,97.8823529 54.3993526,92.8807218 45.6534039,84.7089559 Z M79.0588235,82.8235294 C97.7715303,82.8235294 112.941176,67.6538833 112.941176,48.9411765 C112.941176,30.2284697 97.7715303,15.0588235 79.0588235,15.0588235 C60.3461167,15.0588235 45.1764706,30.2284697 45.1764706,48.9411765 C45.1764706,67.6538833 60.3461167,82.8235294 79.0588235,82.8235294 Z" id="path-2"></path>
+ </defs>
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <g id="icon_512x512">
+ <g id="Group-3" transform="translate(56.000000, 88.000000)">
+ <g id="Page-1-Copy">
+ <polygon id="Fill-1" fill="#41CD52" points="0 288.0032 328 288.0032 384 232.0032 384 0.0032 56 0.0032 0 56.0032"></polygon>
+ <g id="Group-6" transform="translate(72.000000, 48.000000)" fill="#FFFFFF">
+ <path d="M39.3792,138.3936 C44.8752,147.8176 55.4752,152.6656 71.0512,152.6656 C86.6272,152.6656 97.0992,147.9536 102.5952,138.6496 C107.9552,129.3456 110.7072,113.5216 110.7072,91.4016 C110.7072,69.1536 107.9632,53.0576 102.3312,42.9776 C96.7072,32.9056 86.3632,27.9216 71.0512,27.9216 C55.8752,27.9216 45.3952,32.8896 39.6432,42.9776 C34.0112,53.0656 31.1312,69.0256 31.1312,91.1456 C31.1312,113.1296 33.8832,128.9616 39.3792,138.3936 L39.3792,138.3936 Z M70.9232,176.2256 C45.6592,176.2256 27.9952,169.4096 18.0432,155.8016 C8.0992,142.2016 3.1232,120.5936 3.1232,91.2736 C3.1232,61.8336 8.2272,39.9696 18.3072,25.7056 C28.3872,11.4416 46.0512,4.2416 70.9232,4.2416 C95.9152,4.2416 113.4592,11.3056 123.4032,25.5696 C133.4832,39.7056 138.4512,61.5616 138.4512,91.1536 C138.4512,110.6496 136.3632,126.3536 132.3072,138.2656 C128.1152,150.2976 121.4432,159.4656 112.0192,165.7536 L132.4352,198.6016 L107.4352,210.2336 L85.8432,174.7776 C82.6992,175.8016 77.7232,176.1376 70.9232,176.1376 L70.9232,176.2256 Z" id="Fill-2"></path>
+ <path d="M198.66,71.5184 L198.66,125.0464 C198.66,134.9984 199.444,141.5344 200.884,144.8064 C202.316,148.0784 206.116,149.6544 212.004,149.6544 L231.9,148.7984 L233.076,170.0064 C222.212,172.1024 213.972,173.1424 208.212,173.1424 C194.468,173.1424 185.044,170.0064 179.94,163.7184 C174.836,157.4384 172.22,145.5344 172.22,127.9984 L172.22,71.5824 L153.764,71.5824 L153.764,48.9424 L172.348,48.9424 L172.348,13.7344 L198.66,13.7344 L198.66,48.9424 L232.164,48.9424 L232.164,71.4544 L198.66,71.5184 Z" id="Fill-4"></path>
+ </g>
+ </g>
+ <g id="Group" transform="translate(280.000000, 176.000000)">
+ <g id="Path-29">
+ <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-1"></use>
+ <path stroke="#FFFFFF" stroke-width="7" d="M64,-4.375 L131.5,46.25 L131.5,113.75 L64,164.375 L-3.5,113.75 L-3.5,46.25 L64,-4.375 Z"></path>
+ </g>
+ <polygon id="Path-27" fill="#81CFFF" points="0 48 64 96 128 48 64 0"></polygon>
+ <polygon id="Path-28-Copy" fill="#1F83C1" transform="translate(96.000000, 104.000000) scale(-1, 1) translate(-96.000000, -104.000000) " points="64 48 64 112 128 160 128 96"></polygon>
+ <polygon id="Path-28" fill="#2696DA" points="0 48 0 112 64 160 64 96"></polygon>
+ </g>
+ <g id="Group-2" transform="translate(200.000000, 208.000000)">
+ <g id="Combined-Shape">
+ <use fill="#707070" fill-rule="evenodd" xlink:href="#path-2"></use>
+ <path stroke="#FFFFFF" stroke-width="7" d="M49.1534039,92.0264501 L49.1534039,98.8551671 L15.0588235,132.949747 L-4.94974747,112.941176 L28.6678996,79.3235294 L36.3089911,79.3235294 C30.0728186,70.5670745 26.6176471,60.0229376 26.6176471,48.9411765 C26.6176471,19.9787144 50.0963615,-3.5 79.0588235,-3.5 C108.021286,-3.5 131.5,19.9787144 131.5,48.9411765 C131.5,77.9036385 108.021286,101.382353 79.0588235,101.382353 C68.1809425,101.382353 57.8185023,98.0537262 49.1534039,92.0264501 Z M79.0588235,79.3235294 C95.8385337,79.3235294 109.441176,65.7208867 109.441176,48.9411765 C109.441176,32.1614663 95.8385337,18.5588235 79.0588235,18.5588235 C62.2791133,18.5588235 48.6764706,32.1614663 48.6764706,48.9411765 C48.6764706,65.7208867 62.2791133,79.3235294 79.0588235,79.3235294 Z"></path>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/src/Runtime/ogl-runtime/tools/viewer/resources/images/arrow.png b/src/Runtime/ogl-runtime/tools/viewer/resources/images/arrow.png
new file mode 100644
index 00000000..40ebda88
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/resources/images/arrow.png
Binary files differ
diff --git a/src/Runtime/ogl-runtime/tools/viewer/resources/images/arrow@2x.png b/src/Runtime/ogl-runtime/tools/viewer/resources/images/arrow@2x.png
new file mode 100644
index 00000000..1a21ee06
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/resources/images/arrow@2x.png
Binary files differ
diff --git a/src/Runtime/ogl-runtime/tools/viewer/resources/images/check.png b/src/Runtime/ogl-runtime/tools/viewer/resources/images/check.png
new file mode 100644
index 00000000..5c1ef70a
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/resources/images/check.png
Binary files differ
diff --git a/src/Runtime/ogl-runtime/tools/viewer/resources/images/check@2x.png b/src/Runtime/ogl-runtime/tools/viewer/resources/images/check@2x.png
new file mode 100644
index 00000000..ed730bfe
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/resources/images/check@2x.png
Binary files differ
diff --git a/src/Runtime/ogl-runtime/tools/viewer/resources/images/viewer.icns b/src/Runtime/ogl-runtime/tools/viewer/resources/images/viewer.icns
new file mode 100644
index 00000000..b718d75c
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/resources/images/viewer.icns
Binary files differ
diff --git a/src/Runtime/ogl-runtime/tools/viewer/viewer.cpp b/src/Runtime/ogl-runtime/tools/viewer/viewer.cpp
new file mode 100644
index 00000000..bb6af59f
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/viewer.cpp
@@ -0,0 +1,416 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qsettings.h>
+#include <QtCore/qfileinfo.h>
+#include <QtStudio3D/private/q3dsviewersettings_p.h>
+#include <QtStudio3D/private/q3dspresentation_p.h>
+#include <QtGui/qguiapplication.h>
+#include <QtGui/qscreen.h>
+#include <QtQuick/qquickwindow.h>
+
+#include "viewer.h"
+#include "q3dspresentationitem_p.h"
+
+Viewer::Viewer(bool generatorMode, QObject *parent)
+ : QObject(parent)
+ , m_generatorMode(generatorMode)
+{
+ if (m_generatorMode)
+ setContentView(SequenceView);
+
+ m_connectTextResetTimer.setInterval(5000);
+ m_connectTextResetTimer.setSingleShot(true);
+ connect(&m_connectTextResetTimer, &QTimer::timeout, this, &Viewer::resetConnectionInfoText);
+}
+
+Viewer::~Viewer()
+{
+}
+
+void Viewer::connectRemote()
+{
+ if (m_remoteDeploymentReceiver) {
+ delete m_remoteDeploymentReceiver;
+ m_remoteDeploymentReceiver = 0;
+ Q_EMIT connectedChanged();
+ }
+
+ m_remoteDeploymentReceiver = new RemoteDeploymentReceiver(m_connectPort, this);
+ QString error = m_remoteDeploymentReceiver->startServer();
+ if (!error.isEmpty()) {
+ delete m_remoteDeploymentReceiver;
+ m_remoteDeploymentReceiver = nullptr;
+ setContentView(DefaultView);
+ m_qmlRootObject->setProperty("error", QVariant(error));
+ return;
+ }
+
+ resetConnectionInfoText();
+
+ connect(m_remoteDeploymentReceiver, &RemoteDeploymentReceiver::remoteConnected,
+ this, &Viewer::remoteConnected);
+
+ connect(m_remoteDeploymentReceiver, &RemoteDeploymentReceiver::remoteDisconnected,
+ this, &Viewer::remoteDisconnected);
+
+ connect(m_remoteDeploymentReceiver, &RemoteDeploymentReceiver::projectChanging,
+ this, &Viewer::remoteProjectChanging);
+
+ connect(m_remoteDeploymentReceiver, &RemoteDeploymentReceiver::projectChanged,
+ this, &Viewer::loadRemoteDeploymentReceiver);
+
+ Q_EMIT connectedChanged();
+}
+
+void Viewer::disconnectRemote()
+{
+ m_remoteDeploymentReceiver->disconnectRemote();
+}
+
+void Viewer::setVariantList(const QStringList &variantList)
+{
+ if (m_variantList != variantList) {
+ m_variantList = variantList;
+ Q_EMIT variantListChanged();
+ }
+}
+
+QStringList Viewer::variantList() const
+{
+ return m_variantList;
+}
+
+// Used to load files via command line and when using remote deployment
+void Viewer::loadFile(const QString &filename)
+{
+ QString targetFilename = filename;
+ // Try to find the application (*.uia) file for loading instead of the presentation (*.uip)
+ // in case we are connected to remote sender.
+ if (isConnected() && targetFilename.endsWith(QStringLiteral(".uip"))) {
+ targetFilename.chop(4);
+ targetFilename.append(QStringLiteral(".uia"));
+ QFileInfo targetfileInfo(targetFilename);
+ // uia not found, revert to given uip
+ if (!targetfileInfo.exists())
+ targetFilename = filename;
+ }
+
+ QFileInfo fileInfo(targetFilename);
+ if (!fileInfo.exists()) {
+ setContentView(DefaultView);
+ m_qmlRootObject->setProperty(
+ "error", QVariant(tr("Tried to load nonexistent file %1").arg(targetFilename)));
+ return;
+ }
+
+ QUrl sourceUrl = QUrl::fromLocalFile(fileInfo.absoluteFilePath());
+
+ setContentView(StudioView);
+
+ if (qmlStudio()) {
+ qmlStudio()->presentation()->setVariantList(m_variantList);
+ qmlStudio()->presentation()->setSource(sourceUrl);
+ }
+}
+
+QString Viewer::convertUrlListToFilename(const QList<QUrl> &list)
+{
+ for (const QUrl &url : list) {
+ QString str = url.toLocalFile();
+ if (!str.isEmpty()) {
+ if (QFileInfo(str).suffix() == QStringLiteral("uip")
+ || QFileInfo(str).suffix() == QStringLiteral("uia")) {
+ return str;
+ }
+ }
+ }
+ return QString();
+}
+
+void Viewer::restoreWindowState(QWindow *window)
+{
+ QSettings settings;
+ QRect geo = settings.value(QStringLiteral("WindowGeometry"), QRect()).toRect();
+ int visibility = settings.value(QStringLiteral("WindowVisibility"),
+ QWindow::Windowed).toInt();
+
+ // Do not restore geometry if resulting geometry means the center of the window
+ // would be offscreen on the virtual desktop
+ QRect vgeo = window->screen()->availableVirtualGeometry();
+ QPoint center(geo.x() + geo.width() / 2, geo.y() + geo.height() / 2);
+ bool offscreen = center.x() > vgeo.width() || center.x() < 0
+ || center.y() > vgeo.height() || center.y() < 0;
+
+ if (!offscreen && !geo.isNull()) {
+ // The first geometry set at startup may adjust the geometry according to pixel
+ // ratio if mouse cursor is on different screen than where window goes and the
+ // two screens have different pixel ratios. Setting geometry twice seems to
+ // work around this.
+ geo.adjust(0, 0, -1, 0);
+ window->setGeometry(geo);
+ geo.adjust(0, 0, 1, 0);
+ window->setGeometry(geo);
+ }
+
+ window->setVisibility(QWindow::Visibility(visibility));
+}
+
+void Viewer::storeWindowState(QWindow *window)
+{
+ QSettings settings;
+ settings.setValue(QStringLiteral("WindowGeometry"), window->geometry());
+ settings.setValue(QStringLiteral("WindowState"), window->visibility());
+}
+
+// Since we need mouse events for handling the swipe gesture in viewer, we need to generate
+// a fake event for the presentation.
+void Viewer::handleMousePress(int x, int y, int button, int buttons, int modifiers)
+{
+ if (qmlStudio()) {
+ QMouseEvent fakeEvent(QEvent::MouseButtonPress,
+ QPointF(x, y) * qmlStudio()->window()->devicePixelRatio(),
+ Qt::MouseButton(button),
+ Qt::MouseButtons(buttons),
+ Qt::KeyboardModifiers(modifiers));
+ qmlStudio()->presentation()->mousePressEvent(&fakeEvent);
+ }
+}
+
+void Viewer::handleMouseRelease(int x, int y, int button, int buttons, int modifiers)
+{
+ if (qmlStudio()) {
+ QMouseEvent fakeEvent(QEvent::MouseButtonRelease,
+ QPointF(x, y) * qmlStudio()->window()->devicePixelRatio(),
+ Qt::MouseButton(button),
+ Qt::MouseButtons(buttons),
+ Qt::KeyboardModifiers(modifiers));
+ qmlStudio()->presentation()->mouseReleaseEvent(&fakeEvent);
+ }
+}
+
+void Viewer::handleMouseMove(int x, int y, int button, int buttons, int modifiers)
+{
+ if (qmlStudio()) {
+ QMouseEvent fakeEvent(QEvent::MouseMove,
+ QPointF(x, y) * qmlStudio()->window()->devicePixelRatio(),
+ Qt::MouseButton(button),
+ Qt::MouseButtons(buttons),
+ Qt::KeyboardModifiers(modifiers));
+ qmlStudio()->presentation()->mouseMoveEvent(&fakeEvent);
+ }
+}
+
+void Viewer::setContentView(Viewer::ContentView view)
+{
+ if (view != m_contentView) {
+ m_qmlStudio = nullptr;
+ m_contentView = view;
+ Q_EMIT contentViewChanged();
+ }
+}
+
+Viewer::ContentView Viewer::contentView() const
+{
+ return m_contentView;
+}
+
+void Viewer::setOpenFolder(const QUrl &folder)
+{
+ QString localFolder = folder.toLocalFile();
+ QFileInfo fi(localFolder);
+ QString newDir;
+ if (fi.isDir())
+ newDir = fi.absoluteFilePath();
+ else
+ newDir = fi.absolutePath();
+ if (newDir != m_openFileDir) {
+ m_openFileDir = newDir;
+ QSettings settings;
+ settings.setValue(QStringLiteral("DirectoryOfLastOpen"), m_openFileDir);
+ Q_EMIT openFolderChanged();
+ }
+}
+
+QUrl Viewer::openFolder()
+{
+ if (m_openFileDir.size() == 0) {
+ QSettings settings;
+ m_openFileDir = settings.value(QStringLiteral("DirectoryOfLastOpen"),
+ QString("")).toString();
+#ifdef Q_OS_ANDROID
+ if (m_openFileDir.isEmpty())
+ m_openFileDir = QStringLiteral("/sdcard/qt3dviewer"); // Add default folder for Android
+#endif
+ }
+ return QUrl::fromLocalFile(m_openFileDir);
+}
+
+void Viewer::setConnectPort(int port)
+{
+ if (m_connectPort != port) {
+ QSettings settings;
+ m_connectPort = port;
+ settings.setValue(QStringLiteral("ConnectPort"), m_connectPort);
+ Q_EMIT connectPortChanged();
+ }
+}
+
+int Viewer::connectPort()
+{
+ if (m_connectPort < 0) {
+ QSettings settings;
+ m_connectPort = settings.value(QStringLiteral("ConnectPort"), 36000).toInt();
+ }
+ return m_connectPort;
+}
+
+QString Viewer::connectText() const
+{
+ return m_connectText;
+}
+
+bool Viewer::isConnected() const
+{
+ return m_remoteDeploymentReceiver ? m_remoteDeploymentReceiver->isConnected() : false;
+}
+
+void Viewer::setQmlRootObject(QObject *obj)
+{
+ m_qmlRootObject = obj;
+}
+
+void Viewer::loadRemoteDeploymentReceiver()
+{
+ Q_ASSERT(m_remoteDeploymentReceiver);
+ const QString remote = m_remoteDeploymentReceiver->fileName();
+ QMetaObject::invokeMethod(this, "loadFile", Qt::QueuedConnection, Q_ARG(QString, remote));
+}
+
+void Viewer::remoteProjectChanging()
+{
+ if (m_contentView != ConnectView)
+ setContentView(ConnectView);
+ m_connectText = tr("Loading remote project...");
+ Q_EMIT connectTextChanged();
+}
+
+void Viewer::remoteConnected()
+{
+ m_connectText = tr("Remote Connected");
+ Q_EMIT connectTextChanged();
+ Q_EMIT connectedChanged();
+ if (m_contentView != ConnectView)
+ Q_EMIT showInfoOverlay(m_connectText);
+}
+
+void Viewer::remoteDisconnected()
+{
+ m_connectText = tr("Remote Disconnected");
+ Q_EMIT connectTextChanged();
+ Q_EMIT connectedChanged();
+ if (m_contentView != ConnectView) {
+ Q_EMIT showInfoOverlay(m_connectText);
+ } else {
+ // Start timer to reset connection info text
+ m_connectTextResetTimer.start();
+ }
+}
+
+void Viewer::resetConnectionInfoText()
+{
+ m_connectText.clear();
+ QTextStream stream(&m_connectText);
+ stream << tr("Use IP: %1 and Port: %2\n"
+ "in Qt 3D Studio Editor to connect to this viewer.\n\n"
+ "Use File/Open... to open a local presentation.")
+ .arg(m_remoteDeploymentReceiver->hostAddress().toString())
+ .arg(QString::number(m_connectPort));
+ Q_EMIT connectTextChanged();
+}
+
+Q3DSStudio3D *Viewer::qmlStudio()
+{
+ if (m_contentView == StudioView) {
+ if (!m_qmlStudio) {
+ QObject *loadedContent = m_qmlRootObject->property("loadedContent").value<QObject *>();
+ m_qmlStudio = static_cast<Q3DSStudio3D *>(loadedContent);
+ }
+ } else {
+ m_qmlStudio = nullptr;
+ }
+ return m_qmlStudio;
+}
+
+void Viewer::generatorProgress(int totalFrames, int frameCount)
+{
+ QString progressString;
+ if (frameCount >= totalFrames) {
+ progressString =
+ QCoreApplication::translate(
+ "main", "Image sequence generation done! (%2 frames generated)")
+ .arg(totalFrames);
+ } else {
+ progressString =
+ QCoreApplication::translate("main", "Image sequence generation progress: %1 / %2")
+ .arg(frameCount).arg(totalFrames);
+ }
+ QObject *loadedContent = m_qmlRootObject->property("loadedContent").value<QObject *>();
+ loadedContent->setProperty("mainText", progressString);
+}
+
+void Viewer::generatorFinished(bool success, const QString &details)
+{
+ QObject *loadedContent = m_qmlRootObject->property("loadedContent").value<QObject *>();
+ if (success) {
+ loadedContent->setProperty("detailsText", details);
+ } else {
+ QString mainString =
+ QCoreApplication::translate("main", "Image sequence generation failed:");
+ loadedContent->setProperty("mainText", mainString);
+ loadedContent->setProperty("detailsText", details);
+ }
+}
+
+void Viewer::updateProgress(int percent)
+{
+ // Don't wait for 100%, as it'll already start loading and text isn't updated anymore
+ if (percent >= 99)
+ m_connectText = tr("Loading remote project...");
+ else
+ m_connectText = QStringLiteral("Receiving (%1%)").arg(percent);
+ Q_EMIT connectTextChanged();
+}
+
+void Viewer::setGeneratorDetails(const QString &filename)
+{
+ QObject *loadedContent = m_qmlRootObject->property("loadedContent").value<QObject *>();
+ loadedContent->setProperty("detailsText", filename);
+}
diff --git a/src/Runtime/ogl-runtime/tools/viewer/viewer.h b/src/Runtime/ogl-runtime/tools/viewer/viewer.h
new file mode 100644
index 00000000..1ce514ad
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/viewer.h
@@ -0,0 +1,128 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef VIEWER_H
+#define VIEWER_H
+
+#include "remotedeploymentreceiver.h"
+
+#include <QtCore/qobject.h>
+#include <QtCore/qurl.h>
+#include <QtCore/qtimer.h>
+#include <QtGui/qwindow.h>
+#include "q3dsstudio3d_p.h"
+
+class Viewer : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(ContentView contentView READ contentView WRITE setContentView NOTIFY contentViewChanged)
+ Q_PROPERTY(QUrl openFolder READ openFolder WRITE setOpenFolder NOTIFY openFolderChanged)
+ Q_PROPERTY(int connectPort READ connectPort WRITE setConnectPort NOTIFY connectPortChanged)
+ Q_PROPERTY(QString connectText READ connectText NOTIFY connectTextChanged)
+ Q_PROPERTY(bool connected READ isConnected NOTIFY connectedChanged)
+ Q_PROPERTY(QStringList variantList READ variantList WRITE setVariantList NOTIFY variantListChanged)
+
+public:
+ enum ContentView {
+ DefaultView,
+ StudioView,
+ ConnectView,
+ SequenceView
+ };
+
+ Q_ENUM(ContentView)
+
+ explicit Viewer(bool generatorMode, QObject *parent = nullptr);
+ ~Viewer();
+
+ Q_INVOKABLE void connectRemote();
+ Q_INVOKABLE void disconnectRemote();
+ Q_INVOKABLE void loadFile(const QString &filename);
+ Q_INVOKABLE QString convertUrlListToFilename(const QList<QUrl> &list);
+ Q_INVOKABLE void restoreWindowState(QWindow *window);
+ Q_INVOKABLE void storeWindowState(QWindow *window);
+
+ Q_INVOKABLE void handleMousePress(int x, int y, int button, int buttons, int modifiers);
+ Q_INVOKABLE void handleMouseRelease(int x, int y, int button, int buttons, int modifiers);
+ Q_INVOKABLE void handleMouseMove(int x, int y, int button, int buttons, int modifiers);
+
+ void setVariantList(const QStringList &variantList);
+ QStringList variantList() const;
+ void setContentView(ContentView view);
+ ContentView contentView() const;
+ void setOpenFolder(const QUrl &folder);
+ QUrl openFolder(); // not const since it potentially updates from settings
+ void setConnectPort(int port);
+ int connectPort(); // not const since it potentially updates from settings
+ QString connectText() const;
+ bool isConnected() const;
+
+ void setQmlRootObject(QObject *obj);
+
+ void loadProject(const QByteArray &data);
+ void updateProgress(int percent);
+ void setGeneratorDetails(const QString &filename);
+
+public Q_SLOTS:
+ void generatorProgress(int totalFrames, int frameCount);
+ void generatorFinished(bool success, const QString &details);
+
+private Q_SLOTS:
+ void loadRemoteDeploymentReceiver();
+ void remoteProjectChanging();
+ void remoteConnected();
+ void remoteDisconnected();
+ void resetConnectionInfoText();
+
+Q_SIGNALS:
+ void contentViewChanged();
+ void openFolderChanged();
+ void connectPortChanged();
+ void connectTextChanged();
+ void connectedChanged();
+ void variantListChanged();
+ void showInfoOverlay(const QString &infoStr);
+
+private:
+ Q3DSStudio3D *qmlStudio();
+
+ QString m_openFileDir;
+ QStringList m_variantList;
+ RemoteDeploymentReceiver *m_remoteDeploymentReceiver = nullptr;
+ bool m_generatorMode = false;
+ ContentView m_contentView = DefaultView;
+ QObject *m_qmlRootObject = nullptr;
+ int m_connectPort = -1;
+ QString m_connectText;
+ Q3DSStudio3D *m_qmlStudio = nullptr;
+ QTimer m_connectTextResetTimer;
+};
+
+#endif // VIEWER_H
diff --git a/src/Runtime/ogl-runtime/tools/viewer/viewer.pro b/src/Runtime/ogl-runtime/tools/viewer/viewer.pro
new file mode 100644
index 00000000..cad56640
--- /dev/null
+++ b/src/Runtime/ogl-runtime/tools/viewer/viewer.pro
@@ -0,0 +1,49 @@
+include($$PWD/../../commoninclude.pri)
+
+TEMPLATE = app
+TARGET = Qt3DViewer
+QT += qml quickcontrols2 studio3d-private
+
+INCLUDEPATH += $$PWD/../../src/api/studio3dqml
+INCLUDEPATH += $$PWD/../../src/api/studio3d
+
+RESOURCES += Viewer.qrc
+RC_ICONS = resources/images/3D-studio-viewer.ico
+
+ICON = resources/images/viewer.icns
+
+SOURCES += \
+ $$PWD/../../src/api/studio3dqml/q3dsstudio3d.cpp \
+ $$PWD/../../src/api/studio3dqml/q3dsrenderer.cpp \
+ $$PWD/../../src/api/studio3dqml/q3dspresentationitem.cpp \
+ main.cpp \
+ viewer.cpp \
+ remotedeploymentreceiver.cpp
+
+HEADERS += \
+ $$PWD/../../src/api/studio3dqml/q3dsstudio3d_p.h \
+ $$PWD/../../src/api/studio3dqml/q3dsrenderer_p.h \
+ $$PWD/../../src/api/studio3dqml/q3dspresentationitem_p.h \
+ viewer.h \
+ remotedeploymentreceiver.h
+
+android: {
+SOURCES += \
+ $$PWD/../../src/api/studio3d/q3dsviewersettings.cpp \
+ $$PWD/../../src/api/studio3d/q3dspresentation.cpp \
+ $$PWD/../../src/api/studio3d/q3dsdatainput.cpp
+
+HEADERS += \
+ $$PWD/../../src/api/studio3d/q3dsviewersettings.h \
+ $$PWD/../../src/api/studio3d/q3dspresentation.h \
+ $$PWD/../../src/api/studio3d/q3dsdatainput.h
+}
+
+LIBS += \
+ -lqt3dsopengl$$qtPlatformTargetSuffix() \
+ -lqt3dsqmlstreamer$$qtPlatformTargetSuffix()
+
+macos:QMAKE_RPATHDIR += @executable_path/../../../../lib
+
+target.path = $$[QT_INSTALL_BINS]
+INSTALLS += target
diff --git a/src/Runtime/ogl-runtime/utils.pri b/src/Runtime/ogl-runtime/utils.pri
new file mode 100644
index 00000000..8d56baa4
--- /dev/null
+++ b/src/Runtime/ogl-runtime/utils.pri
@@ -0,0 +1,8 @@
+# Add our static libs to target dependencies so we detect changes to them
+defineReplace(fixLibPredeps) {
+ # TODO Needs something more clever once debug libs are correctly suffixed
+ for(lib, $${2}) {
+ PREDEPS *= $${1}/$${QMAKE_PREFIX_STATICLIB}$${lib}$$qtPlatformTargetSuffix().$${QMAKE_EXTENSION_STATICLIB}
+ }
+ return($$PREDEPS)
+}