PDA

View Full Version : Drawing triagnle using Vertex Array



Mårran
06-26-2014, 08:52 PM
I managed to fix it myself.

Hi everyone.

I'm following a tutorial and got stuck at an early stage trying to draw a triangle using vertex array object. The screen is just black.

Here are the relevant parts of my code, I'll post a link to a public repo of my project at the end of this post, in case you want to see the context of all this. I'm using C++ and SFML by the way.

Initialization

void RenderUtil::initGraphics()
{
glewInit();
glClearColor(0.0, 0.0, 0.0, 0.0);
glFrontFace(GL_CW);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
}

void RenderUtil::clearScreen()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}

Mesh

Mesh::Mesh()
{
glGenBuffers(1, &m_vbo);
m_size = 0;
}

void Mesh::addVertices(Vertex* vertices, int array_size)
{
m_size = array_size * sizeof(Vertex);
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
glBufferData(GL_ARRAY_BUFFER, m_size, vertices, GL_STATIC_DRAW);
}

void Mesh::draw()
{
glEnableClientState(GL_VERTEX_ARRAY);

glColor3f(0.4,0.0,0.0);
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
glVertexPointer(3, GL_FLOAT, m_size / sizeof(Vertex), 0);
glDrawArrays(GL_TRIANGLES, 0, m_size);

glDisableClientState(GL_VERTEX_ARRAY);
}

Game

Game::Game(Display& display)
: m_display(&display)
, mesh()
{
Vertex vertices[] = {Vertex(Vector3f(-1.0, -1.0, 0.0)),
Vertex(Vector3f(0.0, 1.0, 0.0)),
Vertex(Vector3f(1.0, -1.0, 0.0))};

int array_size = sizeof(vertices) / sizeof(Vertex);
mesh.addVertices(vertices, array_size);
}

void Game::render()
{
mesh.draw();
}

I think those are the most relevant parts, where it's most likely that I'm commiting some mistake. Here is a link to the rest:

[snip]

Ok so, please help me figure out what silly mistakes I'm making that prevents a triangle from rendering.