当作为 GLUT 项目的一部分包含时,函数不会读取文件

Posted

技术标签:

【中文标题】当作为 GLUT 项目的一部分包含时,函数不会读取文件【英文标题】:Function doesn't read a file when included as a part of a GLUT project 【发布时间】:2015-07-17 14:22:32 【问题描述】:

我创建了一个函数,您可以在其中输入文件并返回包含文件内容的字符串:

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 项目的一部分执行时,它什么也不返回。

这些是构成项目的其余文件(我已经隐藏了主文件的多余部分):

file_to_string.h

#include <iostream>
#include <string>

std::string file_to_(const char* name);

ma​​in.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);

【问题讨论】:

那么您的意思是,当您在未向我们展示的上下文中运行它时,它“什么也不返回”?无论如何,这几乎可以肯定是一个相对路径问题...... 您可以随时测试文件是否尚未打开,然后实际上不会从中读取,但可能会抛出错误或其他东西。 此文件包含在 GLUT 项目中。 【参考方案1】:

我发现了问题。事实证明,正如“轨道上的亮度竞赛”所说,这是一个链接问题。为了让 CodeBlocks 识别着色器文件,文件名必须包含调用函数时的完整路径。

【讨论】:

以上是关于当作为 GLUT 项目的一部分包含时,函数不会读取文件的主要内容,如果未能解决你的问题,请参考以下文章

根据使用 GLUT/OpenGL 所经过的时间移动我的相机时遇到了一个小问题

从位图图像中读取2D纹理(C ++,OpenGL)

添加到 ASP.NET Core 项目中的 site.css 文件时,CSS 不起作用。但是当作为内联添加时有效

包括 Box2D、GLUT 等库

当作为 COM 对象访问时,SslStream 的响应不同

OpenGL中实现双缓冲技术