CaptureMoment 0.1.0
Free and open-source non-destructive photo editor
Loading...
Searching...
No Matches
rhi_image_item_renderer.h
Go to the documentation of this file.
1
26#pragma once
27
28#include <QQuickRhiItemRenderer>
29#include <rhi/qrhi.h>
30#include <QMutex>
31#include <QPointF>
32#include <QSize>
33#include <vector>
34#include <memory>
35
37struct ImageRegion;
38}
39
41
42// Forward declaration
43class RHIImageItem;
44
89class RHIImageItemRenderer : public QQuickRhiItemRenderer {
90public:
91 // =========================================================================
92 // Constructor & Destructor
93 // =========================================================================
94
112 explicit RHIImageItemRenderer(RHIImageItem* item);
113
126
127 // Deleted copy and move operations (GPU resources are non-copyable)
132
133 // =========================================================================
134 // QQuickRhiItemRenderer Interface
135 // =========================================================================
136
163 void initialize(QRhiCommandBuffer* cb) override;
164
193 void synchronize(QQuickRhiItem* item) override;
194
223 void render(QRhiCommandBuffer* cb) override;
224
225private:
226 // =========================================================================
227 // Private Helper Methods
228 // =========================================================================
229
256 void createGeometry(QRhiCommandBuffer* cb);
257
286 void createPipeline();
287
315 void updateTextureFromImage(const Core::Common::ImageRegion& image);
316
317 // =========================================================================
318 // Member Variables
319 // =========================================================================
320
332 RHIImageItem* m_item{nullptr};
333
334 // -------------------------------------------------------------------------
335 // RHI Resources (GPU)
336 // -------------------------------------------------------------------------
337
348 std::unique_ptr<QRhiTexture> m_texture;
349
360 std::unique_ptr<QRhiSampler> m_sampler;
361
372 std::unique_ptr<QRhiBuffer> m_vertex_buffer;
373
381 std::unique_ptr<QRhiBuffer> m_index_buffer;
382
392 std::unique_ptr<QRhiBuffer> m_uniform_buffer;
393
402 std::unique_ptr<QRhiShaderResourceBindings> m_srb;
403
416 std::unique_ptr<QRhiGraphicsPipeline> m_pipeline;
417
418 // -------------------------------------------------------------------------
419 // Render State (Thread-Local Copy)
420 // -------------------------------------------------------------------------
421
429 int m_image_width{0};
430
438 int m_image_height{0};
439
452 float m_zoom{1.0f};
453
466 QPointF m_pan{0, 0};
467
468 // -------------------------------------------------------------------------
469 // Pixel Data (CPU Staging)
470 // -------------------------------------------------------------------------
471
486 std::vector<uint8_t> m_pixel_data;
487
495 QSize m_pixel_data_size;
496
510 bool m_texture_needs_update{false};
511
519 bool m_initialized{false};
520
521 // -------------------------------------------------------------------------
522 // Size Viewport QML
523 // -------------------------------------------------------------------------
524
537 float m_item_width { 0.0f };
538
551 float m_item_height { 0.0f };
552};
553
554} // namespace CaptureMoment::UI::Rendering
Modern QQuickItem that renders an image via RHI (Vulkan/Metal/DX12/OpenGL) using QQuickRhiItem.
GPU renderer for RHIImageItem using Qt's Rendering Hardware Interface.
void render(QRhiCommandBuffer *cb) override
Performs the actual GPU rendering.
void synchronize(QQuickRhiItem *item) override
Synchronizes data from the GUI thread to the render thread.
RHIImageItemRenderer(RHIImageItemRenderer &&)=delete
RHIImageItemRenderer & operator=(RHIImageItemRenderer &&)=delete
void initialize(QRhiCommandBuffer *cb) override
Initializes all GPU resources when the RHI context is ready.
RHIImageItemRenderer(RHIImageItem *item)
Constructs the renderer with a reference to its parent item.
RHIImageItemRenderer & operator=(const RHIImageItemRenderer &)=delete
RHIImageItemRenderer(const RHIImageItemRenderer &)=delete
~RHIImageItemRenderer() override
Destructor releasing all GPU resources.
Namespace containing Qt-specific UI components for CaptureMoment.
Represents a rectangular region of an image and its pixel data.
CaptureMoment — footer