opengl学习笔记-第一个窗口

转自:
https://learnopengl-cn.github.io/01%20Getting%20started/03%20Hello%20Window/


/*
#include<glad\glad.h>一定要放在GLEW之前
*/

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

using namespace std;

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

int main(){
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    //我们需要告诉GLFW我们要使用的OpenGL版本是3.3
    //我们将主版本号(Major)和次版本号(Minor)都设为3。
    //我们同样明确告诉GLFW我们使用的是核心模式(Core-profile)。
    //明确告诉GLFW我们需要使用核心模式意味着我们只能使用OpenGL功能的一个子集

    GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);//创建一个窗口
    if (window == NULL){
        cout << "Failed to create GLFW window" << endl;
        glfwTerminate();
        return -1;
    }
    //通知GLFW将我们窗口的上下文设置为当前线程的主上下文了。
    glfwMakeContextCurrent(window);

    //注册framebuffer_size_callback这个函数,告诉GLFW我们希望每当窗口调整大小的时候调用这个函数
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);


    //初始化GLAD--->用来管理OpenGL的函数指针的
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){
        cout << "Failed to initialize GLAD" << endl;
        return -1;
    }

    //渲染循环
    while (!glfwWindowShouldClose(window)){//函数在我们每次循环的开始前检查一次GLFW是否被要求退出
        //输入
        processInput(window);

        //渲染指令

        //当调用glClear函数,清除颜色缓冲之后,整个颜色缓冲都会被填充为glClearColor里所设置的颜色
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        //来清空屏幕的颜色缓冲,它接受一个缓冲位(Buffer Bit)来指定要清空的缓冲
        //可能的缓冲位有GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT。
        //由于现在我们只关心颜色值,所以我们只清空颜色缓冲。
        glClear(GL_COLOR_BUFFER_BIT);

        //检查并调用事件,交换缓冲

        //函数会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲)
        //它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上。
        glfwSwapBuffers(window);
        //函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

void processInput(GLFWwindow *window){
    //检查用户是否按下了返回键(Esc)
    //如果没有按下,glfwGetKey将会返回GLFW_RELEASE
    //如果用户的确按下了返回键,glfwGetKey将会返回GLFW_PRESS
    //我们将通过glfwSetwindowShouldClose使用把WindowShouldClose属性设置为 true的方法关闭GLFW。
    //下一次while循环的条件检测将会失败,程序将会关闭
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS){
        glfwSetWindowShouldClose(window, true);
    }
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height){
    //设置Viewport-->OpenGL渲染窗口的尺寸大小
    glViewport(0, 0, width, height);//前两个参数控制窗口左下角的位置x,y  第三个和第四个参数控制渲染窗口的宽度和高度(像素)。

}

效果:
这里写图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值