我已经成为OS X用户大约11个月了,在此之前我使用了Linux和Windows,我知道用GUI做一些适用于所有平台(没有Java)的痛苦是多么痛苦。
我不知道的是人们如何制作像使命召唤,Duke Nukem Forever或Batman Arkham Asylum这样的游戏在Windows和OS X上都可以使用。
DirectX是否特定于Windows并且在Mac上完全不可用?我猜想像Photoshop这样的应用程序会在C ++中用零写入自己的GUI,这样就不会像使用3D图形引擎那样造成麻烦(我在这里错了吗?)。
我知道在Linux上可以通过Wine获得一些工作,但这不是一种官方方式。
如何为高性能应用程序实现这种多平台性?
答案 0 :(得分:6)
尽管平台之间的3D图形API可能有很大差异(Mac / Linux上的OpenGL与Windows上的Direct3D 11相比,PS3上的Xbox 360风味DirectX9与LibGCM等),底层3D硬件实际上非常相似。通常,游戏将具有低级别兼容性API层,其在目标平台上抽象出3D API之间的大部分差异,然后在这种较低级别抽象之上构建更高级别的渲染。这种方式移植到新平台只涉及移植相对较小的“驱动程序”以支持低级别兼容性层,而不是移植所有更高级别的渲染代码。
开发在所有目标平台上实现高性能的跨平台游戏的现实往往比这个理想化的图片更复杂。例如,平台差异可能泄漏并影响高级渲染决策,因为在不同平台上实现特定效果的最有效方式可能非常不同。当不同平台可能使用不同的着色语言(GLSL,HLSL,Cg)时,以高效的跨平台方式处理着色器也可能非常复杂。
考虑到游戏机开发的游戏已经倾向于拥有一个复杂的资产管道,其中包含艺术家创作的源资源(纹理,模型,动画,材质定义等),并将它们预处理成最适合的原生格式在控制台上加载和渲染。可以在管道中处理许多平台差异,其中代码只需要在PC上运行,并且对性能和内存限制的担忧不太重要。
此方法允许内容创建者开发其大部分内容,而无需担心平台特定的细节,并使游戏运行时不必处理格式转换,字节序差异等。目标平台上的图形驱动程序层可以相当精简并且只需处理原生纹理格式,顶点数据,着色器等,在开发系统(通常是高端PC)的管道代码中处理的格式之间进行转换的大部分复杂性。
开发跨平台游戏是一项非常复杂的挑战,但通过精心设计抽象层和资产管道,可以使游戏运行时代码平台的大多数与平台无关,并将代码的平台特定部分隔离到某些定义良好的模块。
现在许多游戏都使用像Unreal或Unity这样的第三方引擎开发,这些引擎已经完成了处理平台差异的大部分工作,并且允许游戏创建者更少关注处理平台差异的细节以及更多关于开发他们的特定游戏。