X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fsampler.cpp;h=6f4770acb4e40a73ea6270bfeabcbeeec273fcc8;hb=9813f8711628a0fbe786406e974dc33546dc9cee;hp=c810789b605130626c1e84d4f27ecd9f7ce6a81e;hpb=669e9bfc18d2f5e28a9c715e1a69b7637a2d9c8b;p=libs%2Fgl.git diff --git a/source/core/sampler.cpp b/source/core/sampler.cpp index c810789b..6f4770ac 100644 --- a/source/core/sampler.cpp +++ b/source/core/sampler.cpp @@ -1,13 +1,6 @@ -#include -#include -#include -#include -#include -#include #include #include "error.h" #include "sampler.h" -#include "texture.h" using namespace std; @@ -25,37 +18,11 @@ Sampler::Sampler(): compare(false), cmp_func(LEQUAL), dirty_params(0) -{ - Require _req(ARB_sampler_objects); - if(ARB_direct_state_access) - glCreateSamplers(1, &id); - else - glGenSamplers(1, &id); -} +{ } void Sampler::update() const { - if(dirty_params&MIN_FILTER) - glSamplerParameteri(id, GL_TEXTURE_MIN_FILTER, min_filter); - if(dirty_params&MAG_FILTER) - glSamplerParameteri(id, GL_TEXTURE_MAG_FILTER, mag_filter); - if(dirty_params&MAX_ANISOTROPY) - glSamplerParameterf(id, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy); - if(dirty_params&WRAP_S) - glSamplerParameteri(id, GL_TEXTURE_WRAP_S, wrap_s); - if(dirty_params&WRAP_T) - glSamplerParameteri(id, GL_TEXTURE_WRAP_T, wrap_t); - if(dirty_params&WRAP_R) - glSamplerParameteri(id, GL_TEXTURE_WRAP_R, wrap_r); - if(dirty_params&BORDER_COLOR) - glSamplerParameterfv(id, GL_TEXTURE_BORDER_COLOR, &border_color.r); - if(dirty_params&COMPARE) - { - glSamplerParameteri(id, GL_TEXTURE_COMPARE_MODE, (compare ? GL_COMPARE_R_TO_TEXTURE : GL_NONE)); - if(compare) - glSamplerParameteri(id, GL_TEXTURE_COMPARE_FUNC, get_gl_predicate(cmp_func)); - } - + SamplerBackend::update(dirty_params); dirty_params = 0; } @@ -81,10 +48,9 @@ void Sampler::set_max_anisotropy(float a) { if(a<1.0f) throw invalid_argument("Sampler::set_max_anisotropy"); - else if(a>1.0f) - static Require _req(EXT_texture_filter_anisotropic); + bool supported = check_anisotropic(a>1.0f); max_anisotropy = a; - if(EXT_texture_filter_anisotropic) + if(supported) dirty_params |= MAX_ANISOTROPY; } @@ -92,8 +58,7 @@ void Sampler::set_wrap(TextureWrap w) { set_wrap_s(w); set_wrap_t(w); - if(EXT_texture3D) - set_wrap_r(w); + set_wrap_r(w); } void Sampler::set_wrap_s(TextureWrap w) @@ -110,7 +75,6 @@ void Sampler::set_wrap_t(TextureWrap w) void Sampler::set_wrap_r(TextureWrap w) { - static Require _req(EXT_texture3D); wrap_r = w; dirty_params |= WRAP_R; } @@ -129,22 +93,11 @@ void Sampler::disable_compare() void Sampler::set_compare(Predicate f) { - static Require _req(ARB_shadow); compare = true; cmp_func = f; dirty_params |= COMPARE; } -void Sampler::set_debug_name(const string &name) -{ -#ifdef DEBUG - if(id && KHR_debug) - glObjectLabel(GL_SAMPLER, id, name.size(), name.c_str()); -#else - (void)name; -#endif -} - Sampler::Loader::Loader(Sampler &s): DataFile::ObjectLoader(s)