理解GL管线(一)窗口创建

1.你好,窗口

实现逻辑:a.初始化GLFW库;b.实例化GLFWwindow;c.初始化gl管理库(这里选择GLEW,也可以选择GLAD等);d.调用init()初始化函数;e.重复调用display函数刷新窗口显示。

代码:

 1 #include <GL\glew.h>
 2 #include <GLFW\glFW3.h>
 3 
 4 int main(void) { 
 5     //初始化glfw库
 6     if (!glfwInit()) 
 7     { 
 8         exit(EXIT_FAILURE);
 9      } 
10     //设置gl主版本号
11     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); 
12      //设置gl次版本号,与主版本号一起指定了机器必须与opengl4.3版本兼容
13     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 
14     //创建glfw窗口,大小1280x640像素,窗口标题(window1)
15     GLFWwindow* window = glfwCreateWindow(1280,640,"window1", NULL, NULL); 
16     //通知GLFW将我们窗口的上下文设置为当前opengl线程的主上下文
17     glfwMakeContextCurrent(window);
18      //初始化glew库
19     if (glewInit() != GLEW_OK) 
20     {
21          exit(EXIT_FAILURE);
22      } 
23     //设置缓冲区交换间隔(帧)。 默认情况下,交换间隔为0,但因缓冲区 
24     //有可能在屏幕更新的中间交换,出现屏幕撕裂的情况。
25     //所以,可以将该间隔设为1,即每帧更新一次。 它可以设置为更高的 
26     //值,但这可能导致输入延迟。
27     glfwSwapInterval(1); 
28 
29     init(window); 
30     //检查GLFW是否被要求退出
31     while (!glfwWindowShouldClose(window)) { 
32         display(window, glfwGetTime()); //glfwGetTime:获取glfw初始化后经过的时间
33         //交换缓冲区
34         glfwSwapBuffers(window); 
35         //glfwPollEvents函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)。
36         glfwPollEvents(); 
37     } 
38     //glfw销毁窗口
39     glfwDestroyWindow(window); 
40      //glfw终止运行
41     glfwTerminate(); 
42     exit(EXIT_SUCCESS);
43 }
44 
45 void init(GLFWwindow* window) { }
46 
47 void display(GLFWwindow* window, double currentTime) { 
48     //指定当前缓冲区清除值
49    glClearColor(1.0, 0.0, 0.0, 1.0); 
50     //清除当前可写的颜色缓冲区
51    glClear(GL_COLOR_BUFFER_BIT);
52 }                

 

 

posted @ 2021-06-27 23:36  吉尔加斯  阅读(183)  评论(0)    收藏  举报