]> git.tdb.fi Git - libs/gl.git/commitdiff
Add the specializations for non-square matrix uniforms
authorMikko Rasa <tdb@tdb.fi>
Sun, 9 Feb 2020 20:51:04 +0000 (22:51 +0200)
committerMikko Rasa <tdb@tdb.fi>
Sun, 9 Feb 2020 21:00:12 +0000 (23:00 +0200)
These were forgotten from d971f8d.

source/uniform.cpp
source/uniform.h

index b183719fe339debaf55402b35cb2eeda15bb3d8a..c18fc360674a056315d62bb64d188b6a023a4508 100644 (file)
@@ -1,4 +1,5 @@
 #include <msp/gl/extensions/arb_shader_objects.h>
+#include <msp/gl/extensions/nv_non_square_matrices.h>
 #include "uniform.h"
 
 namespace Msp {
@@ -60,12 +61,48 @@ void UniformMatrix<float, 2, 2>::apply(int index, unsigned size, const float *va
        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, unsigned size, const float *value)
 {
index 8dc43ab5791a7e48b8055297003d5eb3c7f77e4b..ad2d88cc477715021baea7a4f7df4798b43173e7 100644 (file)
@@ -124,8 +124,15 @@ public:
        { return new UniformMatrix(value); }
 };
 
+// The naming of these types follows the OpenGL convention of columns x rows
 typedef UniformMatrix<float, 2, 2> UniformMatrix2x2f;
+typedef UniformMatrix<float, 2, 3> UniformMatrix3x2f;
+typedef UniformMatrix<float, 2, 4> UniformMatrix4x2f;
+typedef UniformMatrix<float, 3, 2> UniformMatrix2x3f;
 typedef UniformMatrix<float, 3, 3> UniformMatrix3x3f;
+typedef UniformMatrix<float, 3, 4> UniformMatrix4x3f;
+typedef UniformMatrix<float, 4, 2> UniformMatrix2x4f;
+typedef UniformMatrix<float, 4, 3> UniformMatrix3x4f;
 typedef UniformMatrix<float, 4, 4> UniformMatrix4x4f;