#define GLFW_INCLUDE_NONE #include "XCEngine/RHI/OpenGL/OpenGLSampler.h" #include #include namespace XCEngine { namespace RHI { static unsigned int ToGLWrapMode(SamplerWrapMode mode) { switch (mode) { case SamplerWrapMode::Repeat: return GL_REPEAT; case SamplerWrapMode::MirroredRepeat: return GL_MIRRORED_REPEAT; case SamplerWrapMode::ClampToEdge: return GL_CLAMP_TO_EDGE; case SamplerWrapMode::ClampToBorder: return GL_CLAMP_TO_BORDER; default: return GL_REPEAT; } } static unsigned int ToGLFilter(SamplerFilter filter) { switch (filter) { case SamplerFilter::Nearest: return GL_NEAREST; case SamplerFilter::Linear: return GL_LINEAR; case SamplerFilter::NearestMipmapNearest: return GL_NEAREST_MIPMAP_NEAREST; case SamplerFilter::LinearMipmapNearest: return GL_LINEAR_MIPMAP_NEAREST; case SamplerFilter::NearestMipmapLinear: return GL_NEAREST_MIPMAP_LINEAR; case SamplerFilter::LinearMipmapLinear: return GL_LINEAR_MIPMAP_LINEAR; default: return GL_LINEAR; } } OpenGLSampler::OpenGLSampler() : m_sampler(0) { } OpenGLSampler::~OpenGLSampler() { } bool OpenGLSampler::Initialize(const OpenGLSamplerDesc& desc) { m_desc = desc; glGenSamplers(1, &m_sampler); glSamplerParameteri(m_sampler, GL_TEXTURE_MIN_FILTER, ToGLFilter(desc.minFilter)); glSamplerParameteri(m_sampler, GL_TEXTURE_MAG_FILTER, ToGLFilter(desc.magFilter)); glSamplerParameteri(m_sampler, GL_TEXTURE_WRAP_S, ToGLWrapMode(desc.wrapS)); glSamplerParameteri(m_sampler, GL_TEXTURE_WRAP_T, ToGLWrapMode(desc.wrapT)); glSamplerParameteri(m_sampler, GL_TEXTURE_WRAP_R, ToGLWrapMode(desc.wrapR)); glSamplerParameterf(m_sampler, GL_TEXTURE_MIN_LOD, desc.minLod); glSamplerParameterf(m_sampler, GL_TEXTURE_MAX_LOD, desc.maxLod); glSamplerParameterf(m_sampler, GL_TEXTURE_MAX_ANISOTROPY, desc.maxAnisotropy); return true; } void OpenGLSampler::Shutdown() { if (m_sampler) { glDeleteSamplers(1, &m_sampler); m_sampler = 0; } } void OpenGLSampler::Bind(unsigned int unit) { glBindSampler(unit, m_sampler); } void OpenGLSampler::Unbind(unsigned int unit) { glBindSampler(unit, 0); } } // namespace RHI } // namespace XCEngine