cgv
Loading...
Searching...
No Matches
color_scale.cxx
1#include "color_scale.h"
2
3namespace cgv {
4 namespace render {
5
6void configure_color_scale(cgv::render::context& ctx, cgv::render::shader_program& prog, cgv::media::ColorScale cs, float window_zero_position)
7{
8 bool is_bipolar = false;
9 if (cs >= cgv::media::CS_NAMED) {
10 const auto& scs = cgv::media::query_named_color_scale(cgv::media::query_color_scale_names()[cs - cgv::media::CS_NAMED], &is_bipolar);
11 prog.set_uniform(ctx, "nr_color_scale_samples[0]", (int)scs.size());
12 prog.set_uniform_array(ctx, "color_scale_samples", scs);
13 }
14 prog.set_uniform(ctx, "color_scale_index[0]", (int)std::min(cs, cgv::media::CS_NAMED));
15 prog.set_uniform(ctx, "color_scale_is_bipolar[0]", is_bipolar);
16 if (is_bipolar)
17 prog.set_uniform(ctx, "window_zero_position[0]", window_zero_position);
18}
19
22 cgv::media::ColorScale cs[2], float window_zero_position[2])
23{
24 const std::vector<rgb>* scs_ptrs[2] = { 0, 0 };
25 int nr_color_scale_samples[2] = { 0, 0 };
26 int color_scale_index[2];
27 int color_scale_is_bipolar[2];
28 for (unsigned idx = 0; idx < 2; ++idx) {
29 color_scale_is_bipolar[idx] = 0;
30 color_scale_index[idx] = (int)std::min(cs[idx], cgv::media::CS_NAMED);
31 if (cs[idx] >= cgv::media::CS_NAMED) {
32 bool is_bipolar;
33 scs_ptrs[idx] = &cgv::media::query_named_color_scale(cgv::media::query_color_scale_names()[cs[idx] - cgv::media::CS_NAMED], &is_bipolar);
34 color_scale_is_bipolar[idx] = is_bipolar ? 1 : 0;
35 nr_color_scale_samples[idx] = (int)scs_ptrs[idx]->size();
36 }
37 }
38 prog.set_uniform_array(ctx, "nr_color_scale_samples", nr_color_scale_samples, 2);
39 std::vector<rgb> colors(32 + nr_color_scale_samples[1]);
40 if (scs_ptrs[0])
41 std::copy(scs_ptrs[0]->begin(), scs_ptrs[0]->end(), colors.begin());
42 if (scs_ptrs[1])
43 std::copy(scs_ptrs[1]->begin(), scs_ptrs[1]->end(), colors.begin()+32);
44 prog.set_uniform_array(ctx, "color_scale_samples", colors);
45 prog.set_uniform_array(ctx, "color_scale_index", color_scale_index, 2);
46 prog.set_uniform_array(ctx, "color_scale_is_bipolar", color_scale_is_bipolar, 2);
47 prog.set_uniform_array(ctx, "window_zero_position", window_zero_position, 2);
48}
49
50
51 }
52}
base class for all drawables, which is independent of the used rendering API.
Definition context.h:621
a shader program combines several shader code fragments to a complete definition of the shading pipel...
bool set_uniform(const context &ctx, const std::string &name, const T &value, bool generate_error=false)
Set the value of a uniform by name, where the type can be any of int, unsigned, float,...
bool set_uniform_array(const context &ctx, const std::string &name, const T &array)
set uniform array from array array where number elements can be derived from array through array_desc...
void configure_color_scale(cgv::render::context &ctx, cgv::render::shader_program &prog, cgv::media::ColorScale cs, float window_zero_position)
convenience function to configure a shader that uses color_scale.glsl with a single color scale
the cgv namespace
Definition print.h:11