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
qssgrenderhelpers.cpp
Go to the documentation of this file.
1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
5#include "qssgrenderhelpers.h"
6
7#include <QtQuick3DRuntimeRender/private/qssgrenderer_p.h>
8#include <QtQuick3DRuntimeRender/private/qssgrenderhelpers_p.h>
9#include <QtQuick3DRuntimeRender/private/qssglayerrenderdata_p.h>
10
12#include <QtQuick3DRuntimeRender/private/qssgrendercamera_p.h>
13
14#include <QtQuick3DUtils/private/qssgassert_p.h>
15
17
84 QSSGPrepContextId prepId,
85 const NodeList &nodes,
86 CreateFlags flags)
87{
89 if (nodes.size() > 0) {
90 auto *ctx = frameData.contextInterface();
91 auto *layer = QSSGLayerRenderData::getCurrent(*ctx->renderer());
92 QSSG_ASSERT_X(layer, "No active layer for renderer!", return rid);
93 return layer->createRenderables(prepId, nodes, flags);
94 }
95
96 return rid;
97}
98
115 const QSSGRenderExtension &ext,
116 QSSGCameraId cameraId,
117 quint32 slot)
118{
119 auto *cn = QSSGRenderGraphObjectUtils::getCamera<QSSGRenderCamera>(cameraId);
120 QSSG_ASSERT_X(cn && QSSGRenderGraphObject::isCamera(cn->type), "CameraId is not a camera!", return QSSGPrepContextId::Invalid);
121 auto *ctx = frameData.contextInterface();
122 auto *layer = QSSGLayerRenderData::getCurrent(*ctx->renderer());
123 QSSG_ASSERT_X(layer, "No active layer for renderer!", return QSSGPrepContextId::Invalid);
124 return layer->getOrCreateExtensionContext(ext, cn, slot);
125}
126
138 QSSGPrepContextId prepId,
139 QSSGRenderablesId renderablesId,
140 float lodThreshold)
141{
142 auto *ctx = frameData.contextInterface();
143 auto *layer = QSSGLayerRenderData::getCurrent(*ctx->renderer());
144 QSSG_ASSERT_X(layer, "No active layer for renderer!", return QSSGPrepResultId::Invalid);
145 return layer->prepareModelsForRender(*ctx, prepId, renderablesId, lodThreshold);
146}
147
158 QSSGPrepResultId prepId,
159 QRhiRenderPassDescriptor *renderPassDescriptor,
161 QSSGRenderablesFilters filter)
162{
163 auto *ctx = frameData.contextInterface();
164 auto *layer = QSSGLayerRenderData::getCurrent(*ctx->renderer());
165 QSSG_ASSERT_X(layer, "No active layer for renderer!", return);
166 layer->prepareRenderables(*ctx, prepId, renderPassDescriptor, ps, filter);
167}
168
177 QSSGPrepResultId prepId)
178{
180 auto *layer = QSSGLayerRenderData::getCurrent(*ctx->renderer());
181 QSSG_ASSERT_X(layer, "No active layer for renderer!", return);
182 layer->renderRenderables(*ctx, prepId);
183}
184
185QSSGRenderHelpers::QSSGRenderHelpers()
186{
187
188}
189
213 QSSGRenderablesId renderablesId,
215 MaterialList materials)
216{
217 auto *ctx = frameData.contextInterface();
218 auto *layer = QSSGLayerRenderData::getCurrent(*ctx->renderer());
219 QSSG_ASSERT_X(layer, "No active layer for renderer!", return);
220 auto *renderModel = QSSGRenderGraphObjectUtils::getNode<QSSGRenderModel>(model);
221 QSSG_ASSERT_X(renderModel && renderModel->type == QSSGRenderGraphObject::Type::Model, "Invalid model-id!", return);
222 layer->setModelMaterials(renderablesId, *renderModel, materials);
223}
224
233 QSSGRenderablesId renderablesId,
234 MaterialList materials)
235{
236 auto *ctx = frameData.contextInterface();
237 auto *layer = QSSGLayerRenderData::getCurrent(*ctx->renderer());
238 QSSG_ASSERT_X(layer, "No active layer for renderer!", return);
239 layer->setModelMaterials(renderablesId, materials);
240}
241
252 QSSGPrepContextId prepId)
253{
254 auto *ctx = frameData.contextInterface();
255 auto *layer = QSSGLayerRenderData::getCurrent(*ctx->renderer());
256 QSSG_ASSERT_X(layer, "No active layer for renderer!", return {});
257 auto *renderModel = QSSGRenderGraphObjectUtils::getNode<QSSGRenderModel>(model);
258 QSSG_ASSERT_X(renderModel && renderModel->type == QSSGRenderGraphObject::Type::Model, "Invalid model-id!", return {});
259 return (prepId != QSSGPrepContextId::Invalid) ? layer->getGlobalTransform(prepId, *renderModel)
260 : renderModel->globalTransform;
261}
262
269{
270 Q_UNUSED(frameData);
271 auto *renderModel = QSSGRenderGraphObjectUtils::getNode<QSSGRenderModel>(model);
272 QSSG_ASSERT_X(renderModel && renderModel->type == QSSGRenderGraphObject::Type::Model, "Invalid model-id!", return {});
273 return renderModel->localTransform;
274}
275
282{
283 Q_UNUSED(frameData);
284 auto *renderModel = QSSGRenderGraphObjectUtils::getNode<QSSGRenderModel>(model);
285 QSSG_ASSERT_X(renderModel && renderModel->type == QSSGRenderGraphObject::Type::Model, "Invalid model-id!", return {});
286 return renderModel->globalOpacity;
287}
288
298{
299 auto *ctx = frameData.contextInterface();
300 auto *layer = QSSGLayerRenderData::getCurrent(*ctx->renderer());
301 QSSG_ASSERT_X(layer, "No active layer for renderer!", return {});
302 auto *renderModel = QSSGRenderGraphObjectUtils::getNode<QSSGRenderModel>(model);
303 QSSG_ASSERT_X(renderModel && renderModel->type == QSSGRenderGraphObject::Type::Model, "Invalid model-id!", return {});
304 return (prepId != QSSGPrepContextId::Invalid) ? layer->getGlobalOpacity(prepId, *renderModel)
305 : renderModel->globalOpacity;
306}
307
314{
315 Q_UNUSED(frameData);
316 auto *renderModel = QSSGRenderGraphObjectUtils::getNode<QSSGRenderModel>(model);
317 QSSG_ASSERT_X(renderModel && renderModel->type == QSSGRenderGraphObject::Type::Model, "Invalid model-id!", return {});
318 return renderModel->localOpacity;
319}
320
329 QSSGRenderablesId renderablesId,
331 const QMatrix4x4 &transform)
332{
333 auto *ctx = frameData.contextInterface();
334 auto *layer = QSSGLayerRenderData::getCurrent(*ctx->renderer());
335 QSSG_ASSERT_X(layer, "No active layer for renderer!", return);
337 QSSG_ASSERT_X(node && node->type == QSSGRenderGraphObject::Type::Model, "Invalid model-id!", return);
338 const auto &renderModel = static_cast<const QSSGRenderModel &>(*node);
339 layer->setGlobalTransform(renderablesId, renderModel, transform);
340}
341
349void QSSGModelHelpers::setGlobalOpacity(const QSSGFrameData &frameData, QSSGRenderablesId renderablesId, QSSGNodeId model, float opacity)
350{
351 auto *ctx = frameData.contextInterface();
352 auto *layer = QSSGLayerRenderData::getCurrent(*ctx->renderer());
353 QSSG_ASSERT_X(layer, "No active layer for renderer!", return);
355 QSSG_ASSERT_X(node && node->type == QSSGRenderGraphObject::Type::Model, "Invalid model-id!", return);
356 const auto &renderModel = static_cast<const QSSGRenderModel &>(*node);
357 layer->setGlobalOpacity(renderablesId, renderModel, opacity);
358}
359
379 const QMatrix4x4 *globalTransform)
380{
381 auto *renderCamera = QSSGRenderGraphObjectUtils::getCamera<QSSGRenderCamera>(cameraId);
382 QSSG_ASSERT(renderCamera && QSSGRenderGraphObject::isCamera(renderCamera->type), return {});
383
385 const auto &projection = renderCamera->projection;
386 const auto &transform = (globalTransform != 0) ? *globalTransform : renderCamera->globalTransform;
388 return mat44;
389}
390
416{
417 if (auto *ext = QSSGRenderGraphObjectUtils::getExtension<QSSGRenderExtension>(extension)) {
419 ctx->bufferManager()->registerExtensionResult(*ext, texture);
420 }
421}
422
Definition qlist.h:75
qsizetype size() const noexcept
Definition qlist.h:397
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
Definition qmatrix4x4.h:25
\inmodule QtGui
Definition qrhi.h:1142
\inmodule QtGui
Definition qrhi.h:895
static QMatrix4x4 getViewProjectionMatrix(const QSSGCameraId cameraId, const QMatrix4x4 *globalTransform=nullptr)
Get the projection matrix for cameraId.
\inmodule QtQuick3D
QSSGRenderContextInterface * contextInterface() const
static QSSGLayerRenderData * getCurrent(const QSSGRenderer &renderer)
static float getLocalOpacity(const QSSGFrameData &frameData, QSSGNodeId model)
static void setGlobalTransform(const QSSGFrameData &frameData, QSSGRenderablesId prepId, QSSGNodeId model, const QMatrix4x4 &transform)
Sets the global transform for model in the context of the renderablesId.
static QMatrix4x4 getLocalTransform(const QSSGFrameData &frameData, QSSGNodeId model)
static QMatrix4x4 getGlobalTransform(const QSSGFrameData &frameData, QSSGNodeId model, QSSGPrepContextId prepId={})
static float getGlobalOpacity(const QSSGFrameData &frameData, QSSGNodeId model)
static void setModelMaterials(const QSSGFrameData &frameData, QSSGRenderablesId renderablesId, QSSGNodeId model, MaterialList materials)
Sets the materials to be used on model.
static void setGlobalOpacity(const QSSGFrameData &frameData, QSSGRenderablesId renderablesId, QSSGNodeId model, float opacity)
Sets the global opacity for model in the context of the renderablesId.
const std::unique_ptr< QSSGBufferManager > & bufferManager() const
static void registerRenderResult(const QSSGFrameData &frameData, QSSGExtensionId extension, QRhiTexture *texture)
Register a render result, in form of a texture, for this extension.
\inmodule QtQuick3D
static constexpr bool isCamera(Type type) noexcept
static QSSGRenderablesId createRenderables(const QSSGFrameData &frameData, QSSGPrepContextId prepId, const NodeList &nodes, CreateFlags flags=CreateFlag::None)
Takes a list of node ids and create renderables that can be further processed by the renderer.
static QSSGPrepContextId prepareForRender(const QSSGFrameData &frameData, const QSSGRenderExtension &ext, QSSGCameraId cameraId, quint32 slot=0)
prepareForRender() creates a context for collecting and storing information about the render-data ass...
static QSSGPrepResultId commit(const QSSGFrameData &frameData, QSSGPrepContextId prepId, QSSGRenderablesId renderablesId, float lodThreshold=1.0f)
Once the required changes have been done to the renderables, the data can marked as ready for the ren...
static void renderRenderables(const QSSGFrameData &frameData, QSSGPrepResultId prepId)
Render the renderables.
static void prepareRenderables(const QSSGFrameData &frameData, QSSGPrepResultId prepId, QRhiRenderPassDescriptor *renderPassDescriptor, QSSGRhiGraphicsPipelineState &ps, QSSGRenderablesFilters filter=QSSGRenderablesFilter::All)
Prepare the draw call data needed for the renderables before calling \l {renderRenderables}.
EGLContext ctx
void extension()
[6]
Definition dialogs.cpp:230
Combined button and popup list for selecting options.
constexpr Initialization Uninitialized
EGLOutputLayerEXT layer
GLbitfield flags
GLenum GLuint texture
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
GLuint GLenum GLenum transform
#define QSSG_ASSERT_X(cond, msg, action)
#define QSSG_ASSERT(cond, action)
QSSGExtensionId
QSSGPrepResultId
QSSGRenderablesId
QSSGPrepContextId
#define Q_UNUSED(x)
unsigned int quint32
Definition qtypes.h:50
QSqlQueryModel * model
[16]
static void calculateViewProjectionMatrix(const QMatrix4x4 &globalTransform, const QMatrix4x4 &projection, QMatrix4x4 &outMatrix)