理解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 }

浙公网安备 33010602011771号