2011-10-15 91 views
5

我正在用cocos2d创建一个iPhone应用程序,我正在尝试使用以下OpenGL ES 1.1代码。但是,我对OpenGL不太好,我的应用程序使用OpenGL ES 2.0,所以我需要将其转换。OpenGL ES 1.1到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

我们在谈论ES还是桌面?造成巨大的差异。在前一种情况下(重新使用opengl标签)它不会那么容易。在后一种情况下(删除es标签)不应该有任何保护问题。 –

+0

嗨,这是iPhone,所以它是ES。 – FBryant87

+1

啊,是的,必须有重读的。在这种情况下,移植将不那么容易,您需要进入GLSL着色器。 –

回答

9

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

OpenGL ES 2.0的不具有固定功能流水线了。这意味着你必须使用GLSL顶点和片段着色器来管理顶点转换,光照,纹理等。您还必须自己跟踪转换矩阵,不再有glMatrixMode,glPushMatrix,glTranslate ......。

还有没有buitlin顶点属性了(就像glVertexglColor ...)。所以这些功能,以及相应的阵列功能(如glVertexPointerglColorPointer,...)和gl(En/Dis)ableClientState,已经reomved了。相反,你需要的通用顶点属性功能(glVertexAttribglVertexAttribPointergl(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更清晰。你不会发现任何严重的应用程序不使用着色器(也许今天,但肯定不是明天)。 –

+1

@ user666254更好的东西?一个新的硬件加速的API硬件供应商必须支持,这实现了已有的可能性的一个子集。不太可能发生。当然,对于简单的事情,您仍然可以使用OpenGL ES 1.1。但是必须在某个地方推进未来。 –