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
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
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 int viewCount);
83
84private:
85 void releaseResources();
86 QSSGRhiEffectTexture *doRenderEffect(const QSSGRenderEffect *inEffect,
87 QSSGRhiEffectTexture *inTexture);
88
89 void allocateBufferCmd(const QSSGAllocateBuffer *inCmd, QSSGRhiEffectTexture *inTexture, const QSSGRenderEffect *inEffect);
90 void applyInstanceValueCmd(const QSSGApplyInstanceValue *inCmd, const QSSGRenderEffect *inEffect);
91 void applyValueCmd(const QSSGApplyValue *inCmd, const QSSGRenderEffect *inEffect);
92 void bindShaderCmd(const QSSGBindShader *inCmd, const QSSGRenderEffect *inEffect);
93 void renderCmd(QSSGRhiEffectTexture *inTexture, QSSGRhiEffectTexture *target);
94
95 void addCommonEffectUniforms(const QSize &inputSize, const QSize &outputSize);
96 void addTextureToShaderPipeline(const QByteArray &name, QRhiTexture *texture, const QSSGRhiSamplerDescription &samplerDesc);
97
98 QSSGRhiEffectTexture *findTexture(const QByteArray &bufferName);
99 QSSGRhiEffectTexture *getTexture(const QByteArray &bufferName, const QSize &size,
100 QRhiTexture::Format format, bool isFinalOutput,
101 const QSSGRenderEffect *inEffect);
102 void releaseTexture(QSSGRhiEffectTexture *texture);
103 void releaseTextures();
104
105 QSize m_outSize;
106 std::shared_ptr<QSSGRenderContextInterface> m_sgContext;
107 QVector<QSSGRhiEffectTexture *> m_textures;
108 QRhiTexture *m_depthTexture = nullptr;
109 QVector2D m_cameraClipRange;
110 int m_currentUbufIndex = 0;
111 QHash<QSSGEffectSceneCacheKey, QSSGRhiShaderPipelinePtr> m_shaderPipelines;
112 QSSGRhiShaderPipeline *m_currentShaderPipeline = nullptr;
113 char *m_currentUBufData = nullptr;
114 QHash<QByteArray, QSSGRhiTexture> m_currentTextures;
115 QSet<QRhiTextureRenderTarget *> m_pendingClears;
116};
117
119
120#endif
\inmodule QtCore
Definition qbytearray.h:57
\inmodule QtGui
Definition qrhi.h:895
Format
Specifies the texture format.
Definition qrhi.h:914
\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:167
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)
\variable QSSGRhiGraphicsPipelineState::depthFunc