1
0
mirror of https://github.com/ncblakely/GiantsTools synced 2024-07-03 20:11:45 +02:00
GiantsTools/Sdk/External/DirectXTK/Inc/VertexTypes.h
2021-01-23 15:40:09 -08:00

491 lines
18 KiB
C++

//--------------------------------------------------------------------------------------
// File: VertexTypes.h
//
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
//
// http://go.microsoft.com/fwlink/?LinkId=248929
//--------------------------------------------------------------------------------------
#pragma once
#if defined(_XBOX_ONE) && defined(_TITLE)
#include <d3d11_x.h>
#else
#include <d3d11_1.h>
#endif
#include <DirectXMath.h>
namespace DirectX
{
// Vertex struct holding position information.
struct VertexPosition
{
VertexPosition() = default;
VertexPosition(const VertexPosition&) = default;
VertexPosition& operator=(const VertexPosition&) = default;
VertexPosition(VertexPosition&&) = default;
VertexPosition& operator=(VertexPosition&&) = default;
VertexPosition(XMFLOAT3 const& iposition) noexcept
: position(iposition)
{ }
VertexPosition(FXMVECTOR iposition) noexcept
{
XMStoreFloat3(&this->position, iposition);
}
XMFLOAT3 position;
static constexpr unsigned int InputElementCount = 1;
static const D3D11_INPUT_ELEMENT_DESC InputElements[InputElementCount];
};
// Vertex struct holding position and color information.
struct VertexPositionColor
{
VertexPositionColor() = default;
VertexPositionColor(const VertexPositionColor&) = default;
VertexPositionColor& operator=(const VertexPositionColor&) = default;
VertexPositionColor(VertexPositionColor&&) = default;
VertexPositionColor& operator=(VertexPositionColor&&) = default;
VertexPositionColor(XMFLOAT3 const& iposition, XMFLOAT4 const& icolor) noexcept
: position(iposition),
color(icolor)
{ }
VertexPositionColor(FXMVECTOR iposition, FXMVECTOR icolor) noexcept
{
XMStoreFloat3(&this->position, iposition);
XMStoreFloat4(&this->color, icolor);
}
XMFLOAT3 position;
XMFLOAT4 color;
static constexpr unsigned int InputElementCount = 2;
static const D3D11_INPUT_ELEMENT_DESC InputElements[InputElementCount];
};
// Vertex struct holding position and texture mapping information.
struct VertexPositionTexture
{
VertexPositionTexture() = default;
VertexPositionTexture(const VertexPositionTexture&) = default;
VertexPositionTexture& operator=(const VertexPositionTexture&) = default;
VertexPositionTexture(VertexPositionTexture&&) = default;
VertexPositionTexture& operator=(VertexPositionTexture&&) = default;
VertexPositionTexture(XMFLOAT3 const& iposition, XMFLOAT2 const& itextureCoordinate) noexcept
: position(iposition),
textureCoordinate(itextureCoordinate)
{ }
VertexPositionTexture(FXMVECTOR iposition, FXMVECTOR itextureCoordinate) noexcept
{
XMStoreFloat3(&this->position, iposition);
XMStoreFloat2(&this->textureCoordinate, itextureCoordinate);
}
XMFLOAT3 position;
XMFLOAT2 textureCoordinate;
static constexpr unsigned int InputElementCount = 2;
static const D3D11_INPUT_ELEMENT_DESC InputElements[InputElementCount];
};
// Vertex struct holding position and dual texture mapping information.
struct VertexPositionDualTexture
{
VertexPositionDualTexture() = default;
VertexPositionDualTexture(const VertexPositionDualTexture&) = default;
VertexPositionDualTexture& operator=(const VertexPositionDualTexture&) = default;
VertexPositionDualTexture(VertexPositionDualTexture&&) = default;
VertexPositionDualTexture& operator=(VertexPositionDualTexture&&) = default;
VertexPositionDualTexture(
XMFLOAT3 const& iposition,
XMFLOAT2 const& itextureCoordinate0,
XMFLOAT2 const& itextureCoordinate1) noexcept
: position(iposition),
textureCoordinate0(itextureCoordinate0),
textureCoordinate1(itextureCoordinate1)
{ }
VertexPositionDualTexture(
FXMVECTOR iposition,
FXMVECTOR itextureCoordinate0,
FXMVECTOR itextureCoordinate1) noexcept
{
XMStoreFloat3(&this->position, iposition);
XMStoreFloat2(&this->textureCoordinate0, itextureCoordinate0);
XMStoreFloat2(&this->textureCoordinate1, itextureCoordinate1);
}
XMFLOAT3 position;
XMFLOAT2 textureCoordinate0;
XMFLOAT2 textureCoordinate1;
static constexpr unsigned int InputElementCount = 3;
static const D3D11_INPUT_ELEMENT_DESC InputElements[InputElementCount];
};
// Vertex struct holding position and normal vector.
struct VertexPositionNormal
{
VertexPositionNormal() = default;
VertexPositionNormal(const VertexPositionNormal&) = default;
VertexPositionNormal& operator=(const VertexPositionNormal&) = default;
VertexPositionNormal(VertexPositionNormal&&) = default;
VertexPositionNormal& operator=(VertexPositionNormal&&) = default;
VertexPositionNormal(XMFLOAT3 const& iposition, XMFLOAT3 const& inormal) noexcept
: position(iposition),
normal(inormal)
{ }
VertexPositionNormal(FXMVECTOR iposition, FXMVECTOR inormal) noexcept
{
XMStoreFloat3(&this->position, iposition);
XMStoreFloat3(&this->normal, inormal);
}
XMFLOAT3 position;
XMFLOAT3 normal;
static constexpr unsigned int InputElementCount = 2;
static const D3D11_INPUT_ELEMENT_DESC InputElements[InputElementCount];
};
// Vertex struct holding position, color, and texture mapping information.
struct VertexPositionColorTexture
{
VertexPositionColorTexture() = default;
VertexPositionColorTexture(const VertexPositionColorTexture&) = default;
VertexPositionColorTexture& operator=(const VertexPositionColorTexture&) = default;
VertexPositionColorTexture(VertexPositionColorTexture&&) = default;
VertexPositionColorTexture& operator=(VertexPositionColorTexture&&) = default;
VertexPositionColorTexture(XMFLOAT3 const& iposition, XMFLOAT4 const& icolor, XMFLOAT2 const& itextureCoordinate) noexcept
: position(iposition),
color(icolor),
textureCoordinate(itextureCoordinate)
{ }
VertexPositionColorTexture(FXMVECTOR iposition, FXMVECTOR icolor, FXMVECTOR itextureCoordinate) noexcept
{
XMStoreFloat3(&this->position, iposition);
XMStoreFloat4(&this->color, icolor);
XMStoreFloat2(&this->textureCoordinate, itextureCoordinate);
}
XMFLOAT3 position;
XMFLOAT4 color;
XMFLOAT2 textureCoordinate;
static constexpr unsigned int InputElementCount = 3;
static const D3D11_INPUT_ELEMENT_DESC InputElements[InputElementCount];
};
// Vertex struct holding position, normal vector, and color information.
struct VertexPositionNormalColor
{
VertexPositionNormalColor() = default;
VertexPositionNormalColor(const VertexPositionNormalColor&) = default;
VertexPositionNormalColor& operator=(const VertexPositionNormalColor&) = default;
VertexPositionNormalColor(VertexPositionNormalColor&&) = default;
VertexPositionNormalColor& operator=(VertexPositionNormalColor&&) = default;
VertexPositionNormalColor(XMFLOAT3 const& iposition, XMFLOAT3 const& inormal, XMFLOAT4 const& icolor) noexcept
: position(iposition),
normal(inormal),
color(icolor)
{ }
VertexPositionNormalColor(FXMVECTOR iposition, FXMVECTOR inormal, FXMVECTOR icolor) noexcept
{
XMStoreFloat3(&this->position, iposition);
XMStoreFloat3(&this->normal, inormal);
XMStoreFloat4(&this->color, icolor);
}
XMFLOAT3 position;
XMFLOAT3 normal;
XMFLOAT4 color;
static constexpr unsigned int InputElementCount = 3;
static const D3D11_INPUT_ELEMENT_DESC InputElements[InputElementCount];
};
// Vertex struct holding position, normal vector, and texture mapping information.
struct VertexPositionNormalTexture
{
VertexPositionNormalTexture() = default;
VertexPositionNormalTexture(const VertexPositionNormalTexture&) = default;
VertexPositionNormalTexture& operator=(const VertexPositionNormalTexture&) = default;
VertexPositionNormalTexture(VertexPositionNormalTexture&&) = default;
VertexPositionNormalTexture& operator=(VertexPositionNormalTexture&&) = default;
VertexPositionNormalTexture(XMFLOAT3 const& iposition, XMFLOAT3 const& inormal, XMFLOAT2 const& itextureCoordinate) noexcept
: position(iposition),
normal(inormal),
textureCoordinate(itextureCoordinate)
{ }
VertexPositionNormalTexture(FXMVECTOR iposition, FXMVECTOR inormal, FXMVECTOR itextureCoordinate) noexcept
{
XMStoreFloat3(&this->position, iposition);
XMStoreFloat3(&this->normal, inormal);
XMStoreFloat2(&this->textureCoordinate, itextureCoordinate);
}
XMFLOAT3 position;
XMFLOAT3 normal;
XMFLOAT2 textureCoordinate;
static constexpr unsigned int InputElementCount = 3;
static const D3D11_INPUT_ELEMENT_DESC InputElements[InputElementCount];
};
// Vertex struct holding position, normal vector, color, and texture mapping information.
struct VertexPositionNormalColorTexture
{
VertexPositionNormalColorTexture() = default;
VertexPositionNormalColorTexture(const VertexPositionNormalColorTexture&) = default;
VertexPositionNormalColorTexture& operator=(const VertexPositionNormalColorTexture&) = default;
VertexPositionNormalColorTexture(VertexPositionNormalColorTexture&&) = default;
VertexPositionNormalColorTexture& operator=(VertexPositionNormalColorTexture&&) = default;
VertexPositionNormalColorTexture(
XMFLOAT3 const& iposition,
XMFLOAT3 const& inormal,
XMFLOAT4 const& icolor,
XMFLOAT2 const& itextureCoordinate) noexcept
: position(iposition),
normal(inormal),
color(icolor),
textureCoordinate(itextureCoordinate)
{ }
VertexPositionNormalColorTexture(FXMVECTOR iposition, FXMVECTOR inormal, FXMVECTOR icolor, CXMVECTOR itextureCoordinate) noexcept
{
XMStoreFloat3(&this->position, iposition);
XMStoreFloat3(&this->normal, inormal);
XMStoreFloat4(&this->color, icolor);
XMStoreFloat2(&this->textureCoordinate, itextureCoordinate);
}
XMFLOAT3 position;
XMFLOAT3 normal;
XMFLOAT4 color;
XMFLOAT2 textureCoordinate;
static constexpr unsigned int InputElementCount = 4;
static const D3D11_INPUT_ELEMENT_DESC InputElements[InputElementCount];
};
// Vertex struct for Visual Studio Shader Designer (DGSL) holding position, normal,
// tangent, color (RGBA), and texture mapping information
struct VertexPositionNormalTangentColorTexture
{
VertexPositionNormalTangentColorTexture() = default;
VertexPositionNormalTangentColorTexture(const VertexPositionNormalTangentColorTexture&) = default;
VertexPositionNormalTangentColorTexture& operator=(const VertexPositionNormalTangentColorTexture&) = default;
VertexPositionNormalTangentColorTexture(VertexPositionNormalTangentColorTexture&&) = default;
VertexPositionNormalTangentColorTexture& operator=(VertexPositionNormalTangentColorTexture&&) = default;
XMFLOAT3 position;
XMFLOAT3 normal;
XMFLOAT4 tangent;
uint32_t color;
XMFLOAT2 textureCoordinate;
VertexPositionNormalTangentColorTexture(
XMFLOAT3 const& iposition,
XMFLOAT3 const& inormal,
XMFLOAT4 const& itangent,
uint32_t irgba,
XMFLOAT2 const& itextureCoordinate) noexcept
: position(iposition),
normal(inormal),
tangent(itangent),
color(irgba),
textureCoordinate(itextureCoordinate)
{
}
VertexPositionNormalTangentColorTexture(
FXMVECTOR iposition,
FXMVECTOR inormal,
FXMVECTOR itangent,
uint32_t irgba,
CXMVECTOR itextureCoordinate) noexcept
: color(irgba)
{
XMStoreFloat3(&this->position, iposition);
XMStoreFloat3(&this->normal, inormal);
XMStoreFloat4(&this->tangent, itangent);
XMStoreFloat2(&this->textureCoordinate, itextureCoordinate);
}
VertexPositionNormalTangentColorTexture(
XMFLOAT3 const& iposition,
XMFLOAT3 const& inormal,
XMFLOAT4 const& itangent,
XMFLOAT4 const& icolor,
XMFLOAT2 const& itextureCoordinate) noexcept
: position(iposition),
normal(inormal),
tangent(itangent),
color{},
textureCoordinate(itextureCoordinate)
{
SetColor(icolor);
}
VertexPositionNormalTangentColorTexture(
FXMVECTOR iposition,
FXMVECTOR inormal,
FXMVECTOR itangent,
CXMVECTOR icolor,
CXMVECTOR itextureCoordinate) noexcept
: color{}
{
XMStoreFloat3(&this->position, iposition);
XMStoreFloat3(&this->normal, inormal);
XMStoreFloat4(&this->tangent, itangent);
XMStoreFloat2(&this->textureCoordinate, itextureCoordinate);
SetColor(icolor);
}
void __cdecl SetColor(XMFLOAT4 const& icolor) noexcept { SetColor(XMLoadFloat4(&icolor)); }
void XM_CALLCONV SetColor(FXMVECTOR icolor) noexcept;
static constexpr unsigned int InputElementCount = 5;
static const D3D11_INPUT_ELEMENT_DESC InputElements[InputElementCount];
};
// Vertex struct for Visual Studio Shader Designer (DGSL) holding position, normal,
// tangent, color (RGBA), texture mapping information, and skinning weights
struct VertexPositionNormalTangentColorTextureSkinning : public VertexPositionNormalTangentColorTexture
{
VertexPositionNormalTangentColorTextureSkinning() = default;
VertexPositionNormalTangentColorTextureSkinning(const VertexPositionNormalTangentColorTextureSkinning&) = default;
VertexPositionNormalTangentColorTextureSkinning& operator=(const VertexPositionNormalTangentColorTextureSkinning&) = default;
VertexPositionNormalTangentColorTextureSkinning(VertexPositionNormalTangentColorTextureSkinning&&) = default;
VertexPositionNormalTangentColorTextureSkinning& operator=(VertexPositionNormalTangentColorTextureSkinning&&) = default;
uint32_t indices;
uint32_t weights;
VertexPositionNormalTangentColorTextureSkinning(
XMFLOAT3 const& iposition,
XMFLOAT3 const& inormal,
XMFLOAT4 const& itangent,
uint32_t irgba,
XMFLOAT2 const& itextureCoordinate,
XMUINT4 const& iindices,
XMFLOAT4 const& iweights) noexcept
: VertexPositionNormalTangentColorTexture(iposition, inormal, itangent, irgba, itextureCoordinate),
indices{},
weights{}
{
SetBlendIndices(iindices);
SetBlendWeights(iweights);
}
VertexPositionNormalTangentColorTextureSkinning(
FXMVECTOR iposition,
FXMVECTOR inormal,
FXMVECTOR itangent,
uint32_t irgba,
CXMVECTOR itextureCoordinate,
XMUINT4 const& iindices,
CXMVECTOR iweights) noexcept
: VertexPositionNormalTangentColorTexture(iposition, inormal, itangent, irgba, itextureCoordinate),
indices{},
weights{}
{
SetBlendIndices(iindices);
SetBlendWeights(iweights);
}
VertexPositionNormalTangentColorTextureSkinning(
XMFLOAT3 const& iposition,
XMFLOAT3 const& inormal,
XMFLOAT4 const& itangent,
XMFLOAT4 const& icolor,
XMFLOAT2 const& itextureCoordinate,
XMUINT4 const& iindices,
XMFLOAT4 const& iweights) noexcept
: VertexPositionNormalTangentColorTexture(iposition, inormal, itangent, icolor, itextureCoordinate),
indices{},
weights{}
{
SetBlendIndices(iindices);
SetBlendWeights(iweights);
}
VertexPositionNormalTangentColorTextureSkinning(
FXMVECTOR iposition,
FXMVECTOR inormal,
FXMVECTOR itangent,
CXMVECTOR icolor,
CXMVECTOR itextureCoordinate,
XMUINT4 const& iindices,
CXMVECTOR iweights) noexcept
: VertexPositionNormalTangentColorTexture(iposition, inormal, itangent, icolor, itextureCoordinate),
indices{},
weights{}
{
SetBlendIndices(iindices);
SetBlendWeights(iweights);
}
void __cdecl SetBlendIndices(XMUINT4 const& iindices) noexcept;
void __cdecl SetBlendWeights(XMFLOAT4 const& iweights) noexcept { SetBlendWeights(XMLoadFloat4(&iweights)); }
void XM_CALLCONV SetBlendWeights(FXMVECTOR iweights) noexcept;
static constexpr unsigned int InputElementCount = 7;
static const D3D11_INPUT_ELEMENT_DESC InputElements[InputElementCount];
};
}