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:
parent
ecf644bda5
commit
9a2d385d87
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user