Qt 6.x
The Qt SDK
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
24
26class QSSGRenderer;
27
30class QSSGShaderCache;
31
33{
37
38 size_t m_hashCode = 0;
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 {
48 }
49
51 {
52 return m_shaderPathKey == other.m_shaderPathKey
53 && m_cmd == other.m_cmd
54 && m_ubufIndex == other.m_ubufIndex;
55 }
56};
57
58inline size_t qHash(const QSSGEffectSceneCacheKey &key)
59{
60 return key.m_hashCode;
61}
62
63class Q_QUICK3DRUNTIMERENDER_EXPORT QSSGRhiEffectSystem
64{
65public:
66 explicit QSSGRhiEffectSystem(const std::shared_ptr<QSSGRenderContextInterface> &sgContext);
68
69 void setup(QSize outputSize);
70 QRhiTexture *process(const QSSGRenderEffect &firstEffect,
71 QRhiTexture *inTexture,
72 QRhiTexture *inDepthTexture,
73 QVector2D cameraClipRange);
74
75 static QSSGRenderTextureFormat::Format overriddenOutputFormat(const QSSGRenderEffect *inEffect);
76
77 static QSSGRhiShaderPipelinePtr buildShaderForEffect(const QSSGBindShader &inCmd,
79 QSSGShaderLibraryManager &shaderLib,
80 QSSGShaderCache &shaderCache,
81 bool isYUpInFramebuffer);
82
83private:
84 void releaseResources();
85 QSSGRhiEffectTexture *doRenderEffect(const QSSGRenderEffect *inEffect,
86 QSSGRhiEffectTexture *inTexture);
87
88 void allocateBufferCmd(const QSSGAllocateBuffer *inCmd, QSSGRhiEffectTexture *inTexture, const QSSGRenderEffect *inEffect);
89 void applyInstanceValueCmd(const QSSGApplyInstanceValue *inCmd, const QSSGRenderEffect *inEffect);
90 void applyValueCmd(const QSSGApplyValue *inCmd, const QSSGRenderEffect *inEffect);
91 void bindShaderCmd(const QSSGBindShader *inCmd, const QSSGRenderEffect *inEffect);
92 void renderCmd(QSSGRhiEffectTexture *inTexture, QSSGRhiEffectTexture *target);
93
94 void addCommonEffectUniforms(const QSize &inputSize, const QSize &outputSize);
95 void addTextureToShaderPipeline(const QByteArray &name, QRhiTexture *texture, const QSSGRhiSamplerDescription &samplerDesc);
96
97 QSSGRhiEffectTexture *findTexture(const QByteArray &bufferName);
98 QSSGRhiEffectTexture *getTexture(const QByteArray &bufferName, const QSize &size,
99 QRhiTexture::Format format, bool isFinalOutput,
100 const QSSGRenderEffect *inEffect);
101 void releaseTexture(QSSGRhiEffectTexture *texture);
102 void releaseTextures();
103
104 QSize m_outSize;
105 std::shared_ptr<QSSGRenderContextInterface> m_sgContext;
107 QRhiTexture *m_depthTexture = nullptr;
108 QVector2D m_cameraClipRange;
109 int m_currentUbufIndex = 0;
111 QSSGRhiShaderPipeline *m_currentShaderPipeline = nullptr;
112 char *m_currentUBufData = nullptr;
113 QHash<QByteArray, QSSGRhiTexture> m_currentTextures;
114 QSet<QRhiTextureRenderTarget *> m_pendingClears;
115};
116
118
119#endif
\inmodule QtCore
Definition qbytearray.h:57
\inmodule QtCore
Definition qhash.h:818
Definition qlist.h:74
\inmodule QtGui
Definition qrhi.h:883
Format
Specifies the texture format.
Definition qrhi.h:902
Definition qset.h:18
\inmodule QtCore
Definition qsize.h:25
The QVector2D class represents a vector or vertex in 2D space.
Definition qvectornd.h:31
Combined button and popup list for selecting options.
GLuint64 key
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum target
GLenum GLuint texture
GLuint name
GLint GLsizei GLsizei GLenum format
std::shared_ptr< QSSGRhiShaderPipeline > QSSGRhiShaderPipelinePtr
size_t qHash(const QSSGEffectSceneCacheKey &key)
size_t quintptr
Definition qtypes.h:72
QRandomGenerator generator(sseq)
QSharedPointer< T > other(t)
[5]
bool operator==(const QSSGEffectSceneCacheKey &other) const
static size_t generateHashCode(const QByteArray &shaderPathKey, quintptr cmd, int ubufIndex)