OpenGL学习_02_使用OpenGL第三方支持库GLFW、GLEW、GLAD

 

在之前一片文章中学习了使用标准的OpenGL接口创建一个OpenGL的hello world。这篇文章主要是学习如何使用OpenGL强大的第三方支持库来创建程序。

一、安装GLFW、GLEW、GLAD第三方支持库

1. 安装brew

2. 用brew安装glfw和glew

brew install glfw3

brew install glew

brew link glfw3

brew link glew

3. 安装并link成功后,库的头文件安装到 /usr/local/Cellar/glfw/ 和 /usr/local/Cellar/glew/ 目录,同时link到了 /usr/local/include 目录下。

4. 安装glad依赖

因为OpenGL只是一个标准/规范,具体的实现还是由驱动开发商针对特性显卡实现的。由于OpenGL驱动版本众多,它的大多数函数的位置都无法再编译时确定下来,需要在运行时查询,所以这部分内容就需要开发者来配置。开发者需要在运行时获取函数的地址,并将其保存在一个函数指针中供以后使用。取得地址的方法也因为平台而不同,例如在window上可能是这样的:

// 定义函数原型
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 找到正确的函数并赋值给函数指针
GL_GENBUFFERS glGenBuffers  = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 现在函数可以被正常调用了
GLuint buffer;
glGenBuffers(1, &buffer);

过程相对是很复杂的,但是,glad开源库可以解决这个问题。

打开GLAD在线服务https://glad.dav1d.de/,将语言设置为c++,选择gl API版本为3.3,修改profile为core。点击“GENERATE”,GLAD在线服务会帮你生成一个glad.zip包。将其下载下来,解压,将include目录中的glad和KHR目录复制到你的include目录:

cd glad

cp -r KHR /usr/local/include

cp -r glad /usr/local/include

4. 在xcode中配置 Custom Paths

xcode -> Preference -> Locations -> Custom Paths,点下方+号添加路径:

5. 在xcode中创建一个mac command line tool项目,

在Bulid Settings的Header Search Paths里面点击+号添加以下两项配置:

/usr/local/include

$(glew_header) $(glfw_header)

在Library Search Paths配置:

$(glew_lib) $(glfw_lib)

6. 在Build Phases->Linked Frameworks and libraries 添加

  1. OpenGL.framework
  2. GLUT.framework
  3. libGLEW.2.1.0.dylib
  4. libglfw3.3.2.dylib

后面那两个库在Xcode中找不到,点击Finder右键前往文件夹到/usr/local/Cellar/下面的两个安装包的lib下面找到我们要的文件

 

二、使用第三方支持库GLFW框架创建一个OpenGL窗口

打开上面配置好的,之前创建的 mac command line tool项目,在main.cpp文件中添加以下代码,command B编译,command R运行,看到一个黑色的窗口弹出,表示第三方支持库配置成功。

#include <iostream>
// #include <GL/glew.h>
#include <glad/glad.h>  // glad与glew二选一
#include <GLFW/glfw3.h>

int main(int argc, const char * argv[]) {
    GLFWwindow* window;
    if (!glfwInit())
        return -1;
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);

    // glad: load all OpenGL function pointers
    // ---------------------------------------
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }

    while (!glfwWindowShouldClose(window))
    {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    glfwTerminate();
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值