XPlor/libs/xassets/xmaterialpass.cpp

87 lines
2.4 KiB
C++
Raw Normal View History

2025-09-03 13:15:13 -04:00
#include "xmaterialpass.h"
#include "xmaterialvertexdeclaration.h"
#include "xmaterialvertexshader.h"
#include "xmaterialpixelshader.h"
2025-09-07 12:36:08 -04:00
#include <QDebug>
#include <QIODevice>
2025-09-03 13:15:13 -04:00
XMaterialPass::XMaterialPass()
: XAsset()
2025-09-05 18:35:17 -04:00
, mVertexDecl()
2025-09-07 12:36:08 -04:00
, mVertexShaderArray(15)
2025-09-05 18:35:17 -04:00
, mVertexShader()
, mPixelShader()
2025-09-03 13:15:13 -04:00
, mPerPrimArgCount(0)
, mPerObjArgCount(0)
, mStableArgCount(0)
, mCustomSamplerFlags(0)
, mPrecompiledIndex(0)
2025-09-05 18:35:17 -04:00
, mArgs()
2025-09-03 13:15:13 -04:00
{
2025-09-07 12:36:08 -04:00
SetName("Material Pass");
2025-09-03 13:15:13 -04:00
}
void XMaterialPass::Clear()
{
}
void XMaterialPass::ParseData(QDataStream *aStream)
{
2025-09-07 12:36:08 -04:00
if (IsDebug())
{
qDebug() << QString("[%1] Parsing data for %2").arg(aStream->device()->pos(), 10, 10, QChar('0')).arg(GetName());
}
2025-09-05 18:35:17 -04:00
mVertexDecl.ParsePtr(aStream, false);
for (int i = 0; i < 15; i++)
{
mVertexShaderArray[i].ParsePtr(aStream, false);
}
mVertexShader.ParsePtr(aStream, false);
mPixelShader.ParsePtr(aStream, false);
2025-09-07 12:36:08 -04:00
qint32 argsPtr;
2025-09-05 18:35:17 -04:00
*aStream
>> mPerPrimArgCount
>> mPerObjArgCount
>> mStableArgCount
>> mCustomSamplerFlags
2025-09-07 12:36:08 -04:00
>> mPrecompiledIndex;
aStream->skipRawData(3);
*aStream >> argsPtr;
if (IsDebug())
{
qDebug() << QString("[%1] mPerPrimArgCount = %2").arg(aStream->device()->pos(), 10, 10, QChar('0')).arg(mPerPrimArgCount);
qDebug() << QString("[%1] mPerObjArgCount = %2").arg(aStream->device()->pos(), 10, 10, QChar('0')).arg(mPerObjArgCount);
qDebug() << QString("[%1] mStableArgCount = %2").arg(aStream->device()->pos(), 10, 10, QChar('0')).arg(mStableArgCount);
qDebug() << QString("[%1] mCustomSamplerFlags = %2").arg(aStream->device()->pos(), 10, 10, QChar('0')).arg(mCustomSamplerFlags);
qDebug() << QString("[%1] mPrecompiledIndex = %2").arg(aStream->device()->pos(), 10, 10, QChar('0')).arg(mPrecompiledIndex);
qDebug() << QString("[%1] argsPtr = %2").arg(aStream->device()->pos(), 10, 10, QChar('0')).arg(argsPtr);
}
2025-09-05 18:35:17 -04:00
mVertexDecl.ParseData(aStream);
2025-09-07 12:36:08 -04:00
2025-09-05 18:35:17 -04:00
for (int i = 0; i < 15; i++)
{
mVertexShaderArray[i].ParseData(aStream);
}
mVertexShader.ParseData(aStream);
mPixelShader.ParseData(aStream);
2025-09-07 12:36:08 -04:00
if (argsPtr)
{
int argCount = mStableArgCount + mPerObjArgCount + mPerPrimArgCount;
for (int i = 0; i < argCount; i++)
{
XMaterialShaderArgument arg;
arg.ParseData(aStream);
mArgs.append(arg);
}
}
2025-09-03 13:15:13 -04:00
}