mtx_changed(false),
camera(c),
state_stack(1),
- vertex_array(0),
+ lighting_changed(false),
element_buffer(0)
{
state_stack.reserve(16);
Texturing::unbind();
Texture::unbind_from(0);
Material::unbind();
+ Lighting::unbind();
Program::unbind();
Buffer::unbind_from(ELEMENT_ARRAY_BUFFER);
WindingTest::unbind();
shdata_changed = true;
}
-void Renderer::set_vertex_array(const VertexArray *a)
-{
- vertex_array = a;
-}
-
void Renderer::set_element_buffer(const Buffer *b)
{
element_buffer = b;
state->winding_test = w;
}
+void Renderer::set_reverse_winding(bool r)
+{
+ state->reverse_winding = r;
+}
+
void Renderer::push_state()
{
state_stack.push_back(state_stack.back());
void Renderer::draw(const Batch &batch)
{
- if(!vertex_array)
- throw invalid_operation("Renderer::draw");
-
apply_state();
- vertex_array->apply();
-
if(element_buffer)
element_buffer->bind_to(ELEMENT_ARRAY_BUFFER);
else
Program::unbind();
if(state->winding_test)
- state->winding_test->bind();
+ {
+ if(state->reverse_winding)
+ state->winding_test->get_reverse().bind();
+ else
+ state->winding_test->bind();
+ }
else
WindingTest::unbind();