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_geometry_shader_output_vertex_count = -1;
59 unsigned nr_columns : 4;
60 bool is_row_major : 1;
66 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) {}
68 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) {}
70 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) {}
72 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) {}
74 operator int()
const {
return *
reinterpret_cast<const int*
>(
this); }
162 BF_ONE_MINUS_SRC_COLOR,
164 BF_ONE_MINUS_DST_COLOR,
166 BF_ONE_MINUS_SRC_ALPHA,
168 BF_ONE_MINUS_DST_ALPHA,
170 BF_ONE_MINUS_CONSTANT_COLOR,
172 BF_ONE_MINUS_CONSTANT_ALPHA,
173 BF_SRC_ALPHA_SATURATE,
175 BF_ONE_MINUS_SRC1_COLOR,
177 BF_ONE_MINUS_SRC1_ALPHA
184 TW_CLAMP_TO_EDGE = 2,
185 TW_CLAMP_TO_BORDER = 3,
187 TW_MIRROR_CLAMP_TO_EDGE = 5,
188 TW_MIRROR_CLAMP_TO_BORDER = 6,
189 TW_MIRRORED_REPEAT = 7,
194extern CGV_API std::string to_string(
TextureWrap wrap);
200 TF_NEAREST_MIPMAP_NEAREST = 2,
201 TF_LINEAR_MIPMAP_NEAREST = 3,
202 TF_NEAREST_MIPMAP_LINEAR = 4,
203 TF_LINEAR_MIPMAP_LINEAR = 5,
218 TT_MULTISAMPLE_2D_ARRAY,
239 PT_LINE_STRIP_ADJACENCY,
242 PT_TRIANGLES_ADJACENCY,
244 PT_TRIANGLE_STRIP_ADJACENCY,
294extern CGV_API std::string to_string(
TextureFilter filter_type);
300extern CGV_API std::string to_string(
TextureType tt);
305class CGV_API context;
312 void* internal_format;
321 virtual bool is_created()
const;
324 void put_id_void(
void* ptr)
const;
326 template <
typename T>
327 void put_id(T&
id)
const { put_id_void(&
id); }
334 unsigned nr_multi_samples = 0;
349 float border_color[4];
351 bool use_compare_function;
354 unsigned nr_multi_samples = 5;
355 bool fixed_sample_locations =
true;
368 bool auto_detect_uniforms;
369 bool auto_detect_vertex_attributes;
377 std::map<std::string, int> uniform_locations;
382 bool context_sets_color;
389 int geometry_shader_output_count;
393 void specify_standard_uniforms(
bool view,
bool material,
bool lights,
bool gamma);
394 void specify_standard_vertex_attribute_names(
context& ctx,
bool color =
true,
bool normal =
true,
bool texcoord =
true);
395 void specify_vertex_attribute_names(
context& ctx,
const std::string& position,
const std::string& color =
"",
const std::string& normal =
"",
const std::string& texcoord =
"");
397 bool does_use_view()
const {
return uses_view; }
398 bool does_use_material()
const {
return uses_material; }
399 bool does_use_lights()
const {
return uses_lights; }
400 bool does_use_gamma()
const {
return uses_gamma; }
403 void allow_context_to_set_color(
bool allow);
404 int get_position_index()
const {
return position_index; }
405 int get_color_index()
const {
return color_index; }
406 bool does_context_set_color()
const {
return context_sets_color; }
407 int get_normal_index()
const {
return normal_index; }
408 int get_texcoord_index()
const {
return texcoord_index; }
485 std::vector<int> enabled_color_attachments;
495enum ShaderType { ST_DETECT, ST_COMPUTE, ST_VERTEX, ST_TESS_CONTROL, ST_TESS_EVALUATION, ST_GEOMETRY, ST_FRAGMENT };
511 FB_BACK_LEFT = FB_BACK+FB_LEFT,
512 FB_BACK_RIGHT = FB_BACK+FB_RIGHT,
513 FB_FRONT_LEFT = FB_FRONT+FB_LEFT,
514 FB_FRONT_RIGHT = FB_FRONT+FB_RIGHT
518class CGV_API texture;
519class CGV_API render_buffer;
520class CGV_API frame_buffer;
521class CGV_API shader_code;
522class CGV_API shader_program;
525extern CGV_API
float black[4], white[4], gray[4], green[4], brown[4], dark_red[4];
526extern CGV_API
float cyan[4], yellow[4], red[4], blue[4];
604 std::string get_type_name()
const;
646 bool enabled =
false;
654 bool enabled =
false;
669 bool depth_flag =
true;
671 bool red_flag =
true;
673 bool green_flag =
true;
675 bool blue_flag =
true;
677 bool alpha_flag =
true;
737 void enable_shader_file_cache();
739 void disable_shader_file_cache();
741 bool is_shader_file_cache_enabled()
const;
750 vec3 eye_spot_direction;
751 int light_source_index;
758 std::map<void*, std::pair<cgv::media::illum::light_source, light_source_status> >
light_sources;
760 virtual void on_lights_changed();
762 static const unsigned nr_default_light_sources = 2;
766 void* default_light_source_handles[nr_default_light_sources];
807 virtual void process_text(
const std::string& text);
809 virtual void draw_text(
const std::string& text);
811 virtual void destruct_render_objects();
812 virtual void put_id(
void* handle,
void* ptr)
const = 0;
818 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;
819 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;
821 virtual bool texture_generate_mipmaps (
texture_base& tb,
unsigned int dim)
const = 0;
822 virtual bool texture_destruct (
texture_base& tb)
const = 0;
823 virtual bool texture_set_state (
const texture_base& tb)
const = 0;
824 virtual bool texture_enable (
texture_base& tb,
int tex_unit,
unsigned int nr_dims)
const = 0;
825 virtual bool texture_disable (
texture_base& tb,
int tex_unit,
unsigned int nr_dims)
const = 0;
826 virtual bool texture_bind_as_image (
texture_base& tb,
int tex_unit,
int level,
bool bind_array,
int layer,
AccessType access)
const = 0;
831 static void get_buffer_list(
frame_buffer_base& fbb,
bool& depth_buffer, std::vector<int>& buffers,
int offset = 0);
840 virtual int frame_buffer_get_max_nr_color_attachments()
const = 0;
841 virtual int frame_buffer_get_max_nr_draw_buffers()
const = 0;
856 virtual bool shader_program_get_active_uniforms(
shader_program_base& spb, std::vector<std::string>& names)
const = 0;
857 virtual int get_uniform_location(
const shader_program_base& spb,
const std::string& name)
const = 0;
860 virtual int get_attribute_location(
const shader_program_base& spb,
const std::string& name)
const = 0;
874 virtual bool vertex_buffer_create(
vertex_buffer_base& vbb,
const void* array_ptr,
size_t size_in_bytes)
const = 0;
875 virtual bool vertex_buffer_resize(
vertex_buffer_base& vbb,
const void* array_ptr,
size_t size_in_bytes)
const = 0;
876 virtual bool vertex_buffer_replace(
vertex_buffer_base& vbb,
size_t offset,
size_t size_in_bytes,
const void* array_ptr)
const = 0;
878 virtual bool vertex_buffer_copy_back(
vertex_buffer_base& vbb,
size_t offset,
size_t size_in_bytes,
void* array_ptr)
const = 0;
886 virtual void error(
const std::string& message,
const render_component* rc = 0)
const;
894 virtual void init_render_pass();
896 virtual void draw_textual_info();
898 virtual void perform_screen_shot();
900 virtual void finish_render_pass();
910 unsigned get_render_pass_recursion_depth()
const;
916 virtual void* get_render_pass_user_data()
const;
922 virtual void render_pass(
RenderPass render_pass = RP_MAIN,
924 void* user_data = 0);
926 void set_debug_render_passes(
bool _debug);
936 virtual bool recreate_context();
962 virtual void resize(
unsigned int width,
unsigned int height) = 0;
982 unsigned int x = 0,
unsigned int y = 0,
986 int w = -1,
int h = -1) = 0;
990 bool write_frame_buffer_to_image(
991 const std::string& file_name,
994 unsigned int x = 0,
unsigned int y = 0,
995 int w = -1,
int h = -1,
996 float depth_offset = 0.9f,
float depth_scale = 10.0f);
999 void push_bg_color();
1001 void pop_bg_color();
1003 virtual void set_bg_color(
vec4 rgba);
1005 void set_bg_color(
float r,
float g,
float b,
float a);
1007 vec4 get_bg_color()
const;
1009 void put_bg_color(
float*
rgba)
const;
1011 void set_bg_alpha(
float a);
1013 float get_bg_alpha()
const;
1015 void set_bg_clr_idx(
unsigned int idx);
1017 unsigned int get_bg_clr_idx()
const;
1020 void push_bg_depth();
1022 void pop_bg_depth();
1024 virtual void set_bg_depth(
float d);
1026 float get_bg_depth()
const;
1029 void push_bg_stencil();
1031 void pop_bg_stencil();
1033 virtual void set_bg_stencil(
int s);
1035 int get_bg_stencil()
const;
1038 void push_bg_accum_color();
1040 void pop_bg_accum_color();
1042 virtual void set_bg_accum_color(
vec4 rgba);
1044 void set_bg_accum_color(
float r,
float g,
float b,
float a);
1046 vec4 get_bg_accum_color()
const;
1048 void put_bg_accum_color(
float*
rgba)
const;
1050 void set_bg_accum_alpha(
float a);
1052 float get_bg_accum_alpha()
const;
1055 virtual void clear_background(
bool color_flag,
bool depth_flag,
bool stencil_flag =
false,
bool accum_flag =
false) = 0;
1071 virtual float get_current_font_size()
const;
1078 DEPRECATED(
"deprecated and ignored.") virtual
void enable_phong_shading();
1079 DEPRECATED("deprecated and ignored.") virtual
void disable_phong_shading();
1080 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);
1081 DEPRECATED("deprecated and ignored.") virtual
void disable_material(const
cgv::media::illum::phong_material& mat =
cgv::media::illum::default_material());
1082 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);
1085 void set_gamma(
float _gamma);
1087 virtual
void set_gamma3(const
vec3& _gamma3);
1089 float get_gamma()
const {
return (gamma3.
x() + gamma3.
y() + gamma3.
z()) / 3.0f; }
1093 virtual void enable_sRGB_framebuffer(
bool do_enable =
true);
1097 const rgba& get_color()
const;
1099 virtual void set_color(
const rgba& clr);
1115 void set_current_view(
shader_program& prog,
bool modelview_deps =
true,
bool projection_deps =
true)
const;
1129 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;
1131 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;
1136 DEPRECATED(
"deprecated, use add_light_source instead.") void* enable_light(const
cgv::media::illum::light_source& light) {
return add_light_source(light); }
1137 DEPRECATED(
"deprecated, use enable_light_source instead.") void disable_light(
void* handle) { disable_light_source(handle); }
1138 DEPRECATED(
"deprecated, use get_max_nr_enabled_light_sources instead.") unsigned get_max_nr_lights()
const {
return get_max_nr_enabled_light_sources(); }
1140 size_t get_nr_light_sources()
const;
1144 bool remove_light_source(
void* handle);
1148 const light_source_status& get_light_source_status(
void* handle)
const;
1152 void place_light_source(
void* handle);
1155 virtual unsigned get_max_nr_enabled_light_sources()
const;
1157 size_t get_nr_enabled_light_sources()
const;
1159 void* get_enabled_light_source_handle(
size_t i)
const;
1161 bool is_light_source_enabled(
void* handle);
1163 bool enable_light_source(
void* handle);
1165 bool disable_light_source(
void* handle);
1183 virtual std::ostream& output_stream();
1185 virtual void set_cursor(
int x,
int y);
1187 virtual void get_cursor(
int& x,
int& y)
const;
1190 virtual void put_cursor_coords(
const vecn& p,
int& x,
int& y)
const;
1196 virtual void set_cursor(
const vecn& pos,
1197 const std::string& text =
"",
TextAlignment ta = TA_BOTTOM_LEFT,
1198 int x_offset=0,
int y_offset=0);
1205 const float* vertices,
const float* normals,
const float* tex_coords,
1206 const int* vertex_indices,
const int* normal_indices,
const int* tex_coord_indices,
1207 int nr_faces,
int face_degree,
bool flip_normals =
false)
const = 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 is_fan,
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 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 is_fan,
bool flip_normals =
false)
const = 0;
1225 void tesselate_unit_square(
bool flip_normals =
false,
bool edges =
false);
1227 void tesselate_unit_cube(
bool flip_normals =
false,
bool edges =
false);
1231 void tesselate_unit_prism(
bool flip_normals =
false,
bool edges =
false);
1233 void tesselate_unit_disk(
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1235 void tesselate_unit_cone(
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1237 void tesselate_unit_cylinder(
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1239 void tesselate_unit_sphere(
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1241 void tesselate_unit_tetrahedron(
bool flip_normals =
false,
bool edges =
false);
1243 void tesselate_unit_octahedron(
bool flip_normals =
false,
bool edges =
false);
1245 void tesselate_unit_dodecahedron(
bool flip_normals =
false,
bool edges =
false);
1247 void tesselate_unit_icosahedron(
bool flip_normals =
false,
bool edges =
false);
1249 void tesselate_unit_torus(
float minor_radius = 0.2f,
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1258 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);
1260 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);
1273 void push_depth_test_state();
1275 void pop_depth_test_state();
1283 virtual void enable_depth_test();
1285 virtual void disable_depth_test();
1289 void push_cull_state();
1291 void pop_cull_state();
1295 virtual void set_cull_state(
CullingMode culling_mode);
1299 void push_blend_state();
1301 void pop_blend_state();
1305 virtual void set_blend_state(
BlendState state);
1311 void set_blend_func_front_to_back();
1313 void set_blend_func_back_to_front();
1315 virtual void enable_blending();
1317 virtual void disable_blending();
1321 void push_buffer_mask();
1323 void pop_buffer_mask();
1327 virtual void set_buffer_mask(
BufferMask mask);
1329 bool get_depth_mask()
const;
1331 virtual void set_depth_mask(
bool flag);
1333 bvec4 get_color_mask()
const;
1335 virtual void set_color_mask(
bvec4 flags);
1341 DEPRECATED(
"deprecated: use get_modelview_matrix() instead.")
dmatn get_V()
const {
return dmatn(4,4,&get_modelview_matrix()(0,0)); }
1342 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))); }
1343 DEPRECATED(
"deprecated: use push_modelview_matrix() instead.") void push_V() { push_modelview_matrix(); }
1344 DEPRECATED(
"deprecated: use pop_modelview_matrix() instead.") void pop_V() { pop_modelview_matrix(); }
1345 DEPRECATED(
"deprecated: use get_projection_matrix() instead.") dmatn get_P()
const {
return dmatn(4, 4, &get_projection_matrix()(0, 0)); }
1346 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))); }
1347 DEPRECATED(
"deprecated: use push_projection_matrix() instead.") void push_P() { push_projection_matrix(); }
1348 DEPRECATED(
"deprecated: use pop_projection_matrix() instead.") void pop_P() { pop_projection_matrix(); }
1349 DEPRECATED(
"deprecated: use get_device_matrix() instead.") dmatn get_D()
const {
return dmatn(4, 4, &get_window_matrix()(0, 0)); }
1350 DEPRECATED(
"deprecated: use get_modelview_projection_device_matrix() instead.") dmatn get_DPV()
const {
return dmatn(4, 4, &get_modelview_projection_window_matrix()(0, 0)); }
1360 virtual void set_modelview_matrix(
const dmat4& MV);
1362 virtual void mul_modelview_matrix(
const dmat4& MV);
1370 void push_modelview_matrix();
1372 void pop_modelview_matrix();
1376 virtual void set_projection_matrix(
const dmat4& P);
1378 virtual void mul_projection_matrix(
const dmat4& P);
1380 void push_projection_matrix();
1382 void pop_projection_matrix();
1384 void push_window_transformation_array();
1388 virtual void pop_window_transformation_array();
1398 bool ensure_window_transformation_index(
int& array_index);
1411 virtual void set_viewport(
const ivec4& viewport,
int array_index = -1);
1415 virtual void set_depth_range(
const dvec2& depth_range =
dvec2(0, 1),
int array_index = -1);
1417 const std::vector<window_transformation>& get_window_transformation_array()
const;
1424 dmat4 get_window_matrix(
unsigned array_index = 0)
const;
1426 dmat4 get_modelview_projection_window_matrix(
unsigned array_index = 0)
const;
1433 return get_model_point(x_window, y_window, get_window_z(x_window, y_window));
1439 return get_model_point(x_window, y_window, z_window, get_modelview_projection_window_matrix());
1445 return get_model_point(x_window, y_window, get_window_z(x_window, y_window), modelview_projection_window_matrix);
1451 return get_model_point(
dvec3(x_window+0.5, y_window+0.5, z_window), modelview_projection_window_matrix);
1457 return get_model_point(p_window, get_modelview_projection_window_matrix());
1462 static vec3 get_model_point(
const dvec3& p_window,
const dmat4& modelview_projection_window_matrix);
1464 DEPRECATED(
"use get_window_matrix() instead.")
dmat4 get_device_matrix()
const {
return get_window_matrix(); }
1466 DEPRECATED(
"use get_modelview_projection_window_matrix() instead.")
dmat4 get_modelview_projection_device_matrix() const;
1468 DEPRECATED("use get_window_z()")
double get_z_D(
int x_D,
int y_D)
const {
return get_window_z(x_D, y_D); }
1470 DEPRECATED(
"use get_model_point()")
vec3 get_point_W(
int x_D,
int y_D)
const {
return get_model_point(x_D, y_D); }
1472 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); }
1474 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); }
1476 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); }
1478 DEPRECATED(
"use get_model_point()")
vec3 get_point_W(const
vec3& p_D)
const {
return get_model_point(p_D); }
1480 DEPRECATED(
"use get_model_point()")
vec3 get_point_W(const
vec3& p_D, const
dmat4& MPD)
const {
return get_model_point(p_D, MPD); }
1489 unsigned int w = 800,
unsigned int h = 600,
1490 const std::string& title =
"",
bool show =
false);
1492typedef context* (*context_creation_function_type)(
RenderAPI api,
unsigned int w,
unsigned int h,
const std::string& title,
bool show);
1505#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
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