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;
39 };
40
42 class CGV_API surface_renderer : public group_renderer
43 {
44 protected:
45 bool has_normals = false;
46 bool has_texcoords = false;
47 bool cull_per_primitive = true;
48 public:
50 void enable_attribute_array_manager(const context& ctx, attribute_array_manager& aam) override;
52 void disable_attribute_array_manager(const context& ctx, attribute_array_manager& aam) override;
54 bool enable(context& ctx) override;
56 bool disable(context& ctx) override;
58 template <typename T>
59 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); }
61 template <typename T>
62 void set_normal_array(const context& ctx, const std::vector<T>& normals) { has_normals = true; set_attribute_array(ctx, "normal", normals); }
64 template <typename T>
65 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); }
67 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);
69 template <typename T>
70 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); }
72 void remove_normal_array(const context& ctx);
74 template <typename T>
75 void set_texcoord(const context& ctx, const T& texcoord) { has_texcoords = true; ref_prog().set_attribute(ctx, get_prog_attribute_location(ctx, "texcoord"), texcoord); }
77 template <typename T>
78 void set_texcoord_array(const context& ctx, const std::vector<T>& texcoords) { has_texcoords = true; set_attribute_array(ctx, "texcoord", texcoords); }
80 template <typename T>
81 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); }
83 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);
85 template <typename T>
86 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); }
88 void remove_texcoord_array(const context& ctx);
89 };
91 {
92 bool self_reflect(cgv::reflect::reflection_handler& rh);
93 };
95 }
96}
97
98#include <cgv/config/lib_end.h>
A vector with zero based index.
Definition fvec.h:27
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:627
abstract renderer class that provides functionality for grouping primitives
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:152
IlluminationMode
different illumination modes
Definition context.h:145
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:56