在将VERTEX
结构传递给缓冲区时,我注意到了一些奇怪之处。起初我认为这是一个错误的自定义函数,用于读取.obj文件,但调试进一步缩小了问题。举个例子:
struct VERTEX{
XMFLOAT3 Translation;
D3DXCOLOR Color;
};
它的实例:
VERTEX foo[] = {
{XMFLOAT3(-0.5f, 0.0f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(-0.5f, 0.5f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(0.0f, 0.0f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(0.0f, 0.5f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(0.9f, 0.0f, 0.0f), D3DXCOLOR(0.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(2.0f, 0.9f, 0.0f), D3DXCOLOR(0.0f,1.0f,0.0f,1.0f)},
};
传递到顶点缓冲区时工作正常。
动态创建结构的数组实例会产生奇怪的结果。我会看到一个顶点出现,或者没有。这是一个例子,假设foo
是一个返回[working] VERTEX*
顶点数组的函数:
VERTEX *bar= new VERTEX[barsize];
VERTEX foo[] = {
{XMFLOAT3(-0.5f, 0.0f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(-0.5f, 0.5f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(0.0f, 0.0f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(0.0f, 0.5f, 0.0f), D3DXCOLOR(1.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(0.9f, 0.0f, 0.0f), D3DXCOLOR(0.0f,1.0f,1.0f,1.0f)},
{XMFLOAT3(2.0f, 0.9f, 0.0f), D3DXCOLOR(0.0f,1.0f,0.0f,1.0f)},
};
bar=foo;
后来......
memcpy(MappedResource.pData, &bar, sizeof(bar));
我是否正在尝试访问foo
指向的数据,这样只会传入第一组坐标?
*编辑:写这篇文章时,foo和bar混合了。这篇文章现在显示了正确的例子。
答案 0 :(得分:1)
问题在于这一行
巴= FOO;
memcpy(MappedResource.pData,& bar,sizeof(bar));
bar是VERTEX的指针,而不是x86机器上的VERTEX数组,sizeof(bar)== 4,因此您不会复制所有元素。
你可以先计算你需要多少个Vertex元素,然后在使用memcpy时,使用sizeof(VERTEX)* vertex_count。