macOS系统,搭建OpenGL开发环境

991 阅读2分钟
使用xCode搭建OpenGL开发环境
  • 下载安装库文件
  • 创建xCode工程,与第三方库文件链接
  • 开发OpenGL简单功能
1、安装GLFW,和GLEW库
  • 通过Homebrew工具安装
    安装Homebrew
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  • 再安装glfw和glew库
brew install glfw
brew install glew
  • 两个库的安装路径在:usr/local/glew 和 usr/local/glfw
  • 安装目录下包含了include头文件和lib库文件,这两个文件夹中的内容后面需要与xCode工程进行链接

2、创建xCode工程并关联第三方库
  • 创建一个Common Line Tool工程,语言选择使用C++ 

  • 添加头文件
  • 添加路径:xCode工程-Build Settings-Search Paths -Header Search Paths
  • 在该路径下添加头文件路径,添加后程序编译时就会去该目录下查找头文件

  • 链接第三方二进制库文件

    • 配置目录在:Build Phases-Link Binary With Libraries
  • 点击加号(+)按钮,在弹窗中,搜索OpenGL,可以找到OpenGL.framework库并并进行添加

  • 点击弹窗左下角的的“Add Other...“按钮,去到glew的安装目录找到dylib文件(/usr/local/Cellar/glew/2.2.0_1/lib),进行添加

    • glfw库文件和上面添加步骤一样

3、验证
  • 导入glfw头文件
#include <GL/glew.h>
#include <GLFW/glfw3.h>
  • 调用OpenGL api实现一个简单程序(展示红色背景的窗口)
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
using namespace std;

void init(GLFWwindow* window) { }

void display(GLFWwindow* window, double currentTime) 
    glClearColor(1.00.00.01.0);
    glClear(GL_COLOR_BUFFER_BIT);
}

int main(void ) {
    if (!glfwInit()) {
        exit(EXIT_FAILURE);
    }

    GLFWwindow* window = glfwCreateWindow(600600"OpenGL Demo"NULLNULL);
    glfwMakeContextCurrent(window);

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

    
    if (glewInit() != GLEW_OK) {
        exit(EXIT_FAILURE);
    }
    glfwSwapInterval(1);
    init(window);
    
    while (!glfwWindowShouldClose(window)) {
        display(window, glfwGetTime());
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    glfwDestroyWindow(window);
    glfwTerminate();
    exit(EXIT_SUCCESS);
}

  • 效果图
  • 生成一个标题是(OpenGL Demo)的红色背景窗口

问题:
  • 调用glewInit()方法报错
  • 错误信息:glewInit() Thread 1: EXC_BAD_ACCESS (code=1, address=0x3b0)
  • 解决方式:将以下代码移至glfwMakeContextCurrent()(和您的GL加载程序init)之后
   glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
   glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);