C
Monitor: Verifying the Rendering Output
// Copyright (C) 2024 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial // This file is part of the Qt Safe Renderer module #ifndef OFFSCREENSURFACE_H #define OFFSCREENSURFACE_H #include <QtSafeRenderer/qsaferenderer.h> #include <QtSafeRenderer/qsafewindow.h> #include <QtSafeRenderer/qsafeallocator.h> class FrameBuffer : public SafeRenderer::AbstractFrameBuffer { public: FrameBuffer(const SafeRenderer::QSafeSize& size, const PixelFormat format) : m_format(format), m_width(size.width()), m_height(size.height()), m_buffer(NULL) { if (format == SafeRenderer::AbstractFrameBuffer::RGBA8888 || format == SafeRenderer::AbstractFrameBuffer::RGBA8888_LE || format == SafeRenderer::AbstractFrameBuffer::ARGB32) { m_bitsperPixel = 32U; } else { m_bitsperPixel = 16U; } const SafeRenderer::quint32 totalBytes = (size.width() * size.height() * m_bitsperPixel / 8U) + 4U; m_buffer = SafeRenderer::allocAlignedFromMemoryPool(totalBytes); } virtual ~FrameBuffer() { if (m_buffer != NULL) { SafeRenderer::deallocFromMemoryPool(reinterpret_cast<SafeRenderer::quint8*>(m_buffer)); m_buffer = NULL; } } SafeRenderer::quchar *framebufferData() { return m_buffer; } SafeRenderer::quint32 bytesPerLine() { return (m_bitsperPixel / 8U) * m_width; } SafeRenderer::quchar bitsPerPixel() const { return static_cast<SafeRenderer::quchar>(m_bitsperPixel); } PixelFormat framebufferFormat() const { return m_format; } virtual void requestUpdate() {} private: const PixelFormat m_format; SafeRenderer::quint32 m_bitsperPixel; const SafeRenderer::quint32 m_width; const SafeRenderer::quint32 m_height; SafeRenderer::quint8 * m_buffer; }; class OffscreenSurface : public SafeRenderer::AbstractWindow { public: OffscreenSurface(const SafeRenderer::QSafeSize &size, SafeRenderer::AbstractFrameBuffer::PixelFormat format=SafeRenderer::AbstractFrameBuffer::ARGB32) : SafeRenderer::AbstractWindow(size, SafeRenderer::QSafePoint()), m_buffer(size, format) {} virtual void render(const SafeRenderer::QSafeRect &dirtyArea, const SafeRenderer::quint32 idArg) { (void)dirtyArea; (void)idArg; } virtual SafeRenderer::AbstractFrameBuffer *framebuffer() { return &m_buffer; } virtual void requestUpdate() {} protected: FrameBuffer m_buffer; }; #endif // OFFSCREENSURFACE_H