How do I replace glBegin() and related functions in OpenGL ES 2.0?

Sudhanshu Gupta picture Sudhanshu Gupta · Jun 20, 2011 · Viewed 16.2k times · Source

I have OpenGL code like the following that I'd like to port to OpenGL ES 2.0:

for (surfnum=0;surfnum < surftotal;surfnum++){
    for (i=0;i<triNum[surfnum];i++){
        glBegin(GL_POLYGON);
        glNormal3fv(triArray[surfnum][i].normpt1);
        glVertex3fv(triArray[surfnum][i].pt1);
        glNormal3fv(triArray[surfnum][i].normpt2);
        glVertex3fv(triArray[surfnum][i].pt2);
        glNormal3fv(triArray[surfnum][i].normpt3);
        glVertex3fv(triArray[surfnum][i].pt3);
        glEnd();
        glFlush();
    }       
}

OpenGL ES 2.0 lacks GL_POLYGON, glNormal3fv, glVertex3fv, glEnd, glBegin, etc., so how do I replace these functions?

P.S.: I am doing this in Ubuntu 10.10 through an emulator.

Answer

datenwolf picture datenwolf · Jun 20, 2011

You use Vertex Buffer Objects. Tutorial at NeHe: http://nehe.gamedev.net/tutorial/vertex_buffer_objects/22002/

The tutorial (the bulk text) is written for Windows. OpenGL-ES 2 on Android differs by that you don't have to load extensions manually and are given a properly prepared OpenGL context by the egl... functions.

Another readable tutorial is http://www.songho.ca/opengl/gl_vbo.html

GL_POLYGONS have been abandoned from OpenGL-3 and -ES since they're cumbersome to work with and almost never used. Also GL_POLYGON can be perfectly replaced by GL_TRIANGLE_FAN. Or you do the clean thing and tesselate polygonal geometry into triangles yourself.