还记得以前大学的时候,课堂上使用的是glut,当时很多地方都不清楚,只依稀记得底层是调用OpenGL 1.1的API,也就是固定管线(Fixed Function),简言之,就是不能由开发者自己去编写Shader,控制GPU要怎麽画。可编程管线没记错是在3.0伴随着GLSL 1.0才开始的。
可编程管线的版本的OpenGL,网路上最常看到的是用glew
或是glad
,虽说最开始用的是glew
,但就跟所有C与C++的lib一样,对於初学,会需要一些linker、静态和动态函式库的知识,才可以正常的开始使用,用起来感觉很差,於是选用glad
,直接产一个header跟source,直接加入专案就好了,怎麽编译都行!
其实还有另一个原因是,自学一些OpenGL时的教材是使用glad
,这个是连结
这个是我找到的简中翻译版本
事实上GLAD不是OpenGL的函式库,比较像是产生器,选择你要的OpenGL规格,然後产出文件。官方github就有提供连结,但我在这里要使用的是更下面的glad2
,他会产出***single-header file***,如名,他只会有一个header,不会有另外一份放"实作(implementaion)"的*.c
文件。
点进这个连结後:
请在gl
那边选OpenGL的版本,我这里用的是GL3.3,最後下面点选header only,最後按下Generate。把.zip
下载下来,把gl.h
放到专案的exteranl
里面,就完成一半了,我是在开一个glad
资料夹把gl.h
放在里面。
再来就是验证,有没有安装成功了,我们要再次请出glfw
的范例。
在Game Loop中一行:
/* Render here */
glClear(GL_COLOR_BUFFER_BIT);
这个是清除这个frame的color buffer,gl
开头的就是调用OpenGL
的函式,为求方便验证,再加上一行:
// 参数是浮点数,需要将RGBA的色码转换 [RGBA] / 255.0
glClearColor(r, g, b, a);
清除後,会换上新的背景颜色。
对了,就重要的是,要初始化GLAD
可以在iron_window.c
的地方加入#include "glad.h"
,然後在include之前#define GLAD_GL_IMPLEMENTATION
,像这样:
#define GLAD_GL_IMPLEMENTATION
#include "glad.h"
然後在CreateWindow
那里加上
// Init glad
if (!gladLoadGL(glfwGetProcAddress)) {
printf("Failed to load glad.");
return RES_ERROR_LOAD_GLAD;
}
就可以开始使用OpenGL的API了。
这个define是哪来的,各位可以打开gl.h
的第4040行,就可以看到single-header file,其实就是把实作放到header里,然後用预处理器的指令把实作跟宣告隔开。
如果对single-header file有更多兴趣的话,可以参考这位大大的github,FAQ那里有更多说明,但是只有英文的。(>~<)
然後最後再按下按钮就可以有一个你喜欢颜色的视窗对不对!
错!!
在编译到最後的时候,我的compiler显示引用错误,看来专案其他地方也有实作了OpenGL。
把矛头看相最可疑的glfw
,在glfw/deps/glad
下找到了,glfw
也有引用glad
,於是在查找官方文件後(找很久),找到了这一段,可以把glfw
的glad
停用,改用我们自己的,最後在include的地方(一样是iron_window.c
)变成这样...
#define GLFW_INCLUDE_NONE
#include "GLFW/glfw3.h"
#define GLAD_GL_IMPLEMENTATION
#include "glad/gl.h"
原本今天(2021/09/13)预计要画出第一个三角形,结果卡在GLFW那个坑上面,但这也很贴近程序设计师的的日常工作会发生的事,计画敢不上变化,原本预计花N个小时解决这个问题,结果衍生处更多问题 (QAQ)。
已经有预感会有更多坑惹,不然怎麽叫挑战呢。(ˊ_>ˋ)
<<: 如何用 Apps Script 寄出客制化的 Google 表单并搜集分散在 Google Sheet 中的回应?(三)一次搜集很多 Google Form 内的回应
今天要来介绍如何透过 NiFi 来与 GCP BigQuery 来做资料整合与操作。 What is...
defer A defer statement defers the execution of a ...
前面花了不少篇幅在讨论资料产品的开发,接下来将花一些篇幅讨论资料产品的治理方式。 在做资料产品治理时...
Hello 大家, 上班了, 厌世的上班日... 继昨天文末说的, iOS的介面不同了, 我稍微的逛...
前情提要 前一篇带各位在 Selenium 中透过执行 JavaScript 语句达到向下卷动的效果...