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

◆ setup_rendering()

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

Attach a RenderProcessor targeting the given window.

Always uses triangle.vert.spv / triangle.frag.spv unless overridden. Topology is always TRIANGLE_LIST.

Definition at line 108 of file MeshBuffer.cpp.

109{
110 if (!config.vertex_shader.empty()) {
111 m_render_config.vertex_shader = config.vertex_shader;
112 }
113 if (!config.fragment_shader.empty()) {
114 m_render_config.fragment_shader = config.fragment_shader;
115 }
116 if (!config.default_texture_binding.empty()) {
117 m_render_config.default_texture_binding = config.default_texture_binding;
118 }
119
123 }
124
125 m_render_config.target_window = config.target_window;
127
128 if (!config.additional_textures.empty()) {
129 for (const auto& [name, texture] : config.additional_textures) {
130 m_render_config.additional_textures.emplace_back(name, texture);
131 }
132 }
133
134 const bool textured = m_diffuse_texture != nullptr
136
137 if (textured && m_render_config.default_texture_binding.empty()) {
139 }
140
141 if (m_render_config.fragment_shader.empty()) {
143 ? "mesh_textured.frag.spv"
144 : "triangle.frag.spv";
145 }
146
147 ShaderConfig sc { m_render_config.vertex_shader };
148
149 if (textured && !m_render_config.default_texture_binding.empty()) {
150 sc.bindings[m_render_config.default_texture_binding] = ShaderBinding(
151 0, 1, vk::DescriptorType::eCombinedImageSampler);
152 }
153
154 uint32_t binding_index = 1;
155 for (const auto& [name, _] : m_render_config.additional_textures) {
156 sc.bindings[name] = ShaderBinding(
157 1, binding_index++, vk::DescriptorType::eCombinedImageSampler);
158 }
159
161
163 m_render_processor->bind_texture(
166 }
167
168 for (const auto& [name, texture] : m_render_config.additional_textures) {
169 m_render_processor->bind_texture(name, texture);
170 }
171
172 get_processing_chain()->add_final_processor(
174 shared_from_this());
175
177 "MeshBuffer::setup_rendering: vert={} frag={} textured={}",
180 textured);
181}
#define MF_INFO(comp, ctx,...)
std::shared_ptr< Core::VKImage > m_diffuse_texture
std::shared_ptr< Buffers::BufferProcessingChain > get_processing_chain() override
Access the buffer's processing chain.
Definition VKBuffer.cpp:286
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
@ Init
Engine/subsystem initialization.
@ Buffers
Buffers, Managers, processors and processing chains.
std::shared_ptr< Core::Window > target_window
std::vector< std::pair< std::string, std::shared_ptr< Core::VKImage > > > additional_textures
For child-specific fields.

References MayaFlux::Portal::Graphics::RenderConfig::additional_textures, MayaFlux::Buffers::VKBuffer::apply_render_config(), MayaFlux::Journal::Buffers, MayaFlux::Portal::Graphics::RenderConfig::default_texture_binding, MayaFlux::Portal::Graphics::RenderConfig::fragment_shader, MayaFlux::Buffers::VKBuffer::get_processing_chain(), MayaFlux::Journal::Init, m_diffuse_binding, m_diffuse_texture, MayaFlux::Buffers::VKBuffer::m_render_config, MayaFlux::Buffers::VKBuffer::m_render_processor, MF_INFO, MayaFlux::Portal::Graphics::RenderConfig::target_window, MayaFlux::Portal::Graphics::RenderConfig::topology, MayaFlux::Portal::Graphics::TRIANGLE_LIST, and MayaFlux::Portal::Graphics::RenderConfig::vertex_shader.

+ Here is the call graph for this function: