1.如你所知,显示在屏幕上的图像仅仅只是是以某种格式存储在内存中的有色像素组成的矩阵。或是调色板化的或是RGB模式的。在不论什么一种情况下。要想做点什么你都必须知道如何绘制图到内存中,然而DirectDraw的设计者决定将显存的概念予以抽象,从而不管你的系统中的显卡有多么古怪,訪问视频表面的方法都是一样的。因此DirectDraw支持显示表面。

2.显示表面是能存储位图数据的矩形内存区域。有两种显示表面:主显示表面和从显示表面。

I. 主显示表面直接相当于被显卡光栅画的实际显存,而不论什么时候都是可见的。不论什么DirectDraw程序里都仅仅能有一个主显示表面,它直接指向屏幕图像并常驻VRAM(显存,帧存储器)。

II.从显示表面更灵活,大小随意,内存同意可随意创建。

用途:

A. 创建一或两个从表面它们总是和主显示表面有相同地色彩深度和几何分布。

当用下一个动画帧更新这些离屏面,然后迅速的拷贝或是用换页技术将离屏面切换到主显示面能够达到平滑显示动画的目的。

这称为双缓冲或三缓冲。

B.保存你的位图图像和游戏中的表示对象的动画。仅仅有使用DirectDraw显示表面才干调用使用于位图数据的硬件加速。

3.创建一个主题显示表面

A. 步骤:

     I.填充一个 DDSURFACEDESC2 数据结构,描写叙述你所希望创建的显示表面

     II.调用IDirectDraw7::CreareSurface()来创建显示表面。

DDSURFACEDESC2的结构

	typedef struct _DDSURFACEDESC2
{
DWORD dwSize;
DWORD dwFlags;
DWORD dwHeight;
DWORD dwWidth;
union
{
LONG lPitch;
DWORD dwLinearSize;
} DUMMYUNIONNAMEN(1);
DWORD dwBackBufferCount;
union
{
DWORD dwMopMapCount;
DWORDdwRefreshRate;
} DUMMYUNIONNAMEN(2)
DWORD dwAlphaBitDepth;
DWORD dwReserved;
LPVOID lpSurface;
DDCOLORKEY ddckCKDestOverlay;
DDCOLORKEY ddckCKDestBLt;
DDCOLORKEY ddckCKSrcOverlay;
DDCOLORKEY ddckCKSrcBlt;
DDCOLORKEY ddpfPixelFormat;
DDSCAPS2 ddsCaps;
DWORD dwTextureStage;
} DDSURFACEDESC2,FAR* LPDDSURFACEDESC2;

重要结构解释:

dwSize:全部Direct数据结构里面最重要的域,保存结构大小的字符。

     dwFlags:指示数据填充域或操作接受域。

     dwWidth:表面以像素计的宽度

     dwHeight:表面以像素计的高度。

     lPitch:显示模式的水平内存距离。

     lpSurface:这个域用于获取指向你所创建的显示面驻留的实际内存的指针。

dwBackBufferCount:这个域用于设置或是读取后备缓冲。

ddckCKDestBLt:这个域用于控制目标色键。即在位块传输操作中控制能够写入的色彩部件。

     ddckCKSrcBlt:这个域用于指示源色键,即基本上是运行位图操作时你不希望进行位块传输的颜色。

     ddpfPixelFormat:这个域用于获取显示表面的像素格式。

     ddsCaps:这个域用于返回你所请求的显示表面的一些未在别处定义的属性。

B.创建显示表面

 LPDDSURFACEDESC2 ddsd;
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps = DDSCAPS_PRIMARYSURFACE; if(FAILED(lpdd -> CreareSurface(&ddsd,&lpddsprimary,NULL)))
{
//ERROR
}

若函数调用成功,lpddsprimary会指向新的显示表面接口。

