首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【OpenGL】ios_base::failbit set: iostream stream error

【OpenGL】ios_base::failbit set: iostream stream error

原创
作者头像
时代的头发丝儿
发布2025-07-30 15:30:33
发布2025-07-30 15:30:33
560
举报
文章被收录于专栏:OpenGLOpenGL

一、遇到错误

今天在学习OpenGL的Shader的封装过程中,出现了以下的异常,如下图:

代码语言:CMD
复制
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的构造函数的时候报错了,代码如下:

代码语言:c++
复制
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); 在这一行出错了。

三、错误分析

代码语言:c++
复制
std::ifstream vsFile;   // 声明了一个inFileStream变量

vsFile.open(vertexPath);
vsFile.open(fragmentPath); // vsFile错误的打开了“2个文件”,导致出错!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、遇到错误
  • 二、错误重现
  • 三、错误分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档