|
|
这是一个向索引缓冲中写数据的函数:
HRESULT InitIB()
{
if( FAILED( g_pd3dDevice->CreateIndexBuffer( (g_cxHeight-1)*(g_czHeight-1)*2 * sizeof(MYINDEX), 0, D3DFMT_INDEX16, D3DPOOL_DEFAULT, &g_pIB, NULL ) ) )
{
return E_FAIL;
}
MYINDEX i;
MYINDEX i2;
MYINDEX* pI;
if( FAILED( g_pIB->Lock( 0, (g_cxHeight-1)*(g_czHeight-1)*2 * sizeof(MYINDEX), (void**)&pI, D3DLOCK_NO_DIRTY_UPDATE ) ) )
return E_FAIL;
for( DWORD z = 0 ; z < g_czHeight-1 ; z++ )
{
for( DWORD x = 0 ; x < g_cxHeight-1 ; x++ )
{
//每一次循环定义了一个四边形。按照“左侧上端三角形+右侧下端三角形”的顺序来填充索引缓冲。
i._0 = (z*g_cxHeight+x);
i._1 = (z*g_cxHeight+x+1);
i._2 = ((z+1)*g_cxHeight+x);
*pI++ = i;
i._0 = ((z+1)*g_cxHeight+x);
i._1 = (z*g_cxHeight+x+1);
i._2 = ((z+1)*g_cxHeight+x+1);
*pI++ = i;
}
}
g_pIB->Unlock();
return S_OK;
}
问题:
我用pI、(*pI)._1等表达式监视向缓冲中写数据的情况,i值正常,pI、(*pI)._1等表达式的值却总是为0.在顶点缓冲中也遇到同样的情况,其中MYINDEX结构定义如下:
struct MYINDEX
{
WORD _0, _1, _2; /// WORD,16位索引
};
多次修改表达式,希望能够知道*pI++ = i;执行后,缓冲中数据的变话,但始终不能如愿,不知是何原因。敬请赐教。 |
|