¿Cómo creo un contexto OpenGL 3.3 en GLFW 3?

He escrito un sencillo programa OpenGL 3.3 que se supone que representa un triángulo, basado eneste tutorial, excepto que estoy usando GLFW para crear la ventana y el contexto, en lugar de hacerlo desde cero. Además, estoy usando Ubuntu.

El triángulo no se renderiza, solo tengo una pantalla negra. Funciones comoglClearColor() yglClear() Parece que funcionan exactamente como deberían, pero el código para representar el triángulo no. Aquí están los bits relevantes de la misma:

#define GLFW_INCLUDE_GL_3
#include <GL/glew.h>
#include <GLFW/glfw3.h>

int main ()
{
  glfwInit();

  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
  glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

  GLFWwindow* window = glfwCreateWindow(800, 600, "GLFW test", NULL, NULL);

  glfwMakeContextCurrent(window);

  glewExperimental = GL_TRUE;
  glewInit();

  float vertices[] = {-0.5f, -0.5f, 0.0f, 0.5f, 0.5f, -0.5f};

  GLuint VBOid[1];

  glClear(GL_COLOR_BUFFER_BIT);

  glGenBuffers(1, VBOid);
  glBindBuffer(GL_ARRAY_BUFFER, VBOid[0]);
  glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(float), vertices, GL_STATIC_DRAW);

  glEnableVertexAttribArray(0);

  glBindBuffer(GL_ARRAY_BUFFER, VBOid[0]);
  glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
  glDrawArrays(GL_TRIANGLES, 0, 3);

  ...
}

¿Qué me estoy perdiendo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta