xcode - OpenGL ES 1.1 到 2.0 的重大变化?

标签 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);
}

最佳答案

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

OpenGL ES 2.0 不再具有固定功能的管道。这意味着您必须使用 GLSL 顶点和片段着色器自行管理顶点变换、照明、纹理等。您还必须自己跟踪变换矩阵,没有 glMatrixMode , glPushMatrix , glTranslate ,……再说。

也不再有 buitlin 顶点属性(如 glVertexglColor ,...)。所以这些函数,以及相应的数组函数(如 glVertexPointerglColorPointer 、...)和 gl(En/Dis)ableClientState ,也被删除了。相反,您需要通用顶点属性函数( glVertexAttribglVertexAttribPointergl(En/Dis)ableVertexAttribArray ,它们的行为类似)以及相应的顶点着色器来赋予这些属性正确的含义。

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

关于xcode - OpenGL ES 1.1 到 2.0 的重大变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7777605/

相关文章:

ios - 滚动时的自动布局问题

iphone - 线程1:信号SIGABRT xcode 4.4 ios 5.1 Objective-c帮助>。<

c++ - glColorMask 是否影响 glClear

iphone - cocos2d :how to create continous parallax layer

xcode - 切换到另一个自定义 View

ios - 谷歌地图 sdk ios Api 错误

android - OpenGL ES 2.0 中的等 ionic 着色器性能

Android : OpenGL 2. 0 第一人称相机

ios - 如何像 flappy bird 一样在随机高度生成 CCSprite

iphone - 如何在Cocos2d中隐藏屏幕左下角的FPS数字