Refactor raw data ReadSttream and WriteStream to have easier to use API with more features
This commit is contained in:
@@ -981,7 +981,7 @@ Asset::LoadResult Model::load()
|
||||
{
|
||||
ModelSDFMip mipData;
|
||||
sdfStream.Read(&mipData);
|
||||
void* mipBytes = sdfStream.Read(mipData.SlicePitch);
|
||||
void* mipBytes = sdfStream.Move(mipData.SlicePitch);
|
||||
auto task = ::New<StreamModelSDFTask>(this, SDF.Texture, Span<byte>((byte*)mipBytes, mipData.SlicePitch), mipData.MipIndex, mipData.RowPitch, mipData.SlicePitch);
|
||||
task->Start();
|
||||
}
|
||||
|
||||
@@ -239,20 +239,20 @@ private:
|
||||
return Asset::LoadResult::InvalidData;
|
||||
|
||||
// Vertex buffers
|
||||
auto vb0 = stream.Read<VB0ElementType18>(vertices);
|
||||
auto vb1 = stream.Read<VB1ElementType18>(vertices);
|
||||
auto vb0 = stream.Move<VB0ElementType18>(vertices);
|
||||
auto vb1 = stream.Move<VB1ElementType18>(vertices);
|
||||
bool hasColors = stream.ReadBool();
|
||||
VB2ElementType18* vb2 = nullptr;
|
||||
if (hasColors)
|
||||
{
|
||||
vb2 = stream.Read<VB2ElementType18>(vertices);
|
||||
vb2 = stream.Move<VB2ElementType18>(vertices);
|
||||
}
|
||||
|
||||
// Index Buffer
|
||||
uint32 indicesCount = triangles * 3;
|
||||
bool use16BitIndexBuffer = indicesCount <= MAX_uint16;
|
||||
uint32 ibStride = use16BitIndexBuffer ? sizeof(uint16) : sizeof(uint32);
|
||||
auto ib = stream.Read<byte>(indicesCount * ibStride);
|
||||
auto ib = stream.Move<byte>(indicesCount * ibStride);
|
||||
|
||||
// Allocate mesh
|
||||
lod.Meshes[meshIndex] = New<MeshData>();
|
||||
@@ -356,14 +356,14 @@ private:
|
||||
return Asset::LoadResult::InvalidData;
|
||||
|
||||
// Vertex buffers
|
||||
auto vb0 = stream.Read<VB0ElementType18>(vertices);
|
||||
auto vb1 = stream.Read<VB1ElementType18>(vertices);
|
||||
auto vb0 = stream.Move<VB0ElementType18>(vertices);
|
||||
auto vb1 = stream.Move<VB1ElementType18>(vertices);
|
||||
|
||||
// Index Buffer
|
||||
uint32 indicesCount = triangles * 3;
|
||||
bool use16BitIndexBuffer = indicesCount <= MAX_uint16;
|
||||
uint32 ibStride = use16BitIndexBuffer ? sizeof(uint16) : sizeof(uint32);
|
||||
auto ib = stream.Read<byte>(indicesCount * ibStride);
|
||||
auto ib = stream.Move<byte>(indicesCount * ibStride);
|
||||
|
||||
// Allocate mesh
|
||||
lod.Meshes[meshIndex] = New<MeshData>();
|
||||
@@ -484,14 +484,14 @@ private:
|
||||
return Asset::LoadResult::InvalidData;
|
||||
|
||||
// Vertex buffers
|
||||
auto vb0 = stream.Read<VB0ElementType18>(vertices);
|
||||
auto vb1 = stream.Read<VB1ElementType18>(vertices);
|
||||
auto vb0 = stream.Move<VB0ElementType18>(vertices);
|
||||
auto vb1 = stream.Move<VB1ElementType18>(vertices);
|
||||
|
||||
// Index Buffer
|
||||
uint32 indicesCount = triangles * 3;
|
||||
bool use16BitIndexBuffer = indicesCount <= MAX_uint16;
|
||||
uint32 ibStride = use16BitIndexBuffer ? sizeof(uint16) : sizeof(uint32);
|
||||
auto ib = stream.Read<byte>(indicesCount * ibStride);
|
||||
auto ib = stream.Move<byte>(indicesCount * ibStride);
|
||||
|
||||
// Copy data
|
||||
auto& mesh = *data->LODs[lodIndex].Meshes[i];
|
||||
@@ -567,14 +567,14 @@ private:
|
||||
return Asset::LoadResult::InvalidData;
|
||||
|
||||
// Vertex buffers
|
||||
auto vb0 = stream.Read<VB0ElementType18>(vertices);
|
||||
auto vb1 = stream.Read<VB1ElementType18>(vertices);
|
||||
auto vb0 = stream.Move<VB0ElementType18>(vertices);
|
||||
auto vb1 = stream.Move<VB1ElementType18>(vertices);
|
||||
|
||||
// Index Buffer
|
||||
uint32 indicesCount = triangles * 3;
|
||||
bool use16BitIndexBuffer = indicesCount <= MAX_uint16;
|
||||
uint32 ibStride = use16BitIndexBuffer ? sizeof(uint16) : sizeof(uint32);
|
||||
auto ib = stream.Read<byte>(indicesCount * ibStride);
|
||||
auto ib = stream.Move<byte>(indicesCount * ibStride);
|
||||
|
||||
// Copy data
|
||||
auto& mesh = *data->LODs[0].Meshes[i];
|
||||
@@ -642,14 +642,14 @@ private:
|
||||
return Asset::LoadResult::InvalidData;
|
||||
|
||||
// Vertex buffers
|
||||
auto vb0 = stream.Read<VB0ElementType18>(vertices);
|
||||
auto vb1 = stream.Read<VB1ElementType18>(vertices);
|
||||
auto vb0 = stream.Move<VB0ElementType18>(vertices);
|
||||
auto vb1 = stream.Move<VB1ElementType18>(vertices);
|
||||
|
||||
// Index Buffer
|
||||
uint32 indicesCount = triangles * 3;
|
||||
bool use16BitIndexBuffer = indicesCount <= MAX_uint16;
|
||||
uint32 ibStride = use16BitIndexBuffer ? sizeof(uint16) : sizeof(uint32);
|
||||
auto ib = stream.Read<byte>(indicesCount * ibStride);
|
||||
auto ib = stream.Move<byte>(indicesCount * ibStride);
|
||||
|
||||
// Copy data
|
||||
auto& mesh = *data->LODs[0].Meshes[i];
|
||||
@@ -718,14 +718,14 @@ private:
|
||||
return Asset::LoadResult::InvalidData;
|
||||
|
||||
// Vertex buffers
|
||||
auto vb0 = stream.Read<VB0ElementType18>(vertices);
|
||||
auto vb1 = stream.Read<VB1ElementType18>(vertices);
|
||||
auto vb0 = stream.Move<VB0ElementType18>(vertices);
|
||||
auto vb1 = stream.Move<VB1ElementType18>(vertices);
|
||||
|
||||
// Index Buffer
|
||||
uint32 indicesCount = triangles * 3;
|
||||
bool use16BitIndexBuffer = indicesCount <= MAX_uint16;
|
||||
uint32 ibStride = use16BitIndexBuffer ? sizeof(uint16) : sizeof(uint32);
|
||||
auto ib = stream.Read<byte>(indicesCount * ibStride);
|
||||
auto ib = stream.Move<byte>(indicesCount * ibStride);
|
||||
|
||||
// Copy data
|
||||
auto& mesh = *data->LODs[0].Meshes[i];
|
||||
@@ -798,14 +798,14 @@ private:
|
||||
return Asset::LoadResult::InvalidData;
|
||||
|
||||
// Vertex buffers
|
||||
auto vb0 = stream.Read<VB0ElementType18>(vertices);
|
||||
auto vb1 = stream.Read<VB1ElementType18>(vertices);
|
||||
auto vb0 = stream.Move<VB0ElementType18>(vertices);
|
||||
auto vb1 = stream.Move<VB1ElementType18>(vertices);
|
||||
|
||||
// Index Buffer
|
||||
uint32 indicesCount = triangles * 3;
|
||||
bool use16BitIndexBuffer = indicesCount <= MAX_uint16;
|
||||
uint32 ibStride = use16BitIndexBuffer ? sizeof(uint16) : sizeof(uint32);
|
||||
auto ib = stream.Read<byte>(indicesCount * ibStride);
|
||||
auto ib = stream.Move<byte>(indicesCount * ibStride);
|
||||
|
||||
// Copy data
|
||||
auto& mesh = *data->LODs[0].Meshes[i];
|
||||
@@ -879,14 +879,14 @@ private:
|
||||
return Asset::LoadResult::InvalidData;
|
||||
|
||||
// Vertex buffers
|
||||
auto vb0 = stream.Read<VB0ElementType15>(vertices);
|
||||
auto vb1 = stream.Read<VB1ElementType15>(vertices);
|
||||
auto vb0 = stream.Move<VB0ElementType15>(vertices);
|
||||
auto vb1 = stream.Move<VB1ElementType15>(vertices);
|
||||
|
||||
// Index Buffer
|
||||
uint32 indicesCount = triangles * 3;
|
||||
bool use16BitIndexBuffer = indicesCount <= MAX_uint16;
|
||||
uint32 ibStride = use16BitIndexBuffer ? sizeof(uint16) : sizeof(uint32);
|
||||
auto ib = stream.Read<byte>(indicesCount * ibStride);
|
||||
auto ib = stream.Move<byte>(indicesCount * ibStride);
|
||||
|
||||
// Copy data
|
||||
auto& mesh = *data->LODs[0].Meshes[i];
|
||||
@@ -960,14 +960,14 @@ private:
|
||||
return Asset::LoadResult::InvalidData;
|
||||
|
||||
// Vertex buffers
|
||||
auto vb0 = stream.Read<VB0ElementType15>(vertices);
|
||||
auto vb1 = stream.Read<VB1ElementType15>(vertices);
|
||||
auto vb0 = stream.Move<VB0ElementType15>(vertices);
|
||||
auto vb1 = stream.Move<VB1ElementType15>(vertices);
|
||||
|
||||
// Index Buffer
|
||||
uint32 indicesCount = triangles * 3;
|
||||
bool use16BitIndexBuffer = indicesCount <= MAX_uint16;
|
||||
uint32 ibStride = use16BitIndexBuffer ? sizeof(uint16) : sizeof(uint32);
|
||||
auto ib = stream.Read<byte>(indicesCount * ibStride);
|
||||
auto ib = stream.Move<byte>(indicesCount * ibStride);
|
||||
|
||||
// Copy data
|
||||
auto& mesh = *data->LODs[0].Meshes[i];
|
||||
@@ -1042,13 +1042,13 @@ private:
|
||||
return Asset::LoadResult::InvalidData;
|
||||
|
||||
// Vertex buffer
|
||||
auto vb = stream.Read<ModelVertex15>(vertices);
|
||||
auto vb = stream.Move<ModelVertex15>(vertices);
|
||||
|
||||
// Index Buffer
|
||||
uint32 indicesCount = triangles * 3;
|
||||
bool use16BitIndexBuffer = indicesCount <= MAX_uint16;
|
||||
uint32 ibStride = use16BitIndexBuffer ? sizeof(uint16) : sizeof(uint32);
|
||||
auto ib = stream.Read<byte>(indicesCount * ibStride);
|
||||
auto ib = stream.Move<byte>(indicesCount * ibStride);
|
||||
|
||||
// Copy data
|
||||
auto& mesh = *data->LODs[0].Meshes[i];
|
||||
|
||||
@@ -67,8 +67,8 @@ private:
|
||||
const uint32 ibStride = use16BitIndexBuffer ? sizeof(uint16) : sizeof(uint32);
|
||||
if (vertices == 0 || triangles == 0)
|
||||
return true;
|
||||
const auto vb0 = stream.Read<VB0SkinnedElementType1>(vertices);
|
||||
const auto ib = stream.Read<byte>(indicesCount * ibStride);
|
||||
const auto vb0 = stream.Move<VB0SkinnedElementType1>(vertices);
|
||||
const auto ib = stream.Move<byte>(indicesCount * ibStride);
|
||||
|
||||
// Write back
|
||||
output.WriteUint32(vertices);
|
||||
@@ -403,9 +403,9 @@ private:
|
||||
const uint32 ibStride = use16BitIndexBuffer ? sizeof(uint16) : sizeof(uint32);
|
||||
if (vertices == 0 || triangles == 0)
|
||||
return true;
|
||||
const auto vb0 = stream.Read<VB0SkinnedElementType>(vertices);
|
||||
const auto vb0 = stream.Move<VB0SkinnedElementType>(vertices);
|
||||
output.Write<VB0SkinnedElementType>(vb0, vertices);
|
||||
const auto ib = stream.Read<byte>(indicesCount * ibStride);
|
||||
const auto ib = stream.Move<byte>(indicesCount * ibStride);
|
||||
output.Write<byte>(ib, indicesCount * ibStride);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user