1
// Lock the vertex buffer.
hr = aVertexBuffer->Map(D3D10_MAP_WRITE_DISCARD, 0, (void**)&verticesPtr);
// Copy the data into the vertex buffer.
memcpy(verticesPtr, (void*)vertices, (sizeof(LolAnyDataStructure)* aVertexCount));

この場合、私は構造体 LolAnyDataStructure を使用しています。DX は、IASetVertexBuffers を呼び出したときに構造体のどこにテクスチャと位置があるかをどのように知るのでしょうか。

編集:

vertexBufferDesc.Usage = D3D10_USAGE_DYNAMIC;
vertexBufferDesc.ByteWidth = sizeof(VertexType)* aVertexCount;
vertexBufferDesc.BindFlags = D3D10_BIND_VERTEX_BUFFER;
vertexBufferDesc.CPUAccessFlags = D3D10_CPU_ACCESS_WRITE;
vertexBufferDesc.MiscFlags = 0;
4

1 に答える 1

2

頂点バッファーはバイトとして格納されるため、これらのバイトを記述する入力レイアウトを作成する必要があります。

コードにこのようなものが必要です。

// Define the input layout
D3D10_INPUT_ELEMENT_DESC layout[] =
{
    { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 },
};
UINT numElements = sizeof( layout ) / sizeof( layout[0] );

// Create the input layout
D3D10_PASS_DESC PassDesc;
g_pTechnique->GetPassByIndex( 0 )->GetDesc( &PassDesc );
hr = g_pd3dDevice->CreateInputLayout( layout, numElements, PassDesc.pIAInputSignature,
                                      PassDesc.IAInputSignatureSize, &g_pVertexLayout );

この例ではlayout、構造体を記述するのは です。

于 2013-11-09T03:17:11.533 に答える