接下来就是如何面向对象去组织代码了,当然对于C++代码本身并不熟练的我来说,免不了要面向百度编程,这部分我打算细致一些描述

 

首先我们的目的是要把顶点着色器和片段着色器的内容剥离出来,还记得之前我们是怎么写的吗?

【笔记】跟着LearnOpenGL自说自话地学习OpenGL(六)

 

没错,我们把这部分逻辑写成了长字符串作为片段,要是再复杂一些,我可不想写这么多'\n',所以这两部分单独放在文件里,那么接下来的目的就是从文件中读取,使用C++文件读取着色器内容,顺理成章。

 

从阅读教程中构造的类关于读取文件的异常处理就发现自己看不懂了,如下代码片段

【笔记】跟着LearnOpenGL自说自话地学习OpenGL(六)

 

好吧,虽然还是看不懂咋工作的,但是至少可以确定std::ifstream vShaderFile;它是使用exceptions方法设置异常的,继续看吧

failbit和badbit在xiosbase文件中找到了原始的枚举值定义

【笔记】跟着LearnOpenGL自说自话地学习OpenGL(六)

 

在使用open函数读取文件的时候,如果失败则使用setstate设置failbit

【笔记】跟着LearnOpenGL自说自话地学习OpenGL(六)再看看setstate做了什么

【笔记】跟着LearnOpenGL自说自话地学习OpenGL(六)

 

这里还有一个rdstate的结果。rdstate就是返回当前的流的状态

【笔记】跟着LearnOpenGL自说自话地学习OpenGL(六)

当不为goodbit时,则使用clear,继续往下看这个clear是啥

 

【笔记】跟着LearnOpenGL自说自话地学习OpenGL(六)

这个clear又调用了ios_base里的函数,最终在xiosbase里面找到了底层的实现方式,设置异常抛出从而被catch捕获到

如果当前流的状态和设置的状态码则抛出异常

【笔记】跟着LearnOpenGL自说自话地学习OpenGL(六)

 

Em……..

所以还不如看一个来自文档简单的理解

【笔记】跟着LearnOpenGL自说自话地学习OpenGL(六)

 

总而言之这里通过exception设置已知的异常从而用于当异常发生时让catch捕获,随即进行日志输出

看过一遍这个似乎有些明白这里面是怎么玩的了,似懂非懂,后面再遇到新的不懂的地方再扒代码吧

Em…..有点跑题,不过我觉得还是有必要的,下一节继续回到shader_s.h的内容中吧

相关文章:

  • 2021-05-09
  • 2021-11-11
  • 2021-09-30
  • 2021-07-17
  • 2021-06-20
  • 2022-12-23
  • 2021-10-22
  • 2021-03-31
猜你喜欢
  • 2021-03-31
  • 2021-03-27
  • 2021-08-26
  • 2021-04-07
  • 2021-06-08
  • 2021-07-30
  • 2021-11-26
相关资源
相似解决方案