九.创建表面 这一次,我们需要比调用一个函数多一点点的东东。创建表面不是很难的,实际上,也是由一个单独的函数完成的,但是首先你要填充一个描述你所要创建的表面的结构。给你看这个结构之前,我只想告诉你,你不必填满所有的成员。^_^这就是它,DDSURFACEDESC2: typedef struct _DDSURFACEDESC2 { 坦率的说,编写DirectDraw的应用程序其实并不难。但是事情往往是这样,80%的工作只需要我们花费20%的时间就可以完成,而剩下的20%的工作却需要我们花费80%的时间来完成。DirectDraw编程比这还要严重,就笔者的看法,至少90%的工作只需要我们不到10%的时间来完成,而剩下的不到10%的工作却至少需要我们90%的时间!结构DDSURFACEDESC就是10%的一部分,它较为复杂,它嵌套了其它的结构。让我们看看这个怪物到底做了什么。我只说说重点的部分: · DWORD dwSize:任何DirectX结构都有dwSize这个成员,表示结构的大小。有了它,当函数接收到指向这些结构的指针时,就可以测定结构的大小了。 · DWORD dwFlags:太好了,又有一大堆标志常量了^_^ !这些标志告诉接收函数哪些数据成员是有效的。要想使需要的数据成员有效,就必须传递相对应的标志常量给dwFlags,你当然可以用“|”组合它们。以下是列表: ◎ DDSD_ALL:所有的数据成员都有效。 ◎ DDSD_ALPHABITDEPTH:表示数据成员dwAlphaBitDepth有效。 ◎ DDSD_BACKBUFFERCOUNT:表示数据成员dwBackBufferCount有效。 ◎ DDSD_CAPS:表示数据成员ddsCaps有效。 ◎ DDSD_CKDESTBLT:表示数据成员ddckCKDestBlt有效。 ◎ DDSD_CKDESTOVERLAY:表示数据成员ddckCKDestOverlay有效。 ◎ DDSD_CKSRCBLT:表示数据成员ddckCKSrcBlt有效。 ◎ DDSD_CKSRCOVERLAY:表示数据成员ddckCKSrcOverlay有效。 ◎ DDSD_HEIGHT:表示数据成员dwHeight有效。 ◎ DDSD_LINEARSIZE:表示数据成员dwLinearSize有效。 ◎ DDSD_LPSURFACE:表示数据成员lpSurface有效。 ◎ DDSD_MIPMAPCOUNT:表示数据成员dwMipMapCount有效。 ◎ DDSD_PITCH:表示数据成员lPitch有效。 ◎ DDSD_PIXELFORMAT:表示数据成员ddpfPixelFormat有效。 ◎ DDSD_REFRESHRATE:表示数据成员dwRefreshRate有效。 ◎ DDSD_TEXTURESTAGE:表示数据成员dwTextureStage有效。 ◎ DDSD_WIDTH:表示数据成员dwWidth有效。 · DWORD dwheight,dwWidth:表示要创建表面的尺寸。以象素为单位。 · LONG lPitch:这个需要好好解释一下。lPitch表示从画面一行行首数据到下一行行首数据的距离,以字节为单位。例如,640×480×16,每一行有640个象素,每个象素需要两个字节装颜色的信息,所以pitch应该是1280个字节,对不对?可能有一些显示卡要多于1280,这每行多于的内存没有装置任何的图形数据,但是防备有些显示卡不能在线性内存模式显示图形,你还是把多于地放在那吧。这种情况很少发生,但你最好还是考虑在内。 · LPVOID lpSurface:指向表面内存开始地址的指针。不管你使用什么显示模式,你都可以用DirectDraw创建的线性地址模式操作表面象素。要想这样,你必须锁住表面,但这已经超出我们现在所学的了。 · DWORD dwBackBufferCount:后缓冲区的数目。以后我们会在提到它。 · DWORD ddckCKDestBlt,ddckCKSrcBlt:前者为描述位转换操作的目标颜色值,后者是源颜色值。我们将在以后的文章中具体介绍。 · DDPIXELFORMAT ddpfPixelFormat:这个结构包含了描述显示模式的象素格式标识符。以后会具体介绍,现在就不多说了。 · DDSCAPS2 ddsCaps:这是最后一个重要的结构。它是一个充满控制标志的结构。感谢菩萨,这是一个小结构,结构成员中只有一个很重要。让我们看一看: typedef struct _DDSCAPS2{ |
正在阅读:DirectX游戏开发入门DirectX游戏开发入门
2005-07-18 09:48
出处:
责任编辑:moningfeng
键盘也能翻页,试试“← →”键