blob: 5605578c6c7e8dcb0604470490540d7c878c06b7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef QRHIIMGUI_P_H
#define QRHIIMGUI_P_H
#include <rhi/qrhi.h>
QT_BEGIN_NAMESPACE
class QEvent;
class QRhiImguiRenderer
{
public:
~QRhiImguiRenderer();
struct CmdListBuffer {
quint32 offset;
QByteArray data;
};
struct DrawCmd {
int cmdListBufferIdx;
int textureIndex;
quint32 indexOffset;
quint32 elemCount;
QPointF itemPixelOffset;
QVector4D clipRect;
};
struct StaticRenderData {
QImage fontTextureData;
};
struct FrameRenderData {
quint32 totalVbufSize = 0;
quint32 totalIbufSize = 0;
QVarLengthArray<CmdListBuffer, 4> vbuf;
QVarLengthArray<CmdListBuffer, 4> ibuf;
QVarLengthArray<DrawCmd, 4> draw;
QSize outputPixelSize;
};
StaticRenderData sf;
FrameRenderData f;
void prepare(QRhi *rhi,
QRhiRenderTarget *rt,
QRhiCommandBuffer *cb,
const QMatrix4x4 &mvp,
float opacity = 1.0f,
float hdrWhiteLevelMultiplierOrZeroForSDRsRGB = 0.0f);
void render();
void releaseResources();
private:
QRhi *m_rhi = nullptr;
QRhiRenderTarget *m_rt = nullptr;
QRhiCommandBuffer *m_cb = nullptr;
std::unique_ptr<QRhiBuffer> m_vbuf;
std::unique_ptr<QRhiBuffer> m_ibuf;
std::unique_ptr<QRhiBuffer> m_ubuf;
std::unique_ptr<QRhiGraphicsPipeline> m_ps;
QVector<quint32> m_renderPassFormat;
std::unique_ptr<QRhiSampler> m_sampler;
struct Texture {
QImage image;
QRhiTexture *tex = nullptr;
QRhiShaderResourceBindings *srb = nullptr;
};
QVector<Texture> m_textures;
};
class QRhiImgui
{
public:
QRhiImgui();
~QRhiImgui();
using FrameFunc = std::function<void()>;
void nextFrame(const QSizeF &logicalOutputSize, float dpr, const QPointF &logicalOffset, FrameFunc frameFunc);
void syncRenderer(QRhiImguiRenderer *renderer);
bool processEvent(QEvent *e);
void rebuildFontAtlas();
private:
QRhiImguiRenderer::StaticRenderData sf;
QRhiImguiRenderer::FrameRenderData f;
Qt::MouseButtons pressedMouseButtons;
};
QT_END_NAMESPACE
#endif
|