从零开始学习opengl-1.创建窗口

    科技2026-02-22  6

    #include<iostream> #define GLEW_STATIC//静态链接库 #include<GL/glew.h> #include<GLFW/glfw3.h> const GLuint WIDTH = 800, HEIGHT = 600; //按键回调函数接受一个 GLFWwindow 指针作为它的第一个参数; 第二个整形参数用来表示事件的按键; //第三个整形参数描述用户是否有第二个键按下或释放; 第四个整形参数表示事件类型, 如按下或释放; //最后一个参数是表示是否有Ctrl、 Shift、 Alt、 Super等按钮的操作 void key_callback(GLFWwindow* window, int key, int seconds, int action, int mode) { std::cout << key << std::endl; //检测了键盘是否按下了Escape键 if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) glfwSetWindowShouldClose(window, GL_TRUE); } int main() { glfwInit();//初始化 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//opengl版本为3.3 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //GLFW我们使用的是核心模式(Core-profile) glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);//不允许用户调整窗口的大小 GLFWwindow* window = glfwCreateWindow(800, 600, "Learnopnegl", nullptr, nullptr); if (window == nullptr) { std::cout << "fail to create glfw window" << std::endl; glfwTerminate();//释放glfw分配的内存 return -1; } //设为当前 glfwMakeContextCurrent(window); glfwSetKeyCallback(window, key_callback); //GLEW知道使用现代方法检索函数指针和扩展 glewExperimental = GL_TRUE; //初始化OpenGL的函数指针的 if (glewInit() != GLEW_OK) { std::cout << "Failed to initialize GLEW" << std::endl; return -1; } //当创建了一个OpenGL上下文之后,需要从重新获取framebuffersize设置给glViewport int width, height; glfwGetFramebufferSize(window, &width, &height); //前两个参数控制窗口左下角的位置 glViewport(0, 0, width, height); //游戏循环 while (!glfwWindowShouldClose(window)) { //把所有事件系统都取过来:键盘/鼠标等操作 glfwPollEvents(); //清空颜色缓冲 glClear(GL_COLOR_BUFFER_BIT); //填充颜色 glClearColor(0.2f, 0.3f, 0.3f, 1.0f); //交换两个缓冲区指针,调用双面进行画,显示一个,另一个在画,画面更流畅 glfwSwapBuffers(window); } glfwTerminate(); return 0; }
    Processed: 0.010, SQL: 9