X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fopengl%2Fsampler_backend.cpp;h=31dcc6bcf0f48b5b18a06625fc02cb5f9c3c8d33;hb=HEAD;hp=85d278d3a1a1da75d4d098ea1aeb6457a5ae18c1;hpb=d279ad43486e287d4fe7e759e31b026949021260;p=libs%2Fgl.git diff --git a/source/backends/opengl/sampler_backend.cpp b/source/backends/opengl/sampler_backend.cpp index 85d278d3..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,26 +46,26 @@ 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)); } }