我正在编写一个简短的OpenGL程序,需要导入着色器源代码,我使用以下代码(OpenGL希望着色器源代码为c-string):
std::ifstream t("GLshader.vert");
if (!t.is_open()) {
std::cerr << "vertex shader open failed" << std::endl;
}
std::stringstream buffer;
buffer << t.rdbuf();
const char* source = buffer.str().c_str();
std::string s = buffer.str().c_str();
std::cerr << "vs string :" << std::endl << s << std::endl;
std::cerr << "vs source:" << std::endl << source << std::endl;
我真正难过的是有时一切都很好,最后两行代码输出相同的文字。 有时但是,出于某种原因,输出是这样的:
vs string:
/* actual shader code*/
#version 330 core
layout(location=0) in vec3 position;
out vec3 pos;
out vec2 texcoord;
void main(){
pos = position;
texcoord = (position.xy +1.f) / 2.f;
gl_Position = vec4(position, 1.0f);
}
vs source:
@ð4
打印输出以及字符串是因为我不断得到着色器编译错误(再次,有时),并且认为读取文件可能是一些奇怪的并发问题。显然它工作正常,但由于某种原因,c字符串创建有时会失败。
该函数在.dll中调用,我正在使用visual studio。 (我在VS之外运行.exe,问题也出现在那里)
我真的没有想法,有人有答案吗?