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

◆ setup_rendering()

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

Setup rendering with RenderProcessor.

Parameters
configRendering configuration

Definition at line 65 of file TextureBuffer.cpp.

66{
67 if (!user_config.vertex_shader.empty()) {
68 m_render_config.vertex_shader = user_config.vertex_shader;
69 }
70 if (!user_config.fragment_shader.empty()) {
71 m_render_config.fragment_shader = user_config.fragment_shader;
72 }
73 if (!user_config.default_texture_binding.empty()) {
74 m_render_config.default_texture_binding = user_config.default_texture_binding;
75 }
76 if (user_config.topology != Portal::Graphics::PrimitiveTopology::TRIANGLE_STRIP) {
78 "TextureBuffer only supports TRIANGLE_STRIP topology. Ignoring provided topology.");
79 } else {
80 if (user_config.topology != m_render_config.topology) {
81 m_render_config.topology = user_config.topology;
82 }
83 }
84 m_render_config.target_window = user_config.target_window;
85
86 if (!user_config.additional_textures.empty()) {
87 for (const auto& [name, texture] : user_config.additional_textures) {
88 m_render_config.additional_textures.emplace_back(name, texture);
89 }
90 }
91
92 if (!m_render_processor) {
93 ShaderConfig shader_config { m_render_config.vertex_shader };
94 shader_config.bindings[m_render_config.default_texture_binding] = ShaderBinding(
95 0, 0, vk::DescriptorType::eCombinedImageSampler);
96
97 uint32_t binding_index = 1;
98 for (const auto& [name, _] : m_render_config.additional_textures) {
99 shader_config.bindings[name] = ShaderBinding(
100 0, binding_index++, vk::DescriptorType::eCombinedImageSampler);
101 }
102
103 m_render_processor = std::make_shared<RenderProcessor>(shader_config);
104 }
105
107 m_render_processor->set_target_window(m_render_config.target_window, std::dynamic_pointer_cast<VKBuffer>(shared_from_this()));
108 m_render_processor->set_primitive_topology(m_render_config.topology);
109
111
112 for (const auto& [name, texture] : m_render_config.additional_textures) {
113 m_render_processor->bind_texture(name, texture);
114 }
115
116 get_processing_chain()->add_final_processor(m_render_processor, shared_from_this());
117}
#define MF_WARN(comp, ctx,...)
std::shared_ptr< RenderProcessor > m_render_processor
std::shared_ptr< Core::VKImage > get_texture() const
Get GPU texture image Suitable for binding to shaders via RenderProcessor::bind_texture()
std::shared_ptr< Buffers::BufferProcessingChain > get_processing_chain() override
Access the buffer's processing chain.
Definition VKBuffer.cpp:274
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ 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::Journal::BufferProcessing, MayaFlux::Journal::Buffers, MayaFlux::Portal::Graphics::RenderConfig::default_texture_binding, MayaFlux::Portal::Graphics::RenderConfig::fragment_shader, MayaFlux::Buffers::VKBuffer::get_processing_chain(), get_texture(), MayaFlux::Buffers::VKBuffer::m_render_config, m_render_processor, MF_WARN, MayaFlux::Portal::Graphics::RenderConfig::target_window, MayaFlux::Portal::Graphics::RenderConfig::topology, MayaFlux::Portal::Graphics::TRIANGLE_STRIP, and MayaFlux::Portal::Graphics::RenderConfig::vertex_shader.

+ Here is the call graph for this function: