设置DirectX9表面像素



我试图在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)

在D3DLOCKED_RECT中返回的间距值是每行开始之间的字节数,而不是DWORDs的数量。您使用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;
   }
}

相关内容

  • 没有找到相关文章

最新更新