《Windows游戏编程大师技巧》学习笔记——关于创建显示表面的更多相关文章

  1. Windows游戏编程大师技巧之三角形填充

    一.三角形的种类 三角形一般可以分为如下的四种类型(这四种类型是对于计算机来说的,不是数学意义上的分类): 平顶三角形:就是在计算机中显示的上面两个顶点的Y坐标相同. 平底三角形:就是在计算机中显示的 ...

  2. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记1——创建窗口&GDI

    第1章 创建窗口 步骤: 窗口类的设计 窗口类的注册 窗口的正式创建 窗口的显示与更新 消息循环体系 窗口过程函数处理消息 1. 设计:使用WNDCLASSEX结构体,这里注意的是C++中的结构体中的 ...

  3. 3D游戏编程大师技巧──2D引擎的编译问题

    接上一篇文章,这里将介绍2D引擎的编译,从现在开始才真正进入<3D游戏编程大师技巧>的学习.本书的第一.二章只是简介了游戏编程和windows编程,从第三章开始才是介绍<window ...

  4. 3D游戏编程大师技巧──环境搭建

    刚开微博,想借助这个平台与大家交流,写下自己的学习记录,希望得到大家的批评指正. 好了,进入主题.这段时间对游戏编程很感兴趣,于是在网友的推荐下开始学习<3D游戏编程大师技巧>这本书.今天 ...

  5. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记5——Direct3D中的顶点缓存和索引缓存

    第12章 Direct3D绘制基础 1. 顶点缓存 计算机所描绘的3D图形是通过多边形网格来构成的,网网格勾勒出轮廓,然后在网格轮廓的表面上贴上相应的图片,这样就构成了一个3D模型.三角形网格是构建物 ...

  6. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记2——透明贴图,动画技术

    第5章 透明贴图 像这样直接贴图会产生这种情况,所以我们需要透明贴图. 透明遮罩法:主要利用BitBlt函数中Raser(光栅)值的运算,需要准备素材图和遮罩图: 这个方法的原理解释见书131页. 示 ...

  7. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记3——输入消息处理,物理建模与粒子系统初步

    第7章 Windows游戏输入消息处理 1. 键盘消息处理 之前提到的窗口过程函数有两参数与消息输出有关——wParam和llParam LRESULT CALLBACK WindowProc( _I ...

  8. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记4——Direct3D编程基础

    第11章 Direct3D编程基础 2D游戏是贴图的艺术,3D游戏是渲染的艺术.这句话在我学过了之前的GDI编程之后,前一句算是有所体会,现在是来理解后一句的时候了. 安装DirectX SDK配置啥 ...

  9. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记10——三维天空的构建&三维粒子的实现&多游戏模型的载入

    第23章 三维天空的构建 目前描述三维天空的技术主要包括三种类型,直接来介绍使用最广泛的模拟技术,详细的描述可以见作者的博文. 天空盒(Sky Box),即放到场景的是一个立方体.它是目前使用最广泛的 ...

随机推荐

  1. 使用 ssh 从 Gerrit 获取 patch 信息

    使用命令行(ssh)对Gerrit进行查询, 官方地址:https://review.openstack.org/Documentation/cmd-query.html 程序例子 import os ...

  2. struts2 result type类型

    result标签中type的类型 类型 说明 chain 用于Action链式处理 dispatcher 用于整合JSP,是<result>元素默认的类型 freemarket 用来整合F ...

  3. JavaScript经常使用代码段

    把例如以下代码增加<body>区域中: 后退 前进 <!--<input type="button" value="后退" onClic ...

  4. 解决——CSS :before、:after ,当content使用中文时有时候会出现乱码

    问题: 在进行页面开发时,经常会使用:before, :after伪元素创建一些小tips,但是在:before或:after的content属性使用中文的话,会导致某些浏览器上出现乱码. 例如我遇到 ...

  5. unity3d的uGUI基本操作

    uGUI可以免去用户自行创建控件的烦恼,比如button.下面是一个实例: 1.create>UI>Button,如下图所示 新建完成后会出现Canvas和EventSystem,如下图所 ...

  6. 使用jq Deferred防止代码被回调函数分解分解的支离破碎

    //移动人物 function moveInterval(stopPosotion){ var dtd = $.Deferred(); // 生成Deferred对象 var yidong= wind ...

  7. spring mvc接收参数方式,json格式返回请求数据

    1 使用方法形参使用变量接收提交的数据 2 在方法的形参中使用模型接收数据 3 如果在提交的表单中有多个数据模型,需要创建一个新的Bean,里面的属性是要接收的对象变量. 4 接收提交的日期字符串,转 ...

  8. C 语言 ioctl

    /* *@author cody *@date 2014-08-12 *@description */ /* #include <sys/ioctl.h> send control and ...

  9. 点滴积累【JS】---JS小功能(JS实现排序)

    效果: 思路: 首先,获得用到的ID,在把得到的<li>数组添加到array数组里面,然后在进行array排序,排序完后再将array中的数据用appendChild添加到ul里面: 代码 ...

  10. Unity3D碰撞器事件测试(Rigidbody/Kinematic/Trigger/Collider)

    1.Kinematic和刚体之间的碰撞事件 Unity官方有一个详细的碰撞关系表:http://docs.unity3d.com/Manual/CollidersOverview.html 但其实可以 ...