c – 设置DirectX9表面像素
发布时间:2020-12-16 07:25:10 所属栏目:百科 来源:网络整理
导读:我正在尝试在D3DSURFACE9中设置单个像素,但它们会遍布整个地方. 我想我以前做过这件事,但这次似乎无法做到. 3DLOCKED_RECT lrt;if(D3D_OK == lpThis-sfRenderingCanvas-LockRect(lrt,NULL,0)){ UINT pitch = lrt.Pitch; VOID *data; data = lrt.pBits; UINT
我正在尝试在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和创建曲面时使用的高度之间 谁能说出我做错了什么? 解决方法
在
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; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读