我正在开发各种游戏框架,并且是OpenGL的新手。大多数书籍似乎都没有对这个问题给出非常明确的答案,我希望使用OpenGL在我的桌面上进行开发,但是在OpenGL ES 2.0环境中执行代码。我的问题是双重的:
答案 0 :(得分:39)
我上次做任何ES工作已经有三年了,所以我可能已经过时或只是错误地记住了一些东西。
不,针对桌面的OpenGL定位不等于定位OpenGL ES,因为ES是一个子集。 ES没有实现立即模式功能(glBegin()
/ glEnd()
,glVertex*()
,...)顶点数组是将内容发送到管道的主要方式。
此外,它取决于您要定位的配置文件:至少在Lite配置文件中,ES不需要实现浮点功能。相反,你得到定点函数;认为32位整数,其中前16位表示小数点前的数字,后面的16位表示小数点后的数字。
换句话说,如果使用浮点数,即使简单的代码也可能不可移植(您必须使用gl*f()
函数调用替换对gl*x()
函数的调用。< / p>
了解如何在Trolltech's example(特别是qtwidget.cpp
文件中解决此问题;它是Qt示例,但仍然......)。你会看到他们打这个电话:
q_glClearColor(f2vt(0.1f), f2vt(0.1f), f2vt(0.2f), f2vt(1.0f));
这意味着替换对glClearColorf()的调用。此外,它们使用宏f2vt()
- 意味着 float到顶点类型 - 它自动将参数从float转换为正确的数据类型。
三年前,当我为一家公司开发一些小型演示时,我已成功与PowerVR's SDK合作。它适用于Windows下的Visual C ++;我没有在Linux下试过它(因为我在公司PC上工作,所以没有必要)。
一个小小的更新,以反映我最近的ES经验。 (2011年6月7日)
glBegin()
/ glEnd()
glClearColor()
glClearColorf()
等功能的一些调用
答案 1 :(得分:4)
在OpenGL ES 2.0中,这是新小工具使用的,你还必须提供自己的顶点和片段着色器,因为旧的固定功能管道已经消失。这意味着必须自己进行任何着色计算等,这些事情会非常复杂,但您可以在GLSL教程中找到现有的实现。
但是,由于GLES是桌面OpenGL的一个子集,因此可以在两个平台上运行相同的程序。
答案 2 :(得分:3)
根据我的理解,OpenGL ES是OpenGL的一个子集。我想如果你不使用立即模式的东西,比如glBegin()和glEnd(),你应该没问题。在过去的几个月里,我没有对OpenGL做过多少工作,但是当我使用ES 1.0时,只要我没有使用glBegin / glEnd,我从标准OpenGL中学到的所有代码都可以工作。
我知道iPhone模拟器运行的是OpenGL ES代码。我不确定Android的一个。
答案 3 :(得分:3)
答案 4 :(得分:0)
选项3)您可以使用像Qt这样的库来使用内置的包装函数来处理OpenGL代码。这使您可以选择为OpenGL使用一个代码库(或最低限度的代码库),并为您想要的大多数平台构建。您不需要为要支持的每个不同平台移植它。 Qt甚至可以根据您使用的功能选择OpenGL上下文。