Browse Source

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

Shader implementations now have to include Vector, Matrix and Color
classes on their own.
vectorfields
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