OpenGL GLFW+GLAD程序可正常清屏但无法绘制三角形求助
问题修复方案
你代码中存在3处核心错误,修改后即可正常渲染三角形:
1. 上下文版本与着色器版本不兼容
你指定了OpenGL 2.0版本上下文,但着色器使用的是#version 330(对应OpenGL 3.3),高版本着色器无法在低版本上下文运行。
修复方案:
将上下文版本修改为3.3核心模式,替换main函数中原有的glfwWindowHint代码:
// 删除原有2.0版本配置 // glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); // glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); // 替换为以下内容 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); #ifdef __APPLE__ glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // 适配Mac系统 #endif
2. 顶点属性数组被禁用
你调用了glDisableVertexAttribArray(0),导致GPU无法读取顶点缓冲区的位置数据,自然无法绘制图形。
修复方案:
将禁用改为启用:
// 删除原有禁用逻辑 // glDisableVertexAttribArray(0); // 替换为 glEnableVertexAttribArray(0);
3. 错误日志未输出
现有代码虽然捕获了着色器编译、链接错误,但没有输出错误日志,无法第一时间定位版本不兼容问题。可以在Shader类的错误分支添加日志打印逻辑,比如在顶点着色器编译失败的位置添加:
std::cout << "顶点着色器编译失败:" << infoLog.data() << std::endl;
修改完成后重新编译运行,即可看到橙色三角形渲染在深色背景上。
内容的提问来源于stack exchange,提问作者Sarund9
相关产品推荐
相关产品推荐

