使用GLEW,GLFW和g ++编译在OS X 10.10下启用OpenGL 4.1

时间:2015-04-24 22:27:51

标签: c++ macos opengl g++ glfw

我有一个2014 RMBP,更新到最新版本的OS X,这应该保证我与OpenGL 4.1的兼容性。我已经汇总了一个最小的工作示例:

#include <iostream>

#include "GL/glew.h"
#include <GLFW/glfw3.h>

using namespace std;

int main(){
    int windowWidth = 800;
    int windowHeight = 800;
    string windowTitle = "title";

    glfwDefaultWindowHints();
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);

    if( !glfwInit() )
    {
        cerr << "Failed to initialize GLFW.\n";
        return 1;
    } else {
        clog << "Initialized GLFW." << endl;
    }

    GLFWwindow* pWindow = glfwCreateWindow(windowWidth, windowHeight, windowTitle.c_str(), 0, NULL);

    glfwSetWindowPos(pWindow, 700, 200);
    glfwMakeContextCurrent(pWindow);
    if( pWindow == NULL )
    {
        cerr << "Failed to open GLFW window.\n";
        glfwTerminate();
        return 1;
    }

    std::cout << "GL Version: " << glGetString(GL_VERSION) << "\n";
    std::cout << "GLSL Version: " << glGetString(GL_SHADING_LANGUAGE_VERSION) << "\n";
    std::cout << "Vendor: " << glGetString(GL_VENDOR) << std::endl;
    std::cout << "Renderer: " << glGetString(GL_RENDERER) << std::endl;

    while (!glfwWindowShouldClose(pWindow))
    {
        glfwPollEvents();
    }
    glfwDestroyWindow(pWindow);
    return 0;
}

这会打开一个工作正常的窗口,但它会输出以下内容: GL版本:2.1 INTEL-10.0.86 GLSL版本:1.20 供应商:英特尔公司 渲染器:Intel Iris OpenGL引擎

哪个错了!我应该得到4.1兼容性。我在https://github.com/tomdalling/opengl-series和xCode下载了示例,它确实达到了4.1,所以我知道我的计算机能够实现它。

这实际上是为了一个更大的项目;我确实尝试将我的项目导入xcode,将其与Tom Dalling的项目合并,它只是赢了工作,我总是得到GL 2.1。

我用

编译上面的代码
g++ main.cpp -o GLTEST -lglfw -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo \

...也许我错过了一个选项。非常感谢你的帮助!

1 个答案:

答案 0 :(得分:3)

阅读窗口创建提示at the glfw site,您将找到:

  

每次使用glfwInit

初始化库时,这些提示都会设置为默认值

和Tom Dalling(正在工作)代码调用glfwInit,然后提示您的版本,然后再进行。{/ p>

所以我怀疑这可能与它有关。