《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),即放到场景的是一个立方体.它是目前使用最广泛的 ...
随机推荐
- LeetCode-NQueensII
经典的N皇后问题, 这里学到了一个非常牛的新方法(http://www.matrix67.com/blog/archives/266),用位运算来求解N皇后问题: 思路其实也很容易懂,一点都不复杂, ...
- AngularJS模块具体解释
模块是提供一些特殊服务的功能块.比方本地化模块负责文字本地化,验证模块负责数据验证.一般来说,服务在模块内部,当我们须要某个服务的时候,是先把模块实例化.然后再调用模块的方法. 但Angular模块和 ...
- JDBC:数据库操作:BLOB数据处理
CLOB主要保存海量文字,而BLOB是专门保存二进制数据:包括,图片,音乐,影片.等. 在MYSQL中,BLOB类型使用LONGBLOB声明,最高可存储4G内容. 创建一个表: create tabl ...
- 利用docker创建支持centos的ssh镜像
创建docker镜像需要基础镜像,目前官方已提供了多种基础镜像,参见: https://hub.docker.com/explore/ 要想创建支持centos的ssh镜像,就需要以centos镜像为 ...
- asp.net 抓取新闻
前台页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- flashback database(drop tablespace)
1.首先记录时间 select to_char(systimestamp,'yyyy-mm-dd HH24:MI:SS') from dual;--2014-04-25 13:55:48 查看表sel ...
- centos7(vmware install) 安装EMQ注意事项 ---控制台远程访问
若想远端访问控制台,需打开对于端口 TCP 服务端口占用 EMQ 2.0 消息服务器默认占用的 TCP 端口包括: 1883 MQTT 协议端口 8883 MQTT/SSL 端口 8083 MQTT/ ...
- android 关于setWidth()和setHeight()没反应的问题
在android开发过程中,对于控件的高度,宽度,虽然在xml中用android:layout_height="match_parent"设置了 高度(match_parent ...
- Linux下自动备份Oracle数据库并删除指定天数前的备份
说明: Oracle数据库服务器 操作系统:CentOS IP:192.168.0.198 端口:1521 SID:orcl Oracle数据库版本:Oracle11gR2 具体操作: 1.root用 ...
- VS2015 经常不出现智能提示,代码颜色也没有了
重置下.开始菜单 -->所有程序-->Visual Studio 文件夹 --> Visual Studio Tools --> Developer Command Promp ...