GLFW窗口
- 头文件
glad.h,glfw3.h, 包含顺序 glad,glfw3
- 初始化
//1. 初始化
if (glfwInit() == GLFW_FALSE)
{
cout << "init glfw fail";
return 1;
}
- 设置OpenGL配置
//2. 基本设置, 版本号,和 core_profile
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#if __APPLE__
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
#endif
- 创建窗口
//3. 创建窗口
GLFWwindow *window = glfwCreateWindow(wWidth, wHeight, wName, nullptr, nullptr);
if (window == nullptr)
{
cout << "Failed to create GLFW window";
goto TERMINATE;
//return 1;
}
//4. 当前主线程上下文窗口
glfwMakeContextCurrent(window);
- 使用glad管理OpenGL指针
//5. 使用glad管理OpenGL指针。
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
goto TERMINATE;
//return 1;
}
- 设置视口和resize回调
//6. 设置视口
glViewport(0, 0, wWidth, wHeight);
//7. 设置resize回调,对应刷新视口
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
- 至此基本设置已经完成,进入渲染Loop
//8. 设置就绪,准备进入渲染的循环。
while (!glfwWindowShouldClose(window))
{
//8.0 处理用户输入
processInput(window);
//************渲染纯色背景
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
//*************
//8.1 交换颜色缓冲,(OpenGL双缓冲)
glfwSwapBuffers(window);
//8.2 事件派发
glfwPollEvents();
}
- 最后在退出时清理window
TERMINATE:
glfwTerminate();
- 完整代码
#include <iostream>
//先后顺序
#include "glad/glad.h"
#include "GLFW/glfw3.h"
using namespace std;
const int wWidth = 800, wHeight = 600;
const char* wName = "LearnOpenGL";
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);
}
int main(const int argc, const char*argv[])
{
//1. 初始化
if (glfwInit() == GLFW_FALSE)
{
cout << "init glfw fail";
return 1;
}
//2. 基本设置
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#if __APPLE__
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
#endif
//3. 创建窗口
GLFWwindow *window = glfwCreateWindow(wWidth, wHeight, wName, nullptr, nullptr);
if (window == nullptr)
{
cout << "Failed to create GLFW window";
goto TERMINATE;
//return 1;
}
//4. 当前主线程上下文窗口
glfwMakeContextCurrent(window);
//5. 使用glad管理OpenGL指针。
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
goto TERMINATE;
//return 1;
}
//6. 设置视口
glViewport(0, 0, wWidth, wHeight);
//7. 设置resize回调,对应刷新视口
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
//8. 设置就绪,准备进入渲染的循环。
while (!glfwWindowShouldClose(window))
{
//8.0 处理用户输入
processInput(window);
//************* render
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
//*************
//8.1 交换颜色缓冲,(OpenGL双缓冲)
glfwSwapBuffers(window);
//8.2 事件派发
glfwPollEvents();
}
TERMINATE:
glfwTerminate();
return 0;
}