1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-24 18:39:59 +00:00

Read NiAdditionalGeometryData records

This commit is contained in:
Alexei Kotov 2023-09-20 04:57:10 +03:00
parent ecf644bda5
commit 9a2d385d87
4 changed files with 77 additions and 0 deletions

View File

@ -532,6 +532,44 @@ namespace Nif
mKeyList->read(nif);
}
void NiAdditionalGeometryData::read(NIFStream* nif)
{
nif->read(mNumVertices);
mBlockInfos.resize(nif->get<uint32_t>());
for (DataStream& info : mBlockInfos)
info.read(nif);
mBlocks.resize(nif->get<uint32_t>());
for (DataBlock& block : mBlocks)
block.read(nif, recType == RC_BSPackedAdditionalGeometryData);
}
void NiAdditionalGeometryData::DataStream::read(NIFStream* nif)
{
nif->read(mType);
nif->read(mUnitSize);
nif->read(mTotalSize);
nif->read(mStride);
nif->read(mBlockIndex);
nif->read(mBlockOffset);
nif->read(mFlags);
}
void NiAdditionalGeometryData::DataBlock::read(NIFStream* nif, bool bsPacked)
{
nif->read(mValid);
if (!mValid)
return;
nif->read(mBlockSize);
nif->readVector(mBlockOffsets, nif->get<uint32_t>());
nif->readVector(mDataSizes, nif->get<uint32_t>());
nif->readVector(mData, mDataSizes.size() * mBlockSize);
if (bsPacked)
{
nif->read(mShaderIndex);
nif->read(mTotalSize);
}
}
void BSMultiBound::read(NIFStream* nif)
{
mData.read(nif);

View File

@ -362,6 +362,41 @@ namespace Nif
void read(NIFStream* nif) override;
};
struct NiAdditionalGeometryData : public Record
{
struct DataStream
{
uint32_t mType;
uint32_t mUnitSize;
uint32_t mTotalSize;
uint32_t mStride;
uint32_t mBlockIndex;
uint32_t mBlockOffset;
uint8_t mFlags;
void read(NIFStream* nif);
};
struct DataBlock
{
bool mValid;
uint32_t mBlockSize;
std::vector<uint32_t> mBlockOffsets;
std::vector<uint32_t> mDataSizes;
std::vector<char> mData;
uint32_t mShaderIndex;
uint32_t mTotalSize;
void read(NIFStream* nif, bool bsPacked);
};
uint16_t mNumVertices;
std::vector<DataStream> mBlockInfos;
std::vector<DataBlock> mBlocks;
void read(NIFStream* nif);
};
struct BSMultiBound : public Record
{
BSMultiBoundDataPtr mData;

View File

@ -169,11 +169,13 @@ namespace Nif
{ "NiVisData", &construct<NiVisData, RC_NiVisData> },
// Gamebryo
{ "NiAdditionalGeometryData", &construct<NiAdditionalGeometryData, RC_NiAdditionalGeometryData> },
{ "NiBoolData", &construct<NiBoolData, RC_NiBoolData> },
{ "NiDefaultAVObjectPalette", &construct<NiDefaultAVObjectPalette, RC_NiDefaultAVObjectPalette> },
{ "NiTransformData", &construct<NiKeyframeData, RC_NiKeyframeData> },
// Bethesda
{ "BSPackedAdditionalGeometryData", &construct<NiAdditionalGeometryData, RC_BSPackedAdditionalGeometryData> },
{ "BSShaderTextureSet", &construct<BSShaderTextureSet, RC_BSShaderTextureSet> },
// DYNAMIC EFFECTS

View File

@ -84,6 +84,7 @@ namespace Nif
RC_BSMultiBoundAABB,
RC_BSMultiBoundOBB,
RC_BSMultiBoundSphere,
RC_BSPackedAdditionalGeometryData,
RC_BSRefractionFirePeriodController,
RC_BSRefractionStrengthController,
RC_BSShaderNoLightingProperty,
@ -96,6 +97,7 @@ namespace Nif
RC_DistantLODShaderProperty,
RC_HairShaderProperty,
RC_hkPackedNiTriStripsData,
RC_NiAdditionalGeometryData,
RC_NiAlphaAccumulator,
RC_NiAlphaController,
RC_NiAlphaProperty,