我想在OS X上创建一个简单的OpenGL 3.2核心配置文件应用程序。我通过Macports使用SDL2,但我怀疑这一点。我的理解是,我应该使用GLSL #version 150
和我的琐碎片段着色器目前看起来是这样的:OS X OpenGL 3.2不包含glBindFragDataLocation?
#version 150
out vec4 outputF;
void main() {
outputF = vec4(1.0, 0.0, 0.0, 1.0);
}
现在我相信我要告诉OpenGL该片段颜色在outputF
通过glBindFragDataLocation
功能设定。问题在于它似乎没有在任何地方宣布。该功能在3.2核心配置文件中不可用(与我的搜索相反),还是缺少头文件?或者是什么?
既然你已经建立了GLSL 1.5为基准此着色器,你可以跳过不必完全使用'glBindFragDataLocation(...)'并使用'layout(location = 0)out vec4 outputF;'。请注意,片段着色器中第一个使用的'out'变量绑定到颜色缓冲区0开始,所以在大多数只写入单个颜色缓冲区的应用程序中,您不需要混淆第一名。设置装订位置是一种很好的形式,但绝对不是必需的。 –
@ AndonM.Coleman谢谢,但是当指定布局规范时,您会发现着色器编译器错误,您只是简单地读取'布局'位置'的无效使用'。 – Karl
@ AndonM.Coleman,GLSL 1.50不支持布局限定符。在'#version'声明工作后,在我的机器上'#extension GL_ARB_explicit_attrib_location:enable';而'#version 330'似乎也在某种程度上起作用 - 卖主驱动程序? GL 3.2也不能依赖。 –