为什么OpenGL创建完全无响应的窗口?C++搭配GLFW渲染三角形失败求助
核心问题定位
你代码的主循环语句末尾多写了一个多余的英文分号:
// 错误写法,末尾的分号会让while循环执行空逻辑,进入死循环 while (!glfwWindowShouldClose(window));
这个分号会直接截断while的循环体,程序运行后会一直在空循环中打转,永远不会执行后续的渲染、交换缓冲区、处理窗口事件的代码,自然就会出现窗口无响应、无法交互、渲染不出内容的问题。
删除这个分号即可解决绝大多数问题,修改后的正确写法如下:
while (!glfwWindowShouldClose(window)) { glClearColor(0.07f, 0.13f, 0.17f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); shaderProgram.Activate(); VAO1.Bind(); glDrawElements(GL_TRIANGLES, 9, GL_UNSIGNED_INT, 0); glfwSwapBuffers(window); glfwPollEvents(); }
关于GLFW的PDB警告问题
PDB是程序数据库文件,存储了Visual Studio调试时需要的符号信息,你遇到的警告仅说明当前使用的GLFW预编译库没有附带调试用的PDB文件,完全不影响程序正常运行,可以直接忽略,不需要额外处理。
如果实在想消除警告,可以下载GLFW带调试符号的预编译包,或者自己本地编译GLFW生成对应PDB文件,放到和生成的exe同目录下即可,现阶段完全不用在这个问题上浪费精力。
额外检查建议
如果修改分号后仍然渲染不出三角形,可以再确认两个点:
- 顶点着色器
default.vert和片段着色器default.frag文件已经放到了VS项目的工作目录下(默认是和.sln解决方案文件同目录,或和生成的exe同目录,取决于你的VS运行配置) - 自行封装的VAO、VBO、EBO、Shader类的逻辑和教程完全一致,没有拼写错误或参数传错的问题
内容的提问来源于stack exchange,提问作者Will Mungas
相关产品推荐
相关产品推荐

