Нарисуйте треугольник VBO с и без шейдера - PullRequest
1 голос
/ 29 января 2020

Я пытаюсь нарисовать простой красный треугольник на экране. Без использования VBO код работает как задумано. При попытке нарисовать его с помощью VBO (с шейдером или без него) он просто не действует.

Мой код:

//Works
glBegin(GL_TRIANGLES);
glVertex3f(0f, 0f, 0.0f);
glVertex3f(0.5f, 0f, 0.0f);
glVertex3f(0.5f,  0.5f, 0.0f);
glEnd();

//Does not work
int vertexArrayID = glGenVertexArrays();
glBindVertexArray(vertexArrayID);

float[] g_vertex_buffer_data = new float[]{
        0f, 0f, 0.0f,
        0.5f, 00f, 0.0f,
        0.5f,  0.5f, 0.0f,
};

int vertexbuffer = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, FloatBuffer.wrap(g_vertex_buffer_data), GL_STATIC_DRAW);

glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);

glVertexAttribPointer(
        0,                  // attribute 0. No particular reason for 0, but must match the layout in the shader.
        3,                  // size
        GL_FLOAT,           // type
        false,           // normalized?
        0,                  // stride
        0            // array buffer offset
);

glDrawArrays(GL_TRIANGLES, 0, 3); // 3 indices starting at 0 -> 1 triangle

glDisableVertexAttribArray(0);
glDeleteBuffers(vertexbuffer);
glDeleteVertexArrays(vertexArrayID);


System.out.println(glGetError());

glGetError () всегда возвращает 0.

Я использую шейдер, скопированный по умолчанию, для тестирования своего кода (я связываю и привязываю программу перед использованием кода выше):

#version 330 core

// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 vertexPosition_modelspace;

void main(){

    gl_Position.xyz = vertexPosition_modelspace;
    gl_Position.w = 1.0;
}
#version 330 core

// Ouput data
out vec3 color;

void main()
{
    // Output color = red
    color = vec3(1,0,0);
}
...