1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
// Copyright (C) 2008-2012 NVIDIA Corporation.
// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QSSG_RHI_CUSTOM_MATERIAL_SYSTEM_H
#define QSSG_RHI_CUSTOM_MATERIAL_SYSTEM_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <QtQuick3DRuntimeRender/qtquick3druntimerenderglobal.h>
#include <QtQuick3DRuntimeRender/private/qssgrendershaderlibrarymanager_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrenderableobjects_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrendercustommaterial_p.h>
#include <QtQuick3DRuntimeRender/private/qssgrendershaderkeys_p.h>
#include <QtQuick3DRuntimeRender/private/qssgshadermapkey_p.h>
#include <QtCore/qhash.h>
#include <QtGui/QMatrix4x4>
QT_BEGIN_NAMESPACE
struct QSSGRenderCustomMaterial;
struct QSSGRenderSubset;
struct QSSGRenderModel;
class QSSGLayerRenderData;
struct QSSGRenderableImage;
struct QSSGRenderLayer;
struct QSSGRenderLight;
class QSSGRenderCamera;
struct QSSGReflectionMapEntry;
class QRhiTexture;
class Q_QUICK3DRUNTIMERENDER_EXPORT QSSGCustomMaterialSystem
{
Q_DISABLE_COPY(QSSGCustomMaterialSystem)
typedef QPair<QByteArray, QByteArray> TStrStrPair;
typedef QHash<QSSGShaderMapKey, QSSGRhiShaderPipelinePtr> TShaderMap;
QSSGRenderContextInterface *context = nullptr;
TShaderMap shaderMap;
void setShaderResources(char *ubufData,
const QSSGRenderCustomMaterial &inMaterial,
const QByteArray &inPropertyName,
const QVariant &propertyValue,
QSSGRenderShaderValue::Type inPropertyType,
QSSGRhiShaderPipeline &shaderPipeline);
public:
QSSGCustomMaterialSystem();
~QSSGCustomMaterialSystem();
void setRenderContextInterface(QSSGRenderContextInterface *inContext);
void releaseCachedResources();
// Returns true if the material is dirty and thus will produce a different render result
// than previously. This effects things like progressive AA.
bool prepareForRender(const QSSGRenderModel &inModel,
const QSSGRenderSubset &inSubset,
QSSGRenderCustomMaterial &inMaterial);
QSSGRhiShaderPipelinePtr shadersForCustomMaterial(QSSGRhiGraphicsPipelineState *ps,
const QSSGRenderCustomMaterial &material,
QSSGSubsetRenderable &renderable,
const QSSGShaderDefaultMaterialKeyProperties &defaultMaterialShaderKeyProperties,
const QSSGShaderFeatures &featureSet);
void updateUniformsForCustomMaterial(QSSGRhiShaderPipeline &shaderPipeline,
QSSGRhiContext *rhiCtx,
const QSSGLayerRenderData &inData,
char *ubufData,
QSSGRhiGraphicsPipelineState *ps,
const QSSGRenderCustomMaterial &material,
QSSGSubsetRenderable &renderable,
const QSSGRenderCameraList &cameras,
const QVector2D *depthAdjust,
const QMatrix4x4 *alteredModelViewProjection);
void rhiPrepareRenderable(QSSGRhiGraphicsPipelineState *ps,
QSSGPassKey passKey,
QSSGSubsetRenderable &renderable,
const QSSGShaderFeatures &featureSet,
const QSSGRenderCustomMaterial &material,
const QSSGLayerRenderData &layerData,
QRhiRenderPassDescriptor *renderPassDescriptor,
int samples,
int viewCount,
QSSGRenderCamera *camera = nullptr,
QSSGRenderTextureCubeFace cubeFace = QSSGRenderTextureCubeFaceNone,
QMatrix4x4 *modelViewProjection = nullptr,
QSSGReflectionMapEntry *entry = nullptr,
bool oit = false);
void applyRhiShaderPropertyValues(char *ubufData,
const QSSGRenderCustomMaterial &inMaterial,
QSSGRhiShaderPipeline &shaderPipeline);
void rhiRenderRenderable(QSSGRhiContext *rhiCtx,
QSSGSubsetRenderable &renderable,
bool *needsSetViewport,
QSSGRenderTextureCubeFace cubeFace,
const QSSGRhiGraphicsPipelineState &state);
};
QT_END_NAMESPACE
#endif
|