godot/thirdparty/libktx/lib/gl_format.h

/*
================================================================================================

Description	:	OpenGL formats/types and properties.
Author		:	J.M.P. van Waveren
Date		:	07/17/2016
Language	:	C99
Format		:	Real tabs with the tab size equal to 4 spaces.
Copyright	:	Copyright (c) 2016 Oculus VR, LLC. All Rights reserved.


LICENSE
=======

Copyright 2016 Oculus VR, LLC.
SPDX-License-Identifier: Apache-2.0


DESCRIPTION
===========

This header stores the OpenGL formats/types and two simple routines
to derive the format/type from an internal format. These routines
are useful to verify the data in a KTX container files. The OpenGL
constants are generally useful to convert files like KTX and glTF
to different graphics APIs.

This header stores the OpenGL formats/types that are used as parameters
to the following OpenGL functions:

void glTexImage2D( GLenum target, GLint level, GLint internalFormat,
	GLsizei width, GLsizei height, GLint border,
	GLenum format, GLenum type, const GLvoid * data );
void glTexImage3D( GLenum target, GLint level, GLint internalFormat,
	GLsizei width, GLsizei height, GLsizei depth, GLint border,
	GLenum format, GLenum type, const GLvoid * data );
void glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat,
	GLsizei width, GLsizei height, GLint border,
	GLsizei imageSize, const GLvoid * data );
void glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat,
	GLsizei width, GLsizei height, GLsizei depth, GLint border,
	GLsizei imageSize, const GLvoid * data );
void glTexStorage2D( GLenum target, GLsizei levels, GLenum internalformat,
	GLsizei width, GLsizei height );
void glTexStorage3D( GLenum target, GLsizei levels, GLenum internalformat,
	GLsizei width, GLsizei height, GLsizei depth );
void glVertexAttribPointer( GLuint index, GLint size, GLenum type, GLboolean normalized,
	GLsizei stride, const GLvoid * pointer);


IMPLEMENTATION
==============

This file does not include OpenGL / OpenGL ES headers because:

  1. Including OpenGL / OpenGL ES headers is platform dependent and
     may require a separate installation of an OpenGL SDK.
  2. The OpenGL format/type constants are the same between extensions and core.
  3. The OpenGL format/type constants are the same between OpenGL and OpenGL ES.
  4. The OpenGL constants in this header are also used to derive Vulkan formats
     from the OpenGL formats/types stored in files like KTX and glTF. These file
     formats may use OpenGL formats/types that are not supported by the OpenGL
     implementation on the platform but are supported by the Vulkan implementation.


ENTRY POINTS
============

static inline GLenum glGetFormatFromInternalFormat( const GLenum internalFormat );
static inline GLenum glGetTypeFromInternalFormat( const GLenum internalFormat );
static inline void glGetFormatSize( const GLenum internalFormat, GlFormatSize * pFormatSize );
static inline unsigned int glGetTypeSizeFromType( const GLenum type );

MODIFICATIONS for use in libktx
===============================

2018.3.23 Added glGetTypeSizeFromType. Mark Callow, Edgewise Consulting.
2019.3.09 #if 0 around GL type declarations.            〃
2019.5.30 Use common ktxFormatSize to return results.         〃
2019.5.30 Return blockSizeInBits 0 for default case of glGetFormatSize. 〃

================================================================================================
*/

#if !defined( GL_FORMAT_H )
#define GL_FORMAT_H

#include <assert.h>
#include "formatsize.h"
#include "vkformat_enum.h"

#if defined(_WIN32) && !defined(__MINGW32__)
#if !defined(NOMINMAX)
#define NOMINMAX
#endif // !defined(NOMINMAX)
#ifndef __cplusplus
#undef inline
#define inline __inline
#endif // __cplusplus
#endif


/*
===========================================================================
Avoid warnings or even errors when using strict C99. "Redefinition of
(type) is a C11 feature." All includers in libktx also include ktx.h where
they are also defined.
===========================================================================
*/
#if 0
typedef unsigned int GLenum;
typedef unsigned char GLboolean;
typedef unsigned int GLuint;
#endif

#if !defined( GL_INVALID_VALUE )
#define GL_INVALID_VALUE
#endif

