#include <msp/strings/format.h>
+#include "deviceinfo.h"
#include "error.h"
#include "sampler.h"
namespace Msp {
namespace GL {
-Sampler::Sampler():
- min_filter(NEAREST_MIPMAP_LINEAR),
- mag_filter(LINEAR),
- max_anisotropy(1.0f),
- wrap_s(REPEAT),
- wrap_t(REPEAT),
- wrap_r(REPEAT),
- border_color(Color(0.0f, 0.0f, 0.0f, 0.0f)),
- compare(false),
- cmp_func(LEQUAL),
- dirty_params(0)
-{ }
-
void Sampler::update() const
{
SamplerBackend::update(dirty_params);
void Sampler::set_mag_filter(TextureFilter f)
{
+ if(is_mipmapped(f))
+ throw invalid_argument("Sampler::set_mag_filter");
mag_filter = f;
dirty_params |= MAG_FILTER;
}
{
if(a<1.0f)
throw invalid_argument("Sampler::set_max_anisotropy");
+ if(a>DeviceInfo::get_global().limits.max_anisotropy)
+ throw out_of_range("Sampler::set_max_anisotropy");
bool supported = check_anisotropic(a>1.0f);
max_anisotropy = a;
if(supported)
dirty_params |= MAX_ANISOTROPY;
}
-void Sampler::set_wrap(TextureWrap w)
-{
- set_wrap_s(w);
- set_wrap_t(w);
- set_wrap_r(w);
-}
-
void Sampler::set_wrap_s(TextureWrap w)
{
wrap_s = w;
dirty_params |= WRAP_R;
}
+void Sampler::set_wrap(TextureWrap w)
+{
+ set_wrap_s(w);
+ set_wrap_t(w);
+ set_wrap_r(w);
+}
+
void Sampler::set_border_color(const Color &c)
{
border_color = c;