C++ 尝试从文件加载片段着色器时出错
问题是这样的:将我的着色器代码放在std::string中,如下所示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::字符串顶点\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;//谢谢,这确实是问题所在,在修复了它和其他一些愚蠢的错误之后,它起作用了!让我想知道我自己怎么还没有抓住它。