Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qssgrhieffectsystem_p.h
Go to the documentation of this file.
1// Copyright (C) 2008-2012 NVIDIA Corporation.
2// Copyright (C) 2020 The Qt Company Ltd.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
4
5#ifndef QSSGRHIEFFECTSYSTEM_P_H
6#define QSSGRHIEFFECTSYSTEM_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtQuick3DRuntimeRender/private/qssgrendereffect_p.h>
20#include <QtQuick3DRuntimeRender/private/qssgrhicontext_p.h>
21#include <QtQuick3DRuntimeRender/private/qssgrendercommands_p.h>
22
23QT_BEGIN_NAMESPACE
24
25struct QSSGRhiEffectTexture;
26class QSSGRenderer;
27
28class QSSGProgramGenerator;
29class QSSGShaderLibraryManager;
30class QSSGShaderCache;
31
33{
37
39
40 static size_t generateHashCode(const QByteArray &shaderPathKey, quintptr cmd, int ubufIndex)
41 {
42 return qHash(shaderPathKey) ^ qHash(cmd) ^ qHash(ubufIndex);
43 }
44
46 {
47 m_hashCode = generateHashCode(m_shaderPathKey, m_cmd, m_ubufIndex);
48 }
49
50 bool operator==(const QSSGEffectSceneCacheKey &other) const
51 {
52 return m_shaderPathKey == other.m_shaderPathKey
53 && m_cmd == other.m_cmd
54 && m_ubufIndex == other.m_ubufIndex;
55 }
56};
57
59{
60 return key.m_hashCode;
61}
62
63class Q_QUICK3DRUNTIMERENDER_EXPORT QSSGRhiEffectSystem
64{
65public:
66 explicit QSSGRhiEffectSystem(const std::shared_ptr<QSSGRenderContextInterface> &sgContext);
67 ~QSSGRhiEffectSystem();
68
69 void setup(QSize outputSize);
70 QRhiTexture *process(const QSSGRenderLayer &layer,
71 QRhiTexture *inTexture,
72 QRhiTexture *inDepthTexture,
73 QRhiTexture *inNormalTexture);
74
75 static QSSGRenderTextureFormat::Format overriddenOutputFormat(const QSSGRenderEffect *inEffect);
76
77 static QSSGRhiShaderPipelinePtr buildShaderForEffect(const QSSGBindShader &inCmd,
78 QSSGProgramGenerator &generator,
79 QSSGShaderLibraryManager &shaderLib,
80 QSSGShaderCache &shaderCache,
81 bool isYUpInFramebuffer,
82 int viewCount);
83
84private:
85 void releaseResources();
86 QSSGRhiEffectTexture *doRenderEffect(const QSSGRenderEffect *inEffect,
87 QSSGRhiEffectTexture *inTexture,
88 quint8 viewCount);
89
90 void allocateBufferCmd(const QSSGAllocateBuffer *inCmd, QSSGRhiEffectTexture *inTexture, const QSSGRenderEffect *inEffect, quint8 viewCount);
91 void applyInstanceValueCmd(const QSSGApplyInstanceValue *inCmd, const QSSGRenderEffect *inEffect);
92 void applyValueCmd(const QSSGApplyValue *inCmd, const QSSGRenderEffect *inEffect);
93 void bindShaderCmd(const QSSGBindShader *inCmd, const QSSGRenderEffect *inEffect, quint8 viewCount);
94 void renderCmd(const QSSGRenderEffect *inEffect, QSSGRhiEffectTexture *inTexture, QSSGRhiEffectTexture *target, quint8 viewCount);
95
96 void addCommonEffectUniforms(const QSSGRenderEffect *inEffect, const QSize &inputSize, const QSize &outputSize, quint8 viewCount);
97 void addTextureToShaderPipeline(const QByteArray &name, QRhiTexture *texture, const QSSGRhiSamplerDescription &samplerDesc);
98
99 QSSGRhiEffectTexture *findTexture(const QByteArray &bufferName);
100 QSSGRhiEffectTexture *getTexture(const QByteArray &bufferName, const QSize &size,
101 QRhiTexture::Format format, bool isFinalOutput,
102 const QSSGRenderEffect *inEffect, quint8 viewCount);
103 void releaseTexture(QSSGRhiEffectTexture *texture);
104 void releaseTextures();
105
106 QSize m_outSize;
107 std::shared_ptr<QSSGRenderContextInterface> m_sgContext;
108 QVector<QSSGRhiEffectTexture *> m_textures;
109 QRhiTexture *m_depthTexture = nullptr;
110 QRhiTexture *m_normalTexture = nullptr;
111 QVector2D m_cameraClipRange;
112 QVarLengthArray<QMatrix4x4, 2> m_projectionMatrices;
113 QVarLengthArray<QMatrix4x4, 2> m_viewMatrices;
114 int m_currentUbufIndex = 0;
115 QHash<QSSGEffectSceneCacheKey, QSSGRhiShaderPipelinePtr> m_shaderPipelines;
116 QSSGRhiShaderPipeline *m_currentShaderPipeline = nullptr;
117 char *m_currentUBufData = nullptr;
118 QHash<QByteArray, QSSGRhiTexture> m_currentTextures;
119 QSet<QRhiTextureRenderTarget *> m_pendingClears;
120};
121
122QT_END_NAMESPACE
123
124#endif
size_t qHash(const QSSGEffectSceneCacheKey &key)
bool operator==(const QSSGEffectSceneCacheKey &other) const
static size_t generateHashCode(const QByteArray &shaderPathKey, quintptr cmd, int ubufIndex)