glDrawArrays (GL_POINTS, 0 4) не рисует точки в iOS 5.0 и openGL ES 2.0 - PullRequest
3 голосов
/ 12 марта 2012

У меня есть простой код OpenGL ES 2.0 для рисования точек.Вот настройка VAO:

    static const GLfloat squareVertices[] = {
        -0.5f, -0.5f, -1.0f,
        0.5f, -0.5f, -1.0f,
        0.5f,  0.5f, -1.0f,
        -0.5f, 0.5f,  -1.0f
    };

    static const GLfloat squareColors[] = {
        1.0f, 0.0f, 0.0f, 1.0f,
        0.0f, 1.0f, 0.0f, 1.0f,
        0.0f, 0.0f, 1.0f, 1.0f,
        1.0f, 0.0f, 1.0f, 1.0f
    };
    glGenVertexArraysOES(1, &_vertexArray);
    glBindVertexArrayOES(_vertexArray);

    glGenBuffers(1, &_vertexBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(squareVertices), squareVertices, GL_STATIC_DRAW);

    glEnableVertexAttribArray(ATTRIB_VERTEX);
    glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, GL_FALSE, 0, 0);

    glGenBuffers(1, &_colorP_VBO);
    glBindBuffer(GL_ARRAY_BUFFER, _colorP_VBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(squareColors), squareColors, GL_STATIC_DRAW);

    glEnableVertexAttribArray(ATTRIB_COLOR);
    glVertexAttribPointer(ATTRIB_COLOR, 4, GL_FLOAT, GL_FALSE, 0, 0);
    glBindVertexArrayOES(0);

, а вот код рендеринга:

    [glView setDisplayFramebuffer:glView.viewFrameBuffer];

    glUseProgram(simpleShaderProgram);
    glBindVertexArrayOES(_vertexArray);

//  glLineWidth(5.0f);
//      glDrawArrays(GL_LINE_LOOP, 0, 4);
//      glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
//  glEnable(GL_POINT_SMOOTH);

    glPointSize(25.0f);
    glDrawArrays(GL_POINTS, 0, 4);

    glBindVertexArrayOES(0);

    glUseProgram(0);

    glBindFramebuffer(GL_FRAMEBUFFER, 0); //unbind the FBO  
    [glView presentFramebuffer:glView.viewFrameBuffer];

Когда я использую GL_LINE_LOOP или GL_TRIANGLE_FAN, он рисует цветной квадрат на экране.Однако, когда я использую GL_POINTS, средство визуализации не рисует вершины, и экран остается пустым.Я ценю, если кто-нибудь даст мне знать, что мне не хватает.Спасибо

Ниже приведены мои вершинные и фрагментные шейдеры:

attribute vec4 position;
attribute vec4 v_color;

varying vec4 colorVarying;


void main()
{
    colorVarying = v_color;
    gl_Position =  position;

}

------------------------------------------------
precision mediump float;
varying vec4 colorVarying;


void main()
{
    gl_FragColor = colorVarying;
}

1 Ответ

4 голосов
/ 14 марта 2012

Вы используете ES 2.0, поэтому вызов glPointSize(), вероятно, ничего не делает. Размер точки должен быть установлен внутри вашего шейдера с помощью встроенной выходной переменной gl_PointSize.

...