《windows游戏编程大师技巧》第五章:DirectX基础知识和令人生畏的COM
1、DirectX组件
DirectX是基于COM实现的,比系统自带的GDI和MCI更快、更稳定,其包括许多组件,如:
●DirectDraw(DirectX 8.0以上的版本不包含)
●DirectSound
●DirectSound3D
●DirectMusic
●DirectInput
●DirectPlay
●DirectSetup
●DirectShow
●Direct3DRM
●Direct3DIM
●DirectX Graphics(融合了DirectDraw和Direct3D)
●DirectX Audio(融合了DirectSound和DirectMusic)
DirectDraw:在DirectX 8.0版本里DirectDraw被移除了,它将DirectDraw和Direct3D合成了DirectX Graphics,不过仍可以使用。是控制视频显示的主要图形渲染和2D位图引擎。
DirectSound:声音组件,只支持数字化的声音,不支持MIDI。DirectSound3D是3D声音组件。
DirectMusic:声音音乐组件,支持MIDI。现在DirectMusic和DirectSound被合并成了DirectX Audio。
DirectInput:处理输入设备,如鼠标、键盘、游戏控制杆、空间定位球等。
DirectPlay:处理网络方面的事情。
DirectShow:播放流媒体组件。现在移到了Windows SDK。
Direct3DRM:Direct3D的保留模式。
Direct3DIM:Direct3D的直接模式。
2、应用DirectX COM组件
COM对象实际上是一个或一套实现了大量接口的C++类,一个接口就是一套函数。
3、不同版本的DirectX
DirectDraw 1.0接口指针数据类型:LPDIRECTDRAW lpdd = NULL;
DirectDraw 7.0接口指针数据类型:LPDIRECTDRAW7 lpdd = NULL;
DirectDrawCreate()函数可以创建一个DirectDraw COM对象,并得到一个初始的接口指针
HRESULT WINAPI DirectDrawCreate(_In_ GUID FAR* lpGUID, // 视频显卡驱动的GUID(全局唯一标识符),一般设为NULL表示系统默认的硬件_Out_ LPDIRECTDRAW FAR* lplpDD, //返回的接口_In_ IUnknown FAR* pUnkOuter //高级功能,一般设为NULL );
eg:
DirectDrawCreate(NULL, &lpdd, NULL);
然而DirectDrawCreate()是DirectDraw 1.0版本定义的函数,获得的接口指针类型是LPDIRECTDRAW ,如果要在高于1.0版本里使用,有两种方法:
1、利用QueryInterface()函数,eg:
LPDIRECTDRAW lpdd = NULL;LPDIRECTDRAW7 lpdd7 = NULL;DirectDrawCreate(NULL, &lpdd, NULL);lpdd->QueryInterface(IID_IDirectDraw7, &lpdd7);lpdd->Release;lpdd = NULL;
需要注意的地方是DirectDraw 7.0的接口常量IID_IDirectDraw7,通常DirectX接口标识符(IID)采用以下格式:IDD_IDirectCD。其中C表示组件,如Draw表示DirectDraw,Sound表示DirectSound;D是一个2—n的数字,表示版本。
2、直接使用DirectDraw 7.0中的DirectDrawCreateEx()函数。
HRESULT WINAPI DirectDrawCreateEx(_In_ GUID FAR *lpGUID, // 视频显卡驱动的GUID,一般设为NULL表示系统默认的硬件_Out_ LPVOID *lplpDD, // 这是返回的接口_In_ REFIID iid, // 请求接口相对应的ID_In_ IUnknown FAR *pUnkOuter //高级功能,一般设为NULL);
eg:
LPDIRECTDRAW7 lpdd = NULL;DirectDrawCreateEx(NULL, (void**)&lpdd, IID_IDirectDraw, NULL);
3、利用底层COM函数,eg:
//初始化COM:加载COM库,如果它们没有被加载的话
if(FAILED(CoInitialize(NULL)))
{//error...return;
}//实例化DirectDraw对象,并获得指定的接口指针
if(FAILED(CoCreateInstance(&CLSID_DirectDraw, NULL, CLSCTX_ALL, &IID_DirectDraw7, &lpdd7)))
{//error...return;
}//初始化COM对象
lpdd7->Initialize(NULL);...//释放对COM的使用
CoUninitialize();
《windows游戏编程大师技巧》第五章:DirectX基础知识和令人生畏的COM相关推荐
- 开始利用CSDN做学习笔记,从windows 游戏编程大师技巧和3D游戏编程大师开始
利用两个月的空余时间将windows 游戏编程大师技巧和3D游戏编程大师技巧看了一遍. 第一遍读的并不深入,代码也没有仔细研究.特别是3D下册,基本只是草草浏览了一遍而已.这一遍是为了对整体有个印象和 ...
- 《Windows游戏编程大师技巧》(第二版)第1章(上)
第1章 学海无涯 "Oh, you want some too?!?" -Hudson, Aliens Windows 编程就像是一场由来已久并还在进行着的战争.尽管游戏程序员曾经 ...
- 《Windows游戏编程大师技巧》(第二版)第2章
因此几乎是一夜间,Windows 95就改变了整个计算机行业.的确,目前还有一些公司仍然在使用Windows 3.1(你能相信吗?),但是Windows 95使得基于Intel的PC成为除游戏之外的所 ...
- Windows游戏编程大师技巧(一)
第一章 无尽之旅 Windows编程是一场由来已久并还在进行着的战争.开始时,游戏程序拒绝Windows平 台,但正如Borg所言:"反对无效......",我也赞同这一观点.本章 ...
- 《Windows游戏编程大师技巧》(第二版)第11章
第三部分:核心游戏编程 第11章 算法.数据结构.内存管理和多线程 第12章 人工智能 第13章 游戏物理 第14章 文字时代 第15章 综合运用:编写游戏! 第11章 算法.数据 ...
- 《Windows游戏编程大师技巧》(第二版)第1章(下)
实例:FreakOut 在沉溺于所讨论的有关Windows.DirectX 和3D 图形之前,应当暂停一下,先给你看一个完整的游戏--虽然简单了一点,但毫无疑问是一个完整的游戏.你会看到一个实际的游戏 ...
- Windows游戏编程大师技巧第二版学习笔记之第一章 实验补充
前面记录的一下看书中的重点,编程还是要动手,下面就来动手试试,这里选择VC6.0编译器 这里先来配置游戏编程环境,原书中的dx81sdk_full.exe一共是1百多MB,其实没必要整那么多,看我在我 ...
- 《Windows游戏编程大师技巧》三、Windows高级编程
Windows编程很绝的地方在于:你不用了解太多细节,就可以完成很多工作. 使用资源 资源就是你的程序代码结合在一起的多块数据,可以被程序本身在运行时加载. 资源应当也放在程序的.EXE文件中的原因是 ...
- Windows游戏编程大师技巧之三角形填充
一.三角形的种类 三角形一般可以分为如下的四种类型(这四种类型是对于计算机来说的,不是数学意义上的分类): 平顶三角形:就是在计算机中显示的上面两个顶点的Y坐标相同. 平底三角形:就是在计算机中显示的 ...
最新文章
- My cnblogs's first day
- 初识机器学习——吴恩达《Machine Learning》学习笔记(八)
- 【编译原理】文法分类
- 鸿蒙系统-手机-JS FA(Feature Ability)调用Java PA(Particle Ability)
- 微软 Small Basic 简体中文版 已经发布了
- 以太网抓包数据报头长度
- 无语!JDK 8 中的 HashMap 依然会死循环…
- PAYPAL使用虚拟信用卡验证的技巧
- Oracle19c下载安装和配置教程
- PS如何调整图片像素大小
- Android 修改AlertDialog原生setPositiveButton的字体颜色背景颜色大小边距位置
- SpringBoot集成身份证认证
- 【兴趣】QQ音乐VS网易云音乐竞品分析
- 人生短暂,持之以恒地做一件事情就会成功
- 每月一书(202202): 《从零开始做自媒体》
- ac3168无线网卡驱动下载_英特尔面向Windows 10推出无线网卡驱动程序和图形命令中心应用更新...
- An overview of color constancy algorithms论文笔记
- TRS 中的position embedding
- 基于单片机的电子秤(计价/播报)电路设计(#0223)
- 滴水逆向三期实践10:动态链接库
热门文章
- 简单的LED交替闪烁程序
- 四个漂亮CSS样式表
- win7记事本如何转换html,Win7打开记事本显示乱码是为什么?怎么才能正常?
- 简述c++语言的特点(优点)
- 汇编指令学习(AND,OR,XOR,NOT)
- 错误模块名称: KERNELBASE.dll 问题记录
- 在生成式AI的崛起中,百度“先下一城”
- apache iotdb_清华数为工业互联网时序数据库Apache IoTDB亮相2019工业互联网峰会
- c语言1106回文数,Codeforces 1106 简要题解
- 单片机音乐盒c语言源程序,51单片机八音盒源程序(汇编语言)