C++ OpenGL learning-use gflw to create the first window

This article refers to:
opengl learning
websiteopengl learning website Chinese version

// 创建第一个窗口
#include <glad/glad.h>
#include <GLFW/glfw3.h>

#include <iostream>

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


const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;

int main()
{
    
    
	//初始化GLFW
	glfwInit();

	//配置GLFW,glfwWindowHint的第一个参数表示要配置哪个选项,第二个参数是要设置的该配置选项的值
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

	//在Mac OS X上需要添加glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);的初始化代码。
#ifdef __APPLE__
	glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 
#endif

	// 创建宽800,高600,名称为LearnOpenGL的窗口
	GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
	if (window == NULL)
	{
    
    
		std::cout << "Failed to create GLFW window" << std::endl;
		glfwTerminate();
		return -1;
	}
	glfwMakeContextCurrent(window);

	glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

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


	// 让窗口一直渲染
	while (!glfwWindowShouldClose(window))
	{
    
    
		//输入
		processInput(window);

		// 渲染

		//使用glClearColor指定了清除屏幕的颜色。每当我们调用glClear和clear颜色缓冲区时,整个颜色缓冲区将填充glClearColor配置的颜色即蓝绿色。
		glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
		glClear(GL_COLOR_BUFFER_BIT);

		//glfwSwapBuffers将交换颜色缓冲区(一个大型2D缓冲区,它包含GLFW窗口中每个像素的颜色值),这个颜色缓冲区在这个渲染迭代期间用于渲染,并将其作为输出显示在屏幕上
		glfwSwapBuffers(window);

		//检查是否触发了任何事件(如键盘输入或鼠标移动事件),更新窗口状态,并调用相应的函数(可以通过回调方法注册这些函数)。
		glfwPollEvents();
	}

	// 清除所有分配的GLFW资源.
	glfwTerminate();
	return 0;
}

//  查询GLFW是否按下/释放了相关键并做出相应的反应
void processInput(GLFWwindow *window)
{
    
    
	//检查用户是否按了esc键(如果没有按,glfwGetKey返回GLFW_RELEASE)。如果用户确实按了escape键,那么我们通过使用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)
{
    
    
	// 确保视窗与新的视窗尺寸相匹配
	glViewport(0, 0, width, height);
}



Output result:
Insert picture description here

Guess you like

Origin blog.csdn.net/peixin_huang/article/details/104352973