一、简介
本篇文章中,我们将对GLFW实现实例进行介绍。
二、实例分析
官网上给了一个简单的例子来说明如何使用:
#include <GLFW/glfw3.h>
int main(void)
{
GLFWwindow* window;
/* 初始化glfw库 */
if (!glfwInit())
return -1;
/* 创建一个窗口和它的OpenGL上下文 /
window = glfwCreateWindow(640, 480, “Hello World”, NULL, NULL);
if (!window)
{
/ 没有创建会返回NULL */
glfwTerminate();
return -1;
}
/* 设置当前的窗口上下文 */
glfwMakeContextCurrent(window);
/* 循环,直到用户关闭窗口 /
while (!glfwWindowShouldClose(window))
{
/ 在这里做渲染 */
glClear(GL_COLOR_BUFFER_BIT);
/* 交换缓冲区,即在window上更新内容 */
glfwSwapBuffers(window);
/* 轮询事件 */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
接下来我们来说一下基本的使用:
首先是引用头文件:
#include <GLFW/glfw3.h>
要注意的是,引用了这个头文件之后就不要再引用你自己的OpenGL头文件了,如果是Windows系统,<windows.h>也不必引用了。
GLFW还特意强调了,某些平台(Windows就是你)只提供了旧版本OpenGL头文件,需要使用一个Extension loader library。
如果使用这种库,请在引用GLFW库之前引用它,比如glad库
#include <glad/glad.h>
#include <GLFW/glfw3.h>
初始化GLFW:
if (!glfwInit())
{
// 初始化失败执行的操作
}
终止GLFW:
在我们使用完毕后,需要在程序退出前及时的终止它
glfwTerminate();
设置错误回调:
当程序发生错误的时候,我们可以通过这个函数来捕获错误
void error_callback(int error, const char* description)
{
fprintf(stderr, “Error: %s\n”, description);
}
当然你要在使用之前把它设置好
glfwSetErrorCallback(error_callback);
创建窗口以及上下文
GLFWwindow* window = glfwCreateWindow(640, 480, “My Title”, NULL, NULL);
if (!window)
{
// 创建失败需要执行的操作
}
其中第一个参数是窗口宽度,第二个参数是窗口高度,第三个参数是窗口标题,第四个参数是显示模式,NULL为窗口化,如果需要显示全屏,则需要指定覆盖的显示器,在这里不多讲,第五个参数是设置与那个窗口共享资源,默认为NULL,即不共享资源。
另外,由于GFLW创建的OpenGL上下文可能是任何版本的,所以你可以设置OpenGL的最低版本。
下面的代码设置了OpenGL最低版本为2.0。
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); // OpenGL主版本号
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); // OpenGL副版本号
GLFWwindow* window = glfwCreateWindow(640, 480, “My Title”, NULL, NULL);
if (!window)
{
// 创建失败需要执行的操作
}
窗口句柄被传递给所有与窗口相关的函数,并被提供给所有与窗口相关的回调函数,所以它们可以告知哪个窗口收到了事件。
当你不再需要某个窗口及上下文时,请销毁它。
glfwDestroyWindow(window);
设置当前OpenGL上下文:
在使用OpenGL API之前,你必须设置好当前的OpenGL上下文glfwMakeContextCurrent(window);
三、总结
本篇文章中我们对其代码编写的框架进行了分析,接下来我们将会结合这些内容进行实战。