1

我正在尝试在 OS X 上创建一个简单的 OpenGL 3.2 核心配置文件应用程序。我通过 Macports 使用 SDL2,但我怀疑这很重要。我的理解是我应该使用 GLSL #version 150,而我的琐碎片段着色器目前看起来像这样:

#version 150

out vec4 outputF;

void main() {
    outputF = vec4(1.0, 0.0, 0.0, 1.0);
}

现在我相信我需要告诉 OpenGL 片段颜色是outputF通过glBindFragDataLocation函数设置的。问题是它似乎没有在任何地方声明。此功能在 3.2 核心配置文件中不可用(与我的搜索相反),还是我缺少头文件,还是什么?

4

1 回答 1

4

如果您在 OS X 上,则包含<OpenGL/gl3.h>GL 3.2(核心)配置文件的标题。作为 OpenGL 框架的一部分,它位于:

/System/Library/Frameworks/OpenGL.framework/Headers/gl3.h

如果您将片段写入默认帧缓冲区,则不需要此调用。也就是说,默认情况下outputF将绑定到“颜色编号” (0)。IIRC,您可以随意调用此out变量,只要它不以保留gl_前缀开头。

我还没有尝试过 SDL2 - 但您可能想先添加#define GL3_PROTOTYPES,例如,

#define GL3_PROTOTYPES

#if defined (__APPLE_CC__)
#include <OpenGL/gl3.h>
#else
#include <GL/glcorearb.h> // assert GL 3.2 core profile available...
#endif
于 2013-09-28T06:42:10.597 回答