if(c)
set_camera(*c);
else
+ {
standard_shdata.uniform("projection_matrix", Matrix());
+ standard_shdata.uniform("eye_world_matrix", Matrix());
+ }
}
Renderer::~Renderer()
{
state->camera = &c;
standard_shdata.uniform("projection_matrix", state->camera->get_projection_matrix());
+ standard_shdata.uniform("eye_world_matrix", state->camera->get_view_matrix());
changed |= STANDARD_SHDATA|LEGACY_PROJECTION;
set_matrix(state->camera->get_view_matrix());
}
state->reverse_winding = r;
}
+void Renderer::set_object_lod_bias(unsigned b)
+{
+ state->object_lod_bias = b;
+}
+
void Renderer::push_state()
{
state_stack.push_back(state_stack.back());
if(camera_changed)
{
if(state->camera)
+ {
standard_shdata.uniform("projection_matrix", state->camera->get_projection_matrix());
+ standard_shdata.uniform("eye_world_matrix", state->camera->get_view_matrix());
+ }
else
+ {
standard_shdata.uniform("projection_matrix", Matrix());
+ standard_shdata.uniform("eye_world_matrix", Matrix());
+ }
changed |= STANDARD_SHDATA|LEGACY_PROJECTION;
}
/* This actually should compare the relevant matrices rather than check for
{
apply_state();
- bool legacy_bindings = (!state->shprog || state->shprog->uses_legacy_variables());
- if(state->mesh && legacy_bindings)
- {
- if(const Buffer *ibuf = state->mesh->get_index_buffer())
- ibuf->bind_to(ELEMENT_ARRAY_BUFFER);
- else
- Buffer::unbind_from(ELEMENT_ARRAY_BUFFER);
- }
-
batch.draw();
}
+void Renderer::draw_instanced(const Batch &batch, unsigned count)
+{
+ apply_state();
+
+ batch.draw_instanced(count);
+}
+
void Renderer::apply_state()
{
/* We (mostly) let the objects themselves figure out if the binding has
{
Mesh::unbind();
state->mesh->get_vertices().apply();
+ if(const Buffer *ibuf = state->mesh->get_index_buffer())
+ ibuf->bind_to(ELEMENT_ARRAY_BUFFER);
+ else
+ Buffer::unbind_from(ELEMENT_ARRAY_BUFFER);
}
else
state->mesh->bind();
mesh(0),
vertex_setup(0),
winding_test(0),
- reverse_winding(false)
+ reverse_winding(false),
+ object_lod_bias(0)
{ }
} // namespace GL