-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
-#include "arb_shader_objects.h"
+#include <msp/gl/extensions/arb_shader_objects.h>
#include "uniform.h"
namespace Msp {
namespace GL {
-Uniform1i::Uniform1i(int v_):
- v(v_)
-{ }
-
-void Uniform1i::apply(int index) const
+template<>
+void UniformScalar<int>::apply(int index, unsigned size, const int *value)
{
- glUniform1iARB(index, v);
+ glUniform1iv(index, size, value);
}
+template<>
+void UniformScalar<float>::apply(int index, unsigned size, const float *value)
+{
+ glUniform1fv(index, size, value);
+}
-Uniform1f::Uniform1f(float v_):
- v(v_)
-{ }
-void Uniform1f::apply(int index) const
+template<>
+void UniformVector<int, 2>::apply(int index, unsigned size, const int *value)
{
- glUniform1fARB(index, v);
+ glUniform2iv(index, size, value);
}
-
-Uniform2f::Uniform2f(float v0, float v1)
+template<>
+void UniformVector<float, 2>::apply(int index, unsigned size, const float *value)
{
- v[0]=v0;
- v[1]=v1;
+ glUniform2fv(index, size, value);
}
-void Uniform2f::apply(int index) const
+template<>
+void UniformVector<int, 3>::apply(int index, unsigned size, const int *value)
{
- glUniform2fvARB(index, 1, v);
+ glUniform3iv(index, size, value);
}
+template<>
+void UniformVector<float, 3>::apply(int index, unsigned size, const float *value)
+{
+ glUniform3fv(index, size, value);
+}
-Uniform3f::Uniform3f(float v0, float v1, float v2)
+template<>
+void UniformVector<int, 4>::apply(int index, unsigned size, const int *value)
{
- v[0]=v0;
- v[1]=v1;
- v[2]=v2;
+ glUniform4iv(index, size, value);
}
-void Uniform3f::apply(int index) const
+template<>
+void UniformVector<float, 4>::apply(int index, unsigned size, const float *value)
{
- glUniform3fvARB(index, 1, v);
+ glUniform4fv(index, size, value);
}
-Uniform4f::Uniform4f(float v0, float v1, float v2, float v3)
+template<>
+void UniformMatrix<float, 2, 2>::apply(int index, unsigned size, const float *value)
+{
+ glUniformMatrix2fv(index, size, false, value);
+}
+
+template<>
+void UniformMatrix<float, 3, 3>::apply(int index, unsigned size, const float *value)
{
- v[0]=v0;
- v[1]=v1;
- v[2]=v2;
- v[3]=v3;
+ glUniformMatrix3fv(index, size, false, value);
}
-void Uniform4f::apply(int index) const
+template<>
+void UniformMatrix<float, 4, 4>::apply(int index, unsigned size, const float *value)
{
- glUniform4fvARB(index, 1, v);
+ glUniformMatrix4fv(index, size, false, value);
}
} // namespace GL