2.1 你好,窗口

你好,窗口

#include "../env/glad.h"
#include "../env/glfw3.h"
#include <iostream>

void framebuffer_size_callback(GLFWwindow *window, int width, int height);
void processInput(GLFWwindow *window);

int main()
{
    
    
    // 初始化GLFW
    glfwInit();
    // 配置GLFW
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);                 // 主版本号
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);                 // 次版本号
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // 核心模式

    // 创建窗口对象,参数分别为宽,高,标题
    int width = 800;
    int height = 600;

    GLFWwindow *window =
        glfwCreateWindow(width, height, "LearnOpenGL", nullptr, nullptr);

    if (window == nullptr)
    {
    
    
        std::cout << "Failed tor create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }

    glfwMakeContextCurrent(window);

    // GLAD是用来管理OpenGL的函数指针的
    // 所以在调用任何OpenGL的函数之前我们需要初始化GLAD。
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
    
    
        std::cout << "Failed to initialze GLAD" << std::endl;
        return -1;
    }

    // 在开始渲染之前必须告诉OpenGL渲染窗口的尺寸大小,即视口(Viewport),
    // 这样OpenGL才只能知道怎样根据窗口大小显示数据和坐标。
    glViewport(0, 0, width, height);

    // 当用户改变窗口的大小的时候,视口也应该被调整。
    // 我们可以对窗口注册一个回调函数(Callback Function),
    // 它会在每次窗口大小被调整的时候被GLFW调用。

    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

    // 我们会在创建窗口之后,渲染循环初始化之前注册这些回调函数。

    // 渲染循环,能够保证在程序退出之前一直循环渲染。
    while (!glfwWindowShouldClose(window))
    {
    
    

        processInput(window);
        // 交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),
        // 它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上。
        glfwSwapBuffers(window);

        // 检查有没有触发什么事件(比如键盘输入、鼠标移动等)、
        // 更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)。
        glfwPollEvents();

        // 设置清空屏幕所用的颜色。
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        // 清除颜色缓冲之后,整个颜色缓冲都会被填充为glClearColor里所设置的颜色
        glClear(GL_COLOR_BUFFER_BIT);
    }

    // 当渲染循环结束后我们需要正确释放/删除之前的分配的所有资源。
    glfwTerminate();
    return 0;
}

void framebuffer_size_callback(GLFWwindow *window, int width, int height)
{
    
    
    glViewport(0, 0, width, height);
}

void processInput(GLFWwindow *window)
{
    
    
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
    {
    
    
        glfwSetWindowShouldClose(window, true);
    }
}

猜你喜欢

转载自blog.csdn.net/NelsonCheung/article/details/109366219
2.1