OpenGL着色器程序编译出错

Shader::Shader(const char* vertexShader_path, const char* fragmentShader_path)
{
	int success;
	char infoLog[512];
	ID = glCreateProgram();//创建programID
	const char* vertexShaderSource = Load(vertexShader_path);//读取顶点着色器资源
	GLuint vertexShaderID = glCreateShader(GL_VERTEX_SHADER);//创建顶点着色器ID
	glShaderSource(vertexShaderID, 1, &vertexShaderSource, 0);//绑定资源
	glCompileShader(vertexShaderID);//编译顶点着色器
	glGetShaderiv(vertexShaderID, GL_COMPILE_STATUS, &success);//检测是否编译成功
	if (!success)//如果失败
	{
		glGetShaderInfoLog(vertexShaderID, 512, NULL, infoLog);//获取错误日志
		std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
	};
	const char* fragmentShaderSource = Load(fragmentShader_path);//读取片段着色器资源
	GLuint fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);//创建片段着色器ID
	glShaderSource(fragmentShaderID, 1, &fragmentShaderSource, 0);//绑定资源
	glCompileShader(fragmentShaderID);//编译片段着色器
	glGetShaderiv(fragmentShaderID, GL_COMPILE_STATUS, &success);//检测是否编译成功
	if (!success)//如果失败
	{
		glGetShaderInfoLog(fragmentShaderID, 512, NULL, infoLog);//获取错误日志
		std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl;
	};
	//链接着色器至program
	glAttachShader(ID, vertexShaderID);
	glAttachShader(ID, fragmentShaderID);
	//删除着色器
	glDeleteShader(vertexShaderID);
	glDeleteShader(fragmentShaderID);
}
#version 330 core
layout(location = 0) in vec3 aPos;
layout(location = 1) in vec3 aColor;

out vec3 vColor;

void main()
{
    gl_Position = vec4(aPos,1.0f);
    vColor = aColor;
}

 

复制了你的顶点着色器代码 可以运行 没有语法错误 应该是没问题的 具体的你可能要看看是不是传形参(const char* vertexShader_path)进来传错了顶点着色器的名字

 

const char* Load(const char* Shader_path)//读取着色器资源
{
	std::string ShaderSource;
	std::ifstream ifs(Shader_path);
	if (!ifs.is_open())
	{
		std::cerr << "ERROR:No such directory or file" << endl;
		return "";
	}
	while (!ifs.eof())
	{
		ShaderSource += ifs.get();
	}
	const char* source = ShaderSource.c_str();
	cout << ShaderSource << endl << endl;
	ifs.close();
	return source;
}

 

Shader::Shader(const char* vertexShader_path, const char* fragmentShader_path)
{
	int success;
	char infoLog[512];
	std::string ShaderSource;
	std::ifstream ifs(vertexShader_path);
	if (!ifs.is_open())
	{
		std::cerr << "ERROR:No such directory or file" << endl;
		return;
	}
	while (!ifs.eof())
	{
		ShaderSource += ifs.get();
	}
	ifs.close();
	ID = glCreateProgram();//创建programID
	const char* vertexShaderSource = ShaderSource.c_str();//读取顶点着色器资源
	cout << vertexShaderSource << endl;
	GLuint vertexShaderID = glCreateShader(GL_VERTEX_SHADER);//创建顶点着色器ID
	glShaderSource(vertexShaderID, 1, &vertexShaderSource, 0);//绑定资源
	glCompileShader(vertexShaderID);//编译顶点着色器
	glGetShaderiv(vertexShaderID, GL_COMPILE_STATUS, &success);//检测是否编译成功
	if (!success)//如果失败
	{
		glGetShaderInfoLog(vertexShaderID, 512, NULL, infoLog);//获取错误日志
		std::cerr << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
	};
	ShaderSource.clear();
	ifs.open(fragmentShader_path);
	if (!ifs.is_open())
	{
		std::cerr << "ERROR:No such directory or file" << endl;
		return;
	}
	while (!ifs.eof())
	{
		ShaderSource += ifs.get();
	}
	ifs.close();
	const char* fragmentShaderSource = ShaderSource.c_str();//读取片段着色器资源
	cout << fragmentShaderSource << endl;
	GLuint fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);//创建片段着色器ID
	glShaderSource(fragmentShaderID, 1, &fragmentShaderSource, 0);//绑定资源
	glCompileShader(fragmentShaderID);//编译片段着色器
	glGetShaderiv(fragmentShaderID, GL_COMPILE_STATUS, &success);//检测是否编译成功
	if (!success)//如果失败
	{
		glGetShaderInfoLog(fragmentShaderID, 512, NULL, infoLog);//获取错误日志
		std::cerr << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl;
	};
	//链接着色器至program
	glAttachShader(ID, vertexShaderID);
	glAttachShader(ID, fragmentShaderID);
	glGetProgramiv(ID, GL_LINK_STATUS, &success);
	if (!success)
	{
		glGetProgramInfoLog(ID, 512, NULL, infoLog);
		std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl;
	}
	//删除着色器
	glDeleteShader(vertexShaderID);
	glDeleteShader(fragmentShaderID);
}