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);
83 debugCamera = std::make_unique<QSSGRenderCamera>(QSSGRenderGraphObject::Type::OrthographicCamera);
101 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
102 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
109 rhiRenderShadowMap(rhiCtx.get(),
147 ps =
data.getPipelineState();
155 const auto &sortedOpaqueObjects =
data.getSortedOpaqueRenderableObjects(*
camera);
156 const auto &sortedTransparentObjects =
data.getSortedTransparentRenderableObjects(*
camera);
157 const auto &sortedScreenTextureObjects =
data.getSortedScreenTextureRenderableObjects(*
camera);
163 for (
const auto &handles : { &sortedOpaqueObjects, &sortedTransparentObjects, &sortedScreenTextureObjects }) {
164 for (
const auto &
handle : *handles) {
185 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
186 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
197 rhiRenderReflectionMap(rhiCtx.get(),
239 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
240 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
242 ps =
data.getPipelineState();
250 active = rhiPrepareDepthPass(rhiCtx.get(),
this,
ps, rhiCtx->mainRenderPassDescriptor(),
data,
252 rhiCtx->mainPassSampleCount(), rhiCtx->mainPassViewCount());
262 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
263 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
265 bool needsSetViewport =
true;
295 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
296 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
300 QSSG_ASSERT_X(!
data.renderedCameras.isEmpty(),
"Preparing AO pass failed, missing camera",
return);
304 const auto &shaderCache =
renderer.contextInterface()->shaderCache();
305 ssaoShaderPipeline = shaderCache->getBuiltInRhiShaders().getRhiSsaoShader(rhiCtx->mainPassViewCount());
308 ps =
data.getPipelineState();
309 const auto &layerPrepResult =
data.layerPrepResult;
310 const bool ready =
rhiAoTexture && rhiPrepareAoTexture(rhiCtx.get(), layerPrepResult.textureDimensions(),
rhiAoTexture);
331 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
332 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
340 rhiRenderAoTexture(rhiCtx.get(),
372 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
373 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
374 const auto &layerPrepResult =
data.layerPrepResult;
376 ps =
data.getPipelineState();
384 1, rhiCtx->mainPassViewCount());
411 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
412 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
417 bool needsSetViewport =
true;
454 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
455 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
458 const auto &layerPrepResult =
data.layerPrepResult;
459 wantsMips = layerPrepResult.flags.requiresMipmapsForScreenTexture();
461 ps =
data.getPipelineState();
510 bool recRef =
handle.obj->renderableFlags.receivesReflections();
511 handle.obj->renderableFlags.setReceivesReflections(
false);
513 handle.obj->renderableFlags.setReceivesReflections(recRef);
535 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
536 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
546 bool needsSetViewport =
true;
548 rhiRenderRenderable(rhiCtx.get(),
ps, *
handle.obj, &needsSetViewport);
557 rub = rhiCtx->rhi()->nextResourceUpdateBatch();
587 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
588 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
593 const auto shaderFeatures =
data.getShaderFeatures();
597 const int samples = rhiCtx->mainPassSampleCount();
598 const int viewCount = rhiCtx->mainPassViewCount();
601 ps =
data.getPipelineState();
612 ||
data.isZPrePassActive() || !layerEnableDepthTest);
621 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
622 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
629 bool needsSetViewport =
true;
655 const auto &rhiCtx =
ctx.rhiContext();
666 data.isZPrePassActive() || !layerEnableDepthTest);
676 const auto &rhiCtx =
ctx.rhiContext();
677 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
678 bool needsSetViewport =
true;
688 const auto &rhiCtx =
ctx->rhiContext();
689 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
690 QSSG_ASSERT(!
data.renderedCameras.isEmpty() &&
data.renderedCameraData.has_value() ,
return);
693 ps =
data.getPipelineState();
694 ps.
samples = rhiCtx->mainPassSampleCount();
710 const auto &rhiCtx =
ctx->rhiContext();
711 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
738 const auto &rhiCtx =
ctx.rhiContext();
741 const bool zPrePassActive =
data.isZPrePassActive();
747 if (!(theObject->renderableFlags.isCompletelyTransparent()))
756 const auto &rhiCtx =
ctx.rhiContext();
757 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
761 bool needsSetViewport =
true;
764 if (!theObject->renderableFlags.isCompletelyTransparent())
772 const auto &rhiCtx =
ctx->rhiContext();
774 QSSG_ASSERT(!
data.renderedCameras.isEmpty() &&
data.renderedCameraData.has_value() ,
return);
779 ps =
data.getPipelineState();
780 ps.
samples = rhiCtx->mainPassSampleCount();
796 const auto &rhiCtx =
ctx->rhiContext();
797 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
819 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
820 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
822 QSSG_ASSERT(
data.renderedCameras.count() == rhiCtx->mainPassViewCount(),
return);
826 rpDesc = rhiCtx->mainRenderPassDescriptor();
827 ps =
data.getPipelineState();
828 ps.
samples = rhiCtx->mainPassSampleCount();
844 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
845 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
858 const auto &shaderCache =
renderer.contextInterface()->shaderCache();
859 auto shaderPipeline = shaderCache->getBuiltInRhiShaders().getRhiSkyBoxShader(tonemapMode,
layer->skyBoxIsRgbe8, rhiCtx->mainPassViewCount());
862 renderer.rhiQuadRenderer()->recordRenderQuad(rhiCtx.get(), &
ps, srb,
rpDesc, { QSSGRhiQuadRenderer::DepthTest | QSSGRhiQuadRenderer::RenderBehind });
875 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
876 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
878 QSSG_ASSERT(
data.renderedCameras.count() == rhiCtx->mainPassViewCount(),
return);
882 rpDesc = rhiCtx->mainRenderPassDescriptor();
883 ps =
data.getPipelineState();
884 ps.
samples = rhiCtx->mainPassSampleCount();
888 const auto &shaderCache =
renderer.contextInterface()->shaderCache();
889 skyBoxCubeShader = shaderCache->getBuiltInRhiShaders().getRhiSkyBoxCubeShader(rhiCtx->mainPassViewCount());
896 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
897 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
907 renderer.rhiCubeRenderer()->recordRenderCube(rhiCtx.get(), &
ps, srb,
rpDesc, { QSSGRhiQuadRenderer::DepthTest | QSSGRhiQuadRenderer::RenderBehind });
919 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
920 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
923 ps =
data.getPipelineState();
929 for (
const auto &item2D: std::as_const(
item2Ds)) {
931 if (!item2D->m_renderer)
933 if (item2D->m_renderer && item2D->m_renderer->currentRhi() !=
renderer.contextInterface()->rhiContext()->rhi()) {
934 static bool contextWarningShown =
false;
935 if (!contextWarningShown) {
936 qWarning () <<
"Scene with embedded 2D content can only be rendered in one window.";
937 contextWarningShown =
true;
942 auto layerPrepResult =
data.layerPrepResult;
947 const int viewCount = rhiCtx->mainPassViewCount();
948 QSSG_ASSERT(item2D->mvps.count() == viewCount,
return);
949 if (
layer.scissorRect.isValid()) {
950 QRect effScissor =
layer.scissorRect & layerPrepResult.viewport.toRect();
953 rhiCtx->rhi()->isYUpInNDC());
954 for (
int viewIndex = 0; viewIndex < viewCount; ++viewIndex) {
955 const QMatrix4x4 projectionMatrix = correctionMat * item2D->mvps[viewIndex];
956 item2D->m_renderer->setProjectionMatrix(projectionMatrix, viewIndex);
958 item2D->m_renderer->setViewportRect(effScissor);
960 for (
int viewIndex = 0; viewIndex < viewCount; ++viewIndex)
961 item2D->m_renderer->setProjectionMatrix(item2D->mvps[viewIndex], viewIndex);
964 item2D->m_renderer->setDeviceRect(
deviceRect);
969 if (!item2D->m_rp->isCompatible(rhiCtx->mainRenderPassDescriptor()))
970 std::swap(item2D->m_rp, oldRp);
976 item2D->m_rp = rhiCtx->mainRenderPassDescriptor()->newCompatibleRenderPassDescriptor();
979 QSGRenderTarget sgRt(renderTarget, item2D->m_rp, rhiCtx->commandBuffer());
980 sgRt.multiViewCount = rhiCtx->mainPassViewCount();
981 item2D->m_renderer->setRenderTarget(sgRt);
983 item2D->m_renderer->prepareSceneInline();
991 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
992 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
1000 if (item2D->m_renderer && item2D->m_renderer->currentRhi() ==
renderer.contextInterface()->rhiContext()->rhi())
1015 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
1016 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
1018 QSSG_ASSERT(
data.renderedCameras.count() == rhiCtx->mainPassViewCount(),
return);
1022 const auto &shaderCache =
renderer.contextInterface()->shaderCache();
1023 gridShader = shaderCache->getBuiltInRhiShaders().getRhiGridShader(rhiCtx->mainPassViewCount());
1025 ps =
data.getPipelineState();
1026 ps.
samples = rhiCtx->mainPassSampleCount();
1035 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
1045 renderer.rhiQuadRenderer()->recordRenderQuad(rhiCtx.get(), &
ps, srb, rpDesc, { QSSGRhiQuadRenderer::DepthTest });
1057 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
1058 QSSG_ASSERT(rhiCtx->rhi()->isRecordingFrame(),
return);
1061 QSSG_ASSERT(
data.renderedCameras.count() == rhiCtx->mainPassViewCount(),
return);
1063 const auto &shaderCache =
renderer.contextInterface()->shaderCache();
1064 debugObjectShader = shaderCache->getBuiltInRhiShaders().getRhiDebugObjectShader();
1065 ps =
data.getPipelineState();
1068 const auto &debugDraw =
renderer.contextInterface()->debugDrawSystem();
1069 if (debugDraw && debugDraw->hasContent()) {
1070 QRhi *rhi = rhiCtx->rhi();
1072 debugDraw->prepareGeometry(rhiCtx.get(), rub);
1078 char *ubufData = dcd.ubuf->beginFullDynamicBufferUpdateForCurrentFrame();
1079 for (
qsizetype viewIdx = 0; viewIdx <
data.renderedCameras.count(); ++viewIdx) {
1081 data.renderedCameras[viewIdx]->calculateViewProjectionMatrix(viewProjection);
1083 memcpy(ubufData, viewProjection.
constData() + viewIdx * 64, 64);
1085 dcd.ubuf->endFullDynamicBufferUpdateForCurrentFrame();
1089 dcd.srb = rhiCtxD->srb(bindings);
1091 rhiCtx->commandBuffer()->resourceUpdate(rub);
1097 const auto &rhiCtx =
renderer.contextInterface()->rhiContext();
1102 const auto &debugDraw =
renderer.contextInterface()->debugDrawSystem();
1103 if (debugDraw && debugDraw->hasContent()) {
1111 debugDraw->recordRenderDebugObjects(rhiCtx.get(), &
ps, srb, rpDesc);
1125 auto &frameData =
data.getFrameData();
1127 p->prepareRender(frameData);
1129 p->render(frameData);
1137 auto &frameData =
data->getFrameData();
1140 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
QSSGBounds3 castingObjectsBox
QSSGShaderLightList globalLights
QSSGRenderableObjectList shadowPassObjects
QSSGRhiGraphicsPipelineState ps
QSSGBounds3 receivingObjectsBox
void resetForFrame() final
std::unique_ptr< QSSGRenderCamera > debugCamera
void renderPass(QSSGRenderer &renderer) final
std::shared_ptr< QSSGRenderShadowMap > shadowMapManager
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()