c++ opengl我如何制作着色器文件并在主cpp中使用它

标签 c++ opengl shader glfw

<分区>

我想让opengl读取着色器文件并在主cpp中使用它

我尝试了 thechernoproject channel 的教程,但是有问题

struct ShaderProgramSource
{
    std::string VertexSource;
    std::string FragmentSource;
};
static ShaderProgramSource ParseShader(const std::string& filepath) {
    std::fstream stream(filepath);

    enum class ShaderType {
        NONE = -1, VERTEX = 0, FRAGMENT = 1
    };

    std::string line;
    std::stringstream ss[2];
    ShaderType type = ShaderType::NONE;
    while (getline(stream, line))
    {
        if (line.find("#shader") != std::string::npos) {
            if (line.find("vertex") != std::string::npos) {
                ShaderType type = ShaderType::VERTEX;
            }
            else if (line.find("fragment") != std::string::npos) {
                ShaderType type = ShaderType::FRAGMENT;
            }
        }
        else
        {
            ss[int(type)] << line << '\n';
        }
    }
    return{ ss[0].str(), ss[1].str() };
}

我希望它能工作,但它没有显示它正在获取文件

最佳答案

您在问题中提供的代码似乎读取了文件的一些额外信息,这些信息不是 OpenGL Shading Language 的一部分。 :

有点像

#shader vertex

如果你想读取一个 char 编码的文本文件(比如 glsl 文件),那么我建议使用 std::istreambuf_iterator

std::ifstream sourceFile(filepath, std::fstream::in);
std::string sourceCode;
if (sourceFile.is_open())
    sourceCode = std::string(std::istreambuf_iterator<char>(sourceFile), 
                             std::istreambuf_iterator<char>());

关于c++ opengl我如何制作着色器文件并在主cpp中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57743703/

相关文章:

c++ - 设置基本着色器程序 - GLchar 和 file_contents 未定义?

directx - HLSL 将单个 float 传递给 PS?

c++ - 优化:在多个对象使用之前预分配一 block 堆内存 - yield ?

c++ - 什么是复制省略和返回值优化?

c++ - 使用 istream_iterator 复制

c++ - Ogre3d/Compositor 相关问题

c++ - 获取已重载 operator& 的对象的地址

c++ - 尝试使用 C++ 将着色器应用于 OpenGL 中的顶点数组的问题

opengl - 在Minecraft的多维数据集世界中,如何进行面部去除?

swift - 在 Swift 项目中使用 OpenGL