last_applied = 0;
}
-void PipelineState::set_shader_program(const Program *p)
+template<typename T>
+void PipelineState::set(T &target, T value, unsigned flag)
{
- if(p!=shprog)
+ if(value!=target)
{
- shprog = p;
- changes |= SHPROG;
+ target = value;
+ changes |= flag;
}
}
+void PipelineState::set_shader_program(const Program *p)
+{
+ set(shprog, p, SHPROG);
+}
+
void PipelineState::set_vertex_setup(const VertexSetup *s)
{
- if(s!=vertex_setup)
- {
- vertex_setup = s;
- changes |= VERTEX_SETUP;
- }
+ set(vertex_setup, s, VERTEX_SETUP);
}
void PipelineState::set_front_face(FaceWinding w)
{
- if(w!=front_face)
- {
- front_face = w;
- changes |= FACE_CULL;
- }
+ set(front_face, w, FACE_CULL);
}
void PipelineState::set_face_cull(CullMode c)
{
- if(c!=face_cull)
- {
- face_cull = c;
- changes |= FACE_CULL;
- }
+ set(face_cull, c, FACE_CULL);
}
void PipelineState::set_enabled_clip_planes(unsigned p)
{
- if(p!=enabled_clip_planes)
- {
- enabled_clip_planes = p;
- changes |= CLIP_PLANES;
- }
+ set(enabled_clip_planes, p, CLIP_PLANES);
}
void PipelineState::set_texture(unsigned binding, const Texture *tex, const Sampler *samp)
PipelineState();
~PipelineState();
+private:
+ template<typename T>
+ void set(T &, T, unsigned);
+public:
void set_shader_program(const Program *);
void set_vertex_setup(const VertexSetup *);
void set_front_face(FaceWinding);