Browse Source

Using only RectangularMatrix in setUniform(), added remaining setters.

Shader implementations now have to include Vector, Matrix and Color
classes on their own.
pull/279/head
Vladimír Vondruš 14 years ago
parent
commit
23cbc121d6
  1. 79
      src/AbstractShaderProgram.h
  2. 10
      src/Shaders/PhongShader.h

79
src/AbstractShaderProgram.h

@ -21,9 +21,7 @@
#include <map>
#include "Math/Matrix3.h"
#include "Math/Matrix4.h"
#include "Math/Vector4.h"
#include "Math/RectangularMatrix.h"
#include "Magnum.h"
#include "magnumVisibility.h"
@ -379,17 +377,17 @@ class MAGNUM_EXPORT AbstractShaderProgram {
}
/** @copydoc setUniform(GLint, GLfloat) */
inline void setUniform(GLint location, const Vector2& value) {
inline void setUniform(GLint location, const Math::RectangularMatrix<1, 2, GLfloat>& value) {
glUniform2fv(location, 1, value.data());
}
/** @copydoc setUniform(GLint, GLfloat) */
inline void setUniform(GLint location, const Vector3& value) {
inline void setUniform(GLint location, const Math::RectangularMatrix<1, 3, GLfloat>& value) {
glUniform3fv(location, 1, value.data());
}
/** @copydoc setUniform(GLint, GLfloat) */
inline void setUniform(GLint location, const Vector4& value) {
inline void setUniform(GLint location, const Math::RectangularMatrix<1, 4, GLfloat>& value) {
glUniform4fv(location, 1, value.data());
}
@ -399,17 +397,17 @@ class MAGNUM_EXPORT AbstractShaderProgram {
}
/** @copydoc setUniform(GLint, GLint) */
inline void setUniform(GLint location, const Math::Vector2<GLint>& value) {
inline void setUniform(GLint location, const Math::RectangularMatrix<1, 2, GLint>& value) {
glUniform2iv(location, 1, value.data());
}
/** @copydoc setUniform(GLint, GLint) */
inline void setUniform(GLint location, const Math::Vector3<GLint>& value) {
inline void setUniform(GLint location, const Math::RectangularMatrix<1, 3, GLint>& value) {
glUniform3iv(location, 1, value.data());
}
/** @copydoc setUniform(GLint, GLint) */
inline void setUniform(GLint location, const Math::Vector4<GLint>& value) {
inline void setUniform(GLint location, const Math::RectangularMatrix<1, 4, GLint>& value) {
glUniform4iv(location, 1, value.data());
}
@ -427,7 +425,7 @@ class MAGNUM_EXPORT AbstractShaderProgram {
* @requires_gl30 Extension @extension{EXT,gpu_shader4}
* @requires_gles30 (no extension providing this functionality)
*/
inline void setUniform(GLint location, const Math::Vector2<GLuint>& value) {
inline void setUniform(GLint location, const Math::RectangularMatrix<1, 2, GLuint>& value) {
glUniform2uiv(location, 1, value.data());
}
@ -436,7 +434,7 @@ class MAGNUM_EXPORT AbstractShaderProgram {
* @requires_gl30 Extension @extension{EXT,gpu_shader4}
* @requires_gles30 (no extension providing this functionality)
*/
inline void setUniform(GLint location, const Math::Vector3<GLuint>& value) {
inline void setUniform(GLint location, const Math::RectangularMatrix<1, 3, GLuint>& value) {
glUniform3uiv(location, 1, value.data());
}
@ -445,20 +443,73 @@ class MAGNUM_EXPORT AbstractShaderProgram {
* @requires_gl30 Extension @extension{EXT,gpu_shader4}
* @requires_gles30 (no extension providing this functionality)
*/
inline void setUniform(GLint location, const Math::Vector4<GLuint>& value) {
inline void setUniform(GLint location, const Math::RectangularMatrix<1, 4, GLuint>& value) {
glUniform4uiv(location, 1, value.data());
}
/** @copydoc setUniform(GLint, GLint) */
inline void setUniform(GLint location, const Matrix3& value) {
inline void setUniform(GLint location, const Math::RectangularMatrix<2, 2, GLfloat>& value) {
glUniformMatrix2fv(location, 1, GL_FALSE, value.data());
}
/** @copydoc setUniform(GLint, GLint) */
inline void setUniform(GLint location, const Math::RectangularMatrix<3, 3, GLfloat>& value) {
glUniformMatrix3fv(location, 1, GL_FALSE, value.data());
}
/** @copydoc setUniform(GLint, GLint) */
inline void setUniform(GLint location, const Matrix4& value) {
inline void setUniform(GLint location, const Math::RectangularMatrix<4, 4, GLfloat>& value) {
glUniformMatrix4fv(location, 1, GL_FALSE, value.data());
}
/**
* @copydoc setUniform(GLint, GLint)
* @requires_gles30 (no extension providing this functionality)
*/
inline void setUniform(GLint location, const Math::RectangularMatrix<2, 3, GLfloat>& value) {
glUniformMatrix2x3fv(location, 1, GL_FALSE, value.data());
}
/**
* @copydoc setUniform(GLint, GLint)
* @requires_gles30 (no extension providing this functionality)
*/
inline void setUniform(GLint location, const Math::RectangularMatrix<3, 2, GLfloat>& value) {
glUniformMatrix3x2fv(location, 1, GL_FALSE, value.data());
}
/**
* @copydoc setUniform(GLint, GLint)
* @requires_gles30 (no extension providing this functionality)
*/
inline void setUniform(GLint location, const Math::RectangularMatrix<2, 4, GLfloat>& value) {
glUniformMatrix2x4fv(location, 1, GL_FALSE, value.data());
}
/**
* @copydoc setUniform(GLint, GLint)
* @requires_gles30 (no extension providing this functionality)
*/
inline void setUniform(GLint location, const Math::RectangularMatrix<4, 2, GLfloat>& value) {
glUniformMatrix4x2fv(location, 1, GL_FALSE, value.data());
}
/**
* @copydoc setUniform(GLint, GLint)
* @requires_gles30 (no extension providing this functionality)
*/
inline void setUniform(GLint location, const Math::RectangularMatrix<3, 4, GLfloat>& value) {
glUniformMatrix3x4fv(location, 1, GL_FALSE, value.data());
}
/**
* @copydoc setUniform(GLint, GLint)
* @requires_gles30 (no extension providing this functionality)
*/
inline void setUniform(GLint location, const Math::RectangularMatrix<4, 3, GLfloat>& value) {
glUniformMatrix4x3fv(location, 1, GL_FALSE, value.data());
}
private:
enum State {
Initialized,

10
src/Shaders/PhongShader.h

@ -19,7 +19,9 @@
* @brief Class Magnum::Shaders::PhongShader
*/
#include "Math/Matrix4.h"
#include "AbstractShaderProgram.h"
#include "Color.h"
#include "magnumShadersVisibility.h"
@ -44,12 +46,12 @@ class SHADERS_EXPORT PhongShader: public AbstractShaderProgram {
*
* If not set, default value is `(0.0f, 0.0f, 0.0f)`.
*/
inline void setAmbientColorUniform(const Vector3& color) {
inline void setAmbientColorUniform(const Color3<GLfloat>& color) {
setUniform(ambientColorUniform, color);
}
/** @brief Diffuse color */
inline void setDiffuseColorUniform(const Vector3& color) {
inline void setDiffuseColorUniform(const Color3<GLfloat>& color) {
setUniform(diffuseColorUniform, color);
}
@ -58,7 +60,7 @@ class SHADERS_EXPORT PhongShader: public AbstractShaderProgram {
*
* If not set, default value is `(1.0f, 1.0f, 1.0f)`.
*/
inline void setSpecularColorUniform(const Vector3& color) {
inline void setSpecularColorUniform(const Color3<GLfloat>& color) {
setUniform(specularColorUniform, color);
}
@ -92,7 +94,7 @@ class SHADERS_EXPORT PhongShader: public AbstractShaderProgram {
*
* If not set, default value is `(1.0f, 1.0f, 1.0f)`.
*/
inline void setLightColorUniform(const Vector3& color) {
inline void setLightColorUniform(const Color3<GLfloat>& color) {
setUniform(lightColorUniform, color);
}

Loading…
Cancel
Save