-#include "arb_shader_objects.h"
+#include <msp/gl/extensions/arb_shader_objects.h>
+#include <msp/gl/extensions/nv_non_square_matrices.h>
#include "uniform.h"
namespace Msp {
namespace GL {
template<>
-void UniformScalar<int>::apply(int index) const
+void UniformScalar<int>::apply(int index, unsigned size, const int *value)
{
- glUniform1iARB(index, value);
+ glUniform1iv(index, size, value);
}
template<>
-void UniformScalar<float>::apply(int index) const
+void UniformScalar<float>::apply(int index, unsigned size, const float *value)
{
- glUniform1fARB(index, value);
+ glUniform1fv(index, size, value);
}
template<>
-void UniformVector<float, 2>::apply(int index) const
+void UniformVector<int, 2>::apply(int index, unsigned size, const int *value)
{
- glUniform2fvARB(index, 1, value);
+ glUniform2iv(index, size, value);
}
template<>
-void UniformVector<float, 3>::apply(int index) const
+void UniformVector<float, 2>::apply(int index, unsigned size, const float *value)
{
- glUniform3fvARB(index, 1, value);
+ glUniform2fv(index, size, value);
}
template<>
-void UniformVector<float, 4>::apply(int index) const
+void UniformVector<int, 3>::apply(int index, unsigned size, const int *value)
{
- glUniform4fvARB(index, 1, value);
+ glUniform3iv(index, size, value);
}
+template<>
+void UniformVector<float, 3>::apply(int index, unsigned size, const float *value)
+{
+ glUniform3fv(index, size, value);
+}
+
+template<>
+void UniformVector<int, 4>::apply(int index, unsigned size, const int *value)
+{
+ glUniform4iv(index, size, value);
+}
+
+template<>
+void UniformVector<float, 4>::apply(int index, unsigned size, const float *value)
+{
+ glUniform4fv(index, size, value);
+}
+
+
+template<>
+void UniformMatrix<float, 2, 2>::apply(int index, unsigned size, const float *value)
+{
+ glUniformMatrix2fv(index, size, false, value);
+}
+
+template<>
+void UniformMatrix<float, 2, 3>::apply(int index, unsigned size, const float *value)
+{
+ glUniformMatrix3x2fv(index, size, false, value);
+}
+
+template<>
+void UniformMatrix<float, 2, 4>::apply(int index, unsigned size, const float *value)
+{
+ glUniformMatrix4x2fv(index, size, false, value);
+}
+
+template<>
+void UniformMatrix<float, 3, 2>::apply(int index, unsigned size, const float *value)
+{
+ glUniformMatrix2x3fv(index, size, false, value);
+}
+
+template<>
+void UniformMatrix<float, 3, 3>::apply(int index, unsigned size, const float *value)
+{
+ glUniformMatrix3fv(index, size, false, value);
+}
+
+template<>
+void UniformMatrix<float, 3, 4>::apply(int index, unsigned size, const float *value)
+{
+ glUniformMatrix4x3fv(index, size, false, value);
+}
+
+template<>
+void UniformMatrix<float, 4, 2>::apply(int index, unsigned size, const float *value)
+{
+ glUniformMatrix2x4fv(index, size, false, value);
+}
+
+template<>
+void UniformMatrix<float, 4, 3>::apply(int index, unsigned size, const float *value)
+{
+ glUniformMatrix3x4fv(index, size, false, value);
+}
template<>
-void UniformMatrix<float, 4, 4>::apply(int index) const
+void UniformMatrix<float, 4, 4>::apply(int index, unsigned size, const float *value)
{
- glUniformMatrix4fvARB(index, 1, false, value);
+ glUniformMatrix4fv(index, size, false, value);
}
} // namespace GL