diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2019-11-25 02:19:06 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2019-11-25 02:19:06 +0000 |
| commit | 4e1be5d0d33cb62bd296c3ffee3926945052843d (patch) | |
| tree | 2db724b41fe93094723c9d51cec3c3340d625645 /AssetLoader/src/DXSDKMeshLoader.cpp | |
| parent | Renamed INSTALL_DILIGENT_TOOLS cmake option to DILIGENT_INSTALL_TOOLS (diff) | |
| download | DiligentTools-4e1be5d0d33cb62bd296c3ffee3926945052843d.tar.gz DiligentTools-4e1be5d0d33cb62bd296c3ffee3926945052843d.zip | |
clang-formatted AssetLoader
Diffstat (limited to 'AssetLoader/src/DXSDKMeshLoader.cpp')
| -rw-r--r-- | AssetLoader/src/DXSDKMeshLoader.cpp | 128 |
1 files changed, 66 insertions, 62 deletions
diff --git a/AssetLoader/src/DXSDKMeshLoader.cpp b/AssetLoader/src/DXSDKMeshLoader.cpp index e81d24e..00049f2 100644 --- a/AssetLoader/src/DXSDKMeshLoader.cpp +++ b/AssetLoader/src/DXSDKMeshLoader.cpp @@ -36,7 +36,7 @@ namespace Diligent //-------------------------------------------------------------------------------------- -bool DXSDKMesh::CreateFromFile( const char* szFileName ) +bool DXSDKMesh::CreateFromFile(const char* szFileName) { FileWrapper File; File.Open(FileOpenAttribs{szFileName}); @@ -51,40 +51,42 @@ bool DXSDKMesh::CreateFromFile( const char* szFileName ) File.Close(); - auto res = CreateFromMemory( reinterpret_cast<Uint8*>(pFileData->GetDataPtr()), - static_cast<Uint32>(pFileData->GetSize())); - + auto res = CreateFromMemory(reinterpret_cast<Uint8*>(pFileData->GetDataPtr()), + static_cast<Uint32>(pFileData->GetSize())); + return res; } void DXSDKMesh::ComputeBoundingBoxes() { - for( Uint32 i = 0; i < m_pMeshHeader->NumMeshes; i++ ) + for (Uint32 i = 0; i < m_pMeshHeader->NumMeshes; i++) { auto& Mesh = m_pMeshArray[i]; - float3 Min(+FLT_MAX, +FLT_MAX, +FLT_MAX); - float3 Max(-FLT_MAX, -FLT_MAX, -FLT_MAX); - const auto& VertexData = m_pVertexBufferArray[ Mesh.VertexBuffers[0] ]; - auto* PosDecl = VertexData.Decl; + + float3 Min{+FLT_MAX, +FLT_MAX, +FLT_MAX}; + float3 Max{-FLT_MAX, -FLT_MAX, -FLT_MAX}; + + const auto& VertexData = m_pVertexBufferArray[Mesh.VertexBuffers[0]]; + auto* PosDecl = VertexData.Decl; while (PosDecl->Stream != 0xFF && PosDecl->Usage != DXSDKMESH_VERTEX_SEMANTIC_POSITION) ++PosDecl; VERIFY(PosDecl->Stream != 0xFF, "Position semantic not found in this buffer"); VERIFY(PosDecl->Type == DXSDKMESH_VERTEX_DATA_TYPE_FLOAT3, "Vertex is expected to be a 3-component float vector"); - - auto IndexType = GetIndexType(i); - const auto* Vertices = GetRawVerticesAt(Mesh.VertexBuffers[0]); - const auto* Indices = GetRawIndicesAt(Mesh.IndexBuffer); - auto Stride = GetVertexStride(Mesh.VertexBuffers[0]); - for(Uint32 subsetIdx = 0; subsetIdx < Mesh.NumSubsets; ++subsetIdx) + + auto IndexType = GetIndexType(i); + const auto* Vertices = GetRawVerticesAt(Mesh.VertexBuffers[0]); + const auto* Indices = GetRawIndicesAt(Mesh.IndexBuffer); + auto Stride = GetVertexStride(Mesh.VertexBuffers[0]); + for (Uint32 subsetIdx = 0; subsetIdx < Mesh.NumSubsets; ++subsetIdx) { - auto& Subset = m_pSubsetArray[ Mesh.pSubsets[subsetIdx] ]; - - for(Uint32 v = 0; v < Subset.IndexCount; ++v) + auto& Subset = m_pSubsetArray[Mesh.pSubsets[subsetIdx]]; + + for (Uint32 v = 0; v < Subset.IndexCount; ++v) { Uint32 Index = IndexType == IT_16BIT ? - reinterpret_cast<const Uint16*>(Indices)[Subset.IndexStart + v] : + reinterpret_cast<const Uint16*>(Indices)[Subset.IndexStart + v] : reinterpret_cast<const Uint32*>(Indices)[Subset.IndexStart + v]; - const float3& Vertex = + const float3& Vertex = reinterpret_cast<const float3&>(Vertices[Index * Stride + PosDecl->Offset]); Min = std::min(Min, Vertex); Max = std::max(Max, Vertex); @@ -95,25 +97,27 @@ void DXSDKMesh::ComputeBoundingBoxes() } } -bool DXSDKMesh::CreateFromMemory( Uint8* pData, - Uint32 DataUint8s ) +bool DXSDKMesh::CreateFromMemory(Uint8* pData, + Uint32 DataUint8s) { m_StaticMeshData.resize(DataUint8s); memcpy(m_StaticMeshData.data(), pData, DataUint8s); // Pointer fixup auto* pStaticMeshData = m_StaticMeshData.data(); - m_pMeshHeader = reinterpret_cast<DXSDKMESH_HEADER*> (pStaticMeshData); + + // clang-format off m_pVertexBufferArray = reinterpret_cast<DXSDKMESH_VERTEX_BUFFER_HEADER*>(pStaticMeshData + m_pMeshHeader->VertexStreamHeadersOffset); m_pIndexBufferArray = reinterpret_cast<DXSDKMESH_INDEX_BUFFER_HEADER*> (pStaticMeshData + m_pMeshHeader->IndexStreamHeadersOffset); m_pMeshArray = reinterpret_cast<DXSDKMESH_MESH*> (pStaticMeshData + m_pMeshHeader->MeshDataOffset); m_pSubsetArray = reinterpret_cast<DXSDKMESH_SUBSET*> (pStaticMeshData + m_pMeshHeader->SubsetDataOffset); m_pFrameArray = reinterpret_cast<DXSDKMESH_FRAME*> (pStaticMeshData + m_pMeshHeader->FrameDataOffset); m_pMaterialArray = reinterpret_cast<DXSDKMESH_MATERIAL*> (pStaticMeshData + m_pMeshHeader->MaterialDataOffset); + // clang-format on - for( Uint32 i = 0; i < m_pMeshHeader->NumMaterials; i++ ) + for (Uint32 i = 0; i < m_pMeshHeader->NumMaterials; i++) { - auto& Mat = m_pMaterialArray[i]; + auto& Mat = m_pMaterialArray[i]; Mat.pDiffuseTexture = nullptr; Mat.pNormalTexture = nullptr; Mat.pSpecularTexture = nullptr; @@ -123,14 +127,14 @@ bool DXSDKMesh::CreateFromMemory( Uint8* pData, } // Setup subsets - for( Uint32 i = 0; i < m_pMeshHeader->NumMeshes; i++ ) + for (Uint32 i = 0; i < m_pMeshHeader->NumMeshes; i++) { m_pMeshArray[i].pSubsets = reinterpret_cast<Uint32*>(pStaticMeshData + m_pMeshArray[i].SubsetOffset); m_pMeshArray[i].pFrameInfluences = reinterpret_cast<Uint32*>(pStaticMeshData + m_pMeshArray[i].FrameInfluenceOffset); } // error condition - if( m_pMeshHeader->Version != DXSDKMESH_FILE_VERSION ) + if (m_pMeshHeader->Version != DXSDKMESH_FILE_VERSION) { LOG_ERROR("Unexpected SDK mesh file version"); return false; @@ -144,16 +148,16 @@ bool DXSDKMesh::CreateFromMemory( Uint8* pData, // Create VBs m_ppVertices.resize(m_pMeshHeader->NumVertexBuffers); - for( Uint32 i = 0; i < m_pMeshHeader->NumVertexBuffers; i++ ) + for (Uint32 i = 0; i < m_pMeshHeader->NumVertexBuffers; i++) { - m_ppVertices[i] = reinterpret_cast<Uint8*>(pBufferData + ( m_pVertexBufferArray[i].DataOffset - BufferDataStart)); + m_ppVertices[i] = reinterpret_cast<Uint8*>(pBufferData + (m_pVertexBufferArray[i].DataOffset - BufferDataStart)); } // Create IBs m_ppIndices.resize(m_pMeshHeader->NumIndexBuffers); - for( Uint32 i = 0; i < m_pMeshHeader->NumIndexBuffers; i++ ) + for (Uint32 i = 0; i < m_pMeshHeader->NumIndexBuffers; i++) { - m_ppIndices[i] = reinterpret_cast<Uint8*>( pBufferData + ( m_pIndexBufferArray[i].DataOffset - BufferDataStart ) ); + m_ppIndices[i] = reinterpret_cast<Uint8*>(pBufferData + (m_pIndexBufferArray[i].DataOffset - BufferDataStart)); } ComputeBoundingBoxes(); @@ -194,7 +198,7 @@ static void LoadTexture(IRenderDevice* pDevice, void DXSDKMesh::LoadGPUResources(const Char* ResourceDirectory, IRenderDevice* pDevice, IDeviceContext* pDeviceCtx) { std::vector<StateTransitionDesc> Barriers; - for( Uint32 i = 0; i < m_pMeshHeader->NumMaterials; i++ ) + for (Uint32 i = 0; i < m_pMeshHeader->NumMaterials; i++) { auto& Mat = m_pMaterialArray[i]; if (Mat.DiffuseTexture[0] != 0) @@ -214,14 +218,14 @@ void DXSDKMesh::LoadGPUResources(const Char* ResourceDirectory, IRenderDevice* p } m_VertexBuffers.resize(m_pMeshHeader->NumVertexBuffers); - for( Uint32 i = 0; i < m_pMeshHeader->NumVertexBuffers; i++ ) + for (Uint32 i = 0; i < m_pMeshHeader->NumVertexBuffers; i++) { const auto& VBArr = m_pVertexBufferArray[i]; std::stringstream ss; ss << "DXSDK Mesh vertex buffer #" << i; - std::string VBName = ss.str(); - BufferDesc VBDesc; + std::string VBName = ss.str(); + BufferDesc VBDesc; VBDesc.Name = VBName.c_str(); VBDesc.Usage = USAGE_STATIC; VBDesc.uiSizeInBytes = static_cast<Uint32>(VBArr.NumVertices * VBArr.StrideUint8s); @@ -235,18 +239,18 @@ void DXSDKMesh::LoadGPUResources(const Char* ResourceDirectory, IRenderDevice* p // Create IBs m_IndexBuffers.resize(m_pMeshHeader->NumIndexBuffers); - for( Uint32 i = 0; i < m_pMeshHeader->NumIndexBuffers; i++ ) + for (Uint32 i = 0; i < m_pMeshHeader->NumIndexBuffers; i++) { const auto& IBArr = m_pIndexBufferArray[i]; std::stringstream ss; ss << "DXSDK Mesh index buffer #" << i; - std::string IBName = ss.str(); + std::string IBName = ss.str(); BufferDesc IBDesc; IBDesc.Name = IBName.c_str(); IBDesc.Usage = USAGE_STATIC; - IBDesc.uiSizeInBytes = static_cast<Uint32>(IBArr.NumIndices * (IBArr.IndexType == IT_16BIT ? 2 : 4)); + IBDesc.uiSizeInBytes = static_cast<Uint32>(IBArr.NumIndices * (IBArr.IndexType == IT_16BIT ? 2 : 4)); IBDesc.BindFlags = BIND_INDEX_BUFFER; BufferData InitData{GetRawIndicesAt(i), static_cast<Uint32>(IBArr.SizeUint8s)}; @@ -265,21 +269,21 @@ DXSDKMesh::~DXSDKMesh() } //-------------------------------------------------------------------------------------- -bool DXSDKMesh::Create( const Char* szFileName ) +bool DXSDKMesh::Create(const Char* szFileName) { - return CreateFromFile( szFileName ); + return CreateFromFile(szFileName); } //-------------------------------------------------------------------------------------- -bool DXSDKMesh::Create( Uint8* pData, Uint32 DataUint8s ) +bool DXSDKMesh::Create(Uint8* pData, Uint32 DataUint8s) { - return CreateFromMemory( pData, DataUint8s ); + return CreateFromMemory(pData, DataUint8s); } //-------------------------------------------------------------------------------------- void DXSDKMesh::Destroy() { - for( Uint32 i = 0; i < m_pMeshHeader->NumMaterials; i++ ) + for (Uint32 i = 0; i < m_pMeshHeader->NumMaterials; i++) { auto& Mat = m_pMaterialArray[i]; if (Mat.pDiffuseTexture) @@ -307,7 +311,7 @@ void DXSDKMesh::Destroy() m_StaticMeshData.clear(); //delete[] m_pAdjacencyIndexBufferArray; m_pAdjacencyIndexBufferArray = nullptr; - + //delete[] m_pAnimationData; m_pAnimationData = nullptr; //delete[] m_pBindPoseFrameMatrices; m_pBindPoseFrameMatrices = nullptr; //delete[] m_pTransformedFrameMatrices; m_pTransformedFrameMatrices = nullptr; @@ -330,41 +334,41 @@ void DXSDKMesh::Destroy() //-------------------------------------------------------------------------------------- -PRIMITIVE_TOPOLOGY DXSDKMesh::GetPrimitiveType( DXSDKMESH_PRIMITIVE_TYPE PrimType ) +PRIMITIVE_TOPOLOGY DXSDKMesh::GetPrimitiveType(DXSDKMESH_PRIMITIVE_TYPE PrimType) { - switch( PrimType ) + switch (PrimType) { case PT_TRIANGLE_LIST: return PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; - + case PT_TRIANGLE_STRIP: return PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP; - + case PT_LINE_LIST: return PRIMITIVE_TOPOLOGY_LINE_LIST; - + case PT_LINE_STRIP: return PRIMITIVE_TOPOLOGY_UNDEFINED; - + case PT_POINT_LIST: return PRIMITIVE_TOPOLOGY_POINT_LIST; - + case PT_TRIANGLE_LIST_ADJ: UNEXPECTED("Unsupported primitive topolgy type"); - return PRIMITIVE_TOPOLOGY_UNDEFINED;// PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ; - + return PRIMITIVE_TOPOLOGY_UNDEFINED; // PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ; + case PT_TRIANGLE_STRIP_ADJ: UNEXPECTED("Unsupported primitive topolgy type"); - return PRIMITIVE_TOPOLOGY_UNDEFINED;// PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ; - + return PRIMITIVE_TOPOLOGY_UNDEFINED; // PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ; + case PT_LINE_LIST_ADJ: UNEXPECTED("Unsupported primitive topolgy type"); - return PRIMITIVE_TOPOLOGY_UNDEFINED;// PRIMITIVE_TOPOLOGY_LINELIST_ADJ; - + return PRIMITIVE_TOPOLOGY_UNDEFINED; // PRIMITIVE_TOPOLOGY_LINELIST_ADJ; + case PT_LINE_STRIP_ADJ: UNEXPECTED("Unsupported primitive topolgy type"); - return PRIMITIVE_TOPOLOGY_UNDEFINED;// D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ; - + return PRIMITIVE_TOPOLOGY_UNDEFINED; // D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ; + default: UNEXPECTED("Unknown primitive topolgy type"); return PRIMITIVE_TOPOLOGY_UNDEFINED; @@ -372,9 +376,9 @@ PRIMITIVE_TOPOLOGY DXSDKMesh::GetPrimitiveType( DXSDKMESH_PRIMITIVE_TYPE PrimTyp } //-------------------------------------------------------------------------------------- -VALUE_TYPE DXSDKMesh::GetIBFormat( Uint32 iMesh )const +VALUE_TYPE DXSDKMesh::GetIBFormat(Uint32 iMesh) const { - switch( m_pIndexBufferArray[ m_pMeshArray[ iMesh ].IndexBuffer ].IndexType ) + switch (m_pIndexBufferArray[m_pMeshArray[iMesh].IndexBuffer].IndexType) { case IT_16BIT: return VT_UINT16; @@ -386,4 +390,4 @@ VALUE_TYPE DXSDKMesh::GetIBFormat( Uint32 iMesh )const } } -}
\ No newline at end of file +} // namespace Diligent |
