【OpenGL】Shader个人学习笔记(2)对Vertex 和 Fragment的命令行代码独立至单独的文件

Deal with Shaders in OpenGL 

书接上文

CreateShader函数 take in 字符创指令生成shader

std::string vertexShader =
	"#version 330 core\n"
	"\n"
	"layout(location = 0) in vec4 position;"// OpenGL的gl_Position是要求一个4维的vector
	"\n"
	"void mian()\n"
	"{\n"
	"	gl_Position = position;\n"
	"}\n";
 
std::string fragmentShader =
	"#version 330 core\n"
	"\n"
	"layout(location = 0) out vec4 color;"// OpenGL的gl_Position是要求一个4维的vector
	"\n"
	"void mian()\n"
	"{\n"
	"	color = vec4(1.0, 0.0, 0.0, 1.0);\n"
	"}\n";

但是很麻烦,要换行还要注意引号

为了解决这个问题,新建一个.shader文件

#shader vertex
#version 330 core

layout(location = 0) in vec4 position;

void mian()
{
	gl_Position = position;
};

#shader fragment
#version 330 core

layout(location = 0) out vec4 color;

void mian()
{
	color = vec4(0.2, 0.3, 0.8, 1.0);
	
};

为了区分shader文件中的vertex shader和fragment shader,创建ParseShader函数

需要引用fstream和sstream头文件

line.find("#shader") != std::string::npos 可以理解为 找到了line中的“#shader”字段

static ShaderProgramSources ParseShader(const std::string& filepath)
{
	std::ifstream stream(filepath);

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

	std::string line;
	std::stringstream ss[2];
	ShaderType type = ShaderType::NONE;
	while (getline(st
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值