MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ setup_rendering()

void MayaFlux::Buffers::GeometryBuffer::setup_rendering ( const RenderConfig config)

Setup rendering with RenderProcessor.

Parameters
configRendering configuration

Definition at line 58 of file GeometryBuffer.cpp.

59{
60 RenderConfig resolved_config = config;
61
62 if (resolved_config.topology == Portal::Graphics::PrimitiveTopology::POINT_LIST
63 && m_geometry_node->get_primitive_topology()
65 resolved_config.topology = m_geometry_node->get_primitive_topology();
66 }
67
68 switch (resolved_config.topology) {
70 if (config.vertex_shader.empty())
71 resolved_config.vertex_shader = "point.vert.spv";
72 if (config.fragment_shader.empty())
73 resolved_config.fragment_shader = "point.frag.spv";
74 break;
75
78
79 if (config.fragment_shader.empty())
80 resolved_config.fragment_shader = "line.frag.spv";
81
82#ifndef MAYAFLUX_PLATFORM_MACOS
83 if (config.vertex_shader.empty())
84 resolved_config.vertex_shader = "line.vert.spv";
85 if (config.geometry_shader.empty())
86 resolved_config.geometry_shader = "line.geom.spv";
87#else
88 if (config.vertex_shader.empty())
89 resolved_config.vertex_shader = "line_fallback.vert.spv";
90
92#endif
93
94 break;
95
98 if (config.vertex_shader.empty())
99 resolved_config.vertex_shader = "triangle.vert.spv";
100 if (config.fragment_shader.empty())
101 resolved_config.fragment_shader = "triangle.frag.spv";
102 break;
103
104 default:
105 if (config.vertex_shader.empty())
106 resolved_config.vertex_shader = "point.vert.spv";
107 if (config.fragment_shader.empty())
108 resolved_config.fragment_shader = "point.frag.spv";
109 }
110
111 if (!m_render_processor) {
112 m_render_processor = std::make_shared<RenderProcessor>(ShaderConfig { resolved_config.vertex_shader });
113 } else {
114 m_render_processor->set_shader(resolved_config.vertex_shader);
115 }
116
117 m_render_processor->set_fragment_shader(resolved_config.fragment_shader);
118 if (!resolved_config.geometry_shader.empty()) {
119 m_render_processor->set_geometry_shader(resolved_config.geometry_shader);
120 }
121 m_render_processor->set_target_window(config.target_window, std::dynamic_pointer_cast<VKBuffer>(shared_from_this()));
122 m_render_processor->set_primitive_topology(resolved_config.topology);
123 m_render_processor->set_polygon_mode(config.polygon_mode);
124 m_render_processor->set_cull_mode(config.cull_mode);
125
126 get_processing_chain()->add_final_processor(m_render_processor, shared_from_this());
127
128 set_default_render_config(resolved_config);
129}
std::shared_ptr< Nodes::GpuSync::GeometryWriterNode > m_geometry_node
std::shared_ptr< RenderProcessor > m_render_processor
std::shared_ptr< Buffers::BufferProcessingChain > get_processing_chain() override
Access the buffer's processing chain.
Definition VKBuffer.cpp:314
Portal::Graphics::RenderConfig RenderConfig
Definition VKBuffer.hpp:69
void set_default_render_config(const RenderConfig &config)
Called by derived classes to set their context-specific defaults.
Definition VKBuffer.hpp:597

References MayaFlux::Portal::Graphics::RenderConfig::cull_mode, MayaFlux::Portal::Graphics::RenderConfig::fragment_shader, MayaFlux::Portal::Graphics::RenderConfig::geometry_shader, MayaFlux::Buffers::VKBuffer::get_processing_chain(), MayaFlux::Portal::Graphics::LINE_LIST, MayaFlux::Portal::Graphics::LINE_STRIP, m_geometry_node, m_render_processor, MayaFlux::Portal::Graphics::POINT_LIST, MayaFlux::Portal::Graphics::RenderConfig::polygon_mode, MayaFlux::Buffers::VKBuffer::set_default_render_config(), MayaFlux::Portal::Graphics::RenderConfig::target_window, MayaFlux::Portal::Graphics::RenderConfig::topology, MayaFlux::Portal::Graphics::TRIANGLE_LIST, MayaFlux::Portal::Graphics::TRIANGLE_STRIP, and MayaFlux::Portal::Graphics::RenderConfig::vertex_shader.

+ Here is the call graph for this function: