gpt4 book ai didi

OpenGL 与 OpenGL ES 2.0 - OpenGL 应用程序可以轻松移植吗?

转载 作者:行者123 更新时间:2023-12-03 07:05:06 25 4
gpt4 key购买 nike

我正在开发某种游戏框架,并且是 OpenGL 的新手。大多数书籍似乎都没有对这个问题给出非常明确的答案,而我想在我的桌面上使用OpenGL进行开发,但在OpenGL ES 2.0环境中执行代码。那么我的问题是双重的:

  1. 如果我将 OpenGL 框架定位在桌面上,它是否可以在 OpenGL ES 2.0 环境中不经修改地运行?
  2. 如果没有,那么有没有好的模拟器,PC 或 Mac 均可;是否有一个我可以运行的脚本将我的 OpenGL 代码转换为 OpenGL ES 代码,或者标记不起作用的东西?

最佳答案

自从我上次从事任何 ES 工作以来已经大约三年了,所以我可能已经过时了或者只是记错了一些东西。

  1. 不,针对桌面版 OpenGL 并不等于针对 OpenGL ES,因为 ES 是一个子集。 ES 不实现立即模式函数( glBegin()/glEnd()glVertex*() 、...) 顶点数组是将内容发送到管道的主要方式。

    此外,这取决于您的目标配置文件:至少在 Lite 配置文件中,ES 不需要实现浮点函数。相反,你会得到定点函数;考虑 32 位整数,其中前 16 位表示小数点之前的数字,后面的 16 位表示小数点之后的数字。

    换句话说,如果使用 float ,即使是简单的代码也可能无法移植(您必须将对 gl*f() 函数的调用替换为对 gl*x() 函数的调用。

    看看如何解决这个问题 Trolltech's example (特别是 qtwidget.cpp 文件;它是 Qt 示例,但仍然......)。您会看到他们调用此电话:

    q_glClearColor(f2vt(0.1f), f2vt(0.1f), f2vt(0.2f), f2vt(1.0f));

    这旨在替换对 glClearColorf() 的调用。此外,他们使用宏f2vt() - 意思是float到顶点类型 - 自动将参数从float转换为正确的数据类型。

  2. 三年前,当我为一家公司开发一些小型演示时,我与 PowerVR's SDK 合作取得了成功。 。适用于 Windows 下的 Visual C++;我没有在 Linux 下尝试过(不需要,因为我在公司 PC 上工作)。

<小时/>

一个小更新,以反射(reflect)我最近使用 ES 的经历。 (2011年6月7日)

  • 当今的平台可能不使用 Lite 配置文件,因此您可能不必担心定点小数
  • 将桌面代码移植到移动设备(例如 iOS)时,很可能您必须主要执行以下操作,而无需执行其他操作:
    • 替换glBegin()/glEnd()使用顶点数组
    • 替换一些对函数的调用,例如 glClearColor()调用诸如glClearColorf()之类的电话
    • 重写您的窗口和输入系统
    • 如果以 OpenGL ES 2.0 为目标来获取着色器功能,您现在必须用着色器完全替换固定功能管道的内置行为 - 至少是重新实现固定功能管道的基本行为
  • 非常重要:除非您的移动系统不受内存限制,否则您确实需要考虑为图形芯片使用纹理压缩;例如,在 iOS 设备上,您将把 PVRTC 压缩的数据上传到芯片

关于OpenGL 与 OpenGL ES 2.0 - OpenGL 应用程序可以轻松移植吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1179249/

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