文件加载问题

时间:2013-11-29 19:30:15

标签: c++ visual-studio-2010

这是一个令人尴尬的问题,我似乎无法通过我制作的程序加载任何类型的文件。无论我尝试加载什么文件,我的程序每次都会失败,所以我不太清楚发生了什么。具体来说,该程序应该是加载GLSL着色器,它一直没有工作。这是我的代码:

static inline GLuint GetProgram(const char* vert,const char* frag)
{
GLuint vertex,fragment;
vertex = glCreateShader(GL_VERTEX_SHADER);
fragment = glCreateShader(GL_FRAGMENT_SHADER);

std::string vCode,fCode;
std::ifstream vss(vert);
std::ifstream fss(frag);

if(vss.is_open())
{
    std::string line;
    while(std::getline(vss,line))
    {
        vCode += line + '\n';
    }
}
else
{
    OutputDebugStringA("ERROR READING VERTEX SHADER\n");
}

if(fss.is_open())
{
    std::string line;
    while(std::getline(fss,line))
    {
        fCode += line + '\n';
    }
}
else
{
    OutputDebugStringA("ERROR READING FRAGMENT SHADER\n");
}

vss.close();
fss.close();
char const* vsp = vCode.c_str();
char const* fsp = fCode.c_str();
glShaderSource(vertex,1,&vsp,NULL);
glShaderSource(fragment,1,&fsp,NULL);

OutputDebugStringA("Vertex Source:\n");
OutputDebugStringA(vsp + '\n');
OutputDebugStringA("Fragment Source:\n");
OutputDebugStringA(fsp + '\n');

glCompileShader(vertex);
glCompileShader(fragment);

GLuint prog = glCreateProgram();

glAttachShader(prog,vertex);
glAttachShader(prog,fragment);
glLinkProgram(prog);

char errbuf[1024];
GLsizei len;
glGetProgramInfoLog(prog,sizeof(errbuf),&len,errbuf);
OutputDebugStringA(errbuf);

glUseProgram(prog);

return prog;
   }

vss.is_open()和fss.is_open()每次都返回false。这个问题只发生在这个程序中,我有另一个运行完全相同的功能列出它的工作正常。

我如何称呼它:

 GLuint program = Shader::GetProgram("v.vert","f.frag");

目录:

enter image description here

1 个答案:

答案 0 :(得分:0)

终于搞定了!只需使用_getcwd(),将我的文件移动到该位置并附加两个着色器的文件名。这是我现在的代码:

static inline GLuint GetProgram(const char* vert,const char* frag)
{
GLuint vertex,fragment;
vertex = glCreateShader(GL_VERTEX_SHADER);
fragment = glCreateShader(GL_FRAGMENT_SHADER);

const char* dir = _getcwd(NULL,0);
std::string var1 = dir;

std::string vCode,fCode;
std::fstream vss;
std::fstream fss;

char* var2 = "/";

std::string vertpath = var1;
std::string fragpath = var1;
vertpath.append(var2);
fragpath.append(var2);
fragpath.append(frag);
vertpath.append(vert);

vss.open(vertpath);
fss.open(fragpath);