LearnOpenGL 创建一个窗口

2020-09-13  本文已影响0人  li_礼光

参考 learnOpenGl 你好,窗口

使用GLFW+GLAD创建一个OpenGL的窗口


#include "MyOpenglWindow.hpp"
#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>



int runMyOpenGlWindow() {
        
    int result = glfwInit();
    if (result == GL_FALSE) {
        printf("glfwInit 初始化失败");
        return -1;
    }
    
    
    //这里的宏不好提示出来, 根据LearnOpenGL的文档提示, 用这三个
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    //Mac平台需要加入
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);

    //创建一个Window
    GLFWwindow *window = glfwCreateWindow(600, 400, "My Opengl Window", NULL, NULL);
    if(!window) {
        printf("window 创建失败");

    }
    
    
    //Makes the context of the specified window current for the calling thread.
    //opengl运行模式 -- 单线程, 理解为跟当前的Window做一次绑定操作.
    //多个线程同时调用不被允许
    glfwMakeContextCurrent(window);

    
    //进行绘制
    while(!glfwWindowShouldClose(window)){
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    
    
    //程序销毁
    glfwTerminate();
    
    return 1;
}



glfwWindowHint函数的第一个参数代表选项的名称,我们可以从很多以GLFW_开头的枚举值中选择;第二个参数接受一个整形,用来设置这个选项的值。

我们需要告诉GLFW我们要使用的OpenGL版本是3.3,这样GLFW会在创建OpenGL上下文时做出适当的调整。这也可以确保用户在没有适当的OpenGL版本支持的情况下无法运行。我们将主版本号(Major)和次版本号(Minor)都设为3。我们同样明确告诉GLFW我们使用的是核心模式(Core-profile),并且不允许用户调整窗口的大小。在明确告诉GLFW使用核心模式的情况下,使用旧版函数将会导致invalid operation(无效操作)的错误,而这不正是一个很好的提醒吗?在我们不小心用了旧函数时报错,就能避免使用一些被废弃的用法了。如果使用的是Mac OS X系统,你还需要加下面这行代码到你的初始化代码中这些配置才能起作用.

简单粗暴的可以理解是 : 配置当前OpenGL的版本信息.

PS: 这里的宏在Xcode下, 不太好自动打印补全. 所以这里就根据官方文档的来设置应该就没问题了.

效果图 :

Window

.

就是一个黑窗. 没有任何的内容. 因为这里只是创建一个窗口.


如果简单粗暴的理解 , 创建一个窗口的流程是:

  • glfwInit
  • glfwWindowHint
  • glfwCreateWindow
  • glfwMakeContextCurrent
  • while (glfwWindowShouldClose) {
  • glfwSwapBuffers
  • glfwPollEvents
  • }
  • glfwTerminate

上一篇 下一篇

猜你喜欢

热点阅读