OpenGL ES 1.1升级到2.0是一次重大变化吗?

5

我正在使用cocos2d创建一个iPhone应用程序,尝试使用以下OpenGL ES 1.1代码。然而,我对OpenGL不熟悉,我的应用程序使用了OpenGL ES 2.0,所以我需要进行转换。

因此,我想知道将以下代码从ES 1.1转换为ES 2.0有多难?是否有一些资源可以告诉我哪些方法需要替换等等?

-(void) draw
{
    glDisableClientState(GL_COLOR_ARRAY);
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    glDisable(GL_TEXTURE_2D);

    glColor4ub(_color.r, _color.g, _color.b, _opacity);
    glLineWidth(1.0f);
    glEnable(GL_LINE_SMOOTH);

    if (_opacity != 255)
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    //non-GL code here

    if (_opacity != 255)
        glBlendFunc(CC_BLEND_SRC, CC_BLEND_DST);

    glEnableClientState(GL_COLOR_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glEnable(GL_TEXTURE_2D);
}

我们是在谈论 ES 还是桌面应用程序?这会有很大的区别。如果是前者(移除 OpenGL 标签),那么就不会那么容易。如果是后者(移除 ES 标签),那么就不应该有任何移植问题。 - Christian Rau
1
啊,是的,可能刚才漏读了。在这种情况下,移植可能不那么容易,您需要学习GLSL着色器。 - Christian Rau
哦天啊...这个效果在Flash中只用了几分钟就实现了 :/ 感谢建议,我可能需要考虑其他方法。 - FBryant87
1个回答

9
如果您对OpenGL不是很熟悉,那么这并不容易。OpenGL ES 2.0不再有固定功能管线。这意味着您必须使用GLSL顶点和片段着色器自己管理顶点变换、光照、纹理等内容。您还需要自己跟踪转换矩阵,不再有glMatrixMode、glPushMatrix、glTranslate等函数。也不再有内置的顶点属性(如glVertex、glColor等),因此这些函数以及相应的数组函数(如glVertexPointer、glColorPointer等)和gl(En/Dis)ableClientState函数都已被删除。取而代之的是您需要使用通用顶点属性函数(glVertexAttrib、glVertexAttribPointer和gl(En/Dis)ableVertexAttribArray,它们的行为类似),以及相应的顶点着色器来赋予这些属性正确的含义。我建议您查阅一本好的OpenGL ES 2.0教程或书籍,因为从1.1版本迁移到2.0版本确实是一个重大的改变,尤其是如果您从未听说过着色器的话。

1
说得好,谢谢。我可能会尝试从头开始使用2.0。我理解2.0提供了更多的可能性,但是它们难道不能同时提供1.1的快捷方式吗?我觉得难以置信他们坐下来想:“我知道,在2.0版本中我们将把所有东西都拿掉,让人们自己去做。”我不介意花时间学习一些低级别的东西,但是看一些教程,他们需要大约一个小时才能制作一个旋转的立方体。对于简单的线条绘制等,我很惊讶还没有人带来更好的东西。 - FBryant87
1
@user666254,你说得没错,现在设置简单的东西需要更多的努力,对于初学者来说也更难学习,因为你必须理解整个API和管道才能做更多的事情。但另一方面,现在要做错事情(如glBegin/glEnd等)要困难得多,API也更加清晰。而且你不会找到任何一个严肃的应用程序不使用着色器(也许今天还有,但明天肯定没有)。 - Christian Rau
1
@user666254 有更好的选择吗?一个新的硬件加速API,需要硬件供应商支持,实现已经存在的一部分功能?这种情况不太可能发生。当然,对于简单的事情,您仍然可以使用OpenGL ES 1.1。但是必须在未来取得进展。 - Christian Rau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接