Как переместить объявление D3DVERTEXELEMENT9 в заголовок - PullRequest
1 голос
/ 20 ноября 2011

Я не могу переместить следующее объявление в мой заголовок C ++:

D3DVERTEXELEMENT9 vertexFormat[] =
{
{0,  0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION,0},
{0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD,0},
{0, 20, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL,0},
{0, 32, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TANGENT,  0},
{0, 44, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BINORMAL, 0}, 
{1, 0,  D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 1},
{1, 16, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 2},
{1, 32, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 3},
{1, 48, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 4},
 D3DDECL_END()
}; 

В чем проблема? Как я могу решить это? Google показывает мне один интересный результат (http://www.gamedev.net/topic/551682-about-d3dvertexelement9/),, но мне все равно не удается его скомпилировать: (

Чтобы было ясно - я хочу использовать vertexFormat в качестве члена моего класса.

Ответы [ 2 ]

1 голос
/ 05 декабря 2011

Использованный мною подход, который может быть полезен, заключается в предоставлении реализации в одном файле cpp: (* В моем примере используется DirectX10, но для этого ответа версия dx не имеет значения )

(. H) Заголовок:

int getLayoutPosTexNormCInstancedSize();
D3D10_INPUT_ELEMENT_DESC* getLayoutPosTexNormCInstanced();

(. Cpp) Имплантация:

D3D10_INPUT_ELEMENT_DESC layoutPosTexNormCInstanced[] = 
{
{"POSITION",     0, DXGI_FORMAT_R32G32B32_FLOAT,    0,  0, D3D10_INPUT_PER_VERTEX_DATA, 0},
{"TEXCOORD",     0, DXGI_FORMAT_R32G32_FLOAT,       0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0},
{"NORMAL",       0, DXGI_FORMAT_R32G32B32_FLOAT,    0, 20, D3D10_INPUT_PER_VERTEX_DATA, 0},
{"TANGENT",      0, DXGI_FORMAT_R32G32B32_FLOAT,    0, 32, D3D10_INPUT_PER_VERTEX_DATA, 0},
{"BINORMAL",     0, DXGI_FORMAT_R32G32B32_FLOAT,    0, 44, D3D10_INPUT_PER_VERTEX_DATA, 0},
{"BLENDINDICES", 0, DXGI_FORMAT_R8G8B8A8_SINT,      0, 56, D3D10_INPUT_PER_VERTEX_DATA, 0 }, //4
{"mTransform",   0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1,  0, D3D10_INPUT_PER_INSTANCE_DATA, 1 },
{"mTransform",   1, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, 16, D3D10_INPUT_PER_INSTANCE_DATA, 1 },
{"mTransform",   2, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, 32, D3D10_INPUT_PER_INSTANCE_DATA, 1 },
{"mTransform",   3, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, 48, D3D10_INPUT_PER_INSTANCE_DATA, 1 },
};


D3D10_INPUT_ELEMENT_DESC* getLayoutPosTexNormCInstanced() { return layoutPosTexNormCInstanced; }
int getLayoutPosTexNormCInstancedSize() { return sizeof(layoutPosTexNormCInstanced) / sizeof(D3D10_INPUT_ELEMENT_DESC); }

Тогда, по крайней мере, когда вы ссылаетесь или запрашиваете входную разметку при создании буфера (ов) вершин, вы можете просто вызвать функцию getLayoutPosTexNormCInstanced, и их также можно легко переместить в класс / структуру или даже предоставить модуль многократного использования, например DLL.

0 голосов
/ 05 декабря 2011

Может быть, вы просто забыли ключевое слово "static" перед объявлением?

static D3DVERTEXELEMENT9 vertexFormat[] =
{
{0,  0, .......

или в классе:

D3DWhatever.h

class D3DWhatever
{
    static D3DVERTEXELEMENT9 vertexFormat[];

};

D3DWhatever.cpp

D3DWhatever::D3DVERTEXELEMENT9 vertexFormat[] =
{
{0,  0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION,0},
{0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD,0},
{0, 20, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL,0},
{0, 32, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TANGENT,  0},
{0, 44, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BINORMAL, 0}, 
{1, 0,  D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 1},
{1, 16, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 2},
{1, 32, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 3},
{1, 48, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 4},
 D3DDECL_END()
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...