运行使用 OpenGL 3.3 的 mac os x c++ 程序

Posted

技术标签:

【中文标题】运行使用 OpenGL 3.3 的 mac os x c++ 程序【英文标题】:Running mac os x c++ program working with OpenGL 3.3 【发布时间】:2017-10-03 19:24:44 【问题描述】:

我正在运行 Mac OS X Sierra 10.12.6 (16G29)。我正在使用 macbook pro。

我已经安装了 brew 和以下软件包:

brew install glfw3
brew install glew
brew install glm

这是我的 c++ 程序:

#include <iostream>
#include <GLFW/glfw3.h>
GLFWwindow* window;
#include <GL/gl.h>

int main(int argc, const char * argv[])

    if (!glfwInit())
    
        return -1;
    

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

    // Should be true for macOS, according to GLFW docs, to get core profile.
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    // According to Apple docs, non-core profiles are limited to version 2.1.
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    window = glfwCreateWindow(640, 480, "Test 1", NULL, NULL);
    if( window == NULL )
    
        return -1;
    

    glfwMakeContextCurrent(window);

    // glGetString(GL_VERSION) is NULL at this point

    return 0;

这是我正在运行的命令行来编译我的程序:

g++ program.cpp -I/opt/X11/include -L/opt/X11/lib -lglfw -lGL -lGLEW

存在运行时问题,因为我得到一个 NULL 窗口。 我在 Linux 虚拟机上编译了相同的代码,效果很好……

【问题讨论】:

您是否在构建设置中添加了“OpenGL.framework”? 我不使用可可应用程序或 Xcode。我在我的问题中输入的文件是一个文本文件 尝试用-framework OpenGL 替换(或添加,我不确定)-lGL 并确保路径上有这个框架目录。(可能是/System/Library/Frameworks/OpenGL.framework 尝试使用glfwSetErrorCallback 打印 GLFW 给您的错误。当glfwCreateWindow 返回NULL 时,这意味着窗口创建失败并且是内部问题,可能与您的系统有关。 【参考方案1】:

这在 GLFW 文档中得到了回答:http://www.glfw.org/docs/latest/window_guide.html

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
// Should be true for macOS, according to GLFW docs, to get core profile.
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
// According to Apple docs, non-core profiles are limited to version 2.1.
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

另见:https://developer.apple.com/opengl/OpenGL-Capabilities-Tables.pdf

【讨论】:

我认为你应该交换 cmets,要求 核心配置文件 使用 GLFW_OPENGL_CORE_PROFILE 奇怪:glGetString(GL_VERSION) 返回 NULL @Ripi2:cmets 在我看来很合适。非核心配置文件仅限于 2.1,因此您需要核心配置文件。 @Bob5421:您似乎没有阅读 GLFW 文档。转至glfw.org/docs/latest/quick.html“在您可以使用 OpenGL API 之前,您必须拥有当前的 OpenGL 上下文。” 我没有放我所有的代码,但实际上我有 glfwMakeContextCurrent(window); (见编辑)

以上是关于运行使用 OpenGL 3.3 的 mac os x c++ 程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OS X 上初始化 QOpenGLContext 以使用 OpenGL 3.3 版?

如何在 Mac OSX 上将我的 OpenGL 从 2.1 升级到 3.3?

Mac OS X 上的 OpenGL 纹理损坏

无法使用 GLEW (mac,c++) 在 openGL 中绘制任何内容

在 Mac OS X 上使用现代 OpenGL [关闭]

在 Mac OS X 中编译使用 OpenGL 的 C 程序