#version 330 #extension GL_ARB_shader_subroutine : require #extension GL_ARB_explicit_uniform_location : require out vec4 fragColor; subroutine vec4 color_t(); layout(location = 5) subroutine uniform color_t Color; subroutine(color_t) vec4 ColorRed() { return vec4(1, 0, 0, 1); } subroutine(color_t) vec4 ColorBlue() { return vec4(0, 0, 1, 1); } void main() { fragColor = Color(); }