-void Sampler::update_parameter(int mask) const
-{
- if(owner)
- {
- if(!owner->get_id())
- {
- dirty_params |= mask;
- return;
- }
-
- if(!ARB_direct_state_access && TexUnit::current().get_texture()!=owner)
- {
- TexUnit *unit = TexUnit::find_unit(owner);
- if(!unit)
- {
- dirty_params |= mask;
- return;
- }
-
- unit->bind();
- }
- }
-
- if(mask&MIN_FILTER)
- set_parameter_i(GL_TEXTURE_MIN_FILTER, min_filter);
- if(mask&MAG_FILTER)
- set_parameter_i(GL_TEXTURE_MAG_FILTER, mag_filter);
- if(mask&MAX_ANISOTROPY)
- set_parameter_f(GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy);
- if(mask&WRAP_S)
- set_parameter_i(GL_TEXTURE_WRAP_S, wrap_s);
- if(mask&WRAP_T)
- set_parameter_i(GL_TEXTURE_WRAP_T, wrap_t);
- if(mask&WRAP_R)
- set_parameter_i(GL_TEXTURE_WRAP_R, wrap_r);
- if(mask&BORDER_COLOR)
- set_parameter_fv(GL_TEXTURE_BORDER_COLOR, &border_color.r);
- if(mask&COMPARE)
- {
- set_parameter_i(GL_TEXTURE_COMPARE_MODE, (compare ? GL_COMPARE_R_TO_TEXTURE : GL_NONE));
- if(compare)
- set_parameter_i(GL_TEXTURE_COMPARE_FUNC, cmp_func);
- }
-}
-
-void Sampler::set_parameter_i(unsigned param, int value) const
-{
- if(id)
- glSamplerParameteri(id, param, value);
- else if(ARB_direct_state_access)
- glTextureParameteri(owner->get_id(), param, value);
- else
- glTexParameteri(owner->get_target(), param, value);
-}
-
-void Sampler::set_parameter_f(unsigned param, float value) const
-{
- if(id)
- glSamplerParameterf(id, param, value);
- else if(ARB_direct_state_access)
- glTextureParameterf(owner->get_id(), param, value);
- else
- glTexParameterf(owner->get_target(), param, value);
-}
-
-void Sampler::set_parameter_fv(unsigned param, const float *value) const
-{
- if(id)
- glSamplerParameterfv(id, param, value);
- else if(ARB_direct_state_access)
- glTextureParameterfv(owner->get_id(), param, value);
- else
- glTexParameterfv(owner->get_target(), param, value);
-}
-