我正在使用 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 顶点属性(如 glVertex
, glColor
,...)。所以这些函数,以及相应的数组函数(如 glVertexPointer
、 glColorPointer
、...)和 gl(En/Dis)ableClientState
,也被删除了。相反,您需要通用顶点属性函数( glVertexAttrib
、 glVertexAttribPointer
和 gl(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/