X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Frenderer.cpp;h=946f0100bbbf0a5467877e451343d643a0f13670;hb=5003bcfeb0832ec2d0f74f4149bc97888a70a900;hp=58a56ff2f2d105e5213e9b6a6cd837ea68f06e0e;hpb=e70662d7812464159f2e47f4bebb69d88f89ae93;p=libs%2Fgl.git diff --git a/source/render/renderer.cpp b/source/render/renderer.cpp index 58a56ff2..946f0100 100644 --- a/source/render/renderer.cpp +++ b/source/render/renderer.cpp @@ -32,12 +32,14 @@ void Renderer::begin() if(current_state) throw invalid_operation("Renderer::begin"); - state_stack.push_back(State()); + ++frame_index; + state_stack.emplace_back(); current_state = &state_stack.back(); RendererBackend::begin(); add_shader_data(standard_shdata); + commands.begin_frame(frame_index); } void Renderer::end() @@ -137,6 +139,11 @@ void Renderer::add_shader_data(const ProgramData &d) } void Renderer::set_texture(Tag tag, const Texture *tex, const Sampler *samp) +{ + set_texture(tag, tex, -1, samp); +} + +void Renderer::set_texture(Tag tag, const Texture *tex, int level, const Sampler *samp) { State &state = get_state(); @@ -163,11 +170,12 @@ void Renderer::set_texture(Tag tag, const Texture *tex, const Sampler *samp) break; } - texture_stack.push_back(BoundTexture()); + texture_stack.emplace_back(); BoundTexture &bound_tex = texture_stack.back(); bound_tex.tag = tag; bound_tex.texture = tex; bound_tex.sampler = samp; + bound_tex.level = level; state.texture_count = texture_stack.size(); } @@ -240,6 +248,7 @@ void Renderer::draw(const Batch &batch) { apply_state(); batch.refresh(); + pipeline_state.set_primitive_type(batch.get_type()); commands.use_pipeline(&pipeline_state); commands.draw(batch); } @@ -248,6 +257,7 @@ void Renderer::draw_instanced(const Batch &batch, unsigned count) { apply_state(); batch.refresh(); + pipeline_state.set_primitive_type(batch.get_type()); commands.use_pipeline(&pipeline_state); commands.draw_instanced(batch, count); } @@ -340,7 +350,7 @@ void Renderer::apply_state() if(t.binding<0 || shprog_changed) t.binding = state.shprog->get_uniform_binding(t.tag); if(t.binding>=0) - pipeline_state.set_texture(t.binding, t.texture, t.sampler); + pipeline_state.set_texture(t.binding, t.texture, t.level, t.sampler); } pipeline_state.set_depth_test(state.depth_test);