OpenGL ES 1.1到2.0有哪些重大变化?

时间:2011-10-15 11:38:53

标签: xcode opengl-es cocos2d-iphone opengl-es-2.0

我正在使用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);
}

1 个答案:

答案 0 :(得分:9)

如果你不太适合OpenGL,那就不那么容易了。

OpenGL ES 2.0不再具有固定功能管道。这意味着您必须使用GLSL顶点和片段着色器自己管理顶点变换,光照,纹理等。您还必须自己跟踪转换矩阵,不再有glMatrixModeglPushMatrixglTranslate,...等等。

再也没有buitlin顶点属性(如glVertexglColor,...)。因此,这些函数以及相应的数组函数(如glVertexPointerglColorPointer,...)和gl(En/Dis)ableClientState也已被重新编写。相反,您需要通用顶点属性函数(glVertexAttribglVertexAttribPointergl(En/Dis)ableVertexAttribArray,其行为类似)与相应的顶点着色器一起使这些属性具有正确的含义。

我建议您查看一个很好的OpenGL ES 2.0教程或书籍,因为从1.1到2.0的移植确实是一个重大变化,至少如果您从未听说过有关着色器的任何内容。