一些OpenGL函数调用在开发PS3游戏时不可用

时间:2013-04-19 22:52:12

标签: opengl game-engine ps3

我目前正在桑德兰大学学习游戏机编程模块。 他们在这个模块中教授的是OpenGL和Phyre Engine来开发PS3游戏。

PS3 SDK套件不是免费提供的(这是非常昂贵的)这使得我很难在出现问题时解决。

显然,PS3框架不支持大多数gl函数调用,如glGenList,glBegin,glEnd等。

glBegin(GL_QUADS);
    glTexCoord2f(TEXTURE_SIZE, m_fTextureOffset);
    glVertex3f(-100, 0, -100);

    //some more
glEnd();

在glBegin,glEnd和glTexCoord2f上使用PS3调试模式进行调试时出错。

有没有办法绕过它? 喜欢绘画对象的另一种方式,也许?

3 个答案:

答案 0 :(得分:4)

为PS3开发的大多数游戏根本不使用OpenGL,而是“在金属上”进行编程,即直接使用GPU而不使用中间的abstrace API。是的,PS3有一个OpenGL-esque API,但这实际上是基于OpenGL-ES。

在OpenGL-ES中没有立即模式。 Immediatate Mode是一种将几何体传递给OpenGL的繁琐方法,它通过启动带有glBegin的图元然后链接顶点属性状态设置的调用,通过提交顶点的位置glVertex并以{{结尾}来结束1}}。 没有人想要使用它!特别是在资源有限的系统上。

无论如何,您都可以在内存中使用几何数据。那么为什么不简单地指出OpenGL使用已经存在的东西呢?嗯,这正是要做的事情:顶点阵列。您将OpenGL指针指向查找数据的位置(现代OpenGL中的通用glEnd,或旧固定函数中的预定义固定属性glVertexAttribPointerglVertexPointerglTexCoordPointer,{{1然后让它使用glNormalPointerglColorPointer绘制一大堆。

在现代OpenGL中,绘图过程由用户可编程着色器控制。在固定功能 OpenGL中,您所能做的就是通过通胀数量的状态变量进行参数化。

答案 1 :(得分:2)

PlayStation 3使用的OpenGL是OpenGL ES 1.0的变体(根据维基百科的 ES 2.0的某些功能)。

http://www.khronos.org/opengles/1_X

有规格吗?那里似乎没有glBegin / glEnd函数。那些(如在固定管道函数中)已被弃用(并且已经删除了OpenGL 4.0和OpenGL ES 2.0),但仍然支持像VBO这样的东西,所以学习如何使用它们可能没什么意义。

答案 2 :(得分:0)

如果您使用PhyreEngine,通常应避免直接调用图形API,因为PhyreEngine位于不同平台上的不同API之上。

在PC上它使用GL(或D3D),但在PS3上它使用较低级别的API。因此,即使您使用了GL-ES功能,即使它已编译,它也可能无法正常运行。因此,在为PS3构建时看到错误并不奇怪。

理想情况下,您应该使用PhyreEngine的绘图管道,这是与平台无关的。如果您坚持使用该API,原则上您可以为任何支持的平台编译代码。

我可以公开评论PhyreEngine(对不起)有多少限制,但是如果你在大学课程上,你的大学应该可以访问官方支持论坛,在那里你可以得到更具体的帮助。

如果您真的必须直接定位基础图形API,请注意您可能需要编写/修改每个平台的代码,并且您需要与PhyreEngine可能依赖的任何上下文状态“玩得开心”。