当作为 GLUT 项目的一部分包含时,函数不会读取文件
Function doesn't read a file when included as a part of a GLUT project
我创建了一个函数,您可以在其中输入一个文件,它 returns 一个包含文件内容的字符串:
file_to_string.cpp
#include <fstream>
#include "file_to_string.h"
std::string file_to_(const char* name)
{
std::ifstream in(name);
std::string output((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>());
return output;
}
当我在同一个文件中调用这个函数时,它工作正常。但是,当我将此文件作为 GLUT 项目的一部分执行时,它 returns 什么都没有。
这些是构成该项目的其余文件(我已经删除了主文件的多余部分):
file_to_string.h
#include <iostream>
#include <string>
std::string file_to_(const char* name);
main.cpp
#include <GL/glut.h>
#include "file_to_string.h"
static void CheckShaders (void)
{
std::cout << file_to_("shader.vs");
}
int main(int argc, char** argv)
{
CheckShaders();
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(512, 384);
glutInitWindowPosition(100, 100);
glutCreateWindow("Program");
return 0;
}
shader.vs
#version 330
layout (location = 0) in vec3 Position;
void main()
{
gl_Position = vec4(0.5 * Position.x, 0.5 * Position.y, Position.z, 1.0);
}
我找到问题了。事实证明,正如"Lightness Races in Orbit"所说,这是一个链接问题。为了让CodeBlocks能够识别着色器文件,调用函数时文件名必须包含完整路径。
我创建了一个函数,您可以在其中输入一个文件,它 returns 一个包含文件内容的字符串:
file_to_string.cpp
#include <fstream>
#include "file_to_string.h"
std::string file_to_(const char* name)
{
std::ifstream in(name);
std::string output((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>());
return output;
}
当我在同一个文件中调用这个函数时,它工作正常。但是,当我将此文件作为 GLUT 项目的一部分执行时,它 returns 什么都没有。
这些是构成该项目的其余文件(我已经删除了主文件的多余部分):
file_to_string.h
#include <iostream>
#include <string>
std::string file_to_(const char* name);
main.cpp
#include <GL/glut.h>
#include "file_to_string.h"
static void CheckShaders (void)
{
std::cout << file_to_("shader.vs");
}
int main(int argc, char** argv)
{
CheckShaders();
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(512, 384);
glutInitWindowPosition(100, 100);
glutCreateWindow("Program");
return 0;
}
shader.vs
#version 330
layout (location = 0) in vec3 Position;
void main()
{
gl_Position = vec4(0.5 * Position.x, 0.5 * Position.y, Position.z, 1.0);
}
我找到问题了。事实证明,正如"Lightness Races in Orbit"所说,这是一个链接问题。为了让CodeBlocks能够识别着色器文件,调用函数时文件名必须包含完整路径。