GLSL - Usando atributo de saída personalizado em vez de gl_Position

Atualmente, estou aprendendo OpenGL com shaders (3.3). Há uma coisa que parece que não consigo resolver. Eu li que o uso de variáveis internas como gl_Position e gl_FragCoords foi descontinuado no OpenGL 3+, portanto, eu queria usar minha própria variável de saída.

Então, em vez disso:

#version 330\n
layout(location=0) in vec2 i_position;
out vec4 o_position;
void main() 
{
    gl_Position = vec4(i_position, 0.0, 1.0);
};

Eu escrevi isto:

#version 330\n
layout(location=0) in vec2 i_position;
out vec4 o_position;
void main() 
{
    o_position = vec4(i_position, 0.0, 1.0);
};

Os shaders são compilados sem problemas nos dois casos, mas o segundo código produz apenas uma tela em branco. Preciso especificar de alguma forma qual variável é a saída?

questionAnswers(1)

yourAnswerToTheQuestion