IDirect3DSurface9的LockRect方法得到的缓冲区的行为什么是32个字节对齐的
我要用Direct3D显示一幅2D的图像,在创建IDirect3DDevice9对象的时候,D3DPRESENT_PARAMETERS参数的成员如下赋值
BackBufferWidth和BackBufferHeight等于图像的尺寸
BackBufferFormat = D3DFMT_X8R8G8B8(真彩色32位)
SwapEffect = D3DSWAPEFFECT_COPY(用ScrollView显示图像,Present的时候要指定范围)
hDeviceWindow = ScrollView的m_hWnd
Windowed = TRUE
BackBufferCount = 1
Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER
在显示的时候先用IDirect3DDevice9的GetBackBuffer方法得到IDirect3DSurface9对象,然后调用IDirect3DSurface9对象的LockRect方法,第二个参数是NULL,第三个参数是0,这样得到的D3DLOCKED_RECT变量的Pitch成员的值总是按32个字节对齐的(32的倍数),和(BackBufferWidth * 4)不一定相等。请问这是什么原因,如何解决。
另外,请问LockRect方法的第二个参数怎么用。
[解决办法]
这应该是和硬件相关的,以这种对齐方式存取最有效率。