37 void finalizeShaders(
const QSSGRenderLayer &layer, QSSGRenderContextInterface *renderContext);
39 enum class Flags : quint8
42 UsesDepthTexture = 0x2u,
43 UsesProjectionMatrix = 0x4u,
44 UsesInverseProjectionMatrix = 0x8u,
45 UsesViewMatrix = 0x10u,
46 UsesNormalTexture = 0x20u
48 using FlagT = std::underlying_type_t<Flags>;
50 struct TextureProperty
52 QSSGRenderImage *texImage =
nullptr;
54 QSSGRenderShaderValue::Type shaderDataType;
55 QSSGRenderTextureFilterOp minFilterType = QSSGRenderTextureFilterOp::Linear;
56 QSSGRenderTextureFilterOp magFilterType = QSSGRenderTextureFilterOp::Linear;
57 QSSGRenderTextureFilterOp mipFilterType = QSSGRenderTextureFilterOp::Linear;
58 QSSGRenderTextureCoordOp horizontalClampType = QSSGRenderTextureCoordOp::ClampToEdge;
59 QSSGRenderTextureCoordOp verticalClampType = QSSGRenderTextureCoordOp::ClampToEdge;
60 QSSGRenderTextureCoordOp zClampType = QSSGRenderTextureCoordOp::ClampToEdge;
61 QSSGRenderTextureTypeValue usageType;
64 QVector<TextureProperty> textureProperties;
69 Property(
const QByteArray &name,
const QByteArray &typeName,
const QVariant &value, QSSGRenderShaderValue::Type shaderDataType,
int pid = -1)
70 : name(name), typeName(typeName), value(value), shaderDataType(shaderDataType), pid(pid)
74 mutable QVariant value;
75 QSSGRenderShaderValue::Type shaderDataType;
79 QVector<Property> properties;
81 QSSGRenderEffect *m_nextEffect =
nullptr;
83 void markDirty() { setFlag(QSSGRenderEffect::Flags::Dirty); }
84 void clearDirty() { setFlag(QSSGRenderEffect::Flags::Dirty,
false); }
85 [[nodiscard]]
bool isDirty()
const {
return testFlag(QSSGRenderEffect::Flags::Dirty); }
87 void setFlag(QSSGRenderEffect::Flags flag,
bool enabled =
true);
88 [[nodiscard]]
bool testFlag(QSSGRenderEffect::Flags flag)
const {
return (flags & FlagT(flag)) != 0; }
90 QVector<QSSGCommand *> commands;
94 const char *className =
nullptr;
95 FlagT flags = FlagT(Flags::Dirty);
96 bool incompleteBuildTimeObject =
false;
97 QSSGRenderTextureFormat::Format outputFormat = QSSGRenderTextureFormat::Unknown;
99 struct ShaderPrepPassData
101 QByteArray shaderPathKeyPrefix;
102 QByteArray vertexShaderCode[2];
103 QByteArray fragmentShaderCode[2];
104 QSSGCustomShaderMetaData vertexMetaData[2];
105 QSSGCustomShaderMetaData fragmentMetaData[2];
106 int bindShaderCmdIndex = 0;
111 QVector<ShaderPrepPassData> passes;
114 QString debugObjectName;