为什么 OSX Mavericks 无法编译我的 GLSL 着色器?

Why won't OSX Mavericks compile my GLSL Shader?

本文关键字:GLSL 我的 编译 OSX Mavericks 为什么      更新时间:2023-10-16

这个着色器程序编译得很好

#version 120
void main()
{
gl_FrontColor = gl_Color;
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
}

但是当我尝试切换到版本 330 或 400 时,它会抛出"不支持"错误

#version 400
void main()
{
gl_FrontColor = gl_Color;
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
}

我需要使用"in"和"out"功能来配合我用来学习OpenGL的书,最新的Mac应该支持高达4.1。 我什至下载了苹果图形开发人员工具以使用OpenGL Shader Builder寻求帮助,它也不会编译超过1.2的任何内容。

我假设您正在使用NSOpenGLView. 在我将 OpenGL 配置文件配置为使用 3.2 内核之前,我无法编译任何> V1.20 着色器。 必须使用正确的属性设置NSOpenGLView(或其子类,如果要对其进行子类化)上的 pixelFormat 属性。

如果要对NSOpenGLView进行子类化,并且已将其添加到接口生成器中的视图中,则可以将以下代码添加到子类的-awakeFromNib方法中:

- (void) awakeFromNib
{
    NSOpenGLPixelFormatAttribute attributes [] = {
        NSOpenGLPFADepthSize, (NSOpenGLPixelFormatAttribute)24,
        NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
        (NSOpenGLPixelFormatAttribute)0
    };
    NSOpenGLPixelFormat *pf = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];
    [self setPixelFormat:pf];
}

如果以编程方式创建视图,还有其他方法可以设置像素格式(例如 -initWithFrame:pixelFormat: )。

另外,请参阅Apple的GLEssentials示例代码,其中有很多内容,但它确实使用了最新版本的OpenGL,并且其中包含了上面的确切代码片段。