【问题标题】:cannot use GLSL 330 on mac mavericks不能在 mac 小牛上使用 GLSL 330
【发布时间】:2014-04-08 03:03:54
【问题描述】:

我正在尝试学习 OpenGL,并且材质在着色器中使用 #version 330。我可以编译成功,但是当我尝试运行它时,它会抱怨不支持版本 330。

在我的源代码中,我在 Xcode 中使用了免费的 glut 和 OpenGL 框架。如果我也包括这两行代码

glutInitContextVersion(3,1); glutInitContextFlags(GLUT_CORE_PROFILE);

无法编译。

我的mac是MacBook Pro Mid 2012。根据应用应该支持OpenGL4.1。

那么如何编译 330 版着色器?

【问题讨论】:

  • 当您尝试添加 gluInitContextVersion 和 gluInitContextFlags 时遇到什么编译器错误?
  • 看来可以编译成功了。但是当我运行它时,它抱怨不支持#version 330。
  • 在 OpenGL 3.1 中没有核心配置文件(或任何相关配置文件)上下文这样的东西。你需要3,2Core

标签: macos opengl glew freeglut


【解决方案1】:

OS X 要求您请求 3.2 core profile 以接收 3.3 或更高版本的上下文。这是因为 3.2 最终删除了 3.0 中已弃用的功能。

因此,如果您想使用#version 330 着色器,那么您的代码应如下所示:

glutInitContextVersion(3,2);
glutInitContextFlags(GLUT_CORE_PROFILE);

EDIT显然X11在OS X上不支持高于2.1的OpenGL。因此,我建议你切换到GLFW

【讨论】:

  • 我已将它添加到我的源代码中。但它仍然不起作用。源代码可以编译成功。但是当我运行它时,它会抱怨: X Error of failed request: BadRequest (invalid request code or no such operation) Major opcode of failed request: 34 (X_UngrabKey) Serial number of failed request: 29 Current serial number in output stream: 29我不知道这是什么原因。
  • @Negelis:这也是您的问题的一部分……要在 OS X 上获得 3.2+ 的核心配置文件上下文,您必须使用本机 CGL 或 NSOpenGL API。如果您的软件通过传统的 X 服务器,您将永远被限制在 OS X 上的 OpenGL 2.1。我想知道为什么它被配置为使用 X 服务器而不是 Quartz;无论您从哪里获得 FreeGLUT 端口,他们都是使用 X 而不是 OS X 的本机 API 构建的。顺便说一下,X OpCode 是错误的。 GLX Major OpCode 34 是glXCreateContextAttribsARB,这是其他平台用来请求GLX_CONTEXT_MAJOR_VERSION_ARB的。
  • @Negelis:尽管它报告了错误的 OpCode 并不奇怪,因为它对 GLX_ARB_create_contextGLX_ARB_create_context_profile 扩展一无所知。同样,这里重要的是找到一个用于 OS X 的 FreeGLUT 端口,该端口不是基于 X 构建的,或者更好的是尚未使用 GLFW3 或 SDL2 之类的东西。 Apple 不支持 X,只是在 Quartz 之上提供了一个兼容的 X 服务器,以使移植现有的 UNIX 应用程序更容易。此 X 服务器公开的 GL 功能在 GL 2.1 中被冻结,它也不支持新的 GLX 扩展。
  • @Coleman:非常感谢!我想我现在更清楚这里出了什么问题。
  • @MichaelMorris:我一直指的是XQuartz :) 那是Apple 的X 服务器,它位于Quartz 之上。它没有实现来自 GLX 的更新的东西,在 OS X 上获得 3.2+ 核心上下文的唯一方法是使用 CGL 或 NSOpenGL。 GLX 和 AGL 无法使用,因为在 OS X 10.7 中添加 GL 配置文件时它们从未更新。在底层,FreeGLUT 通常在 UX 平台上使用 GLX,但如果它是 OS X 原生的,它可能会使用 NSOpenGL,因为这是 OS X 上唯一可以让您同时进行窗口和全屏渲染的原生 API .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多