《Windows游戏编程大师技巧》学习笔记——关于创建显示表面
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游戏编程大师技巧》学习笔记——关于创建显示表面的更多相关文章
- Windows游戏编程大师技巧之三角形填充
一.三角形的种类 三角形一般可以分为如下的四种类型(这四种类型是对于计算机来说的,不是数学意义上的分类): 平顶三角形:就是在计算机中显示的上面两个顶点的Y坐标相同. 平底三角形:就是在计算机中显示的 ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记1——创建窗口&GDI
第1章 创建窗口 步骤: 窗口类的设计 窗口类的注册 窗口的正式创建 窗口的显示与更新 消息循环体系 窗口过程函数处理消息 1. 设计:使用WNDCLASSEX结构体,这里注意的是C++中的结构体中的 ...
- 3D游戏编程大师技巧──2D引擎的编译问题
接上一篇文章,这里将介绍2D引擎的编译,从现在开始才真正进入<3D游戏编程大师技巧>的学习.本书的第一.二章只是简介了游戏编程和windows编程,从第三章开始才是介绍<window ...
- 3D游戏编程大师技巧──环境搭建
刚开微博,想借助这个平台与大家交流,写下自己的学习记录,希望得到大家的批评指正. 好了,进入主题.这段时间对游戏编程很感兴趣,于是在网友的推荐下开始学习<3D游戏编程大师技巧>这本书.今天 ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记5——Direct3D中的顶点缓存和索引缓存
第12章 Direct3D绘制基础 1. 顶点缓存 计算机所描绘的3D图形是通过多边形网格来构成的,网网格勾勒出轮廓,然后在网格轮廓的表面上贴上相应的图片,这样就构成了一个3D模型.三角形网格是构建物 ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记2——透明贴图,动画技术
第5章 透明贴图 像这样直接贴图会产生这种情况,所以我们需要透明贴图. 透明遮罩法:主要利用BitBlt函数中Raser(光栅)值的运算,需要准备素材图和遮罩图: 这个方法的原理解释见书131页. 示 ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记3——输入消息处理,物理建模与粒子系统初步
第7章 Windows游戏输入消息处理 1. 键盘消息处理 之前提到的窗口过程函数有两参数与消息输出有关——wParam和llParam LRESULT CALLBACK WindowProc( _I ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记4——Direct3D编程基础
第11章 Direct3D编程基础 2D游戏是贴图的艺术,3D游戏是渲染的艺术.这句话在我学过了之前的GDI编程之后,前一句算是有所体会,现在是来理解后一句的时候了. 安装DirectX SDK配置啥 ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记10——三维天空的构建&三维粒子的实现&多游戏模型的载入
第23章 三维天空的构建 目前描述三维天空的技术主要包括三种类型,直接来介绍使用最广泛的模拟技术,详细的描述可以见作者的博文. 天空盒(Sky Box),即放到场景的是一个立方体.它是目前使用最广泛的 ...
随机推荐
- Python 类变量 实例变量
类变量: 是可在类的所有实例之间共享的值(也就是说,它们不是单独分配给每个实例的).例如下例中,num_of_instance 就是类变量,用于跟踪存在着多少个Test 的实例. 实例变量: 实例 ...
- vue - utils.js
exports:导出功能函数或变量 module.exports:默认导出{} ------------------------------------------------------------ ...
- Android获取前台进程的方法
概述 项目中很多场景交互非常依赖于客户端的前后景状态以及其他一些辅助信息上传,譬如当前新闻在前台(看到的是新闻界面)播放时,语音开启音乐应用,此时我们希望能看到音乐界面,并且音乐在播;而在导航应用在前 ...
- 算法笔记_166:算法提高 金属采集(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 人类在火星上发现了一种新的金属!这些金属分布在一些奇怪的地方,不妨叫它节点好了.一些节点之间有道路相连,所有的节点和道路形成了一棵树.一共 ...
- html 接收GET请求参数
function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +" ...
- AFN访问https设置
AFN访问https的时候需要设定如下两个属性: manager.securityPolicy.allowInvalidCertificates = YES; manager.securityPoli ...
- bootstrap源码学习与示例:bootstrap-tab
http://www.cnblogs.com/rubylouvre/archive/2012/12/22/2829176.html bootstrap源码学习与示例 https://www.w3sc ...
- unity, StopAllCoroutines导致bug的解决办法
StopAllCoroutines有时候不用不行. 但只要一用,就可能导致无穷无尽的bug. 原因是StopAllCoroutines会将当前脚本中所有coroutines都停掉,而没法做到只停掉我们 ...
- Tokyo Tyrant(TTServer)系列(六)-数据丢失谁的错
,false,1,100);$mem->addServer ("127.9.9.1",1978,false,1,100);$start=microtime(true);for ...
- 点滴积累【other】---Windows 7 IIS (HTTP Error 500.21 - Internal Server Error)解决方案(转载)
此文来自:http://blog626.blog.163.com/blog/static/105610732201051591450870/ 搭建IIS时出现如下错误: HTTP Error 500. ...