如何在OpenGL ES 2.0中使用VAO

我读过使用VAO的建议,但我不知道如何。 我使用tegra android开发包(使用OpenGL ES 2.0),我找不到glGenVertexArrays和glBindVertexArray。 ES 2.0支持VAO吗?(没有扩展名)?

另外我不明白VAO的好处是什么。 目前我编译着色器并使用glBindAttribLocation。 之后,我定义三角形的顶点位置和颜色,并使用glVertexAttribPointer。 然后,我只是一次又一次地绘制三角形。

这是程序(没有错误检查):

static void createProgram() {
    // vertex shader
    const char* vertexShaderCode = getVertexShaderCode();
    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertexShader, 1, &vertexShaderCode, NULL);
    glCompileShader(vertexShader);

    // fragment shader
    const char* fragmentShaderCode = getFragmentShaderCode();
    GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragmentShader, 1, &fragmentShaderCode, NULL);
    glCompileShader(fragmentShader);

    // create program
    program = glCreateProgram();
    glAttachShader(program, vertexShader);
    glAttachShader(program, fragmentShader);

    // Dem Programm sagen, unter welchem Index die Daten der Shader Attribute liegen
    glBindAttribLocation(program, 1, "in_pos");
    glBindAttribLocation(program, 2, "in_color");

    glLinkProgram(program);
}

这是三角形:

static void loadGeometry() {
    GLuint buffers[2];
    glGenBuffers(2, buffers);
    GLuint vboPosition = buffers[0];
    GLuint vboColor = buffers[1];

    const int VERTEX_POSITION_BUFFER_SIZE = 12;
    const int VERTEX_POSITION_BUFFER_BYTESIZE = sizeof(GLfloat)* VERTEX_POSITION_BUFFER_SIZE;

    GLfloat vertexPositionBuffer[VERTEX_POSITION_BUFFER_SIZE] = {
        0.0f, 0.5f, 0.0f, 1.0f,
        -0.5f, -0.5f, 0.0f, 1.0f,
        0.5f, -0.5f, 0.0f, 1.0f };

    glBindBuffer(GL_ARRAY_BUFFER, vboPosition);
    glBufferData(GL_ARRAY_BUFFER, VERTEX_POSITION_BUFFER_BYTESIZE, vertexPositionBuffer, GL_STATIC_DRAW);
    glEnableVertexAttribArray(1);
    glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, 0);

    // Repeat for color...
}

在我的平局中,我只是做了

glUseProgram(program);
glDrawArrays(GL_TRIANGLES, 0, 3);
链接地址: http://www.djcxy.com/p/52435.html

上一篇: How to use VAOs in OpenGL ES 2.0

下一篇: iOS OpenGL ES 2.0 VBO confusion