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

◆ setup_rendering()

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

Setup rendering with RenderProcessor.

Parameters
configRendering configuration

Configures the buffer for direct rendering to screen. The GPU texture will be bound and drawn automatically.

Definition at line 93 of file NodeTextureBuffer.cpp.

94{
95 if (!user_config.vertex_shader.empty()) {
96 m_render_config.vertex_shader = user_config.vertex_shader;
97 }
98 if (!user_config.fragment_shader.empty()) {
99 m_render_config.fragment_shader = user_config.fragment_shader;
100 }
101 if (!user_config.default_texture_binding.empty()) {
102 m_render_config.default_texture_binding = user_config.default_texture_binding;
103 }
104 if (user_config.topology != Portal::Graphics::PrimitiveTopology::TRIANGLE_STRIP) {
106 "NodeTextureBuffer currently only supports TRIANGLE_STRIP topology. Ignoring provided topology.");
107 } else {
108 if (user_config.topology != m_render_config.topology) {
109 m_render_config.topology = user_config.topology;
110 }
111 }
112 m_render_config.target_window = user_config.target_window;
113
114 if (!user_config.additional_textures.empty()) {
115 for (const auto& [name, texture] : user_config.additional_textures) {
116 m_render_config.additional_textures.emplace_back(name, texture);
117 }
118 }
119
120 if (!m_render_processor) {
121 ShaderConfig shader_config { m_render_config.vertex_shader };
122 shader_config.bindings[m_render_config.default_texture_binding] = ShaderBinding(
123 0, 0, vk::DescriptorType::eCombinedImageSampler);
124
125 uint32_t binding_index = 1;
126 for (const auto& [name, _] : m_render_config.additional_textures) {
127 shader_config.bindings[name] = ShaderBinding(
128 0, binding_index++, vk::DescriptorType::eCombinedImageSampler);
129 }
130
131 m_render_processor = std::make_shared<RenderProcessor>(shader_config);
132 }
133
135 m_render_processor->set_target_window(m_render_config.target_window, std::dynamic_pointer_cast<VKBuffer>(shared_from_this()));
136 m_render_processor->set_primitive_topology(m_render_config.topology);
137
139
140 for (const auto& [name, texture] : m_render_config.additional_textures) {
141 m_render_processor->bind_texture(name, texture);
142 }
143
144 get_processing_chain()->add_final_processor(m_render_processor, shared_from_this());
145
147 "NodeTextureBuffer '{}' rendering configured: shader={}, topology={}",
149 static_cast<int>(m_render_config.topology));
150}
#define MF_INFO(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
std::shared_ptr< Core::VKImage > get_gpu_texture() const
Get the GPU-resident texture (VKImage)
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:274
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ 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::Journal::BufferProcessing, MayaFlux::Journal::Buffers, MayaFlux::Portal::Graphics::RenderConfig::default_texture_binding, MayaFlux::Portal::Graphics::RenderConfig::fragment_shader, get_gpu_texture(), MayaFlux::Buffers::VKBuffer::get_processing_chain(), MayaFlux::Journal::Init, m_binding_name, MayaFlux::Buffers::VKBuffer::m_render_config, m_render_processor, MF_INFO, 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: