为Mac OSX构建glew

Dav*_*son 15 opengl macos glew

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

我所获得的最大成功是从源头构建它.首先我得到一个错误说,'GL/glu.h' no such file or directory found.所以我重命名了包含,OpenGL/glu.h并解决了这个问题.但是现在我得到了这个错误,ld: unknown option: -shared我完全陷入了困境.

如果有人知道如何做,那也是静态构建.

yih*_*gho 27

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

brew install glew
Run Code Online (Sandbox Code Playgroud)

  • 那又怎样?我对此完全陌生,我正努力做到这一点.安装完成了,但我仍然对下一步该做什么一无所知. (2认同)
  • @RafaelEyng 在这之后写下你的代码在说 `main.cpp` 然后使用 `clang++ main.cpp -lGLEW -framework OpenGL -o <EXECUTABLE_FILE>` 编译(如果你使用其他库,你可以添加 `-lglfw3 -framework Cocoa -框架 OpenGL -framework IOKit -framework CoreVideo`)。 (2认同)

dat*_*olf 13

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

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

  • 如何将包含GLEW的程序移植到OS X上进行编译? (2认同)
  • @Efren:检查`__APPLE__`预处理器宏,并且只有在未定义的那个*包括GLEW头时才检查.对于定义`__APPLE__`的情况,定义(空)宏将`glew ...`函数调用转换为no-ops. (2认同)

Bre*_*ale 5

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


我已经使用以下来源安装了GLEW:

使GLEW_DEST =“ $ HOME / local” OPT =“-march = core2 -O2” install.all

您的优化和目的地可能会有所不同。这样会产生一个libGLEW.a,libGLEWmx.a及其对应的dylib $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. */
Run Code Online (Sandbox Code Playgroud)

安装GLFW也非常容易:

> env PREFIX =“ $ HOME / local” CFLAGS =“-march = core2 -O2”使可可可可安装

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


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

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


20180912

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

  • “忘记用于现代OpenGL编程的SDL”。该评论现在已过期。SDL2使您可以指定OpenGL上下文的版本。 (7认同)