MayaFlux 0.4.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 ShaderConfig shader_config { m_render_config.vertex_shader };
121 shader_config.bindings[m_render_config.default_texture_binding] = ShaderBinding(
122 0, 1, vk::DescriptorType::eCombinedImageSampler);
123
124 uint32_t binding_index = 1;
125 for (const auto& [name, _] : m_render_config.additional_textures) {
126 shader_config.bindings[name] = ShaderBinding(
127 1, binding_index++, vk::DescriptorType::eCombinedImageSampler);
128 }
129
130 apply_render_config(m_render_config, shader_config);
131
133
134 for (const auto& [name, texture] : m_render_config.additional_textures) {
135 m_render_processor->bind_texture(name, texture);
136 }
137
138 get_processing_chain()->add_final_processor(m_render_processor, shared_from_this());
139
141 "NodeTextureBuffer '{}' rendering configured: shader={}, topology={}",
143 static_cast<int>(m_render_config.topology));
144}
#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< 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
@ 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::Buffers::VKBuffer::apply_render_config(), 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, MayaFlux::Buffers::VKBuffer::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: