diff --git a/doc/opengl-support.dox b/doc/opengl-support.dox index 867845919..290e3888b 100644 --- a/doc/opengl-support.dox +++ b/doc/opengl-support.dox @@ -185,7 +185,7 @@ GLSL 4.30 | done @extension{ARB,program_interface_query} | | @extension{ARB,robust_buffer_access_behavior} | done (nothing to do) @extension{ARB,shader_image_size} | done (shading language only) -@extension{ARB,shader_storage_buffer_object} | only limit queries +@extension{ARB,shader_storage_buffer_object} | missing (unneeded) block binding @extension{ARB,stencil_texturing} | done @extension{ARB,texture_buffer_range} | done @extension{ARB,texture_query_levels} | done (shading language only) diff --git a/src/Magnum/AbstractShaderProgram.h b/src/Magnum/AbstractShaderProgram.h index ac0552193..6d75f1783 100644 --- a/src/Magnum/AbstractShaderProgram.h +++ b/src/Magnum/AbstractShaderProgram.h @@ -289,6 +289,27 @@ setUniformBlockBinding(uniformBlockIndex("material"), 1); @requires_gles Explicit uniform block binding is not supported in WebGL. Use @ref uniformBlockIndex() and @ref setUniformBlockBinding() instead. +@anchor AbstractShaderProgram-shader-storage-block-binding +### Shader storage block bindings + +The workflow is to specify shader storage block binding directly in the shader +code, e.g.: +@code +// GLSL 4.30 or GLSL ES 3.10 +layout(std430, binding = 0) buffer vertices { + vec3 position; + vec3 color; +}; +layout(std430, binding = 1) buffer normals { + vec3 normal; +}; +@endcode + +@see @ref Buffer::maxShaderStorageBindings() +@requires_gl43 Extension @extension{ARB,shader_storage_buffer_object} +@requires_gles31 Shader storage is not available in OpenGL ES 3.0 and older. +@requires_gles Shader storage is not available in WebGL. + @anchor AbstractShaderProgram-texture-units ### Specifying texture binding units