| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 |
- // Copyright (C) 2009-2018, Panagiotis Christopoulos Charitos and contributors.
- // All rights reserved.
- // Code licensed under the BSD License.
- // http://www.anki3d.org/LICENSE
- #include <anki/gr/gl/Common.h>
- namespace anki
- {
- GLenum convertCompareOperation(CompareOperation in)
- {
- GLenum out = GL_NONE;
- switch(in)
- {
- case CompareOperation::ALWAYS:
- out = GL_ALWAYS;
- break;
- case CompareOperation::LESS:
- out = GL_LESS;
- break;
- case CompareOperation::EQUAL:
- out = GL_EQUAL;
- break;
- case CompareOperation::LESS_EQUAL:
- out = GL_LEQUAL;
- break;
- case CompareOperation::GREATER:
- out = GL_GREATER;
- break;
- case CompareOperation::GREATER_EQUAL:
- out = GL_GEQUAL;
- break;
- case CompareOperation::NOT_EQUAL:
- out = GL_NOTEQUAL;
- break;
- case CompareOperation::NEVER:
- out = GL_NEVER;
- break;
- default:
- ANKI_ASSERT(0);
- }
- return out;
- }
- GLenum convertStencilOperation(StencilOperation in)
- {
- GLenum out = GL_NONE;
- switch(in)
- {
- case StencilOperation::KEEP:
- out = GL_KEEP;
- break;
- case StencilOperation::ZERO:
- out = GL_ZERO;
- break;
- case StencilOperation::REPLACE:
- out = GL_REPLACE;
- break;
- case StencilOperation::INCREMENT_AND_CLAMP:
- out = GL_INCR;
- break;
- case StencilOperation::DECREMENT_AND_CLAMP:
- out = GL_DECR;
- break;
- case StencilOperation::INVERT:
- out = GL_INVERT;
- break;
- case StencilOperation::INCREMENT_AND_WRAP:
- out = GL_INCR_WRAP;
- break;
- case StencilOperation::DECREMENT_AND_WRAP:
- out = GL_DECR_WRAP;
- break;
- default:
- ANKI_ASSERT(0);
- }
- return out;
- }
- void convertFilter(SamplingFilter minMagFilter, SamplingFilter mipFilter, GLenum& minFilter, GLenum& magFilter)
- {
- switch(minMagFilter)
- {
- case SamplingFilter::NEAREST:
- magFilter = GL_NEAREST;
- switch(mipFilter)
- {
- case SamplingFilter::NEAREST:
- minFilter = GL_NEAREST_MIPMAP_NEAREST;
- break;
- case SamplingFilter::LINEAR:
- minFilter = GL_NEAREST_MIPMAP_LINEAR;
- break;
- case SamplingFilter::BASE:
- minFilter = GL_NEAREST;
- break;
- default:
- ANKI_ASSERT(0);
- }
- break;
- case SamplingFilter::LINEAR:
- magFilter = GL_LINEAR;
- switch(mipFilter)
- {
- case SamplingFilter::NEAREST:
- minFilter = GL_LINEAR_MIPMAP_NEAREST;
- break;
- case SamplingFilter::LINEAR:
- minFilter = GL_LINEAR_MIPMAP_LINEAR;
- break;
- case SamplingFilter::BASE:
- minFilter = GL_LINEAR;
- break;
- default:
- ANKI_ASSERT(0);
- }
- break;
- default:
- ANKI_ASSERT(0);
- break;
- }
- }
- void convertVertexFormat(Format fmt, U& compCount, GLenum& type, Bool& normalized)
- {
- switch(fmt)
- {
- case Format::R32_SFLOAT:
- compCount = 1;
- type = GL_FLOAT;
- normalized = false;
- break;
- case Format::R32G32_SFLOAT:
- compCount = 2;
- type = GL_FLOAT;
- normalized = false;
- break;
- case Format::R32G32B32_SFLOAT:
- compCount = 3;
- type = GL_FLOAT;
- normalized = false;
- break;
- case Format::R32G32B32A32_SFLOAT:
- compCount = 4;
- type = GL_FLOAT;
- normalized = false;
- break;
- case Format::R16G16_SFLOAT:
- compCount = 2;
- type = GL_HALF_FLOAT;
- normalized = false;
- break;
- case Format::R16G16_UNORM:
- compCount = 2;
- type = GL_UNSIGNED_SHORT;
- normalized = true;
- break;
- case Format::R16G16B16_SFLOAT:
- compCount = 3;
- type = GL_HALF_FLOAT;
- normalized = false;
- break;
- case Format::R16G16B16_UNORM:
- compCount = 3;
- type = GL_UNSIGNED_SHORT;
- normalized = true;
- break;
- case Format::A2B10G10R10_SNORM_PACK32:
- compCount = 4;
- type = GL_INT_2_10_10_10_REV;
- normalized = true;
- break;
- case Format::R8G8B8A8_UNORM:
- compCount = 4;
- type = GL_UNSIGNED_BYTE;
- normalized = true;
- break;
- case Format::R8G8B8_UNORM:
- compCount = 3;
- type = GL_UNSIGNED_BYTE;
- normalized = true;
- break;
- case Format::R16G16B16A16_UINT:
- compCount = 4;
- type = GL_UNSIGNED_SHORT;
- normalized = false;
- break;
- default:
- ANKI_ASSERT(!"TODO");
- }
- }
- GLenum convertBlendFactor(BlendFactor in)
- {
- GLenum out;
- switch(in)
- {
- case BlendFactor::ZERO:
- out = GL_ZERO;
- break;
- case BlendFactor::ONE:
- out = GL_ONE;
- break;
- case BlendFactor::SRC_COLOR:
- out = GL_SRC_COLOR;
- break;
- case BlendFactor::ONE_MINUS_SRC_COLOR:
- out = GL_ONE_MINUS_SRC_COLOR;
- break;
- case BlendFactor::DST_COLOR:
- out = GL_DST_COLOR;
- break;
- case BlendFactor::ONE_MINUS_DST_COLOR:
- out = GL_ONE_MINUS_DST_COLOR;
- break;
- case BlendFactor::SRC_ALPHA:
- out = GL_SRC_ALPHA;
- break;
- case BlendFactor::ONE_MINUS_SRC_ALPHA:
- out = GL_ONE_MINUS_SRC_ALPHA;
- break;
- case BlendFactor::DST_ALPHA:
- out = GL_DST_ALPHA;
- break;
- case BlendFactor::ONE_MINUS_DST_ALPHA:
- out = GL_ONE_MINUS_DST_ALPHA;
- break;
- case BlendFactor::CONSTANT_COLOR:
- out = GL_CONSTANT_COLOR;
- break;
- case BlendFactor::ONE_MINUS_CONSTANT_COLOR:
- out = GL_ONE_MINUS_CONSTANT_COLOR;
- break;
- case BlendFactor::CONSTANT_ALPHA:
- out = GL_CONSTANT_ALPHA;
- break;
- case BlendFactor::ONE_MINUS_CONSTANT_ALPHA:
- out = GL_ONE_MINUS_CONSTANT_ALPHA;
- break;
- case BlendFactor::SRC_ALPHA_SATURATE:
- out = GL_SRC_ALPHA_SATURATE;
- break;
- case BlendFactor::SRC1_COLOR:
- out = GL_SRC1_COLOR;
- break;
- case BlendFactor::ONE_MINUS_SRC1_COLOR:
- out = GL_ONE_MINUS_SRC1_COLOR;
- break;
- case BlendFactor::SRC1_ALPHA:
- out = GL_SRC1_ALPHA;
- break;
- case BlendFactor::ONE_MINUS_SRC1_ALPHA:
- out = GL_ONE_MINUS_SRC1_ALPHA;
- break;
- default:
- ANKI_ASSERT(0);
- out = 0;
- }
- return out;
- }
- void convertTextureInformation(
- Format pf, Bool8& compressed, GLenum& format, GLenum& internalFormat, GLenum& type, DepthStencilAspectBit& dsAspect)
- {
- compressed = formatIsCompressed(pf);
- dsAspect = computeFormatAspect(pf);
- format = GL_NONE;
- internalFormat = GL_NONE;
- type = GL_NONE;
- switch(pf)
- {
- case Format::BC1_RGB_UNORM_BLOCK:
- format = GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
- internalFormat = format;
- type = GL_UNSIGNED_BYTE;
- break;
- case Format::BC3_UNORM_BLOCK:
- format = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
- internalFormat = format;
- type = GL_UNSIGNED_BYTE;
- break;
- case Format::BC6H_UFLOAT_BLOCK:
- format = GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT;
- internalFormat = format;
- type = GL_FLOAT;
- break;
- case Format::R8_UNORM:
- format = GL_RED;
- internalFormat = GL_R8;
- type = GL_UNSIGNED_BYTE;
- break;
- case Format::R8_SNORM:
- format = GL_RED;
- internalFormat = GL_R8_SNORM;
- type = GL_BYTE;
- break;
- case Format::R8G8_UNORM:
- format = GL_RG;
- internalFormat = GL_RG8;
- type = GL_UNSIGNED_BYTE;
- break;
- case Format::R8G8_SNORM:
- format = GL_RG;
- internalFormat = GL_RG8_SNORM;
- type = GL_BYTE;
- break;
- case Format::R8G8B8_UNORM:
- format = GL_RGB;
- internalFormat = GL_RGB8;
- type = GL_UNSIGNED_BYTE;
- break;
- case Format::R8G8B8_SNORM:
- format = GL_RGB;
- internalFormat = GL_RGB8_SNORM;
- type = GL_BYTE;
- break;
- case Format::R8G8B8_UINT:
- format = GL_RGB;
- internalFormat = GL_RGB8UI;
- type = GL_RGB_INTEGER;
- break;
- case Format::R8G8B8_SINT:
- format = GL_RGB;
- internalFormat = GL_RGB8I;
- type = GL_RGB_INTEGER;
- break;
- case Format::R8G8B8A8_UNORM:
- format = GL_RGBA;
- internalFormat = GL_RGBA8;
- type = GL_UNSIGNED_BYTE;
- break;
- case Format::R8G8B8A8_SNORM:
- format = GL_RGBA;
- internalFormat = GL_RGBA8_SNORM;
- type = GL_BYTE;
- break;
- case Format::R16_SFLOAT:
- format = GL_R;
- internalFormat = GL_R16F;
- type = GL_FLOAT;
- break;
- case Format::R16_UINT:
- format = GL_R;
- internalFormat = GL_R16UI;
- type = GL_UNSIGNED_SHORT;
- break;
- case Format::R16_UNORM:
- format = GL_R;
- internalFormat = GL_R16;
- type = GL_UNSIGNED_SHORT;
- break;
- case Format::R16G16B16_SFLOAT:
- format = GL_RGB;
- internalFormat = GL_RGB16F;
- type = GL_FLOAT;
- break;
- case Format::R16G16B16_UINT:
- format = GL_RGB_INTEGER;
- internalFormat = GL_RGB16UI;
- type = GL_UNSIGNED_INT;
- break;
- case Format::R16G16B16A16_SFLOAT:
- format = GL_RGBA;
- internalFormat = GL_RGBA16F;
- type = GL_FLOAT;
- break;
- case Format::R16G16B16A16_UINT:
- format = GL_RGBA;
- internalFormat = GL_RGBA16UI;
- type = GL_UNSIGNED_SHORT;
- break;
- case Format::R32_SFLOAT:
- format = GL_R;
- internalFormat = GL_R32F;
- type = GL_FLOAT;
- break;
- case Format::R32_UINT:
- format = GL_RG_INTEGER;
- internalFormat = GL_R32UI;
- type = GL_UNSIGNED_INT;
- break;
- case Format::R32G32_SFLOAT:
- format = GL_RG;
- internalFormat = GL_RG32F;
- type = GL_FLOAT;
- break;
- case Format::R32G32_UINT:
- format = GL_RG_INTEGER;
- internalFormat = GL_RG32UI;
- type = GL_UNSIGNED_INT;
- break;
- case Format::R32G32B32_SFLOAT:
- format = GL_RGB;
- internalFormat = GL_RGB32F;
- type = GL_FLOAT;
- break;
- case Format::R32G32B32_UINT:
- format = GL_RGB_INTEGER;
- internalFormat = GL_RGB32UI;
- type = GL_UNSIGNED_INT;
- break;
- case Format::R32G32B32A32_SFLOAT:
- format = GL_RGBA;
- internalFormat = GL_RGBA32F;
- type = GL_FLOAT;
- break;
- case Format::R32G32B32A32_UINT:
- format = GL_RGBA_INTEGER;
- internalFormat = GL_RGBA32UI;
- type = GL_UNSIGNED_INT;
- break;
- case Format::B10G11R11_UFLOAT_PACK32:
- format = GL_RGB;
- internalFormat = GL_R11F_G11F_B10F;
- type = GL_FLOAT;
- break;
- case Format::A2B10G10R10_UNORM_PACK32:
- format = GL_RGBA;
- internalFormat = GL_RGB10_A2;
- type = GL_UNSIGNED_INT;
- break;
- case Format::D24_UNORM_S8_UINT:
- format = GL_DEPTH_STENCIL;
- internalFormat = GL_DEPTH24_STENCIL8;
- type = GL_UNSIGNED_INT;
- break;
- case Format::D16_UNORM_S8_UINT:
- format = GL_DEPTH_COMPONENT;
- internalFormat = GL_DEPTH_COMPONENT16;
- type = GL_UNSIGNED_SHORT;
- break;
- case Format::D32_SFLOAT:
- format = GL_DEPTH_COMPONENT;
- internalFormat = GL_DEPTH_COMPONENT32;
- type = GL_UNSIGNED_INT;
- break;
- case Format::S8_UINT:
- format = GL_STENCIL_INDEX;
- internalFormat = GL_STENCIL_INDEX8;
- type = GL_BYTE;
- break;
- default:
- ANKI_ASSERT(!"TODO");
- }
- }
- } // end namespace anki
|