opengl开发时 使用glfw库创建窗口的流程,简单归纳一下
- glfw库可以帮助我们创建一个opengl上下文和一个用于显示的窗口
- 要使用glfw,先得去网站上下载
- 然后将源码编译完成后,在cmake工程中使用target_link_libraries将编译好的库文件引用进来,使用include_directorie将相关头文件引用到工程里
- 如果是window,在visiual stuido 里面需要引用opengl32.lib, linux需要链接-GL
- GLAD可以帮助我们确定函数地址,我们可以把源码下载下来,放入工程中
最后是具体创建窗口的代码实现
1.先初始化glfw,并且设置相关的参数
2.使用glfwCreateWindow创建窗口
3.将新建的窗口设置为opengl当前的上下文窗口
4.使用glad查找opengl的函数地址, 然后就可以开始使用opengl相关的函数
5.循环将颜色数据绘制到屏幕上
#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
using namespace std;
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
int main()
{
cout << "Hello World!" << endl;
//glfw初始化
glfwInit();
//设置opengl版本
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
// glfwWindowHint(GLFW_VISIBLE, GL_FALSE);//如果需要离屏渲染,可以隐藏窗口
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
//调用opengl 函数前需要初始化glad
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
glViewport(0, 0, 800, 600);
//当用户窗口大小调整的时候, opengl的视口也要进行调整
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
while(!glfwWindowShouldClose(window))//检查是否需要退出
{
glfwSwapBuffers(window);//检查是否有触发事件
glfwPollEvents();//把颜色绘制到屏幕上
}
glfwTerminate();
return 0;
}