转自:
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 第三个和第四个参数控制渲染窗口的宽度和高度(像素)。
}
效果: