5#ifndef _USE_MATH_DEFINES
6 #define _USE_MATH_DEFINES 1
8#include <cgv/defines/deprecated.h>
9#include <cgv/data/data_view.h>
10#include <cgv/media/font/font.h>
11#include <cgv/media/axis_aligned_box.h>
12#include <cgv/media/illum/phong_material.h>
13#include <cgv/media/illum/textured_surface_material.h>
14#include <cgv/media/illum/light_source.h>
15#include <cgv/signal/callback_stream.h>
16#include <cgv/math/vec.h>
17#include <cgv/math/inv.h>
27class CGV_API drawable;
28class CGV_API textured_material;
39 int max_render_buffer_size = -1;
60 unsigned nr_columns : 4;
61 bool is_row_major : 1;
67 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) {}
69 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) {}
71 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) {}
73 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) {}
75 operator int()
const {
return *
reinterpret_cast<const int*
>(
this); }
163 BF_ONE_MINUS_SRC_COLOR,
165 BF_ONE_MINUS_DST_COLOR,
167 BF_ONE_MINUS_SRC_ALPHA,
169 BF_ONE_MINUS_DST_ALPHA,
171 BF_ONE_MINUS_CONSTANT_COLOR,
173 BF_ONE_MINUS_CONSTANT_ALPHA,
174 BF_SRC_ALPHA_SATURATE,
176 BF_ONE_MINUS_SRC1_COLOR,
178 BF_ONE_MINUS_SRC1_ALPHA
185 TW_CLAMP_TO_EDGE = 2,
186 TW_CLAMP_TO_BORDER = 3,
188 TW_MIRROR_CLAMP_TO_EDGE = 5,
189 TW_MIRROR_CLAMP_TO_BORDER = 6,
190 TW_MIRRORED_REPEAT = 7,
195extern CGV_API std::string to_string(
TextureWrap wrap);
201 TF_NEAREST_MIPMAP_NEAREST = 2,
202 TF_LINEAR_MIPMAP_NEAREST = 3,
203 TF_NEAREST_MIPMAP_LINEAR = 4,
204 TF_LINEAR_MIPMAP_LINEAR = 5,
219 TT_MULTISAMPLE_2D_ARRAY,
240 PT_LINE_STRIP_ADJACENCY,
243 PT_TRIANGLES_ADJACENCY,
245 PT_TRIANGLE_STRIP_ADJACENCY,
295extern CGV_API std::string to_string(
TextureFilter filter_type);
301extern CGV_API std::string to_string(
TextureType tt);
306class CGV_API context;
313 void* internal_format;
322 virtual bool is_created()
const;
325 void put_id_void(
void* ptr)
const;
327 template <
typename T>
328 void put_id(T&
id)
const { put_id_void(&
id); }
335 unsigned nr_multi_samples = 0;
350 float border_color[4];
352 bool use_compare_function;
355 unsigned nr_multi_samples = 5;
356 bool fixed_sample_locations =
true;
369 bool auto_detect_uniforms;
370 bool auto_detect_vertex_attributes;
378 std::map<std::string, int> uniform_locations;
383 bool context_sets_color;
390 int geometry_shader_output_count;
394 void specify_standard_uniforms(
bool view,
bool material,
bool lights,
bool gamma);
395 void specify_standard_vertex_attribute_names(
context& ctx,
bool color =
true,
bool normal =
true,
bool texcoord =
true);
396 void specify_vertex_attribute_names(
context& ctx,
const std::string& position,
const std::string& color =
"",
const std::string& normal =
"",
const std::string& texcoord =
"");
398 bool does_use_view()
const {
return uses_view; }
399 bool does_use_material()
const {
return uses_material; }
400 bool does_use_lights()
const {
return uses_lights; }
401 bool does_use_gamma()
const {
return uses_gamma; }
404 void allow_context_to_set_color(
bool allow);
405 int get_position_index()
const {
return position_index; }
406 int get_color_index()
const {
return color_index; }
407 bool does_context_set_color()
const {
return context_sets_color; }
408 int get_normal_index()
const {
return normal_index; }
409 int get_texcoord_index()
const {
return texcoord_index; }
486 std::vector<int> enabled_color_attachments;
496enum ShaderType { ST_DETECT, ST_COMPUTE, ST_VERTEX, ST_TESS_CONTROL, ST_TESS_EVALUATION, ST_GEOMETRY, ST_FRAGMENT };
512 FB_BACK_LEFT = FB_BACK+FB_LEFT,
513 FB_BACK_RIGHT = FB_BACK+FB_RIGHT,
514 FB_FRONT_LEFT = FB_FRONT+FB_LEFT,
515 FB_FRONT_RIGHT = FB_FRONT+FB_RIGHT
519class CGV_API texture;
520class CGV_API render_buffer;
521class CGV_API frame_buffer;
522class CGV_API shader_code;
523class CGV_API shader_program;
526extern CGV_API
float black[4], white[4], gray[4], green[4], brown[4], dark_red[4];
527extern CGV_API
float cyan[4], yellow[4], red[4], blue[4];
605 std::string get_type_name()
const;
647 bool enabled =
false;
655 bool enabled =
false;
670 bool depth_flag =
true;
672 bool red_flag =
true;
674 bool green_flag =
true;
676 bool blue_flag =
true;
678 bool alpha_flag =
true;
738 void enable_shader_file_cache();
740 void disable_shader_file_cache();
742 bool is_shader_file_cache_enabled()
const;
751 vec3 eye_spot_direction;
752 int light_source_index;
759 std::map<void*, std::pair<cgv::media::illum::light_source, light_source_status> >
light_sources;
761 virtual void on_lights_changed();
763 static const unsigned nr_default_light_sources = 2;
767 void* default_light_source_handles[nr_default_light_sources];
809 virtual void process_text(
const std::string& text);
811 virtual void draw_text(
const std::string& text);
813 virtual void destruct_render_objects();
814 virtual void put_id(
void* handle,
void* ptr)
const = 0;
820 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;
821 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;
823 virtual bool texture_generate_mipmaps (
texture_base& tb,
unsigned int dim)
const = 0;
824 virtual bool texture_destruct (
texture_base& tb)
const = 0;
825 virtual bool texture_set_state (
const texture_base& tb)
const = 0;
826 virtual bool texture_enable (
texture_base& tb,
int tex_unit,
unsigned int nr_dims)
const = 0;
827 virtual bool texture_disable (
texture_base& tb,
int tex_unit,
unsigned int nr_dims)
const = 0;
828 virtual bool texture_bind_as_image (
texture_base& tb,
int tex_unit,
int level,
bool bind_array,
int layer,
AccessType access)
const = 0;
833 static void get_buffer_list(
frame_buffer_base& fbb,
bool& depth_buffer, std::vector<int>& buffers,
int offset = 0);
842 virtual int frame_buffer_get_max_nr_color_attachments()
const = 0;
843 virtual int frame_buffer_get_max_nr_draw_buffers()
const = 0;
858 virtual bool shader_program_get_active_uniforms(
shader_program_base& spb, std::vector<std::string>& names)
const = 0;
859 virtual int get_uniform_location(
const shader_program_base& spb,
const std::string& name)
const = 0;
862 virtual int get_attribute_location(
const shader_program_base& spb,
const std::string& name)
const = 0;
876 virtual bool vertex_buffer_create(
vertex_buffer_base& vbb,
const void* array_ptr,
size_t size_in_bytes)
const = 0;
877 virtual bool vertex_buffer_resize(
vertex_buffer_base& vbb,
const void* array_ptr,
size_t size_in_bytes)
const = 0;
878 virtual bool vertex_buffer_replace(
vertex_buffer_base& vbb,
size_t offset,
size_t size_in_bytes,
const void* array_ptr)
const = 0;
880 virtual bool vertex_buffer_copy_back(
vertex_buffer_base& vbb,
size_t offset,
size_t size_in_bytes,
void* array_ptr)
const = 0;
888 virtual void error(
const std::string& message,
const render_component* rc = 0)
const;
896 virtual void init_render_pass();
898 virtual void draw_textual_info();
900 virtual void perform_screen_shot();
902 virtual void finish_render_pass();
912 unsigned get_render_pass_recursion_depth()
const;
918 virtual void* get_render_pass_user_data()
const;
924 void render_pass_debug_output(
const render_info& ri,
const std::string& info =
"");
926 virtual void render_pass(
RenderPass render_pass = RP_MAIN,
931 void set_debug_render_passes(
bool _debug);
941 virtual bool recreate_context();
967 virtual void resize(
unsigned int width,
unsigned int height) = 0;
987 unsigned int x = 0,
unsigned int y = 0,
991 int w = -1,
int h = -1) = 0;
995 bool write_frame_buffer_to_image(
996 const std::string& file_name,
999 unsigned int x = 0,
unsigned int y = 0,
1000 int w = -1,
int h = -1,
1001 float depth_offset = 0.9f,
float depth_scale = 10.0f);
1004 void push_bg_color();
1006 void pop_bg_color();
1008 virtual void set_bg_color(
vec4 rgba);
1010 void set_bg_color(
float r,
float g,
float b,
float a);
1012 vec4 get_bg_color()
const;
1014 void put_bg_color(
float*
rgba)
const;
1016 void set_bg_alpha(
float a);
1018 float get_bg_alpha()
const;
1020 void set_bg_clr_idx(
unsigned int idx);
1022 unsigned int get_bg_clr_idx()
const;
1025 void push_bg_depth();
1027 void pop_bg_depth();
1029 virtual void set_bg_depth(
float d);
1031 float get_bg_depth()
const;
1034 void push_bg_stencil();
1036 void pop_bg_stencil();
1038 virtual void set_bg_stencil(
int s);
1040 int get_bg_stencil()
const;
1043 void push_bg_accum_color();
1045 void pop_bg_accum_color();
1047 virtual void set_bg_accum_color(
vec4 rgba);
1049 void set_bg_accum_color(
float r,
float g,
float b,
float a);
1051 vec4 get_bg_accum_color()
const;
1053 void put_bg_accum_color(
float*
rgba)
const;
1055 void set_bg_accum_alpha(
float a);
1057 float get_bg_accum_alpha()
const;
1060 virtual void clear_background(
bool color_flag,
bool depth_flag,
bool stencil_flag =
false,
bool accum_flag =
false) = 0;
1076 virtual float get_current_font_size()
const;
1083 DEPRECATED(
"deprecated and ignored.") virtual
void enable_phong_shading();
1084 DEPRECATED("deprecated and ignored.") virtual
void disable_phong_shading();
1085 DEPRECATED("deprecated, use set_material instead.") virtual
void enable_material(const
cgv::media::illum::phong_material& mat =
cgv::media::illum::default_material(),
MaterialSide ms = MS_FRONT_AND_BACK,
float alpha = 1);
1086 DEPRECATED("deprecated and ignored.") virtual
void disable_material(const
cgv::media::illum::phong_material& mat =
cgv::media::illum::default_material());
1087 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);
1090 void set_gamma(
float _gamma);
1092 virtual
void set_gamma3(const
vec3& _gamma3);
1094 float get_gamma()
const {
return (gamma3.
x() + gamma3.
y() + gamma3.
z()) / 3.0f; }
1098 virtual void enable_sRGB_framebuffer(
bool do_enable =
true);
1102 const rgba& get_color()
const;
1104 virtual void set_color(
const rgba& clr);
1120 void set_current_view(
shader_program& prog,
bool modelview_deps =
true,
bool projection_deps =
true)
const;
1134 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;
1136 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;
1141 DEPRECATED(
"deprecated, use add_light_source instead.") void* enable_light(const
cgv::media::illum::light_source& light) {
return add_light_source(light); }
1142 DEPRECATED(
"deprecated, use enable_light_source instead.") void disable_light(
void* handle) { disable_light_source(handle); }
1143 DEPRECATED(
"deprecated, use get_max_nr_enabled_light_sources instead.") unsigned get_max_nr_lights()
const {
return get_max_nr_enabled_light_sources(); }
1145 size_t get_nr_light_sources()
const;
1149 bool remove_light_source(
void* handle);
1153 const light_source_status& get_light_source_status(
void* handle)
const;
1157 void place_light_source(
void* handle);
1160 virtual unsigned get_max_nr_enabled_light_sources()
const;
1162 size_t get_nr_enabled_light_sources()
const;
1164 void* get_enabled_light_source_handle(
size_t i)
const;
1166 bool is_light_source_enabled(
void* handle);
1168 bool enable_light_source(
void* handle);
1170 bool disable_light_source(
void* handle);
1188 virtual std::ostream& output_stream();
1190 virtual void set_cursor(
int x,
int y);
1192 virtual void get_cursor(
int& x,
int& y)
const;
1195 virtual void put_cursor_coords(
const vecn& p,
int& x,
int& y)
const;
1201 virtual void set_cursor(
const vecn& pos,
1202 const std::string& text =
"",
TextAlignment ta = TA_BOTTOM_LEFT,
1203 int x_offset=0,
int y_offset=0);
1210 const float* vertices,
const float* normals,
const float* tex_coords,
1211 const int* vertex_indices,
const int* normal_indices,
const int* tex_coord_indices,
1212 int nr_faces,
int face_degree,
bool flip_normals =
false)
const = 0;
1215 const float* vertices,
const float* normals,
const float* tex_coords,
1216 const int* vertex_indices,
const int* normal_indices,
const int* tex_coord_indices,
1217 int nr_faces,
int face_degree,
bool is_fan,
bool flip_normals =
false)
const = 0;
1220 const float* vertices,
const float* normals,
const float* tex_coords,
1221 const int* vertex_indices,
const int* normal_indices,
const int* tex_coord_indices,
1222 int nr_faces,
int face_degree,
bool flip_normals =
false)
const = 0;
1225 const float* vertices,
const float* normals,
const float* tex_coords,
1226 const int* vertex_indices,
const int* normal_indices,
const int* tex_coord_indices,
1227 int nr_faces,
int face_degree,
bool is_fan,
bool flip_normals =
false)
const = 0;
1230 void tesselate_unit_square(
bool flip_normals =
false,
bool edges =
false);
1232 void tesselate_unit_cube(
bool flip_normals =
false,
bool edges =
false);
1236 void tesselate_unit_prism(
bool flip_normals =
false,
bool edges =
false);
1238 void tesselate_unit_disk(
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1240 void tesselate_unit_cone(
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1242 void tesselate_unit_cylinder(
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1244 void tesselate_unit_sphere(
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1246 void tesselate_unit_tetrahedron(
bool flip_normals =
false,
bool edges =
false);
1248 void tesselate_unit_octahedron(
bool flip_normals =
false,
bool edges =
false);
1250 void tesselate_unit_dodecahedron(
bool flip_normals =
false,
bool edges =
false);
1252 void tesselate_unit_icosahedron(
bool flip_normals =
false,
bool edges =
false);
1254 void tesselate_unit_torus(
float minor_radius = 0.2f,
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1263 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);
1265 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);
1278 void push_depth_test_state();
1280 void pop_depth_test_state();
1288 virtual void enable_depth_test();
1290 virtual void disable_depth_test();
1294 void push_cull_state();
1296 void pop_cull_state();
1300 virtual void set_cull_state(
CullingMode culling_mode);
1304 void push_blend_state();
1306 void pop_blend_state();
1310 virtual void set_blend_state(
BlendState state);
1316 void set_blend_func_front_to_back();
1318 void set_blend_func_back_to_front();
1320 virtual void enable_blending();
1322 virtual void disable_blending();
1326 void push_buffer_mask();
1328 void pop_buffer_mask();
1332 virtual void set_buffer_mask(
BufferMask mask);
1334 bool get_depth_mask()
const;
1336 virtual void set_depth_mask(
bool flag);
1338 bvec4 get_color_mask()
const;
1340 virtual void set_color_mask(
bvec4 flags);
1346 DEPRECATED(
"deprecated: use get_modelview_matrix() instead.")
dmatn get_V()
const {
return dmatn(4,4,&get_modelview_matrix()(0,0)); }
1347 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))); }
1348 DEPRECATED(
"deprecated: use push_modelview_matrix() instead.") void push_V() { push_modelview_matrix(); }
1349 DEPRECATED(
"deprecated: use pop_modelview_matrix() instead.") void pop_V() { pop_modelview_matrix(); }
1350 DEPRECATED(
"deprecated: use get_projection_matrix() instead.") dmatn get_P()
const {
return dmatn(4, 4, &get_projection_matrix()(0, 0)); }
1351 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))); }
1352 DEPRECATED(
"deprecated: use push_projection_matrix() instead.") void push_P() { push_projection_matrix(); }
1353 DEPRECATED(
"deprecated: use pop_projection_matrix() instead.") void pop_P() { pop_projection_matrix(); }
1354 DEPRECATED(
"deprecated: use get_device_matrix() instead.") dmatn get_D()
const {
return dmatn(4, 4, &get_window_matrix()(0, 0)); }
1355 DEPRECATED(
"deprecated: use get_modelview_projection_device_matrix() instead.") dmatn get_DPV()
const {
return dmatn(4, 4, &get_modelview_projection_window_matrix()(0, 0)); }
1365 virtual void set_modelview_matrix(
const dmat4& MV);
1367 virtual void mul_modelview_matrix(
const dmat4& MV);
1375 void push_modelview_matrix();
1377 void pop_modelview_matrix();
1381 virtual void set_projection_matrix(
const dmat4& P);
1383 virtual void mul_projection_matrix(
const dmat4& P);
1385 void push_projection_matrix();
1387 void pop_projection_matrix();
1389 void push_window_transformation_array();
1393 virtual void pop_window_transformation_array();
1403 bool ensure_window_transformation_index(
int& array_index);
1416 virtual void set_viewport(
const ivec4& viewport,
int array_index = -1);
1420 virtual void set_depth_range(
const dvec2& depth_range =
dvec2(0, 1),
int array_index = -1);
1422 const std::vector<window_transformation>& get_window_transformation_array()
const;
1429 dmat4 get_window_matrix(
unsigned array_index = 0)
const;
1431 dmat4 get_modelview_projection_window_matrix(
unsigned array_index = 0)
const;
1438 return get_model_point(x_window, y_window, get_window_z(x_window, y_window));
1444 return get_model_point(x_window, y_window, z_window, get_modelview_projection_window_matrix());
1450 return get_model_point(x_window, y_window, get_window_z(x_window, y_window), modelview_projection_window_matrix);
1456 return get_model_point(
dvec3(x_window+0.5, y_window+0.5, z_window), modelview_projection_window_matrix);
1462 return get_model_point(p_window, get_modelview_projection_window_matrix());
1467 static vec3 get_model_point(
const dvec3& p_window,
const dmat4& modelview_projection_window_matrix);
1469 DEPRECATED(
"use get_window_matrix() instead.")
dmat4 get_device_matrix()
const {
return get_window_matrix(); }
1471 DEPRECATED(
"use get_modelview_projection_window_matrix() instead.")
dmat4 get_modelview_projection_device_matrix() const;
1473 DEPRECATED("use get_window_z()")
double get_z_D(
int x_D,
int y_D)
const {
return get_window_z(x_D, y_D); }
1475 DEPRECATED(
"use get_model_point()")
vec3 get_point_W(
int x_D,
int y_D)
const {
return get_model_point(x_D, y_D); }
1477 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); }
1479 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); }
1481 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); }
1483 DEPRECATED(
"use get_model_point()")
vec3 get_point_W(const
vec3& p_D)
const {
return get_model_point(p_D); }
1485 DEPRECATED(
"use get_model_point()")
vec3 get_point_W(const
vec3& p_D, const
dmat4& MPD)
const {
return get_model_point(p_D, MPD); }
1494 unsigned int w = 800,
unsigned int h = 600,
1495 const std::string& title =
"",
bool show =
false);
1497typedef context* (*context_creation_function_type)(
RenderAPI api,
unsigned int w,
unsigned int h,
const std::string& title,
bool show);
1510#include <cgv/config/lib_end.h>
base class for all classes that can be registered with support for dynamic properties (see also secti...
The const_data_view has the functionality of the data_view but uses a const pointer and therefore doe...
the data view gives access to a data array of one, two, three or four dimensions.
reference counted pointer, which can work together with types that are derived from ref_counted,...
matrix of fixed size dimensions
A matrix type (full column major storage) The matrix can be loaded directly into OpenGL without need ...
the self reflection handler is passed to the virtual self_reflect() method of cgv::base::base.
base class for attribute_array_bindings
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.
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 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...
vec3 gamma3
per color channel gamma value passed to shader programs that have gamma uniform
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
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 ...
vec3 get_model_point(int x_window, int y_window) const
compute model space 3D point from the given opengl pixel location (window location)
std::stack< render_info > render_pass_stack
store the current render pass
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
bool enable_vsync
whether vsync should be enabled
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
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
size_t light_source_handle
counter to construct light source handles
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
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
virtual void set_color(const rgb &clr, float opacity=1.0f)
set the current color
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
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
vec3 get_model_point(const vec3 &p_window) const
compute model space 3D point from the given window space point
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
bool use_shader_file_cache
whether to use the caching facilities of shader_program and shader_code to store loaded shader file c...
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
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
virtual void recover_from_external_frame_buffer_change(void *cgv_fbo_storage)=0
restore cgv frame buffer to the state before the external change
static vec3 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...
virtual RenderAPI get_render_api() const =0
return the used rendering API
std::stack< float > bg_depth_stack
stack of background depth values
bool support_compatibility_mode
whether to support view and lighting management of compatibility mode, defaults to true
std::stack< attribute_array_binding_base * > attribute_array_binding_stack
stack of currently enabled attribute array binding
std::stack< DepthTestState > depth_test_state_stack
stack of depth test states
std::stack< CullingMode > cull_state_stack
stack of culling mode states
bool phong_shading
whether to use phong shading
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
rgba current_color
current color value
std::stack< int > bg_stencil_stack
stack of background stencil values
virtual dmat4 get_projection_matrix() const =0
return homogeneous 4x4 projection matrix, which transforms from eye to clip space
std::stack< vec4 > bg_accum_color_stack
stack of background accumulation colors
vec3 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)
cgv::media::illum::surface_material default_material
store a default material
bool sRGB_framebuffer_enabled()
check whether sRGB framebuffer is enabled
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
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
std::stack< std::vector< window_transformation > > window_transformation_stack
keep stack of window transformations
int cursor_x
current cursor location for textual output
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,...
bool sRGB_framebuffer
whether to use opengl option to support sRGB framebuffer
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 dmat4 get_modelview_matrix() const =0
return homogeneous 4x4 viewing matrix, which transforms from world to eye space
std::stack< frame_buffer_base * > frame_buffer_stack
stack of currently enabled frame buffers
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
virtual void enable_material(textured_material &mat)=0
enable a material with textures
bool auto_set_view_in_current_shader_program
whether to automatically set viewing matrixes in current shader program, defaults to true
bool debug_render_passes
whether to debug render passes
std::vector< void * > enabled_light_source_handles
keep track of enabled light source handles
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
const cgv::media::illum::surface_material * current_material_ptr
store pointer to current material
cgv::media::font::font_face_ptr current_font_face
store current font
cgv::signal::callback_stream out_stream
use a callback stream to write text to the opengl context
std::stack< vec4 > bg_color_stack
stack of background colors
std::stack< BlendState > blend_state_stack
stack of blend states
bool auto_set_gamma_in_current_shader_program
whether to automatically set gamma in current shader program, defaults to true
base interface for framebuffer
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
this class encapsulate render buffers that live on the GPU which must support frame buffer objects fo...
base interface for all render components
void put_id(T &id) const
cast the refence to rendering api specific representation of component id to the specified type
const context * ctx_ptr
keep pointer to my context
std::string last_error
a string that contains the last error
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
a shader program combines several shader code fragments to a complete definition of the shading pipel...
base interface for a texture
the texture class encapsulates all functionality independent of the rendering api.
class that extends obj_material with the management of textures
base interface for a vertex buffer
VertexBufferType type
buffer type defaults to VBT_VERTICES
VertexBufferUsage usage
usage defaults to VBU_STATIC_DRAW
a vertex buffer is an unstructured memory block on the GPU.
defines a symmetric view with the following quantities:
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
CullingMode
different culling modes
cgv::data::ref_ptr< render_config > render_config_ptr
type of ref counted pointer to render configuration
cgv::data::ref_ptr< context_config > context_config_ptr
type of ref counted pointer to context creation configuration
void register_context_factory(context_creation_function_type fp)
registration context creation functions
BlendFunction
different blend functions
TextAlignment
different text alignments
@ TA_TOP
center of top edge of text bounds
@ TA_BOTTOM_RIGHT
bottom right corner of text bounds
@ TA_BOTTOM
center of bottom edge of text bounds
@ TA_RIGHT
center of right edge of text bounds
@ TA_BOTTOM_LEFT
bottom left corner of text bounds
@ TA_TOP_LEFT
top left corner of text bounds
@ TA_LEFT
center of left edge of text bounds
@ TA_TOP_RIGHT
top right corner of text bounds
AccessType
different access types
std::string get_render_pass_name(RenderPass rp)
convert render pass type into string
TextureFilter
different texture filter
render_config_ptr get_render_config()
return a pointer to the current shader configuration
TextureWrap
different texture wrap modes
FrameBufferType
different frame buffer types which can be combined together with or
MaterialSide
different sides of a material
TextureSampling
different sampling strategies for rendering to textures that steer the computation of the tex_coord i...
@ TS_VERTEX
tex_coord ranges from [0,0,0] to [1,1,1]
@ 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,...
ElementType
different compond types for data elements
context * create_context(RenderAPI api, unsigned int w, unsigned int h, const std::string &title, bool show)
construct a context of the given size.
VertexBufferUsage
Provides vertex buffer usage hints as defined in OpenGL.
@ VBU_STATIC_COPY
Modified once and used many times; Modified by reading data from the GL, and used as the source for G...
@ VBU_STREAM_COPY
Modified once and used at most a few times; Modified by reading data from the GL, and used as the sou...
@ VBU_DYNAMIC_DRAW
Modified repeatedly and used many times; Modified by the application, and used as the source for GL d...
@ VBU_STREAM_READ
Modified once and used at most a few times; Modified by reading data from the GL, and used to return ...
@ VBU_DYNAMIC_COPY
Modified repeatedly and used many times; Modified by reading data from the GL, and used as the source...
@ VBU_STATIC_READ
Modified once and used many times; Modified by reading data from the GL, and used to return that data...
@ VBU_STATIC_DRAW
Modified once and used many times; Modified by the application, and used as the source for GL drawing...
@ VBU_DYNAMIC_READ
Modified repeatedly and used many times; Modified by reading data from the GL, and used to return tha...
@ VBU_STREAM_DRAW
Modified once and used at most a few times; Modified by the application, and used as the source for G...
TextureCubeSides
the six different sides of a cube
IlluminationMode
different illumination modes
ShaderType
different shader types
PrimitiveType
different primitive types
VertexBufferType
Provides vertex buffer types to allow implicit binding.
@ VBT_VERTICES
The buffer contains vertices and will be bound to GL_ARRAY_BUFFER.
@ VBT_TEXTURE
The buffer contains texture data and will be bound to GL_TEXTURE_BUFFER.
@ VBT_UNDEF
The buffer has no type.
@ VBT_INDICES
The buffer contains indices and will be bound to GL_ELEMENT_ARRAY_BUFFER.
@ VBT_ATOMIC_COUNTER
The buffer contains atomic counter and will be bound to GL_ATOMIC_COUNTER_BUFFER.
@ VBT_STORAGE
The buffer contains arbitrary data and will be bound to GL_SHADER_STORAGE_BUFFER.
@ VBT_UNIFORM
The buffer contains uniforms and will be bound to GL_UNIFORM_BUFFER.
@ VBT_INDIRECT
The buffer contains indirect draw commands and will be bound to GL_DRAW_INDIRECT_BUFFER.
@ VBT_FEEDBACK
The buffer is used for transform&feedback and will be bound to GL_TRANSFORM_FEEDBACK_BUFFER.
BufferTypeBits
Bits for the selection of different buffer types.
@ BTB_COLOR_BIT
color buffer type
@ BTB_STENCIL_BIT
stencil buffer type
@ BTB_ALL_BITS
all buffer types
@ BTB_COLOR_AND_DEPTH_BITS
color and depth buffer types
@ BTB_DEPTH_BIT
depth buffer type
RenderPass
Enumeration of different render passes, which can be queried from the context and used to specify a n...
@ RP_SHADOW_VOLUME
construction of shadow map
@ RP_STEREO
rendering of second eye
@ RP_USER_DEFINED
user defined renderpass
@ RP_OPAQUE_SURFACES
opaque surface rendering using z-Buffer
@ RP_MAIN
the main rendering pass triggered by the redraw event
@ RP_TRANSPARENT_SURFACES
transparent surface rendering using depth peeling
@ RP_PICK
in picking pass a small rectangle around the mouse is rendered
@ RP_SHADOW_MAP
construction of shadow map
TextureType
different texture types
RenderPassFlags
available flags that can be queried from the context and set for a new render pass
@ RPF_CLEAR_ACCUM
whether to clear the accumulation buffer
@ RPF_SET_MODELVIEW
whether to set default modelview matrix
@ RPF_DRAWABLES_FINISH_FRAME
whether to call finish frame method of drawables
@ RPF_SET_MATERIAL
whether to define default material
@ RPF_SET_CLEAR_DEPTH
whether to set the clear color
@ RPF_ALL
all flags set, defines default render pass
@ RPF_SET_LIGHTS
whether to define default lights
@ RPF_CLEAR_COLOR
whether to clear the color buffer
@ RPF_DRAWABLES_DRAW
whether to call draw and finish_draw methods of drawables
@ RPF_CLEAR_STENCIL
whether to clear the depth buffer
@ RPF_SET_MODELVIEW_PROJECTION
whether to set default modelview and projection matrix
@ RPF_SET_CLEAR_STENCIL
whether to set the clear color
@ RPF_ENABLE_MATERIAL
whether to enable material
@ RPF_DRAWABLES_INIT_FRAME
whether to call the init_frame method of the drawables
@ RPF_DRAWABLES_AFTER_FINISH
whether to call after finish method of drawables
@ RPF_DEFAULT
all flags set, defines default render pass
@ RPF_NONE
no frame initialization is performed
@ RPF_HANDLE_SCREEN_SHOT
whether to perform a screen shot if this was scheduled
@ RPF_CLEAR_DEPTH
whether to clear the depth buffer
@ RPF_SET_STATE_FLAGS
whether to set depth buffer and culling flags
@ RPF_CLEAR_ALL
whether to clear all buffers
@ RPF_DRAW_TEXTUAL_INFO
whether to draw textual information
@ RPF_SET_PROJECTION
whether to set default projection matrix
@ RPF_SET_LIGHTING
whether to define and enable default lighting
@ RPF_SET_CLEAR_ACCUM
whether to set the accumulation buffer clear color
@ RPF_SET_CLEAR_COLOR
whether to set the clear color
@ RPF_SET_LIGHTS_ON
whether to turn on default lights
CompareFunction
different comparison functions used for depth testing or texture comparisons
GPUVendorID
IDs for GPU vendors.
TypeId
ids for the different types and type constructs
@ TI_UINT8
signed integer stored in 64 bits
cgv::math::fmat< double, 4, 4 > dmat4
declare type of 4x4 matrices
cgv::math::mat< double > dmatn
declare type of matrices of varying dimensions
Represents a blend state used to configure fragment blending.
Represents a buffer mask used to mask depth and color buffer outputs.
Represents a depth test state used to configure depth testing.
status information of light sources
information necessary for a rendering pass
configuration object used to define context parameters that need to be set already at creation time
bool multi_sample_buffer
default: false
bool stencil_buffer
default: false
int version_minor
default: -1 ... minor version of maximum supported OpenGL version
int depth_bits
default: -1
bool double_buffer
default: true
int version_major
default: -1 ... major version of maximum supported OpenGL version
bool debug
default: false in release and true in debug version
bool forward_compatible
default: false
std::vector< int > context_creation_attrib_list
provide integer vector to store context creation attribute list
bool stereo_buffer
default: false
bool alpha_buffer
default: false
bool core_profile
default: true
int stencil_bits
default: -1
int nr_multi_samples
default: -1
bool accumulation_buffer
default: false
int accumulation_bits
default: -1
bool depth_buffer
default: true
int max_compute_shared_memory_size
the maximum number that can be provided to the max_vertices output layout qualifier in a geometry sha...
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...
int max_compute_work_group_invocations
total available storage size in bytes for all shared variables in a compute shader
int max_geometry_shader_output_vertex_count
the maximum supported size for renderbuffers in any dimension
ivec3 max_compute_work_group_size
the maximum number of work groups that may be dispatched to a compute shader; dimension index 0,...
configuration object used to define render view creation parameters including error handling configur...
int window_width
default: 640
bool dialog_on_error
default: true (only in case a gui_driver, which supports this, is loaded)
int fullscreen_monitor
default: -1 ... no fullscreen
int window_height
default: 480
bool abort_on_error
default: false
bool show_error_on_console
default: true
compact type description of data that can be sent to the context; convertible to int
type_descriptor(const type_descriptor &td, bool _is_array)
construct descriptor for an array
type_descriptor(cgv::type::info::TypeId _coordinate_type, bool _normalize=false)
construct descriptor for values
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
type_descriptor(cgv::type::info::TypeId _coordinate_type, unsigned _nr_entries, bool _normalize=false)
construct descriptor for vectors
type_descriptor(int td=0)
construct from int