12#include "../utils/qssgassert_p.h"
14#include <QtQuick/private/qsgrenderer_p.h>
15#include <qtquick3d_tracepoints_p.h>
20 const auto &scissorCenter = scissorRect.
center();
21 const auto &viewCenter = viewportRect.
center();
22 const float scaleX = viewportRect.
width() / float(scissorRect.
width());
23 const float scaleY = viewportRect.
height() / float(scissorRect.
height());
24 const float dx = 2 * (viewCenter.x() - scissorCenter.x()) / scissorRect.
width();
25 const float dyRect = isYUp ? (scissorCenter.y() - viewCenter.y())
26 : (viewCenter.y() - scissorCenter.y());
27 const float dy = 2 * dyRect / scissorRect.
height();
30 0.0f, scaleY, 0.0f, dy,
31 0.0f, 0.0f, 1.0f, 0.0f,
32 0.0f, 0.0f, 0.0f, 1.0f);
50 const auto &renderedDepthWriteObjects =
data.getSortedRenderedDepthWriteObjects(*
camera);
51 const auto &renderedOpaqueDepthPrepassObjects =
data.getSortedrenderedOpaqueDepthPrepassObjects(*
camera);
55 for (
const auto &handles : { &renderedDepthWriteObjects, &renderedOpaqueDepthPrepassObjects }) {
56 for (
const auto &
handle : *handles) {
57 if (
handle.obj->renderableFlags.castsShadows())
69 ps =
data.getPipelineState();
75 const auto &sortedOpaqueObjects =
data.getSortedOpaqueRenderableObjects(*
camera);
76 const auto &sortedTransparentObjects =
data.getSortedTransparentRenderableObjects(*
camera);
77 const auto [casting, receiving] = calculateSortedObjectBounds(sortedOpaqueObjects,
78 sortedTransparentObjects);
97 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
98 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
105 rhiRenderShadowMap(rhiCtx.get(),
142 ps =
data.getPipelineState();
150 const auto &sortedOpaqueObjects =
data.getSortedOpaqueRenderableObjects(*
camera);
151 const auto &sortedTransparentObjects =
data.getSortedTransparentRenderableObjects(*
camera);
152 const auto &sortedScreenTextureObjects =
data.getSortedScreenTextureRenderableObjects(*
camera);
158 for (
const auto &handles : { &sortedOpaqueObjects, &sortedTransparentObjects, &sortedScreenTextureObjects }) {
159 for (
const auto &
handle : *handles) {
180 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
181 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
192 rhiRenderReflectionMap(rhiCtx.get(),
234 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
235 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
237 ps =
data.getPipelineState();
245 active = rhiPrepareDepthPass(rhiCtx.get(),
this,
ps, rhiCtx->mainRenderPassDescriptor(),
data,
247 rhiCtx->mainPassSampleCount(), rhiCtx->mainPassViewCount());
257 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
258 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
260 bool needsSetViewport =
true;
290 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
291 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
295 QSSG_ASSERT_X(!
data.renderedCameras.isEmpty(),
"Preparing AO pass failed, missing camera",
return);
299 const auto &shaderCache =
renderer.contextInterface()->shaderCache();
300 ssaoShaderPipeline = shaderCache->getBuiltInRhiShaders().getRhiSsaoShader(rhiCtx->mainPassViewCount());
303 ps =
data.getPipelineState();
304 const auto &layerPrepResult =
data.layerPrepResult;
305 const bool ready =
rhiAoTexture && rhiPrepareAoTexture(rhiCtx.get(), layerPrepResult.textureDimensions(),
rhiAoTexture);
326 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
327 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
335 rhiRenderAoTexture(rhiCtx.get(),
367 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
368 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
369 const auto &layerPrepResult =
data.layerPrepResult;
371 ps =
data.getPipelineState();
379 1, rhiCtx->mainPassViewCount());
406 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
407 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
412 bool needsSetViewport =
true;
449 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
450 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
453 const auto &layerPrepResult =
data.layerPrepResult;
454 wantsMips = layerPrepResult.flags.requiresMipmapsForScreenTexture();
456 ps =
data.getPipelineState();
505 bool recRef =
handle.obj->renderableFlags.receivesReflections();
506 handle.obj->renderableFlags.setReceivesReflections(
false);
508 handle.obj->renderableFlags.setReceivesReflections(recRef);
530 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
531 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
541 bool needsSetViewport =
true;
543 rhiRenderRenderable(rhiCtx.get(),
ps, *
handle.obj, &needsSetViewport);
552 rub = rhiCtx->rhi()->nextResourceUpdateBatch();
582 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
583 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
588 const auto shaderFeatures =
data.getShaderFeatures();
592 const int samples = rhiCtx->mainPassSampleCount();
593 const int viewCount = rhiCtx->mainPassViewCount();
596 ps =
data.getPipelineState();
607 ||
data.isZPrePassActive() || !layerEnableDepthTest);
616 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
617 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
624 bool needsSetViewport =
true;
650 const auto &rhiCtx =
ctx.rhiContext();
661 data.isZPrePassActive() || !layerEnableDepthTest);
671 const auto &rhiCtx =
ctx.rhiContext();
672 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
673 bool needsSetViewport =
true;
683 const auto &rhiCtx =
ctx->rhiContext();
684 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
685 QSSG_ASSERT(!
data.renderedCameras.isEmpty() &&
data.renderedCameraData.has_value() ,
return);
688 ps =
data.getPipelineState();
689 ps.
samples = rhiCtx->mainPassSampleCount();
705 const auto &rhiCtx =
ctx->rhiContext();
706 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
733 const auto &rhiCtx =
ctx.rhiContext();
736 const bool zPrePassActive =
data.isZPrePassActive();
742 if (!(theObject->renderableFlags.isCompletelyTransparent()))
751 const auto &rhiCtx =
ctx.rhiContext();
752 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
756 bool needsSetViewport =
true;
759 if (!theObject->renderableFlags.isCompletelyTransparent())
767 const auto &rhiCtx =
ctx->rhiContext();
769 QSSG_ASSERT(!
data.renderedCameras.isEmpty() &&
data.renderedCameraData.has_value() ,
return);
774 ps =
data.getPipelineState();
775 ps.
samples = rhiCtx->mainPassSampleCount();
791 const auto &rhiCtx =
ctx->rhiContext();
792 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
814 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
815 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
817 QSSG_ASSERT(
data.renderedCameras.count() == rhiCtx->mainPassViewCount(),
return);
821 rpDesc = rhiCtx->mainRenderPassDescriptor();
822 ps =
data.getPipelineState();
823 ps.
samples = rhiCtx->mainPassSampleCount();
839 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
840 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
853 const auto &shaderCache =
renderer.contextInterface()->shaderCache();
854 auto shaderPipeline = shaderCache->getBuiltInRhiShaders().getRhiSkyBoxShader(tonemapMode,
layer->skyBoxIsRgbe8, rhiCtx->mainPassViewCount());
857 renderer.rhiQuadRenderer()->recordRenderQuad(rhiCtx.get(), &
ps, srb,
rpDesc, { QSSGRhiQuadRenderer::DepthTest | QSSGRhiQuadRenderer::RenderBehind });
870 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
871 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
873 QSSG_ASSERT(
data.renderedCameras.count() == rhiCtx->mainPassViewCount(),
return);
877 rpDesc = rhiCtx->mainRenderPassDescriptor();
878 ps =
data.getPipelineState();
879 ps.
samples = rhiCtx->mainPassSampleCount();
883 const auto &shaderCache =
renderer.contextInterface()->shaderCache();
884 skyBoxCubeShader = shaderCache->getBuiltInRhiShaders().getRhiSkyBoxCubeShader(rhiCtx->mainPassViewCount());
891 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
892 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
902 renderer.rhiCubeRenderer()->recordRenderCube(rhiCtx.get(), &
ps, srb,
rpDesc, { QSSGRhiQuadRenderer::DepthTest | QSSGRhiQuadRenderer::RenderBehind });
914 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
915 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
918 ps =
data.getPipelineState();
924 for (
const auto &item2D: std::as_const(
item2Ds)) {
926 if (!item2D->m_renderer)
928 if (item2D->m_renderer && item2D->m_renderer->currentRhi() !=
renderer.contextInterface()->rhiContext()->rhi()) {
929 static bool contextWarningShown =
false;
930 if (!contextWarningShown) {
931 qWarning () <<
"Scene with embedded 2D content can only be rendered in one window.";
932 contextWarningShown =
true;
937 auto layerPrepResult =
data.layerPrepResult;
942 const int viewCount = rhiCtx->mainPassViewCount();
943 QSSG_ASSERT(item2D->mvps.count() == viewCount,
return);
944 if (
layer.scissorRect.isValid()) {
945 QRect effScissor =
layer.scissorRect & layerPrepResult.viewport.toRect();
948 rhiCtx->rhi()->isYUpInNDC());
949 for (
int viewIndex = 0; viewIndex < viewCount; ++viewIndex) {
950 const QMatrix4x4 projectionMatrix = correctionMat * item2D->mvps[viewIndex];
951 item2D->m_renderer->setProjectionMatrix(projectionMatrix, viewIndex);
953 item2D->m_renderer->setViewportRect(effScissor);
955 for (
int viewIndex = 0; viewIndex < viewCount; ++viewIndex)
956 item2D->m_renderer->setProjectionMatrix(item2D->mvps[viewIndex], viewIndex);
959 item2D->m_renderer->setDeviceRect(
deviceRect);
964 if (!item2D->m_rp->isCompatible(rhiCtx->mainRenderPassDescriptor()))
965 std::swap(item2D->m_rp, oldRp);
971 item2D->m_rp = rhiCtx->mainRenderPassDescriptor()->newCompatibleRenderPassDescriptor();
974 QSGRenderTarget sgRt(renderTarget, item2D->m_rp, rhiCtx->commandBuffer());
975 sgRt.multiViewCount = rhiCtx->mainPassViewCount();
976 item2D->m_renderer->setRenderTarget(sgRt);
978 item2D->m_renderer->prepareSceneInline();
986 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
987 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
995 if (item2D->m_renderer && item2D->m_renderer->currentRhi() ==
renderer.contextInterface()->rhiContext()->rhi())
1010 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
1011 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
1013 QSSG_ASSERT(
data.renderedCameras.count() == rhiCtx->mainPassViewCount(),
return);
1017 const auto &shaderCache =
renderer.contextInterface()->shaderCache();
1018 gridShader = shaderCache->getBuiltInRhiShaders().getRhiGridShader(rhiCtx->mainPassViewCount());
1020 ps =
data.getPipelineState();
1021 ps.
samples = rhiCtx->mainPassSampleCount();
1030 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
1040 renderer.rhiQuadRenderer()->recordRenderQuad(rhiCtx.get(), &
ps, srb, rpDesc, { QSSGRhiQuadRenderer::DepthTest });
1052 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
1053 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
1056 QSSG_ASSERT(
data.renderedCameras.count() == rhiCtx->mainPassViewCount(),
return);
1058 const auto &shaderCache =
renderer.contextInterface()->shaderCache();
1059 debugObjectShader = shaderCache->getBuiltInRhiShaders().getRhiDebugObjectShader();
1060 ps =
data.getPipelineState();
1063 const auto &debugDraw =
renderer.contextInterface()->debugDrawSystem();
1064 if (debugDraw && debugDraw->hasContent()) {
1065 QRhi *rhi = rhiCtx->rhi();
1067 debugDraw->prepareGeometry(rhiCtx.get(), rub);
1073 char *ubufData = dcd.ubuf->beginFullDynamicBufferUpdateForCurrentFrame();
1074 for (
qsizetype viewIdx = 0; viewIdx <
data.renderedCameras.count(); ++viewIdx) {
1076 data.renderedCameras[viewIdx]->calculateViewProjectionMatrix(viewProjection);
1078 memcpy(ubufData, viewProjection.
constData() + viewIdx * 64, 64);
1080 dcd.ubuf->endFullDynamicBufferUpdateForCurrentFrame();
1084 dcd.srb = rhiCtxD->srb(bindings);
1086 rhiCtx->commandBuffer()->resourceUpdate(rub);
1092 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
1097 const auto &debugDraw =
renderer.contextInterface()->debugDrawSystem();
1098 if (debugDraw && debugDraw->hasContent()) {
1106 debugDraw->recordRenderDebugObjects(rhiCtx.get(), &
ps, srb, rpDesc);
1120 auto &frameData =
data.getFrameData();
1122 p->prepareRender(frameData);
1124 p->render(frameData);
1132 auto &frameData =
data->getFrameData();
1135 p->render(frameData);
QSSGRhiShaderPipelinePtr debugObjectShader
QSSGRhiGraphicsPipelineState ps
void renderPass(QSSGRenderer &renderer) final
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void resetForFrame() final
void resetForFrame() final
QSSGRhiRenderableTexture * rhiDepthTexture
QSSGRhiGraphicsPipelineState ps
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
QSSGRenderableObjectList sortedTransparentObjects
void renderPass(QSSGRenderer &renderer) final
QSSGRenderableObjectList sortedOpaqueObjects
void renderPass(QSSGRenderer &renderer) final
QSSGRhiGraphicsPipelineState ps
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
QSSGRhiShaderPipelinePtr gridShader
void resetForFrame() final
QList< QSSGRenderItem2D * > item2Ds
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void renderPass(QSSGRenderer &renderer) final
void resetForFrame() final
QSSGRhiGraphicsPipelineState ps
static void prep(const QSSGRenderContextInterface &ctx, QSSGLayerRenderData &data, QSSGPassKey passKey, QSSGRhiGraphicsPipelineState &ps, QSSGShaderFeatures shaderFeatures, QRhiRenderPassDescriptor *rpDesc, const QSSGRenderableObjectList &sortedOpaqueObjects)
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void resetForFrame() final
void renderPass(QSSGRenderer &renderer) final
QSSGShaderFeatures shaderFeatures
QSSGRhiGraphicsPipelineState ps
static void render(const QSSGRenderContextInterface &ctx, const QSSGRhiGraphicsPipelineState &ps, const QSSGRenderableObjectList &sortedOpaqueObjects)
QSSGRenderableObjectList sortedOpaqueObjects
static QColor fromRgbF(float r, float g, float b, float a=1.0)
Static convenience function that returns a QColor constructed from the RGB color values,...
bool isEmpty() const noexcept
void push_back(parameter_type t)
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
const float * constData() const
Returns a constant pointer to the raw data of this matrix.
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
constexpr qreal height() const noexcept
Returns the height of the rectangle.
constexpr qreal width() const noexcept
Returns the width of the rectangle.
constexpr QPointF center() const noexcept
Returns the center point of the rectangle.
\inmodule QtCore\reentrant
constexpr int height() const noexcept
Returns the height of the rectangle.
constexpr int width() const noexcept
Returns the width of the rectangle.
constexpr QPoint center() const noexcept
Returns the center point of the rectangle.
virtual bool create()=0
Creates the corresponding native graphics resources.
virtual QSize pixelSize() const =0
virtual float devicePixelRatio() const =0
void generateMips(QRhiTexture *tex)
Enqueues a mipmap generation operation for the specified texture tex.
\inmodule QtGuiPrivate \inheaderfile rhi/qrhi.h
QRhiBuffer * newBuffer(QRhiBuffer::Type type, QRhiBuffer::UsageFlags usage, quint32 size)
QMatrix4x4 clipSpaceCorrMatrix() const
bool isRecordingFrame() const
QRhiResourceUpdateBatch * nextResourceUpdateBatch()
void renderSceneInline() override
static QSSGLayerRenderData * getCurrent(const QSSGRenderer &renderer)
virtual ~QSSGRenderPass()
static QSSGRhiContextPrivate * get(QSSGRhiContext *q)
float slopeScaledDepthBias
QRhiGraphicsPipeline::PolygonMode polygonMode
QRhiGraphicsPipeline::CompareOp depthFunc
void addUniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, int offset=0, int size=0)
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void renderPass(QSSGRenderer &renderer) final
void resetForFrame() final
std::shared_ptr< QSSGRenderReflectionMap > reflectionMapManager
QSSGRenderableObjectList reflectionPassObjects
QSSGRhiGraphicsPipelineState ps
QList< QSSGRenderReflectionProbe * > reflectionProbes
QSSGRhiRenderableTexture * rhiAoTexture
const QSSGRhiRenderableTexture * rhiDepthTexture
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void resetForFrame() final
QSSGRhiShaderPipelinePtr ssaoShaderPipeline
QSSGAmbientOcclusionSettings aoSettings
void renderPass(QSSGRenderer &renderer) final
const QSSGRenderCamera * camera
QSSGRhiGraphicsPipelineState ps
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void renderPass(QSSGRenderer &renderer) final
void resetForFrame() final
QSSGRhiGraphicsPipelineState ps
std::optional< SkyboxPass > skyboxPass
QSSGShaderFeatures shaderFeatures
QSSGRenderableObjectList sortedOpaqueObjects
std::optional< SkyboxCubeMapPass > skyboxCubeMapPass
QSSGRhiRenderableTexture * rhiScreenTexture
QSSGRenderableObjectList sortedScreenTextureObjects
const QSSGRhiRenderableTexture * rhiScreenTexture
void renderPass(QSSGRenderer &renderer) final
QSSGRhiGraphicsPipelineState ps
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void resetForFrame() final
QSSGRenderCamera * camera
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
QSSGShaderLightList globalLights
QSSGRenderableObjectList shadowPassObjects
QSSGRhiGraphicsPipelineState ps
void resetForFrame() final
QSSGBoxPoints castingObjectsBox
void renderPass(QSSGRenderer &renderer) final
std::shared_ptr< QSSGRenderShadowMap > shadowMapManager
QSSGBoxPoints receivingObjectsBox
QRhiRenderPassDescriptor * rpDesc
void renderPass(QSSGRenderer &renderer) final
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
QSSGRhiShaderPipelinePtr skyBoxCubeShader
QSSGRhiGraphicsPipelineState ps
void resetForFrame() final
void renderPass(QSSGRenderer &renderer) final
void resetForFrame() final
QRhiRenderPassDescriptor * rpDesc
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
QSSGRhiGraphicsPipelineState ps
QSSGRenderableObjectList sortedTransparentObjects
static void render(const QSSGRenderContextInterface &ctx, const QSSGRhiGraphicsPipelineState &ps, const QSSGRenderableObjectList &sortedTransparentObjects)
void renderPass(QSSGRenderer &renderer) final
QSSGShaderFeatures shaderFeatures
QSSGRhiGraphicsPipelineState ps
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void resetForFrame() final
static void prep(const QSSGRenderContextInterface &ctx, QSSGLayerRenderData &data, QSSGPassKey passKey, QSSGRhiGraphicsPipelineState &ps, QSSGShaderFeatures shaderFeatures, QRhiRenderPassDescriptor *rpDesc, const QSSGRenderableObjectList &sortedTransparentObjects)
void renderPass(QSSGRenderer &renderer) final
QList< QSSGRenderExtension * > extensions
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
void resetForFrame() final
void resetForFrame() final
void renderPass(QSSGRenderer &renderer) final
QSSGRenderableObjectList renderedOpaqueDepthPrepassObjects
QSSGRhiGraphicsPipelineState ps
void renderPrep(QSSGRenderer &renderer, QSSGLayerRenderData &data) final
QSSGRenderableObjectList renderedDepthWriteObjects
Combined button and popup list for selecting options.
constexpr Initialization Uninitialized
void rhiPrepareGrid(QSSGRhiContext *rhiCtx, QSSGPassKey passKey, QSSGRenderLayer &layer, QSSGRenderCameraList &cameras, QSSGRenderer &renderer)
Q_QUICK3DRUNTIMERENDER_EXPORT void rhiRenderRenderable(QSSGRhiContext *rhiCtx, const QSSGRhiGraphicsPipelineState &state, QSSGRenderableObject &object, bool *needsSetViewport, QSSGRenderTextureCubeFace cubeFace=QSSGRenderTextureCubeFaceNone)
QRect correctViewportCoordinates(const QRectF &layerViewport, const QRect &deviceRect)
void rhiPrepareSkyBox(QSSGRhiContext *rhiCtx, QSSGPassKey passKey, QSSGRenderLayer &layer, QSSGRenderCameraList &cameras, QSSGRenderer &renderer)
Q_QUICK3DRUNTIMERENDER_EXPORT void rhiPrepareRenderable(QSSGRhiContext *rhiCtx, QSSGPassKey passKey, const QSSGLayerRenderData &inData, QSSGRenderableObject &inObject, QRhiRenderPassDescriptor *renderPassDescriptor, QSSGRhiGraphicsPipelineState *ps, QSSGShaderFeatures featureSet, int samples, int viewCount, QSSGRenderCamera *alteredCamera=nullptr, QMatrix4x4 *alteredModelViewProjection=nullptr, QSSGRenderTextureCubeFace cubeFace=QSSGRenderTextureCubeFaceNone, QSSGReflectionMapEntry *entry=nullptr)
#define QByteArrayLiteral(str)
GLuint64 GLenum void * handle
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum GLenum GLsizei const GLuint GLboolean enabled
#define Q_QUICK3D_PROFILE_START(Type)
#define Q_QUICK3D_PROFILE_END_WITH_STRING(Type, Payload, Str)
#define QSSG_ASSERT_X(cond, msg, action)
#define QSSG_ASSERT(cond, action)
static QT_BEGIN_NAMESPACE QMatrix4x4 correctMVPForScissor(QRectF viewportRect, QRect scissorRect, bool isYUp)
#define QSSGRHICTX_STAT(ctx, f)
SSL_CTX int(* cb)(SSL *ssl, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg)
#define QStringLiteral(str)
#define Q_TRACE_SCOPE(x,...)
QSvgRenderer * renderer
[0]
QPointer< QSGRenderer > m_renderer
QSSGDepthDrawMode depthWriteMode
static void setShaderPipeline(QSSGRhiGraphicsPipelineState &ps, const QSSGRhiShaderPipeline *pipeline)
QRhiTextureRenderTarget * rt
QRhiRenderPassDescriptor * rpDesc
void disableTonemapping()