今天在学习OpenGL的Shader的封装过程中,出现了以下的异常,如下图:
Error: Shader Read File error!
ios_base::failbit set: iostream stream error
Error: Shader link error!
Vertex info
-----------
(0) : error C5145: must write to gl_Position
INVALID_OPERATION
Assertion failed: false, file E:\dev\study__OpenGL\11_OpenGL_ShaderClass\src\wrapper\checkError.cpp, line 27
个人感觉错误提示的很模糊,无法看出来是什么问题。只能通过代码断点进行查找。
本段程序是在创建Shader的实例,在执行Shader的构造函数的时候报错了,代码如下:
Shader::Shader(const char* vertexPath, const char* fragmentPath)
{
// 声明装入shader代码字符串的两个string
std::string vertexCode;
std::string fragmentCode;
// 声明用于读取vs跟fs文件的inFileStream
std::ifstream vsFile;
std::ifstream fsFile;
// 保证ifstream遇到问题的时候可以抛出异常
vsFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
fsFile.exceptions(std::ifstream::failbit | std::ifstream::badbit);
//! 1 读取路径中的文件内容到变量
try
{
// 1 打开文件
vsFile.open(vertexPath);
vsFile.open(fragmentPath); //>>>>>>>>>> 代码执行到这一行就转入catch了。
// 2 将文件输入流当中的字符串输入到stringStream里面
std::stringstream vsStream, fsStream;
vsStream << vsFile.rdbuf();
fsStream << fsFile.rdbuf();
// 3 关闭文件
vsFile.close();
fsFile.close();
// 4 将字符串从stringStream当中读取出来,转化到 std::string 当中
vertexCode = vsStream.str();
fragmentCode = fsStream.str();
}
catch (std::ifstream::failure& e)
{
std::cout << "Error: Shader Read File error! \n" << e.what() << "\n" << std::endl;
}
后续代码省略....
}
vsFile.open(fragmentPath); 在这一行出错了。
std::ifstream vsFile; // 声明了一个inFileStream变量
vsFile.open(vertexPath);
vsFile.open(fragmentPath); // vsFile错误的打开了“2个文件”,导致出错!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。