我正在尝试在D3DSURFACE9中设置单个像素,但它们会遍布整个地方。 我想我以前做过这个,但这次似乎无法做到。
3DLOCKED_RECT lrt;
if(D3D_OK == lpThis->sfRenderingCanvas->LockRect(&lrt,NULL,0))
{
UINT pitch = lrt.Pitch;
VOID *data;
data = lrt.pBits;
UINT Y = (UINT)xmsg.Y;
UINT X = (UINT)xmsg.X;
for(int z=0;xmsg.iNum;z++)
{
if( xmsg.iDataBlock[z]>0 )
((DWORD*)data)[X+Y*pitch+z] = 0xFFFFFF00;
else
((DWORD*)data)[X+Y*pitch+z] = 0xFF000000;
}
}
}
Y介于0和创建曲面时使用的高度之间 X介于0和表面间距
之间有谁可以告诉我做错了什么? 而且,它似乎比我的窗户大约两倍。 (^如果我尝试绘制超过1/4的行,则覆盖其中的1/2。)
答案 0 :(得分:2)
D3DLOCKED_RECT中返回的音高值是每行开头之间的字节数,而不是DWORD的数量。您正在使用DWORD指针索引到缓冲区,因此您实际上使用了四倍的间距。
尝试这样的事情......
DWORD * row = (DWORD *)((char *)lrt.pBits + pitch * Y);
for(int z=0;xmsg.iNum;z++)
{
if( xmsg.iDataBlock[z]>0 )
row[X+z] = 0xFFFFFF00;
else
row[X+z] = 0xFF000000;
}
}