2013-11-29 1 views
0

Ну, это немного проблема, я не могу загрузить какой-либо файл через программу, которую я сделал. Моя программа прерывается каждый раз, независимо от файла, который я пытаюсь загрузить, поэтому я не совсем уверен, что происходит. В частности, предполагается, что программа загружает шейдеры 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() возвращают ложные каждый раз. Эта проблема возникает только с этой программой, у меня есть другая, которая запускает ту же самую функцию, и она работает нормально.

Как я зову его:

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

Каталог:

enter image description here

+1

проверить путь к файлу. – Raxvan

+0

Файл находится в том же каталоге, в котором программа –

+0

попробует это: 'std :: ifstream ifs; ifs.open (path) ' – Raxvan

ответ

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); 
Смежные вопросы