Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qsgrhivisualizer_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// Copyright (C) 2016 Jolla Ltd, author: <gunnar.sletta@jollamobile.com>
3// Copyright (C) 2016 Robin Burchell <robin.burchell@viroteck.net>
4// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
5
6#ifndef QSGRHIVISUALIZER_P_H
7#define QSGRHIVISUALIZER_P_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists purely as an
14// implementation detail. This header file may change from version to
15// version without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include "qsgbatchrenderer_p.h"
21
22#include <QtCore/qrandom.h>
23
25
26namespace QSGBatchRenderer
27{
28
30{
31public:
34
35 void prepareVisualize() override;
36 void visualize() override;
37
38 void releaseResources() override;
39
40 struct DrawCall
41 {
42 static const int UBUF_SIZE = 152; // visualization.vert/frag
43 struct {
44 char data[UBUF_SIZE]; // matrix, rotation, color, pattern, projection
46 struct {
49 int count;
50 int stride;
51 const void *data; // only when using own vbuf
53 struct {
55 int count;
56 int stride;
57 const void *data; // only when using own ibuf
59 struct {
60 QRhiBuffer *vbuf; // either same for all draw calls and owned by the *Vis, or points to a Batch.Buffer.vbo.buf
62 QRhiBuffer *ibuf; // same, but for index
65 } buf;
66 };
67
68private:
69 QShader m_vs;
70 QShader m_fs;
71
72 void recordDrawCalls(const QVector<DrawCall> &drawCalls,
75 bool blendOneOne = false);
76
77 class PipelineCache {
78 public:
79 QRhiGraphicsPipeline *pipeline(RhiVisualizer *visualizer,
80 QRhi *rhi,
85 quint32 vertexStride,
86 bool blendOneOne);
87 void releaseResources();
88 private:
89 struct Pipeline {
94 };
95 QVarLengthArray<Pipeline, 16> pipelines;
96 };
97
98 PipelineCache m_pipelines;
99
100 class Fade {
101 public:
102 void prepare(RhiVisualizer *visualizer,
104 void releaseResources();
105 void render(QRhiCommandBuffer *cb);
106 private:
107 RhiVisualizer *visualizer;
108 QRhiBuffer *vbuf = nullptr;
109 QRhiBuffer *ubuf = nullptr;
110 QRhiGraphicsPipeline *ps = nullptr;
111 QRhiShaderResourceBindings *srb = nullptr;
112 } m_fade;
113
114 class ChangeVis {
115 public:
116 void prepare(Node *n, RhiVisualizer *visualizer,
118 void releaseResources();
119 void render(QRhiCommandBuffer *cb);
120 private:
121 void gather(Node *n);
122 RhiVisualizer *visualizer;
123 QVector<DrawCall> drawCalls;
124 QRhiBuffer *vbuf = nullptr;
125 QRhiBuffer *ibuf = nullptr;
126 QRhiBuffer *ubuf = nullptr;
127 QRhiShaderResourceBindings *srb = nullptr;
128 } m_changeVis;
129
130 class BatchVis {
131 public:
132 void prepare(const QDataBuffer<Batch *> &opaqueBatches,
133 const QDataBuffer<Batch *> &alphaBatches,
134 RhiVisualizer *visualizer,
136 bool forceUintIndex);
137 void releaseResources();
138 void render(QRhiCommandBuffer *cb);
139 private:
140 void gather(Batch *b);
141 RhiVisualizer *visualizer;
142 bool forceUintIndex;
143 QVector<DrawCall> drawCalls;
144 QRhiBuffer *ubuf = nullptr;
145 QRhiShaderResourceBindings *srb = nullptr;
146 } m_batchVis;
147
148 class ClipVis {
149 public:
150 void prepare(QSGNode *node, RhiVisualizer *visualizer,
152 void releaseResources();
153 void render(QRhiCommandBuffer *cb);
154 private:
155 void gather(QSGNode *node);
156 RhiVisualizer *visualizer;
157 QVector<DrawCall> drawCalls;
158 QRhiBuffer *vbuf = nullptr;
159 QRhiBuffer *ibuf = nullptr;
160 QRhiBuffer *ubuf = nullptr;
161 QRhiShaderResourceBindings *srb = nullptr;
162 } m_clipVis;
163
164 class OverdrawVis {
165 public:
166 void prepare(Node *n, RhiVisualizer *visualizer,
168 void releaseResources();
169 void render(QRhiCommandBuffer *cb);
170 private:
171 void gather(Node *n);
172 RhiVisualizer *visualizer;
173 QVector<DrawCall> drawCalls;
174 QRhiBuffer *vbuf = nullptr;
175 QRhiBuffer *ibuf = nullptr;
176 QRhiBuffer *ubuf = nullptr;
177 QRhiShaderResourceBindings *srb = nullptr;
178 float step = 0.0f;
179 QMatrix4x4 rotation;
180 struct {
181 QRhiBuffer *vbuf = nullptr;
182 QRhiBuffer *ubuf = nullptr;
183 QRhiShaderResourceBindings *srb = nullptr;
184 QRhiGraphicsPipeline *ps = nullptr;
185 } box;
186 } m_overdrawVis;
187
188 QRandomGenerator m_randomGenerator;
189
190 friend class Fade;
191 friend class PipelineCache;
192 friend class ChangeVis;
193 friend class ClipVis;
194 friend class OverdrawVis;
195};
196
197} // namespace QSGBatchRenderer
198
200
201#endif // QSGRHIVISUALIZER_P_H
Definition lalr.h:136
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
Definition qmatrix4x4.h:25
\inmodule QtCore \reentrant
Definition qrandom.h:21
\inmodule QtGui
Definition qrhi.h:846
\inmodule QtGui
Definition qrhi.h:1651
IndexFormat
Specifies the index data type.
Definition qrhi.h:1653
\inmodule QtGui
Definition qrhi.h:1270
Topology
Specifies the primitive topology.
Definition qrhi.h:1280
\inmodule QtGui
Definition qrhi.h:1142
\inmodule QtGui
Definition qrhi.h:1731
\inmodule QtGui
Definition qrhi.h:1214
Format
Specifies the type of the element data.
Definition qrhi.h:234
\inmodule QtGuiPrivate \inheaderfile rhi/qrhi.h
Definition qrhi.h:1804
\group qtquick-scenegraph-nodes \title Qt Quick Scene Graph Node classes
Definition qsgnode.h:37
\inmodule QtGui
Definition qshader.h:81
Combined button and popup list for selecting options.
GLboolean GLboolean GLboolean b
const GLuint * pipelines
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
const void GLsizei GLsizei stride
GLfloat n
GLint GLsizei GLsizei GLenum format
GLsizei const GLint * box
SSL_CTX int(* cb)(SSL *ssl, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg)
unsigned int quint32
Definition qtypes.h:50
QSvgRenderer * renderer
[0]
QRhiVertexInputAttribute::Format format
struct QSGBatchRenderer::RhiVisualizer::DrawCall::@703 vertex
QRhiGraphicsPipeline::Topology topology
struct QSGBatchRenderer::RhiVisualizer::DrawCall::@702 uniforms
struct QSGBatchRenderer::RhiVisualizer::DrawCall::@704 index
QRhiCommandBuffer::IndexFormat format
struct QSGBatchRenderer::RhiVisualizer::DrawCall::@705 buf