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