X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fbackends%2Fopengl%2Fpipelinestate_backend.cpp;h=a2b8ab32717555bc329b85a515f2b58818738ff0;hp=3b8c6a5ae736c3f33543f9febb1c4b5a17696142;hb=2a70fecfbbe8708be2bdaa75d222dd5a889a8ed3;hpb=569772f5aba5380a48002cd73b8d33eb25fd4048 diff --git a/source/backends/opengl/pipelinestate_backend.cpp b/source/backends/opengl/pipelinestate_backend.cpp index 3b8c6a5a..a2b8ab32 100644 --- a/source/backends/opengl/pipelinestate_backend.cpp +++ b/source/backends/opengl/pipelinestate_backend.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -128,7 +129,7 @@ void OpenGLPipelineState::apply() const call.func(call.location, call.size, data+call.location*16); } } - else if(r.type==PipelineState::TEXTURE) + else if(r.type==PipelineState::SAMPLED_TEXTURE) { if(ARB_direct_state_access) glBindTextureUnit(r.binding, r.texture->id); @@ -145,6 +146,14 @@ void OpenGLPipelineState::apply() const glBindSampler(r.binding, r.sampler->id); r.sampler->refresh(); } + else if(r.type==PipelineState::STORAGE_TEXTURE) + { + static Require _req(ARB_shader_image_load_store); + GLenum gl_format = get_gl_pixelformat(r.texture->get_format()); + glBindImageTexture(r.binding, r.texture->id, 0, true, 0, GL_READ_WRITE, gl_format); + + dev_state.bound_storage_textures[r.binding] = 1; + } } r.changed = false; @@ -260,6 +269,13 @@ void OpenGLPipelineState::clear() dev_state.bound_tex_targets[i] = 0; } + for(unsigned i=0; i