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

◆ update_pixels_if_dirty()

void MayaFlux::Buffers::TextureProcessor::update_pixels_if_dirty ( )
private

Re-upload pixels to GPU if they changed.

Definition at line 188 of file TextureProcessor.cpp.

189{
190 if (!m_texture_buffer || !m_texture_buffer->m_texture_dirty) {
191 return;
192 }
193
195 auto variant = get_variant_source();
196 if (!variant) {
197 m_texture_buffer->m_texture_dirty = false;
198 return;
199 }
200
201 if (!m_texture_buffer->has_texture()) {
202 m_texture_buffer->m_gpu_texture = create_gpu_texture();
203 }
204
206
209 m_texture_buffer->get_texture()->get_size_bytes());
210 }
211
212 auto access = Kakshya::as_texture_access(*variant);
213 if (!access) {
214 m_texture_buffer->m_texture_dirty = false;
215 return;
216 }
217
219 loom.upload_data(
220 m_texture_buffer->get_texture(),
221 access->data_ptr,
222 access->byte_count,
224 } else {
225 loom.upload_data(
226 m_texture_buffer->get_texture(),
227 access->data_ptr,
228 access->byte_count);
229 }
230
231 m_texture_buffer->m_texture_dirty = false;
232
234 "TextureProcessor: external variant data updated ({} bytes)", access->byte_count);
235 return;
236 }
237
238 if (!m_texture_buffer->has_texture()) {
239 m_texture_buffer->m_gpu_texture = create_gpu_texture();
240
241 if (auto rp = m_texture_buffer->get_render_processor()) {
242 rp->bind_texture(
243 m_texture_buffer->get_render_config().default_texture_binding,
244 m_texture_buffer->get_texture());
245 }
246 }
247
248 const auto& pixel_data = m_texture_buffer->m_pixel_data;
249 if (pixel_data.empty()) {
250 return;
251 }
252
254
257 m_texture_buffer->get_texture()->get_size_bytes());
258 }
259
261 loom.upload_data(
262 m_texture_buffer->get_texture(),
263 pixel_data.data(),
264 pixel_data.size(),
266 } else {
267 loom.upload_data(
268 m_texture_buffer->get_texture(),
269 pixel_data.data(),
270 pixel_data.size());
271 }
272
273 m_texture_buffer->m_texture_dirty = false;
274
276 "TextureProcessor: pixel data updated ({} bytes)", pixel_data.size());
277}
#define MF_DEBUG(comp, ctx,...)
std::shared_ptr< Core::VKImage > create_gpu_texture()
Create VKImage for texture storage.
virtual std::optional< Kakshya::DataVariant > get_variant_source()
std::shared_ptr< TextureBuffer > m_texture_buffer
std::shared_ptr< Buffers::VKBuffer > m_stream_staging
Persistent host-visible staging buffer for streaming pixel uploads.
std::shared_ptr< VKBuffer > create_image_staging_buffer(size_t size)
Allocate a persistent host-visible staging buffer sized for repeated streaming uploads to an image of...
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Buffers
Buffers, Managers, processors and processing chains.
std::optional< TextureAccess > as_texture_access(const DataVariant &variant)
Extract a TextureAccess from a DataVariant.
MAYAFLUX_API TextureLoom & get_texture_manager()
Get the global texture manager instance.

References MayaFlux::Kakshya::as_texture_access(), MayaFlux::Journal::BufferProcessing, MayaFlux::Journal::Buffers, create_gpu_texture(), MayaFlux::Buffers::create_image_staging_buffer(), EXTERNAL_DATA, MayaFlux::Portal::Graphics::get_texture_manager(), get_variant_source(), m_pixel_source, m_stream_staging, m_streaming_mode, m_texture_buffer, and MF_DEBUG.

Referenced by processing_function().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: