// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - OpenGL Renderer" // For conditions of distribution and use, see copyright notice in Config.hpp #include #include #include #include #include namespace Nz { inline GLenum ToOpenGL(BlendFunc blendFunc) { switch (blendFunc) { case BlendFunc_DestAlpha: return GL_DST_ALPHA; case BlendFunc_DestColor: return GL_DST_COLOR; case BlendFunc_SrcAlpha: return GL_SRC_ALPHA; case BlendFunc_SrcColor: return GL_SRC_COLOR; case BlendFunc_InvDestAlpha: return GL_ONE_MINUS_DST_ALPHA; case BlendFunc_InvDestColor: return GL_ONE_MINUS_DST_COLOR; case BlendFunc_InvSrcAlpha: return GL_ONE_MINUS_SRC_ALPHA; case BlendFunc_InvSrcColor: return GL_ONE_MINUS_SRC_COLOR; case BlendFunc_One: return GL_ONE; case BlendFunc_Zero: return GL_ZERO; } NazaraError("Unhandled BlendFunc 0x" + String::Number(UnderlyingCast(blendFunc), 16)); return {}; } inline GLenum ToOpenGL(FaceSide filter) { switch (filter) { case FaceSide_None: break; case FaceSide_Back: return GL_BACK; case FaceSide_Front: return GL_FRONT; case FaceSide_FrontAndBack: return GL_FRONT_AND_BACK; } NazaraError("Unhandled FaceSide 0x" + String::Number(UnderlyingCast(filter), 16)); return {}; } inline GLenum ToOpenGL(RendererComparison comparison) { switch (comparison) { case RendererComparison_Always: return GL_ALWAYS; case RendererComparison_Equal: return GL_EQUAL; case RendererComparison_Greater: return GL_GREATER; case RendererComparison_GreaterOrEqual: return GL_GEQUAL; case RendererComparison_Less: return GL_LESS; case RendererComparison_LessOrEqual: return GL_LEQUAL; case RendererComparison_Never: return GL_NEVER; case RendererComparison_NotEqual: return GL_NOTEQUAL; } NazaraError("Unhandled RendererComparison 0x" + String::Number(UnderlyingCast(comparison), 16)); return {}; } inline GLenum ToOpenGL(SamplerFilter filter) { switch (filter) { case SamplerFilter::SamplerFilter_Linear: return GL_LINEAR; case SamplerFilter::SamplerFilter_Nearest: return GL_NEAREST; } NazaraError("Unhandled SamplerFilter 0x" + String::Number(UnderlyingCast(filter), 16)); return {}; } inline GLenum ToOpenGL(SamplerFilter minFilter, SamplerMipmapMode mipmapFilter) { switch (minFilter) { case SamplerFilter::SamplerFilter_Linear: { switch (mipmapFilter) { case SamplerMipmapMode_Linear: return GL_LINEAR_MIPMAP_LINEAR; case SamplerMipmapMode_Nearest: return GL_LINEAR_MIPMAP_NEAREST; } NazaraError("Unhandled SamplerFilter 0x" + String::Number(UnderlyingCast(mipmapFilter), 16)); return {}; } case SamplerFilter::SamplerFilter_Nearest: { switch (mipmapFilter) { case SamplerMipmapMode_Linear: return GL_NEAREST_MIPMAP_LINEAR; case SamplerMipmapMode_Nearest: return GL_NEAREST_MIPMAP_NEAREST; } NazaraError("Unhandled SamplerFilter 0x" + String::Number(UnderlyingCast(mipmapFilter), 16)); return {}; } } NazaraError("Unhandled SamplerFilter 0x" + String::Number(UnderlyingCast(minFilter), 16)); return {}; } inline GLenum ToOpenGL(SamplerWrap wrapMode) { switch (wrapMode) { case SamplerWrap::SamplerWrap_Clamp: return GL_CLAMP_TO_EDGE; case SamplerWrap::SamplerWrap_MirroredRepeat: return GL_MIRRORED_REPEAT; case SamplerWrap::SamplerWrap_Repeat: return GL_REPEAT; } NazaraError("Unhandled SamplerWrap 0x" + String::Number(UnderlyingCast(wrapMode), 16)); return {}; } inline GLenum ToOpenGL(ShaderStageType stageType) { switch (stageType) { case ShaderStageType::Fragment: return GL_FRAGMENT_SHADER; case ShaderStageType::Vertex: return GL_VERTEX_SHADER; } NazaraError("Unhandled ShaderStageType 0x" + String::Number(UnderlyingCast(stageType), 16)); return {}; } inline GLenum ToOpenGL(StencilOperation stencilOp) { switch (stencilOp) { case StencilOperation_Decrement: return GL_DECR; case StencilOperation_DecrementNoClamp: return GL_DECR_WRAP; case StencilOperation_Increment: return GL_INCR; case StencilOperation_IncrementNoClamp: return GL_INCR_WRAP; case StencilOperation_Invert: return GL_INVERT; case StencilOperation_Keep: return GL_KEEP; case StencilOperation_Replace: return GL_REPLACE; case StencilOperation_Zero: return GL_ZERO; } NazaraError("Unhandled StencilOperation 0x" + String::Number(UnderlyingCast(stencilOp), 16)); return {}; } inline GLenum ToOpenGL(GL::BufferTarget bufferTarget) { switch (bufferTarget) { case GL::BufferTarget::Array: return GL_ARRAY_BUFFER; case GL::BufferTarget::CopyRead: return GL_COPY_READ_BUFFER; case GL::BufferTarget::CopyWrite: return GL_COPY_WRITE_BUFFER; case GL::BufferTarget::ElementArray: return GL_ELEMENT_ARRAY_BUFFER; case GL::BufferTarget::PixelPack: return GL_PIXEL_PACK_BUFFER; case GL::BufferTarget::PixelUnpack: return GL_PIXEL_UNPACK_BUFFER; case GL::BufferTarget::TransformFeedback: return GL_TRANSFORM_FEEDBACK_BUFFER; case GL::BufferTarget::Uniform: return GL_UNIFORM_BUFFER; } NazaraError("Unhandled GL::BufferTarget 0x" + String::Number(UnderlyingCast(bufferTarget), 16)); return {}; } inline GLenum ToOpenGL(GL::TextureTarget textureTarget) { switch (textureTarget) { case GL::TextureTarget::Cubemap: return GL_TEXTURE_CUBE_MAP; case GL::TextureTarget::Target2D: return GL_TEXTURE_2D; case GL::TextureTarget::Target2D_Array: return GL_TEXTURE_2D_ARRAY; case GL::TextureTarget::Target3D: return GL_TEXTURE_3D; } NazaraError("Unhandled GL::TextureTarget 0x" + String::Number(UnderlyingCast(textureTarget), 16)); return {}; } } #include