diff options
Diffstat (limited to 'chromium/third_party/dawn/src/dawn_native/opengl/SamplerGL.cpp')
-rw-r--r-- | chromium/third_party/dawn/src/dawn_native/opengl/SamplerGL.cpp | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/chromium/third_party/dawn/src/dawn_native/opengl/SamplerGL.cpp b/chromium/third_party/dawn/src/dawn_native/opengl/SamplerGL.cpp index 832a4ffc278..17bf353ed51 100644 --- a/chromium/third_party/dawn/src/dawn_native/opengl/SamplerGL.cpp +++ b/chromium/third_party/dawn/src/dawn_native/opengl/SamplerGL.cpp @@ -76,26 +76,53 @@ namespace dawn_native { namespace opengl { : SamplerBase(device, descriptor) { const OpenGLFunctions& gl = ToBackend(GetDevice())->gl; - gl.GenSamplers(1, &mHandle); - gl.SamplerParameteri(mHandle, GL_TEXTURE_MAG_FILTER, MagFilterMode(descriptor->magFilter)); - gl.SamplerParameteri(mHandle, GL_TEXTURE_MIN_FILTER, - MinFilterMode(descriptor->minFilter, descriptor->mipmapFilter)); - gl.SamplerParameteri(mHandle, GL_TEXTURE_WRAP_R, WrapMode(descriptor->addressModeW)); - gl.SamplerParameteri(mHandle, GL_TEXTURE_WRAP_S, WrapMode(descriptor->addressModeU)); - gl.SamplerParameteri(mHandle, GL_TEXTURE_WRAP_T, WrapMode(descriptor->addressModeV)); + gl.GenSamplers(1, &mFilteringHandle); + SetupGLSampler(mFilteringHandle, descriptor, false); - gl.SamplerParameterf(mHandle, GL_TEXTURE_MIN_LOD, descriptor->lodMinClamp); - gl.SamplerParameterf(mHandle, GL_TEXTURE_MAX_LOD, descriptor->lodMaxClamp); + gl.GenSamplers(1, &mNonFilteringHandle); + SetupGLSampler(mNonFilteringHandle, descriptor, true); + } + + Sampler::~Sampler() { + const OpenGLFunctions& gl = ToBackend(GetDevice())->gl; + gl.DeleteSamplers(1, &mFilteringHandle); + gl.DeleteSamplers(1, &mNonFilteringHandle); + } + + void Sampler::SetupGLSampler(GLuint sampler, + const SamplerDescriptor* descriptor, + bool forceNearest) { + const OpenGLFunctions& gl = ToBackend(GetDevice())->gl; + + if (forceNearest) { + gl.SamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + gl.SamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); + } else { + gl.SamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, + MagFilterMode(descriptor->magFilter)); + gl.SamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, + MinFilterMode(descriptor->minFilter, descriptor->mipmapFilter)); + } + gl.SamplerParameteri(sampler, GL_TEXTURE_WRAP_R, WrapMode(descriptor->addressModeW)); + gl.SamplerParameteri(sampler, GL_TEXTURE_WRAP_S, WrapMode(descriptor->addressModeU)); + gl.SamplerParameteri(sampler, GL_TEXTURE_WRAP_T, WrapMode(descriptor->addressModeV)); + + gl.SamplerParameterf(sampler, GL_TEXTURE_MIN_LOD, descriptor->lodMinClamp); + gl.SamplerParameterf(sampler, GL_TEXTURE_MAX_LOD, descriptor->lodMaxClamp); if (ToOpenGLCompareFunction(descriptor->compare) != GL_NEVER) { - gl.SamplerParameteri(mHandle, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); - gl.SamplerParameteri(mHandle, GL_TEXTURE_COMPARE_FUNC, + gl.SamplerParameteri(sampler, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); + gl.SamplerParameteri(sampler, GL_TEXTURE_COMPARE_FUNC, ToOpenGLCompareFunction(descriptor->compare)); } } - GLuint Sampler::GetHandle() const { - return mHandle; + GLuint Sampler::GetFilteringHandle() const { + return mFilteringHandle; + } + + GLuint Sampler::GetNonFilteringHandle() const { + return mNonFilteringHandle; } }} // namespace dawn_native::opengl |