2011-10-15 13 views
5

Estoy creando una aplicación para iPhone con cocos2d y estoy tratando de hacer uso del siguiente código de OpenGL ES 1.1. Sin embargo, no soy bueno con OpenGL y mi aplicación hace uso de OpenGL ES 2.0, así que necesito convertirlo.OpenGL ES 1.1 a 2.0 ¿un cambio importante?

Por lo tanto, me preguntaba, ¿qué tan difícil sería convertir el siguiente código de ES 1.1 a ES 2.0? ¿Hay alguna fuente que pueda decirme qué métodos necesitan reemplazarse, etc.?

-(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

¿Estamos hablando de ES o computadora de escritorio aquí? Hace una gran diferencia. En el primer caso (remontar la etiqueta opengl) no será tan fácil. En el último caso (eliminar las etiquetas es) no debería haber problemas de proting. –

+0

Hola, es iPhone, así que es ES. – FBryant87

+1

Ah sí, debe haber sobreescrito eso. En este caso, la transferencia no será tan fácil y deberá acceder a los sombreadores GLSL. –

Respuesta

9

No será tan fácil si no estás en forma en OpenGL.

OpenGL ES 2.0 ya no tiene una tubería de función fija. Esto significa que debe administrar transformaciones de vértices, iluminación, texturización y cosas similares, todo usted mismo usando vértices GLSL y sombreadores de fragmentos. También debe realizar un seguimiento de las matrices de transformación, no hay glMatrixMode, glPushMatrix, glTranslate, ... más.

Ya no existen atributos de vértices buitlin (como glVertex, glColor, ...). Por lo tanto, estas funciones, junto con las funciones de matriz correspondientes (como glVertexPointer, glColorPointer, ...) y gl(En/Dis)ableClientState, han sido reemplazadas también. En su lugar, necesita las funciones de atributo de vértices genéricos (glVertexAttrib, glVertexAttribPointer y gl(En/Dis)ableVertexAttribArray, que se comportan de manera similar) junto con un sombreado de vértices correspondiente para dar a estos atributos su significado correcto.

Le sugiero que busque en un buen tutorial o libro de OpenGL ES 2.0, ya que portar de 1.1 a 2.0 es realmente un cambio importante, al menos si nunca ha escuchado algo acerca de los sombreadores.

+1

Bueno, gracias, podría probar 2.0 desde cero. Entiendo que 2.0 ofrece más posibilidades, pero ¿no podrían TAMBIÉN dar los atajos de 1.1? Me parece increíble que se sentaran y pensaran "Lo sé, en la versión 2.0 sacaremos todo y dejaremos que la gente lo haga todo". No me importa tomarme el tiempo para aprender algunas cosas de bajo nivel, pero mirando algunos tutoriales les toma alrededor de una hora hacer un cubo giratorio. Estoy sorprendido por el simple dibujo de líneas, etc. alguien no ha llegado con algo mejor. – FBryant87

+1

@ user666254 Tienes razón en que configurar cosas simples requiere más esfuerzo ahora y también es más difícil de aprender para principiantes, ya que no se puede hacer mucho sin comprender toda la API y la canalización. Pero, por otro lado, ahora es mucho más difícil hacer las cosas mal (como 'glBegin/glEnd', ...) y la API es mucho más limpia. Y no encontrará ninguna aplicación seria que no use shaders de todos modos (tal vez hoy, pero seguramente no mañana). –

+1

@ user666254 Algo mejor? ¿Tienen que admitir los nuevos proveedores de hardware API acelerados por hardware, que logran un subconjunto de las posibilidades ya existentes? No es muy probable que suceda. Para cosas simples, aún puedes usar OpenGL ES 1.1, por supuesto. Pero en algún lugar hay que hacer un avance hacia el futuro. –