设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> 游戏开发 >> DirectX5.0最新游戏编程指南 DirectDraw篇 三、DirectDraw的要素(三)
精品推荐
游戏开发点击TOP10
·DirectX5.0最新游戏编程指南 DirectDraw教程篇 二、第一个DirectDraw实例
·用Excel编写小游戏
·五子棋的原代码
·游戏开发方面相关的电子书下载
·游戏文件系统的解决方案
·基于LOD的大规模真实感室外场景实时渲染技术的初步研究 part II&III
·用MFC构造DirectX应用框架
·游戏开发开门
·《Windows游戏编程大师技巧》(第二版)第11章
·DirectX8.1的DirectDraw7研究手记(三)
编程开发点击TOP10
·数字小键盘指法练习
·ASP.NET 程序中常用的三十三种代码
·用C语言编通讯录程序(初学者级别的)
·我写的Java学生成绩管理系统源代码
·CHK文件恢复工具
·Modem 常用AT指令集
·java笔试题
·异常java.sql.SQLException: Io exception:The Network Adapter could not establish connection
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
精选专题

DirectX5.0最新游戏编程指南 DirectDraw篇 三、DirectDraw的要素(三)

作者: 来源:网络文章 时间:2005-12-17 22:40:49

DirectX5.0最新游戏编程指南 DirectDraw篇 三、DirectDraw的要素(三)(1)

4.4、创建表面
    DirectDrawSurface对象表征了驻留在显示内存中的一个表面。如果显示内存用完了或者是显式地创建,该表面也可存在于系统内存中。
你可以使用IDirectDraw2::CreateSurface方法创建一个或多个表面。调用CreateSurface时,必须指定表面的大小、表面类型(是单一表面还是复杂表面)、像素格式(如果表面不使用索引的调色板)。所有的这些特性都包含在DDSURFACEDESC结构中,在调用时需要将该结构的地址传送过去。如果硬件不支持请求的特性或者此前已经将那些资源分配给了另一个DirectDrawSurface对象,调用就会失败。
    创建单一的表面或多表面只需要几行简单的代码。创建表面有四个主要的步骤。每一个步骤都需要比前一个步骤更多的准备工作,不过并不太难,它们是:
 (1). 创建主表面
 (2). 创建一个屏外表面
 (3). 创建复杂表面和翻转链
 (4). 创建宽表面
    在缺省的情况下,DirectDraw在本地视频内存创建一个表面,如果足够的本地视频内存保存该表面,DirectDraw就尝试利用非本地视频内存(仅在一些AGP设备系统中)。你可以在调用CreateSurface时对DDSCAPS结构赋以适当的标志来显式地指明在哪类内存中创建表面。
4.4.1、创建主表面
    主表面是当前在显示器上可见的并且由DDSCAPS_PRIMARYSURFACE标志指明的表面,每一个DirectDraw对象只能有一个主表面。
当你创建一个主表面时,其大小应该同当前的显示模式匹配。因此,在这种情况下你不需要指明表面的大小。事实上,如果你指明了表面的大小,即使同当前的显示模式匹配,也会导致创建过程的失败。
    下面的例子显示了如何设置DDSURFACEDESC结构的相关成员来创建主表面:
DDSURFACEDESC ddsd;
ddsd.dwSize = sizeof(ddsd);
   // Tell DirectDraw which members are valid.
ddsd.dwFlags = DDSD_CAPS;
    // Request a primary surface.
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
 
4.4.2、创建屏外表面
    屏外表面通常用于位图的缓存,该位图将被位块传输到主表面或后台缓冲区中。你必须设定包含DDSC_WIDTH和DDSD_HEIGHT标志并设定dwWidth和dwHeight成员 为适当的值来说明屏外表面的大小。另外,还必须在DDSCAPS结构中包含DDSCAPS_OFFSCREENPLAIN标志。
    当没有足够的显示内存使用时,DirectDraw就使用系统内存来创建表面。你可以在DDSCAPS结构中的dwCaps成员包含DDSCAPS_SYSTEMMEMORY或 DDSCAPS_VIDEOMEMORY标志来显式地指明是在显示内存还是在系统内存中创建表面。下面的例子显示了创建一个屏外表面之前的准备工作:
DDSURFACEDESC ddsd;
ddsd.dwSize = sizeof(ddsd);
  
// Tell DirectDraw which members are valid.
ddsd.dwFlags = DDSD_CAPS DDSD_HEIGHT DDSD_WIDTH;
  
// Request a simple off-screen surface, sized
// 100 by 100 pixels.
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
dwHeight = 100;
dwWidth = 100;
    在DirectX以前的版本中,屏外表面的最大宽度不能超过主表面的宽度。在DirectX 5中,你可以创建任意宽度的屏外表面,只要显示设备指出就行。需要注意的是,当声明了屏外表面的宽度时,如果显示内存容不下请求的表面的宽度,该表面将换在系统内存中创建。如果显式地声明使用视频内存,而视频内存又不够时,创建表面的工作就会失败。

共7页 9 7 [1] [2] [3] [4] [5] [6] [78 :>

DirectX5.0最新游戏编程指南 DirectDraw篇 三、DirectDraw的要素(三) 相关文章:
DirectX5.0最新游戏编程指南 DirectDraw篇 三、DirectDraw的要素(三) 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com