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;
51 unsigned nr_columns : 4;
52 bool is_row_major : 1;
58 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) {}
60 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) {}
62 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) {}
64 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) {}
66 operator int()
const {
return *
reinterpret_cast<const int*
>(
this); }
154 BF_ONE_MINUS_SRC_COLOR,
156 BF_ONE_MINUS_DST_COLOR,
158 BF_ONE_MINUS_SRC_ALPHA,
160 BF_ONE_MINUS_DST_ALPHA,
162 BF_ONE_MINUS_CONSTANT_COLOR,
164 BF_ONE_MINUS_CONSTANT_ALPHA,
165 BF_SRC_ALPHA_SATURATE,
167 BF_ONE_MINUS_SRC1_COLOR,
169 BF_ONE_MINUS_SRC1_ALPHA
176 TW_CLAMP_TO_EDGE = 2,
177 TW_CLAMP_TO_BORDER = 3,
179 TW_MIRROR_CLAMP_TO_EDGE = 5,
180 TW_MIRROR_CLAMP_TO_BORDER = 6,
181 TW_MIRRORED_REPEAT = 7,
186extern CGV_API std::string to_string(
TextureWrap wrap);
192 TF_NEAREST_MIPMAP_NEAREST = 2,
193 TF_LINEAR_MIPMAP_NEAREST = 3,
194 TF_NEAREST_MIPMAP_LINEAR = 4,
195 TF_LINEAR_MIPMAP_LINEAR = 5,
210 TT_MULTISAMPLE_2D_ARRAY,
231 PT_LINE_STRIP_ADJACENCY,
234 PT_TRIANGLES_ADJACENCY,
236 PT_TRIANGLE_STRIP_ADJACENCY,
286extern CGV_API std::string to_string(
TextureFilter filter_type);
292extern CGV_API std::string to_string(
TextureType tt);
297class CGV_API context;
304 void* internal_format;
313 virtual bool is_created()
const;
316 void put_id_void(
void* ptr)
const;
318 template <
typename T>
319 void put_id(T&
id)
const { put_id_void(&
id); }
326 unsigned nr_multi_samples = 0;
341 float border_color[4];
343 bool use_compare_function;
346 unsigned nr_multi_samples = 5;
347 bool fixed_sample_locations =
true;
360 bool auto_detect_uniforms;
361 bool auto_detect_vertex_attributes;
372 bool context_sets_color;
379 int geometry_shader_output_count;
383 void specify_standard_uniforms(
bool view,
bool material,
bool lights,
bool gamma);
384 void specify_standard_vertex_attribute_names(
context& ctx,
bool color =
true,
bool normal =
true,
bool texcoord =
true);
385 void specify_vertex_attribute_names(
context& ctx,
const std::string& position,
const std::string& color =
"",
const std::string& normal =
"",
const std::string& texcoord =
"");
387 bool does_use_view()
const {
return uses_view; }
388 bool does_use_material()
const {
return uses_material; }
389 bool does_use_lights()
const {
return uses_lights; }
390 bool does_use_gamma()
const {
return uses_gamma; }
393 void allow_context_to_set_color(
bool allow);
394 int get_position_index()
const {
return position_index; }
395 int get_color_index()
const {
return color_index; }
396 bool does_context_set_color()
const {
return context_sets_color; }
397 int get_normal_index()
const {
return normal_index; }
398 int get_texcoord_index()
const {
return texcoord_index; }
475 std::vector<int> enabled_color_attachments;
485enum ShaderType { ST_DETECT, ST_COMPUTE, ST_VERTEX, ST_TESS_CONTROL, ST_TESS_EVALUATION, ST_GEOMETRY, ST_FRAGMENT };
501 FB_BACK_LEFT = FB_BACK+FB_LEFT,
502 FB_BACK_RIGHT = FB_BACK+FB_RIGHT,
503 FB_FRONT_LEFT = FB_FRONT+FB_LEFT,
504 FB_FRONT_RIGHT = FB_FRONT+FB_RIGHT
509 MAX_NR_GEOMETRY_SHADER_OUTPUT_VERTICES
513class CGV_API texture;
514class CGV_API render_buffer;
515class CGV_API frame_buffer;
516class CGV_API shader_code;
517class CGV_API shader_program;
520extern CGV_API
float black[4], white[4], gray[4], green[4], brown[4], dark_red[4];
521extern CGV_API
float cyan[4], yellow[4], red[4], blue[4];
599 std::string get_type_name()
const;
639 bool enabled =
false;
647 bool enabled =
false;
662 bool depth_flag =
true;
664 bool red_flag =
true;
666 bool green_flag =
true;
668 bool blue_flag =
true;
670 bool alpha_flag =
true;
730 void enable_shader_file_cache();
732 void disable_shader_file_cache();
734 bool is_shader_file_cache_enabled()
const;
743 vec3 eye_spot_direction;
744 int light_source_index;
751 std::map<void*, std::pair<cgv::media::illum::light_source, light_source_status> >
light_sources;
753 virtual void on_lights_changed();
755 static const unsigned nr_default_light_sources = 2;
759 void* default_light_source_handles[nr_default_light_sources];
800 virtual void process_text(
const std::string& text);
802 virtual void draw_text(
const std::string& text);
805 virtual void destruct_render_objects();
806 virtual void put_id(
void* handle,
void* ptr)
const = 0;
812 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;
813 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;
815 virtual bool texture_generate_mipmaps (
texture_base& tb,
unsigned int dim)
const = 0;
816 virtual bool texture_destruct (
texture_base& tb)
const = 0;
817 virtual bool texture_set_state (
const texture_base& tb)
const = 0;
818 virtual bool texture_enable (
texture_base& tb,
int tex_unit,
unsigned int nr_dims)
const = 0;
819 virtual bool texture_disable (
texture_base& tb,
int tex_unit,
unsigned int nr_dims)
const = 0;
820 virtual bool texture_bind_as_image (
texture_base& tb,
int tex_unit,
int level,
bool bind_array,
int layer,
AccessType access)
const = 0;
825 static void get_buffer_list(
frame_buffer_base& fbb,
bool& depth_buffer, std::vector<int>& buffers,
int offset = 0);
834 virtual int frame_buffer_get_max_nr_color_attachments()
const = 0;
835 virtual int frame_buffer_get_max_nr_draw_buffers()
const = 0;
849 virtual int get_uniform_location(
const shader_program_base& spb,
const std::string& name)
const = 0;
852 virtual int get_attribute_location(
const shader_program_base& spb,
const std::string& name)
const = 0;
866 virtual bool vertex_buffer_create(
vertex_buffer_base& vbb,
const void* array_ptr,
size_t size_in_bytes)
const = 0;
867 virtual bool vertex_buffer_resize(
vertex_buffer_base& vbb,
const void* array_ptr,
size_t size_in_bytes)
const = 0;
868 virtual bool vertex_buffer_replace(
vertex_buffer_base& vbb,
size_t offset,
size_t size_in_bytes,
const void* array_ptr)
const = 0;
870 virtual bool vertex_buffer_copy_back(
vertex_buffer_base& vbb,
size_t offset,
size_t size_in_bytes,
void* array_ptr)
const = 0;
878 virtual void error(
const std::string& message,
const render_component* rc = 0)
const;
885 virtual void init_render_pass();
887 virtual void draw_textual_info();
889 virtual void perform_screen_shot();
891 virtual void finish_render_pass();
901 unsigned get_render_pass_recursion_depth()
const;
907 virtual void* get_render_pass_user_data()
const;
913 virtual void render_pass(
RenderPass render_pass = RP_MAIN,
915 void* user_data = 0);
917 void set_debug_render_passes(
bool _debug);
927 virtual bool recreate_context();
953 virtual void resize(
unsigned int width,
unsigned int height) = 0;
973 unsigned int x = 0,
unsigned int y = 0,
977 int w = -1,
int h = -1) = 0;
981 bool write_frame_buffer_to_image(
982 const std::string& file_name,
985 unsigned int x = 0,
unsigned int y = 0,
986 int w = -1,
int h = -1,
987 float depth_offset = 0.9f,
float depth_scale = 10.0f);
990 void push_bg_color();
994 virtual void set_bg_color(
vec4 rgba);
996 void set_bg_color(
float r,
float g,
float b,
float a);
998 vec4 get_bg_color()
const;
1000 void put_bg_color(
float*
rgba)
const;
1002 void set_bg_alpha(
float a);
1004 float get_bg_alpha()
const;
1006 void set_bg_clr_idx(
unsigned int idx);
1008 unsigned int get_bg_clr_idx()
const;
1011 void push_bg_depth();
1013 void pop_bg_depth();
1015 virtual void set_bg_depth(
float d);
1017 float get_bg_depth()
const;
1020 void push_bg_stencil();
1022 void pop_bg_stencil();
1024 virtual void set_bg_stencil(
int s);
1026 int get_bg_stencil()
const;
1029 void push_bg_accum_color();
1031 void pop_bg_accum_color();
1033 virtual void set_bg_accum_color(
vec4 rgba);
1035 void set_bg_accum_color(
float r,
float g,
float b,
float a);
1037 vec4 get_bg_accum_color()
const;
1039 void put_bg_accum_color(
float*
rgba)
const;
1041 void set_bg_accum_alpha(
float a);
1043 float get_bg_accum_alpha()
const;
1046 virtual void clear_background(
bool color_flag,
bool depth_flag,
bool stencil_flag =
false,
bool accum_flag =
false) = 0;
1062 virtual float get_current_font_size()
const;
1069 DEPRECATED(
"deprecated and ignored.") virtual
void enable_phong_shading();
1070 DEPRECATED("deprecated and ignored.") virtual
void disable_phong_shading();
1071 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);
1072 DEPRECATED("deprecated and ignored.") virtual
void disable_material(const
cgv::media::illum::phong_material& mat =
cgv::media::illum::default_material());
1073 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);
1076 void set_gamma(
float _gamma);
1078 virtual
void set_gamma3(const
vec3& _gamma3);
1080 float get_gamma()
const {
return (gamma3.
x() + gamma3.
y() + gamma3.
z()) / 3.0f; }
1084 virtual void enable_sRGB_framebuffer(
bool do_enable =
true);
1088 const rgba& get_color()
const;
1090 virtual void set_color(
const rgba& clr);
1106 void set_current_view(
shader_program& prog,
bool modelview_deps =
true,
bool projection_deps =
true)
const;
1120 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;
1122 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;
1127 DEPRECATED(
"deprecated, use add_light_source instead.") void* enable_light(const
cgv::media::illum::light_source& light) {
return add_light_source(light); }
1128 DEPRECATED(
"deprecated, use enable_light_source instead.") void disable_light(
void* handle) { disable_light_source(handle); }
1129 DEPRECATED(
"deprecated, use get_max_nr_enabled_light_sources instead.") unsigned get_max_nr_lights()
const {
return get_max_nr_enabled_light_sources(); }
1131 size_t get_nr_light_sources()
const;
1135 bool remove_light_source(
void* handle);
1139 const light_source_status& get_light_source_status(
void* handle)
const;
1143 void place_light_source(
void* handle);
1146 virtual unsigned get_max_nr_enabled_light_sources()
const;
1148 size_t get_nr_enabled_light_sources()
const;
1150 void* get_enabled_light_source_handle(
size_t i)
const;
1152 bool is_light_source_enabled(
void* handle);
1154 bool enable_light_source(
void* handle);
1156 bool disable_light_source(
void* handle);
1174 virtual std::ostream& output_stream();
1176 virtual void set_cursor(
int x,
int y);
1178 virtual void get_cursor(
int& x,
int& y)
const;
1181 virtual void put_cursor_coords(
const vecn& p,
int& x,
int& y)
const;
1187 virtual void set_cursor(
const vecn& pos,
1188 const std::string& text =
"",
TextAlignment ta = TA_BOTTOM_LEFT,
1189 int x_offset=0,
int y_offset=0);
1196 const float* vertices,
const float* normals,
const float* tex_coords,
1197 const int* vertex_indices,
const int* normal_indices,
const int* tex_coord_indices,
1198 int nr_faces,
int face_degree,
bool flip_normals =
false)
const = 0;
1201 const float* vertices,
const float* normals,
const float* tex_coords,
1202 const int* vertex_indices,
const int* normal_indices,
const int* tex_coord_indices,
1203 int nr_faces,
int face_degree,
bool is_fan,
bool flip_normals =
false)
const = 0;
1206 const float* vertices,
const float* normals,
const float* tex_coords,
1207 const int* vertex_indices,
const int* normal_indices,
const int* tex_coord_indices,
1208 int nr_faces,
int face_degree,
bool flip_normals =
false)
const = 0;
1211 const float* vertices,
const float* normals,
const float* tex_coords,
1212 const int* vertex_indices,
const int* normal_indices,
const int* tex_coord_indices,
1213 int nr_faces,
int face_degree,
bool is_fan,
bool flip_normals =
false)
const = 0;
1216 void tesselate_unit_square(
bool flip_normals =
false,
bool edges =
false);
1218 void tesselate_unit_cube(
bool flip_normals =
false,
bool edges =
false);
1222 void tesselate_unit_prism(
bool flip_normals =
false,
bool edges =
false);
1224 void tesselate_unit_disk(
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1226 void tesselate_unit_cone(
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1228 void tesselate_unit_cylinder(
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1230 void tesselate_unit_sphere(
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1232 void tesselate_unit_tetrahedron(
bool flip_normals =
false,
bool edges =
false);
1234 void tesselate_unit_octahedron(
bool flip_normals =
false,
bool edges =
false);
1236 void tesselate_unit_dodecahedron(
bool flip_normals =
false,
bool edges =
false);
1238 void tesselate_unit_icosahedron(
bool flip_normals =
false,
bool edges =
false);
1240 void tesselate_unit_torus(
float minor_radius = 0.2f,
int resolution = 25,
bool flip_normals =
false,
bool edges =
false);
1249 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);
1251 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);
1264 void push_depth_test_state();
1266 void pop_depth_test_state();
1274 virtual void enable_depth_test();
1276 virtual void disable_depth_test();
1280 void push_cull_state();
1282 void pop_cull_state();
1286 virtual void set_cull_state(
CullingMode culling_mode);
1290 void push_blend_state();
1292 void pop_blend_state();
1296 virtual void set_blend_state(
BlendState state);
1302 void set_blend_func_front_to_back();
1304 void set_blend_func_back_to_front();
1306 virtual void enable_blending();
1308 virtual void disable_blending();
1312 void push_buffer_mask();
1314 void pop_buffer_mask();
1318 virtual void set_buffer_mask(
BufferMask mask);
1320 bool get_depth_mask()
const;
1322 virtual void set_depth_mask(
bool flag);
1324 bvec4 get_color_mask()
const;
1326 virtual void set_color_mask(
bvec4 flags);
1332 DEPRECATED(
"deprecated: use get_modelview_matrix() instead.")
dmatn get_V()
const {
return dmatn(4,4,&get_modelview_matrix()(0,0)); }
1333 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))); }
1334 DEPRECATED(
"deprecated: use push_modelview_matrix() instead.") void push_V() { push_modelview_matrix(); }
1335 DEPRECATED(
"deprecated: use pop_modelview_matrix() instead.") void pop_V() { pop_modelview_matrix(); }
1336 DEPRECATED(
"deprecated: use get_projection_matrix() instead.") dmatn get_P()
const {
return dmatn(4, 4, &get_projection_matrix()(0, 0)); }
1337 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))); }
1338 DEPRECATED(
"deprecated: use push_projection_matrix() instead.") void push_P() { push_projection_matrix(); }
1339 DEPRECATED(
"deprecated: use pop_projection_matrix() instead.") void pop_P() { pop_projection_matrix(); }
1340 DEPRECATED(
"deprecated: use get_device_matrix() instead.") dmatn get_D()
const {
return dmatn(4, 4, &get_window_matrix()(0, 0)); }
1341 DEPRECATED(
"deprecated: use get_modelview_projection_device_matrix() instead.") dmatn get_DPV()
const {
return dmatn(4, 4, &get_modelview_projection_window_matrix()(0, 0)); }
1351 virtual void set_modelview_matrix(
const dmat4& MV);
1353 virtual void mul_modelview_matrix(
const dmat4& MV);
1361 void push_modelview_matrix();
1363 void pop_modelview_matrix();
1367 virtual void set_projection_matrix(
const dmat4& P);
1369 virtual void mul_projection_matrix(
const dmat4& P);
1371 void push_projection_matrix();
1373 void pop_projection_matrix();
1375 void push_window_transformation_array();
1379 virtual void pop_window_transformation_array();
1389 bool ensure_window_transformation_index(
int& array_index);
1402 virtual void set_viewport(
const ivec4& viewport,
int array_index = -1);
1406 virtual void set_depth_range(
const dvec2& depth_range =
dvec2(0, 1),
int array_index = -1);
1408 const std::vector<window_transformation>& get_window_transformation_array()
const;
1415 dmat4 get_window_matrix(
unsigned array_index = 0)
const;
1417 dmat4 get_modelview_projection_window_matrix(
unsigned array_index = 0)
const;
1424 return get_model_point(x_window, y_window, get_window_z(x_window, y_window));
1430 return get_model_point(x_window, y_window, z_window, get_modelview_projection_window_matrix());
1436 return get_model_point(x_window, y_window, get_window_z(x_window, y_window), modelview_projection_window_matrix);
1442 return get_model_point(
dvec3(x_window+0.5, y_window+0.5, z_window), modelview_projection_window_matrix);
1448 return get_model_point(p_window, get_modelview_projection_window_matrix());
1453 static vec3 get_model_point(
const dvec3& p_window,
const dmat4& modelview_projection_window_matrix);
1455 DEPRECATED(
"use get_window_matrix() instead.")
dmat4 get_device_matrix()
const {
return get_window_matrix(); }
1457 DEPRECATED(
"use get_modelview_projection_window_matrix() instead.")
dmat4 get_modelview_projection_device_matrix() const;
1459 DEPRECATED("use get_window_z()")
double get_z_D(
int x_D,
int y_D)
const {
return get_window_z(x_D, y_D); }
1461 DEPRECATED(
"use get_model_point()")
vec3 get_point_W(
int x_D,
int y_D)
const {
return get_model_point(x_D, y_D); }
1463 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); }
1465 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); }
1467 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); }
1469 DEPRECATED(
"use get_model_point()")
vec3 get_point_W(const
vec3& p_D)
const {
return get_model_point(p_D); }
1471 DEPRECATED(
"use get_model_point()")
vec3 get_point_W(const
vec3& p_D, const
dmat4& MPD)
const {
return get_model_point(p_D, MPD); }
1480 unsigned int w = 800,
unsigned int h = 600,
1481 const std::string& title =
"",
bool show =
false);
1483typedef context* (*context_creation_function_type)(
RenderAPI api,
unsigned int w,
unsigned int h,
const std::string& title,
bool show);
1496#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
ContextIntegerConstant
integer constants that can be queried from context
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
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