c ++ opengl我如何制作着色器文件并在主cpp中使用它[关闭]
Posted
技术标签:
【中文标题】c ++ opengl我如何制作着色器文件并在主cpp中使用它[关闭]【英文标题】:c++ opengl how can i make a shader file and use it in main cpp [closed] 【发布时间】:2019-09-01 06:27:54 【问题描述】:我想让opengl读取着色器文件并在主cpp中使用它
我在 thechernoproject 频道尝试了教程,但有一个问题
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() ;
我预计它会工作,但它没有显示它已获取文件
【问题讨论】:
【参考方案1】:您在问题中提供的代码似乎读取了文件的一些额外信息,这不是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中使用它[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
我的OpenGL学习进阶之旅如何抽取着色器代码到assets目录下的GLSL文件,以及如何通过Java或者C++代码来加载着GLSL文件?