cgv
Loading...
Searching...
No Matches
context.h
1#pragma once
2
3// make sure this is the first thing the compiler sees, while preventing warnings if
4// it happened to already be defined by something else including this header
5#ifndef _USE_MATH_DEFINES
6 #define _USE_MATH_DEFINES 1
7#endif
8#include <stack>
9#include <vector>
10#include <string>
11#include <iostream>
12#include <cgv/defines/deprecated.h>
13#include <cgv/data/data_view.h>
14#include <cgv/math/fmat.h>
15#include <cgv/math/fvec.h>
16#include <cgv/math/mat.h>
17#include <cgv/math/vec.h>
18#include <cgv/media/axis_aligned_box.h>
19#include <cgv/media/font/font.h>
20#include <cgv/media/illum/light_source.h>
21#include <cgv/media/illum/phong_material.h>
22#include <cgv/media/illum/textured_surface_material.h>
23#include <cgv/signal/callback_stream.h>
24
25#include "lib_begin.h"
26
27namespace cgv {
28 namespace render {
29
30class CGV_API drawable;
31class CGV_API textured_material;
32
35 GPU_VENDOR_UNKNOWN,
36 GPU_VENDOR_AMD,
37 GPU_VENDOR_INTEL,
38 GPU_VENDOR_NVIDIA
39};
40
51
54 ET_VALUE,
55 ET_VECTOR,
56 ET_MATRIX
57};
58
61{
62 cgv::type::info::TypeId coordinate_type : 8;
63 ElementType element_type : 4;
64 unsigned nr_rows : 4;
65 unsigned nr_columns : 4;
66 bool is_row_major : 1;
67 bool is_array : 1;
68 bool normalize : 1;
70 type_descriptor(int td = 0) { *reinterpret_cast<int*>(this) = td; }
72 type_descriptor(cgv::type::info::TypeId _coordinate_type, bool _normalize = false) : coordinate_type(_coordinate_type), element_type(ET_VALUE), nr_rows(1), nr_columns(1), is_row_major(false), is_array(false), normalize(_normalize) {}
74 type_descriptor(cgv::type::info::TypeId _coordinate_type, unsigned _nr_entries, bool _normalize = false) : coordinate_type(_coordinate_type), element_type(ET_VECTOR), nr_rows(_nr_entries), nr_columns(1), is_row_major(false), is_array(false), normalize(_normalize) {}
76 type_descriptor(cgv::type::info::TypeId _coordinate_type, unsigned _nr_rows, unsigned _nr_cols, bool _is_row_major, bool _normalize = false) : coordinate_type(_coordinate_type), element_type(ET_MATRIX), nr_rows(_nr_rows), nr_columns(_nr_cols), is_row_major(_is_row_major), is_array(false), normalize(_normalize) {}
78 type_descriptor(const type_descriptor& td, bool _is_array) : coordinate_type(td.coordinate_type), element_type(td.element_type), nr_rows(td.nr_rows), nr_columns(td.nr_columns), is_row_major(td.is_row_major), normalize(td.normalize), is_array(_is_array) {}
80 operator int() const { return *reinterpret_cast<const int*>(this); }
82 friend CGV_API std::ostream& operator << (std::ostream&, const type_descriptor&);
83};
84
86extern CGV_API std::ostream& operator << (std::ostream&, const type_descriptor&);
87
92 PVK_UNIFORM,
93 PVK_ATTRIBUTE
94};
95
100{
102 std::string name;
106 unsigned array_size = 0;
110 std::vector<char> current_value;
112 friend CGV_API std::ostream& operator << (std::ostream& os, const program_variable_info& V);
119 void compute_sizes(size_t& cnt, size_t& s, size_t& S) const;
120};
121
123extern CGV_API std::ostream& operator << (std::ostream& os, const program_variable_info& V);
124
127 RA_OPENGL,
128 RA_DIRECTX
129};
130
131
144
146extern CGV_API std::string get_render_pass_name(RenderPass rp);
147
182
185 MS_NONE,
186 MS_FRONT,
187 MS_BACK,
188 MS_FRONT_AND_BACK
189};
190
193 IM_OFF,
194 IM_ONE_SIDED,
195 IM_TWO_SIDED
196};
197
200 CM_OFF,
201 CM_BACKFACE,
202 CM_FRONTFACE
203};
204
207 BF_ZERO,
208 BF_ONE,
209 BF_SRC_COLOR,
210 BF_ONE_MINUS_SRC_COLOR,
211 BF_DST_COLOR,
212 BF_ONE_MINUS_DST_COLOR,
213 BF_SRC_ALPHA,
214 BF_ONE_MINUS_SRC_ALPHA,
215 BF_DST_ALPHA,
216 BF_ONE_MINUS_DST_ALPHA,
217 BF_CONSTANT_COLOR,
218 BF_ONE_MINUS_CONSTANT_COLOR,
219 BF_CONSTANT_ALPHA,
220 BF_ONE_MINUS_CONSTANT_ALPHA,
221 BF_SRC_ALPHA_SATURATE,
222 BF_SRC1_COLOR,
223 BF_ONE_MINUS_SRC1_COLOR,
224 BF_SRC1_ALPHA,
225 BF_ONE_MINUS_SRC1_ALPHA
226};
227
230 TW_REPEAT = 0,
231 TW_CLAMP = 1,
232 TW_CLAMP_TO_EDGE = 2,
233 TW_CLAMP_TO_BORDER = 3,
234 TW_MIRROR_CLAMP = 4,
235 TW_MIRROR_CLAMP_TO_EDGE = 5,
236 TW_MIRROR_CLAMP_TO_BORDER = 6,
237 TW_MIRRORED_REPEAT = 7,
238 TW_LAST
239};
240
242extern CGV_API std::string to_string(TextureWrap wrap);
243
246 TF_NEAREST = 0,
247 TF_LINEAR = 1,
248 TF_NEAREST_MIPMAP_NEAREST = 2,
249 TF_LINEAR_MIPMAP_NEAREST = 3,
250 TF_NEAREST_MIPMAP_LINEAR = 4,
251 TF_LINEAR_MIPMAP_LINEAR = 5,
252 TF_ANISOTROP = 6,
253 TF_LAST
254};
255
258 TT_UNDEF,
259 TT_1D = 1,
260 TT_2D,
261 TT_3D,
262 TT_1D_ARRAY,
263 TT_2D_ARRAY,
264 TT_CUBEMAP,
265 TT_MULTISAMPLE_2D,
266 TT_MULTISAMPLE_2D_ARRAY,
267 TT_BUFFER
268};
269
272 TCS_PLUS_X,
273 TCS_MINUS_X,
274 TCS_PLUS_Y,
275 TCS_MINUS_Y,
276 TCS_PLUS_Z,
277 TCS_MINUS_Z
278};
279
282 PT_UNDEF,
283 PT_POINTS,
284 PT_LINES,
285 PT_LINES_ADJACENCY,
286 PT_LINE_STRIP,
287 PT_LINE_STRIP_ADJACENCY,
288 PT_LINE_LOOP,
289 PT_TRIANGLES,
290 PT_TRIANGLES_ADJACENCY,
291 PT_TRIANGLE_STRIP,
292 PT_TRIANGLE_STRIP_ADJACENCY,
293 PT_TRIANGLE_FAN,
294 PT_QUADS,
295 PT_QUAD_STRIP,
296 PT_POLYGON,
297 PT_PATCHES,
298 PT_LAST
299};
300
307
310{
311 CF_LEQUAL,
312 CF_GEQUAL,
313 CF_LESS,
314 CF_GREATER,
315 CF_EQUAL,
316 CF_NOTEQUAL,
317 CF_ALWAYS,
318 CF_NEVER
319};
320
323 AT_READ_ONLY,
324 AT_WRITE_ONLY,
325 AT_READ_WRITE
326};
327
340
342extern CGV_API std::string to_string(TextureFilter filter_type);
343
345extern CGV_API std::string to_string(PrimitiveType pt);
346
348extern CGV_API std::string to_string(TextureType tt);
349
351extern CGV_API std::string to_string(TextureCubeSides tcs);
352
353class CGV_API context;
354
356class CGV_API render_component
357{
358public:
359 void* handle;
360 void* internal_format;
361 void* user_data;
365 mutable std::string last_error;
368 virtual ~render_component() noexcept = default;
370 virtual bool is_created() const;
373 void put_id_void(void* ptr) const;
375 template <typename T>
376 void put_id(T& id) const { put_id_void(&id); }
377};
378
380class CGV_API render_buffer_base : public render_component
381{
382public:
383 unsigned nr_multi_samples = 0;
384 render_buffer_base();
385};
386
388class CGV_API texture_base : public render_component
389{
390public:
391 TextureFilter mag_filter;
392 TextureFilter min_filter;
393 TextureWrap wrap_s;
394 TextureWrap wrap_t;
395 TextureWrap wrap_r;
396 float anisotropy;
397 float priority;
398 float border_color[4];
399 CompareFunction compare_function;
400 bool use_compare_function;
401 TextureType tt;
402 bool have_mipmaps;
403 unsigned nr_multi_samples = 5;
404 bool fixed_sample_locations = true;
406 texture_base(TextureType _tt = TT_UNDEF);
407};
408
409
412{
413protected:
414 bool is_enabled;
415 friend class context;
416
417 bool auto_detect_uniforms;
418 bool auto_detect_vertex_attributes;
419
420 // uniforms
421 bool uses_view;
422 bool uses_material;
423 bool uses_lights;
424 bool uses_gamma;
425 // maps uniform names to their locations in the shader program
426 std::map<std::string, int> uniform_locations;
427
428 // vertex attribute names
429 int position_index;
430 int color_index;
431 bool context_sets_color;
432 int normal_index;
433 int texcoord_index;
434
435public:
436 PrimitiveType geometry_shader_input_type;
437 PrimitiveType geometry_shader_output_type;
438 int geometry_shader_output_count;
441 // configure program
442 void specify_standard_uniforms(bool view, bool material, bool lights, bool gamma);
443 void specify_standard_vertex_attribute_names(context& ctx, bool color = true, bool normal = true, bool texcoord = true);
444 void specify_vertex_attribute_names(context& ctx, const std::string& position, const std::string& color = "", const std::string& normal = "", const std::string& texcoord = "");
445 // uniforms
446 bool does_use_view() const { return uses_view; }
447 bool does_use_material() const { return uses_material; }
448 bool does_use_lights() const { return uses_lights; }
449 bool does_use_gamma() const { return uses_gamma; }
450
451 // vertex attribute names
452 void allow_context_to_set_color(bool allow);
453 int get_position_index() const { return position_index; }
454 int get_color_index() const { return color_index; }
455 bool does_context_set_color() const { return context_sets_color; }
456 int get_normal_index() const { return normal_index; }
457 int get_texcoord_index() const { return texcoord_index; }
458};
459
462{
463protected:
464 bool is_enabled;
465 friend class context;
466public:
469 virtual ~attribute_array_binding_base() = default;
470};
471
472
485
507
517
526
529{
530protected:
531 friend class context;
532 bool is_enabled;
533 std::vector<int> enabled_color_attachments;
534 bool depth_attached;
535 bool attached[16];
536 int width, height;
537public:
540};
541
543enum ShaderType { ST_DETECT, ST_COMPUTE, ST_VERTEX, ST_TESS_CONTROL, ST_TESS_EVALUATION, ST_GEOMETRY, ST_FRAGMENT, ST_TASK, ST_MESH };
544
547 FB_0 = 0,
548 FB_1 = 1,
549 FB_2 = 2,
550 FB_3 = 3,
551 FB_4 = 4,
552 FB_5 = 5,
553 FB_6 = 6,
554 FB_7 = 7,
555 FB_BACK = 128,
556 FB_FRONT = 129,
557 FB_LEFT = 512,
558 FB_RIGHT = 1024,
559 FB_BACK_LEFT = FB_BACK+FB_LEFT,
560 FB_BACK_RIGHT = FB_BACK+FB_RIGHT,
561 FB_FRONT_LEFT = FB_FRONT+FB_LEFT,
562 FB_FRONT_RIGHT = FB_FRONT+FB_RIGHT
563};
564
565// forward declaration of all render components
566class CGV_API texture;
567class CGV_API render_buffer;
568class CGV_API frame_buffer;
569class CGV_API shader_code;
570class CGV_API shader_program;
571
618
621
652
655
657extern CGV_API render_config_ptr get_render_config();
658
667
669class CGV_API context : public context_config
670{
671protected:
672 // store the GPU vendor id
673 GPUVendorID gpu_vendor;
674 // store the GPU device capabilities
675 device_capabilities gpu_capabilities;
676public:
677 friend class CGV_API attribute_array_manager;
678 friend class CGV_API render_component;
679 friend class CGV_API texture;
680 friend class CGV_API render_buffer;
681 friend class CGV_API frame_buffer;
682 friend class CGV_API shader_code;
683 friend class CGV_API shader_program;
684 friend class CGV_API attribute_array_binding;
685 friend class CGV_API vertex_buffer;
686
690 bool enabled = false;
693 };
694
696 struct BlendState {
698 bool enabled = false;
707 // TODO: Add blend equation?
708 };
709
711 struct BufferMask {
713 bool depth_flag = true;
715 bool red_flag = true;
717 bool green_flag = true;
719 bool blue_flag = true;
721 bool alpha_flag = true;
722 };
723protected:
724 friend class shader_program_base;
751
753 std::stack<vec4> bg_color_stack;
755 std::stack<float> bg_depth_stack;
757 std::stack<int> bg_stencil_stack;
759 std::stack<vec4> bg_accum_color_stack;
760
762 std::stack<DepthTestState> depth_test_state_stack;
764 std::stack<CullingMode> cull_state_stack;
766 std::stack<BlendState> blend_state_stack;
768 std::stack<BufferMask> buffer_mask_stack;
769
771 std::stack<dmat4> modelview_matrix_stack, projection_matrix_stack;
773 std::stack<std::vector<window_transformation>> window_transformation_stack;
775 std::stack<frame_buffer_base*> frame_buffer_stack;
777 std::stack<shader_program_base*> shader_program_stack;
778public:
780 shader_program_base* get_current_program() const;
788 bool is_shader_file_cache_enabled() const;
789protected:
791 std::stack<attribute_array_binding_base*> attribute_array_binding_stack;
794 {
795 bool enabled;
796 vec3 eye_position;
797 vec3 eye_spot_direction;
798 int light_source_index;
799 };
800
805 std::map<void*, std::pair<cgv::media::illum::light_source, light_source_status> > light_sources;
807 virtual void on_lights_changed();
809 static const unsigned nr_default_light_sources = 2;
822 {
823 RenderPass pass;
824 RenderPassFlags flags;
825 void* user_data;
826 int pass_index;
827 };
828
829 std::stack<render_info> render_pass_stack;
837 int cursor_x, cursor_y;
847 int x_offset, y_offset;
853 bool do_screen_shot;
855 virtual void process_text(const std::string& text);
857 virtual void draw_text(const std::string& text);
858
859 virtual void destruct_render_objects();
860 virtual void put_id(void* handle, void* ptr) const = 0;
861
862 virtual cgv::data::component_format texture_find_best_format(const cgv::data::component_format& cf, render_component& rc, const std::vector<cgv::data::data_view>* palettes = 0) const = 0;
863 virtual bool texture_create (texture_base& tb, cgv::data::data_format& df) const = 0;
864 virtual bool texture_create (texture_base& tb, cgv::data::data_format& target_format, const cgv::data::const_data_view& data, int level, int cube_side = -1, int num_array_layers = 0, const std::vector<cgv::data::data_view>* palettes = 0) const = 0;
865 virtual bool texture_create_from_buffer (texture_base& tb, cgv::data::data_format& df, int x, int y, int level) const = 0;
866 virtual bool texture_replace (texture_base& tb, int x, int y, int z_or_cube_side, const cgv::data::const_data_view& data, int level, const std::vector<cgv::data::data_view>* palettes = 0) const = 0;
867 virtual bool texture_replace_from_buffer(texture_base& tb, int x, int y, int z_or_cube_side, int x_buffer, int y_buffer, unsigned int width, unsigned int height, int level) const = 0;
868 virtual bool texture_copy_back (const texture_base& tb, int level, cgv::data::data_view& dv) const = 0;
869 virtual bool texture_create_mipmaps (texture_base& tb, cgv::data::data_format& df) const = 0;
870 virtual bool texture_generate_mipmaps (texture_base& tb, unsigned int dim) const = 0;
871 virtual bool texture_destruct (texture_base& tb) const = 0;
872 virtual bool texture_set_state (const texture_base& tb) const = 0;
873 virtual bool texture_enable (texture_base& tb, int tex_unit, unsigned int nr_dims) const = 0;
874 virtual bool texture_disable (texture_base& tb, int tex_unit, unsigned int nr_dims) const = 0;
875 virtual bool texture_bind_as_image (texture_base& tb, int tex_unit, int level, bool bind_array, int layer, AccessType access) const = 0;
876
877 virtual bool render_buffer_create (render_buffer_base& rc, cgv::data::component_format& cf, int& _width, int& _height) const = 0;
878 virtual bool render_buffer_destruct (render_buffer_base& rc) const = 0;
879
880 static void get_buffer_list(frame_buffer_base& fbb, bool& depth_buffer, std::vector<int>& buffers, int offset = 0);
881 virtual bool frame_buffer_create (frame_buffer_base& fbb) const;
882 virtual bool frame_buffer_attach (frame_buffer_base& fbb, const render_buffer_base& rb, bool is_depth, int i) const;
883 virtual bool frame_buffer_attach (frame_buffer_base& fbb, const texture_base& t, bool is_depth, int level, int i, int z) const;
884 virtual bool frame_buffer_is_complete(const frame_buffer_base& fbb) const = 0;
885 virtual bool frame_buffer_enable (frame_buffer_base& fbb);
886 virtual bool frame_buffer_disable (frame_buffer_base& fbb);
887 virtual bool frame_buffer_destruct(frame_buffer_base& fbb) const;
888 virtual void frame_buffer_blit(const frame_buffer_base* src_fbb_ptr, const ivec4& S, frame_buffer_base* dst_fbb_ptr, const ivec4& _D, BufferTypeBits btbs, bool interpolate) const = 0;
889 virtual int frame_buffer_get_max_nr_color_attachments() const = 0;
890 virtual int frame_buffer_get_max_nr_draw_buffers() const = 0;
891
892 virtual bool shader_code_create (render_component& sc, ShaderType st, const std::string& source) const = 0;
893 virtual bool shader_code_compile (render_component& sc) const = 0;
894 virtual void shader_code_destruct(render_component& sc) const = 0;
895
896 virtual bool shader_program_create (shader_program_base& spb) const = 0;
897 virtual void shader_program_attach(shader_program_base& spb, const render_component& sc) const = 0;
898 virtual void shader_program_detach(shader_program_base& spb, const render_component& sc) const = 0;
899 virtual bool shader_program_link(shader_program_base& spb) const;
900 virtual bool shader_program_set_state(shader_program_base& spb) const = 0;
901 virtual bool shader_program_enable (shader_program_base& spb);
902 virtual bool shader_program_disable(shader_program_base& spb);
903 virtual bool shader_program_destruct(shader_program_base& spb) const;
904 virtual void shader_program_set_uniform_locations(shader_program_base& spb) const;
905 virtual bool shader_program_get_active_uniforms(shader_program_base& spb, std::vector<std::string>& names) const = 0;
906 virtual void shader_program_inspect_variables(shader_program_base& spb, ProgramVariableKind kind, std::vector<program_variable_info>& Vs, bool get_location, bool get_value) const = 0;
907 virtual int get_uniform_location(const shader_program_base& spb, const std::string& name) const = 0;
908 virtual bool set_uniform_void(shader_program_base& spb, int loc, type_descriptor value_type, const void* value_ptr) const = 0;
909 virtual bool set_uniform_array_void(shader_program_base& spb, int loc, type_descriptor value_type, const void* value_ptr, size_t nr_elements) const = 0;
910 virtual int get_uniform_block_index(const shader_program_base& spb, const std::string& name) const = 0;
911 virtual bool set_uniform_block_binding(shader_program_base& spb, int index, int binding) const = 0;
912 virtual int get_attribute_location(const shader_program_base& spb, const std::string& name) const = 0;
913 virtual bool set_attribute_void(shader_program_base& spb, int loc, type_descriptor value_type, const void* value_ptr) const = 0;
914
915 virtual bool attribute_array_binding_create (attribute_array_binding_base& aab) const = 0;
916 virtual bool attribute_array_binding_destruct(attribute_array_binding_base& aab) const;
917 virtual bool attribute_array_binding_enable (attribute_array_binding_base& aab);
918 virtual bool attribute_array_binding_disable (attribute_array_binding_base& aab);
919 virtual bool set_attribute_array_void(attribute_array_binding_base* aab, int loc, type_descriptor value_type, const vertex_buffer_base* vbb, const void* ptr, size_t nr_elements = 0, unsigned stride_in_bytes = 0) const = 0;
920 virtual bool set_element_array(attribute_array_binding_base* aab, const vertex_buffer_base* vbb) const = 0;
921 virtual bool enable_attribute_array(attribute_array_binding_base* aab, int loc, bool do_enable) const = 0;
922 virtual bool is_attribute_array_enabled(const attribute_array_binding_base* aab, int loc) const = 0;
923
924 virtual bool vertex_buffer_bind(const vertex_buffer_base& vbb, VertexBufferType _type, unsigned _idx = -1) const = 0;
925 virtual bool vertex_buffer_unbind(const vertex_buffer_base& vbb, VertexBufferType _type, unsigned _idx = -1) const = 0;
926 virtual bool vertex_buffer_create(vertex_buffer_base& vbb, const void* array_ptr, size_t size_in_bytes) const = 0;
927 virtual bool vertex_buffer_resize(vertex_buffer_base& vbb, const void* array_ptr, size_t size_in_bytes) const = 0;
928 virtual bool vertex_buffer_clear(vertex_buffer_base& vbb, size_t offset, size_t size_in_bytes) const = 0;
929 virtual bool vertex_buffer_replace(vertex_buffer_base& vbb, size_t offset, size_t size_in_bytes, const void* array_ptr) const = 0;
930 virtual bool vertex_buffer_copy(const vertex_buffer_base& src, size_t src_offset, vertex_buffer_base& target, size_t target_offset, size_t size_in_bytes) const = 0;
931 virtual bool vertex_buffer_copy_back(const vertex_buffer_base& vbb, size_t offset, size_t size_in_bytes, void* array_ptr) const = 0;
932 virtual bool vertex_buffer_destruct(vertex_buffer_base& vbb) const = 0;
933public:
935 context();
937 virtual ~context();
939 virtual void error(const std::string& message, const render_component* rc = 0) const;
941 virtual GPUVendorID get_gpu_vendor_id() const;
942 const device_capabilities& get_device_capabilities() const;
943
946
947 virtual void init_render_pass();
949 virtual void draw_textual_info();
951 virtual void perform_screen_shot();
953 virtual void finish_render_pass();
955
958
959 virtual void configure_new_child(cgv::base::base_ptr child);
961 virtual RenderAPI get_render_api() const = 0;
963 unsigned get_render_pass_recursion_depth() const;
965 virtual RenderPass get_render_pass() const;
969 bool update_render_pass_flags(int exclude_flags, int include_flags = 0);
971 virtual void* get_render_pass_user_data() const;
977 void render_pass_debug_output(const render_info& ri, const std::string& info = "");
980 RenderPassFlags render_pass_flags = RPF_ALL,
981 void* user_data = 0,
982 int rp_idx = -1);
984 void set_debug_render_passes(bool _debug);
988 virtual bool in_render_process() const = 0;
990 virtual bool is_created() const = 0;
992 virtual bool is_current() const = 0;
994 virtual bool recreate_context();
996 virtual bool make_current() const = 0;
998 virtual void clear_current() const = 0;
1000 virtual void attach_alpha_buffer(bool attach = true) = 0;
1002 virtual void attach_depth_buffer(bool attach = true) = 0;
1004 virtual void attach_stencil_buffer(bool attach = true) = 0;
1006 virtual bool is_stereo_buffer_supported() const = 0;
1008 virtual void attach_stereo_buffer(bool attach = true) = 0;
1010 virtual void attach_accumulation_buffer(bool attach = true) = 0;
1012 virtual void attach_multi_sample_buffer(bool attach = true) = 0;
1014
1016 virtual unsigned int get_width() const = 0;
1018 virtual unsigned int get_height() const = 0;
1020 virtual void resize(unsigned int width, unsigned int height) = 0;
1021
1022
1038 virtual bool read_frame_buffer(
1039 data::data_view& dv,
1040 unsigned int x = 0, unsigned int y = 0,
1041 FrameBufferType buffer_type = FB_BACK,
1044 int w = -1, int h = -1) = 0;
1049 const std::string& file_name,
1051 FrameBufferType buffer_type = FB_BACK,
1052 unsigned int x = 0, unsigned int y = 0,
1053 int w = -1, int h = -1,
1054 float depth_offset = 0.9f, float depth_scale = 10.0f);
1055
1057 void push_bg_color();
1059 void pop_bg_color();
1061 virtual void set_bg_color(vec4 rgba);
1063 void set_bg_color(float r, float g, float b, float a);
1065 vec4 get_bg_color() const;
1067 void put_bg_color(float* rgba) const;
1069 void set_bg_alpha(float a);
1071 float get_bg_alpha() const;
1073 void set_bg_clr_idx(unsigned int idx);
1075 unsigned int get_bg_clr_idx() const;
1076
1078 void push_bg_depth();
1080 void pop_bg_depth();
1082 virtual void set_bg_depth(float d);
1084 float get_bg_depth() const;
1085
1087 void push_bg_stencil();
1089 void pop_bg_stencil();
1091 virtual void set_bg_stencil(int s);
1093 int get_bg_stencil() const;
1094
1096 void push_bg_accum_color();
1098 void pop_bg_accum_color();
1100 virtual void set_bg_accum_color(vec4 rgba);
1102 void set_bg_accum_color(float r, float g, float b, float a);
1104 vec4 get_bg_accum_color() const;
1106 void put_bg_accum_color(float* rgba) const;
1108 void set_bg_accum_alpha(float a);
1110 float get_bg_accum_alpha() const;
1111
1113 virtual void clear_background(bool color_flag, bool depth_flag, bool stencil_flag = false, bool accum_flag = false) = 0;
1114
1116 virtual void post_redraw() = 0;
1118 virtual void force_redraw() = 0;
1120 virtual void announce_external_frame_buffer_change(void*& cgv_fbo_storage) = 0;
1122 virtual void recover_from_external_frame_buffer_change(void* cgv_fbo_storage) = 0;
1123
1126
1127 virtual void enable_font_face(media::font::font_face_ptr font_face, float font_size);
1129 virtual float get_current_font_size() const;
1133
1136 DEPRECATED("deprecated and ignored.") virtual void enable_phong_shading();
1137 DEPRECATED("deprecated and ignored.") virtual void disable_phong_shading();
1138 DEPRECATED("deprecated, use set_material instead.") virtual void enable_material(const cgv::media::illum::phong_material& mat = cgv::media::illum::phong_material::get_default(), MaterialSide ms = MS_FRONT_AND_BACK, float alpha = 1);
1139 DEPRECATED("deprecated and ignored.") virtual void disable_material(const cgv::media::illum::phong_material& mat = cgv::media::illum::phong_material::get_default());
1140 DEPRECATED("deprecated, use enable_material(textured_surface_material) instead.") virtual void enable_material(const textured_material& mat, MaterialSide ms = MS_FRONT_AND_BACK, float alpha = 1);
1141 //DEPRECATED("deprecated, use disable_material(textured_surface_material) instead.") virtual void disable_material(const textured_material& mat) = 0;
1143 void set_gamma(float _gamma);
1145 virtual void set_gamma3(const vec3& _gamma3);
1147 float get_gamma() const { return (gamma3.x() + gamma3.y() + gamma3.z()) / 3.0f; }
1149 vec3 get_gamma3() const { return gamma3; }
1151 virtual void enable_sRGB_framebuffer(bool do_enable = true);
1155 void begin_attribute_less_rendering();
1157 void end_attribute_less_rendering();
1159 const rgba& get_color() const;
1161 virtual void set_color(const rgba& clr);
1163 virtual void set_color(const rgb& clr, float opacity = 1.0f) { set_color(rgba(clr[0], clr[1], clr[2], opacity)); }
1165 virtual void set_material(const cgv::media::illum::surface_material& mat);
1167 const cgv::media::illum::surface_material* get_current_material() const;
1169 virtual void set_textured_material(const textured_material& mat);
1171 virtual void enable_material(textured_material& mat) = 0;
1173 virtual void disable_material(textured_material& mat) = 0;
1175 void set_current_gamma(shader_program& prog) const;
1177 void set_current_view(shader_program& prog, bool modelview_deps = true, bool projection_deps = true) const;
1179 void set_current_material(shader_program& prog) const;
1181 void set_current_lights(shader_program& prog) const;
1183 vec3 get_light_eye_position(const cgv::media::illum::light_source& light, bool place_now) const;
1185 vec3 get_light_eye_spot_direction(const cgv::media::illum::light_source& light, bool place_now) const;
1187 virtual shader_program& ref_default_shader_program(bool texture_support = false) = 0;
1189 virtual shader_program& ref_surface_shader_program(bool texture_support = false) = 0;
1191 virtual void enumerate_program_uniforms(shader_program& prog, std::vector<std::string>& names, std::vector<int>* locations_ptr = 0, std::vector<int>* sizes_ptr = 0, std::vector<int>* types_ptr = 0, bool show = false) const = 0;
1193 virtual void enumerate_program_attributes(shader_program& prog, std::vector<std::string>& names, std::vector<int>* locations_ptr = 0, std::vector<int>* sizes_ptr = 0, std::vector<int>* types_ptr = 0, bool show = false) const = 0;
1195
1198 DEPRECATED("deprecated, use add_light_source instead.") void* enable_light(const cgv::media::illum::light_source& light) { return add_light_source(light); }
1199 DEPRECATED("deprecated, use enable_light_source instead.") void disable_light(void* handle) { disable_light_source(handle); }
1200 DEPRECATED("deprecated, use get_max_nr_enabled_light_sources instead.") unsigned get_max_nr_lights() const { return get_max_nr_enabled_light_sources(); }
1202 size_t get_nr_light_sources() const;
1204 void* add_light_source(const cgv::media::illum::light_source& light, bool enabled = true, bool place_now = false);
1206 bool remove_light_source(void* handle);
1208 const cgv::media::illum::light_source& get_light_source(void* handle) const;
1210 const light_source_status& get_light_source_status(void* handle) const;
1212 void set_light_source(void* handle, const cgv::media::illum::light_source& light, bool place_now = true);
1214 void place_light_source(void* handle);
1215
1217 virtual unsigned get_max_nr_enabled_light_sources() const;
1219 size_t get_nr_enabled_light_sources() const;
1221 void* get_enabled_light_source_handle(size_t i) const;
1223 bool is_light_source_enabled(void* handle);
1225 bool enable_light_source(void* handle);
1227 bool disable_light_source(void* handle);
1231 const cgv::media::illum::light_source& get_default_light_source(size_t i) const;
1233 void set_default_light_source(size_t i, const cgv::media::illum::light_source& ls);
1235
1238
1245 virtual std::ostream& output_stream();
1247 virtual void set_cursor(int x, int y);
1249 virtual void get_cursor(int& x, int& y) const;
1252 DEPRECATED("deprecated, use get_cursor_coords.") virtual void put_cursor_coords(const vecn& p, int& x, int& y) const;
1255 virtual ivec2 get_cursor_coords(const vec3& p) const;
1261 DEPRECATED("deprecated, use set_cursor(vec3, ...).") virtual void set_cursor(const vecn& pos,
1262 const std::string& text = "", TextAlignment ta = TA_BOTTOM_LEFT,
1263 int x_offset=0, int y_offset=0);
1269 virtual void set_cursor(const vec3& pos,
1270 const std::string& text = "", TextAlignment ta = TA_BOTTOM_LEFT,
1271 ivec2 offset = { 0 });
1273
1276
1278 const float* vertices, const float* normals, const float* tex_coords,
1279 const int* vertex_indices, const int* normal_indices, const int* tex_coord_indices,
1280 int nr_faces, int face_degree, bool flip_normals = false) const = 0;
1283 const float* vertices, const float* normals, const float* tex_coords,
1284 const int* vertex_indices, const int* normal_indices, const int* tex_coord_indices,
1285 int nr_faces, int face_degree, bool is_fan, bool flip_normals = false) const = 0;
1287 virtual void draw_faces(
1288 const float* vertices, const float* normals, const float* tex_coords,
1289 const int* vertex_indices, const int* normal_indices, const int* tex_coord_indices,
1290 int nr_faces, int face_degree, bool flip_normals = false) const = 0;
1292 virtual void draw_strip_or_fan(
1293 const float* vertices, const float* normals, const float* tex_coords,
1294 const int* vertex_indices, const int* normal_indices, const int* tex_coord_indices,
1295 int nr_faces, int face_degree, bool is_fan, bool flip_normals = false) const = 0;
1296
1298 void tesselate_unit_square(bool flip_normals = false, bool edges = false);
1300 void tesselate_unit_cube(bool flip_normals = false, bool edges = false);
1302 virtual void tesselate_box(const cgv::media::axis_aligned_box<double, 3>& B, bool flip_normals, bool edges = false) const;
1304 void tesselate_unit_prism(bool flip_normals = false, bool edges = false);
1306 void tesselate_unit_disk(int resolution = 25, bool flip_normals = false, bool edges = false);
1308 void tesselate_unit_cone(int resolution = 25, bool flip_normals = false, bool edges = false);
1310 void tesselate_unit_cylinder(int resolution = 25, bool flip_normals = false, bool edges = false);
1312 void tesselate_unit_sphere(int resolution = 25, bool flip_normals = false, bool edges = false);
1314 void tesselate_unit_tetrahedron(bool flip_normals = false, bool edges = false);
1316 void tesselate_unit_octahedron(bool flip_normals = false, bool edges = false);
1318 void tesselate_unit_dodecahedron(bool flip_normals = false, bool edges = false);
1320 void tesselate_unit_icosahedron(bool flip_normals = false, bool edges = false);
1322 void tesselate_unit_torus(float minor_radius = 0.2f, int resolution = 25, bool flip_normals = false, bool edges = false);
1324
1331 virtual void tesselate_arrow(double length = 1, double aspect = 0.1, double rel_tip_radius = 2.0, double tip_aspect = 0.3, int res = 25, bool edges = false);
1333 virtual void tesselate_arrow(const dvec3& start, const dvec3& end, double aspect = 0.1f, double rel_tip_radius = 2.0f, double tip_aspect = 0.3f, int res = 25, bool edges = false);
1335
1338 virtual void draw_light_source(const cgv::media::illum::light_source& l, float intensity_scale, float light_scale);
1340
1343
1346 void push_depth_test_state();
1348 void pop_depth_test_state();
1352 virtual void set_depth_test_state(DepthTestState state);
1354 virtual void set_depth_func(CompareFunction func);
1356 virtual void enable_depth_test();
1358 virtual void disable_depth_test();
1359
1362 void push_cull_state();
1364 void pop_cull_state();
1368 virtual void set_cull_state(CullingMode culling_mode);
1369
1372 void push_blend_state();
1374 void pop_blend_state();
1378 virtual void set_blend_state(BlendState state);
1380 virtual void set_blend_func(BlendFunction src_factor, BlendFunction dst_factor);
1382 virtual void set_blend_func_separate(BlendFunction src_color_factor, BlendFunction dst_color_factor, BlendFunction src_alpha_factor, BlendFunction dst_alpha_factor);
1391 virtual void enable_blending();
1393 virtual void disable_blending();
1394
1397 void push_buffer_mask();
1399 void pop_buffer_mask();
1403 virtual void set_buffer_mask(BufferMask mask);
1405 bool get_depth_mask() const;
1407 virtual void set_depth_mask(bool flag);
1409 bvec4 get_color_mask() const;
1411 virtual void set_color_mask(bvec4 flags);
1412
1414
1417 DEPRECATED("deprecated: use get_modelview_matrix() instead.") dmatn get_V() const { return dmatn(4,4,&get_modelview_matrix()(0,0)); }
1418 DEPRECATED("deprecated: use set_modelview_matrix() instead.") void set_V(const dmatn& V) const { const_cast<context*>(this)->set_modelview_matrix(dmat4(4,4,&V(0,0))); }
1419 DEPRECATED("deprecated: use push_modelview_matrix() instead.") void push_V() { push_modelview_matrix(); }
1420 DEPRECATED("deprecated: use pop_modelview_matrix() instead.") void pop_V() { pop_modelview_matrix(); }
1421 DEPRECATED("deprecated: use get_projection_matrix() instead.") dmatn get_P() const { return dmatn(4, 4, &get_projection_matrix()(0, 0)); }
1422 DEPRECATED("deprecated: use set_projection_matrix() instead.") void set_P(const dmatn& P) const { const_cast<context*>(this)->set_projection_matrix(dmat4(4,4,&P(0, 0))); }
1423 DEPRECATED("deprecated: use push_projection_matrix() instead.") void push_P() { push_projection_matrix(); }
1424 DEPRECATED("deprecated: use pop_projection_matrix() instead.") void pop_P() { pop_projection_matrix(); }
1425 DEPRECATED("deprecated: use get_device_matrix() instead.") dmatn get_D() const { return dmatn(4, 4, &get_window_matrix()(0, 0)); }
1426 DEPRECATED("deprecated: use get_modelview_projection_device_matrix() instead.") dmatn get_DPV() const { return dmatn(4, 4, &get_modelview_projection_window_matrix()(0, 0)); }
1430 virtual void push_pixel_coords() = 0;
1432 virtual void pop_pixel_coords() = 0;
1434 virtual dmat4 get_modelview_matrix() const = 0;
1436 virtual void set_modelview_matrix(const dmat4& MV);
1438 virtual void mul_modelview_matrix(const dmat4& MV);
1440
1446 void push_modelview_matrix();
1448 void pop_modelview_matrix();
1450 virtual dmat4 get_projection_matrix() const = 0;
1452 virtual void set_projection_matrix(const dmat4& P);
1454 virtual void mul_projection_matrix(const dmat4& P);
1458 void pop_projection_matrix();
1462
1464 virtual void pop_window_transformation_array();
1466 virtual void announce_external_viewport_change(ivec4& cgv_viewport_storage) = 0;
1468 virtual void recover_from_external_viewport_change(const ivec4& cgv_viewport_storage) = 0;
1470 virtual unsigned get_max_window_transformation_array_size() const = 0;
1472
1473protected:
1474 bool ensure_window_transformation_index(int& array_index);
1475public:
1477
1487 virtual void set_viewport(const ivec4& viewport, int array_index = -1);
1489
1491 virtual void set_depth_range(const dvec2& depth_range = dvec2(0, 1), int array_index = -1);
1493 const std::vector<window_transformation>& get_window_transformation_array() const;
1495
1500 dmat4 get_window_matrix(unsigned array_index = 0) const;
1502 dmat4 get_modelview_projection_window_matrix(unsigned array_index = 0) const;
1504 virtual double get_window_z(int x_window, int y_window) const = 0;
1506
1508 inline dvec3 get_model_point(int x_window, int y_window) const {
1509 return get_model_point(x_window, y_window, get_window_z(x_window, y_window));
1510 }
1511
1512
1514 inline dvec3 get_model_point(int x_window, int y_window, double z_window) const {
1515 return get_model_point(x_window, y_window, z_window, get_modelview_projection_window_matrix());
1516 }
1517
1518
1520 inline dvec3 get_model_point(int x_window, int y_window, const dmat4& modelview_projection_window_matrix) const {
1521 return get_model_point(x_window, y_window, get_window_z(x_window, y_window), modelview_projection_window_matrix);
1522 }
1523
1524
1526 inline static dvec3 get_model_point(int x_window, int y_window, double z_window, const dmat4& modelview_projection_window_matrix) {
1527 return get_model_point(dvec3(x_window+0.5, y_window+0.5, z_window), modelview_projection_window_matrix);
1528 }
1529
1530
1532 inline dvec3 get_model_point(const vec3& p_window) const {
1534 }
1535
1536
1538 static dvec3 get_model_point(const dvec3& p_window, const dmat4& modelview_projection_window_matrix);
1540 DEPRECATED("use get_window_matrix() instead.") dmat4 get_device_matrix() const { return get_window_matrix(); }
1542 DEPRECATED("use get_modelview_projection_window_matrix() instead.") dmat4 get_modelview_projection_device_matrix() const;
1544 DEPRECATED("use get_window_z()") double get_z_D(int x_D, int y_D) const { return get_window_z(x_D, y_D); }
1546 DEPRECATED("use get_model_point()") vec3 get_point_W(int x_D, int y_D) const { return get_model_point(x_D, y_D); }
1548 DEPRECATED("use get_model_point()") vec3 get_point_W(int x_D, int y_D, const dmat4& MPD) const { return get_model_point(x_D, y_D, MPD); }
1550 DEPRECATED("use get_model_point()") vec3 get_point_W(int x_D, int y_D, double z_D) const { return get_model_point(x_D, y_D, z_D); }
1552 DEPRECATED("use get_model_point()") vec3 get_point_W(int x_D, int y_D, double z_D, const dmat4& MPD) const { return get_model_point(x_D, y_D, z_D, MPD); }
1554 DEPRECATED("use get_model_point()") vec3 get_point_W(const vec3& p_D) const { return get_model_point(p_D); }
1556 DEPRECATED("use get_model_point()") vec3 get_point_W(const vec3& p_D, const dmat4& MPD) const { return get_model_point(p_D, MPD); }
1558};
1559
1564extern CGV_API context* create_context(RenderAPI api = RA_OPENGL,
1565 unsigned int w = 800, unsigned int h = 600,
1566 const std::string& title = "", bool show = false);
1567
1568typedef context* (*context_creation_function_type)(RenderAPI api, unsigned int w, unsigned int h, const std::string& title, bool show);
1569
1571extern CGV_API void register_context_factory(context_creation_function_type);
1572
1573struct CGV_API context_factory_registration
1574{
1575 context_factory_registration(context_creation_function_type fp);
1576};
1577
1578 }
1579}
1580
1581#include <cgv/config/lib_end.h>
base class for all classes that can be registered with support for dynamic properties (see also secti...
Definition base.h:75
the component format inherits the information of a packing_info and adds information on the component...
The const_data_view has the functionality of the data_view but uses a const pointer and therefore doe...
Definition data_view.h:221
A data_format describes a multidimensional data block of data entries.
Definition data_format.h:17
the data view gives access to a data array of one, two, three or four dimensions.
Definition data_view.h:153
reference counted pointer, which can work together with types that are derived from ref_counted,...
Definition ref_ptr.h:160
An axis aligned box, defined by to points: min and max.
>simple class to hold the properties of a light source
the self reflection handler is passed to the virtual self_reflect() method of cgv::base::base.
base class for attribute_array_bindings
Definition context.h:462
attribute_array_binding_base()
nothing to be done heremembers
Definition context.cxx:2425
base class for all drawables, which is independent of the used rendering API.
Definition context.h:670
void push_window_transformation_array()
push a copy of the current viewport and depth range arrays defining the window transformations
Definition context.cxx:2019
void tesselate_unit_prism(bool flip_normals=false, bool edges=false)
tesselate a prism
Definition context.cxx:1260
void * add_light_source(const cgv::media::illum::light_source &light, bool enabled=true, bool place_now=false)
add a new light source, enable it if enable is true and place it relative to current model view trans...
Definition context.cxx:610
virtual void announce_external_viewport_change(ivec4 &cgv_viewport_storage)=0
announce an external viewport change performed with rendering API to the cgv framework providing spac...
virtual void set_blend_func(BlendFunction src_factor, BlendFunction dst_factor)
set the blend function
Definition context.cxx:1877
void enable_shader_file_cache()
enable the usage of the shader file caches
Definition context.cxx:557
virtual bool read_frame_buffer(data::data_view &dv, unsigned int x=0, unsigned int y=0, FrameBufferType buffer_type=FB_BACK, cgv::type::info::TypeId type=cgv::type::info::TI_UINT8, data::ComponentFormat cf=data::CF_RGB, int w=-1, int h=-1)=0
read the current frame buffer or a rectangular region of it into the given data view.
void set_blend_func_back_to_front()
set the default blend function for back to front blending (source = BF_SRC_ALPHA, destination = BF_ON...
Definition context.cxx:1897
virtual void mul_modelview_matrix(const dmat4 &MV)
multiply given matrix from right to current modelview matrix
Definition context.cxx:1957
void pop_bg_color()
pop the top of the current background color from the stack
Definition context.cxx:385
virtual void set_depth_range(const dvec2 &depth_range=dvec2(0, 1), int array_index=-1)
set the current depth range or one of the depth ranges in the window transformation array
Definition context.cxx:2057
vec3 gamma3
per color channel gamma value passed to shader programs that have gamma uniform
Definition context.h:750
virtual bool in_render_process() const =0
return whether the context is currently in process of rendering
virtual void process_text(const std::string &text)
callback method for processing of text from the output stream
Definition context.cxx:974
virtual void draw_light_source(const cgv::media::illum::light_source &l, float intensity_scale, float light_scale)
draw a light source with an emissive material
Definition context.cxx:2217
virtual bool is_created() const =0
return whether the context is created
virtual void set_gamma3(const vec3 &_gamma3)
set the current per channel gamma values to single value
Definition context.cxx:1709
virtual void draw_edges_of_faces(const float *vertices, const float *normals, const float *tex_coords, const int *vertex_indices, const int *normal_indices, const int *tex_coord_indices, int nr_faces, int face_degree, bool flip_normals=false) const =0
pass geometry of given faces to current shader program and generate draw calls to render lines for th...
virtual void recover_from_external_viewport_change(const ivec4 &cgv_viewport_storage)=0
restore cgv viewport to the state before the external change
RenderPassFlags default_render_flags
default render flags with which the main render pass is initialized
Definition context.h:831
void pop_buffer_mask()
pop the top of the current buffer mask from the stack
Definition context.cxx:1917
virtual void announce_external_frame_buffer_change(void *&cgv_fbo_storage)=0
announce an external frame buffer change performed with rendering API to the cgv framework providing ...
shader_program_base * get_current_program() const
check for current program, prepare it for rendering and return pointer to it
Definition context.cxx:537
virtual void error(const std::string &message, const render_component *rc=0) const
error handling
Definition context.cxx:307
std::stack< render_info > render_pass_stack
store the current render pass
Definition context.h:829
virtual void enumerate_program_uniforms(shader_program &prog, std::vector< std::string > &names, std::vector< int > *locations_ptr=0, std::vector< int > *sizes_ptr=0, std::vector< int > *types_ptr=0, bool show=false) const =0
get list of program uniforms
virtual void draw_edges_of_strip_or_fan(const float *vertices, const float *normals, const float *tex_coords, const int *vertex_indices, const int *normal_indices, const int *tex_coord_indices, int nr_faces, int face_degree, bool is_fan, bool flip_normals=false) const =0
pass geometry of given strip or fan to current shader program and generate draw calls to render lines...
virtual GPUVendorID get_gpu_vendor_id() const
device information
Definition context.cxx:318
void set_current_view(shader_program &prog, bool modelview_deps=true, bool projection_deps=true) const
set the shader program view matrices to the currently enabled view matrices
Definition context.cxx:682
float current_font_size
store current font size
Definition context.h:841
bool enable_vsync
whether vsync should be enabled
Definition context.h:744
virtual void disable_material(textured_material &mat)=0
disable a material with textures
virtual void attach_alpha_buffer(bool attach=true)=0
attach or detach (attach=false) an alpha buffer to the current frame buffer if not present
virtual void attach_stencil_buffer(bool attach=true)=0
attach or detach (attach=false) stencil buffer to the current frame buffer if not present
void tesselate_unit_cube(bool flip_normals=false, bool edges=false)
tesselate a unit cube with extent from [-1,-1,-1] to [1,1,1] with face normals that can be flipped
Definition context.cxx:1173
std::stack< BufferMask > buffer_mask_stack
stack of buffer masks
Definition context.h:768
void set_bg_clr_idx(unsigned int idx)
set an indexed background color
Definition context.cxx:420
virtual void set_buffer_mask(BufferMask mask)
set the buffer mask for depth and color buffers
Definition context.cxx:1926
virtual void draw_strip_or_fan(const float *vertices, const float *normals, const float *tex_coords, const int *vertex_indices, const int *normal_indices, const int *tex_coord_indices, int nr_faces, int face_degree, bool is_fan, bool flip_normals=false) const =0
pass geometry of given strip or fan to current shader program and generate draw calls to render trian...
virtual bool is_current() const =0
return whether the context is current
bool auto_set_lights_in_current_shader_program
whether to automatically set lights in current shader program, defaults to true
Definition context.h:732
float get_bg_accum_alpha() const
return the current alpha value for clearing the accumulation buffer
Definition context.cxx:500
void set_bg_alpha(float a)
set a user defined background alpha value
Definition context.cxx:411
virtual void set_blend_func_separate(BlendFunction src_color_factor, BlendFunction dst_color_factor, BlendFunction src_alpha_factor, BlendFunction dst_alpha_factor)
set the blend function separately for color and alpha
Definition context.cxx:1885
size_t light_source_handle
counter to construct light source handles
Definition context.h:803
virtual void on_lights_changed()
helper function to send light update events
Definition context.cxx:738
context()
init the cursor position to (0,0)
Definition context.cxx:216
virtual void attach_stereo_buffer(bool attach=true)=0
attach or detach (attach=false) stereo buffer to the current frame buffer if not present
void push_depth_test_state()
push a copy of the current depth test state onto the stack saved attributes: depth test enablement,...
Definition context.cxx:1813
virtual void tesselate_arrow(double length=1, double aspect=0.1, double rel_tip_radius=2.0, double tip_aspect=0.3, int res=25, bool edges=false)
tesselate an arrow from the origin in z-direction
Definition context.cxx:2207
void put_bg_color(float *rgba) const
copy the current background rgba color into the given float array
Definition context.cxx:403
std::stack< shader_program_base * > shader_program_stack
stack of currently enabled shader programs
Definition context.h:777
void push_blend_state()
push a copy of the current blend state onto the stack saved attributes: blend enablement,...
Definition context.cxx:1860
virtual void disable_depth_test()
disable the depth test
Definition context.cxx:1839
void pop_bg_depth()
pop the top of the current background depth value from the stack
Definition context.cxx:437
vec3 get_point_W(int x_D, int y_D) const
compute the location in world space of a device x/y-location. For this the device point is extended w...
Definition context.h:1546
int get_bg_stencil() const
return the current stencil value for clearing the background
Definition context.cxx:463
virtual float get_current_font_size() const
return the size in pixels of the currently enabled font face
Definition context.cxx:1047
void pop_blend_state()
pop the top of the current culling state from the stack
Definition context.cxx:1864
virtual unsigned int get_width() const =0
return the width of the window
size_t get_nr_default_light_sources() const
return number of default light sources
Definition context.h:1229
void set_bg_accum_alpha(float a)
set a user defined background alpha value for the accumulation buffer
Definition context.cxx:496
virtual void set_color(const rgb &clr, float opacity=1.0f)
set the current color
Definition context.h:1163
virtual shader_program & ref_default_shader_program(bool texture_support=false)=0
return a reference to a shader program used to render without illumination
float get_gamma() const
query current gamma computed as average over gamma3 per channel values
Definition context.h:1147
double get_z_D(int x_D, int y_D) const
read the window z-coordinate from the z-buffer for the given device x- and y-coordinates
Definition context.h:1544
int current_background
current back ground color index
Definition context.h:835
void set_blend_func_front_to_back()
set the default blend function for front to back blending (source = BF_ONE_MINUS_DST_ALPHA,...
Definition context.cxx:1893
virtual void clear_background(bool color_flag, bool depth_flag, bool stencil_flag=false, bool accum_flag=false)=0
clear the buffer contents of the flagged buffers to the set background colors
virtual RenderPass get_render_pass() const
return the current render pass
Definition context.cxx:857
void pop_depth_test_state()
pop the top of the current depth test state from the stack
Definition context.cxx:1817
void tesselate_unit_sphere(int resolution=25, bool flip_normals=false, bool edges=false)
tesselate a sphere of radius 1
Definition context.cxx:1463
virtual RenderPassFlags get_render_pass_flags() const
return the current render pass flags
Definition context.cxx:864
virtual bool is_stereo_buffer_supported() const =0
return whether the graphics card supports stereo buffer mode
void tesselate_unit_cylinder(int resolution=25, bool flip_normals=false, bool edges=false)
tesselate a cylinder of radius 1
Definition context.cxx:1371
virtual void resize(unsigned int width, unsigned int height)=0
resize the context to the given dimensions
float get_bg_alpha() const
return the current alpha value for clearing the background
Definition context.cxx:416
bool write_frame_buffer_to_image(const std::string &file_name, data::ComponentFormat cf=data::CF_RGB, FrameBufferType buffer_type=FB_BACK, unsigned int x=0, unsigned int y=0, int w=-1, int h=-1, float depth_offset=0.9f, float depth_scale=10.0f)
write the content of the frame buffer to an image file.
Definition context.cxx:1060
unsigned int get_bg_clr_idx() const
return the current index of the background color
Definition context.cxx:429
void tesselate_unit_tetrahedron(bool flip_normals=false, bool edges=false)
tesselate a tetrahedron
Definition context.cxx:1514
virtual bool recreate_context()
recreate context based on current context config settings
Definition context.cxx:147
virtual void configure_new_child(cgv::base::base_ptr child)
helper method to integrate a new child
Definition context.cxx:363
virtual void set_bg_color(vec4 rgba)
set a user defined background color
Definition context.cxx:390
virtual void set_depth_test_state(DepthTestState state)
set the depth test state
Definition context.cxx:1826
void render_pass_debug_output(const render_info &ri, const std::string &info="")
write out render pass debug info, if activated
Definition context.cxx:906
void tesselate_unit_octahedron(bool flip_normals=false, bool edges=false)
tesselate a octahedron
Definition context.cxx:1569
const frame_buffer_base * get_current_frame_buffer() const
check for current framebuffer, and return pointer to it
Definition context.cxx:548
virtual unsigned int get_height() const =0
return the height of the window
vec3 get_gamma3() const
query current per color channel gamma
Definition context.h:1149
virtual void disable_blending()
disable blending
Definition context.cxx:1909
BufferMask get_buffer_mask() const
return the current buffer mask
Definition context.cxx:1922
void push_cull_state()
push a copy of the current culling state onto the stack saved attributes: cull face enablement,...
Definition context.cxx:1843
virtual void enable_font_face(media::font::font_face_ptr font_face, float font_size)
enable the given font face with the given size in pixels
Definition context.cxx:1037
dmat4 get_modelview_projection_window_matrix(unsigned array_index=0) const
return a homogeneous 4x4 matrix to transfrom from model to window coordinates, i.e....
Definition context.cxx:2092
dmat4 get_window_matrix(unsigned array_index=0) const
return a homogeneous 4x4 matrix to transform clip to window coordinates
Definition context.cxx:2070
bool update_render_pass_flags(int exclude_flags, int include_flags=0)
update the current render pass flags, return whether this was possible (fails outside of render passe...
Definition context.cxx:872
void pop_bg_stencil()
pop the top of the current background stencil value from the stack
Definition context.cxx:454
virtual void draw_faces(const float *vertices, const float *normals, const float *tex_coords, const int *vertex_indices, const int *normal_indices, const int *tex_coord_indices, int nr_faces, int face_degree, bool flip_normals=false) const =0
pass geometry of given faces to current shader program and generate draw calls to render triangles
std::stack< dmat4 > modelview_matrix_stack
keep two matrix stacks for model view and projection matrices
Definition context.h:771
dmat4 get_device_matrix() const
return homogeneous 4x4 projection matrix, which transforms from clip to device space
Definition context.h:1540
dvec3 get_model_point(int x_window, int y_window, double z_window) const
compute model space 3D point from the given opengl pixel location (window location)
Definition context.h:1514
vec3 get_light_eye_position(const cgv::media::illum::light_source &light, bool place_now) const
helper function to place lights
Definition context.cxx:581
void push_bg_stencil()
push a copy of the current background stencil value onto the stack
Definition context.cxx:450
virtual void pop_window_transformation_array()
restore previous viewport and depth range arrays defining the window transformations
Definition context.cxx:2024
bool use_shader_file_cache
whether to use the caching facilities of shader_program and shader_code to store loaded shader file c...
Definition context.h:728
virtual void set_color_mask(bvec4 flags)
set the color buffer mask
Definition context.cxx:1943
virtual double get_window_z(int x_window, int y_window) const =0
read the window z-coordinate from the depth buffer for the given opengl x- and y-coordinates
DepthTestState get_depth_test_state() const
return the current depth test state
Definition context.cxx:1822
int nr_identations
current number of indentations
Definition context.h:849
void tesselate_unit_dodecahedron(bool flip_normals=false, bool edges=false)
tesselate a dodecahedron
Definition context.cxx:1684
virtual void clear_current() const =0
clear the current context, typically used in multi-threaded rendering to allow usage of context in se...
bool auto_set_material_in_current_shader_program
whether to automatically set material in current shader program, defaults to true
Definition context.h:734
void set_current_lights(shader_program &prog) const
set the shader program lights to the currently enabled lights
Definition context.cxx:723
virtual void tesselate_box(const cgv::media::axis_aligned_box< double, 3 > &B, bool flip_normals, bool edges=false) const
tesselate an axis aligned box
Definition context.cxx:1226
virtual void recover_from_external_frame_buffer_change(void *cgv_fbo_storage)=0
restore cgv frame buffer to the state before the external change
virtual void * get_render_pass_user_data() const
return the current render pass user data
Definition context.cxx:895
void tesselate_unit_disk(int resolution=25, bool flip_normals=false, bool edges=false)
tesselate a circular disk of radius 1
Definition context.cxx:1295
virtual RenderAPI get_render_api() const =0
return the used rendering API
std::stack< float > bg_depth_stack
stack of background depth values
Definition context.h:755
virtual void enable_depth_test()
enable the depth test
Definition context.cxx:1835
bool support_compatibility_mode
whether to support view and lighting management of compatibility mode, defaults to true
Definition context.h:738
void set_current_gamma(shader_program &prog) const
set the shader program gamma values
Definition context.cxx:1699
void tesselate_unit_torus(float minor_radius=0.2f, int resolution=25, bool flip_normals=false, bool edges=false)
tesselate a torus with major radius of one and given minor radius
Definition context.cxx:1413
vec4 get_bg_color() const
return the current color value for clearing the background
Definition context.cxx:399
void pop_projection_matrix()
see push_P for an explanation
Definition context.cxx:1974
attribute_array_binding_base * dummy_aab
allocate a dummy attribute array binding used to support attribute-less rendering
Definition context.h:726
std::stack< attribute_array_binding_base * > attribute_array_binding_stack
stack of currently enabled attribute array binding
Definition context.h:791
BlendState get_blend_state() const
return the current blend state
Definition context.cxx:1869
virtual void set_cull_state(CullingMode culling_mode)
set the culling state
Definition context.cxx:1856
void tesselate_unit_icosahedron(bool flip_normals=false, bool edges=false)
tesselate an icosahedron
Definition context.cxx:1689
virtual void set_depth_func(CompareFunction func)
set the depth test function
Definition context.cxx:1830
std::stack< DepthTestState > depth_test_state_stack
stack of depth test states
Definition context.h:762
std::stack< CullingMode > cull_state_stack
stack of culling mode states
Definition context.h:764
void push_bg_depth()
push a copy of the current background depth value onto the stack
Definition context.cxx:433
bool get_depth_mask() const
get the depth buffer mask
Definition context.cxx:1930
void disable_shader_file_cache()
disable the usage of the shader file caches
Definition context.cxx:563
bool phong_shading
whether to use phong shading
Definition context.h:833
virtual void push_pixel_coords()=0
use this to push new modelview and new projection matrices onto the transformation stacks such that x...
void push_projection_matrix()
same as push_V but for the projection matrix - a different matrix stack is used.
Definition context.cxx:1969
bvec4 get_color_mask() const
get the color buffer mask
Definition context.cxx:1938
virtual void force_redraw()=0
the context will be redrawn right now. This method cannot be called inside the following methods of a...
bool is_shader_file_cache_enabled() const
whether the shader file caches are enabled
Definition context.cxx:569
bool current_material_is_textured
store flag to tell whether current material is textured
Definition context.h:819
void push_bg_accum_color()
push a copy of the current background accumulation color onto the stack
Definition context.cxx:467
virtual media::font::font_face_ptr get_current_font_face() const
return the currently enabled font face
Definition context.cxx:1053
virtual void set_projection_matrix(const dmat4 &P)
set the current projection matrix, which transforms from eye to clip space
Definition context.cxx:2002
rgba current_color
current color value
Definition context.h:746
static const unsigned nr_default_light_sources
number of default light sources
Definition context.h:809
cgv::media::illum::light_source default_light_source[nr_default_light_sources]
default light sources
Definition context.h:811
std::stack< int > bg_stencil_stack
stack of background stencil values
Definition context.h:757
virtual dmat4 get_projection_matrix() const =0
return homogeneous 4x4 projection matrix, which transforms from eye to clip space
int tab_size
size a tabs
Definition context.h:845
std::stack< vec4 > bg_accum_color_stack
stack of background accumulation colors
Definition context.h:759
void pop_bg_accum_color()
pop the top of the current background accumulation color from the stack
Definition context.cxx:471
virtual void set_bg_stencil(int s)
set a user defined background stencil value
Definition context.cxx:459
virtual void set_bg_accum_color(vec4 rgba)
set a user defined background color for the accumulation buffer
Definition context.cxx:476
virtual void set_default_render_pass_flags(RenderPassFlags)
return the default render pass flags
Definition context.cxx:887
cgv::media::illum::surface_material default_material
store a default material
Definition context.h:815
bool sRGB_framebuffer_enabled()
check whether sRGB framebuffer is enabled
Definition context.h:1153
float get_bg_depth() const
return the current depth value for clearing the background
Definition context.cxx:446
const std::vector< window_transformation > & get_window_transformation_array() const
return the current window transformation array
Definition context.cxx:2064
void set_blend_func_alpha_over()
set the blend function for back to front blendingusing the source-over operator (Porter-Duff alpha-ov...
Definition context.cxx:1901
virtual unsigned get_max_window_transformation_array_size() const =0
query the maximum number of supported window transformations, which is at least 1
int x_offset
offset in x and y direction where text starts
Definition context.h:847
void put_bg_accum_color(float *rgba) const
copy the current accumulation background rgba color into the given float array
Definition context.cxx:488
virtual void attach_depth_buffer(bool attach=true)=0
attach or detach (attach=false) depth buffer to the current frame buffer if not present
std::map< void *, std::pair< cgv::media::illum::light_source, light_source_status > > light_sources
map handle to light source and light source status information
Definition context.h:805
std::stack< std::vector< window_transformation > > window_transformation_stack
keep stack of window transformations
Definition context.h:773
dvec3 get_model_point(int x_window, int y_window) const
compute model space 3D point from the given opengl pixel location (window location)
Definition context.h:1508
int cursor_x
current cursor location for textual output
Definition context.h:837
vec4 get_bg_accum_color() const
return the current color value for clearing the accumulation buffer
Definition context.cxx:484
virtual bool make_current() const =0
make the current context current if possible
bool draw_in_compatibility_mode
whether to do all drawing in compatibility mode, only possible if support_compatibility_mode is true,...
Definition context.h:740
virtual void set_blend_state(BlendState state)
set the complete blend state
Definition context.cxx:1873
virtual void render_pass(RenderPass render_pass=RP_MAIN, RenderPassFlags render_pass_flags=RPF_ALL, void *user_data=0, int rp_idx=-1)
perform the given render task
Definition context.cxx:920
bool sRGB_framebuffer
whether to use opengl option to support sRGB framebuffer
Definition context.h:748
virtual RenderPassFlags get_default_render_pass_flags() const
return the default render pass flags
Definition context.cxx:882
virtual void enumerate_program_attributes(shader_program &prog, std::vector< std::string > &names, std::vector< int > *locations_ptr=0, std::vector< int > *sizes_ptr=0, std::vector< int > *types_ptr=0, bool show=false) const =0
get list of program attributes
virtual void set_bg_depth(float d)
set a user defined background depth value
Definition context.cxx:442
dvec3 get_model_point(int x_window, int y_window, const dmat4 &modelview_projection_window_matrix) const
compute model space 3D point from the given opengl pixel location (window location) and modelview_pro...
Definition context.h:1520
void set_gamma(float _gamma)
set the current per channel gamma values to single value
Definition context.cxx:1694
virtual void enable_blending()
enable blending
Definition context.cxx:1905
virtual dmat4 get_modelview_matrix() const =0
return homogeneous 4x4 viewing matrix, which transforms from world to eye space
vec3 get_light_eye_spot_direction(const cgv::media::illum::light_source &light, bool place_now) const
helper function to place spot lights
Definition context.cxx:595
void set_current_material(shader_program &prog) const
set the shader program material to the currently enabled material
Definition context.cxx:711
void pop_cull_state()
pop the top of the current culling state from the stack
Definition context.cxx:1847
virtual void draw_text(const std::string &text)
draw some text at cursor position and update cursor position
Definition context.cxx:1019
void pop_modelview_matrix()
see push_V for an explanation
Definition context.cxx:1963
static dvec3 get_model_point(int x_window, int y_window, double z_window, const dmat4 &modelview_projection_window_matrix)
compute model space 3D point from the given opengl pixel location (window location) with the given mo...
Definition context.h:1526
void * default_light_source_handles[nr_default_light_sources]
handles of default light sources
Definition context.h:813
void push_modelview_matrix()
push the current viewing matrix onto a matrix stack for viewing matrices.
Definition context.cxx:1951
std::stack< frame_buffer_base * > frame_buffer_stack
stack of currently enabled frame buffers
Definition context.h:775
virtual void pop_pixel_coords()=0
pop previously pushed transformation matrices from modelview and projection stacks
bool at_line_begin
store whether we are at the beginning of the line
Definition context.h:851
virtual void enable_material(textured_material &mat)=0
enable a material with textures
dvec3 get_model_point(const vec3 &p_window) const
compute model space 3D point from the given window space point
Definition context.h:1532
void tesselate_unit_square(bool flip_normals=false, bool edges=false)
tesselate a unit square in the xy-plane with texture coordinates
Definition context.cxx:1542
bool auto_set_view_in_current_shader_program
whether to automatically set viewing matrixes in current shader program, defaults to true
Definition context.h:730
bool debug_render_passes
whether to debug render passes
Definition context.h:742
std::vector< void * > enabled_light_source_handles
keep track of enabled light source handles
Definition context.h:801
virtual void attach_accumulation_buffer(bool attach=true)=0
attach or detach (attach=false) accumulation buffer to the current frame buffer if not present
void tesselate_unit_cone(int resolution=25, bool flip_normals=false, bool edges=false)
tesselate a cone of radius 1
Definition context.cxx:1327
virtual void attach_multi_sample_buffer(bool attach=true)=0
attach or detach (attach=false) multi sample buffer to the current frame buffer if not present
CullingMode get_cull_state() const
return the current culling state
Definition context.cxx:1852
virtual shader_program & ref_surface_shader_program(bool texture_support=false)=0
return a reference to the default shader program used to render surfaces
virtual void mul_projection_matrix(const dmat4 &P)
multiply given matrix from right to current projection matrix
Definition context.cxx:1980
virtual void set_viewport(const ivec4 &viewport, int array_index=-1)
set the current viewport or one of the viewports in the window transformation array
Definition context.cxx:2050
virtual void post_redraw()=0
the context will be redrawn when the system is idle again
bool get_debug_render_passes() const
check whether render passes are debugged
Definition context.h:986
const cgv::media::illum::surface_material * current_material_ptr
store pointer to current material
Definition context.h:817
virtual void set_modelview_matrix(const dmat4 &MV)
set the current modelview matrix, which transforms from world to eye space
Definition context.cxx:1985
void push_bg_color()
push a copy of the current background color onto the stack
Definition context.cxx:381
void push_buffer_mask()
push a copy of the current buffer mask onto the stack saved attributes: depth mask,...
Definition context.cxx:1913
virtual void enable_phong_shading()
enable phong shading with the help of a shader (enabled by default)
Definition context.cxx:505
void set_debug_render_passes(bool _debug)
set flag whether to debug render passes
Definition context.cxx:901
cgv::media::font::font_face_ptr current_font_face
store current font
Definition context.h:843
cgv::signal::callback_stream out_stream
use a callback stream to write text to the opengl context
Definition context.h:839
std::stack< vec4 > bg_color_stack
stack of background colors
Definition context.h:753
unsigned get_render_pass_recursion_depth() const
return current render pass recursion depth
Definition context.cxx:851
std::stack< BlendState > blend_state_stack
stack of blend states
Definition context.h:766
virtual void set_depth_mask(bool flag)
set the depth buffer mask
Definition context.cxx:1934
bool auto_set_gamma_in_current_shader_program
whether to automatically set gamma in current shader program, defaults to true
Definition context.h:736
base class for all drawables, which is independent of the used rendering API.
Definition drawable.h:16
base interface for framebuffer
Definition context.h:529
frame_buffer_base()
initialize members
Definition context.cxx:2498
base interface for a render_buffer
Definition context.h:381
void put_id(T &id) const
cast the refence to rendering api specific representation of component id to the specified type
Definition context.h:376
virtual bool is_created() const
return whether component has been created
Definition context.cxx:2231
const context * ctx_ptr
keep pointer to my context
Definition context.h:363
std::string last_error
a string that contains the last error
Definition context.h:365
render_component()
initialize members
Definition context.cxx:2222
void put_id_void(void *ptr) const
copy the rendering api specific id the component to the memory location of the given pointer.
Definition context.cxx:2237
shader_program_base()
initializes members
Definition context.cxx:2275
base interface for a texture
Definition context.h:389
texture_base(TextureType _tt=TT_UNDEF)
initialize members
Definition context.cxx:2251
class that extends obj_material with the management of textures
base interface for a vertex buffer
Definition context.h:510
VertexBufferType type
buffer type defaults to VBT_VERTICES
Definition context.h:513
VertexBufferUsage usage
usage defaults to VBU_STATIC_DRAW
Definition context.h:515
defines a symmetric view with the following quantities:
Definition view.h:22
connect to the write signal of the callback stream in order to process all text written to the stream
data::ref_ptr< base, true > base_ptr
ref counted pointer to base
Definition base.h:37
namespace for data management components
ComponentFormat
define standard formats, which should be used to avoid wrong assignment of component names
@ CF_RGB
color format with two components R and G
data::ref_ptr< font_face > font_face_ptr
always use this ref counted pointer to store font faces
Definition font.h:52
namespace for api independent GPU programming
RenderAPI
enumeration of rendering APIs which can be queried from the context
Definition context.h:126
CullingMode
different culling modes
Definition context.h:199
cgv::data::ref_ptr< render_config > render_config_ptr
type of ref counted pointer to render configuration
Definition context.h:654
cgv::data::ref_ptr< context_config > context_config_ptr
type of ref counted pointer to context creation configuration
Definition context.h:620
void register_context_factory(context_creation_function_type fp)
registration context creation functions
Definition context.cxx:2621
BlendFunction
different blend functions
Definition context.h:206
TextAlignment
different text alignments
Definition context.h:329
@ TA_TOP
center of top edge of text bounds
Definition context.h:333
@ TA_BOTTOM_RIGHT
bottom right corner of text bounds
Definition context.h:338
@ TA_BOTTOM
center of bottom edge of text bounds
Definition context.h:334
@ TA_NONE
no alignment
Definition context.h:330
@ TA_RIGHT
center of right edge of text bounds
Definition context.h:332
@ TA_BOTTOM_LEFT
bottom left corner of text bounds
Definition context.h:337
@ TA_TOP_LEFT
top left corner of text bounds
Definition context.h:335
@ TA_LEFT
center of left edge of text bounds
Definition context.h:331
@ TA_TOP_RIGHT
top right corner of text bounds
Definition context.h:336
AccessType
different access types
Definition context.h:322
std::string get_render_pass_name(RenderPass rp)
convert render pass type into string
Definition context.cxx:834
TextureFilter
different texture filter
Definition context.h:245
render_config_ptr get_render_config()
return a pointer to the current shader configuration
Definition context.cxx:210
TextureWrap
different texture wrap modes
Definition context.h:229
FrameBufferType
different frame buffer types which can be combined together with or
Definition context.h:546
MaterialSide
different sides of a material
Definition context.h:184
TextureSampling
different sampling strategies for rendering to textures that steer the computation of the tex_coord i...
Definition context.h:303
@ TS_VERTEX
tex_coord ranges from [0,0,0] to [1,1,1]
Definition context.h:305
@ TS_CELL
for texture resulution N x M x L the tex_coord ranges from [1/2N, 1/2M, 1/2L] to [1-1/2N,...
Definition context.h:304
ElementType
different compound types for data elements
Definition context.h:53
context * create_context(RenderAPI api, unsigned int w, unsigned int h, const std::string &title, bool show)
construct a context of the given size.
Definition context.cxx:2634
std::ostream & operator<<(std::ostream &os, const type_descriptor &td)
operator to write textual description to stream
Definition context.cxx:30
ProgramVariableKind
enumerates different kinds of shader program variables
Definition context.h:91
VertexBufferUsage
Provides vertex buffer usage hints as defined in OpenGL.
Definition context.h:487
@ VBU_STATIC_COPY
Modified once and used many times; Modified by reading data from the GL, and used as the source for G...
Definition context.h:498
@ VBU_STREAM_COPY
Modified once and used at most a few times; Modified by reading data from the GL, and used as the sou...
Definition context.h:492
@ VBU_DYNAMIC_DRAW
Modified repeatedly and used many times; Modified by the application, and used as the source for GL d...
Definition context.h:500
@ VBU_STREAM_READ
Modified once and used at most a few times; Modified by reading data from the GL, and used to return ...
Definition context.h:490
@ VBU_DYNAMIC_COPY
Modified repeatedly and used many times; Modified by reading data from the GL, and used as the source...
Definition context.h:504
@ VBU_STATIC_READ
Modified once and used many times; Modified by reading data from the GL, and used to return that data...
Definition context.h:496
@ VBU_STATIC_DRAW
Modified once and used many times; Modified by the application, and used as the source for GL drawing...
Definition context.h:494
@ VBU_DYNAMIC_READ
Modified repeatedly and used many times; Modified by reading data from the GL, and used to return tha...
Definition context.h:502
@ VBU_STREAM_DRAW
Modified once and used at most a few times; Modified by the application, and used as the source for G...
Definition context.h:488
TextureCubeSides
the six different sides of a cube
Definition context.h:271
IlluminationMode
different illumination modes
Definition context.h:192
std::string to_string(TextureWrap wrap)
convert texture wrap to string
Definition context.cxx:1099
ShaderType
different shader types
Definition context.h:543
PrimitiveType
different primitive types
Definition context.h:281
VertexBufferType
Provides vertex buffer types to allow implicit binding.
Definition context.h:474
@ VBT_VERTICES
The buffer contains vertices and will be bound to GL_ARRAY_BUFFER.
Definition context.h:476
@ VBT_TEXTURE
The buffer contains texture data and will be bound to GL_TEXTURE_BUFFER.
Definition context.h:478
@ VBT_UNDEF
The buffer has no type.
Definition context.h:475
@ VBT_INDICES
The buffer contains indices and will be bound to GL_ELEMENT_ARRAY_BUFFER.
Definition context.h:477
@ VBT_ATOMIC_COUNTER
The buffer contains atomic counter and will be bound to GL_ATOMIC_COUNTER_BUFFER.
Definition context.h:482
@ VBT_STORAGE
The buffer contains arbitrary data and will be bound to GL_SHADER_STORAGE_BUFFER.
Definition context.h:481
@ VBT_UNIFORM
The buffer contains uniforms and will be bound to GL_UNIFORM_BUFFER.
Definition context.h:479
@ VBT_INDIRECT
The buffer contains indirect draw commands and will be bound to GL_DRAW_INDIRECT_BUFFER.
Definition context.h:483
@ VBT_FEEDBACK
The buffer is used for transform&feedback and will be bound to GL_TRANSFORM_FEEDBACK_BUFFER.
Definition context.h:480
BufferTypeBits
Bits for the selection of different buffer types.
Definition context.h:519
@ BTB_COLOR_BIT
color buffer type
Definition context.h:520
@ BTB_STENCIL_BIT
stencil buffer type
Definition context.h:523
@ BTB_ALL_BITS
all buffer types
Definition context.h:524
@ BTB_COLOR_AND_DEPTH_BITS
color and depth buffer types
Definition context.h:522
@ BTB_DEPTH_BIT
depth buffer type
Definition context.h:521
RenderPass
Enumeration of different render passes, which can be queried from the context and used to specify a n...
Definition context.h:133
@ RP_SHADOW_VOLUME
construction of shadow map
Definition context.h:138
@ RP_STEREO
rendering of second eye
Definition context.h:136
@ RP_USER_DEFINED
user defined renderpass
Definition context.h:142
@ RP_OPAQUE_SURFACES
opaque surface rendering using z-Buffer
Definition context.h:139
@ RP_NONE
no renderpass
Definition context.h:134
@ RP_MAIN
the main rendering pass triggered by the redraw event
Definition context.h:135
@ RP_TRANSPARENT_SURFACES
transparent surface rendering using depth peeling
Definition context.h:140
@ RP_PICK
in picking pass a small rectangle around the mouse is rendered
Definition context.h:141
@ RP_SHADOW_MAP
construction of shadow map
Definition context.h:137
TextureType
different texture types
Definition context.h:257
RenderPassFlags
available flags that can be queried from the context and set for a new render pass
Definition context.h:149
@ RPF_CLEAR_ACCUM
whether to clear the accumulation buffer
Definition context.h:164
@ RPF_SET_MODELVIEW
whether to set default modelview matrix
Definition context.h:152
@ RPF_DRAWABLES_FINISH_FRAME
whether to call finish frame method of drawables
Definition context.h:174
@ RPF_SET_MATERIAL
whether to define default material
Definition context.h:156
@ RPF_SET_CLEAR_DEPTH
whether to set the clear color
Definition context.h:170
@ RPF_ALL
all flags set, defines default render pass
Definition context.h:178
@ RPF_SET_LIGHTS
whether to define default lights
Definition context.h:155
@ RPF_CLEAR_COLOR
whether to clear the color buffer
Definition context.h:161
@ RPF_DRAWABLES_DRAW
whether to call draw and finish_draw methods of drawables
Definition context.h:173
@ RPF_CLEAR_STENCIL
whether to clear the depth buffer
Definition context.h:163
@ RPF_SET_MODELVIEW_PROJECTION
whether to set default modelview and projection matrix
Definition context.h:153
@ RPF_SET_CLEAR_STENCIL
whether to set the clear color
Definition context.h:171
@ RPF_ENABLE_MATERIAL
whether to enable material
Definition context.h:158
@ RPF_DRAWABLES_INIT_FRAME
whether to call the init_frame method of the drawables
Definition context.h:167
@ RPF_DRAWABLES_AFTER_FINISH
whether to call after finish method of drawables
Definition context.h:176
@ RPF_DEFAULT
all flags set, defines default render pass
Definition context.h:179
@ RPF_NONE
no frame initialization is performed
Definition context.h:150
@ RPF_HANDLE_SCREEN_SHOT
whether to perform a screen shot if this was scheduled
Definition context.h:177
@ RPF_CLEAR_DEPTH
whether to clear the depth buffer
Definition context.h:162
@ RPF_SET_STATE_FLAGS
whether to set depth buffer and culling flags
Definition context.h:168
@ RPF_CLEAR_ALL
whether to clear all buffers
Definition context.h:165
@ RPF_DRAW_TEXTUAL_INFO
whether to draw textual information
Definition context.h:175
@ RPF_SET_PROJECTION
whether to set default projection matrix
Definition context.h:151
@ RPF_SET_LIGHTING
whether to define and enable default lighting
Definition context.h:159
@ RPF_SET_CLEAR_ACCUM
whether to set the accumulation buffer clear color
Definition context.h:172
@ RPF_SET_CLEAR_COLOR
whether to set the clear color
Definition context.h:169
@ RPF_SET_LIGHTS_ON
whether to turn on default lights
Definition context.h:157
CompareFunction
different comparison functions used for depth testing or texture comparisons
Definition context.h:310
GPUVendorID
IDs for GPU vendors.
Definition context.h:34
TypeId
ids for the different types and type constructs
Definition type_id.h:12
@ TI_UINT8
signed integer stored in 64 bits
Definition type_id.h:23
namespace for compile time type information
Definition bool32_t.h:7
this header is dependency free
Definition print.h:11
cgv::math::fvec< float, 4 > vec4
declare type of 4d single precision floating point vectors (used for homogeneous coordinates)
Definition fvec.h:696
cgv::media::color< float, cgv::media::RGB, cgv::media::OPACITY > rgba
declare rgba color type with 32 bit components
Definition color.h:898
cgv::math::fvec< double, 3 > dvec3
declare type of 3d double precision floating point vectors
Definition fvec.h:701
cgv::math::fvec< int32_t, 3 > ivec3
declare type of 3d 32 bit integer vectors
Definition fvec.h:721
cgv::math::fvec< int32_t, 4 > ivec4
declare type of 4d 32 bit integer vectors
Definition fvec.h:723
cgv::math::vec< float > vecn
declare type of single precision floating point vector with varying dimension
Definition vec.h:1187
cgv::media::color< float, cgv::media::RGB > rgb
declare rgb color type with 32 bit components
Definition color.h:896
cgv::math::fvec< int32_t, 2 > ivec2
declare type of 2d 32 bit integer vectors
Definition fvec.h:719
cgv::math::fmat< double, 4, 4 > dmat4
declare type of 4x4 matrices
Definition fmat.h:481
cgv::math::mat< double > dmatn
declare type of matrices of varying dimensions
Definition mat.h:1383
cgv::math::fvec< bool, 4 > bvec4
declare type of 4d boolean vectors
Definition fvec.h:689
cgv::math::fvec< float, 3 > vec3
declare type of 3d single precision floating point vectors
Definition fvec.h:694
cgv::math::fvec< double, 2 > dvec2
declare type of 2d double precision floating point vectors
Definition fvec.h:699
Stores properties of a surface material.
Represents a blend state used to configure fragment blending.
Definition context.h:696
bool enabled
whether blending is enabled
Definition context.h:698
BlendFunction dst_color
the destination color (rgb) factor
Definition context.h:702
BlendFunction dst_alpha
the destination alpha factor
Definition context.h:706
BlendFunction src_alpha
the source alpha factor
Definition context.h:704
BlendFunction src_color
the source color (rgb) factor
Definition context.h:700
Represents a buffer mask used to mask depth and color buffer outputs.
Definition context.h:711
bool red_flag
whether to write to the red channel of the color buffer
Definition context.h:715
bool depth_flag
whether to write to the depth buffer if the depth test is enabled
Definition context.h:713
bool alpha_flag
whether to write to the alpha channel of the color buffer
Definition context.h:721
bool green_flag
whether to write to the green channel of the color buffer
Definition context.h:717
bool blue_flag
whether to write to the blue channel of the color buffer
Definition context.h:719
Represents a depth test state used to configure depth testing.
Definition context.h:688
bool enabled
whether the depth test is enabled
Definition context.h:690
CompareFunction test_func
the function used to compare depth values
Definition context.h:692
status information of light sources
Definition context.h:794
information necessary for a rendering pass
Definition context.h:822
bool multi_sample_buffer
default: false
Definition context.h:590
bool stencil_buffer
default: false
Definition context.h:586
int version_minor
default: -1 ... minor version of maximum supported OpenGL version
Definition context.h:603
int depth_bits
default: -1
Definition context.h:592
bool double_buffer
default: true
Definition context.h:580
int version_major
default: -1 ... major version of maximum supported OpenGL version
Definition context.h:601
context_config()
construct config with default parameters
Definition context.cxx:119
bool debug
default: false in release and true in debug version
Definition context.h:607
bool forward_compatible
default: false
Definition context.h:605
std::vector< int > context_creation_attrib_list
provide integer vector to store context creation attribute list
Definition context.h:616
bool stereo_buffer
default: false
Definition context.h:584
bool alpha_buffer
default: false
Definition context.h:582
bool self_reflect(cgv::reflect::reflection_handler &srh)
reflect the shader_path member
Definition context.cxx:153
bool core_profile
default: true
Definition context.h:609
int stencil_bits
default: -1
Definition context.h:594
int nr_multi_samples
default: -1
Definition context.h:598
bool accumulation_buffer
default: false
Definition context.h:588
int accumulation_bits
default: -1
Definition context.h:596
bool depth_buffer
default: true
Definition context.h:578
int max_compute_shared_memory_size
the total number of output values (a component, in GLSL terms, is a component of a vector....
Definition context.h:46
ivec3 max_compute_work_group_count
the number of invocations in a single local work group (i.e., the product of the three dimensions) th...
Definition context.h:48
int max_compute_work_group_invocations
total available storage size in bytes for all shared variables in a compute shader
Definition context.h:47
int max_geometry_shader_total_output_component_count
the maximum number of components of outputs (out variables) written by a geometry shader
Definition context.h:45
int max_geometry_shader_output_vertex_count
the maximum supported size for renderbuffers in any dimension
Definition context.h:43
ivec3 max_compute_work_group_size
the maximum number of work groups that may be dispatched to a compute shader; dimension index 0,...
Definition context.h:49
int max_geometry_shader_output_component_count
the maximum number that can be provided to the max_vertices output layout qualifier in a geometry sha...
Definition context.h:44
structure to store information on a shader program variable, i.e.
Definition context.h:100
std::string name
name as it appears in shaders
Definition context.h:102
std::vector< char > current_value
data storage for the value of the program variable
Definition context.h:110
unsigned array_size
dimension of arrays
Definition context.h:106
void compute_sizes(size_t &cnt, size_t &s, size_t &S) const
helper member function to compute counts and sizes
Definition context.cxx:62
int program_location
location in program, but not for array variables which span multiple locations
Definition context.h:108
cgv::render::type_descriptor type_descr
type descriptor providing information on component and compositions (scalar, vector or matrix)
Definition context.h:104
int window_width
default: 640
Definition context.h:630
render_config()
construct config with default parameters
Definition context.cxx:174
bool dialog_on_error
default: true (only in case a gui_driver, which supports this, is loaded)
Definition context.h:640
bool self_reflect(cgv::reflect::reflection_handler &srh)
reflect the shader_path member
Definition context.cxx:197
int fullscreen_monitor
default: -1 ... no fullscreen
Definition context.h:628
int window_height
default: 480
Definition context.h:632
bool abort_on_error
default: false
Definition context.h:638
std::string get_type_name() const
return "render_config"
Definition context.cxx:191
bool show_error_on_console
default: true
Definition context.h:642
compact type description of data that can be sent to the context; convertible to int
Definition context.h:61
type_descriptor(const type_descriptor &td, bool _is_array)
construct descriptor for an array
Definition context.h:78
type_descriptor(cgv::type::info::TypeId _coordinate_type, bool _normalize=false)
construct descriptor for values
Definition context.h:72
type_descriptor(cgv::type::info::TypeId _coordinate_type, unsigned _nr_rows, unsigned _nr_cols, bool _is_row_major, bool _normalize=false)
construct descriptor for matrices
Definition context.h:76
type_descriptor(cgv::type::info::TypeId _coordinate_type, unsigned _nr_entries, bool _normalize=false)
construct descriptor for vectors
Definition context.h:74
type_descriptor(int td=0)
construct from int
Definition context.h:70
friend CGV_API std::ostream & operator<<(std::ostream &, const type_descriptor &)
operator to write textual description to stream
Definition context.cxx:30
parameters necessary to define window transformation
Definition context.h:661
dvec2 depth_range
range of depth values [min_depth, max_depth]
Definition context.h:665
ivec4 viewport
viewport parameters [x0,y0,width,height]
Definition context.h:663