gpt4 book ai didi

android - OpenGL ES 2.0 与 OpenGL 3 - 异同

转载 作者:可可西里 更新时间:2023-11-01 14:59:32 32 4
gpt4 key购买 nike

根据我的阅读,OpenGL ES 2.0 似乎与 OpenGL 2.1 不同任何,这是我之前的假设。

我很想知道 OpenGL 3 是否与 OpenGL ES 2.0 相当。换句话说,考虑到我要为桌面和 Android 制作游戏引擎,我应该特别注意 OpenGL 3.x+ 和 OpenGL ES 2.0 之间的差异吗?

这也可以包括 OpenGL 4.x 版本。

例如,如果我开始阅读 this书,如果我打算将引擎移植到 Android(当然使用 NDK ;)),我是在浪费时间吗?

最佳答案

From what I've read, it appears that OpenGL ES 2.0 isn't anything like OpenGL 2.1, which is what I assumed from before.

定义“完全不像”它。 Desktop GL 2.1 有一堆 ES 2.0 没有的功能。但是两者中有一个最常见的子集适用于两者(尽管您必须为纹理图像加载捏造一些东西,因为那里存在一些显着差异)。

Desktop GL 3.x 提供了许多未扩展的 ES 2.0 根本没有的功能。 Framebuffer 对象是 3.x 中的核心,而它们是 2.0 中的扩展(即便如此,您只能获得一个目标图像而没有另一个扩展)。有变换反馈、整数纹理、统一缓冲对象和几何着色器。这些都是特定的硬件功能,要么在 ES 2.0 中不可用,要么只能通过扩展获得。其中一些可能是特定于平台的。

但是在桌面 GL 3.x 上也有一些很好的 API 便利功能。显式属性位置(layout(location=#))、VAO 等

For example, if I start reading this book, am I wasting my time if I plan to port the engine to Android (using NDK of course ;) )?

这取决于您打算做多少工作以及您准备做什么才能让它发挥作用。至少,您应该了解 OpenGL ES 2.0 的功能,以便了解它与桌面 GL 的不同之处。

很容易避开实际的硬件功能。渲染到纹理(或多个纹理)是您的算法所要求的。与变换反馈、几何着色器等一样。所以您需要多少取决于您尝试做什么,并且可能有替代方案取决于算法。

您更有可能被捕获的是桌面 GL 3.x 的便利特性。例如:

layout(location = 0) in vec4 position;

这在 ES 2.0 中是不可能的。类似的定义是:

attribute vec4 position;

这在 ES 2.0 中可行,但它不会导致 position 属性与属性索引 0 相关联。这必须通过代码完成,使用glBindAttribLocation在程序链接之前。 Desktop GL 也允许这样做,但是您链接到的书不会这样做。出于显而易见的原因(这是一本基于 3.3 的书,而不是一本试图保持与旧 GL 版本的兼容性的书)。

统一缓冲区是另一个。本书对它们进行了自由使用,尤其是对于共享透视矩阵。这是一种简单有效的技术。但是 ES 2.0 没有这个功能;它只有每个程序的制服。

同样,您可以根据需要对公共(public)子集进行编码。也就是说,您可以故意放弃使用显式属性位置、统一缓冲区、顶点数组对象等。但那本书也不能完全帮助你做到这一点。

会不会浪费你的时间?好吧,那本书不是用来教你 OpenGL 3.3 API 的(它确实这样做了,但这不是重点)。本书教你图形编程;它恰好使用了 3.3 API。您在那里学到的技能(除了那些基于硬件的技能)可以转移到您正在使用的涉及着色器的任何 API 或系统。

这么说吧:如果你对图形编程不是很了解,用什么API来学习都无所谓。掌握这些概念后,您可以阅读各种文档并了解如何轻松地将这些概念应用到任何新 API。

关于android - OpenGL ES 2.0 与 OpenGL 3 - 异同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9629897/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com