]> git.sesse.net Git - movit/blobdiff - white_balance_effect.cpp
Fix an issue where a (cached) shader program could be used from multiple
[movit] / white_balance_effect.cpp
index ef60e7a92174f0627703128131bf087dcba263db..07c95cac4ca473b52dda9f9d80ddbf9fda918a52 100644 (file)
@@ -1,6 +1,6 @@
 #include <Eigen/Core>
 #include <Eigen/LU>
-#include <GL/glew.h>
+#include <epoxy/gl.h>
 #include <assert.h>
 
 #include "colorspace_conversion_effect.h"
@@ -13,6 +13,8 @@
 using namespace Eigen;
 using namespace std;
 
+namespace movit {
+
 namespace {
 
 // Temperature is in Kelvin. Formula from http://en.wikipedia.org/wiki/Planckian_locus#Approximation .
@@ -103,6 +105,7 @@ WhiteBalanceEffect::WhiteBalanceEffect()
 {
        register_vec3("neutral_color", (float *)&neutral_color);
        register_float("output_color_temperature", &output_color_temperature);
+       register_uniform_mat3("correction_matrix", &uniform_correction_matrix);
 }
 
 string WhiteBalanceEffect::output_fragment_shader()
@@ -140,11 +143,12 @@ void WhiteBalanceEffect::set_gl_state(GLuint glsl_program_num, const string &pre
         * Note that since we postmultiply our vectors, the order of the matrices
         * has to be the opposite of the execution order.
         */
-       Matrix3d corr_matrix =
+       uniform_correction_matrix =
                rgb_to_xyz_matrix.inverse() *
                Map<const Matrix3d>(xyz_to_lms_matrix).inverse() *
                lms_scale.asDiagonal() *
                Map<const Matrix3d>(xyz_to_lms_matrix) *
                rgb_to_xyz_matrix;
-       set_uniform_mat3(glsl_program_num, prefix, "correction_matrix", corr_matrix);
 }
+
+}  // namespace movit