阅读本文前请先阅读以下文章,一些基本的理论不在讲述。
创建窗口大致分为以下步骤:
- 初始化
glfw
; - 配置
glfw
; - 通过
glfw
创建窗口
由于我们是通过glfw
来创建窗口的,当然要先初始化它;
glfwInit();
告诉它我们即将使用OpenGL
的那个版本,分为主版本GLFW_CONTEXT_VERSION_MAJOR
和次版本号GLFW_CONTEXT_VERSION_MINOR
,并且使用的是核心模式
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
注意点 如果是mac平台添加下面这行才生效
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
更多的设置看这
glfw
准备好就可以创建窗口了
auto mWindow = glfwCreateWindow(mWidth, mHeight, "OpenGL", nullptr, nullptr);
方法名称 | 备注 |
---|---|
glViewport(0, 0, 800, 600) | 绘制屏幕的大小 |
glfwSetFramebufferSizeCallback() | 窗口调整大小的时候调用这个函数 |
创建好窗口后,由于后面会用到OpenGL
的函数,我们要在使用之前将函数地址绑定好,所以创建好窗口应该绑定地址
第一篇已经说到有2中方法,任选一个吧
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
要想你的程序一直运行,需要一个循环保证程序不死,类似oc
的runloop
while(!glfwWindowShouldClose(window))
{
glfwSwapBuffers(window);
glfwPollEvents();
}
接下来我们只要在循环中渲染即可,而我们的整个学习阶段都在这个渲染阶段了