Direct3D应用中的2D应用
- 格式:doc
- 大小:75.50 KB
- 文档页数:54
3. 设定Direct 3D应用程序中的DirectDrawDirectDraw是Microsoft DirectX API的成员之一,用来让您直接控制显示装置的特性,如下列例子:∙主要绘图页(Primary surface),也就是您在屏幕上看到的东西所对应的内存。
∙屏幕外绘图页(Off-screen surfaces),是用来存放可以转移到可视区域的图像(包括在3D程序中的贴图)。
∙硬件迭合支持(Hardware overlay support),可以让2D图像显示在显示区上方而不会影响主要绘图页的内容。
∙深度缓冲区(Depth buffers),用来储存绘制3D景物的相关深度信息。
∙图块搬移硬件(Hardware blitter),用来作图块搬移(blitting),也就是将2D数据从一个地方复制到另一个地方的过程。
∙切页支持( Flipping-surface support,也称为page flipping ),用来在主要的可视显示绘图页和内存(后缓冲区,back buffer)中的多个检视(views)间切换,以避免屏幕画面切割(tearing,这个会在后面的章节中说明)或是在画面间闪烁。
∙∙立体模式支持,意谓左眼看到一个影像,而右眼看到另一种不同的影像。
∙在窗口或全屏幕模式下的裁切(clipping)。
整体来说,DirectDraw采用了一种与装置无关的作法来存取显示装置,同时也是可处理所有2D绘图指令的DirectX API。
它也是Direct3D的基础,所以即使是「纯3D」的程序也需要用到DirectDraw。
DirectDraw会管理它所建立的所有对象并且记录已(未)配置的资源。
它也会控制下列特性:∙预设的色彩键(color key),这是用来建立透明区,就如同电影中将屏幕变蓝一般。
∙硬件显示模式,包括系统执行中的分辨率、色彩深度及更新频率。
预设调色盘(可用的颜色),是当主要绘图页是在每个像素8位的模式下时。
易语言 directx2d 的使用方法易语言是一种用于编写Windows应用程序的简单易学的编程语言,而DirectX是一组用于开发游戏和多媒体应用程序的API。
在易语言中,通过调用DirectX2D的相关函数,可以实现2D图形的绘制、渲染和动画效果。
下面将详细介绍DirectX2D的使用方法。
一、引入DirectX2D库文件在使用DirectX2D之前,需要先将相关的库文件引入到易语言的开发环境中。
具体步骤如下:1. 下载并解压DirectX2D库文件。
2. 打开易语言的开发环境,点击菜单栏的“工程”-“库文件管理器”。
3. 在库文件管理器中,点击“添加”按钮,选择解压后的DirectX2D库文件,点击“确定”。
二、初始化DirectX2D在使用DirectX2D之前,需要先初始化相关的资源。
具体步骤如下:1. 在程序的初始化部分,添加以下代码:```初始化图形系统()```2. 在程序的结束部分,添加以下代码:```释放图形系统()```三、绘制基本图形使用DirectX2D可以绘制各种基本图形,如点、线、矩形、圆等。
具体步骤如下:1. 绘制点:```绘制点(点的X坐标, 点的Y坐标, 颜色)```2. 绘制线:```绘制线(起点的X坐标, 起点的Y坐标, 终点的X坐标, 终点的Y坐标, 颜色, 线宽)```3. 绘制矩形:```绘制矩形(左上角的X坐标, 左上角的Y坐标, 右下角的X坐标, 右下角的Y坐标, 颜色, 是否填充)```4. 绘制圆:```绘制圆(圆心的X坐标, 圆心的Y坐标, 半径, 颜色, 是否填充)```四、图形变换与动画效果使用DirectX2D可以对图形进行平移、旋转、缩放等变换操作,以及实现动画效果。
具体步骤如下:1. 平移:```图形平移(水平偏移量, 垂直偏移量)```2. 旋转:```图形旋转(旋转角度)```3. 缩放:```图形缩放(水平缩放比例, 垂直缩放比例)```4. 动画效果:```设置动画帧率(帧率)开始动画()结束动画()```五、文本绘制使用DirectX2D还可以绘制文本,可以设置文本的字体、大小、颜色等。
工业制图中的2D软件与3D软件的应用分析工业制图是现代工业的基本工艺之一,它不仅能够帮助工厂提高生产效率,降低成本和减少浪费,还能够为工程师提供更加准确和可靠的设计方案。
然而,对于工业制图来说,较为核心的两个软件是2D软件和3D软件,它们各有其独特的特点和应用场景。
2D软件在工业制图中主要应用于平面设计,即工程师基于二维图像进行设计和制图。
这种软件的优点在于其简单、直观、易于上手,并且可以帮助工程师快速地创建原型设计,而且通常情况下,2D软件的价格也比较便宜。
此外,2D软件也非常适合处理一些简单的工程项目,如机械零件、管道系统和建筑图纸等。
2D软件目前市面上比较常用的有AutoCAD和SketchUp等。
然而,与2D软件不同的是,3D软件可以为工程师提供更加真实、具体、详细的设计方案,这主要是因为3D软件的设计方式更加逼真和全面。
它可以帮助工程师从更多的角度观察和分析设计方案,并可以进行实时的调整和优化。
与此同时,3D软件还具有较强的交互性、准确性和可扩展性,使得其在复杂的工程项目中更能发挥优势。
目前市面上比较常用的3D软件有SolidWorks、CATIA和Pro/Engineer等。
虽然2D软件和3D软件都可以帮助工程师完成工业制图,但是它们各有优缺点,应用场景也不同。
因此,在实际应用过程中,工程师需要根据实际情况选择合适的软件进行使用,以达到最佳的工程效果。
总之,工业制图是现代工业的必备技术之一,并且2D软件和3D软件都是工业制图中较为常用的软件。
2D软件适合处理简单的工程项目,而且价格相对便宜;3D软件则适合处理更加复杂的工程项目,并可以帮助工程师从更多的角度出发思考和分析设计问题。
因此,在实际应用过程中,工程师需要根据实际情况选择合适的软件进行使用。
易语言 directx2d 的使用方法易语言是一种简单易学的编程语言,广泛应用于国内的软件开发领域。
而DirectX2D是微软公司开发的一个用于图形渲染的API接口,它能够帮助开发者创建出高性能的2D图形应用程序。
本文将详细介绍如何在易语言中使用DirectX2D。
一、环境准备在开始使用DirectX2D之前,我们需要确保计算机上已经安装了DirectX SDK。
可以通过微软官方网站下载并安装最新版本的DirectX SDK。
二、导入DirectX2D库文件在易语言中使用DirectX2D需要导入相应的库文件。
首先,我们需要从DirectX SDK中找到DirectX2D的库文件(通常是一个名为d2d1.lib的文件),将其复制到易语言的lib文件夹中。
然后,在易语言的开发环境中,选择“系统”菜单下的“导入DLL函数”选项,选择d2d1.lib文件并导入。
导入成功后,我们就可以在易语言中使用DirectX2D的相关函数了。
三、创建DirectX2D对象使用DirectX2D之前,我们需要创建一个ID2D1Factory对象,该对象是DirectX2D的核心对象,用于创建其他的DirectX2D对象。
在易语言中,我们可以通过调用以下函数来创建ID2D1Factory对象:```创建Direct2D工厂对象接口,返回ID2D1Factory接口对象函数D2D1CreateFactory(ID2D1Factory **ppFactory, const D2D1_FACTORY_OPTIONS *pFactoryOptions);```在函数调用结束后,我们将会得到一个ID2D1Factory对象的指针,可以使用该指针调用其他的DirectX2D函数。
四、创建渲染目标在使用DirectX2D绘制图形之前,我们需要创建一个渲染目标。
渲染目标是DirectX2D绘制的画布,我们可以将图形绘制在渲染目标上。
在易语言中,我们可以通过调用以下函数来创建渲染目标:```创建渲染目标接口,返回ID2D1HwndRenderTarget接口对象函数D2D1CreateHwndRenderTarget(const D2D1_RENDER_TARGET_PROPERTIES *pRenderTargetProperties, const D2D1_HWND_RENDER_TARGET_PROPERTIES *pHWNDRenderTargetProperties, ID2D1HwndRenderTarget **ppHwndRenderTarget);```在函数调用时,我们需要传入渲染目标的参数,包括渲染目标的属性和渲染目标所在的窗口句柄。
direct用法Direct用法详解Direct是一个英语单词,意思是“直接的”,在计算机领域中,它有着广泛的应用。
本文将从以下几个方面来详细介绍Direct的用法。
一、Direct的概述Direct是一个计算机领域中的术语,通常指代一些与硬件或操作系统直接相关的软件库或API。
这些库或API可以让开发人员更加方便地控制硬件或操作系统,从而实现更高效、更灵活、更精确的程序编写。
二、DirectX1. DirectX简介DirectX是一组由微软公司开发的多媒体技术,它包括了一系列与图形、音频、输入设备等相关的API和库。
它最初被设计为Windows平台上游戏开发所使用的技术,但随着时间推移,它已经成为了Windows 平台上多媒体应用程序开发不可或缺的一部分。
目前,最新版本的DirectX是DirectX 12,在Windows 10操作系统上得到了广泛应用。
此外,还有一些较老版本如下:- DirectX 11- DirectX 10- DirectX 9- DirectX 8- DirectX 73. DirectX功能DirectX提供了以下功能:- 游戏图形渲染- 2D和3D图形处理- 音频处理- 输入设备处理- 多媒体文件播放三、Direct3DDirect3D是DirectX中的一个重要组成部分,它是一个用于游戏和多媒体应用程序开发的3D图形API。
它提供了一些函数和接口,可以让开发人员更加方便地控制3D渲染、纹理贴图、光照等。
2. Direct3D版本目前,最新版本的Direct3D是Direct3D 12,在Windows 10操作系统上得到了广泛应用。
此外,还有一些较老版本如下:- Direct3D 11- Direct3D 10- Direct3D 94. Direct3D功能Direct3D提供了以下功能:- 几何变换- 纹理贴图- 光照计算- 多重采样抗锯齿技术- 阴影计算- 着色器编程支持四、DirectSound1. DirectSound简介DirectSound是DirectX中的一个重要组成部分,它是一个用于音频处理的API。
基于Direct3D的2D游戏开发与实现的开题报告一、选题背景2D游戏是一个很受到玩家喜欢的游戏类型,它操作简单、容易上手,画面风格多样,并且玩家可以很快乐的在游戏中进行互动,也很好的瞬间解压。
而现在的2D游戏开发方式也多样,有Unity、Cocos2D等专门用于2D游戏开发的引擎。
而基于Direct3D的2D游戏开发,不仅能实现翻转、放缩、混合、遮盖等特效,而且可以直接应用于三维游戏中,拥有较好的可扩展性。
二、研究内容1. Direct3D基础原理的研究介绍Direct3D的基本原理以及开发环境的搭建,包括DirectX SDK及Visual Studio的安装与配置等。
2. 2D游戏图形的渲染实现解释如何使用Direct3D进行2D游戏图形的渲染实现,包括动态渲染和静态渲染两种方式。
3. 游戏特效的实现介绍如何使用Direct3D实现游戏中的特效,如混合、遮盖、翻转等特效。
4. 输入系统的实现实现2D游戏玩家的输入系统,包括按键事件以及鼠标事件。
5. 声音系统的实现玩家在游戏中进行操作时,需要出现一定的背景音乐,并且还需要对按钮点击等游戏操作进行音效提示。
因此,研究如何利用DirectX SDK 实现游戏声音系统,添加游戏音效。
三、研究意义本文所研究的基于Direct3D的2D游戏开发,不仅可以用于2D游戏的开发,还可以将其应用于三维游戏中,拥有较好的可扩展性。
通过本文的研究,可以从Direct3D的基础开始逐渐掌握其2D游戏的应用,帮助开发者更加准确、高效地开发2D游戏。
四、预期成果完成一个基于Direct3D的2D游戏,展示不同的特效、动态渲染和静态渲染、玩家输入系统和音效系统,并为其他开发者提供一个参考的开发思路。
五、参考文献1. 王长琦,游汉榕,林志健. 基于Direct3D的2D游戏渲染实现方法[J]. 计算机与数字工程, 2015 (07): 136-139.2. 焦璐琳,李丰,阎艳华. 基于Direct3D技术的3D游戏设计与实现[J]. 计算机科学与探索, 2014, (09): 1148-1153.3. 黄家钦,唐维林,黄建潮. Windows下基于Direct3D API设计和实现的2D游戏引擎[J]. 计算机应用研究, 2017, (03): 799-802+807.。
第十一章:3D中的2DIntroduction (序)这一章,我们会向3D场景中增加一些2D的元素。
这是很有用的,例如我们可以用它来创建类似生命格、能量格、雷达等等这样的东西。
我们还会学习到怎样使它们透明(以实现原来的Colorkey效果),这样能使它们更好地融入场景中。
(译者:请运行例子并观察左下角的2D元素,明明是一张128X128的方形BMP,为什么会没有留下方边呢?)Adding Text (添加文字)首先也是最简单的就是往场景里添加一些2D文字(请看例子的左上角)。
为此,我们创建了一个简易的类CFont,下面是它的源代码:在CFont类的构造函数中,我们调用CreateFont函数来创建字体,它会返回一个句柄(HFONT)。
如果想在DX 中使用这个字体,我们还需要创建字体对象,这得通过调用D3DXCreateFont函数来完成。
我们把刚才得到的字体句柄传递给D3DXCreateFont函数,会得到一个新的LPD3DXFONT型指针,我们会把它保存为CFont类的成员变量以待用。
在析构函数中我们只需要简单地释放所保存的字体对象。
最后,由DrawText来渲染文字。
我们得输入要渲染的文字和它们的坐标(屏幕坐标系统)还有它们的颜色。
我们调用了两次DrawTextA模块,第一次用于计算文字所需要的矩形范围,第二次用于将文字绘制到矩形内,它们在矩形中是左对齐格式的。
要使用CFont类,我们需要用下面的代码来创建CFont的指针:有了CFont对象的指针,我们就可以绘制文字了。
所以,我们的CGame又多了一个成员RenderText,它会在主渲染模块中被调用。
所以,在绘制每一帧的时候RenderText都会被调用。
它会显示出程序运行的时间(单位:秒)、帧数和FPS。
关于显示文字或汉字的更多内容和技巧,请到炎龙工作室(/)查看《游戏中汉字显示的实现与技巧》一文。
Steps for 2D in 3D Rendering (在3D中渲染2D的步骤)创建2D图形是很简单的事,我们要为每帧做的所有事情只有下面这些步骤:o像以往一样设置3D摄像机o激活深度缓冲与灯光o像以往一样渲染3D对象o为2D设置摄像机o禁止深度缓冲与灯光o渲染2D对象2D Camera (2D摄像机)要设置摄像机以渲染2D对象,我们需要改变投影矩阵,由以往的透视投影变成正交投影。
游戏渲染技术了解DirectXOpenGL和Vulkan游戏渲染技术了解DirectX、OpenGL和Vulkan游戏渲染技术是现代游戏开发中的重要组成部分,它决定了游戏的视觉效果和性能表现。
在游戏渲染技术的领域中,DirectX、OpenGL 和Vulkan是三个常见的应用编程接口(API)。
本文将介绍这三种渲染技术,探讨它们的特点和适用场景。
一、DirectXDirectX是由微软公司开发的一套多媒体编程接口,常用于Windows平台的游戏开发。
DirectX提供了丰富的图形渲染功能,包括2D和3D渲染、图像处理、音频和输入设备处理等。
其最新版本为DirectX 12,在多线程渲染方面有着出色的表现。
DirectX支持各种硬件设备,并提供了简单易用的开发工具和文档。
DirectX具有以下特点:1. 良好的兼容性:DirectX是Windows平台的官方渲染API,与操作系统紧密集成,因此具备较好的兼容性。
游戏开发者可以利用DirectX的特性来确保游戏在各种Windows设备上都能正常运行。
2. 强大的功能支持:DirectX提供了丰富的图形和音频功能,并不断更新和增加新特性。
它通过硬件加速以及优化的渲染管线,可以实现更高质量的图形效果和更高的性能。
3. 简化开发流程:DirectX具有直观的接口和易用的开发工具,使得游戏开发者能够更高效地创建出色的游戏。
它提供了一系列的API,如Direct3D用于3D图形渲染,DirectSound用于音频处理等。
二、OpenGLOpenGL是一个跨平台的图形渲染API,它是一个开放标准,可在多个操作系统上使用。
OpenGL提供了一系列用于二维和三维图形渲染的函数,支持各种图形学算法和特效。
OpenGL是游戏开发者广泛使用的渲染技术之一,特别适合在不同平台间进行移植。
OpenGL具有以下特点:1. 跨平台支持:OpenGL可以在多个操作系统上运行,包括Windows、Linux和Mac OS等。
Direct3D应用中的2D应用2D Application 收藏(转载)2D Application这一章将讨论IDirect3DDevices9接口怎样应用到简单的两维应用程序里去。
然而,接下来讨论的方法和接口的方法不仅仅只应用在两维应用程序里面。
开始我们将看看IDirect3DSurface9接口,它用于存放像素数据。
我们将看看怎样创建surfaces,怎样填充数据,并且执行像素拷贝操作。
接下来,我们讨论IDirect3DSwapChain9接口管理back buffer 集合。
设备创建的时候都会携带一个默认的swap chain,但是也可以为window模式下多个视图创建新的swap chain。
再接下来,我们将讨论Presentation,Present 也是IDirect3DDevice9提供的方法。
即使Direct3D可以不使用GDI,但是他们也要处理发送到应用程序top-level窗口的消息。
我们推荐使用Direct3D应用程序来处理窗口消息。
DirectX 并没有提供直接方法来将GDI和Direct3D结合起来。
但是,通常是在内存DC和流水线产生的结果像素数据上执行GDI操作。
最后,我们将讨论流水线的Video scan out部分以及swap chain从back buffer到front back 的过程。
video scan out 电流读取数据,使用cursor overlay,gamma校正以及像素数据转化成monitor的模拟信号。
Pixel SurfacePixel 面是像素数据的矩形集合。
像素数据的内存layout 是通过D3DFORMAT定义的。
在设备上使用surface有几处地方:back buffer surfaces, depth/stencil buffer surfaces,纹理层surface,render target surface 以及图片surface。
Direct3D 使用IDirect3DSurface9接口表示一个surface,CreateOffscreenPlainsurface方法可以创建一个图片surface,它能存在于scrath内存池,系统内存池和设备内存池。
CreateDepthStencilSurface和CreateRenderTarget分别返回depth/stencil的surface和rendertarget的surface。
一个plain surface可能不是3D 渲染的目标,但是你能在plain surface和其他surface之间进行数据拷贝。
HRESULT CreateOffscreenPlainSurface(UINT width,UINT height,D3DFORMAT format,D3DPOOL pool,IDirect3DSurface9 ** result,HANDLE * unused);如果设备不支持被请求面的各式,CreateOffscreenPlainSurface将会失败,或者是系统内存里面没有足够的存储空间。
使用CheckDeviceFormat可以用来预先检查设备是否支持某种格式的surface。
interface IDirect3DSurface9 : IDirect3DResource9{HRESULT GetContainer(REFIID container_iid, void ** value);HRESULT GetDC(HDC ** value);HRESULT GetDesc(D3DSURFACE_DESC * value);HRESULT LockRect(D3DLOCKED_RECT * data, const RECT * locked_region,DWORD flags);HRESULT Release(HDC context);HRESULT UnlockRect();} 对于CreateOffscreenPlainSurface创建的surface,当container_iid是IID_Direct3DDevice9时,GetContainer将返回成功。
GetDESC将返回D3DSURFACE_DESC结构体里面的像素数据的描述信息。
typedef struct _D3DSURFACE_DESC{D3DFORMAT Format;D3DRESOURCETYPE Type;DWORD Usage;D3DPOOL Pool;D3DMULTISAMPLE_TYPE MultiSampleType; //与render target surface一起使用的multisamplingDWORD MultiSampleQuality;UINT Width;UINT Height;} D3DSURFACE_DESC;Accessing Surface Pixel Data为了获取surface的像素数据,我们需要使用LockRect 和UnlockRect方法。
当lockRect方法的locked_region不为NULL的时候,就只lock住了surface的某个局部。
参数flags 告诉Direct3D一旦surface被锁住,数据将怎么办。
Flags包括D3DLOCK_DISCARD, D3DLOCK_DONOTWAIT,D3DLOCK_NO_DIRTY_UPDATE,D3DLOCK_NOSYSLOC K, D3DLOCK_READONLY。
D3DLOCK_DISCARD通知runtime整个locked区域将只被写入而不读取。
使用discard flag, runtime不会提供一份surface数据的copy给应用程序读取。
不使用discard flag,runtime可能被迫停掉所有未决的操作,然后再返回一个surface数据的copy给应用程序。
注意:这个flag不能使用在子区域。
D3DLOCK_DONOTWAIT 决定当lock的时候不会阻塞住runtime,等待未决的渲染操作完成。
如果lock调用已经阻塞了,它将返回D3DERR_WASSTILLDRAWING。
Direct3D为每个可管理的surface(注意这里只能是managed surface)维护一个dirty 区域表,用来最小化unlock数据的拷贝量。
如果已经是使用了D3D_NO_DIRTY_UPDATE,locked区域将不会影响dirty 区域list。
使用D3DLOCK_READONLY,应用程序保证对锁定区域没有任何的写操作。
D3DLOCK_NOSYSLOCK只只能应用到video memory的surfaces。
为了阻止video存储资源被锁时设备lost,Direct3D获取系统critical section来阻止设备丢失。
它也能阻塞操作系统的其他部分执行,这样势必会影响系统的交互和反应灵敏度。
D3DLOCK_NOSYSLOCK 禁止获取系统的critical section。
LockRect 方法返回D3DLOCKED_RECT结构体,它定义了surface的像素数据。
它保证了surface数据在sanline 上是连续的。
typedef struct _D3DLOCKED_RECT{int pitch; //定义了相邻两个scanlines的距离。
void *pBits; //像素数据的指针。
}D3DLOCKED_RECT; 当遍历surface的每个像素时,pitch 和像素的大小是很重要的。
像素数据的大小是跟D3DFORMAT有关。
IDirect3DSurface9并没有提供方法用于从图片装载到surface,或者像素格式转换,D3DX却提供了很多这样的操作方法。
Using GDI On a SurfaceGDI提供GetDC和ReleaseDC方法来操作与GDI兼容格式的surface。
与GDI兼容格式包括D3DFMT_R5G6B5,D3DFMT_X1R5G5B5,D3DFMT_R8G8B8和D3DFMT_X8R8G8B8。
GDI device context可以使用GDI 执行基于surface的渲染操作,然后立刻释放。
一旦device context被创建,就会在Direct3D runtime里面建立一个lock。
这个lock保证runtime并不直接跟GDI rendering交互。
因为这个lock的存在,应用程序应该尽可能快的释放GDI device context。
而且,只有device context释放以后,下面表里的方法才能调用。
. InterfaceMethodIDirect3DCubeTexture9 LockRectIDirect3DDevice9ColorFill. PresentStretchRectUpdateSurface UpdateTextureIDirect3DSurface9LockRectIDirect3DSwapChain9 PresentIDirect3DTexture9LockRectSwap Chain每个设备都包含一组默认的swap chains。
GetNumberOfSwapChains返回设备swap chains的数目。
GetSwapChain方法返回默认swap chain集合里的swap chain 的接口。
默认swap chain集合的属性定义在D3DPRESENT_PARAMETERS。
Swap chain由1个,2个,3个back buffer surface 和一个front buffer surface。
front buffer surface不能直接访问,但是它仍然参与到swap chain的presentation过程中。
当调用Present时back buffer surface显示在monitor。
exclusive 模式的设备使用它默认的back buffer。
window模式的设备可以使用多个swap chain,每个都可以将渲染结果绘制它自己的窗口。
exclusive模式的adapter group 设备也可以渲染到多个monitor。
CreateAdditionalSwapChain创建一个基于D3DPRESENT_PARAMETERS的swap chain,然后返回一个IDirect3DSwapChain9接口。
注意一个Swap chain只能包含back buffer surface而不是depth/stencil surface。
HRESULT CreateAdditionalSwapChain(D3DPRESENT_PARAMETERS * params, IDirect3DSwapChain9 ** result);interfaceIDirect3DSwapChain9 : IUnknown{HRESULT GetBackBuffer(UINT buffer,D3DBACKBUFFER_TYPE kind, IDirect3DSurface9 ** value);HRESULT GetDevice(IDirect3DDevice9 ** value);HRESULT GetDisplayMode(D3DDISPLAYMODE * value);HRESULT GetFrontBufferData(IDirect3DSurface9 * destination);HRESULTGetPresentParameters(D3DPRESENT_PARAMETERS * value);HRESULT GetRasterStatus(D3DRASTER_STATUS * value);HRESULT Present(CONST RECT * source, CONST RECT * destination, HWND override, CONST RGNDATA *dirty_region, DWORD flags);} GetBackBuffer返回一个back buffer surface的接口指针。