19

我花了一天的时间努力让我的简单引擎在 Mac 上工作。我有 SDL 工作,现在唯一给我带来麻烦的是 opengl。该引擎使用现代 opengl(基于着色器),因此需要 GLEW。我已经尝试了从 fink 到 MacPorts 的所有方法来安装它,但没有任何效果。

我取得的最大成功是从源代码构建它。首先,我收到一条错误消息,'GL/glu.h' no such file or directory found.因此我将包含内容重命名为OpenGL/glu.h并解决了该问题。但是现在我得到了这个错误ld: unknown option: -shared,我完全被困在这一点上。

如果有人知道如何做到这一点,我也宁愿静态构建。

4

6 回答 6

32

您可以使用Homebrew为您完成工作:

brew install glew
于 2013-08-13T23:21:06.183 回答
15

该引擎使用现代 opengl(基于着色器),因此需要 GLEW

GLEW 不是使用现代 OpenGL 功能的先决条件。它是一种加载扩展功能的方法,而不是唯一的方法。你在 MacOS X 上,所以扩展系统对你来说用处不大,因为支持的 OpenGL 版本完全由操作系统和可用框架决定。Apple 自己开发 OpenGL 驱动程序,它们提供的扩展只是那些用于 OpenGL 规范中没有的功能(即供应商特定和 EXT)。您所需要的只是一个足够新的 OpenGL 框架版本。2006 年之后发布的任何 MacOS X 都可以做到。

于 2012-09-01T18:19:21.430 回答
6

更新 20180912 - 不要使用 GLEW。只是不值得麻烦...


我已经使用源代码安装了 GLEW:

制作 GLEW_DEST="$HOME/local" OPT="-march=core2 -O2" install.all

您的优化和目的地可能会有所不同。这会产生一个 libGLEW.a、libGLEWmx.a 和它们在$HOME/local/lib. 该pkgconfig子目录还将包括glew.pc. GLEW 也不总是与其他人相处得很好。必须设置全局变量,例如glewExperimental,以及需要注意包含其他标题的顺序:<OpenGL/gl3.h><glfw.h>等。

如果我能提供一些建议 - 忘记现代 GL 编程的 SDL。如果你想在 OS X 上进入纯粹的、现代的 GL。- 考虑类似:

#if defined (__APPLE_CC__)
#include <OpenGL/gl3.h>
#else
#include <GL/gl3.h>       /* assert OpenGL 3.2 core profile available. */
#endif

#define GLFW_INCLUDE_GL3  /* don't drag in legacy GL headers. */
#define GLFW_NO_GLU       /* don't drag in the old GLU lib - unless you must. */

#include <GL/glfw.h>      /* simple and easy to use. omit legacy GL. */

安装 GLFW 也很简单:

> env PREFIX="$HOME/local" CFLAGS="-march=core2 -O2" 制作 cocoa cocoa-dist-install

同样,您的设置可能会有所不同。


20160412:正如其他人所指出的,我对 SDL 的评论已经过时。特别是如果您正在使用另一个引擎。我认为 glfw3 是在 OSX 上制作现代 OpenGL 应用程序的一种更简单的方法。它的代码编写和维护得非常好,(正确地!)专注于 GL 和事件处理。显然,从“引擎”的角度来看,SDL2 提供了可移植的扩展视频 API、音频 API、线程 API 等。尽管使用 C11 和 C++11,即使是线程 API 抽象层也可能是多余的。

GLEW 的问题在于如果没有大量用户干预就无法处理多个上下文。这对 OSX 来说不是问题,它提供了核心配置文件 API,并且不需要加载“功能点”。IIRC,X 上的 GL(DRI?)也有这个 - 但我可能错了。那里还有其他装载机。我仍在等待一个人来统治它们,这确保在必要时为多个上下文加载不同的函数指针,并使用线程本地(甚至是 pthread 键)进行正确调度,这可以从最新的 gl 生成.xml 来自 Khronos 或任何人......


20180912

我认为现在最简单的方法是使用 GLFW 提供上下文,并使用GLAD来解析 GL 函数指针。唯一的缺点是没有有效管理多个 GL 上下文。这就是 GLFW 目前在其演示中使用的……我现在完全忘记了 GLEW。

于 2012-09-03T17:22:21.057 回答
3

MacPorts 应该为您安装这些库及其依赖项:

sudo port install glew +universal
sudo port install libsdl +universal

构建游戏时,最好在构建和链接步骤中调用 g++;您只需要参考/opt/local即可找到 MacPorts 已安装的头文件和库。如果您愿意,还可以静态链接 .a 文件:

g++ -c -O3 -I/opt/local/include main.cpp -o main.o
g++ main.o /opt/local/lib/libSDL.a /opt/local/lib/libSDLmain.a /opt/local/lib/libGLEW.a -o mygame

如果您从命令行构建,我建议使用 Makefile 并使用 make 构建

于 2013-08-13T22:49:10.827 回答
2

我建议您访问http://glew.sourceforge.net并将 ZIP 文件直接下载到您的 Mac 上。然后进入Finder并输入glew.h来查看文件,控制点击它,获取信息,然后复制文件的路径。然后进入包含#include <GL/glew.h>依赖项的相应程序文件(例如,commons.h),并将其更改为:

#include <path/to/file/that/you/just/copied/glew.h>  

然后,尝试再次编译您的程序,这一次您应该不会收到任何 GLEW 错误。

于 2014-10-29T04:27:17.207 回答
1

上面的答案都没有给我我正在寻找的东西:一种快速设置和具有静态 Glew 依赖项的 Xcode 项目的方法。

  1. 从这里下载 GLEW 源代码http://glew.sourceforge.net/
  2. 类型

    $sudo make install 
    

    从解压缩的目录中(如果您想动态链接,这将安装 .dylib)。您需要安装 CMake。

  3. 将 .a 静态库从 /usr/local/lib/ 复制到您的 XCode 项目
  4. 在您的目标的 Xcode 构建设置中更新“标题搜索路径”以包含标题(通常放在 /usr/local/include 中)。或者只是将标题复制到您自己的项目中。
于 2017-08-15T20:23:10.383 回答