のDirectX D3D10_SUBRESOURCE_DATAを移入するために構造体のベクトルを使用して後で私はジオメトリシェーダになってしまいます頂点情報を含む単純な構造体を持っている
// the container is defined in the renderer.h:
std::vector<SpriteVertex>* m_SpriteList;
// the rest is the body of renderer.cpp:
SpriteVertex v;
v.topLeft[0] = 0;
v.topLeft[1] = 0;
v.dimensions[0] = 0.08;
v.dimensions[1] = 0.106667;
v.opacity = 1;
m_Sprites.push_back(v);
v.topLeft[0] = 0.08;
v.topLeft[1] = 0;
v.dimensions[0] = 0.08;
v.dimensions[1] = 0.106667;
v.opacity = 1;
m_Sprites.push_back(v);
v.topLeft[0] = 0.16;
v.topLeft[1] = 0;
v.dimensions[0] = 0.08;
v.dimensions[1] = 0.106667;
v.opacity = 1;
m_Sprites.push_back(v);
その後、私のレンダラークラスでは、私はこのデータをバッファに移入:例を簡素化するには、ハードコードされた番号)
D3D10_SUBRESOURCE_DATA initData;
initData.pSysMem = &(m_SpriteList[0]);
D3D10_BUFFER_DESC bd;
bd.Usage = D3D10_USAGE_DEFAULT;
bd.ByteWidth = sizeof(SpriteVertex)*(numSprites);
bd.BindFlags = D3D10_BIND_VERTEX_BUFFER;
bd.CPUAccessFlags = 0;
bd.MiscFlags = 0;
pD3DDevice->CreateBuffer(&bd, &initData, &pVertexBuffer));
// Set vertex buffer
UINT stride = sizeof(SpriteVertex);
UINT offset = 0;
pD3DDevice->IASetVertexBuffers(0, 1, &pVertexBuffer, &stride, &offset);
pColorMap->SetResource(pTexture1);
for(UINT p = 0; p < techDesc.Passes; p++)
{
pTechnique->GetPassByIndex(p)->Apply(0);
pD3DDevice->Draw(numSprites, 0);
}
すべてが空白の画面です。私は単純な配列を持つベクトルを交換する場合
、スプライトは罰金描かれています。明らかに
SpriteVertex verts[3];
verts[0].topLeft[0] = 0.0f;
verts[0].topLeft[1] = 0.0f;
verts[0].dimensions[0] = 0.08f;
verts[0].dimensions[1] = 0.106667;
verts[0].opacity = 1;
verts[1].topLeft[0] = 0.08f;
verts[1].topLeft[1] = 0.0f;
verts[1].dimensions[0] = 0.08f;
verts[1].dimensions[1] = 0.106667;
verts[1].opacity = 1;
verts[2].topLeft[0] = 0.16f;
verts[2].topLeft[1] = 0.0f;
verts[2].dimensions[0] = 0.08f;
verts[2].dimensions[1] = 0.106667;
verts[2].opacity = 1;
D3D10_SUBRESOURCE_DATA initData;
initData.pSysMem = &verts;
私はちょうど一時配列を作成し、私のベクトルからの値を移入、または単にアレイを使用することができます最初は、このようにしてベクトルの '伝統的な'配列にアクセスできるという印象を受けています。
私はポインタや参照をどこかで誤って使用していますか?
「numSprites」はどちらの場合も正しく初期化されていますか? –
numSpritesはどちらの場合でも 'm_SpriteList-> size()'から設定しているベクトルを使用し、 '3 'に設定するだけです。 – Cylindric
'&(m_SpriteList [0]) 'is 'SpriteVertex *'である '&verts'と比較して' SpriteVertex * 'を返します。 – Martin