GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入,这正是我们需要的。

获取GLFW

直接从官方网站中下载预编译文件:https://www.glfw.org/download.html CMakeLists.txt示例(仅Windows):

CMAKE
include_directories("glfw-3.4.bin.WIN64/include/GLFW")
set(glfw3 "${CMAKE_SOURCE_DIR}/CEngine/ThirdParty/glfw3/lib/glfw3.lib")
点击展开查看更多

最小系统

  flowchart LR
	n1["GLFW初始化"] --> n2["创建窗口"] --> n3["设置上下文"]
	subgraph loop["循环"]
		l1{"判断窗口关闭"} --> l2["绘制"] --> l3["交换缓冲区"] --> l4["处理事件"] --> l1
	end
	n3 --> l1
CPP
#include <glfw3.h>

int main() {
    if ( !glfwInit() ) return -1; // 初始化失败
    glfwWindowHint(GLFW_VERSION_MAJOR, 4); // 设置主版本
    glfwWindowHint(GLFW_VERSION_MINOR, 6); // 设置次版本
    /* 创建窗口 */
    GLFWwindow *window = glfwCreateWindow(1920, 1080, "Title", nullptr, nullptr);
    /* 窗口创建失败 */
    if ( !window ) {
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window); // 设置当前上下文
    /* 主循环 */
    while (!glfwWindowShouldClose(window)) {
        /* 
        ... // 绘制部分 
        */
        glfwSwapBuffers(window); // 交换缓冲区
        glfwPollEvents(); // 处理事件
    }
    return 0;
}
点击展开查看更多

函数

[!warning|aside-right] 仅限主线程调用

glfwInit 和 glfwTerminate

C
int glfwInit() 
点击展开查看更多

成功时返回GLFW_TRUE,若发生错误则返回GLFW_FALSE

C
void glfwTerminate() 
点击展开查看更多

[!warning|aside-right] 仅限主线程调用

glfwWindowHint

用于在创建窗口和 OpenGL/Vulkan 上下文之前设置提示(hints),这些提示会指导 GLFW 如何配置后续创建的窗口及其关联的渲染上下文。

C
void glfwWindowHint(int hint, int value) 
点击展开查看更多

部分示例:

C
glfwWindowHint(GLFW_VERSION_MAJOR, 4); // 设置主版本  
glfwWindowHint(GLFW_VERSION_MINOR, 6); // 设置次版本
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); // 窗口不可调整大小
glfwWindowHint(GLFW_SAMPLES, 4); // 启用 4x 多重采样抗锯齿
glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_TRUE); // 启用双缓冲(默认)
glfwWindowHint(GLFW_REFRESH_RATE, 60); // 尝试设置刷新率为 60Hz
点击展开查看更多

[!warning|aside-right] 仅限主线程调用

glfwCreateWindow

创建一个窗口及其关联的上下文。

C
GLFWwindow *glfwCreateWindow(
	int width,
	int height,
	const char *title,
	GLFWmonitor *monitor,
	GLFWwindow *share,
) 
点击展开查看更多

glfwMakeContextCurrent

用于将指定的 OpenGL 或 Vulkan 渲染上下文绑定到当前线程,使其成为当前线程的活动上下文

C
void glfwMakeContextCurrent(GLFWwindow* window)
点击展开查看更多

glfwWindowShouldClose

检查指定窗口的关闭标志。

C
int glfwWindowShouldClose(GLFWwindow *window)
点击展开查看更多

glfwSwapBuffers

当启用双缓冲技术时(默认启用),调用该函数以交换前后台缓冲区

C
void glfwSwapBuffers(GLFWwindow *window)
点击展开查看更多

版权声明

作者: Chaim

链接: https://chaim.eu.org/posts/glfw-%E6%9C%80%E5%B0%8F%E7%B3%BB%E7%BB%9F/

许可证: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Please attribute the source, use non-commercially, and maintain the same license.

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键