LearnOpenGL笔记 | 创建一个窗口

本文适合拥有一些图形学概念的人观看,且是自己记录的笔记,非常粗糙。

我们直接看代码

#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>

int main()
{
    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);
    if (window == NULL)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);


    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }    

    while (!glfwWindowShouldClose(window))
    {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

这段代码算是创建窗口的最简代码。我们一段一段看

#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>

首先是引入头文件,注意glad要在glfw之前引入,因为在GLFW中需要有OpenGL函数的实现,如果没有则会报错。iostream方便我们调试代码,即输出错误信息。

glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//设置主版本号
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//设置次版本号
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//设置OpenGL模式为核心模式

进入main函数后就是使用glfwInit();初始化GLFW,否则GLFW中某些函数是用不了的。

在接下来三行先设置OpenGL版本,以及核心模式。

 GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);

这一行代码是用来创建一个GLFWwindow对象使用glfwCreateWindow函数创建。

glfwCreateWindow()有5个参数分别是

  • width窗口的宽度
  • height窗口的高度
  • title窗口的标题
  • monitor指定窗口是否为全屏模式
  • share指定与新窗口共享资源的现有窗口
if (window == NULL)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }

glfwCreateWindow返回创建的窗口句柄。若失败(如未初始化 GLFW 或驱动不支持),返回 NULL。根据错误打印错误信息以及调用 glfwTerminate();结束glfw,返回-1异常退出

glfwTerminate();会释放资源和终止GLFW主线程

glfwMakeContextCurrent(window);

在窗口window中创建上下文,应在gladLoadGLLoader前创建上下文。

if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }    

加载GLAD函数。

 while (!glfwWindowShouldClose(window))
    {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

进入主循环如果window没被关闭则一直循环,glfwSwapBuffers会交换画面缓冲区,glfwPollEvents会拉取一次事件。

glfwTerminate();
    return 0;

最后清理退出。

最后修改:2025 年 03 月 05 日
如果觉得我的文章对你有用,请随意赞赏