3#include "group_renderer.h"
4#include <cgv_reflect_types/media/illum/textured_surface_material.h>
5#include <cgv/media/illum/textured_surface_material.h>
7#include "gl/lib_begin.h"
17 CM_COLOR = CM_COLOR_FRONT | CM_COLOR_BACK,
20 CM_OPACITY = CM_OPACITY_FRONT | CM_OPACITY_BACK,
21 CM_COLOR_AND_OPACITY = CM_COLOR | CM_OPACITY
24 class CGV_API surface_renderer;
38 float surface_opacity = 1.0f;
48 int max_nr_lights = 2;
55 bool has_normals =
false;
56 bool has_texcoords =
false;
57 bool cull_per_primitive =
true;
72 bool enable(
context& ctx)
override;
74 bool disable(
context& ctx)
override;
80 void set_normal_array(
const context& ctx,
const std::vector<T>& normals) { has_normals =
true; set_attribute_array(ctx,
"normal", normals); }
83 void set_normal_array(
const context& ctx,
const T* normals,
size_t nr_elements,
unsigned stride_in_bytes = 0) { has_normals =
true; set_attribute_array(ctx,
"normal", normals, nr_elements, stride_in_bytes); }
85 void set_normal_array(
const context& ctx,
type_descriptor element_type,
const vertex_buffer& vbo,
size_t offset_in_bytes,
size_t nr_elements,
unsigned stride_in_bytes = 0);
88 void set_normal_array(
const context& ctx,
const vertex_buffer& vbo,
size_t offset_in_bytes,
size_t nr_elements,
unsigned stride_in_bytes = 0) {
set_normal_array(ctx,
type_descriptor(
element_descriptor_traits<T>::get_type_descriptor(T()),
true), vbo, offset_in_bytes, nr_elements, stride_in_bytes); }
90 void remove_normal_array(
const context& ctx);
93 void set_texcoord(
const context& ctx,
const T& texcoord) { has_texcoords =
true; ref_prog().set_attribute(ctx, get_prog_attribute_location(ctx,
"texcoord"), texcoord); }
96 void set_texcoord_array(
const context& ctx,
const std::vector<T>& texcoords) { has_texcoords =
true; set_attribute_array(ctx,
"texcoord", texcoords); }
99 void set_texcoord_array(
const context& ctx,
const T* texcoords,
size_t nr_elements,
unsigned stride_in_bytes = 0) { has_texcoords =
true; set_attribute_array(ctx,
"texcoord", texcoords, nr_elements, stride_in_bytes); }
101 void set_texcoord_array(
const context& ctx,
type_descriptor element_type,
const vertex_buffer& vbo,
size_t offset_in_bytes,
size_t nr_elements,
unsigned stride_in_bytes = 0);
103 template <
typename T>
104 void set_texcoord_array(
const context& ctx,
const vertex_buffer& vbo,
size_t offset_in_bytes,
size_t nr_elements,
unsigned stride_in_bytes = 0) {
set_texcoord_array(ctx,
type_descriptor(
element_descriptor_traits<T>::get_type_descriptor(T()),
true), vbo, offset_in_bytes, nr_elements, stride_in_bytes); }
106 void remove_texcoord_array(
const context& ctx);
116#include <cgv/config/lib_end.h>
A vector with zero based index.
Stores properties of a surface material with support for texturing.
the self reflection handler is passed to the virtual self_reflect() method of cgv::base::base.
attribute array manager used to upload arrays to gpu
base class for all drawables, which is independent of the used rendering API.
abstract renderer class that provides functionality for grouping primitives
Stores preprocessor options used for conditionally compiling shader programs.
a shader program combines several shader code fragments to a complete definition of the shading pipel...
base classes for renderers that support surface rendering
void set_texcoord_array(const context &ctx, const T *texcoords, size_t nr_elements, unsigned stride_in_bytes=0)
templated method to set the texcoord attribute from an array of texcoords of type T
void set_texcoord_array(const context &ctx, const std::vector< T > &texcoords)
templated method to set the texcoord attribute array from a vector of texcoords of type T
void set_normal_array(const context &ctx, const std::vector< T > &normals)
templated method to set the normal attribute array from a vector of normals of type T,...
void set_texcoord(const context &ctx, const T &texcoord)
templated method to set the texcoord attribute without array
std::string get_default_prog_name() const override
return the default shader program name
void set_normal(const context &ctx, const cgv::math::fvec< T, 3 > &normal)
specify a single normal for all lines
render_style * create_render_style() const override
create and return the default render style
void set_texcoord_array(const context &ctx, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes=0)
template method to set the texcoord attribute from a vertex buffer object, the element type must be g...
void set_normal_array(const context &ctx, const vertex_buffer &vbo, size_t offset_in_bytes, size_t nr_elements, unsigned stride_in_bytes=0)
template method to set the normal attribute from a vertex buffer object, the element type must be giv...
void set_normal_array(const context &ctx, const T *normals, size_t nr_elements, unsigned stride_in_bytes=0)
templated method to set the normal attribute from an array of normals of type T, which should have 3 ...
a vertex buffer is an unstructured memory block on the GPU.
CullingMode
different culling modes
IlluminationMode
different illumination modes
surface_renderer & ref_surface_renderer(context &ctx, int ref_count_change)
reference to a singleton surface renderer that can be shared among drawables
ColorMapping
color and opacity can be mapped independently to surface material
this header is dependency free
this reflection traits implementation is used for external self_reflect implementations of instances ...
render style used for group information
base class for all render styles
cgv::media::illum::textured_surface_material material
material of surface
compact type description of data that can be sent to the context; convertible to int