【发布时间】:2020-04-06 14:28:48
【问题描述】:
我在 Visual Studio 中处理一个 OpenGL 项目,我在同一个文件中有两个着色器一个片段 着色器和顶点着色器,在片段着色器之前我有一行说#shader片段和之前 顶点着色器一行说#shader vertex,我做了一个可以解析和分离2个着色器的函数,这个函数是 叫叫parseshader
注意:我有一个结构的原因是我希望它输出 2 两个字符串,一个包含顶点着色器的字符串和一个包含片段着色器的字符串 我希望它输出两个字符串,因为我有另一个函数来编译具有两个参数的着色器,即顶点着色器代码和片段着色器代码
struct shaderProgramSource
{
std::string VertexSource;
std::string FragmentSource;
};
static shaderProgramSource parseShader(const std::string& filepath) {
enum class shadertype{
NONE = -1 ,VERTEX = 0 ,FRAGMENT = 1
};
std::ifstream stream(filepath);
std::stringstream ss[2];
shadertype type = shadertype::NONE;
std::string line;
while (getline(stream, line))
{
if (line.find("#shader") != std::string::npos)
{
if (line.find("vertex") != std::string::npos)
shadertype type = shadertype::VERTEX;
else if(line.find("fragment") != std::string::npos)
shadertype type = shadertype::FRAGMENT;
}
else
ss[(int)type] << line << "\n";
}
return { ss[0].str(),ss[1].str() };
}
问题是我在写 ss[(int)type] C6385 从“ss”读取无效数据:可读大小为“352”字节,但可以读取“-176”字节。
【问题讨论】:
标签: c++ visual-c++