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 62 of file GeometryBuffer.cpp.

63{
64 RenderConfig resolved_config = config;
65
66 const bool textured = m_diffuse_texture != nullptr
67 || !resolved_config.default_texture_binding.empty();
68
69 if (resolved_config.topology == Portal::Graphics::PrimitiveTopology::POINT_LIST
70 && m_geometry_node->get_primitive_topology()
72 resolved_config.topology = m_geometry_node->get_primitive_topology();
73 }
74
75 switch (resolved_config.topology) {
77 if (config.vertex_shader.empty())
78 resolved_config.vertex_shader = "point.vert.spv";
79 if (config.fragment_shader.empty())
80 resolved_config.fragment_shader = "point.frag.spv";
81 break;
82
85
86 if (config.fragment_shader.empty())
87 resolved_config.fragment_shader = "line.frag.spv";
88
89#ifndef MAYAFLUX_PLATFORM_MACOS
90 if (config.vertex_shader.empty())
91 resolved_config.vertex_shader = "line.vert.spv";
92 if (config.geometry_shader.empty())
93 resolved_config.geometry_shader = "line.geom.spv";
94#else
95 if (config.vertex_shader.empty())
96 resolved_config.vertex_shader = "line_fallback.vert.spv";
97
99#endif
100
101 break;
102
105 if (config.vertex_shader.empty())
106 resolved_config.vertex_shader = "triangle.vert.spv";
107 if (config.fragment_shader.empty()) {
108 resolved_config.fragment_shader = textured
109 ? "mesh_textured.frag.spv"
110 : "triangle.frag.spv";
111 }
112 break;
113
114 default:
115 if (config.vertex_shader.empty())
116 resolved_config.vertex_shader = "point.vert.spv";
117 if (config.fragment_shader.empty())
118 resolved_config.fragment_shader = "point.frag.spv";
119 }
120
121 const bool frag_samples_texture = resolved_config.fragment_shader.find("textured") != std::string::npos;
122
123 if (textured && !frag_samples_texture) {
125 "GeometryBuffer::setup_rendering: texture supplied but fragment shader '{}' "
126 "does not sample a texture — texture will be ignored",
127 resolved_config.fragment_shader);
128 }
129
130 const bool apply_texture = textured && frag_samples_texture;
131
132 ShaderConfig sc { resolved_config.vertex_shader };
133 if (apply_texture) {
134 const std::string slot = resolved_config.default_texture_binding.empty()
136 : resolved_config.default_texture_binding;
137 sc.bindings[slot] = ShaderBinding(0, 1, vk::DescriptorType::eCombinedImageSampler);
138 }
139
140 apply_render_config(resolved_config, sc);
141
142 get_processing_chain()->add_final_processor(m_render_processor, shared_from_this());
143
144 if (apply_texture && m_diffuse_texture)
146
147 set_default_render_config(resolved_config);
148}
#define MF_WARN(comp, ctx,...)
std::shared_ptr< Core::VKImage > m_diffuse_texture
std::shared_ptr< Nodes::GpuSync::GeometryWriterNode > m_geometry_node
void set_texture(std::shared_ptr< Core::VKImage > image, std::string binding="diffuseTex")
Supply a diffuse texture, bound on the next graphics tick.
std::shared_ptr< Buffers::BufferProcessingChain > get_processing_chain() override
Access the buffer's processing chain.
Definition VKBuffer.cpp:286
Portal::Graphics::RenderConfig RenderConfig
Definition VKBuffer.hpp:69
void apply_render_config(const RenderConfig &config, const ShaderConfig &shader_config)
Configure the internal m_render_processor from a RenderConfig.
Definition VKBuffer.cpp:359
std::shared_ptr< RenderProcessor > m_render_processor
Definition VKBuffer.hpp:618
void set_default_render_config(const RenderConfig &config)
Called by derived classes to set their context-specific defaults.
Definition VKBuffer.hpp:595
@ Init
Engine/subsystem initialization.
@ Buffers
Buffers, Managers, processors and processing chains.

References MayaFlux::Buffers::VKBuffer::apply_render_config(), MayaFlux::Journal::Buffers, MayaFlux::Portal::Graphics::RenderConfig::default_texture_binding, MayaFlux::Portal::Graphics::RenderConfig::fragment_shader, MayaFlux::Portal::Graphics::RenderConfig::geometry_shader, MayaFlux::Buffers::VKBuffer::get_processing_chain(), MayaFlux::Journal::Init, MayaFlux::Portal::Graphics::LINE_LIST, MayaFlux::Portal::Graphics::LINE_STRIP, m_diffuse_binding, m_diffuse_texture, m_geometry_node, MayaFlux::Buffers::VKBuffer::m_render_processor, MF_WARN, MayaFlux::Portal::Graphics::POINT_LIST, MayaFlux::Buffers::VKBuffer::set_default_render_config(), set_texture(), 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: