DirectDraw是微软发行的DirectX 软件开发工具箱(SDK)中的一部分。DirectDraw是通过基于COM的接口提供服务。在DirectX 5.0版本中,这些接口分别是:IDirectDraw2、IDirectDrawSurface3、IDirectDrawPalette、IDirectDrawClipper和IDirectDrawVideoPort。DirectX的这些组件是向下兼容的,它们仍然支持旧版本中的所有功能。
lpitch是结构体DDSURFACEDESC2的一项,这个结构体描述了页面/表面的一些信息。
lpitch一般译做步幅(
iis7站长之家)或内存宽度(memory width)。注意,它与DDSURFACEDESC2结构体中的另一项dwWidth的意义是不一样的。
lpitch的单位是字节,dwWidth的单位是像素。所以,一个640×480×8(640×480个像素,每像素用8位,即一个字节表示)页面,dwWidth=640 像素(字节)。但是,此时Lpitch不一定就等于640(字节)!同样一个640×480×16的页面,它的Lpitch值也不一定等于640×2(字节)。
这是因为,Lpitch中的字节数有时还包含了高速缓冲区的内存字节数。
通过以上图可以看到,页面外面还有一段额外内存,而这段内存是未知的;所以说,假如一个640×480×8的页面,它的dwWidth值是640,但是,它的Lpitch值应该是640+x,x就是高速缓冲区Cache占用的内存。
所以,如果要访问这个页面缓冲区的第y行的第x个像素,应该这样:
ddsd.lpSurface[x+y*ddsd.lpitch]