游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 流川枫

怎么编写可以运行时切换成D3D渲染或者DDRAW绘制或者OPENGL

[复制链接]

2

主题

108

帖子

116

积分

注册会员

Rank: 2

积分
116
发表于 2009-7-25 16:08:00 | 显示全部楼层

Re:请、问、怎么编写可以运行时切换成D3D渲染或者DDRAW绘

楼主的问题属于引擎设计的范畴。
要实现这种实时切换,必须把各种需要实现的渲染SDK之间相同功能的API通过抽象出一个个对应的平台无关的虚类,然后每个渲染SDK各自派生实现自己的各个功能类。
比如:各个渲染引擎都有设备管理、纹理资源管理功能,那就要设计两个虚类,来包装设备和纹理管理;然后OGL和D3D各自用自己的方法去实现。然后应用程序里总是使用这些虚类来驱动显卡,当需要切换渲染方式时要把所有虚类销毁,然后创建新的渲染方式的虚类。
说得不太清楚,其实这只是设计模式的一点小小应用而已,楼主可以去学习下这些资料。
也可以参考下市面上的引擎是如何实现这点的,比如:Ogre

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-7-25 18:44:00 | 显示全部楼层

Re:请、问、怎么编写可以运行时切换成D3D渲染或者DDRAW绘

Ogre和Irrlicht两大开源引擎都同时支持D3D和OGL 你可以看看他的抽象类是怎么写的

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-7-25 18:49:00 | 显示全部楼层

Re:请、问、怎么编写可以运行时切换成D3D渲染或者DDRAW绘

还有一点: 并不是每个平台的可执行文件都是.exe后缀的PE文件格式


所以如果你想在linux和win32上同时支持的话  你需要编译两个文件: 一个是win32的exe,  一个是linux的带有可执行属性的文件


而且常规的linux是不支持direct3d的, 所以对于linux部分, d3d的代码完全是没用的

32

主题

235

帖子

235

积分

中级会员

Rank: 3Rank: 3

积分
235
 楼主| 发表于 2009-7-25 18:53:00 | 显示全部楼层

Re: Re:请、问、怎么编写可以运行时切换成D3D渲染或者DDRAW

mybios: Re:请、问、怎么编写可以运行时切换成D3D渲染或者DDRAW绘制或者OPENGL扫描的游戏程序?

楼主的问题属于引擎设计的范畴。
要实现这种实时切换,必须把各种需要实现的渲染SDK之间相同功能的API通过...

我原来就是这么想的,不过不知道标准是什么。
3QS [em14]

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2009-7-27 10:56:00 | 显示全部楼层

Re:怎么编写可以运行时切换成D3D渲染或者DDRAW绘制或者OPEN

理论上这东西没有“最标准”实现方法的,大致有几种方法:1、使用虚函数类继承,这个上面说了。2、用Dll,把D3D和OpenGL的函数统一成相同的功能接口,在程序中动态加载DLL文件。3、用函数指针表,首先也是把功能统一,然后用一个指针表的方式存下全部接口的函数指针,在程序里只要切换这个表的指针就可以了。可以参考Wine的GDI函数。4、用D3D接口实现一遍OpenGL或反过来实现。以上三种方式其实本质上是一样的(1)是C++里的常规用法,(2)相对来说比较节省内存,(3)比较通用,用法上更倾向于C的代码,(4)比较BT,效率可能会不高,据说以前Windows下的某些游戏就是用D3D实现OpenGL接口的方法。另外上面前三种用法切换时都要经过释放资源/分配资源的过程的。

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2009-7-27 11:05:00 | 显示全部楼层

Re:怎么编写可以运行时切换成D3D渲染或者DDRAW绘制或者OPEN

书接上回,从楼主问的问题上来看,LZ对于编程的理论性要求太强了。大概你写程序之前都是把所有不明白的东西搞明白才开始写代码吧?LZ一再强调想要知道“最标准的”,但其实在程序设计上几乎没有什么最标准方法可言,算法和构架都是在不断演化的,各个商业程序/引擎也是在大家的常规方法上改良和取巧,以求达到效率和效果的平衡,很多理论上的标准算法还都是停留在数学模型阶段,太过于遵守条条框框对于编程来说是不利的。个人认为~~

0

主题

113

帖子

122

积分

注册会员

Rank: 2

积分
122
发表于 2009-7-27 13:51:00 | 显示全部楼层

Re:怎么编写可以运行时切换成D3D渲染或者DDRAW绘制或者OPEN

一般是程序刚刚启动,在初始化第一个渲染设备前,就确定是D3D还是OpenGL。
这个也可以算是运行时选择。
如果已经开始用了,再换,开销就比较大了。

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2009-7-27 15:45:00 | 显示全部楼层

Re:怎么编写可以运行时切换成D3D渲染或者DDRAW绘制或者OPEN

cs1.6就是支持OpenGL和D3D切换的,可以看到~~切换时灰常灰常地慢~~而且在我电脑上,D3D渲染就从来没对过~~~

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2009-7-27 22:09:00 | 显示全部楼层

Re:怎么编写可以运行时切换成D3D渲染或者DDRAW绘制或者OPEN

看起来开销大而已,实际上就算切换花费了一两秒钟,用户也是能忍受的。

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-7-28 10:42:00 | 显示全部楼层

Re:怎么编写可以运行时切换成D3D渲染或者DDRAW绘制或者OPEN

我以前的电脑OpenGL渲染也从来没对过  那颜色质量超烂

不过我安装了最新的显卡驱动就ok了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-19 00:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表