X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=effect.cpp;h=3446b42c05baab5553ae83f71c69d6ef8467774f;hp=927acd52e7934774ba0b43eea4b61202f7b9bf4e;hb=f99a1a6295d7809703f6b0dfb7ab4360916b002e;hpb=8f070dcdd579e19e092a6619115f4b084fbb2c33 diff --git a/effect.cpp b/effect.cpp index 927acd5..3446b42 100644 --- a/effect.cpp +++ b/effect.cpp @@ -1,9 +1,18 @@ +#include +#include #include #include -#include +#include + #include "effect.h" +#include "effect_util.h" + +using namespace Eigen; +using namespace std; -bool Effect::set_int(const std::string &key, int value) +namespace movit { + +bool Effect::set_int(const string &key, int value) { if (params_int.count(key) == 0) { return false; @@ -12,7 +21,7 @@ bool Effect::set_int(const std::string &key, int value) return true; } -bool Effect::set_float(const std::string &key, float value) +bool Effect::set_float(const string &key, float value) { if (params_float.count(key) == 0) { return false; @@ -21,7 +30,16 @@ bool Effect::set_float(const std::string &key, float value) return true; } -bool Effect::set_vec3(const std::string &key, const float *values) +bool Effect::set_vec2(const string &key, const float *values) +{ + if (params_vec2.count(key) == 0) { + return false; + } + memcpy(params_vec2[key], values, sizeof(float) * 2); + return true; +} + +bool Effect::set_vec3(const string &key, const float *values) { if (params_vec3.count(key) == 0) { return false; @@ -30,42 +48,172 @@ bool Effect::set_vec3(const std::string &key, const float *values) return true; } -void Effect::register_int(const std::string &key, int *value) +bool Effect::set_vec4(const string &key, const float *values) +{ + if (params_vec4.count(key) == 0) { + return false; + } + memcpy(params_vec4[key], values, sizeof(float) * 4); + return true; +} + +void Effect::register_int(const string &key, int *value) { assert(params_int.count(key) == 0); params_int[key] = value; + register_uniform_int(key, value); } -void Effect::register_float(const std::string &key, float *value) +void Effect::register_float(const string &key, float *value) { assert(params_float.count(key) == 0); params_float[key] = value; + register_uniform_float(key, value); +} + +void Effect::register_vec2(const string &key, float *values) +{ + assert(params_vec2.count(key) == 0); + params_vec2[key] = values; + register_uniform_vec2(key, values); } -void Effect::register_vec3(const std::string &key, float *values) +void Effect::register_vec3(const string &key, float *values) { assert(params_vec3.count(key) == 0); params_vec3[key] = values; + register_uniform_vec3(key, values); } -// Output convenience uniforms for each parameter. -// These will be filled in per-frame. -std::string Effect::output_convenience_uniforms() +void Effect::register_vec4(const string &key, float *values) { - std::string output = ""; - for (std::map::const_iterator it = params_float.begin(); - it != params_float.end(); - ++it) { - char buf[256]; - sprintf(buf, "uniform float PREFIX(%s);\n", it->first.c_str()); - output.append(buf); - } - for (std::map::const_iterator it = params_vec3.begin(); - it != params_vec3.end(); - ++it) { - char buf[256]; - sprintf(buf, "uniform vec3 PREFIX(%s);\n", it->first.c_str()); - output.append(buf); - } - return output; + assert(params_vec4.count(key) == 0); + params_vec4[key] = values; + register_uniform_vec4(key, values); } + +void Effect::set_gl_state(GLuint glsl_program_num, const string& prefix, unsigned *sampler_num) {} + +void Effect::clear_gl_state() {} + +void Effect::register_uniform_sampler2d(const std::string &key, const GLint *value) +{ + Uniform uniform; + uniform.name = key; + uniform.value = value; + uniform.num_values = 1; + uniform.location = -1; + uniforms_sampler2d.push_back(uniform); +} + +void Effect::register_uniform_bool(const std::string &key, const bool *value) +{ + Uniform uniform; + uniform.name = key; + uniform.value = value; + uniform.num_values = 1; + uniform.location = -1; + uniforms_bool.push_back(uniform); +} + +void Effect::register_uniform_int(const std::string &key, const int *value) +{ + Uniform uniform; + uniform.name = key; + uniform.value = value; + uniform.num_values = 1; + uniform.location = -1; + uniforms_int.push_back(uniform); +} + +void Effect::register_uniform_float(const std::string &key, const float *value) +{ + Uniform uniform; + uniform.name = key; + uniform.value = value; + uniform.num_values = 1; + uniform.location = -1; + uniforms_float.push_back(uniform); +} + +void Effect::register_uniform_vec2(const std::string &key, const float *values) +{ + Uniform uniform; + uniform.name = key; + uniform.value = values; + uniform.num_values = 1; + uniform.location = -1; + uniforms_vec2.push_back(uniform); +} + +void Effect::register_uniform_vec3(const std::string &key, const float *values) +{ + Uniform uniform; + uniform.name = key; + uniform.value = values; + uniform.num_values = 1; + uniform.location = -1; + uniforms_vec3.push_back(uniform); +} + +void Effect::register_uniform_vec4(const std::string &key, const float *values) +{ + Uniform uniform; + uniform.name = key; + uniform.value = values; + uniform.num_values = 1; + uniform.location = -1; + uniforms_vec4.push_back(uniform); +} + +void Effect::register_uniform_float_array(const std::string &key, const float *values, size_t num_values) +{ + Uniform uniform; + uniform.name = key; + uniform.value = values; + uniform.num_values = num_values; + uniform.location = -1; + uniforms_float_array.push_back(uniform); +} + +void Effect::register_uniform_vec2_array(const std::string &key, const float *values, size_t num_values) +{ + Uniform uniform; + uniform.name = key; + uniform.value = values; + uniform.num_values = num_values; + uniform.location = -1; + uniforms_vec2_array.push_back(uniform); +} + +void Effect::register_uniform_vec3_array(const std::string &key, const float *values, size_t num_values) +{ + Uniform uniform; + uniform.name = key; + uniform.value = values; + uniform.num_values = num_values; + uniform.location = -1; + uniforms_vec3_array.push_back(uniform); +} + +void Effect::register_uniform_vec4_array(const std::string &key, const float *values, size_t num_values) +{ + Uniform uniform; + uniform.name = key; + uniform.value = values; + uniform.num_values = num_values; + uniform.location = -1; + uniforms_vec4_array.push_back(uniform); +} + +void Effect::register_uniform_mat3(const std::string &key, const Matrix3d *matrix) +{ + Uniform uniform; + uniform.name = key; + uniform.value = matrix; + uniform.num_values = 1; + uniform.location = -1; + uniforms_mat3.push_back(uniform); +} + +} // namespace movit