C++ 为什么可以';我看不到我的红色三角形窗口与OpenGL核心配置文件?

C++ 为什么可以';我看不到我的红色三角形窗口与OpenGL核心配置文件?,c++,c,opengl,glfw,C++,C,Opengl,Glfw,下面的代码应该在带有OpenGL兼容性配置文件的窗口上显示一个红色三角形,但我只能看到一个空白的窗口核心配置文件: #包括 #包括 无符号整数着色器_创建(常量字符*src_顶点,常量字符*src_片段){ ... } 内部主(空) { GLFWwindow*窗口; /*初始化库*/ if(!glfwInit())返回-1; glfwWindowHint(GLFW_上下文_版本_专业,3); glfwWindowHint(GLFW_上下文_版本_小调,3); glfwWindowHint(GLF

下面的代码应该在带有OpenGL兼容性配置文件的窗口上显示一个红色三角形,但我只能看到一个空白的窗口核心配置文件:

#包括
#包括
无符号整数着色器_创建(常量字符*src_顶点,常量字符*src_片段){
...
}
内部主(空)
{
GLFWwindow*窗口;
/*初始化库*/
if(!glfwInit())返回-1;
glfwWindowHint(GLFW_上下文_版本_专业,3);
glfwWindowHint(GLFW_上下文_版本_小调,3);
glfwWindowHint(GLFW_OPENGL_配置文件、GLFW_OPENGL_核心配置文件);
/*创建窗口模式窗口及其OpenGL上下文*/
window=glfwCreateWindow(640480,“你好世界”,空,空);
如果(!窗口)
{
glfwTerminate();
返回-1;
}
/*将窗口的上下文设置为当前*/
glfwMakeContextCurrent(窗口);
如果(glewInit()!=GLEW_OK)返回-1;
浮点坐标[6]={
-0.5f,-0.5f,
+0.0f、+0.5f、,
+0.5f,-0.5f
};
无符号整数缓冲区;
glGenBuffers(1,&buffer);
glBindBuffer(GL_数组_BUFFER,BUFFER);
glBufferData(GLU数组缓冲区、大小(坐标)、坐标、GLU静态图);
GlenableVertexAttributeArray(0);
glvertexattributepointer(0,2,GL_FLOAT,GL_FALSE,sizeof(FLOAT)*2,0);
常量字符*顶点_着色器=;
常量字符*片段_着色器=;
unsigned int shader=shader\u create(顶点着色器、片段着色器);
glUseProgram(着色器);
/*循环,直到用户关闭窗口*/
而(!glfwWindowShouldClose(窗口))
{
/*在这里渲染*/
glClear(GLU颜色缓冲位);
gldrawArray(GL_三角形,0,3);
/*交换前后缓冲区*/
glfwSwapBuffers(窗口);
/*轮询并处理事件*/
glfwPollEvents();
}
glfwTerminate();
返回0;
}
顶点着色器:

#版本330核心
vec4位置的布局(位置=0);
void main(){
gl_位置=位置;
}
片段着色器:

#版本330核心
布局(位置=0)输出vec4颜色;
void main(){
颜色=vec4(1.0,0.0,0.0,1.0);
}
当我不使用着色器(这不是一个好主意)时,我可以完美地看到默认白色的三角形(至少在我的GPU上)。另外,如果使用兼容性配置文件而不是核心配置文件,它也可以工作

<>我尝试编译为C和C++代码,但都不能显示三角形。< /P>
我做错了什么?着色器的源代码是否不正确?

使用核心配置文件时,必须生成并命名,因为默认顶点数组对象(0)无效

切换到兼容配置文件:

glfwWindowHint(GLFW_OPENGL_配置文件、GLFW_OPENGL_核心配置文件)

glfwWindowHint(GLFW_OPENGL_配置文件、GLFW_OPENGL_COMPAT_配置文件);
或为顶点规范创建命名VAO:

GLuint-vao;
glGenVertexArrays(1和vao);
glBindVertexArray(vao);
GlenableVertexAttributeArray(0);
glvertexattributepointer(0,2,GL_FLOAT,GL_FALSE,sizeof(FLOAT)*2,0);