OpenGL项目配置GLFW及GLAD
OpenGL项目配置GLFW及GLAD
- 创建一个项目
打开VS(这里用的vs2019),创建一个c++空项目,自己命名即可。 - 生成GLFW
上个博客中介绍了GLFW库,是一个OpenGL第三方库,这里不多讲。
配置GLFW有两种方式,一种是下载源码,自己编译成lib库,另一种直接下载GLFW官方库直接配置在项目工程中,这里讲第一种。首先下载GLFW源码,GLFW下载源码,如图所示:
下载完成后会有一个glfw压缩文件,从源代码编译库可以保证生成的库是兼容你的操作系统和CPU的,而预编译的二进制文件可能会出现兼容问题(甚至有时候没提供支持你系统的文件)。提供源代码所产生的一个问题在于不是每个人都用相同的IDE开发程序,因而提供的工程/解决方案文件可能和一些人的IDE不兼容。所以人们只能从.c/.cpp和.h/.hpp文件来自己建立工程/解决方案,这是一项枯燥的工作。但因此也诞生了一个叫做CMake的工具。
CMake是一个工程文件生成工具。用户可以使用预定义好的CMake脚本,根据自己的选择(像是Visual Studio, Code::Blocks, Eclipse)生成不同IDE的工程文件。这允许我们从GLFW源码里创建一个Visual Studio 2015工程文件,之后进行编译。首先,我们需要从这里下载安装CMake。
当CMake安装成功后,你可以选择从命令行或者GUI启动CMake,由于我不想让事情变得太过复杂,我们选择用GUI。CMake需要一个源代码目录和一个存放编译结果的目标文件目录。源代码目录我们选择GLFW的源代码的根目录,然后我们新建一个 build 文件夹,选中作为目标目录。如图所示:
生成工程在build目录中,可以从“Open Project”打开工程,或者在build中双击打开glfw.sln,然后点击生成解决方案,在src文件中的Release中得到glfw.lib库。
3. 连接glfw库
为了使我们的程序使用GLFW,我们需要把GLFW库链接(Link)进工程。这可以通过在链接器的设置里指定我们要使用glfw3.lib来完成,但是由于我们将第三方库放在另外的目录中,我们的工程还不知道在哪寻找这个文件。于是我们首先需要将我们放第三方库的目录添加进设置。
lib库生成完毕之后,我们需要让IDE知道库和头文件的位置。有两种方法:
- 找到IDE或者编译器的/lib和/include文件夹,添加GLFW的include文件夹里的文件到IDE的/include文件夹里去。用类似的方法,将glfw3.lib添加到/lib文件夹里去。虽然这样能工作,但这不是推荐的方式,因为这样会让你很难去管理库和include文件,而且重新安装IDE或编译器可能会导致这些文件丢失。
- 推荐的方式是建立一个新的目录包含所有的第三方库文件和头文件,并且在你的IDE或编译器中指定这些文件夹。我个人会使用一个单独的文件夹,里面包含Libs和Include文件夹,在这里存放OpenGL工程用到的所有第三方库和头文件。这样我的所有第三方库都在同一个位置(并且可以共享至多台电脑)。然而这要求你每次新建一个工程时都需要告诉IDE/编译器在哪能找到这些目录。
要添加这些目录(需要VS搜索库和include文件的地方),我们首先进入Project Properties(工程属性,在解决方案窗口里右键项目),然后选择VC++ Directories(VC++ 目录)选项卡(如下图)。在下面的两栏添加目录:
之后在连接–输入添加opengl32及glfw3库,要链接一个库我们必须告诉链接器它的文件名。库名字是glfw3.lib,我们把它加到Additional Dependencies(附加依赖项)字段中(手动或者使用选项都可以)。这样GLFW在编译的时候就会被链接进来了。除了GLFW之外,你还需要添加一个链接条目链接到OpenGL的库,但是这个库可能因为系统的不同而有一些差别。如图所示
4. 配置GLAD
首先为什么配置GLAD?因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。取得地址方法因平台而异,在windows上
// 定义函数原型
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// 找到正确的函数并赋值给函数指针
GL_GENBUFFERS glGenBuffers = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// 现在函数可以被正常调用了
GLuint buffer;
glGenBuffers(1, &buffer);
你可以看到代码非常复杂,而且很繁琐,我们需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程,其中GLAD是目前最新,也是最流行的库。
GLAD是一个开源的库,它能解决我们上面提到的那个繁琐的问题。GLAD的配置与大多数的开源库有些许的不同,GLAD使用了一个在线服务。在这里我们能够告诉GLAD需要定义的OpenGL版本,并且根据这个版本加载所有相关的OpenGL函数。
打开GLAD的在线服务添加链接描述,将语言(Language)设置为C/C++,在API选项中,选择3.3以上的OpenGL(gl)版本(我们的教程中将使用3.3版本,但更新的版本也能正常工作)。之后将模式(Profile)设置为Core,并且保证生成加载器(Generate a loader)的选项是选中的。现在可以先(暂时)忽略拓展(Extensions)中的内容。都选择完之后,点击生成(Generate)按钮来生成库文件。
GLAD现在应该提供给你了一个zip压缩文件,包含两个头文件目录,和一个glad.c文件。将两个头文件目录(glad和KHR)复制到你的Include文件夹中(或者增加一个额外的项目指向这些目录),并添加glad.c文件到你的工程中。这样就可以使用GLFW及GLAD来设置上下文创建一个窗口了。
OpenGL项目配置GLFW及GLAD相关推荐
- 配置GLFW和GLAD,使用OpenGL
最近准备开始学习OpenGL,于是尝试在VS2019上面进行一些配置 首先关于OpenGL的基本介绍 OpenGL函数库相关的API有核心库(gl),实用库(glu),辅助库(aux).实用工具库(g ...
- 1、VS2019配置glfw和glad
一.下载编译glfw 1.下载GLFW源码 Download | GLFW 解压下载的压缩包,并在里面创建"build"文件夹 2.使用CMake生成工程文件 打开CMake,选择 ...
- CLion下开发OpenGL项目,忘记进入glad.c文件造成的问题
CLion下开发 OpenGL项目,引入了glfw3 glad ,这些都是在 CMakeLists.txt文件中配置的,这一点来说,比VS 2019下开发简单的多,VS下的配置项目看起来太乱.作为Li ...
- 基于vs2019的openGL项目配置
1.下载OpenGL的头文件和库 下载地址:https://download.csdn.net/download/ssagnn23/2560229 2.将文件放到指定目录下 (1) 把 glaux.d ...
- VS2019/openGL/freeglut配置
freeglut是opengl跨平台实用工具库,用于做窗口界面,封装各个平台鼠标键盘事件等等.用于替代早期的glut库(1998年后就不在更新维护). [我这里使用的是编译好的包,可以直接跳到第3步, ...
- OpenGL 关于旧版glut和新版本glfw和glad的环境配置
目录 一.OpenGL的环境: 1.OpenGL 2.gult:OpenGL工具库 OpenGL Utility Toolkit 3.glew 4.glfw 5.glad(2018.9) 二.旧版本 ...
- OpenGL 环境配置教程-库文件汇总【glfw/glew/glad/glm/std_img】
OpenGL的环境配置是最让初学者头疼的事情了,主要是一开始链接什么glfw.glad,不知道有什么用,什么链接库.包含目录很头大,有一步做错就可能一大堆报错. 本文对LearnOpenGL CN教程 ...
- OpenGL学习笔记之三 OpenGL开发环境之GLFW与GLAD配置
内容来源:LearnOpenGL CN 前言 在我们画出出色的效果之前,首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口.然而,这些操作在每个系统上都是不一样的,Open ...
- OpenGL:配置glad
GLAD库的作用 GLAD是一个开源的库,它能解决我们上面提到的那个繁琐的问题.GLAD的配置与大多数的开源库有些许的不同,GLAD使用了一个在线服务.在这里我们能够告诉GLAD需要定义的OpenGL ...
- OpenGL教程一,窗体和图形的渲染(包含OpenGL、GLFW、GLAD)
运行环境:Linux .C++ 本教程仅个人学习总结 第一个hello world,渲染一个窗体 渲染一个矩形 本教程仅个人学习总结 一切参考资源:都在官网. 1.安装glfw 首先下载glfw : ...
最新文章
- 鱼眼图像的unwarping过程
- Scott用户的表结构
- 求组合数python_给定一个序列求指定位数的排列组合数
- C#借助API实现黑盒自动化测试工具的编写
- arm汇编指令:ldr和adr的区别
- mat-form-field must contain a MatFormFieldControl错误的解决方法
- 国内11所“袖珍”大学!最小的甚至只有一栋楼……
- koa mysql mongodb_koa 操作MongoDB数据库
- android 命令使用详解,Android下pm 命令详解
- 基于AJAX的自动完成
- 润乾报表鼠标移动行、单元格变色
- python打包的exe反编译_将python打包的.exe文件还原成.py,针对Pyinstaller的exe反编译-exe文件...
- 局域网电脑资产搜集管理
- 双击鼠标触发了Ctrl+C事件
- C语言--简单除法运算
- 希捷硬盘固件修复工具_希捷3.5寸500G台式机硬盘磁头损坏后的数据恢复
- Swagger注解 详解
- java编程:对两个分数进行简单的算术运算
- 金融与量化分析 一; 金融 股票知识入门
- 如何修改MySQL数据库的密码?