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;
369 virtual bool is_created() const;
372 void put_id_void(void* ptr) const;
374 template <typename T>
375 void put_id(T& id) const { put_id_void(&id); }
376};
377
380{
381public:
382 unsigned nr_multi_samples = 0;
384};
385
387class CGV_API texture_base : public render_component
388{
389public:
390 TextureFilter mag_filter;
391 TextureFilter min_filter;
392 TextureWrap wrap_s;
393 TextureWrap wrap_t;
394 TextureWrap wrap_r;
395 float anisotropy;
396 float priority;
397 float border_color[4];
398 CompareFunction compare_function;
399 bool use_compare_function;
400 TextureType tt;
401 bool have_mipmaps;
402 unsigned nr_multi_samples = 5;
403 bool fixed_sample_locations = true;
405 texture_base(TextureType _tt = TT_UNDEF);
406};
407
408
411{
412protected:
413 bool is_enabled;
414 friend class context;
415
416 bool auto_detect_uniforms;
417 bool auto_detect_vertex_attributes;
418
419 // uniforms
420 bool uses_view;
421 bool uses_material;
422 bool uses_lights;
423 bool uses_gamma;
424 // maps uniform names to their locations in the shader program
425 std::map<std::string, int> uniform_locations;
426
427 // vertex attribute names
428 int position_index;
429 int color_index;
430 bool context_sets_color;
431 int normal_index;
432 int texcoord_index;
433
434public:
435 PrimitiveType geometry_shader_input_type;
436 PrimitiveType geometry_shader_output_type;
437 int geometry_shader_output_count;
440 // configure program
441 void specify_standard_uniforms(bool view, bool material, bool lights, bool gamma);
442 void specify_standard_vertex_attribute_names(context& ctx, bool color = true, bool normal = true, bool texcoord = true);
443 void specify_vertex_attribute_names(context& ctx, const std::string& position, const std::string& color = "", const std::string& normal = "", const std::string& texcoord = "");
444 // uniforms
445 bool does_use_view() const { return uses_view; }
446 bool does_use_material() const { return uses_material; }
447 bool does_use_lights() const { return uses_lights; }
448 bool does_use_gamma() const { return uses_gamma; }
449
450 // vertex attribute names
451 void allow_context_to_set_color(bool allow);
452 int get_position_index() const { return position_index; }
453 int get_color_index() const { return color_index; }
454 bool does_context_set_color() const { return context_sets_color; }
455 int get_normal_index() const { return normal_index; }
456 int get_texcoord_index() const { return texcoord_index; }
457};
458
461{
462protected:
463 bool is_enabled;
464 friend class context;
465public:
468};
469
470
483
505
515
524
527{
528protected:
529 friend class context;
530 bool is_enabled;
531 std::vector<int> enabled_color_attachments;
532 bool depth_attached;
533 bool attached[16];
534 int width, height;
535public:
538};
539
541enum ShaderType { ST_DETECT, ST_COMPUTE, ST_VERTEX, ST_TESS_CONTROL, ST_TESS_EVALUATION, ST_GEOMETRY, ST_FRAGMENT };
542
545 FB_0 = 0,
546 FB_1 = 1,
547 FB_2 = 2,
548 FB_3 = 3,
549 FB_4 = 4,
550 FB_5 = 5,
551 FB_6 = 6,
552 FB_7 = 7,
553 FB_BACK = 128,
554 FB_FRONT = 129,
555 FB_LEFT = 512,
556 FB_RIGHT = 1024,
557 FB_BACK_LEFT = FB_BACK+FB_LEFT,
558 FB_BACK_RIGHT = FB_BACK+FB_RIGHT,
559 FB_FRONT_LEFT = FB_FRONT+FB_LEFT,
560 FB_FRONT_RIGHT = FB_FRONT+FB_RIGHT
561};
562
563// forward declaration of all render components
564class CGV_API texture;
565class CGV_API render_buffer;
566class CGV_API frame_buffer;
567class CGV_API shader_code;
568class CGV_API shader_program;
569
616
619
621struct CGV_API render_config : public cgv::base::base, public context_config
622{
632
642
646 std::string get_type_name() const;
648 bool self_reflect(cgv::reflect::reflection_handler& srh);
649};
650
653
655extern CGV_API render_config_ptr get_render_config();
656
665
667class CGV_API context : public context_config
668{
669protected:
670 // store the GPU vendor id
671 GPUVendorID gpu_vendor;
672 // store the GPU device capabilities
673 device_capabilities gpu_capabilities;
674public:
675 friend class CGV_API attribute_array_manager;
676 friend class CGV_API render_component;
677 friend class CGV_API texture;
678 friend class CGV_API render_buffer;
679 friend class CGV_API frame_buffer;
680 friend class CGV_API shader_code;
681 friend class CGV_API shader_program;
682 friend class CGV_API attribute_array_binding;
683 friend class CGV_API vertex_buffer;
684
688 bool enabled = false;
690 CompareFunction test_func = CF_LESS;
691 };
692
694 struct BlendState {
696 bool enabled = false;
698 BlendFunction src_color = BF_ZERO;
700 BlendFunction dst_color = BF_ZERO;
702 BlendFunction src_alpha = BF_ZERO;
704 BlendFunction dst_alpha = BF_ZERO;
705 // TODO: Add blend equation?
706 };
707
709 struct BufferMask {
711 bool depth_flag = true;
713 bool red_flag = true;
715 bool green_flag = true;
717 bool blue_flag = true;
719 bool alpha_flag = true;
720 };
721protected:
722 friend class shader_program_base;
749
751 std::stack<vec4> bg_color_stack;
753 std::stack<float> bg_depth_stack;
755 std::stack<int> bg_stencil_stack;
757 std::stack<vec4> bg_accum_color_stack;
758
760 std::stack<DepthTestState> depth_test_state_stack;
762 std::stack<CullingMode> cull_state_stack;
764 std::stack<BlendState> blend_state_stack;
766 std::stack<BufferMask> buffer_mask_stack;
767
769 std::stack<dmat4> modelview_matrix_stack, projection_matrix_stack;
771 std::stack<std::vector<window_transformation>> window_transformation_stack;
773 std::stack<frame_buffer_base*> frame_buffer_stack;
775 std::stack<shader_program_base*> shader_program_stack;
776public:
778 shader_program_base* get_current_program() const;
780 const frame_buffer_base* get_current_frame_buffer() const;
782 void enable_shader_file_cache();
784 void disable_shader_file_cache();
786 bool is_shader_file_cache_enabled() const;
787protected:
789 std::stack<attribute_array_binding_base*> attribute_array_binding_stack;
792 {
793 bool enabled;
794 vec3 eye_position;
795 vec3 eye_spot_direction;
796 int light_source_index;
797 };
803 std::map<void*, std::pair<cgv::media::illum::light_source, light_source_status> > light_sources;
805 virtual void on_lights_changed();
807 static const unsigned nr_default_light_sources = 2;
809 cgv::media::illum::light_source default_light_source[nr_default_light_sources];
811 void* default_light_source_handles[nr_default_light_sources];
820 {
821 RenderPass pass;
822 RenderPassFlags flags;
823 void* user_data;
824 int pass_index;
825 };
827 std::stack<render_info> render_pass_stack;
835 int cursor_x, cursor_y;
845 int x_offset, y_offset;
851 bool do_screen_shot;
853 virtual void process_text(const std::string& text);
855 virtual void draw_text(const std::string& text);
856
857 virtual void destruct_render_objects();
858 virtual void put_id(void* handle, void* ptr) const = 0;
859
860 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;
861 virtual bool texture_create (texture_base& tb, cgv::data::data_format& df) const = 0;
862 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;
863 virtual bool texture_create_from_buffer (texture_base& tb, cgv::data::data_format& df, int x, int y, int level) const = 0;
864 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;
865 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;
866 virtual bool texture_copy_back (const texture_base& tb, int level, cgv::data::data_view& dv) const = 0;
867 virtual bool texture_create_mipmaps (texture_base& tb, cgv::data::data_format& df) const = 0;
868 virtual bool texture_generate_mipmaps (texture_base& tb, unsigned int dim) const = 0;
869 virtual bool texture_destruct (texture_base& tb) const = 0;
870 virtual bool texture_set_state (const texture_base& tb) const = 0;
871 virtual bool texture_enable (texture_base& tb, int tex_unit, unsigned int nr_dims) const = 0;
872 virtual bool texture_disable (texture_base& tb, int tex_unit, unsigned int nr_dims) const = 0;
873 virtual bool texture_bind_as_image (texture_base& tb, int tex_unit, int level, bool bind_array, int layer, AccessType access) const = 0;
874
875 virtual bool render_buffer_create (render_buffer_base& rc, cgv::data::component_format& cf, int& _width, int& _height) const = 0;
876 virtual bool render_buffer_destruct (render_buffer_base& rc) const = 0;
877
878 static void get_buffer_list(frame_buffer_base& fbb, bool& depth_buffer, std::vector<int>& buffers, int offset = 0);
879 virtual bool frame_buffer_create (frame_buffer_base& fbb) const;
880 virtual bool frame_buffer_attach (frame_buffer_base& fbb, const render_buffer_base& rb, bool is_depth, int i) const;
881 virtual bool frame_buffer_attach (frame_buffer_base& fbb, const texture_base& t, bool is_depth, int level, int i, int z) const;
882 virtual bool frame_buffer_is_complete(const frame_buffer_base& fbb) const = 0;
883 virtual bool frame_buffer_enable (frame_buffer_base& fbb);
884 virtual bool frame_buffer_disable (frame_buffer_base& fbb);
885 virtual bool frame_buffer_destruct(frame_buffer_base& fbb) const;
886 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;
887 virtual int frame_buffer_get_max_nr_color_attachments() const = 0;
888 virtual int frame_buffer_get_max_nr_draw_buffers() const = 0;
889
890 virtual bool shader_code_create (render_component& sc, ShaderType st, const std::string& source) const = 0;
891 virtual bool shader_code_compile (render_component& sc) const = 0;
892 virtual void shader_code_destruct(render_component& sc) const = 0;
893
894 virtual bool shader_program_create (shader_program_base& spb) const = 0;
895 virtual void shader_program_attach(shader_program_base& spb, const render_component& sc) const = 0;
896 virtual void shader_program_detach(shader_program_base& spb, const render_component& sc) const = 0;
897 virtual bool shader_program_link(shader_program_base& spb) const;
898 virtual bool shader_program_set_state(shader_program_base& spb) const = 0;
899 virtual bool shader_program_enable (shader_program_base& spb);
900 virtual bool shader_program_disable(shader_program_base& spb);
901 virtual bool shader_program_destruct(shader_program_base& spb) const;
902 virtual void shader_program_set_uniform_locations(shader_program_base& spb) const;
903 virtual bool shader_program_get_active_uniforms(shader_program_base& spb, std::vector<std::string>& names) const = 0;
904 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;
905 virtual int get_uniform_location(const shader_program_base& spb, const std::string& name) const = 0;
906 virtual bool set_uniform_void(shader_program_base& spb, int loc, type_descriptor value_type, const void* value_ptr) const = 0;
907 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;
908 virtual int get_uniform_block_index(const shader_program_base& spb, const std::string& name) const = 0;
909 virtual bool set_uniform_block_binding(shader_program_base& spb, int index, int binding) const = 0;
910 virtual int get_attribute_location(const shader_program_base& spb, const std::string& name) const = 0;
911 virtual bool set_attribute_void(shader_program_base& spb, int loc, type_descriptor value_type, const void* value_ptr) const = 0;
912
913 virtual bool attribute_array_binding_create (attribute_array_binding_base& aab) const = 0;
914 virtual bool attribute_array_binding_destruct(attribute_array_binding_base& aab) const;
915 virtual bool attribute_array_binding_enable (attribute_array_binding_base& aab);
916 virtual bool attribute_array_binding_disable (attribute_array_binding_base& aab);
917 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;
918 virtual bool set_element_array(attribute_array_binding_base* aab, const vertex_buffer_base* vbb) const = 0;
919 virtual bool enable_attribute_array(attribute_array_binding_base* aab, int loc, bool do_enable) const = 0;
920 virtual bool is_attribute_array_enabled(const attribute_array_binding_base* aab, int loc) const = 0;
921
922 virtual bool vertex_buffer_bind(const vertex_buffer_base& vbb, VertexBufferType _type, unsigned _idx = -1) const = 0;
923 virtual bool vertex_buffer_unbind(const vertex_buffer_base& vbb, VertexBufferType _type, unsigned _idx = -1) const = 0;
924 virtual bool vertex_buffer_create(vertex_buffer_base& vbb, const void* array_ptr, size_t size_in_bytes) const = 0;
925 virtual bool vertex_buffer_resize(vertex_buffer_base& vbb, const void* array_ptr, size_t size_in_bytes) const = 0;
926 virtual bool vertex_buffer_clear(vertex_buffer_base& vbb, size_t offset, size_t size_in_bytes) const = 0;
927 virtual bool vertex_buffer_replace(vertex_buffer_base& vbb, size_t offset, size_t size_in_bytes, const void* array_ptr) const = 0;
928 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;
929 virtual bool vertex_buffer_copy_back(const vertex_buffer_base& vbb, size_t offset, size_t size_in_bytes, void* array_ptr) const = 0;
930 virtual bool vertex_buffer_destruct(vertex_buffer_base& vbb) const = 0;
931public:
933 context();
935 virtual ~context();
937 virtual void error(const std::string& message, const render_component* rc = 0) const;
939 virtual GPUVendorID get_gpu_vendor_id() const;
940 const device_capabilities& get_device_capabilities() const;
941
945 virtual void init_render_pass();
947 virtual void draw_textual_info();
949 virtual void perform_screen_shot();
951 virtual void finish_render_pass();
953
957 virtual void configure_new_child(cgv::base::base_ptr child);
959 virtual RenderAPI get_render_api() const = 0;
961 unsigned get_render_pass_recursion_depth() const;
963 virtual RenderPass get_render_pass() const;
965 virtual RenderPassFlags get_render_pass_flags() const;
967 bool update_render_pass_flags(int exclude_flags, int include_flags = 0);
969 virtual void* get_render_pass_user_data() const;
971 virtual RenderPassFlags get_default_render_pass_flags() const;
973 virtual void set_default_render_pass_flags(RenderPassFlags);
975 void render_pass_debug_output(const render_info& ri, const std::string& info = "");
977 virtual void render_pass(RenderPass render_pass = RP_MAIN,
978 RenderPassFlags render_pass_flags = RPF_ALL,
979 void* user_data = 0,
980 int rp_idx = -1);
982 void set_debug_render_passes(bool _debug);
984 bool get_debug_render_passes() const { return debug_render_passes; }
986 virtual bool in_render_process() const = 0;
988 virtual bool is_created() const = 0;
990 virtual bool is_current() const = 0;
992 virtual bool recreate_context();
994 virtual bool make_current() const = 0;
996 virtual void clear_current() const = 0;
998 virtual void attach_alpha_buffer(bool attach = true) = 0;
1000 virtual void attach_depth_buffer(bool attach = true) = 0;
1002 virtual void attach_stencil_buffer(bool attach = true) = 0;
1004 virtual bool is_stereo_buffer_supported() const = 0;
1006 virtual void attach_stereo_buffer(bool attach = true) = 0;
1008 virtual void attach_accumulation_buffer(bool attach = true) = 0;
1010 virtual void attach_multi_sample_buffer(bool attach = true) = 0;
1012
1014 virtual unsigned int get_width() const = 0;
1016 virtual unsigned int get_height() const = 0;
1018 virtual void resize(unsigned int width, unsigned int height) = 0;
1019
1020
1036 virtual bool read_frame_buffer(
1037 data::data_view& dv,
1038 unsigned int x = 0, unsigned int y = 0,
1039 FrameBufferType buffer_type = FB_BACK,
1041 data::ComponentFormat cf = data::CF_RGB,
1042 int w = -1, int h = -1) = 0;
1046 bool write_frame_buffer_to_image(
1047 const std::string& file_name,
1048 data::ComponentFormat cf = data::CF_RGB,
1049 FrameBufferType buffer_type = FB_BACK,
1050 unsigned int x = 0, unsigned int y = 0,
1051 int w = -1, int h = -1,
1052 float depth_offset = 0.9f, float depth_scale = 10.0f);
1053
1055 void push_bg_color();
1057 void pop_bg_color();
1059 virtual void set_bg_color(vec4 rgba);
1061 void set_bg_color(float r, float g, float b, float a);
1063 vec4 get_bg_color() const;
1065 void put_bg_color(float* rgba) const;
1067 void set_bg_alpha(float a);
1069 float get_bg_alpha() const;
1071 void set_bg_clr_idx(unsigned int idx);
1073 unsigned int get_bg_clr_idx() const;
1074
1076 void push_bg_depth();
1078 void pop_bg_depth();
1080 virtual void set_bg_depth(float d);
1082 float get_bg_depth() const;
1083
1085 void push_bg_stencil();
1087 void pop_bg_stencil();
1089 virtual void set_bg_stencil(int s);
1091 int get_bg_stencil() const;
1092
1094 void push_bg_accum_color();
1096 void pop_bg_accum_color();
1098 virtual void set_bg_accum_color(vec4 rgba);
1100 void set_bg_accum_color(float r, float g, float b, float a);
1102 vec4 get_bg_accum_color() const;
1104 void put_bg_accum_color(float* rgba) const;
1106 void set_bg_accum_alpha(float a);
1108 float get_bg_accum_alpha() const;
1109
1111 virtual void clear_background(bool color_flag, bool depth_flag, bool stencil_flag = false, bool accum_flag = false) = 0;
1112
1114 virtual void post_redraw() = 0;
1116 virtual void force_redraw() = 0;
1118 virtual void announce_external_frame_buffer_change(void*& cgv_fbo_storage) = 0;
1120 virtual void recover_from_external_frame_buffer_change(void* cgv_fbo_storage) = 0;
1121
1125 virtual void enable_font_face(media::font::font_face_ptr font_face, float font_size);
1127 virtual float get_current_font_size() const;
1129 virtual media::font::font_face_ptr get_current_font_face() const;
1131
1134 DEPRECATED("deprecated and ignored.") virtual void enable_phong_shading();
1135 DEPRECATED("deprecated and ignored.") virtual void disable_phong_shading();
1136 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);
1137 DEPRECATED("deprecated and ignored.") virtual void disable_material(const cgv::media::illum::phong_material& mat = cgv::media::illum::phong_material::get_default());
1138 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);
1139 //DEPRECATED("deprecated, use disable_material(textured_surface_material) instead.") virtual void disable_material(const textured_material& mat) = 0;
1141 void set_gamma(float _gamma);
1143 virtual void set_gamma3(const vec3& _gamma3);
1145 float get_gamma() const { return (gamma3.x() + gamma3.y() + gamma3.z()) / 3.0f; }
1147 vec3 get_gamma3() const { return gamma3; }
1149 virtual void enable_sRGB_framebuffer(bool do_enable = true);
1151 bool sRGB_framebuffer_enabled() { return sRGB_framebuffer; }
1153 void begin_attribute_less_rendering();
1155 void end_attribute_less_rendering();
1157 const rgba& get_color() const;
1159 virtual void set_color(const rgba& clr);
1161 virtual void set_color(const rgb& clr, float opacity = 1.0f) { set_color(rgba(clr[0], clr[1], clr[2], opacity)); }
1163 virtual void set_material(const cgv::media::illum::surface_material& mat);
1165 const cgv::media::illum::surface_material* get_current_material() const;
1167 virtual void set_textured_material(const textured_material& mat);
1169 virtual void enable_material(textured_material& mat) = 0;
1171 virtual void disable_material(textured_material& mat) = 0;
1173 void set_current_gamma(shader_program& prog) const;
1175 void set_current_view(shader_program& prog, bool modelview_deps = true, bool projection_deps = true) const;
1177 void set_current_material(shader_program& prog) const;
1179 void set_current_lights(shader_program& prog) const;
1181 vec3 get_light_eye_position(const cgv::media::illum::light_source& light, bool place_now) const;
1183 vec3 get_light_eye_spot_direction(const cgv::media::illum::light_source& light, bool place_now) const;
1185 virtual shader_program& ref_default_shader_program(bool texture_support = false) = 0;
1187 virtual shader_program& ref_surface_shader_program(bool texture_support = false) = 0;
1189 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;
1191 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;
1193
1196 DEPRECATED("deprecated, use add_light_source instead.") void* enable_light(const cgv::media::illum::light_source& light) { return add_light_source(light); }
1197 DEPRECATED("deprecated, use enable_light_source instead.") void disable_light(void* handle) { disable_light_source(handle); }
1198 DEPRECATED("deprecated, use get_max_nr_enabled_light_sources instead.") unsigned get_max_nr_lights() const { return get_max_nr_enabled_light_sources(); }
1200 size_t get_nr_light_sources() const;
1202 void* add_light_source(const cgv::media::illum::light_source& light, bool enabled = true, bool place_now = false);
1204 bool remove_light_source(void* handle);
1206 const cgv::media::illum::light_source& get_light_source(void* handle) const;
1208 const light_source_status& get_light_source_status(void* handle) const;
1210 void set_light_source(void* handle, const cgv::media::illum::light_source& light, bool place_now = true);
1212 void place_light_source(void* handle);
1213
1215 virtual unsigned get_max_nr_enabled_light_sources() const;
1217 size_t get_nr_enabled_light_sources() const;
1219 void* get_enabled_light_source_handle(size_t i) const;
1221 bool is_light_source_enabled(void* handle);
1223 bool enable_light_source(void* handle);
1225 bool disable_light_source(void* handle);
1227 size_t get_nr_default_light_sources() const { return nr_default_light_sources; }
1229 const cgv::media::illum::light_source& get_default_light_source(size_t i) const;
1231 void set_default_light_source(size_t i, const cgv::media::illum::light_source& ls);
1233
1243 virtual std::ostream& output_stream();
1245 virtual void set_cursor(int x, int y);
1247 virtual void get_cursor(int& x, int& y) const;
1250 DEPRECATED("deprecated, use get_cursor_coords.") virtual void put_cursor_coords(const vecn& p, int& x, int& y) const;
1253 virtual ivec2 get_cursor_coords(const vec3& p) const;
1259 DEPRECATED("deprecated, use set_cursor(vec3, ...).") virtual void set_cursor(const vecn& pos,
1260 const std::string& text = "", TextAlignment ta = TA_BOTTOM_LEFT,
1261 int x_offset=0, int y_offset=0);
1267 virtual void set_cursor(const vec3& pos,
1268 const std::string& text = "", TextAlignment ta = TA_BOTTOM_LEFT,
1269 ivec2 offset = { 0 });
1271
1276 const float* vertices, const float* normals, const float* tex_coords,
1277 const int* vertex_indices, const int* normal_indices, const int* tex_coord_indices,
1278 int nr_faces, int face_degree, bool flip_normals = false) const = 0;
1281 const float* vertices, const float* normals, const float* tex_coords,
1282 const int* vertex_indices, const int* normal_indices, const int* tex_coord_indices,
1283 int nr_faces, int face_degree, bool is_fan, bool flip_normals = false) const = 0;
1285 virtual void draw_faces(
1286 const float* vertices, const float* normals, const float* tex_coords,
1287 const int* vertex_indices, const int* normal_indices, const int* tex_coord_indices,
1288 int nr_faces, int face_degree, bool flip_normals = false) const = 0;
1290 virtual void draw_strip_or_fan(
1291 const float* vertices, const float* normals, const float* tex_coords,
1292 const int* vertex_indices, const int* normal_indices, const int* tex_coord_indices,
1293 int nr_faces, int face_degree, bool is_fan, bool flip_normals = false) const = 0;
1294
1296 void tesselate_unit_square(bool flip_normals = false, bool edges = false);
1298 void tesselate_unit_cube(bool flip_normals = false, bool edges = false);
1300 virtual void tesselate_box(const cgv::media::axis_aligned_box<double, 3>& B, bool flip_normals, bool edges = false) const;
1302 void tesselate_unit_prism(bool flip_normals = false, bool edges = false);
1304 void tesselate_unit_disk(int resolution = 25, bool flip_normals = false, bool edges = false);
1306 void tesselate_unit_cone(int resolution = 25, bool flip_normals = false, bool edges = false);
1308 void tesselate_unit_cylinder(int resolution = 25, bool flip_normals = false, bool edges = false);
1310 void tesselate_unit_sphere(int resolution = 25, bool flip_normals = false, bool edges = false);
1312 void tesselate_unit_tetrahedron(bool flip_normals = false, bool edges = false);
1314 void tesselate_unit_octahedron(bool flip_normals = false, bool edges = false);
1316 void tesselate_unit_dodecahedron(bool flip_normals = false, bool edges = false);
1318 void tesselate_unit_icosahedron(bool flip_normals = false, bool edges = false);
1320 void tesselate_unit_torus(float minor_radius = 0.2f, int resolution = 25, bool flip_normals = false, bool edges = false);
1322
1329 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);
1331 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);
1333
1336 virtual void draw_light_source(const cgv::media::illum::light_source& l, float intensity_scale, float light_scale);
1338
1341
1344 void push_depth_test_state();
1346 void pop_depth_test_state();
1348 DepthTestState get_depth_test_state() const;
1350 virtual void set_depth_test_state(DepthTestState state);
1352 virtual void set_depth_func(CompareFunction func);
1354 virtual void enable_depth_test();
1356 virtual void disable_depth_test();
1357
1360 void push_cull_state();
1362 void pop_cull_state();
1364 CullingMode get_cull_state() const;
1366 virtual void set_cull_state(CullingMode culling_mode);
1367
1370 void push_blend_state();
1372 void pop_blend_state();
1374 BlendState get_blend_state() const;
1376 virtual void set_blend_state(BlendState state);
1378 virtual void set_blend_func(BlendFunction src_factor, BlendFunction dst_factor);
1380 virtual void set_blend_func_separate(BlendFunction src_color_factor, BlendFunction dst_color_factor, BlendFunction src_alpha_factor, BlendFunction dst_alpha_factor);
1382 void set_blend_func_front_to_back();
1384 void set_blend_func_back_to_front();
1386 virtual void enable_blending();
1388 virtual void disable_blending();
1389
1392 void push_buffer_mask();
1394 void pop_buffer_mask();
1396 BufferMask get_buffer_mask() const;
1398 virtual void set_buffer_mask(BufferMask mask);
1400 bool get_depth_mask() const;
1402 virtual void set_depth_mask(bool flag);
1404 bvec4 get_color_mask() const;
1406 virtual void set_color_mask(bvec4 flags);
1407
1409
1412 DEPRECATED("deprecated: use get_modelview_matrix() instead.") dmatn get_V() const { return dmatn(4,4,&get_modelview_matrix()(0,0)); }
1413 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))); }
1414 DEPRECATED("deprecated: use push_modelview_matrix() instead.") void push_V() { push_modelview_matrix(); }
1415 DEPRECATED("deprecated: use pop_modelview_matrix() instead.") void pop_V() { pop_modelview_matrix(); }
1416 DEPRECATED("deprecated: use get_projection_matrix() instead.") dmatn get_P() const { return dmatn(4, 4, &get_projection_matrix()(0, 0)); }
1417 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))); }
1418 DEPRECATED("deprecated: use push_projection_matrix() instead.") void push_P() { push_projection_matrix(); }
1419 DEPRECATED("deprecated: use pop_projection_matrix() instead.") void pop_P() { pop_projection_matrix(); }
1420 DEPRECATED("deprecated: use get_device_matrix() instead.") dmatn get_D() const { return dmatn(4, 4, &get_window_matrix()(0, 0)); }
1421 DEPRECATED("deprecated: use get_modelview_projection_device_matrix() instead.") dmatn get_DPV() const { return dmatn(4, 4, &get_modelview_projection_window_matrix()(0, 0)); }
1425 virtual void push_pixel_coords() = 0;
1427 virtual void pop_pixel_coords() = 0;
1429 virtual dmat4 get_modelview_matrix() const = 0;
1431 virtual void set_modelview_matrix(const dmat4& MV);
1433 virtual void mul_modelview_matrix(const dmat4& MV);
1435
1441 void push_modelview_matrix();
1443 void pop_modelview_matrix();
1445 virtual dmat4 get_projection_matrix() const = 0;
1447 virtual void set_projection_matrix(const dmat4& P);
1449 virtual void mul_projection_matrix(const dmat4& P);
1451 void push_projection_matrix();
1453 void pop_projection_matrix();
1455 void push_window_transformation_array();
1457
1459 virtual void pop_window_transformation_array();
1461 virtual void announce_external_viewport_change(ivec4& cgv_viewport_storage) = 0;
1463 virtual void recover_from_external_viewport_change(const ivec4& cgv_viewport_storage) = 0;
1465 virtual unsigned get_max_window_transformation_array_size() const = 0;
1467
1468protected:
1469 bool ensure_window_transformation_index(int& array_index);
1470public:
1472
1482 virtual void set_viewport(const ivec4& viewport, int array_index = -1);
1484
1486 virtual void set_depth_range(const dvec2& depth_range = dvec2(0, 1), int array_index = -1);
1488 const std::vector<window_transformation>& get_window_transformation_array() const;
1490
1495 dmat4 get_window_matrix(unsigned array_index = 0) const;
1497 dmat4 get_modelview_projection_window_matrix(unsigned array_index = 0) const;
1499 virtual double get_window_z(int x_window, int y_window) const = 0;
1501
1503 inline dvec3 get_model_point(int x_window, int y_window) const {
1504 return get_model_point(x_window, y_window, get_window_z(x_window, y_window));
1505 }
1507
1509 inline dvec3 get_model_point(int x_window, int y_window, double z_window) const {
1510 return get_model_point(x_window, y_window, z_window, get_modelview_projection_window_matrix());
1511 }
1513
1515 inline dvec3 get_model_point(int x_window, int y_window, const dmat4& modelview_projection_window_matrix) const {
1516 return get_model_point(x_window, y_window, get_window_z(x_window, y_window), modelview_projection_window_matrix);
1517 }
1519
1521 inline static dvec3 get_model_point(int x_window, int y_window, double z_window, const dmat4& modelview_projection_window_matrix) {
1522 return get_model_point(dvec3(x_window+0.5, y_window+0.5, z_window), modelview_projection_window_matrix);
1523 }
1525
1527 inline dvec3 get_model_point(const vec3& p_window) const {
1528 return get_model_point(p_window, get_modelview_projection_window_matrix());
1529 }
1531
1533 static dvec3 get_model_point(const dvec3& p_window, const dmat4& modelview_projection_window_matrix);
1535 DEPRECATED("use get_window_matrix() instead.") dmat4 get_device_matrix() const { return get_window_matrix(); }
1537 DEPRECATED("use get_modelview_projection_window_matrix() instead.") dmat4 get_modelview_projection_device_matrix() const;
1539 DEPRECATED("use get_window_z()") double get_z_D(int x_D, int y_D) const { return get_window_z(x_D, y_D); }
1541 DEPRECATED("use get_model_point()") vec3 get_point_W(int x_D, int y_D) const { return get_model_point(x_D, y_D); }
1543 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); }
1545 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); }
1547 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); }
1549 DEPRECATED("use get_model_point()") vec3 get_point_W(const vec3& p_D) const { return get_model_point(p_D); }
1551 DEPRECATED("use get_model_point()") vec3 get_point_W(const vec3& p_D, const dmat4& MPD) const { return get_model_point(p_D, MPD); }
1553};
1554
1559extern CGV_API context* create_context(RenderAPI api = RA_OPENGL,
1560 unsigned int w = 800, unsigned int h = 600,
1561 const std::string& title = "", bool show = false);
1562
1563typedef context* (*context_creation_function_type)(RenderAPI api, unsigned int w, unsigned int h, const std::string& title, bool show);
1564
1566extern CGV_API void register_context_factory(context_creation_function_type);
1567
1569{
1570 context_factory_registration(context_creation_function_type fp);
1571};
1572
1573 }
1574}
1575
1576#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
matrix of fixed size dimensions
Definition fmat.h:23
T & z()
return third component
Definition fvec.h:144
T & y()
return second component
Definition fvec.h:140
T & x()
return first component
Definition fvec.h:136
A matrix type (full column major storage) The matrix can be loaded directly into OpenGL without need ...
Definition mat.h:208
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:461
the attribute_array_binding allows to define vertex attributes (i.e.
attribute array manager used to upload arrays to gpu
base class for all drawables, which is independent of the used rendering API.
Definition context.h:668
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 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.
vec3 gamma3
per color channel gamma value passed to shader programs that have gamma uniform
Definition context.h:748
virtual bool in_render_process() const =0
return whether the context is currently in process of rendering
virtual bool is_created() const =0
return whether the context is created
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:829
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 ...
std::stack< render_info > render_pass_stack
store the current render pass
Definition context.h:827
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...
float current_font_size
store current font size
Definition context.h:839
bool enable_vsync
whether vsync should be enabled
Definition context.h:742
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
std::stack< BufferMask > buffer_mask_stack
stack of buffer masks
Definition context.h:766
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:730
size_t light_source_handle
counter to construct light source handles
Definition context.h:801
virtual void attach_stereo_buffer(bool attach=true)=0
attach or detach (attach=false) stereo buffer to the current frame buffer if not present
std::stack< shader_program_base * > shader_program_stack
stack of currently enabled shader programs
Definition context.h:775
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:1227
virtual void set_color(const rgb &clr, float opacity=1.0f)
set the current color
Definition context.h:1161
virtual shader_program & ref_default_shader_program(bool texture_support=false)=0
return a reference to a shader program used to render without illumination
int current_background
current back ground color index
Definition context.h:833
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 bool is_stereo_buffer_supported() const =0
return whether the graphics card supports stereo buffer mode
virtual void resize(unsigned int width, unsigned int height)=0
resize the context to the given dimensions
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:1147
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:769
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:1509
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:726
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
int nr_identations
current number of indentations
Definition context.h:847
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:732
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 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:753
bool support_compatibility_mode
whether to support view and lighting management of compatibility mode, defaults to true
Definition context.h:736
std::stack< attribute_array_binding_base * > attribute_array_binding_stack
stack of currently enabled attribute array binding
Definition context.h:789
std::stack< DepthTestState > depth_test_state_stack
stack of depth test states
Definition context.h:760
std::stack< CullingMode > cull_state_stack
stack of culling mode states
Definition context.h:762
bool phong_shading
whether to use phong shading
Definition context.h:831
virtual void push_pixel_coords()=0
use this to push new modelview and new projection matrices onto the transformation stacks such that x...
virtual void force_redraw()=0
the context will be redrawn right now. This method cannot be called inside the following methods of a...
bool current_material_is_textured
store flag to tell whether current material is textured
Definition context.h:817
rgba current_color
current color value
Definition context.h:744
std::stack< int > bg_stencil_stack
stack of background stencil values
Definition context.h:755
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:843
std::stack< vec4 > bg_accum_color_stack
stack of background accumulation colors
Definition context.h:757
cgv::media::illum::surface_material default_material
store a default material
Definition context.h:813
bool sRGB_framebuffer_enabled()
check whether sRGB framebuffer is enabled
Definition context.h:1151
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:845
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:803
std::stack< std::vector< window_transformation > > window_transformation_stack
keep stack of window transformations
Definition context.h:771
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:1503
int cursor_x
current cursor location for textual output
Definition context.h:835
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:738
bool sRGB_framebuffer
whether to use opengl option to support sRGB framebuffer
Definition context.h:746
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
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:1515
virtual dmat4 get_modelview_matrix() const =0
return homogeneous 4x4 viewing matrix, which transforms from world to eye space
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:1521
std::stack< frame_buffer_base * > frame_buffer_stack
stack of currently enabled frame buffers
Definition context.h:773
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:849
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:1527
bool auto_set_view_in_current_shader_program
whether to automatically set viewing matrixes in current shader program, defaults to true
Definition context.h:728
bool debug_render_passes
whether to debug render passes
Definition context.h:740
std::vector< void * > enabled_light_source_handles
keep track of enabled light source handles
Definition context.h:799
virtual void attach_accumulation_buffer(bool attach=true)=0
attach or detach (attach=false) accumulation buffer to the current frame buffer if not present
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
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 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:984
const cgv::media::illum::surface_material * current_material_ptr
store pointer to current material
Definition context.h:815
cgv::media::font::font_face_ptr current_font_face
store current font
Definition context.h:841
cgv::signal::callback_stream out_stream
use a callback stream to write text to the opengl context
Definition context.h:837
std::stack< vec4 > bg_color_stack
stack of background colors
Definition context.h:751
std::stack< BlendState > blend_state_stack
stack of blend states
Definition context.h:764
bool auto_set_gamma_in_current_shader_program
whether to automatically set gamma in current shader program, defaults to true
Definition context.h:734
base interface for framebuffer
Definition context.h:527
this class encapsulate frame buffers that live on the GPU and can be used as destination for the rend...
base interface for a render_buffer
Definition context.h:380
this class encapsulate render buffers that live on the GPU which must support frame buffer objects fo...
base interface for all render components
Definition context.h:357
void put_id(T &id) const
cast the refence to rendering api specific representation of component id to the specified type
Definition context.h:375
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
a shader code object holds a code fragment of a geometry vertex or fragment shader and can be added t...
base interface for shader programs
Definition context.h:411
a shader program combines several shader code fragments to a complete definition of the shading pipel...
base interface for a texture
Definition context.h:388
the texture class encapsulates all functionality independent of the rendering api.
Definition texture.h:15
class that extends obj_material with the management of textures
base interface for a vertex buffer
Definition context.h:508
a vertex buffer is an unstructured memory block on the GPU.
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
ComponentFormat
define standard formats, which should be used to avoid wrong assignment of component names
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:652
cgv::data::ref_ptr< context_config > context_config_ptr
type of ref counted pointer to context creation configuration
Definition context.h:618
void register_context_factory(context_creation_function_type fp)
registration context creation functions
Definition context.cxx:2616
BlendFunction
different blend functions
Definition context.h:206
std::ostream & operator<<(std::ostream &os, const type_descriptor &td)
operator to write textual description to stream
Definition context.cxx:30
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:544
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:2629
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:485
@ 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:496
@ 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:490
@ VBU_DYNAMIC_DRAW
Modified repeatedly and used many times; Modified by the application, and used as the source for GL d...
Definition context.h:498
@ 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:488
@ VBU_DYNAMIC_COPY
Modified repeatedly and used many times; Modified by reading data from the GL, and used as the source...
Definition context.h:502
@ 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:494
@ VBU_STATIC_DRAW
Modified once and used many times; Modified by the application, and used as the source for GL drawing...
Definition context.h:492
@ VBU_DYNAMIC_READ
Modified repeatedly and used many times; Modified by reading data from the GL, and used to return tha...
Definition context.h:500
@ 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:486
TextureCubeSides
the six different sides of a cube
Definition context.h:271
IlluminationMode
different illumination modes
Definition context.h:192
ShaderType
different shader types
Definition context.h:541
PrimitiveType
different primitive types
Definition context.h:281
VertexBufferType
Provides vertex buffer types to allow implicit binding.
Definition context.h:472
@ VBT_VERTICES
The buffer contains vertices and will be bound to GL_ARRAY_BUFFER.
Definition context.h:474
@ VBT_TEXTURE
The buffer contains texture data and will be bound to GL_TEXTURE_BUFFER.
Definition context.h:476
@ VBT_UNDEF
The buffer has no type.
Definition context.h:473
@ VBT_INDICES
The buffer contains indices and will be bound to GL_ELEMENT_ARRAY_BUFFER.
Definition context.h:475
@ VBT_ATOMIC_COUNTER
The buffer contains atomic counter and will be bound to GL_ATOMIC_COUNTER_BUFFER.
Definition context.h:480
@ VBT_STORAGE
The buffer contains arbitrary data and will be bound to GL_SHADER_STORAGE_BUFFER.
Definition context.h:479
@ VBT_UNIFORM
The buffer contains uniforms and will be bound to GL_UNIFORM_BUFFER.
Definition context.h:477
@ VBT_INDIRECT
The buffer contains indirect draw commands and will be bound to GL_DRAW_INDIRECT_BUFFER.
Definition context.h:481
@ VBT_FEEDBACK
The buffer is used for transform&feedback and will be bound to GL_TRANSFORM_FEEDBACK_BUFFER.
Definition context.h:478
BufferTypeBits
Bits for the selection of different buffer types.
Definition context.h:517
@ BTB_COLOR_BIT
color buffer type
Definition context.h:518
@ BTB_STENCIL_BIT
stencil buffer type
Definition context.h:521
@ BTB_ALL_BITS
all buffer types
Definition context.h:522
@ BTB_COLOR_AND_DEPTH_BITS
color and depth buffer types
Definition context.h:520
@ BTB_DEPTH_BIT
depth buffer type
Definition context.h:519
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
this header is dependency free
Definition print.h:11
cgv::math::fmat< double, 4, 4 > dmat4
declare type of 4x4 matrices
Definition fmat.h:471
cgv::math::mat< double > dmatn
declare type of matrices of varying dimensions
Definition mat.h:1383
Stores properties of a surface material.
Represents a blend state used to configure fragment blending.
Definition context.h:694
Represents a buffer mask used to mask depth and color buffer outputs.
Definition context.h:709
Represents a depth test state used to configure depth testing.
Definition context.h:686
status information of light sources
Definition context.h:792
information necessary for a rendering pass
Definition context.h:820
configuration object used to define context parameters that need to be set already at creation time
Definition context.h:572
bool multi_sample_buffer
default: false
Definition context.h:588
bool stencil_buffer
default: false
Definition context.h:584
int version_minor
default: -1 ... minor version of maximum supported OpenGL version
Definition context.h:601
int depth_bits
default: -1
Definition context.h:590
bool double_buffer
default: true
Definition context.h:578
int version_major
default: -1 ... major version of maximum supported OpenGL version
Definition context.h:599
bool debug
default: false in release and true in debug version
Definition context.h:605
bool forward_compatible
default: false
Definition context.h:603
std::vector< int > context_creation_attrib_list
provide integer vector to store context creation attribute list
Definition context.h:614
bool stereo_buffer
default: false
Definition context.h:582
bool alpha_buffer
default: false
Definition context.h:580
bool core_profile
default: true
Definition context.h:607
int stencil_bits
default: -1
Definition context.h:592
int nr_multi_samples
default: -1
Definition context.h:596
bool accumulation_buffer
default: false
Definition context.h:586
int accumulation_bits
default: -1
Definition context.h:594
bool depth_buffer
default: true
Definition context.h:576
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
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
configuration object used to define render view creation parameters including error handling configur...
Definition context.h:622
int window_width
default: 640
Definition context.h:628
bool dialog_on_error
default: true (only in case a gui_driver, which supports this, is loaded)
Definition context.h:638
int fullscreen_monitor
default: -1 ... no fullscreen
Definition context.h:626
int window_height
default: 480
Definition context.h:630
bool abort_on_error
default: false
Definition context.h:636
bool show_error_on_console
default: true
Definition context.h:640
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:659
dvec2 depth_range
range of depth values [min_depth, max_depth]
Definition context.h:663
ivec4 viewport
viewport parameters [x0,y0,width,height]
Definition context.h:661