]> git.sesse.net Git - movit/blobdiff - effect_chain.h
Rework uniform setting.
[movit] / effect_chain.h
index d1ab0a205148bd9d8a22e285a448d758a5fd7e00..ee4c7ba94542a20795e2c9660f0debf860a36f7e 100644 (file)
@@ -27,7 +27,9 @@
 #include <set>
 #include <string>
 #include <vector>
+#include <Eigen/Core>
 
+#include "effect.h"
 #include "image_format.h"
 #include "ycbcr.h"
 
@@ -114,6 +116,15 @@ struct Phase {
        // Unique per-phase to increase cacheability of compiled shaders.
        std::map<Node *, std::string> effect_ids;
 
+       // Uniforms for this phase; combined from all the effects.
+       std::vector<Uniform<bool> > uniforms_bool;
+       std::vector<Uniform<int> > uniforms_int;
+       std::vector<Uniform<float> > uniforms_float;
+       std::vector<Uniform<float> > uniforms_vec2;
+       std::vector<Uniform<float> > uniforms_vec3;
+       std::vector<Uniform<float> > uniforms_vec4;
+       std::vector<Uniform<Eigen::Matrix3d> > uniforms_mat3;
+
        // For measurement of GPU time used.
        GLuint timer_query_object;
        uint64_t time_elapsed_ns;
@@ -265,6 +276,9 @@ private:
        // Execute one phase, ie. set up all inputs, effects and outputs, and render the quad.
        void execute_phase(Phase *phase, bool last_phase, std::map<Phase *, GLuint> *output_textures, std::set<Phase *> *generated_mipmaps);
 
+       // Set up uniforms for one phase. The program must already be bound.
+       void setup_uniforms(Phase *phase);
+
        // Set up the given sampler number for sampling from an RTT texture,
        // and bind it to "tex_" plus the given GLSL variable.
        void setup_rtt_sampler(GLuint glsl_program_num, int sampler_num, const std::string &effect_id, bool use_mipmaps);