cgv
Loading...
Searching...
No Matches
surface_renderer.h
1#pragma once
2
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>
6
7#include "gl/lib_begin.h"
8
9namespace cgv { // @<
10 namespace render { // @<
11
14 CM_NONE = 0,
15 CM_COLOR_FRONT = 1,
16 CM_COLOR_BACK = 2,
17 CM_COLOR = CM_COLOR_FRONT | CM_COLOR_BACK,
18 CM_OPACITY_FRONT = 4,
19 CM_OPACITY_BACK = 8,
20 CM_OPACITY = CM_OPACITY_FRONT | CM_OPACITY_BACK,
21 CM_COLOR_AND_OPACITY = CM_COLOR | CM_OPACITY
22 };
23
26 {
30 float surface_opacity = 1.0f;
32 CullingMode culling_mode = CM_OFF;
34 IlluminationMode illumination_mode = IM_ONE_SIDED;
36 ColorMapping map_color_to_material = CM_COLOR;
40 int max_nr_lights = 2;
41 };
42
44 class CGV_API surface_renderer : public group_renderer
45 {
46 protected:
47 bool has_normals = false;
48 bool has_texcoords = false;
49 bool cull_per_primitive = true;
51 void update_shader_program_options(shader_compile_options& options) const override;
53 bool build_shader_program(context& ctx, shader_program& prog, const shader_compile_options& options) const override;
54 public:
56 void enable_attribute_array_manager(const context& ctx, attribute_array_manager& aam) override;
58 void disable_attribute_array_manager(const context& ctx, attribute_array_manager& aam) override;
60 bool enable(context& ctx) override;
62 bool disable(context& ctx) override;
64 template <typename T>
65 void set_normal(const context& ctx, const cgv::math::fvec<T, 3>& normal) { has_normals = true; ref_prog().set_attribute(ctx, get_prog_attribute_location(ctx, "normal"), normal); }
67 template <typename T>
68 void set_normal_array(const context& ctx, const std::vector<T>& normals) { has_normals = true; set_attribute_array(ctx, "normal", normals); }
70 template <typename T>
71 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); }
73 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);
75 template <typename T>
76 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); }
78 void remove_normal_array(const context& ctx);
80 template <typename T>
81 void set_texcoord(const context& ctx, const T& texcoord) { has_texcoords = true; ref_prog().set_attribute(ctx, get_prog_attribute_location(ctx, "texcoord"), texcoord); }
83 template <typename T>
84 void set_texcoord_array(const context& ctx, const std::vector<T>& texcoords) { has_texcoords = true; set_attribute_array(ctx, "texcoord", texcoords); }
86 template <typename T>
87 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); }
89 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);
91 template <typename T>
92 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); }
94 void remove_texcoord_array(const context& ctx);
95 };
97 {
98 bool self_reflect(cgv::reflect::reflection_handler& rh);
99 };
101 }
102}
103
104#include <cgv/config/lib_end.h>
A vector with zero based index.
Definition fvec.h:29
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.
Definition context.h:672
abstract renderer class that provides functionality for grouping primitives
Stores preprocessor options used for conditionally compiling shader programs.
Definition shader_code.h:73
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
void set_normal(const context &ctx, const cgv::math::fvec< T, 3 > &normal)
specify a single normal for all lines
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
Definition context.h:197
IlluminationMode
different illumination modes
Definition context.h:190
ColorMapping
color and opacity can be mapped independently to surface material
the cgv namespace
Definition print.h:11
this reflection traits implementation is used for external self_reflect implementations of instances ...
render style used for group information
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
Definition context.h:59