我有一個簡單的結構,它包含頂點信息,將在幾何着色器結束:使用結構的載體來填充的DirectX D3D10_SUBRESOURCE_DATA
struct SpriteVertex
{
float topLeft[2];
float dimensions[2];
float opacity;
};
我填充各種值std::vector<SpriteVertex> m_Sprites
在我的地圖類(數字硬編碼在簡化的例子):
// 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'都被正確初始化了嗎? – 2012-04-02 13:23:04
在兩種情況下,numSprites都是'3',使用我從'm_SpriteList-> size()'設置的向量,而對於數組,只需設置爲'3' – Cylindric 2012-04-02 13:24:42
'&(m_SpriteList [0])'是一個'SpriteVertex *',而'&verts'是一個'SpriteVertex **'。 – Martin 2012-04-02 13:27:11