如何获取游戏directdraw怎么开启主表面

天极传媒:天极网全国分站
您现在的位置: >>
游戏开发新手入门之调色板和像素
  简介   今天我们将分别使用调色板和RGB模式来熟悉DirectDraw的基本图形。它们有什么不同呢?如果你曾经在DOS下编程,你可能使用过调色板映射模式。调色板是个颜色查询表,为了绘制象素,你将一个单独的字节写入视频,通过这个字节你可以索引到一个拥有各种颜色的链表,这个颜色的链表,或查询表就叫作调色板。而RGB模式是不同的,因为它不需要颜色查询表。在RGB模式下绘制一个象素,你可以直接把红色、绿色和蓝色的值写入视频内存。任何色彩深度高于的调色板都可以用RGB模式取代。  编写本文时,我假设你已经读过了前面几章,知道了怎样设置DirectDraw和创建表面。我们将使用DirectX7,它包含了最新的DirectDraw接口。实际上,DirectX 7 中的DirectDraw接口可能是最后的升级版本了!不用担心,未来的版本一定会兼容它的,但是未来可能是一个DirectDraw和Direct3D综合的产品,管它那,我们学的不会没有用的。  在开始前我还有最后一件事要提醒你:在我的后续文章中关于调色板的部分可能再也用不到了,所以,如果你对于调色板模式不是很感兴趣,你可以跳过文章的前一部分,从象素格式开始看起。调色板的开发和使用是中使用的原始视频系统的内存限制带来的直接后果。现在由于充足的显存使调色板模式几乎废弃不用了。值得保留调色板模式的一个原因是,执行调色板操作可以实现一些有趣的动画效果。不罗嗦了,让我们开始吧!  创建DirectDraw的调色板  当你在色彩深度为8位或低于8位的模式下显示图形时,你必须创建调色板,也就是颜色查询表。更明确的讲,对于DirectX,调色板就是PALETTEENTRY结构。要建立一个调色板,我们要做如下三步:  1、 创建颜色查询链表。  2、 得到指向IDirectDrawPalette接口的指针。  3、 把调色板链接到DirectDraw表面。  我假设我们使用的是8位色彩深度。如果你要用或更高位的色彩深度编写游戏,你就不用继续看以下这段疯狂的素材了。总之,8位色彩深度,我们可以有一个256个条目的调色板。所以,创建颜色查询链表,有256个条目在其中:
