Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL加载着色器文件失败_Opengl - Fatal编程技术网

OpenGL加载着色器文件失败

OpenGL加载着色器文件失败,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

错误消息

生成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),
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文件?