#include <stdexcept>
#include <msp/core/algorithm.h>
+#include "error.h"
#include "pipelinestate.h"
using namespace std;
}
void PipelineState::set_texture(unsigned binding, const Texture *tex, const Sampler *samp)
+{
+ set_texture(binding, tex, -1, samp);
+}
+
+void PipelineState::set_texture(unsigned binding, const Texture *tex, int level, const Sampler *samp)
{
if((tex!=0)!=(samp!=0))
throw invalid_argument("PipelineState::set_texture");
+ if(level>=0 && !can_bind_tex_level(level))
+ throw invalid_operation("PipelineState::set_texture");
auto i = lower_bound_member(textures, binding, &BoundTexture::binding);
if(i==textures.end() || i->binding!=binding)
i = textures.insert(i, BoundTexture(binding));
i->used = (tex && samp);
- if(tex!=i->texture || samp!=i->sampler)
+ if(tex!=i->texture || level!=i->level || samp!=i->sampler)
{
i->texture = tex;
i->sampler = samp;
+ i->level = level;
i->changed = true;
changes |= TEXTURES;
}