Browse Source

Updated and simplified AbstractShaderProgram documentation.

vectorfields
Vladimír Vondruš 14 years ago
parent
commit
b97e6f8bce
  1. 47
      src/AbstractShaderProgram.h

47
src/AbstractShaderProgram.h

@ -63,8 +63,8 @@ static const GLint SpecularTextureLayer = 1;
- **Uniform locations** for setting uniform data (see below) (private
constants), for example:
@code
static const GLint TransformationMatrixUniform = 0;
static const GLint ProjectionMatrixUniform = 1;
static const GLint TransformationUniform = 0;
static const GLint ProjectionUniform = 1;
static const GLint DiffuseTextureUniform = 2;
static const GLint SpecularTextureUniform = 3;
@endcode
@ -81,13 +81,16 @@ MyShader() {
}
@endcode
- **Uniform setting functions**, which will provide public interface for
protected setUniform() functions. Example:
protected setUniform() functions. For usability purposes you can implement
also method chaining. Example:
@code
void setTransformationMatrixUniform(const Matrix4& matrix) {
setUniform(TransformationMatrixUniform, matrix);
MyShader* setTransformation(const Matrix4& matrix) {
setUniform(TransformationUniform, matrix);
return this;
}
void setProjectionMatrixUniform(const Matrix4& matrix) {
setUniform(ProjectionMatrixUniform, matrix);
MyShader* setProjection(const Matrix4& matrix) {
setUniform(ProjectionUniform, matrix);
return this;
}
@endcode
@ -144,8 +147,8 @@ code, e.g.:
@code
#version 430
// or #extension GL_ARB_explicit_uniform_location: enable
layout(location = 0) uniform mat4 transformationMatrix;
layout(location = 1) uniform mat4 projectionMatrix;
layout(location = 0) uniform mat4 transformation;
layout(location = 1) uniform mat4 projection;
@endcode
@requires_gl (for explicit uniform location instead of using uniformLocation())
@requires_gl43 Extension @extension{ARB,explicit_uniform_location} (for
@ -154,8 +157,8 @@ layout(location = 1) uniform mat4 projectionMatrix;
If you don't have the required extension, you can get uniform location using
uniformLocation() after linking stage:
@code
GLint transformationMatrixUniform = uniformLocation("transformationMatrix");
GLint projectionMatrixUniform = uniformLocation("projectionMatrix");
GLint transformationUniform = uniformLocation("transformation");
GLint projectionUniform = uniformLocation("projection");
@endcode
@subsection AbstractShaderProgram-texture-layer Binding texture layer uniforms
@ -183,18 +186,18 @@ setUniform(SpecularTextureUniform, SpecularTextureLayer);
@section AbstractShaderProgram-rendering-workflow Rendering workflow
Basic workflow with %AbstractShaderProgram subclasses is: instancing the class
(once at the beginning), then in Object::draw() reimplementation calling
use(), setting uniforms, binding required textures to their respective layers
using AbstractTexture::bind(GLint) and calling Mesh::draw(). For example:
(once at the beginning), then in draw event setting uniforms and marking the
shader for use, binding required textures to their respective layers using
AbstractTexture::bind(GLint) and calling Mesh::draw(). For example:
@code
void draw(const Magnum::Matrix4& transformationMatrix, Magnum::Camera* camera) {
shader.use();
shader.setTransformationMatrixUniform(transformationMatrix);
shader.setProjectionMatrixUniform(camera->projectionMatrix());
diffuseTexture.bind(MyShader::DiffuseTextureLayer);
specularTexture.bind(MyShader::SpecularTextureLayer);
mesh.draw();
}
shader->setTransformation(transformation)
->setProjection(projection)
->use();
diffuseTexture->bind(MyShader::DiffuseTextureLayer);
specularTexture->bind(MyShader::SpecularTextureLayer);
mesh.draw();
@endcode
@todo Uniform arrays support

Loading…
Cancel
Save