我刚开始学习OpenGL,但我遇到了一个小问题。我写了一个自定义函数来从文件中读取着色器,这里是。
char* ReadShaderSource(const char* path)
{
std::ifstream is(path, std::ios::in);
if (!is)
return NULL;
is.seekg(0, std::ios::end);
long size = is.tellg();
is.seekg(0, std::ios::beg);
char *src = new char[size + 1];
is.read(src, size);
src[size] = '\0';
return src;
}
正如您所看到的,在将指针移动到文件末尾之后,我使用is.tellg()来获取文件的大小。但是,在一个简单的着色器中,它显示的计数超过它实际的数量。 #version 150
in vec4 pos;
void main()
{
gl_Position = pos;
}
这里,大小应该是66(我手动计算,我可能会被1或2个字符关闭)。但是,它显示为73.我认为\ n \ r被读为\ n可能与错误的字符数有关,但我不确定。
无论哪种方式,我的问题是,为什么我得到错误的数字,我怎么能正确地得到它。
注意:我知道计算文件大小的其他方法,或者更好的是,直接读取std :: string中的内容然后将它们转换为char *,但我想知道问题是什么在这段代码中,以及我如何解决它。
答案 0 :(得分:1)
你没有计算6个回车字符和一个标签(它总计你缺少的7个字符),但tellg()
确实如此。