GLSL: uso del atributo de salida personalizado en lugar de gl_Position

Actualmente estoy aprendiendo OpenGL con sombreadores (3.3). Sin embargo, hay una cosa que no puedo resolver. He leído que el uso de variables integradas como gl_Position y gl_FragCoords está en desuso en OpenGL 3+, por lo tanto, quería usar mi propia variable de salida.

Entonces, en lugar de esto:

#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);
};

Yo escribí esto:

#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);
};

Los sombreadores compilan sin problemas en ambos casos, pero el segundo código produce una pantalla en blanco. ¿Necesito especificar de alguna manera qué variable es la salida?

Respuestas a la pregunta(1)

Su respuesta a la pregunta