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 73 of file MeshBuffer.cpp.

74{
75 if (!config.vertex_shader.empty()) {
76 m_render_config.vertex_shader = config.vertex_shader;
77 }
78 if (!config.fragment_shader.empty()) {
79 m_render_config.fragment_shader = config.fragment_shader;
80 }
81 if (!config.default_texture_binding.empty()) {
82 m_render_config.default_texture_binding = config.default_texture_binding;
83 }
84
88 }
89
90 m_render_config.target_window = config.target_window;
92
93 if (!config.additional_textures.empty()) {
94 for (const auto& [name, texture] : config.additional_textures) {
95 m_render_config.additional_textures.emplace_back(name, texture);
96 }
97 }
98
99 const bool textured = m_diffuse_texture != nullptr
101
102 if (textured && m_render_config.default_texture_binding.empty()) {
104 }
105
106 if (m_render_config.fragment_shader.empty()) {
108 ? "mesh_textured.frag.spv"
109 : "triangle.frag.spv";
110 }
111
112 if (!m_render_processor) {
113 ShaderConfig sc { m_render_config.vertex_shader };
114
115 if (textured && !m_render_config.default_texture_binding.empty()) {
116 sc.bindings[m_render_config.default_texture_binding] = ShaderBinding(
117 0, 1, vk::DescriptorType::eCombinedImageSampler);
118 }
119
120 uint32_t binding_index = 1;
121 for (const auto& [name, _] : m_render_config.additional_textures) {
122 sc.bindings[name] = ShaderBinding(
123 1, binding_index++, vk::DescriptorType::eCombinedImageSampler);
124 }
125
126 m_render_processor = std::make_shared<RenderProcessor>(sc);
127 }
128
130 m_render_processor->set_target_window(
132 std::dynamic_pointer_cast<VKBuffer>(shared_from_this()));
133 m_render_processor->set_primitive_topology(m_render_config.topology);
134
136 m_render_processor->bind_texture(
139 }
140
141 for (const auto& [name, texture] : m_render_config.additional_textures) {
142 m_render_processor->bind_texture(name, texture);
143 }
144
145 get_processing_chain()->add_final_processor(
147 shared_from_this());
148
150 "MeshBuffer::setup_rendering: vert={} frag={} textured={}",
153 textured);
154}
#define MF_INFO(comp, ctx,...)
std::shared_ptr< RenderProcessor > m_render_processor
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:314
@ 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::ShaderConfig::bindings, MayaFlux::Portal::Graphics::RenderConfig::default_texture_binding, MayaFlux::Portal::Graphics::RenderConfig::fragment_shader, MF_INFO, MayaFlux::Portal::Graphics::RenderConfig::target_window, and MayaFlux::Portal::Graphics::RenderConfig::vertex_shader.