/*
================================================================================================================================

Format to glTexImage2D and glTexImage3D.

================================================================================================================================
*/

#if !defined( GL_RED )
#define GL_RED
#endif
#if !defined( GL_GREEN )
#define GL_GREEN
#endif
#if !defined( GL_BLUE )
#define GL_BLUE
#endif
#if !defined( GL_ALPHA )
#define GL_ALPHA
#endif
#if !defined( GL_LUMINANCE )
#define GL_LUMINANCE
#endif
#if !defined( GL_SLUMINANCE )
#define GL_SLUMINANCE
#endif
#if !defined( GL_LUMINANCE_ALPHA )
#define GL_LUMINANCE_ALPHA
#endif
#if !defined( GL_SLUMINANCE_ALPHA )
#define GL_SLUMINANCE_ALPHA
#endif
#if !defined( GL_INTENSITY )
#define GL_INTENSITY
#endif
#if !defined( GL_RG )
#define GL_RG
#endif
#if !defined( GL_RGB )
#define GL_RGB
#endif
#if !defined( GL_BGR )
#define GL_BGR
#endif
#if !defined( GL_RGBA )
#define GL_RGBA
#endif
#if !defined( GL_BGRA )
#define GL_BGRA
#endif
#if !defined( GL_RED_INTEGER )
#define GL_RED_INTEGER
#endif
#if !defined( GL_GREEN_INTEGER )
#define GL_GREEN_INTEGER
#endif
#if !defined( GL_BLUE_INTEGER )
#define GL_BLUE_INTEGER
#endif
#if !defined( GL_ALPHA_INTEGER )
#define GL_ALPHA_INTEGER
#endif
#if !defined( GL_LUMINANCE_INTEGER )
#define GL_LUMINANCE_INTEGER
#endif
#if !defined( GL_LUMINANCE_ALPHA_INTEGER )
#define GL_LUMINANCE_ALPHA_INTEGER
#endif
#if !defined( GL_RG_INTEGER )
#define GL_RG_INTEGER
#endif
#if !defined( GL_RGB_INTEGER )
#define GL_RGB_INTEGER
#endif
#if !defined( GL_BGR_INTEGER )
#define GL_BGR_INTEGER
#endif
#if !defined( GL_RGBA_INTEGER )
#define GL_RGBA_INTEGER
#endif
#if !defined( GL_BGRA_INTEGER )
#define GL_BGRA_INTEGER
#endif
#if !defined( GL_COLOR_INDEX )
#define GL_COLOR_INDEX
#endif
#if !defined( GL_STENCIL_INDEX )
#define GL_STENCIL_INDEX
#endif
#if !defined( GL_DEPTH_COMPONENT )
#define GL_DEPTH_COMPONENT
#endif
#if !defined( GL_DEPTH_STENCIL )
#define GL_DEPTH_STENCIL
#endif

/*
================================================================================================================================

Type to glTexImage2D, glTexImage3D and glVertexAttribPointer.

================================================================================================================================
*/

#if !defined( GL_BYTE )
#define GL_BYTE
#endif
#if !defined( GL_UNSIGNED_BYTE )
#define GL_UNSIGNED_BYTE
#endif
#if !defined( GL_SHORT )
#define GL_SHORT
#endif
#if !defined( GL_UNSIGNED_SHORT )
#define GL_UNSIGNED_SHORT
#endif
#if !defined( GL_INT )
#define GL_INT
#endif
#if !defined( GL_UNSIGNED_INT )
#define GL_UNSIGNED_INT
#endif
#if !defined( GL_INT64 )
#define GL_INT64
#endif
#if !defined( GL_UNSIGNED_INT64 )
#define GL_UNSIGNED_INT64
#endif
#if !defined( GL_HALF_FLOAT )
#define GL_HALF_FLOAT
#endif
#if !defined( GL_HALF_FLOAT_OES )
#define GL_HALF_FLOAT_OES
#endif
#if !defined( GL_FLOAT )
#define GL_FLOAT
#endif
#if !defined( GL_DOUBLE )
#define GL_DOUBLE
#endif
#if !defined( GL_UNSIGNED_BYTE_3_3_2 )
#define GL_UNSIGNED_BYTE_3_3_2
#endif
#if !defined( GL_UNSIGNED_BYTE_2_3_3_REV )
#define GL_UNSIGNED_BYTE_2_3_3_REV
#endif
#if !defined( GL_UNSIGNED_SHORT_5_6_5 )
#define GL_UNSIGNED_SHORT_5_6_5
#endif
#if !defined( GL_UNSIGNED_SHORT_5_6_5_REV )
#define GL_UNSIGNED_SHORT_5_6_5_REV
#endif
#if !defined( GL_UNSIGNED_SHORT_4_4_4_4 )
#define GL_UNSIGNED_SHORT_4_4_4_4
#endif
#if !defined( GL_UNSIGNED_SHORT_4_4_4_4_REV )
#define GL_UNSIGNED_SHORT_4_4_4_4_REV
#endif
#if !defined( GL_UNSIGNED_SHORT_5_5_5_1 )
#define GL_UNSIGNED_SHORT_5_5_5_1
#endif
#if !defined( GL_UNSIGNED_SHORT_1_5_5_5_REV )
#define GL_UNSIGNED_SHORT_1_5_5_5_REV
#endif
#if !defined( GL_UNSIGNED_INT_8_8_8_8 )
#define GL_UNSIGNED_INT_8_8_8_8
#endif
#if !defined( GL_UNSIGNED_INT_8_8_8_8_REV )
#define GL_UNSIGNED_INT_8_8_8_8_REV
#endif
#if !defined( GL_UNSIGNED_INT_10_10_10_2 )
#define GL_UNSIGNED_INT_10_10_10_2
#endif
#if !defined( GL_UNSIGNED_INT_2_10_10_10_REV )
#define GL_UNSIGNED_INT_2_10_10_10_REV
#endif
#if !defined( GL_UNSIGNED_INT_10F_11F_11F_REV )
#define GL_UNSIGNED_INT_10F_11F_11F_REV
#endif
#if !defined( GL_UNSIGNED_INT_5_9_9_9_REV )
#define GL_UNSIGNED_INT_5_9_9_9_REV
#endif
#if !defined( GL_UNSIGNED_INT_24_8 )
#define GL_UNSIGNED_INT_24_8
#endif
#if !defined( GL_FLOAT_32_UNSIGNED_INT_24_8_REV )
#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV
#endif

/*
================================================================================================================================

Internal format to glTexImage2D, glTexImage3D, glCompressedTexImage2D, glCompressedTexImage3D, glTexStorage2D, glTexStorage3D

================================================================================================================================
*/

//
// 8 bits per component
//

#if !defined( GL_R8 )
#define GL_R8
#endif
#if !defined( GL_RG8 )
#define GL_RG8
#endif
#if !defined( GL_RGB8 )
#define GL_RGB8
#endif
#if !defined( GL_RGBA8 )
#define GL_RGBA8
#endif

#if !defined( GL_R8_SNORM )
#define GL_R8_SNORM
#endif
#if !defined( GL_RG8_SNORM )
#define GL_RG8_SNORM
#endif
#if !defined( GL_RGB8_SNORM )
#define GL_RGB8_SNORM
#endif
#if !defined( GL_RGBA8_SNORM )
#define GL_RGBA8_SNORM
#endif

#if !defined( GL_R8UI )
#define GL_R8UI
#endif
#if !defined( GL_RG8UI )
#define GL_RG8UI
#endif
#if !defined( GL_RGB8UI )
#define GL_RGB8UI
#endif
#if !defined( GL_RGBA8UI )
#define GL_RGBA8UI
#endif

#if !defined( GL_R8I )
#define GL_R8I
#endif
#if !defined( GL_RG8I )
#define GL_RG8I
#endif
#if !defined( GL_RGB8I )
#define GL_RGB8I
#endif
#if !defined( GL_RGBA8I )
#define GL_RGBA8I
#endif

#if !defined( GL_SR8 )
#define GL_SR8
#endif
#if !defined( GL_SRG8 )
#define GL_SRG8
#endif
#if !defined( GL_SRGB8 )
#define GL_SRGB8
#endif
#if !defined( GL_SRGB8_ALPHA8 )
#define GL_SRGB8_ALPHA8
#endif

//
// 16 bits per component
//

#if !defined( GL_R16 )
#define GL_R16
#endif
#if !defined( GL_RG16 )
#define GL_RG16
#endif
#if !defined( GL_RGB16 )
#define GL_RGB16
#endif
#if !defined( GL_RGBA16 )
#define GL_RGBA16
#endif

#if !defined( GL_R16_SNORM )
#define GL_R16_SNORM
#endif
#if !defined( GL_RG16_SNORM )
#define GL_RG16_SNORM
#endif
#if !defined( GL_RGB16_SNORM )
#define GL_RGB16_SNORM
#endif
#if !defined( GL_RGBA16_SNORM )
#define GL_RGBA16_SNORM
#endif

#if !defined( GL_R16UI )
#define GL_R16UI
#endif
#if !defined( GL_RG16UI )
#define GL_RG16UI
#endif
#if !defined( GL_RGB16UI )
#define GL_RGB16UI
#endif
#if !defined( GL_RGBA16UI )
#define GL_RGBA16UI
#endif

#if !defined( GL_R16I )
#define GL_R16I
#endif
#if !defined( GL_RG16I )
#define GL_RG16I
#endif
#if !defined( GL_RGB16I )
#define GL_RGB16I
#endif
#if !defined( GL_RGBA16I )
#define GL_RGBA16I
#endif

#if !defined( GL_R16F )
#define GL_R16F
#endif
#if !defined( GL_RG16F )
#define GL_RG16F
#endif
#if !defined( GL_RGB16F )
#define GL_RGB16F
#endif
#if !defined( GL_RGBA16F )
#define GL_RGBA16F
#endif

//
// 32 bits per component
//

#if !defined( GL_R32UI )
#define GL_R32UI
#endif
#if !defined( GL_RG32UI )
#define GL_RG32UI
#endif
#if !defined( GL_RGB32UI )
#define GL_RGB32UI
#endif
#if !defined( GL_RGBA32UI )
#define GL_RGBA32UI
#endif

#if !defined( GL_R32I )
#define GL_R32I
#endif
#if !defined( GL_RG32I )
#define GL_RG32I
#endif
#if !defined( GL_RGB32I )
#define GL_RGB32I
#endif
#if !defined( GL_RGBA32I )
#define GL_RGBA32I
#endif

#if !defined( GL_R32F )
#define GL_R32F
#endif
#if !defined( GL_RG32F )
#define GL_RG32F
#endif
#if !defined( GL_RGB32F )
#define GL_RGB32F
#endif
#if !defined( GL_RGBA32F )
#define GL_RGBA32F
#endif

//
// Packed
//

#if !defined( GL_R3_G3_B2 )
#define GL_R3_G3_B2
#endif
#if !defined( GL_RGB4 )
#define GL_RGB4
#endif
#if !defined( GL_RGB5 )
#define GL_RGB5
#endif
#if !defined( GL_RGB565 )
#define GL_RGB565
#endif
#if !defined( GL_RGB10 )
#define GL_RGB10
#endif
#if !defined( GL_RGB12 )
#define GL_RGB12
#endif
#if !defined( GL_RGBA2 )
#define GL_RGBA2
#endif
#if !defined( GL_RGBA4 )
#define GL_RGBA4
#endif
#if !defined( GL_RGBA12 )
#define GL_RGBA12
#endif
#if !defined( GL_RGB5_A1 )
#define GL_RGB5_A1
#endif
#if !defined( GL_RGB10_A2 )
#define GL_RGB10_A2
#endif
#if !defined( GL_RGB10_A2UI )
#define GL_RGB10_A2UI
#endif
#if !defined( GL_R11F_G11F_B10F )
#define GL_R11F_G11F_B10F
#endif
#if !defined( GL_RGB9_E5 )
#define GL_RGB9_E5
#endif

//
// Alpha
//

#if !defined( GL_ALPHA4 )
#define GL_ALPHA4
#endif
#if !defined( GL_ALPHA8 )
#define GL_ALPHA8
#endif
#if !defined( GL_ALPHA8_SNORM )
#define GL_ALPHA8_SNORM
#endif
#if !defined( GL_ALPHA8UI_EXT )
#define GL_ALPHA8UI_EXT
#endif
#if !defined( GL_ALPHA8I_EXT )
#define GL_ALPHA8I_EXT
#endif
#if !defined( GL_ALPHA12 )
#define GL_ALPHA12
#endif
#if !defined( GL_ALPHA16 )
#define GL_ALPHA16
#endif
#if !defined( GL_ALPHA16_SNORM )
#define GL_ALPHA16_SNORM
#endif
#if !defined( GL_ALPHA16UI_EXT )
#define GL_ALPHA16UI_EXT
#endif
#if !defined( GL_ALPHA16I_EXT )
#define GL_ALPHA16I_EXT
#endif
#if !defined( GL_ALPHA16F_ARB )
#define GL_ALPHA16F_ARB
#endif
#if !defined( GL_ALPHA32UI_EXT )
#define GL_ALPHA32UI_EXT
#endif
#if !defined( GL_ALPHA32I_EXT )
#define GL_ALPHA32I_EXT
#endif
#if !defined( GL_ALPHA32F_ARB )
#define GL_ALPHA32F_ARB
#endif

//
// Luminance
//

#if !defined( GL_LUMINANCE4 )
#define GL_LUMINANCE4
#endif
#if !defined( GL_LUMINANCE8 )
#define GL_LUMINANCE8
#endif
#if !defined( GL_LUMINANCE8_SNORM )
#define GL_LUMINANCE8_SNORM
#endif
#if !defined( GL_SLUMINANCE8 )
#define GL_SLUMINANCE8
#endif
#if !defined( GL_LUMINANCE8UI_EXT )
#define GL_LUMINANCE8UI_EXT
#endif
#if !defined( GL_LUMINANCE8I_EXT )
#define GL_LUMINANCE8I_EXT
#endif
#if !defined( GL_LUMINANCE12 )
#define GL_LUMINANCE12
#endif
#if !defined( GL_LUMINANCE16 )
#define GL_LUMINANCE16
#endif
#if !defined( GL_LUMINANCE16_SNORM )
#define GL_LUMINANCE16_SNORM
#endif
#if !defined( GL_LUMINANCE16UI_EXT )
#define GL_LUMINANCE16UI_EXT
#endif
#if !defined( GL_LUMINANCE16I_EXT )
#define GL_LUMINANCE16I_EXT
#endif
#if !defined( GL_LUMINANCE16F_ARB )
#define GL_LUMINANCE16F_ARB
#endif
#if !defined( GL_LUMINANCE32UI_EXT )
#define GL_LUMINANCE32UI_EXT
#endif
#if !defined( GL_LUMINANCE32I_EXT )
#define GL_LUMINANCE32I_EXT
#endif
#if !defined( GL_LUMINANCE32F_ARB )
#define GL_LUMINANCE32F_ARB
#endif

//
// Luminance/Alpha
//

#if !defined( GL_LUMINANCE4_ALPHA4 )
#define GL_LUMINANCE4_ALPHA4
#endif
#if !defined( GL_LUMINANCE6_ALPHA2 )
#define GL_LUMINANCE6_ALPHA2
#endif
#if !defined( GL_LUMINANCE8_ALPHA8 )
#define GL_LUMINANCE8_ALPHA8
#endif
#if !defined( GL_LUMINANCE8_ALPHA8_SNORM )
#define GL_LUMINANCE8_ALPHA8_SNORM
#endif
#if !defined( GL_SLUMINANCE8_ALPHA8 )
#define GL_SLUMINANCE8_ALPHA8
#endif
#if !defined( GL_LUMINANCE_ALPHA8UI_EXT )
#define GL_LUMINANCE_ALPHA8UI_EXT
#endif
#if !defined( GL_LUMINANCE_ALPHA8I_EXT )
#define GL_LUMINANCE_ALPHA8I_EXT
#endif
#if !defined( GL_LUMINANCE12_ALPHA4 )
#define GL_LUMINANCE12_ALPHA4
#endif
#if !defined( GL_LUMINANCE12_ALPHA12 )
#define GL_LUMINANCE12_ALPHA12
#endif
#if !defined( GL_LUMINANCE16_ALPHA16 )
#define GL_LUMINANCE16_ALPHA16
#endif
#if !defined( GL_LUMINANCE16_ALPHA16_SNORM )
#define GL_LUMINANCE16_ALPHA16_SNORM
#endif
#if !defined( GL_LUMINANCE_ALPHA16UI_EXT )
#define GL_LUMINANCE_ALPHA16UI_EXT
#endif
#if !defined( GL_LUMINANCE_ALPHA16I_EXT )
#define GL_LUMINANCE_ALPHA16I_EXT
#endif
#if !defined( GL_LUMINANCE_ALPHA16F_ARB )
#define GL_LUMINANCE_ALPHA16F_ARB
#endif
#if !defined( GL_LUMINANCE_ALPHA32UI_EXT )
#define GL_LUMINANCE_ALPHA32UI_EXT
#endif
#if !defined( GL_LUMINANCE_ALPHA32I_EXT )
#define GL_LUMINANCE_ALPHA32I_EXT
#endif
#if !defined( GL_LUMINANCE_ALPHA32F_ARB )
#define GL_LUMINANCE_ALPHA32F_ARB
#endif

//
// Intensity
//

#if !defined( GL_INTENSITY4 )
#define GL_INTENSITY4
#endif
#if !defined( GL_INTENSITY8 )
#define GL_INTENSITY8
#endif
#if !defined( GL_INTENSITY8_SNORM )
#define GL_INTENSITY8_SNORM
#endif
#if !defined( GL_INTENSITY8UI_EXT )
#define GL_INTENSITY8UI_EXT
#endif
#if !defined( GL_INTENSITY8I_EXT )
#define GL_INTENSITY8I_EXT
#endif
#if !defined( GL_INTENSITY12 )
#define GL_INTENSITY12
#endif
#if !defined( GL_INTENSITY16 )
#define GL_INTENSITY16
#endif
#if !defined( GL_INTENSITY16_SNORM )
#define GL_INTENSITY16_SNORM
#endif
#if !defined( GL_INTENSITY16UI_EXT )
#define GL_INTENSITY16UI_EXT
#endif
#if !defined( GL_INTENSITY16I_EXT )
#define GL_INTENSITY16I_EXT
#endif
#if !defined( GL_INTENSITY16F_ARB )
#define GL_INTENSITY16F_ARB
#endif
#if !defined( GL_INTENSITY32UI_EXT )
#define GL_INTENSITY32UI_EXT
#endif
#if !defined( GL_INTENSITY32I_EXT )
#define GL_INTENSITY32I_EXT
#endif
#if !defined( GL_INTENSITY32F_ARB )
#define GL_INTENSITY32F_ARB
#endif

//
// Generic compression
//

#if !defined( GL_COMPRESSED_RED )
#define GL_COMPRESSED_RED
#endif
#if !defined( GL_COMPRESSED_ALPHA )
#define GL_COMPRESSED_ALPHA
#endif
#if !defined( GL_COMPRESSED_LUMINANCE )
#define GL_COMPRESSED_LUMINANCE
#endif
#if !defined( GL_COMPRESSED_SLUMINANCE )
#define GL_COMPRESSED_SLUMINANCE
#endif
#if !defined( GL_COMPRESSED_LUMINANCE_ALPHA )
#define GL_COMPRESSED_LUMINANCE_ALPHA
#endif
#if !defined( GL_COMPRESSED_SLUMINANCE_ALPHA )
#define GL_COMPRESSED_SLUMINANCE_ALPHA
#endif
#if !defined( GL_COMPRESSED_INTENSITY )
#define GL_COMPRESSED_INTENSITY
#endif
#if !defined( GL_COMPRESSED_RG )
#define GL_COMPRESSED_RG
#endif
#if !defined( GL_COMPRESSED_RGB )
#define GL_COMPRESSED_RGB
#endif
#if !defined( GL_COMPRESSED_RGBA )
#define GL_COMPRESSED_RGBA
#endif
#if !defined( GL_COMPRESSED_SRGB )
#define GL_COMPRESSED_SRGB
#endif
#if !defined( GL_COMPRESSED_SRGB_ALPHA )
#define GL_COMPRESSED_SRGB_ALPHA
#endif

//
// FXT1
//

#if !defined( GL_COMPRESSED_RGB_FXT1_3DFX )
#define GL_COMPRESSED_RGB_FXT1_3DFX
#endif
#if !defined( GL_COMPRESSED_RGBA_FXT1_3DFX )
#define GL_COMPRESSED_RGBA_FXT1_3DFX
#endif

//
// S3TC/DXT/BC
//

#if !defined( GL_COMPRESSED_RGB_S3TC_DXT1_EXT )
#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT
#endif
#if !defined( GL_COMPRESSED_RGBA_S3TC_DXT1_EXT )
#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
#endif
#if !defined( GL_COMPRESSED_RGBA_S3TC_DXT3_EXT )
#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
#endif
#if !defined( GL_COMPRESSED_RGBA_S3TC_DXT5_EXT )
#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
#endif

#if !defined( GL_COMPRESSED_SRGB_S3TC_DXT1_EXT )
#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT
#endif
#if !defined( GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT )
#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT
#endif
#if !defined( GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT )
#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT
#endif
#if !defined( GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT )
#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT
#endif

#if !defined( GL_COMPRESSED_LUMINANCE_LATC1_EXT )
#define GL_COMPRESSED_LUMINANCE_LATC1_EXT
#endif
#if !defined( GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT )
#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT
#endif
#if !defined( GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT )
#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT
#endif
#if !defined( GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT )
#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT
#endif

#if !defined( GL_COMPRESSED_RED_RGTC1 )
#define GL_COMPRESSED_RED_RGTC1
#endif
#if !defined( GL_COMPRESSED_RG_RGTC2 )
#define GL_COMPRESSED_RG_RGTC2
#endif
#if !defined( GL_COMPRESSED_SIGNED_RED_RGTC1 )
#define GL_COMPRESSED_SIGNED_RED_RGTC1
#endif
#if !defined( GL_COMPRESSED_SIGNED_RG_RGTC2 )
#define GL_COMPRESSED_SIGNED_RG_RGTC2
#endif

#if !defined( GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT )
#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
#endif
#if !defined( GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT )
#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
#endif
#if !defined( GL_COMPRESSED_RGBA_BPTC_UNORM )
#define GL_COMPRESSED_RGBA_BPTC_UNORM
#endif
#if !defined( GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM )
#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
#endif

//
// ETC
//

#if !defined( GL_ETC1_RGB8_OES )
#define GL_ETC1_RGB8_OES
#endif

#if !defined( GL_COMPRESSED_RGB8_ETC2 )
#define GL_COMPRESSED_RGB8_ETC2
#endif
#if !defined( GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 )
#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
#endif
#if !defined( GL_COMPRESSED_RGBA8_ETC2_EAC )
#define GL_COMPRESSED_RGBA8_ETC2_EAC
#endif

#if !defined( GL_COMPRESSED_SRGB8_ETC2 )
#define GL_COMPRESSED_SRGB8_ETC2
#endif
#if !defined( GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 )
#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
#endif
#if !defined( GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC )
#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
#endif

#if !defined( GL_COMPRESSED_R11_EAC )
#define GL_COMPRESSED_R11_EAC
#endif
#if !defined( GL_COMPRESSED_RG11_EAC )
#define GL_COMPRESSED_RG11_EAC
#endif
#if !defined( GL_COMPRESSED_SIGNED_R11_EAC )
#define GL_COMPRESSED_SIGNED_R11_EAC
#endif
#if !defined( GL_COMPRESSED_SIGNED_RG11_EAC )
#define GL_COMPRESSED_SIGNED_RG11_EAC
#endif

//
// PVRTC
//

#if !defined( GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG )
#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG
#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG
#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG
#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
#endif
#if !defined( GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG )
#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG
#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG
#endif
#if !defined( GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT )
#define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT
#define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT
#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT
#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT
#endif
#if !defined( GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG )
#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG
#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG
#endif

//
// ASTC
//

#if !defined( GL_COMPRESSED_RGBA_ASTC_4x4_KHR )
#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR
#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR
#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR
#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR
#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR
#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR
#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR
#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR
#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR
#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR
#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR
#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR
#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR
#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR
#endif

