Created
October 17, 2012 03:12
-
-
Save vinjn/3903507 to your computer and use it in GitHub Desktop.
Convert DX9_VERTEX_ELEMENT to DX10/DX11_INPUT_ELEMENT
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
LPCSTR ConvertSemantic( const D3DDECLUSAGE& d3d9Form ) | |
{ | |
switch( d3d9Form ) | |
{ | |
case D3DDECLUSAGE_POSITION: return "POSITION"; | |
case D3DDECLUSAGE_BLENDWEIGHT: return "BLENDWEIGHT"; | |
case D3DDECLUSAGE_BLENDINDICES: return "BLENDINDICES"; | |
case D3DDECLUSAGE_NORMAL: return "NORMAL"; | |
case D3DDECLUSAGE_PSIZE: return "PSIZE"; | |
case D3DDECLUSAGE_TEXCOORD: return "TEXCOORD"; | |
case D3DDECLUSAGE_TANGENT: return "TANGENT"; | |
case D3DDECLUSAGE_BINORMAL: return "BINORMAL"; | |
case D3DDECLUSAGE_TESSFACTOR: return "TESSFACTOR"; | |
case D3DDECLUSAGE_POSITIONT: return "POSITIONT"; | |
case D3DDECLUSAGE_COLOR: return "COLOR"; | |
case D3DDECLUSAGE_FOG: return "FOG"; | |
case D3DDECLUSAGE_DEPTH: return "DEPTH"; | |
case D3DDECLUSAGE_SAMPLE: return "SAMPLE"; | |
default: return "UNKNOWN"; | |
} | |
} | |
DXGI_FORMAT ConvertType( const D3DDECLTYPE& d3d9Form ) | |
{ | |
switch( d3d9Form ) | |
{ | |
case D3DDECLTYPE_FLOAT1: return DXGI_FORMAT_R32_FLOAT; | |
case D3DDECLTYPE_FLOAT2: return DXGI_FORMAT_R32G32_FLOAT; | |
case D3DDECLTYPE_FLOAT3: return DXGI_FORMAT_R32G32B32_FLOAT; | |
case D3DDECLTYPE_FLOAT4: return DXGI_FORMAT_R32G32B32A32_FLOAT; | |
case D3DDECLTYPE_D3DCOLOR: return DXGI_FORMAT_R8G8B8A8_UNORM; | |
case D3DDECLTYPE_UBYTE4: return DXGI_FORMAT_R8G8B8A8_UINT; | |
case D3DDECLTYPE_SHORT2: return DXGI_FORMAT_R16G16_SINT; | |
case D3DDECLTYPE_SHORT4: return DXGI_FORMAT_R16G16B16A16_SINT; | |
case D3DDECLTYPE_UBYTE4N: return DXGI_FORMAT_R8G8B8A8_UNORM; | |
case D3DDECLTYPE_SHORT2N: return DXGI_FORMAT_R16G16_SNORM; | |
case D3DDECLTYPE_SHORT4N: return DXGI_FORMAT_R16G16B16A16_SNORM; | |
case D3DDECLTYPE_USHORT2N: return DXGI_FORMAT_R16G16_UNORM; | |
case D3DDECLTYPE_USHORT4N: return DXGI_FORMAT_R16G16B16A16_UNORM; | |
case D3DDECLTYPE_UDEC3: return DXGI_FORMAT_R10G10B10A2_UINT; | |
case D3DDECLTYPE_DEC3N: return DXGI_FORMAT_R10G10B10A2_UNORM; | |
case D3DDECLTYPE_FLOAT16_2: return DXGI_FORMAT_R16G16_FLOAT; | |
case D3DDECLTYPE_FLOAT16_4: return DXGI_FORMAT_R16G16B16A16_FLOAT; | |
case D3DDECLTYPE_UNUSED: | |
default: return DXGI_FORMAT_UNKNOWN; | |
} | |
} | |
HRESULT ConvertDeclaration( const D3DVERTEXELEMENT9 original[ MAX_VERTEX_ELEMENTS ], std::vector<D3D11_INPUT_ELEMENT_DESC>& output) | |
{ | |
for( UINT i = 0; i < MAX_VERTEX_ELEMENTS; ++i ) | |
{ | |
if( original[i].Stream == 0xFF ) | |
break; | |
// Convert this element | |
D3D11_INPUT_ELEMENT_DESC item; | |
item.SemanticName = ConvertSemantic( static_cast< D3DDECLUSAGE >( original[i].Usage ) ); | |
item.SemanticIndex = original[i].UsageIndex; | |
item.AlignedByteOffset = original[i].Offset; | |
item.InputSlot = original[i].Stream; | |
item.InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; | |
item.InstanceDataStepRate = 0; | |
item.Format = ConvertType( static_cast< D3DDECLTYPE >( original[i].Type ) ); | |
output.push_back(item); | |
} | |
return S_OK; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment