X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Frenderer.cpp;h=ce0b3447b2b02a43df1029db2b358cd4f8aa2cb8;hb=cebf1330ef6773b7b4496dc279ec02a7ca4351bb;hp=f2fb002e73bcbae24ab54f0b7ab16c6b42a6e520;hpb=99c6b7501afa7a712fdd61c8f1f1ecd6937a9783;p=libs%2Fgl.git diff --git a/source/render/renderer.cpp b/source/render/renderer.cpp index f2fb002e..ce0b3447 100644 --- a/source/render/renderer.cpp +++ b/source/render/renderer.cpp @@ -181,6 +181,12 @@ void Renderer::set_texture(Tag tag, const Texture *tex, int level, const Sampler set_resource(texture_stack, state.texture_count, tag, { tex, samp, level }); } +void Renderer::set_storage_texture(Tag tag, const Texture *tex) +{ + State &state = get_state(); + set_resource(texture_stack, state.texture_count, tag, { tex, 0, 0 }); +} + template void Renderer::set_resource(vector> &stack, unsigned &count, Tag tag, const T &res) { @@ -290,6 +296,14 @@ void Renderer::draw_instanced(const Batch &batch, unsigned count) commands.draw_instanced(batch, count); } +void Renderer::dispatch(unsigned count_x, unsigned count_y, unsigned count_z) +{ + apply_state(); + PipelineState &ps = get_pipeline_state(); + commands.use_pipeline(&ps); + commands.dispatch(count_x, count_y, count_z); +} + void Renderer::resolve_multisample(Framebuffer &target) { const State &state = get_state(); @@ -413,7 +427,12 @@ void Renderer::apply_state() if(t.binding<0 || shprog_changed) t.binding = state.shprog->get_uniform_binding(t.tag); if(t.binding>=0) - ps.set_texture(t.binding, t.resource.texture, t.resource.level, t.resource.sampler); + { + if(t.resource.sampler) + ps.set_texture(t.binding, t.resource.texture, t.resource.level, t.resource.sampler); + else + ps.set_storage_texture(t.binding, t.resource.texture); + } } static const DepthTest default_depth_test;