OpenGL加载着色器文件失败
错误消息 生成GL\u无效\u操作错误。尚未链接,或不是程序对象。 生成GL\u无效\u操作错误。对象未成功链接,或不是程序对象 我想它找不到glsl文件,我该怎么办 shader.vs.glslOpenGL加载着色器文件失败,opengl,Opengl,错误消息 生成GL\u无效\u操作错误。尚未链接,或不是程序对象。 生成GL\u无效\u操作错误。对象未成功链接,或不是程序对象 我想它找不到glsl文件,我该怎么办 shader.vs.glsl #version 430 core void main(void) { const vec4 vertices[6] = vec4[6](vec4(0.0,1.0,0.0,1.0), vec4(0.5,-0.5,0.0,1.0), vec4(-0.5,-0.5,0.0,1.0), ve
#version 430 core
void main(void)
{
const vec4 vertices[6] = vec4[6](vec4(0.0,1.0,0.0,1.0),
vec4(0.5,-0.5,0.0,1.0),
vec4(-0.5,-0.5,0.0,1.0),
vec4(0.0,-1.0,0.0,1.0),
vec4(0.5,0.5,0.0,1.0),
vec4(-0.5,0.5,0.0,1.0)
);
gl_Position = vertices[gl_VertexID];
}
shader.fs.glsl
#version 430 core
out vec4 color;
void main(void)
{
color = vec4(0.0, 2.0, 0.0, 0.0);
}
编译着色器
GLuint compile_shaders()
{
GLuint vs;
GLuint fs;
GLuint program;
vs=sb6::shader::load("media\shaders\dispmap\dispmap.vs.glsl",GL_VERTEX_SHADER);
fs=sb6::shader::load("media\shaders\dispmap\dispmap.fs.glsl",GL_FRAGMENT_SHADER);
// Create program, attach shaders to it, and link it
program = glCreateProgram();
glAttachShader(program, vs);
glAttachShader(program, fs);
glLinkProgram(program);
return program;
}
我的应用程序类
class my_application : public sb6::application
{
public:
void startup()
{
rendering_program =compile_shaders();
glGenVertexArrays(1, &vertex_array_object);
glBindVertexArray(vertex_array_object);
}
void shutdown()
{
glDeleteVertexArrays(1, &vertex_array_object);
glDeleteProgram(rendering_program);
glDeleteVertexArrays(1, &vertex_array_object);
}
private:
GLuint rendering_program;
GLuint vertex_array_object;
void render(double currentTime)
{
const GLfloat color[] = {0.0f,0.0f,0.0f,1.0f };
glClearBufferfv(GL_COLOR, 0, color);
// Use the program object we created earlier for rendering
glUseProgram(rendering_program);
// Draw one point
glDrawArrays(GL_TRIANGLES, 0, 3);
}
};
DECLARE_MAIN(my_application)
你不应该在你的路径中转义反斜杠,并检查着色器加载的返回值吗?我在我的路径中转义反斜杠。仍然不起作用。如果vs | | |!fs{return NULL;}如果执行此操作,它总是返回NULL,那么显然着色器没有加载。我不知道sb6::shader是什么。进一步讨论加载函数。这是she着色器的内部。我不知道该怎么做…是否有其他方法加载glsl文件?