MayaFlux 0.2.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
ProceduralTextureNode.cpp
Go to the documentation of this file.
2
4
6
7const auto default_generator = [](uint32_t, uint32_t, uint32_t, uint32_t) {
8 return glm::vec4(0.0F, 0.0F, 0.0F, 1.0F);
9};
10
11ProceduralTextureNode::ProceduralTextureNode(uint32_t width, uint32_t height)
13{
14}
15
17 uint32_t width,
18 uint32_t height,
19 PixelGenerator generator)
20 : TextureNode(width, height)
21 , m_generator(std::move(generator))
22{
23 if (!m_generator) {
25 "ProceduralTextureNode created with null generator, using default black");
27 }
28
30 "Created ProceduralTextureNode: {}x{}", width, height);
31}
32
34{
35 if (!generator) {
37 "Cannot set null generator");
38 return;
39 }
40
41 m_generator = std::move(generator);
42 m_pixel_data_dirty = true;
43
45 "ProceduralTextureNode: generator function updated");
46}
47
49{
50 if (!m_generator) {
52 "ProceduralTextureNode: no generator function set");
53 return;
54 }
55
56 auto buffer = get_pixel_buffer_mutable();
57
58 for (uint32_t y = 0; y < m_height; ++y) {
59 for (uint32_t x = 0; x < m_width; ++x) {
60 size_t idx = (static_cast<size_t>(y * m_width + x)) * 4;
61
62 glm::vec4 color = m_generator(x, y, m_width, m_height);
63
64 buffer[idx + 0] = color.r;
65 buffer[idx + 1] = color.g;
66 buffer[idx + 2] = color.b;
67 buffer[idx + 3] = color.a;
68 }
69 }
70
71 m_pixel_data_dirty = true;
72
74 "ProceduralTextureNode: generated {}x{} pixels",
76}
77
78} // namespace MayaFlux::Nodes::GpuSync
#define MF_ERROR(comp, ctx,...)
#define MF_RT_ERROR(comp, ctx,...)
#define MF_TRACE(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
std::function< glm::vec4(uint32_t x, uint32_t y, uint32_t width, uint32_t height)> PixelGenerator
Pixel generator function signature.
void compute_frame() override
Compute frame - generate all pixels via generator function.
void set_generator(PixelGenerator generator)
Set pixel generator function.
ProceduralTextureNode(uint32_t width, uint32_t height)
Create procedural texture with default (black) generator.
Pixels generated by arbitrary functions.
bool m_pixel_data_dirty
Flag: pixel data changed since last GPU upload.
std::span< float > get_pixel_buffer_mutable()
Get mutable pixel buffer for direct write access.
Base class for texture-generating nodes.
@ NodeProcessing
Node graph processing (Nodes::NodeGraphManager)
@ Nodes
DSP Generator and Filter Nodes, graph pipeline, node management.