#if !defined( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR )
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR
#endif

#if !defined( GL_COMPRESSED_RGBA_ASTC_3x3x3_OES )
#define GL_COMPRESSED_RGBA_ASTC_3x3x3_OES
#define GL_COMPRESSED_RGBA_ASTC_4x3x3_OES
#define GL_COMPRESSED_RGBA_ASTC_4x4x3_OES
#define GL_COMPRESSED_RGBA_ASTC_4x4x4_OES
#define GL_COMPRESSED_RGBA_ASTC_5x4x4_OES
#define GL_COMPRESSED_RGBA_ASTC_5x5x4_OES
#define GL_COMPRESSED_RGBA_ASTC_5x5x5_OES
#define GL_COMPRESSED_RGBA_ASTC_6x5x5_OES
#define GL_COMPRESSED_RGBA_ASTC_6x6x5_OES
#define GL_COMPRESSED_RGBA_ASTC_6x6x6_OES
#endif

#if !defined( GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES )
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES
#endif

//
// ATC
//

#if !defined( GL_ATC_RGB_AMD )
#define GL_ATC_RGB_AMD
#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD
#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD
#endif

//
// Palletized (combined palette)
//

#if !defined( GL_PALETTE4_RGB8_OES )
#define GL_PALETTE4_RGB8_OES
#define GL_PALETTE4_RGBA8_OES
#define GL_PALETTE4_R5_G6_B5_OES
#define GL_PALETTE4_RGBA4_OES
#define GL_PALETTE4_RGB5_A1_OES
#define GL_PALETTE8_RGB8_OES
#define GL_PALETTE8_RGBA8_OES
#define GL_PALETTE8_R5_G6_B5_OES
#define GL_PALETTE8_RGBA4_OES
#define GL_PALETTE8_RGB5_A1_OES
#endif

//
// Palletized (separate palette)
//

#if !defined( GL_COLOR_INDEX1_EXT )
#define GL_COLOR_INDEX1_EXT
#define GL_COLOR_INDEX2_EXT
#define GL_COLOR_INDEX4_EXT
#define GL_COLOR_INDEX8_EXT
#define GL_COLOR_INDEX12_EXT
#define GL_COLOR_INDEX16_EXT
#endif

//
// Depth/stencil
//

#if !defined( GL_DEPTH_COMPONENT16 )
#define GL_DEPTH_COMPONENT16
#endif
#if !defined( GL_DEPTH_COMPONENT24 )
#define GL_DEPTH_COMPONENT24
#endif
#if !defined( GL_DEPTH_COMPONENT32 )
#define GL_DEPTH_COMPONENT32
#endif
#if !defined( GL_DEPTH_COMPONENT32F )
#define GL_DEPTH_COMPONENT32F
#endif
#if !defined( GL_DEPTH_COMPONENT32F_NV )
#define GL_DEPTH_COMPONENT32F_NV
#endif
#if !defined( GL_STENCIL_INDEX1 )
#define GL_STENCIL_INDEX1
#endif
#if !defined( GL_STENCIL_INDEX4 )
#define GL_STENCIL_INDEX4
#endif
#if !defined( GL_STENCIL_INDEX8 )
#define GL_STENCIL_INDEX8
#endif
#if !defined( GL_STENCIL_INDEX16 )
#define GL_STENCIL_INDEX16
#endif
#if !defined( GL_DEPTH24_STENCIL8 )
#define GL_DEPTH24_STENCIL8
#endif
#if !defined( GL_DEPTH32F_STENCIL8 )
#define GL_DEPTH32F_STENCIL8
#endif
#if !defined( GL_DEPTH32F_STENCIL8_NV )
#define GL_DEPTH32F_STENCIL8_NV
#endif

static inline GLenum glGetFormatFromInternalFormat( const GLenum internalFormat )
{}

static inline GLenum glGetTypeFromInternalFormat( const GLenum internalFormat )
{}

static inline unsigned int glGetTypeSizeFromType(GLenum type)
{}

static inline void glGetFormatSize( const GLenum internalFormat, ktxFormatSize * pFormatSize )
{}

#endif // !GL_FORMAT_H