OpenGL创建窗口

GLFW

原文链接

GLFW

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

  • GLAD应该提供,两个头文件目录,和一个glad.c文件。将两个头文件目录(glad和KHR)复制到你的Include文件夹中(或者增加一个额外的项目指向这些目录),并添加glad.c文件到你的工程中

GLAD

  • 因为OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询GLAD是一个开源的库,使用了一个在线服务。在这里我们能够告诉GLAD需要定义的OpenGL版本,并且根据这个版本加载所有相关的OpenGL函数。

Visual studio环境下使用

  1. glfw3.lib链接到工程,并把需要的头文件(GLAD)添加到Visual studio工程中。
    upload successful

  2. 链接
    filename already exists, renamed

  3. 测试使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #include <glad/glad.h>
    #include <GLFW/glfw3.h>
    #include <iostream>
    int main()
    {
    // 实例化GLFW窗口
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
    glfwMakeContextCurrent(window);
    if (window == NULL)
    {
    std::cout << "Failed to create GLFW window" << std::endl;
    glfwTerminate();
    return -1;
    }
    while (!glfwWindowShouldClose(window))
    {
    glfwSwapBuffers(window);
    glfwPollEvents();
    }
    glfwTerminate();
    return 0;
    }
    • glfwCreateWindow函数需要窗口的宽和高作为它的前两个参数。第三个参数表示这个窗口的名称(标题)
    • glfwWindowHint函数的第一个参数代表选项的名称,我们可以从很多以GLFW_开头的枚举值中选择;第二个参数接受一个整型,用来设置这个选项的值。
    • glfwMakeContextCurrent 是 GLFW 提供的一个函数,其作用是 将指定的 OpenGL 上下文(context)设置为当前线程的上下文,也就是说,你需要告诉 OpenGL:我要在这个窗口上进行绘图了。

视口

  • OpenGL渲染窗口的尺寸大小,即视口(Viewport),这样OpenGL才只能知道怎样根据窗口大小显示数据和坐标。
    • 我们可以通过调用glViewport函数来设置视口的尺寸(Dimension)
      1
      glViewport(0, 0, 800, 600);
    • glViewport函数前两个参数控制窗口左下角的位置。第三个和第四个参数控制渲染窗口的宽度和高度(像素)。

控制视口的回调函数

  • 这个帧缓冲大小函数需要一个GLFWwindow作为它的第一个参数,以及两个整数表示窗口的新维度。每当窗口改变大小,GLFW会调用这个函数并填充相应的参数供你处理。
    1
    void framebuffer_size_callback(GLFWwindow* window, int width, int height);

注册回调函数

  • 告诉GLFW我们希望每当窗口调整大小的时候调用这个函数,才可以正常使用。
    1
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
  • 渲染循环初始化之前注册需要的回调函数。

控制输入


OpenGL创建窗口
https://weihehe.top/2025/07/16/OpenGL环境配置和创建窗口/
作者
weihehe
发布于
2025年7月16日
许可协议