7#include <QtQuick3DUtils/private/qssgutils_p.h>
9#include <QtQuick3DRuntimeRender/private/qssgrendercontextcore_p.h>
10#include <QtQuick3DRuntimeRender/private/qssgrendershaderlibrarymanager_p.h>
11#include <QtQuick3DRuntimeRender/private/qssgshaderresourcemergecontext_p.h>
48 : m_outgoing(
nullptr), m_stage(inStage)
149 qWarning(
"Unknown shader item %d",
int(itemType));
198 if (iter1->first ==
iter.key()) {
230 if (!
iter.value().isEmpty())
237 std::sort(sortedIncludes.
begin(), sortedIncludes.
end());
239 for (
const auto &include : sortedIncludes) {
250 static const char *prefix =
"//@@";
251 const int prefixLen = 4;
252 const int typeLen = 1;
344 includeName =
"func" + functionName +
".glsllib";
366 previous = thisStage;
408 mergeContext->
registerSampler(u.type, u.name, u.condition, u.conditionName);
414 if (inputVar.stage == stage)
415 mergeContext->
registerInput(stage, inputVar.type, inputVar.name);
419 if (outputVar.stage == stage)
420 mergeContext->
registerOutput(stage, outputVar.type, outputVar.name);
425 qWarning(
"Fragment stage input %s is not output from vertex stage; expect errors.",
it.key().constData());
433 QSSGRhiShaderPipeline::StageFlags stageFlags)
int toInt(bool *ok=nullptr, int base=10) const
Returns the byte array converted to an int using base base, which is ten by default.
qsizetype indexOf(char c, qsizetype from=0) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
static QByteArray number(int, int base=10)
Returns a byte-array representing the whole number n as text.
void clear()
Clears the contents of the byte array and makes it null.
QByteArray & append(char c)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QByteArray mid(qsizetype index, qsizetype len=-1) const
Returns a byte array containing len bytes from this byte array, starting at position pos.
QByteArray & replace(qsizetype index, qsizetype len, const char *s, qsizetype alen)
This is an overloaded member function, provided for convenience. It differs from the above function o...
void push_back(parameter_type t)
iterator insert(const Key &key, const T &value)
void registerShaderMetaDataFromSource(QSSGShaderResourceMergeContext *mergeContext, const QByteArray &contents, QSSGShaderGeneratorStage stage)
QSSGShaderGeneratorStageFlags m_enabledStages
QSSGVertexShaderGenerator m_vs
QSSGRhiShaderPipelinePtr compileGeneratedRhiShader(const QByteArray &inMaterialInfoString, const QSSGShaderFeatures &inFeatureSet, QSSGShaderLibraryManager &shaderLibraryManager, QSSGShaderCache &theCache, QSSGRhiShaderPipeline::StageFlags stageFlags)
QSSGStageGeneratorBase * getStage(QSSGShaderGeneratorStage inStage)
QSSGStageGeneratorBase & internalGetStage(QSSGShaderGeneratorStage inStage)
QSSGShaderGeneratorStageFlags getEnabledStages() const
void beginProgram(QSSGShaderGeneratorStageFlags inEnabledStages=defaultFlags())
QSSGFragmentShaderGenerator m_fs
QSSGRhiShaderPipelinePtr compileForRhi(const QByteArray &inKey, const QByteArray &inVert, const QByteArray &inFrag, const QSSGShaderFeatures &inFeatures, QSSGRhiShaderPipeline::StageFlags stageFlags)
void resolveIncludeFiles(QByteArray &theReadBuffer, const QByteArray &inMaterialInfoString)
QMap< QByteArray, InOutVar > m_inOutVars
void registerInput(QSSGShaderGeneratorStage stage, const QByteArray &type, const QByteArray &name)
QMap< QByteArray, Sampler > m_samplers
void registerOutput(QSSGShaderGeneratorStage stage, const QByteArray &type, const QByteArray &name)
QMap< QByteArray, BlockMember > m_uniformMembers
void registerSampler(const QByteArray &type, const QByteArray &name, QSSGRenderShaderMetadata::Uniform::Condition conditionType=QSSGRenderShaderMetadata::Uniform::None, const QByteArray &conditionName=QByteArray())
void registerUniformMember(const QByteArray &type, const QByteArray &name, QSSGRenderShaderMetadata::Uniform::Condition conditionType=QSSGRenderShaderMetadata::Uniform::None, const QByteArray &conditionName=QByteArray())
iterator insert(const T &value)
QByteArray toUtf8() const &
static QString static QString asprintf(const char *format,...) Q_ATTRIBUTE_FORMAT_PRINTF(1
const void * constData() const
QSet< QString >::iterator it
Combined button and popup list for selecting options.
#define QByteArrayLiteral(str)
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter * iter
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
constexpr decltype(auto) qMakePair(T1 &&value1, T2 &&value2) noexcept(noexcept(std::make_pair(std::forward< T1 >(value1), std::forward< T2 >(value2))))
static QT_BEGIN_NAMESPACE void addStartCond(QByteArray &block, const T &var)
static void addEndCond(QByteArray &block, const T &var)
std::shared_ptr< QSSGRhiShaderPipeline > QSSGRhiShaderPipelinePtr
bool contains(const AT &t) const noexcept
QSSGFragmentShaderGenerator()
void addShaderOutgoingMap() override
void addShaderIncomingMap() override
const char * m_fragmentShader
QSSGShaderGeneratedProgramOutput()=default
QSSGShaderGeneratedProgramOutput(const char *vs, const char *fs)
const char * m_vertexShader
QSSGStageGeneratorBase(QSSGShaderGeneratorStage inStage)
QSSGShaderGeneratorStage stage() const
TConstantBufferParamArray m_constantBufferParams
QPair< QByteArray, QByteArray > TParamPair
void addShaderPass2Marker(ShaderItemType itemType)
QSet< QByteArray > m_includes
QPair< QByteArray, TParamPair > TConstantBufferParamPair
virtual void addConstantBuffer(const QByteArray &name, const QByteArray &layout)
QList< QByteArray > m_addedFunctions
virtual void addShaderUniformMap()
TStrTableStrMap * m_outgoing
TStrTableStrMap m_uniforms
virtual void addShaderOutgoingMap()
virtual void addConstantBufferParam(const QByteArray &cbName, const QByteArray ¶mName, const QByteArray &type)
virtual void begin(QSSGShaderGeneratorStageFlags inEnabledStages)
QSSGShaderGeneratorStage m_stage
QByteArray m_finalBuilder
virtual void addShaderConstantBufferItemMap(const QByteArray &itemType, const TStrTableStrMap &cbMap, TConstantBufferParamArray cbParamsArray)
QByteArray buildShaderSourcePass2(QSSGShaderResourceMergeContext *mergeContext)
virtual void addUniformArray(const QByteArray &name, const QByteArray &type, quint32 size)
QSSGShaderResourceMergeContext * m_mergeContext
TStrTableStrMap m_addedDefinitions
TStrTableStrMap m_incoming
virtual void addFunction(const QByteArray &functionName) final
virtual void addShaderIncomingMap()
void buildShaderSourcePass1(QSSGShaderResourceMergeContext *mergeContext)
virtual void addUniform(const QByteArray &name, const QByteArray &type)
virtual void addDefinition(const QByteArray &name, const QByteArray &value) final
QSSGShaderGeneratorStageFlags m_enabledStages
virtual void append(const QByteArray &data)
virtual void addOutgoing(const QByteArray &name, const QByteArray &type)
TStrTableSizedStrMap m_uniformArrays
TStrTableStrMap m_constantBuffers
virtual void appendShaderCode() final
virtual void addIncoming(const QByteArray &name, const QByteArray &type)
virtual void addInclude(const QByteArray &name) final
void addShaderItemMap(ShaderItemType itemType, const TStrTableStrMap &itemMap, const QByteArray &inItemSuffix=QByteArray())
virtual QSSGStageGeneratorBase & operator<<(const QByteArray &data)
QSSGVertexShaderGenerator()
\qmltype MapCircle \instantiates QDeclarativeCircleMapItem \inqmlmodule QtLocation