typedef struct tagPALETTEENTRY {  // pe BYTE peR BYTE peG BYTE peB BYTE peF} PALETTEENTRY;  头三个参数很明显,分别是红色、绿色和蓝色的强度。每一个取值范围0-255,BYTE是无符号数据类型。最后一个参数是控制标志,应该设置为PC_NOCOLLAPSE。原因我就不说了。  现在,我们需要把256个条目有秩序的排列好,也就是为了一下能找到,我们为链表设置一个数组,象这样:
PALETTEENTRY palette[256];  Ok,我们有了数组了,你可以装载颜色了。当我工作在调色板模式下时,通常把颜色存储在一个外部里,然后用一些如下的东东装载颜色:
FILE* file_if ((file_ptr = fopen("palette.dat", "rb")) != NULL){ fread(palette, sizeof(PALETTEENTRY), 256, file_ptr); fclose(file_ptr);}  All right,第一步完成了。现在我们需要得到调色板的接口。交给IDirectDraw7::CreatePalette()函数就好了:
HRESULT CreatePalette( DWORD dwFlags, LPPALETTEENTRY lpColorTable, LPDIRECTDRAWPALETTE FAR *lplpDDPalette, IUnknown FAR *pUnkOuter);  返回类型是HRESULT,你知道它的,所以可以用FAILED()和SUCCEEDED()这两个宏检测函数是否调用成功。参数的说明如下:  ※ DWORD dwFlags:描述调色板对象的标志常量。当然,你可以用“|”组合它们:   ? DDPCAPS_1BIT:1位色彩,对应2色调色板。   ? DDPCAPS_2BIT:2位色彩,对应4色调色板。   ? DDPCAPS_4BIT:4位色彩,对应16色调色板。   ? DDPCAPS_8BIT:8为色彩,对应256色调色板。   ? DDPCAPS_8BITENTRIES:指出引用一个8位色彩索引。就是说,每个颜色条目是它本身的到目的表面8位调色板的索引。这叫作被变址的调色板。它必须同DDPCAPS_1BIT、DDPCAPS_2BIT,或者DDPCAPS_4BIT合用。乱套吧!^_^   ? DDPCAPS_ALPHA:每一个PALETTEENTRY的peFlags成员都应该被认为是阿尔发值。用这些标志创建的调色板可以被粘贴在Dierct3D纹理表面,因为DirectDraw本身并不支持阿尔发混合。   ? DDPCAPS_ALLOW256:允许8位调色板的全部256个条目被使用。通常,0指向黑色,255指向白色。   ? DDPCAPS_INITIALIZE:指出应该用PALETTEENTRY的数组初始化调色板。   ? DDPCAPS_PRIMARYSURFACE:调色板将链接到主表面,好快速更改显示颜色。   ? DDPCAPS_VSYNC:一般画圆时用到它。  大多数情况,你将使用DDPCAPS_8BIT | DDPCAPS_INITIALIZE,如果你刚好想建立一个空的调色板,稍后再设置它,你可以去掉后者,就是DDPCAPS_INITIALIZE。当然,你还可以使用DDPCAPS_ALLOW256,如果你真的想改变这两个常用的条目。  ※ LPPALETTEENTRY lpColorTable:这个指针指向我们创建的查询表,把数组的名称传递给它就好了。  ※ LPDIRECTDRAWPALETTE FAR *lplpDDPalette:这是指向IDirectDrawPalette接口指针的地址。如果函数调用成功,它将被初始化。  ※ IUnkown FAR *pUnkOuter:同以前一样,这总是为COM高级应用准备的。设置为NULL好了。  不是太糟糕吧!现在我们可以建立我们的调色板对象了。最后一步是把调色板链接到一个表面,这只需要一个函数就好了――IDirectDrawSurface7::Setpalette()。它的原形如下:
HRESULT SetPalette(LPDIRECTDRAWPALETTE lpDDPalette);  很简单,是不是?你只要把上一步得到的接口指针传递给它就可以了。那好,让我们把学到的综合到一起,下面我给你一个程序框架,我假设我们已经利用调色板的数组建立了一个索引链表,就像我们上一步做的。该框架是建立DirectDraw调色板来控制颜色,并且把它链接到主表面(当然,主表面是我们事先做好的):
LPDIRECTDRAWPALETTE// create the palette objectif (FAILED(lpdd7-&CreatePalette(DDPCAPS_8BIT | DDPCAPS_INITIALIZE, palette, &lpddpal, NULL))){ // error-handling code here}// attach to primary surfaceif (FAILED(lpddsPrimary-&SetPalette(lpddpal))){ // error-handling code here}  就是这么简单。一旦你的调色板建立完成,绘制象素部分同RGB模式就没有什么不同了。从此时开始,我将同时介绍RGB模式和调色板模式,在我们真正的显示图象前,我需要告诉你什么是RGB象素格式。  象素格式  象我前面说过的,当你把一个调色板模式的象素写入内存时,你同时分配了一个字节,每个字节表示一个到色彩查询表的索引。在RGB模式下,你只需要把颜色描述值写入内存,但每个颜色需要的字节数都要多于一个字节。字节的多少同色彩的深度相关。对于16-bit色彩,你要为每个象素准备两个字节(16位),以此类推,你可以猜到32-bit色彩是怎么回事了,这些都是很容易理解的。32-bit色彩对于一个象素来说,每一位的字符如下:
AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB  “”是代表“alpha”(阿尔发),表示一个透明的值,这是为Direct3D准备的。我以前说过,DirectDraw不支持α混合,所以当你为DirectDraw创建32-bit色彩时,把高位都设置为0好了。下一个8位表示红色强度的值,再下一个8位表示绿色,最后8位表示蓝色。一个32-bit色彩的象素需要32位,所以我们一般用UINT类型来定义相对应的变量类型,这是一个无符号实数类型。通常我用一个宏来把RGB数据转换成正确的象素格式。让我给你看看它的样子,希望这能更好的帮助你理解象素格式:
#define RGB_32BIT(r, g, b) ((r && 16) | (g && 8) | (b))  就象你看到的,这个宏通过位移在相应的位置写入了相应的红、绿、蓝的强度值,并且完全符合正确的象素格式。是不是开始感觉有点儿入门了?要建立一个32-bit的象素,你就可以调用这个宏。红、绿、蓝每一个颜色的强度值都是8位,它们的取值范围都是从0――255。例如建立一个白色的象素,你可以这样:
UINT white_pixel = RGB_32BIT(255, 255, 255);  24-bit色彩基本相同,道理实际上是一样的,只是24-bit没有关于α的描述,也就是少了α那8位。象素格式如下:
RRRR RRRR GGGG GGGG BBBB BBBB  所以红色、绿色、蓝色仍然都分别是8位,这就意味着24-bit色彩和32-bit色彩实际上是有相同颜色深度的,只是32-bit多了个α混合。现在,你一定会想,24-bit比32-bit要好,真的是这样吗?否,因为使用24-bit有一些麻烦,事实上没有24-bit的数据类型,在你建立象素时,你不得不分三步写入红、绿、蓝的强度值,而不是象32-bit一次就完成。尽管32-bit色彩需要更多的内存,但在大多数的机器上,它要更快一些。实际上,很多显示卡不支持24-bit色彩模式,因为每一个象素占用字节是很不方便的。  现在,轮到16-bit色彩了,它有一点儿小麻烦,因为对于16-bit色彩,不是每一种显示卡都使用相同的象素格式!有两种格式。其中一种,也是比较流行的,红色占据5位,绿色占据6位,蓝色占据剩下的5位。另一种格式是分别都占据5位,剩下的一位,也就是高位不使用,一些老的显示卡都使用这种格式。所以这两种格式看起来是这样的:
565 format: RRRR RGGG GGGB BBBB555 format: 0RRR RRGG GGGB BBBB  当你工作在16-bit色彩深度下,你首先需要检测显示卡是支持565格式还是555格式,然后使用适当的方式。这是很讨厌的,但你坚持用16-bit色彩,这是没有办法避免的。由于存在两种格式,你就需要两种宏:
#define RGB_16BIT565(r, g, b) ((r && 11) | (g && 5) | (b))#define RGB_16BIT555(r, g, b) ((r && 10) | (g && 5) | (b))  对于565格式,红色和蓝色的取值范围是0――31,绿色是0――63;对于555格式,取值范围都是0――31,所以当要创建一个白色象素时,就会有所不同:
USHORT white_pixel_565 = RGB_16BIT565(31, 63, 31);USHORT white_pixel_555 = RGB_15BIT555(31, 31, 31);  这个USHORT是无符号短实数类型,对应的变量只有16位。存在两种格式把事情搞得有些复杂,但在实际的游戏编程过程中,你将会感觉到这并没有你想象的那么讨厌。顺便说一下,有些时候555格式被称为15-bit色彩深度,所以在以后如果我这样谈到了它,你一定要心领神会哦!  现在或许是告诉你在16-bit色彩深度模式下,怎样检测显示卡到底支持哪种格式的时机了,是555还是565呢?最简单的办法就是调用IDirectDrawSurface7接口下的GetPixelFormat()函数,它的原形如下:
HRESULT GetPixelFormat(LPDDPIXELFORMAT lpDDPixelFormat);  参数是指向DDPIXELFORMAT结构的指针。你只要声明它,初始化它,然后传递它的地址就一切OK了。这个结构的本身是巨大的,所以我就不列举它了,但我得告诉你它的三个成员,都是DWORD类型的,它们是dwRBitMask、dwGBitMask、和dwBBitMask。你可以从dwRBitMask、dwGBitMask和dwBBitMask中获得掩码值(新东东,先不用太明白)。你也可以用它们检测显示卡支持的格式。如果显示卡支持565,dwGBitMask将为0x07E0。如果是555格式,dwGbitMask为0x03E0。  现在,我们已经学习了所有我们可能用到的象素格式,可以进入在DirectX下显示图象的实际阶段了。你已经等待了很久了,不是吗?在把象素放到表面上前,我们需要锁定表面,至少是锁定表面的一部分。锁定表面返回一个指向表面在内存里位置的指针,然后,我们就可以为所欲为了。
1(作者:ant3000责任编辑:方舟)
天极新媒体&最酷科技资讯扫码赢大奖
* 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!
笔记本手机数码家电Direct3D和DirectDraw有啥区别??游戏设计用哪个??-CSDN论坛-真格学网-IT技术综合网站
Direct3D和DirectDraw有啥区别??游戏设计用哪个??-CSDN论坛
来源:互联网 &责任编辑:小易 &时间: 22:54:41
Direct3D和DirectDraw有啥区别??游戏设计用哪个??-CSDN论坛生姜泡醋---百病不上身国医大师路志正九十多岁的路老现在还坚持在一周三个上午的门诊,平时还有开会和一些保健工作,更让人称奇的是他的体检报告显示,他的血管弹性跟四、五十岁的健康男子是一样的,这让我们无法想像,是什么样的养生方法能让路老的身体保养的这么好呢?他告诉一个很简单的养生方法,每天早上吃三片用醋浸过的生姜。醋泡生姜是一种养生的方法,醋泡生姜具有养胃、减肥、防脱发,防止慢性病,提升人体阳气的功效。生姜有很多品种,小黄姜的药用价值较好,小黄姜切面纯黄色,味辛辣浓,肉细嫩,味香,纤维较细。其中北纬27度姜是天然无污染的稀缺性优质小黄姜品种。他身体一直不好的原因就是因为脾胃不好,稍吃多点或吃点不容最近看了比较火的“周杰舌吻林心如”,“芭莎明星慈善夜的C位风波”。感叹贵圈的水真深,稍有不慎,就可能被推上风口浪尖,各种黑。如果没有高情商,很难拥有好人缘,更立足贵圈啊!那么论娱乐圈里的高情商大家都知道有谁呢?所谓人红事非多,之前angelababy一直被传整容绯闻。在某访谈节目中她说:”我觉得上天给了我这个样貌“,既夸赞了自己的美貌又简洁有效地回应了整容传闻。今年生子后的angelababy要回归跑男,发了一条微博:“秒胖。”网友误以为angelababy要正面开撕迪丽热巴。随之而来又是一场骂战。后来Angelababy在评论区做出解释:“看到评论里有人说秒胖的意思是秒杀胖迪。觉得大家想象力本网有用户碰到这样的问题:Direct3D和DirectDraw有啥区别??游戏设计用哪个??-CSDN论坛,具体问题如下:
本网根据需求用户需求,为用户寻得以下其他网友提供的解决方法,方法仅供参考,具体如下:真是三十年河东三十年河西啊,遥想2000年奥运申办,5选一,北京两票之差输给悉尼,甚至事后还有贿选的消息传出。但看看现在,2022年冬奥会和2024夏奥会,国际奥委会面对的都是二选一的尴尬,甚至IOC。防恶意抓取,请查看原文,,真格学网提供内容。解决方案1:我喜欢吃土豆条做的土豆饼土豆2个,葱叶五六根,鸡蛋俩个,面半碗,盐三勺左右把土豆擦好放盆里,加俩鸡蛋,葱花,也可根据自己口味加点火腿丝或者胡萝卜又或者尖椒……然后是三勺盐,还有面粉,最后搅拌韵搅拌匀后。防恶意抓取,请查看原文,,真格学网提供内容。
direct3D支持3D啊
其实下小雨的话,各位车主是觉得无所谓的。其实雨稍微大一些也是能接受的。但是雨下成这样,还一直下,那就相当崩溃了。现在很多人都建议在暴雨天气关闭启停功能,那么到底要不要关呢?启停系统,Start-Sto。防恶意抓取,请查看原文,,真格学网提供内容。解决方案2:我想你应该就是群主吧!?我们先明确群成员类型,就是普通的搞笑小视频分享,没有太高的垂直度。但如果是要变现,这也不影响什么,只要人多就好。要更好的完成变现之前,我们要先了解几个事实:1、群活跃度每天在群。防恶意抓取,请查看原文,,真格学网提供内容。
开发2D游戏或2.5D游戏的还用DDRAW,但现在这类游戏已经快山穷水尽了。一.第一个地方。埃及的地中海旁小城马特鲁。MarsMateru。环球走了十七个国家的朋友跟我说,这一段海超美。于是从开罗颠了一晚上的夜车到达这里。仅是城内被LP差评的沙滩就已经足够让人掉下巴了。。。差。防恶意抓取,请查看原文,,真格学网提供内容。
direct3D可用来开发真正的3D游戏,虽然openGL也可以用来开发3D游戏,但从目前形式来看,商业游戏的开发在多数还是用D3D,OpenGL多用在科研上。这个问题的确很让妈妈纠结。太早怕伤害宝宝,太晚又受不了那种压力。事实上,“何时断奶”因人而异。“现在要不要断奶”“别人这个年龄已经断奶了”“查查看到底几时断奶最好”……思及离乳,种种念头会让妈妈很纠结。防恶意抓取,请查看原文,,真格学网提供内容。
到了directx8.0,已经不在对directdraw升级了,而干脆把它和direct3D合并在一起,形成了Direct&Graphics了,它可以担负起以往directdraw和direct3d两者的工作。
这种要看是老人自己偷偷拿,还是问促销员要的。因为做这事是在孩子面前,家庭成员怎么做会影响到孩子对事情的判断。如果老人总是偷偷拿走人的气球,给孩子的理念就是可以随意拿,但是每件物品都有归属权,这种属于偷,小小物件,不足称道的也是一种“偷”的行为。如果老人是问促销员拿的,也没什么,毕竟是人家同意的,孩子也理解别人的东西,别人同意了才可以拿。。防恶意抓取,请查看原文,,真格学网提供内容。解决方案3:相对于1980年的2角纸币,1980年的一角纸币肯定收藏度是没有那么高的,那么1980年一角纸币值多少钱?空空来为大家介绍下这款1980版1角纸币的收藏价值。801收藏价值第四套人民币是人民币收藏市场。防恶意抓取,请查看原文,,真格学网提供内容。
反正就一句话:DirectDraw是2D的,Direct3D是3D的。游戏当然用3D的啦
现在主流的挖矿显卡有GTX10606G、GTX1070、GTX1080以及AMDRX470、RX480、RX570等等。像GTX1050这种2G显存的显卡,因为显存太低了所以不适用于挖矿。经过测试,以。防恶意抓取,请查看原文,,真格学网提供内容。延边富德应该是要预定一个降级名额了,这两年中超升班马反而在赛季中段就离开了降级区,而第二年往往比较危险,刚刚降级的永昌就是个例子。其实这样现象也不是没有道理的,升班马第一年刚上来,大家对他的打法都不熟悉,以强队的姿态去打,往往会吃苦头。等到了第二年,大家伙基本都有经验了,这样对升班马就比较困难了。尤其对于延边而讲,本赛季还遭遇了赞助商撤资的打击,球队23轮过后仅仅得了三场胜利,积14分。而且在后七轮的比赛中,延边富德还将遭遇国安、鲁能、恒大这样的强队,即使不是强队,也有辽宁、河南这样的保级对手。积分少,赛程凶险,俱乐部正遭遇财政困难,今年的延边怕是难以逃脱降级的厄运了。此外,辽宁开新和天津泰达真是三十年河东三十年河西啊,遥想2000年奥运申办,5选一,北京两票之差输给悉尼,甚至事后还有贿选的消息传出。但看看现在,2022年冬奥会和2024夏奥会,国际奥委会面对的都是二选一的尴尬,甚至IOC已经被逼的需要打包出售举办权了。why?很简单,因为投入和产出不成正比,简单来说就是,办奥运会亏钱了。转折点出现在2014年索契冬奥会,索契冬奥会的总投入有500亿美元之巨,是预算的4倍之多,其中近30亿美元是安保费用。去年的里约奥运会,不仅投入有131亿美元之多,收入却在萎缩,因为里约糟糕的治安环境和各种丑闻,令许多外国游客望而却步。下这样的前车之鉴下,再赶上全球经济持续低迷的大形势,很多国家的
本文相关:1.DirectDraw 这可能是Directx中最重要的技术,由于它是2D图形赖以实现的渠道。也是Direct3D构建于其上的帧缓冲层。
2.DirectDraw是由非常多借口组成的。共同拥有5个接口
&&& &I. IUnknown 全部COM对象都必须从这个基本借口派生,DirectDraw也不例外。IUnknown仅仅包括Addref(),Release()和 QueryInterface() 三个函数。这些函数在其它接口中会被复写。
&&& &II.& IDirectDraw 这是開始使用DirectDraw时必须创建的主接口对象。
&&&& III. IDirectDrawSurface 这表示你用DirectDraw创建、控制和现实的实际显示表面。
&&&& IIII. IDirectDrawPalette 支持以使用256或者更少的颜色在视频模式下处理调色板。
&&&& V. IDirectDrawClipper 用于剪切DirectDraw光栅和位图操作到一些可见显示表面的子集。
<span style="font-family:Microsoft YaH font-size:18 color:#.创建一个DirectDraw
&&& &I. 创建主DirectDraw对象并使用 QueryInterface() 来得到一个IDirectDraw7接口。或者直接使用DirectDrawCreateEx()创建一个DirectDraw7接口。
&&&& II. 使用IDirectDrawSurface7接口至少创建一个主显示表面用以画图。
&&&& III. 用IDirectDrawPalette接口创建一个色板。用RGB三元组初试化并配置到相关显示表面中。
&&& &IIII. 假设DirectDraw应用程序要使用窗体。或者要降低位图以免溢出DirectDraw显示表面的可见边界,你至少须要创建一个裁剪器并将其尺寸设置为可见窗体的范围。
&&&& V. 在主显示表面上画图。
<span style="font-family:Microsoft YaH font-size:18 color:#创建DirectDraw对象的三种方法
&&& I. 利用 QueryInterface() 对版本号经行升级
LPDIRECTDRAW lpdd = NULL;
LPDIRECTDRAW lpdd7 =NULL;
if(FAILED(DirectDrawCreate(NULL,&lpdd,NULL)))
if(FAILED(lpdd-&QueryInterface(IID_IDirectDraw7,(LPVOID *)&lpdd7)))
&&& ps:接口标示符&#26684;式
&&&&&&&& &IID_IDirectCD
&&&&&&&& &当中字符C表示组件:Draw代表DirectDraw。Sound代表DirectSound,Input代表DirectInput,以此类推。字符D是一个从2~N的数字。代指你须要接口。
&&& II.调用底层的COM创建IDirectDraw7
if(FAILED(CoInitialize(NULL)))
if(FAILED(CoCreateInstance(&CLSID_DirectDraw,NULL,CLSCTX_All,&IID_IDirectDraw7,&lpdd7)))
if(FAILED(IDirectDraw7_Initialize(lpdd7,NULL)))
CoUninitialize();
&&& III.使用 DirectDrawCreateEx() 函数创建 IDirectDraw7
LPDIRECTDRAW
DirectDrawCreateEx(NULL,(void *)&lpdd,IID_IDirectDraw7,NULL);
版权声明:本文博主原创文章,博客,未经同意不得转载。
阅读(...) 评论()相关文章推荐
DirectDraw 在显示YUV图像的时候,由于 YUV 格式很多,显示不同格式的YUV图像都要针对不同格式专门写一些代码,这样很麻烦,同时也增加代码量。在网上看了一些 DirectDraw 示例以...
本文章适合所有读者 用DirectDraw编写动画程序rjren
步骤 1: 创建一个 DirectDraw 对象
要创建一个 DirectDraw 对象的实例,你的应用程序要象 DDEx1 例程中的 doInit 函数那样先使用 DirectDrawCreate...
只要是介绍编程的书,似乎有一个不成文的规定,即第一个例子由“Hello World”开始,本教程也不例外。那么,如果你早已迫不及待想初尝DirectDraw程序编译成功后的“0 error(s), 0...
今天我们将分别使用调色板和RGB模式来熟悉DirectDraw的基本图形。它们有什么不同呢?如果你曾经在DOS下编程,你可能使用过调色板映射模式。调色板是个颜色查询表,为了绘制象素,你将一个单独的字节...
环境:node-v6.3.1-x64,win7
npm -g install fis3
cnpm -g install fis3(不能翻墙的同学用这个,cnpm安装参考下文:为了顺畅搭建请使用cn...
1、视频覆盖:
  大概在1995年,当mpeg1(VCD)回放在PC上开始流行的时候,pc的处理能力还么有强大到实时播放的地步。显卡制造厂商适时的推出了"video overlay(视频覆盖)"的...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 directdraw怎么开启 的文章

 

随机推荐