10#include <spdlog/spdlog.h>
11#include <QMutexLocker>
16 : QQuickRhiItem(parent)
18 spdlog::debug(
"[RHIImageItem::RHIImageItem]: Created");
23 spdlog::debug(
"[RHIImageItem::~RHIImageItem]: Destroyed");
28 if (!image || !image->isValid()) {
29 spdlog::warn(
"[RHIImageItem::setImage]: Invalid image");
33 spdlog::info(
"[RHIImageItem::setImage]: {}x{}", image->width(), image->height());
38 m_texture_needs_update =
true;
46 if (!tile || !tile->isValid()) {
47 spdlog::warn(
"[RHIImageItem::updateTile]: Invalid tile");
55 spdlog::warn(
"[RHIImageItem::updateTile]: No base image");
63 spdlog::debug(
"[RHIImageItem::updateTile]: Full replacement");
67 if (tile->x() < 0 || tile->y() < 0 ||
71 spdlog::warn(
"[RHIImageItem::updateTile]: Tile out of bounds or channel mismatch");
76 const size_t row_size { tile->width() * tile->channels() };
77 for (
int y = 0; y < tile->height(); ++y)
79 const float* src { tile->getBuffer().data() + y * row_size };
82 std::copy(src, src + row_size, dst);
84 spdlog::debug(
"[RHIImageItem::updateTile]: Partial at ({}, {})", tile->x(), tile->y());
87 m_texture_needs_update =
true;
96 return m_texture_needs_update;
102 m_texture_needs_update = needs_update;
std::unique_ptr< Core::Common::ImageRegion > m_full_image
Unique pointer to the full image data displayed by this item.
QMutex m_image_mutex
Mutex protecting access to m_full_image and related state. Ensures thread-safe updates to the image d...
~RHIImageItem() override
Destroys the RHIImageItem and releases associated resources.
QQuickRhiItemRenderer * createRenderer() override
Creates the renderer instance responsible for RHI rendering.
void onImageChanged() override
Handler called when image data changes.
void zoomChanged(float zoom)
Signal emitted when the zoom value changes.
bool textureNeedsUpdate() const
Gets the state of the texture update flag.
void onPanChanged(const QPointF &new_pan) override
Handler called when pan changes.
void setTextureNeedsUpdate(bool needs_update)
Sets the state of the texture update flag.
void setImage(std::unique_ptr< Core::Common::ImageRegion > image) override
Sets the full image to be displayed.
void imageSizeChanged()
Signal emitted when the image dimensions change (width or height).
void onZoomChanged(float new_zoom) override
Handler called when zoom changes.
friend class RHIImageItemRenderer
void updateTile(std::unique_ptr< Core::Common::ImageRegion > tile) override
Updates a specific tile of the displayed image.
RHIImageItem(QQuickItem *parent=nullptr)
Constructs a new RHIImageItem.
void panChanged(const QPointF &pan)
Signal emitted when the pan offset changes.
Namespace containing Qt-specific UI components for CaptureMoment.
Modern RHI-based image display (Qt6 - Vulkan/Metal/DX12 compatible) using QQuickRhiItem.
RHI renderer implementation for hardware-accelerated image display.