-
Notifications
You must be signed in to change notification settings - Fork 512
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Split CMO structs into a new header (#482)
- Loading branch information
Showing
17 changed files
with
217 additions
and
157 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,181 @@ | ||
//-------------------------------------------------------------------------------------- | ||
// File: CMO.h | ||
// | ||
// .CMO files are built by Visual Studio's MeshContentTask and an example renderer was | ||
// provided in the VS Direct3D Starter Kit | ||
// https://devblogs.microsoft.com/cppblog/developing-an-app-with-the-visual-studio-3d-starter-kit-part-1-of-3/ | ||
// https://devblogs.microsoft.com/cppblog/developing-an-app-with-the-visual-studio-3d-starter-kit-part-2-of-3/ | ||
// https://devblogs.microsoft.com/cppblog/developing-an-app-with-the-visual-studio-3d-starter-kit-part-3-of-3/ | ||
// | ||
// Copyright (c) Microsoft Corporation. | ||
// Licensed under the MIT License. | ||
// | ||
// http://go.microsoft.com/fwlink/?LinkId=248929 | ||
// http://go.microsoft.com/fwlink/?LinkID=615561 | ||
//-------------------------------------------------------------------------------------- | ||
|
||
#pragma once | ||
|
||
#include <DirectXMath.h> | ||
|
||
#include <cstdint> | ||
|
||
|
||
namespace VSD3DStarter | ||
{ | ||
// .CMO files | ||
|
||
// UINT - Mesh count | ||
// { [Mesh count] | ||
// UINT - Length of name | ||
// wchar_t[] - Name of mesh (if length > 0) | ||
// UINT - Material count | ||
// { [Material count] | ||
// UINT - Length of material name | ||
// wchar_t[] - Name of material (if length > 0) | ||
// Material structure | ||
// UINT - Length of pixel shader name | ||
// wchar_t[] - Name of pixel shader (if length > 0) | ||
// { [8] | ||
// UINT - Length of texture name | ||
// wchar_t[] - Name of texture (if length > 0) | ||
// } | ||
// } | ||
// BYTE - 1 if there is skeletal animation data present | ||
// UINT - SubMesh count | ||
// { [SubMesh count] | ||
// SubMesh structure | ||
// } | ||
// UINT - IB Count | ||
// { [IB Count] | ||
// UINT - Number of USHORTs in IB | ||
// USHORT[] - Array of indices | ||
// } | ||
// UINT - VB Count | ||
// { [VB Count] | ||
// UINT - Number of verts in VB | ||
// Vertex[] - Array of vertices | ||
// } | ||
// UINT - Skinning VB Count | ||
// { [Skinning VB Count] | ||
// UINT - Number of verts in Skinning VB | ||
// SkinningVertex[] - Array of skinning verts | ||
// } | ||
// MeshExtents structure | ||
// [If skeleton animation data is not present, file ends here] | ||
// UINT - Bone count | ||
// { [Bone count] | ||
// UINT - Length of bone name | ||
// wchar_t[] - Bone name (if length > 0) | ||
// Bone structure | ||
// } | ||
// UINT - Animation clip count | ||
// { [Animation clip count] | ||
// UINT - Length of clip name | ||
// wchar_t[] - Clip name (if length > 0) | ||
// float - Start time | ||
// float - End time | ||
// UINT - Keyframe count | ||
// { [Keyframe count] | ||
// Keyframe structure | ||
// } | ||
// } | ||
// } | ||
|
||
#pragma pack(push,1) | ||
|
||
struct Material | ||
{ | ||
DirectX::XMFLOAT4 Ambient; | ||
DirectX::XMFLOAT4 Diffuse; | ||
DirectX::XMFLOAT4 Specular; | ||
float SpecularPower; | ||
DirectX::XMFLOAT4 Emissive; | ||
DirectX::XMFLOAT4X4 UVTransform; | ||
}; | ||
|
||
constexpr uint32_t MAX_TEXTURE = 8; | ||
|
||
struct SubMesh | ||
{ | ||
uint32_t MaterialIndex; | ||
uint32_t IndexBufferIndex; | ||
uint32_t VertexBufferIndex; | ||
uint32_t StartIndex; | ||
uint32_t PrimCount; | ||
}; | ||
|
||
constexpr uint32_t NUM_BONE_INFLUENCES = 4; | ||
|
||
// Vertex struct for Visual Studio Shader Designer (DGSL) holding position, normal, | ||
// tangent, color (RGBA), and texture mapping information | ||
struct VertexPositionNormalTangentColorTexture | ||
{ | ||
DirectX::XMFLOAT3 position; | ||
DirectX::XMFLOAT3 normal; | ||
DirectX::XMFLOAT4 tangent; | ||
uint32_t color; | ||
DirectX::XMFLOAT2 textureCoordinate; | ||
}; | ||
|
||
struct SkinningVertex | ||
{ | ||
uint32_t boneIndex[NUM_BONE_INFLUENCES]; | ||
float boneWeight[NUM_BONE_INFLUENCES]; | ||
}; | ||
|
||
struct MeshExtents | ||
{ | ||
float CenterX, CenterY, CenterZ; | ||
float Radius; | ||
|
||
float MinX, MinY, MinZ; | ||
float MaxX, MaxY, MaxZ; | ||
}; | ||
|
||
struct Bone | ||
{ | ||
int32_t ParentIndex; | ||
DirectX::XMFLOAT4X4 InvBindPos; | ||
DirectX::XMFLOAT4X4 BindPos; | ||
DirectX::XMFLOAT4X4 LocalTransform; | ||
}; | ||
|
||
struct Clip | ||
{ | ||
float StartTime; | ||
float EndTime; | ||
uint32_t keys; | ||
}; | ||
|
||
struct Keyframe | ||
{ | ||
uint32_t BoneIndex; | ||
float Time; | ||
DirectX::XMFLOAT4X4 Transform; | ||
}; | ||
|
||
#pragma pack(pop) | ||
|
||
const Material s_defMaterial = | ||
{ | ||
{ 0.2f, 0.2f, 0.2f, 1.f }, | ||
{ 0.8f, 0.8f, 0.8f, 1.f }, | ||
{ 0.0f, 0.0f, 0.0f, 1.f }, | ||
1.f, | ||
{ 0.0f, 0.0f, 0.0f, 1.0f }, | ||
{ 1.f, 0.f, 0.f, 0.f, | ||
0.f, 1.f, 0.f, 0.f, | ||
0.f, 0.f, 1.f, 0.f, | ||
0.f, 0.f, 0.f, 1.f }, | ||
}; | ||
} // namespace | ||
|
||
static_assert(sizeof(VSD3DStarter::Material) == 132, "CMO Mesh structure size incorrect"); | ||
static_assert(sizeof(VSD3DStarter::SubMesh) == 20, "CMO Mesh structure size incorrect"); | ||
static_assert(sizeof(VSD3DStarter::VertexPositionNormalTangentColorTexture) == 52, "CMO Mesh structure size incorrect"); | ||
static_assert(sizeof(VSD3DStarter::SkinningVertex) == 32, "CMO Mesh structure size incorrect"); | ||
static_assert(sizeof(VSD3DStarter::MeshExtents) == 40, "CMO Mesh structure size incorrect"); | ||
static_assert(sizeof(VSD3DStarter::Bone) == 196, "CMO Mesh structure size incorrect"); | ||
static_assert(sizeof(VSD3DStarter::Clip) == 12, "CMO Mesh structure size incorrect"); | ||
static_assert(sizeof(VSD3DStarter::Keyframe) == 72, "CMO Mesh structure size incorrect"); |
Oops, something went wrong.