C++ 无法使用普通2D着色器在C+;中绘制红色三角形+;openGL(无编译器错误)

C++ 无法使用普通2D着色器在C+;中绘制红色三角形+;openGL(无编译器错误),c++,opengl,glsl,shader,C++,Opengl,Glsl,Shader,我使用了openGL、GLEW和GLFW3。在openGl 3.0 mesa中,使用默认着色器并绘制白色三角形。在4.2中,屏幕为黑色。未生成任何错误消息 该问题不是由于将片段着色器错误标记为顶点着色器,或者相反 该程序包含3个功能: (1) compileShader,它应该将着色器类型和源代码作为std::string接受,并返回一个带有编译代码的着色器ID (2) createProgram,接收顶点着色器和片段着色器的源代码,并返回编译并附加着色器的程序ID (3) 和main,其中两个

我使用了openGL、GLEW和GLFW3。在openGl 3.0 mesa中,使用默认着色器并绘制白色三角形。在4.2中,屏幕为黑色。未生成任何错误消息

该问题不是由于将片段着色器错误标记为顶点着色器,或者相反

该程序包含3个功能:

(1) compileShader,它应该将着色器类型和源代码作为std::string接受,并返回一个带有编译代码的着色器ID

(2) createProgram,接收顶点着色器和片段着色器的源代码,并返回编译并附加着色器的程序ID

(3) 和main,其中两个着色器源代码都定义为字符串

对不起,谢谢你

#包括
#包括
#包括
#包括
静态无符号整数编译器标头(无符号整数类型,std::string常量和源代码){
unsigned int shaderId=glCreateShader(类型);
const char*source=sourceCode.c_str();
glShaderSource(shaderId,1和source,nullptr);
glCompileShader(shaderId);
int结果;
glGetShaderiv(shaderId、GL\u编译状态和结果);
如果(结果==GL\u假){

如果(type==GL\u FRAGMENT\u SHADER)std::cout问题不是着色器程序,而是您正在使用核心配置文件(
GLFW\u OPENGL\u core\u profile
)。因此您必须创建一个命名的。默认VAO(0)在核心配置文件上下文中无效

通过生成顶点数组对象名称,并通过以下方式创建和绑定对象:

unsigned int-vao;
glGenVertexArrays(1和vao);
glBindVertexArray(vao);
无符号整数缓冲区;
glGenBuffers(1,&buffer);
glBindBuffer(GL_数组_BUFFER,BUFFER);
glBufferData(GLU数组缓冲区,6*sizeof(浮点),位置,GLU静态图);
GlenableVertexAttributeArray(0);//启用位置的xy属性
glvertexattributepointer(0,2,GL_FLOAT,GL_FALSE,2*sizeof(FLOAT),0);//指定xy属性的布局

谢谢,它成功了。毫不奇怪,我是OpenGL的初学者,所以我还没有遇到顶点数组对象。你有什么好的教程推荐吗?@VivekPanchagnula谢谢。不客气。我推荐