将 OpenGL ES 2.0 映射到 Direct3D 11

首次开始将图形体系结构从 OpenGL ES 2.0 移植到 Direct3D 的过程时,你需要自行熟悉一下 API 之间的主要差别。 本部分中的主题将帮助你规划你的移植策略以及将图形处理移动到 Direct3D 时必须进行的 API 更改。

主题 说明

规划从 OpenGL ES 2.0 到 Direct3D 的移植

如果你移植 iOS 或 Android 平台中的游戏,那么你可能需要在 OpenGL ES 2.0 方面进行大量投资。 如果你准备将你的图形管道代码库移动到 Direct3D 11 和 Windows 运行时,那么在开始之前你应该考虑以下事项。

将 EGL 代码与 DXGI 和 Direct3D 进行比较

DirectX Graphics Interface (DXGI) 以及若干个 Direct3D API 所起的作用与 EGL 相同。 本主题帮助你从 EGL 的角度了解 DXGI 和 Direct3D 11。

将 OpenGL ES 2.0 缓冲区、uniform 和顶点属性与 Direct3D 进行比较

在从 OpenGL ES 2.0 移植到 Direct3D 11 的过程中,必须更改用于在应用和着色器程序之间传递数据的语法和 API 行为。

将 OpenGL ES 2.0 着色器管道与 Direct3D 进行比较

从概念上来说,Direct3D 11 着色器管道与 OpenGL ES 2.0 中的着色器管道非常相似。 但是,就 API 设计而言,用于创建和管理着色器阶段的主要组件是两个主要接口 ID3D11Device1ID3D11DeviceContext1 的一部分。 本主题尝试在这些接口中将常用的 OpenGL ES 2.0 着色器管道 API 模式映射到 Direct3D 11 同等模式。

 

有关特定 OpenGL ES 2.0 提供商的说明

这些主题都使用 Khronos OpenGL ES 2.0 规范,该规范使用与平台无关的 C 程序。iOS 和 Android 使用相同的规范,为这些平台开发的 OpenGL ES 2.0 代码与我们将介绍的代码段非常相似,尽管它们通常显示为面向对象的 API。 此外,由于每个平台的复杂性和语言差异性,可能存在细微的差别,特别是在方法参数类型或常规的语言语法方面。 例如,iOS 使用 Objective-C。 Android 能够使用 C++;但是,某些开发人员可能依赖纯 Java 实现。 鉴于这一点,这些主题应该依然有用,因为 OpenGL ES API 的总体概念、结构以及用法并没有什么不同。