我正在使用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);
}
答案 0 :(得分:9)
如果你不太适合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的移植确实是一个重大变化,至少如果您从未听说过有关着色器的任何内容。