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

◆ add_geometry() [1/2]

void MayaFlux::Buffers::CompositeGeometryBuffer::add_geometry ( const std::string &  name,
const std::shared_ptr< Nodes::GpuSync::GeometryWriterNode > &  node,
Portal::Graphics::PrimitiveTopology  topology,
const RenderConfig config 
)

Add a geometry collection with explicit render config.

Parameters
nameUnique identifier for this geometry
nodeGeometryWriterNode to render
topologyPrimitive topology for this geometry
configRender configuration (shaders, render states)

Definition at line 121 of file CompositeGeometryBuffer.cpp.

126{
127 if (!node) {
128 error<std::invalid_argument>(
131 std::source_location::current(),
132 "Cannot add null geometry node '{}'", name);
133 }
134
135 if (!m_processor) {
136 error<std::runtime_error>(
139 std::source_location::current(),
140 "Must call setup_processors() before add_geometry()");
141 }
142
143 if (!config.target_window) {
144 error<std::invalid_argument>(
147 std::source_location::current(),
148 "Target window must be specified in RenderConfig");
149 }
150
151 m_processor->add_geometry(name, node, topology);
152 auto self = std::dynamic_pointer_cast<CompositeGeometryBuffer>(shared_from_this());
153
154 auto render = std::make_shared<RenderProcessor>(
155 ShaderConfig { config.vertex_shader });
156
157 render->set_fragment_shader(config.fragment_shader);
158
159 if (!config.geometry_shader.empty()) {
160 render->set_geometry_shader(config.geometry_shader);
161 }
162
163 if (auto layout = node->get_vertex_layout()) {
164 render->set_buffer_vertex_layout(self, *layout);
165 }
166
167 render->set_target_window(config.target_window, self);
168 render->set_primitive_topology(topology);
169 render->set_polygon_mode(config.polygon_mode);
170 render->set_cull_mode(config.cull_mode);
171
172 render->set_vertex_range(0, 0);
173
174 auto chain = get_processing_chain();
175 chain->add_processor(render, shared_from_this());
176
177 m_render_data[name] = RenderData {
178 .render_processor = render,
179 .vertex_offset = 0,
180 .vertex_count = 0
181 };
182
184 "Added geometry '{}' to composite buffer (topology: {}, shaders: {}/{})",
185 name, static_cast<int>(topology), config.vertex_shader, config.fragment_shader);
186}
#define MF_DEBUG(comp, ctx,...)
std::shared_ptr< CompositeGeometryProcessor > m_processor
std::unordered_map< std::string, RenderData > m_render_data
std::shared_ptr< Buffers::BufferProcessingChain > get_processing_chain() override
Access the buffer's processing chain.
Definition VKBuffer.cpp:274
@ Init
Engine/subsystem initialization.
@ Buffers
Buffers, Managers, processors and processing chains.

References MayaFlux::Journal::Buffers, MayaFlux::Portal::Graphics::RenderConfig::cull_mode, MayaFlux::Portal::Graphics::RenderConfig::fragment_shader, MayaFlux::Portal::Graphics::RenderConfig::geometry_shader, MayaFlux::Buffers::VKBuffer::get_processing_chain(), MayaFlux::Journal::Init, m_processor, m_render_data, MF_DEBUG, MayaFlux::Portal::Graphics::RenderConfig::polygon_mode, MayaFlux::Buffers::RenderData::render_processor, MayaFlux::Portal::Graphics::RenderConfig::target_window, and MayaFlux::Portal::Graphics::RenderConfig::vertex_shader.

+ Here is the call graph for this function: