7#include <QtQuick3DUtils/private/qssgutils_p.h>
10#include <QtQuick3DRuntimeRender/private/qssgrendershaderlibrarymanager_p.h>
11#include <QtQuick3DRuntimeRender/private/qssgshaderresourcemergecontext_p.h>
152 for (TStrTableStrMap::const_iterator
iter = itemMap.begin(),
end = itemMap.end();
iter !=
end; ++
iter) {
171 qWarning(
"Unknown shader item %d",
int(itemType));
212 for (TStrTableStrMap::const_iterator
iter = cbMap.begin(),
end = cbMap.end();
iter !=
end; ++
iter) {
222 if (iter1->first ==
iter.key()) {
254 if (!
iter.value().isEmpty())
261 std::sort(sortedIncludes.begin(), sortedIncludes.end());
263 for (
const auto &include : sortedIncludes) {
274 static const char *prefix =
"//@@";
275 const int prefixLen = 4;
276 const int typeLen = 1;
318 for (
const auto &
sampler : std::as_const(mergeContext->m_samplers)) {
323 sampler.name.constData()).toUtf8();
327 if (!mergeContext->m_uniformMembers.isEmpty()) {
334 for (
auto iter = mergeContext->m_uniformMembers.cbegin(),
end = mergeContext->m_uniformMembers.cend();
368 includeName =
"func" + functionName +
".glsllib";
389 previous->
m_outgoing = &thisStage->m_incoming;
392 previous = thisStage;
434 if (u.multiview && mergeContext->viewCount >= 2) {
438 mergeContext->registerSampler(u.type, u.name, u.condition, u.conditionName);
441 if (u.multiview && mergeContext->viewCount >= 2) {
443 mergeContext->registerUniformMember(u.type,
name, u.condition, u.conditionName);
445 mergeContext->registerUniformMember(u.type, u.name, u.condition, u.conditionName);
451 if (inputVar.stage == stage)
452 mergeContext->registerInput(stage, inputVar.type, inputVar.name, inputVar.flat);
456 if (outputVar.stage == stage)
457 mergeContext->registerOutput(stage, outputVar.type, outputVar.name, outputVar.flat);
460 for (
auto it = mergeContext->m_inOutVars.
cbegin(),
end = mergeContext->m_inOutVars.cend();
it !=
end; ++
it) {
462 qWarning(
"Fragment stage input %s is not output from vertex stage; expect errors.",
it.key().constData());
470 QSSGRhiShaderPipeline::StageFlags stageFlags,
472 bool perTargetCompilation)
487 theStage.buildShaderSourcePass1(&mergeContext);
504 theStage.buildShaderSourcePass2(&mergeContext);
511 return theCache.compileForRhi(inMaterialInfoString,
517 perTargetCompilation);
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 &
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)
size_type remove(const Key &key)
QSSGRhiShaderPipelinePtr compileGeneratedRhiShader(const QByteArray &inMaterialInfoString, const QSSGShaderFeatures &inFeatureSet, QSSGShaderLibraryManager &shaderLibraryManager, QSSGShaderCache &theCache, QSSGRhiShaderPipeline::StageFlags stageFlags, int viewCount, bool perTargetCompilation)
void registerShaderMetaDataFromSource(QSSGShaderResourceMergeContext *mergeContext, const QByteArray &contents, QSSGShaderGeneratorStage stage)
QSSGShaderGeneratorStageFlags m_enabledStages
QSSGVertexShaderGenerator m_vs
QSSGStageGeneratorBase * getStage(QSSGShaderGeneratorStage inStage)
QSSGStageGeneratorBase & internalGetStage(QSSGShaderGeneratorStage inStage)
QSSGShaderGeneratorStageFlags getEnabledStages() const
void beginProgram(QSSGShaderGeneratorStageFlags inEnabledStages=defaultFlags())
QSSGFragmentShaderGenerator m_fs
void resolveIncludeFiles(QByteArray &theReadBuffer, const QByteArray &inMaterialInfoString)
void registerSampler(const QByteArray &type, const QByteArray &name, QSSGRenderShaderMetadata::Uniform::Condition conditionType=QSSGRenderShaderMetadata::Uniform::None, const QByteArray &conditionName=QByteArray())
void registerInput(QSSGShaderGeneratorStage stage, const QByteArray &type, const QByteArray &name, bool flat=false)
void registerOutput(QSSGShaderGeneratorStage stage, const QByteArray &type, const QByteArray &name, bool flat=false)
void registerUniformMember(const QByteArray &type, const QByteArray &name, QSSGRenderShaderMetadata::Uniform::Condition conditionType=QSSGRenderShaderMetadata::Uniform::None, const QByteArray &conditionName=QByteArray())
const_iterator cbegin() const noexcept
iterator insert(const T &value)
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
QT_BEGIN_NAMESPACE 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
void addShaderItemMap(ShaderItemType itemType, const TStrTableStrMap &itemMap, ShaderItemMapFlags flags={})
TStrTableStrMap m_flatIncoming
virtual void addFlatIncoming(const QByteArray &name, const QByteArray &type)
virtual void addFlatOutgoing(const QByteArray &name, const QByteArray &type)
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_flatOutgoing
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
virtual QSSGStageGeneratorBase & operator<<(const QByteArray &data)
QSSGVertexShaderGenerator()
\qmltype MapCircle \instantiates QDeclarativeCircleMapItem \inqmlmodule QtLocation