123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // 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 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 SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #include "platform/platform.h"
- #include "gfx/gl/gfxGLEnumTranslate.h"
-
- GLenum GFXGLPrimType[GFXPT_COUNT];
- GLenum GFXGLBlend[GFXBlend_COUNT];
- GLenum GFXGLBlendOp[GFXBlendOp_COUNT];
- GLenum GFXGLTextureFilter[GFXTextureFilter_COUNT];
- GLenum GFXGLTextureAddress[GFXAddress_COUNT];
- GLenum GFXGLCmpFunc[GFXCmp_COUNT];
- GLenum GFXGLStencilOp[GFXStencilOp_COUNT];
- GLenum GFXGLTextureInternalFormat[GFXFormat_COUNT];
- GLenum GFXGLTextureFormat[GFXFormat_COUNT];
- GLenum GFXGLTextureType[GFXFormat_COUNT];
- GLint* GFXGLTextureSwizzle[GFXFormat_COUNT];
- GLenum GFXGLBufferType[GFXBufferType_COUNT];
- GLenum GFXGLCullMode[GFXCull_COUNT];
- GLenum GFXGLFillMode[GFXFill_COUNT];
- GLenum GFXGLFaceType[6];
- void GFXGLEnumTranslate::init()
- {
- // Buffer types
- GFXGLBufferType[GFXBufferTypeStatic] = GL_STATIC_DRAW;
- GFXGLBufferType[GFXBufferTypeDynamic] = GL_DYNAMIC_DRAW;
- GFXGLBufferType[GFXBufferTypeVolatile] = GL_STREAM_DRAW;
- GFXGLBufferType[GFXBufferTypeImmutable] = GL_STATIC_DRAW;
- // Primitives
- GFXGLPrimType[GFXPointList] = GL_POINTS;
- GFXGLPrimType[GFXLineList] = GL_LINES;
- GFXGLPrimType[GFXLineStrip] = GL_LINE_STRIP;
- GFXGLPrimType[GFXTriangleList] = GL_TRIANGLES;
- GFXGLPrimType[GFXTriangleStrip] = GL_TRIANGLE_STRIP;
- // Blend
- GFXGLBlend[GFXBlendZero] = GL_ZERO;
- GFXGLBlend[GFXBlendOne] = GL_ONE;
- GFXGLBlend[GFXBlendSrcColor] = GL_SRC_COLOR;
- GFXGLBlend[GFXBlendInvSrcColor] = GL_ONE_MINUS_SRC_COLOR;
- GFXGLBlend[GFXBlendSrcAlpha] = GL_SRC_ALPHA;
- GFXGLBlend[GFXBlendInvSrcAlpha] = GL_ONE_MINUS_SRC_ALPHA;
- GFXGLBlend[GFXBlendDestAlpha] = GL_DST_ALPHA;
- GFXGLBlend[GFXBlendInvDestAlpha] = GL_ONE_MINUS_DST_ALPHA;
- GFXGLBlend[GFXBlendDestColor] = GL_DST_COLOR;
- GFXGLBlend[GFXBlendInvDestColor] = GL_ONE_MINUS_DST_COLOR;
- GFXGLBlend[GFXBlendSrcAlphaSat] = GL_SRC_ALPHA_SATURATE;
-
- // Blend op
- GFXGLBlendOp[GFXBlendOpAdd] = GL_FUNC_ADD;
- GFXGLBlendOp[GFXBlendOpSubtract] = GL_FUNC_SUBTRACT;
- GFXGLBlendOp[GFXBlendOpRevSubtract] = GL_FUNC_REVERSE_SUBTRACT;
- GFXGLBlendOp[GFXBlendOpMin] = GL_MIN;
- GFXGLBlendOp[GFXBlendOpMax] = GL_MAX;
-
- // Comparison
- GFXGLCmpFunc[GFXCmpNever] = GL_NEVER;
- GFXGLCmpFunc[GFXCmpLess] = GL_LESS;
- GFXGLCmpFunc[GFXCmpEqual] = GL_EQUAL;
- GFXGLCmpFunc[GFXCmpLessEqual] = GL_LEQUAL;
- GFXGLCmpFunc[GFXCmpGreater] = GL_GREATER;
- GFXGLCmpFunc[GFXCmpNotEqual] = GL_NOTEQUAL;
- GFXGLCmpFunc[GFXCmpGreaterEqual] = GL_GEQUAL;
- GFXGLCmpFunc[GFXCmpAlways] = GL_ALWAYS;
- GFXGLTextureFilter[GFXTextureFilterNone] = GL_NEAREST;
- GFXGLTextureFilter[GFXTextureFilterPoint] = GL_NEAREST;
- GFXGLTextureFilter[GFXTextureFilterLinear] = GL_LINEAR;
- GFXGLTextureFilter[GFXTextureFilterAnisotropic] = GL_LINEAR;
- GFXGLTextureAddress[GFXAddressWrap] = GL_REPEAT;
- GFXGLTextureAddress[GFXAddressMirror] = GL_REPEAT;
- GFXGLTextureAddress[GFXAddressClamp] = GL_CLAMP_TO_EDGE;
- GFXGLTextureAddress[GFXAddressBorder] = GL_REPEAT;
- GFXGLTextureAddress[GFXAddressMirrorOnce] = GL_REPEAT;
-
- // Stencil ops
- GFXGLStencilOp[GFXStencilOpKeep] = GL_KEEP;
- GFXGLStencilOp[GFXStencilOpZero] = GL_ZERO;
- GFXGLStencilOp[GFXStencilOpReplace] = GL_REPLACE;
- GFXGLStencilOp[GFXStencilOpIncrSat] = GL_INCR;
- GFXGLStencilOp[GFXStencilOpDecrSat] = GL_DECR;
- GFXGLStencilOp[GFXStencilOpInvert] = GL_INVERT;
-
- GFXGLStencilOp[GFXStencilOpIncr] = GL_INCR_WRAP;
- GFXGLStencilOp[GFXStencilOpDecr] = GL_DECR_WRAP;
-
- // Texture formats
- for(int i = 0; i < GFXFormat_COUNT; ++i)
- {
- GFXGLTextureInternalFormat[i] = GL_NONE;
- GFXGLTextureFormat[i] = GL_NONE;
- GFXGLTextureType[i] = GL_NONE;
- GFXGLTextureSwizzle[i] = NULL;
- }
- GFXGLTextureInternalFormat[GFXFormatA8] = GL_R8;
- GFXGLTextureInternalFormat[GFXFormatL8] = GL_R8;
- GFXGLTextureInternalFormat[GFXFormatA8L8] = GL_RG8;
- GFXGLTextureInternalFormat[GFXFormatR5G5B5A1] = GL_RGB5_A1;
- GFXGLTextureInternalFormat[GFXFormatR5G5B5X1] = GL_RGB5_A1;
- GFXGLTextureInternalFormat[GFXFormatL16] = GL_R16;
- GFXGLTextureInternalFormat[GFXFormatD16] = GL_DEPTH_COMPONENT16;
- GFXGLTextureInternalFormat[GFXFormatR8G8B8] = GL_RGB8;
- GFXGLTextureInternalFormat[GFXFormatR8G8B8A8] = GL_RGBA8;
- GFXGLTextureInternalFormat[GFXFormatR8G8B8X8] = GL_RGBA8;
- GFXGLTextureInternalFormat[GFXFormatB8G8R8A8] = GL_RGBA8;
- GFXGLTextureInternalFormat[GFXFormatR10G10B10A2] = GL_RGB10_A2;
- GFXGLTextureInternalFormat[GFXFormatR11G11B10] = GL_R11F_G11F_B10F;
- GFXGLTextureInternalFormat[GFXFormatD32] = GL_DEPTH_COMPONENT32;
- GFXGLTextureInternalFormat[GFXFormatD24X8] = GL_DEPTH24_STENCIL8;
- GFXGLTextureInternalFormat[GFXFormatD24S8] = GL_DEPTH24_STENCIL8;
- GFXGLTextureInternalFormat[GFXFormatR16G16B16A16] = GL_RGBA16;
- GFXGLTextureInternalFormat[GFXFormatBC1] = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
- GFXGLTextureInternalFormat[GFXFormatBC2] = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;
- GFXGLTextureInternalFormat[GFXFormatBC3] = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
- GFXGLTextureInternalFormat[GFXFormatBC4] = GL_COMPRESSED_RED_RGTC1;
- GFXGLTextureInternalFormat[GFXFormatBC5] = GL_COMPRESSED_RG_RGTC2;
- //sRGB
- GFXGLTextureInternalFormat[GFXFormatR8G8B8_SRGB] = GL_SRGB8;
- GFXGLTextureInternalFormat[GFXFormatR8G8B8A8_SRGB] = GL_SRGB8_ALPHA8;
- GFXGLTextureInternalFormat[GFXFormatBC1_SRGB] = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;
- GFXGLTextureInternalFormat[GFXFormatBC2_SRGB] = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;
- GFXGLTextureInternalFormat[GFXFormatBC3_SRGB] = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;
-
- GFXGLTextureFormat[GFXFormatA8] = GL_RED;
- GFXGLTextureFormat[GFXFormatL8] = GL_RED;
- GFXGLTextureFormat[GFXFormatA8L8] = GL_RG;
- GFXGLTextureFormat[GFXFormatR5G5B5A1] = GL_RGBA;
- GFXGLTextureFormat[GFXFormatR5G5B5X1] = GL_RGBA;
- GFXGLTextureFormat[GFXFormatL16] = GL_RED;
- GFXGLTextureFormat[GFXFormatD16] = GL_DEPTH_COMPONENT;
- GFXGLTextureFormat[GFXFormatR8G8B8] = GL_RGB;
- GFXGLTextureFormat[GFXFormatR8G8B8A8] = GL_RGBA;
- GFXGLTextureFormat[GFXFormatR8G8B8X8] = GL_RGBA;
- GFXGLTextureFormat[GFXFormatB8G8R8A8] = GL_BGRA;
- GFXGLTextureFormat[GFXFormatR10G10B10A2] = GL_RGBA;
- GFXGLTextureFormat[GFXFormatR11G11B10] = GL_RGB;
- GFXGLTextureFormat[GFXFormatD32] = GL_DEPTH_COMPONENT;
- GFXGLTextureFormat[GFXFormatD24X8] = GL_DEPTH_STENCIL;
- GFXGLTextureFormat[GFXFormatD24S8] = GL_DEPTH_STENCIL;
- GFXGLTextureFormat[GFXFormatR16G16B16A16] = GL_RGBA;
- GFXGLTextureFormat[GFXFormatBC1] = GL_RGBA;
- GFXGLTextureFormat[GFXFormatBC2] = GL_RGBA;
- GFXGLTextureFormat[GFXFormatBC3] = GL_RGBA;
- GFXGLTextureFormat[GFXFormatBC4] = GL_RED;
- GFXGLTextureFormat[GFXFormatBC5] = GL_RG;
- //sRGB
- GFXGLTextureFormat[GFXFormatR8G8B8_SRGB] = GL_RGB;
- GFXGLTextureFormat[GFXFormatR8G8B8A8_SRGB] = GL_RGBA;
- GFXGLTextureFormat[GFXFormatBC1_SRGB] = GL_RGBA;
- GFXGLTextureFormat[GFXFormatBC2_SRGB] = GL_RGBA;
- GFXGLTextureFormat[GFXFormatBC3_SRGB] = GL_RGBA;
-
- GFXGLTextureType[GFXFormatA8] = GL_UNSIGNED_BYTE;
- GFXGLTextureType[GFXFormatL8] = GL_UNSIGNED_BYTE;
- GFXGLTextureType[GFXFormatA8L8] = GL_UNSIGNED_BYTE;
- GFXGLTextureType[GFXFormatR5G5B5A1] = GL_UNSIGNED_SHORT_5_5_5_1;
- GFXGLTextureType[GFXFormatR5G5B5X1] = GL_UNSIGNED_SHORT_5_5_5_1;
- GFXGLTextureType[GFXFormatL16] = GL_UNSIGNED_SHORT;
- GFXGLTextureType[GFXFormatD16] = GL_UNSIGNED_SHORT;
- GFXGLTextureType[GFXFormatR8G8B8] = GL_UNSIGNED_BYTE;
- GFXGLTextureType[GFXFormatR8G8B8A8] = GL_UNSIGNED_BYTE;
- GFXGLTextureType[GFXFormatR8G8B8X8] = GL_UNSIGNED_BYTE;
- GFXGLTextureType[GFXFormatB8G8R8A8] = GL_UNSIGNED_BYTE;;
- GFXGLTextureType[GFXFormatR10G10B10A2] = GL_UNSIGNED_INT_10_10_10_2;
- GFXGLTextureType[GFXFormatR11G11B10] = GL_UNSIGNED_INT_10F_11F_11F_REV;
- GFXGLTextureType[GFXFormatD32] = GL_UNSIGNED_INT;
- GFXGLTextureType[GFXFormatD24X8] = GL_UNSIGNED_INT_24_8;
- GFXGLTextureType[GFXFormatD24S8] = GL_UNSIGNED_INT_24_8;
- GFXGLTextureType[GFXFormatR16G16B16A16] = GL_UNSIGNED_SHORT;
- GFXGLTextureType[GFXFormatBC1] = GL_UNSIGNED_BYTE;
- GFXGLTextureType[GFXFormatBC2] = GL_UNSIGNED_BYTE;
- GFXGLTextureType[GFXFormatBC3] = GL_UNSIGNED_BYTE;
- GFXGLTextureType[GFXFormatBC4] = GL_UNSIGNED_BYTE;
- GFXGLTextureType[GFXFormatBC5] = GL_UNSIGNED_BYTE;
- // sRGB
- GFXGLTextureType[GFXFormatR8G8B8_SRGB] = GL_UNSIGNED_BYTE;
- GFXGLTextureType[GFXFormatR8G8B8A8_SRGB] = GL_UNSIGNED_BYTE;
- GFXGLTextureType[GFXFormatBC1_SRGB] = GL_UNSIGNED_BYTE;
- GFXGLTextureType[GFXFormatBC2_SRGB] = GL_UNSIGNED_BYTE;
- GFXGLTextureType[GFXFormatBC3_SRGB] = GL_UNSIGNED_BYTE;
- static GLint Swizzle_GFXFormatA8[] = { GL_NONE, GL_NONE, GL_NONE, GL_RED };
- static GLint Swizzle_GFXFormatL[] = { GL_RED, GL_RED, GL_RED, GL_ALPHA };
- GFXGLTextureSwizzle[GFXFormatA8] = Swizzle_GFXFormatA8; // old GL_ALPHA8
- GFXGLTextureSwizzle[GFXFormatL8] = Swizzle_GFXFormatL; // old GL_LUMINANCE8
- GFXGLTextureSwizzle[GFXFormatL16] = Swizzle_GFXFormatL; // old GL_LUMINANCE16
- GFXGLTextureInternalFormat[GFXFormatR32F] = GL_R32F;
- GFXGLTextureFormat[GFXFormatR32F] = GL_RED;
- GFXGLTextureType[GFXFormatR32F] = GL_FLOAT;
- GFXGLTextureInternalFormat[GFXFormatR32G32B32A32F] = GL_RGBA32F_ARB;
- GFXGLTextureFormat[GFXFormatR32G32B32A32F] = GL_RGBA;
- GFXGLTextureType[GFXFormatR32G32B32A32F] = GL_FLOAT;
- GFXGLTextureInternalFormat[GFXFormatR16F] = GL_R16F;
- GFXGLTextureFormat[GFXFormatR16F] = GL_RED;
- GFXGLTextureType[GFXFormatR16F] = GL_HALF_FLOAT_ARB;
- GFXGLTextureInternalFormat[GFXFormatR16G16F] = GL_RG16F;
- GFXGLTextureFormat[GFXFormatR16G16F] = GL_RG;
- GFXGLTextureType[GFXFormatR16G16F] = GL_HALF_FLOAT_ARB;
- GFXGLTextureInternalFormat[GFXFormatR16G16B16A16F] = GL_RGBA16F_ARB;
- GFXGLTextureFormat[GFXFormatR16G16B16A16F] = GL_RGBA;
- GFXGLTextureType[GFXFormatR16G16B16A16F] = GL_HALF_FLOAT_ARB;
- if( gglHasExtension(ARB_ES2_compatibility) )
- {
- GFXGLTextureInternalFormat[GFXFormatR5G6B5] = GL_RGB5_A1;
- GFXGLTextureFormat[GFXFormatR5G6B5] = GL_RGBA;
- GFXGLTextureType[GFXFormatR5G6B5] = GL_UNSIGNED_SHORT_5_5_5_1;
- }
- else
- {
- GFXGLTextureInternalFormat[GFXFormatR5G6B5] = GL_RGB565;
- GFXGLTextureFormat[GFXFormatR5G6B5] = GL_RGB;
- GFXGLTextureType[GFXFormatR5G6B5] = GL_UNSIGNED_SHORT_5_6_5;
- }
- if( gglHasExtension(ARB_texture_rg) )
- {
- GFXGLTextureInternalFormat[GFXFormatR16G16] = GL_RG16;
- GFXGLTextureFormat[GFXFormatR16G16] = GL_RG;
- GFXGLTextureType[GFXFormatR16G16] = GL_UNSIGNED_SHORT;
- }
- else
- {
- GFXGLTextureInternalFormat[GFXFormatR16G16] = GL_RGBA16;
- GFXGLTextureFormat[GFXFormatR16G16] = GL_RGBA;
- GFXGLTextureType[GFXFormatR16G16] = GL_UNSIGNED_SHORT;
- }
- // Cull - Opengl render upside down need to invert cull
- GFXGLCullMode[GFXCullNone] = GL_FRONT;
- GFXGLCullMode[GFXCullCW] = GL_FRONT;
- GFXGLCullMode[GFXCullCCW] = GL_BACK;
- // Fill
- GFXGLFillMode[GFXFillPoint] = GL_POINT;
- GFXGLFillMode[GFXFillWireframe] = GL_LINE;
- GFXGLFillMode[GFXFillSolid] = GL_FILL;
- //cubemap face type
- GFXGLFaceType[0] = GL_TEXTURE_CUBE_MAP_POSITIVE_X;
- GFXGLFaceType[1] = GL_TEXTURE_CUBE_MAP_NEGATIVE_X;
- GFXGLFaceType[2] = GL_TEXTURE_CUBE_MAP_POSITIVE_Y;
- GFXGLFaceType[3] = GL_TEXTURE_CUBE_MAP_NEGATIVE_Y;
- GFXGLFaceType[4] = GL_TEXTURE_CUBE_MAP_POSITIVE_Z;
- GFXGLFaceType[5] = GL_TEXTURE_CUBE_MAP_NEGATIVE_Z;
- }
|