X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fopengl%2Fsampler_backend.cpp;h=31dcc6bcf0f48b5b18a06625fc02cb5f9c3c8d33;hb=HEAD;hp=915dda68f5db14bd67ea996217f810296dd8486f;hpb=160e9eea29bd10034733d59507fa1bcca36be401;p=libs%2Fgl.git diff --git a/source/backends/opengl/sampler_backend.cpp b/source/backends/opengl/sampler_backend.cpp index 915dda68..31dcc6bc 100644 --- a/source/backends/opengl/sampler_backend.cpp +++ b/source/backends/opengl/sampler_backend.cpp @@ -25,6 +25,18 @@ OpenGLSampler::OpenGLSampler() glGenSamplers(1, &id); } +OpenGLSampler::OpenGLSampler(OpenGLSampler &&other): + id(other.id) +{ + other.id = 0; +} + +OpenGLSampler::~OpenGLSampler() +{ + if(id) + glDeleteSamplers(1, &id); +} + bool OpenGLSampler::check_anisotropic(bool require) { if(require) @@ -34,33 +46,33 @@ bool OpenGLSampler::check_anisotropic(bool require) void OpenGLSampler::update(unsigned mask) const { - const Sampler *self = static_cast(this); + const Sampler &self = *static_cast(this); if(mask&Sampler::MIN_FILTER) - glSamplerParameteri(id, GL_TEXTURE_MIN_FILTER, get_gl_filter(self->min_filter)); + glSamplerParameteri(id, GL_TEXTURE_MIN_FILTER, get_gl_filter(self.min_filter)); if(mask&Sampler::MAG_FILTER) - glSamplerParameteri(id, GL_TEXTURE_MAG_FILTER, get_gl_filter(self->mag_filter)); + glSamplerParameteri(id, GL_TEXTURE_MAG_FILTER, get_gl_filter(self.mag_filter)); if(mask&Sampler::MAX_ANISOTROPY) - glSamplerParameterf(id, GL_TEXTURE_MAX_ANISOTROPY_EXT, self->max_anisotropy); + glSamplerParameterf(id, GL_TEXTURE_MAX_ANISOTROPY_EXT, self.max_anisotropy); if(mask&Sampler::WRAP_S) - glSamplerParameteri(id, GL_TEXTURE_WRAP_S, get_gl_wrap(self->wrap_s)); + glSamplerParameteri(id, GL_TEXTURE_WRAP_S, get_gl_wrap(self.wrap_s)); if(mask&Sampler::WRAP_T) - glSamplerParameteri(id, GL_TEXTURE_WRAP_T, get_gl_wrap(self->wrap_t)); + glSamplerParameteri(id, GL_TEXTURE_WRAP_T, get_gl_wrap(self.wrap_t)); if(mask&Sampler::WRAP_R) - glSamplerParameteri(id, GL_TEXTURE_WRAP_R, get_gl_wrap(self->wrap_r)); + glSamplerParameteri(id, GL_TEXTURE_WRAP_R, get_gl_wrap(self.wrap_r)); if(mask&Sampler::BORDER_COLOR) - glSamplerParameterfv(id, GL_TEXTURE_BORDER_COLOR, &self->border_color.r); + glSamplerParameterfv(id, GL_TEXTURE_BORDER_COLOR, &self.border_color.r); if(mask&Sampler::COMPARE) { - glSamplerParameteri(id, GL_TEXTURE_COMPARE_MODE, (self->compare ? GL_COMPARE_R_TO_TEXTURE : GL_NONE)); - if(self->compare) - glSamplerParameteri(id, GL_TEXTURE_COMPARE_FUNC, get_gl_predicate(self->cmp_func)); + glSamplerParameteri(id, GL_TEXTURE_COMPARE_MODE, (self.compare ? GL_COMPARE_R_TO_TEXTURE : GL_NONE)); + if(self.compare) + glSamplerParameteri(id, GL_TEXTURE_COMPARE_FUNC, get_gl_predicate(self.cmp_func)); } } void OpenGLSampler::set_debug_name(const string &name) { #ifdef DEBUG - if(id && KHR_debug) + if(KHR_debug) glObjectLabel(GL_SAMPLER, id, name.size(), name.c_str()); #else (void)name;