LearnOpenGL学习笔记(一):在Xcode下搭建GLEW、GLFW及GLAD环境

LearnOpenGL学习笔记(一)
1.环境配置
系统是macOS,在Xcode下搭建GLEW、GLFW及GLAD的环境。

1.1 安装GLEW与GLFW
在终端中通过brew安装GLEW与GLFW:

brew install glew
brew install glfw3


1.2 下载GRAD
打开GLAD的在线服务,将语言(Language)设置为C/C++,在API选项中,选择3.3以上的OpenGL(gl)版本。之后将模式(Profile)设置为Core,并且保证生成加载器(Generate a loader)的选项是选中的。都选择完之后,点击生成(Generate)按钮来生成库文件。

1.3 创建工程

新建Command Line Tool项目,语言选择C++



上一步GLAD现在应该提供给你了一个glad.zip压缩文件,包含两个头文件目录,和一个glad.c文件。
将两个头文件目录(glad和KHR,注意是两个文件夹不是.h文件)复制到/usr/local/include文件夹中
并添加glad.c文件到工程中
如下图所示:

1.4 配置工程
在工程的Building Settings – Search Paths – Header Search Paths
添加下面四个路径到Header Search Paths

/usr/local/include
$(inherited)
/usr/local/Cellar/glfw/3.3.0/lib
/usr/local/Cellar/gl2w/2.3.0/lib

这里面版本号要根据你安装的版本做相应的修改
查看路径:/usr/local/Cellar/glfw/ 和 /usr/local/Cellar/glew/


然后在工程的 General – Linked Frameworks and Libraries添加如下两个包:


注意在它提供给你的目录里是找不到的。要到“Add other…”里按shift+command+G 快捷键进到/usr/local/Cellar/glfw/3.3.0/lib 以及 /usr/local/Cellar/glew/2.2.0/lib 目录选中这两个包

  

2.测试程序
大功告成,可以根据教程写一个程序进行测试,代码如下:
main.cpp

//注意要在包含GLFW的头文件之前包含了GLAD的头文件!
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
using namespace std;

//当用户改变窗口的大小的时候,视口也应该被调整,需要一个回调函数
void framebuffer_size_callback(GLFWwindow * window,int width,int height);
//声明一个函数用来检测特定的键是否被按下
void processInput(GLFWwindow * window);

int main(){
    
    //初始化GLFW
    glfwInit();
    
    //将OpenGL主版本号(Major)和次版本号(Minor)都设为3
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    
    //使用的是核心模式(Core-profile)
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    
    //如果是macOS系统,则需要下面这行代码才能让配置起作用
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    
    //创建一个窗口对象
    GLFWwindow * window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
    if (window == NULL){
        cout << "Failed to create GLFW window" << endl;
        glfwTerminate();
        return -1;
    }
    //通知GLFW将我们窗口的上下文设置为当前线程的主上下文
    glfwMakeContextCurrent(window);
    
    //GLAD是用来管理OpenGL的函数指针的,在调用任何OpenGL的函数之前我们需要初始化GLAD
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){
        cout << "Failed to initialize GLAD" << endl;
        return -1;
    }
    
    //注册定义好的回调函数,告诉GLFW每当窗口调整大小的时候调用这个函数
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
    
    //渲染循环(Render Loop)
    while (!glfwWindowShouldClose(window)) {
        
        //检测特定的键是否被按下,并在每一帧做出处理
        processInput(window);
        
        //glClearColor函数是一个状态设置函数,用来设置清空屏幕所用的颜色
        glClearColor(0.2f,0.3f,0.3f,1.0f);
        //glClear函数是一个状态使用函数,它使用当前的状态来用指定颜色清空屏幕
        glClear(GL_COLOR_BUFFER_BIT);
        
        //glfwSwapBuffers函数会交换颜色缓冲
        glfwSwapBuffers(window);
        //glfwPollEvents函数检查有没有触发什么事件
        glfwPollEvents();
    }
    
    //释放之前分配的所有资源
    glfwTerminate();
    
    return 0;
}

void framebuffer_size_callback(GLFWwindow * window,int width,int height){
    //glViewport函数前两个参数控制窗口左下角的位置,第三个和第四个参数控制渲染窗口的宽度和高度
    glViewport(0,0,width,height);
}

void processInput(GLFWwindow * window){
    //检查用户是否按下了返回键(Esc)(如果没有按下,glfwGetKey将会返回GLFW_RELEASE,按下则为GLFW_PRESS)
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) {
        glfwSetWindowShouldClose(window, true);
    }
}


输出如下:

键盘输入esc键可退出


2.1 如果遇到如下错误:

 解决方案:

原文地址:https://www.cnblogs.com/lyonwu/p/14829694.html