gpt4 book ai didi

c++ - 设置 DirectX9 表面像素

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:13:08 27 4
gpt4 key购买 nike

我试图在 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 和表面的间距之间

谁能告诉我做错了什么?此外,它似乎比我的 window 低两倍。(^如果我尝试绘制超过 1/4 的行,它会覆盖其中的 1/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;
}
}

关于c++ - 设置 DirectX9 表面像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5767102/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com