Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.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
C++ 尝试从文件加载片段着色器时出错_C++_File_Opengl Es_Shader - Fatal编程技术网

C++ 尝试从文件加载片段着色器时出错

C++ 尝试从文件加载片段着色器时出错,c++,file,opengl-es,shader,C++,File,Opengl Es,Shader,问题是这样的:将我的着色器代码放在std::string中,如下所示 std::字符串顶点\u着色器\u源= “#版本300 es\n” “vec4顶点中的布局(位置=0);\n” “void main(){\n” “gl\U位置=顶点;\n” “}\n”; std::字符串片段\u着色器\u源= “#版本300 es\n” “精密中泵浮动;” “输出vec3颜色;\n” “void main(){\n” “color=vec3(1,0,0);\n” “}\n”; 工作完全正常,程序没有报告任

问题是这样的:将我的着色器代码放在std::string中,如下所示

std::字符串顶点\u着色器\u源=
“#版本300 es\n”
“vec4顶点中的布局(位置=0);\n”
“void main(){\n”
“gl\U位置=顶点;\n”
“}\n”;
std::字符串片段\u着色器\u源=
“#版本300 es\n”
“精密中泵浮动;”
“输出vec3颜色;\n”
“void main(){\n”
“color=vec3(1,0,0);\n”
“}\n”;
工作完全正常,程序没有报告任何错误,但只要我尝试从文件加载完全相同的数据,片段着色器似乎可以正常编译,但程序报告链接和验证时出错。返回的错误字符串要么为空,要么充满垃圾,因此我也无法从中获得任何有用的信息

我听人说这可能与Windows使用的行尾字符有关,但在Linux上重写代码后,这一点都没有改变

我已经包括了我试图在一个中工作的整个程序(我使用的着色器文件与粘贴库中的文件完全相同,除了引号和换行符)
我现在只能猜测,在第93行的Renderer::compile_shader_from_file()方法中读取文件的方式有问题,但每当我尝试将其加载到单独的程序中并检查字符串的内容时,它看起来都很好。

在方法
Renderer::compile_shader_from_file
<,创建2个着色器对象(
glCreateShader
调用两次)。最后,从方法返回“错误”对象:

unsigned int渲染器::从文件编译着色器(常量std::字符串和文件路径,GLenum着色器类型){
std::ifstream着色器\源\文件(文件\路径);
unsigned int shader=glCreateShader(shader_类型);
if(着色器\u源\u文件.is\u open()){
// [...]
unsigned int shader=glCreateShader(shader_类型);
// [...]
}
着色器_source_file.close();
返回着色器;
}
仅创建一个对象,以解决此问题:

unsigned int渲染器::从文件编译着色器(常量std::字符串和文件路径,GLenum着色器类型){
std::ifstream着色器\源\文件(文件\路径);

unsigned int shader=0;//谢谢,这确实是问题所在,在修复了它和其他一些愚蠢的错误之后,它起作用了!让我想知道我自己怎么还没有抓住它。