hello,watergame 2021-06-27 18:35 采纳率: 0%
浏览 174

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;
}
  • 写回答

3条回答 默认 最新

  • 彭同学她同桌 2021-06-28 10:53
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!