将DirectX移植到OpenGL ES(iPhone)

时间:2010-11-12 17:45:33

标签: opengl-es directx porting

我被要求调查将10年前的Direct X(v7-9)游戏移植到OpenGL ES,最初用于iPhone

我以前从未接受这样的游戏端口(并且会聘请某人来做)但我想了解这个过程。

  1. 是否有任何资源/书籍/博客可以帮助我理解这个过程?
  2. 是否有像Mono这样可以实现此目的的项目?

2 个答案:

答案 0 :(得分:6)

TBH像这样的移植工作涉及但相当容易。

首先,您首先将所有DirectX调用替换为“stubs”(即空函数)。您可以这样做,直到您可以编译软件。编译完成后,即可开始实现所有存根函数。沿途会有很多陷阱,但值得做。

如果您需要在iPhone 3GS之前移植并支持手机,则您的任务更复杂,因为硬件仅支持仅固定功能的GLES 1。你必须以某种方式“模仿”这些着色器。在移动平台上,我过去曾编写过直接在顶点数据上执行“顶点着色”的汇编代码。像素着色通常更复杂,但您通常可以通过“顶点着色”提供足够的信息来实现此目的。您可能只需要删除一些图形功能。

iPhone的后续版本使用GLES 2,因此您可以访问GLSL ... ATI已经编写,并且Unity3D的Aras P已经扩展,软件将移植HLSL code to GLSL

完成所有这些后,您将进入优化阶段。你可能会发现你的第一次传球效率不高。这是完全正常的。此时,您可以查看更高级别的代码,了解如何移动代码并以不同方式执行操作以获得最佳性能。

总结:您的第一步是在没有DirectX的情况下编译代码。下一步将是实际移植对OpenGL ES调用的DirectX调用。最后,您需要重构剩余的代码以获得最佳性能。

(P.S:我很乐意为你做移植工作。请通过我的个人资料中的我的个人资料页面与我联系;))。

答案 1 :(得分:0)

不是一个完整的答案,但希望能帮到一点......

我不知道有什么针对OpenGL ES的具体内容,但是Cadega,Cider和VirtualBox等等 - 提供了对OpenGL调用的DirectX调用的翻译,而OpenGL ES广泛地说是OpenGL,很少使用很少位和一些较慢和冗余的部分被删除。因此,至少可以调查这些产品是值得的;至少VirtualBox是开源的。

iPhone 3GS以后的SGX部分有一个完全可编程的流水线,相当于DirectX 10部分,所以硬件就在那里。较旧的MBX是具有dot3扩展名的固定管道,但没有立方体贴图,只有两个纹理单元。它还具有矩阵调色板扩展,因此如果可以接受多次传递,您可以进行良好的动画和非常好的照明。