主要是按照Opengl的网站学习的Shader文件读取和使用
VertexShader.vs
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;
out vec3 ourColor;
uniform float xOffset;
//输出顶点给片元着色器
out vec3 selfPos;
void main()
{
//向左偏移,倒置三角形
gl_Position = vec4(aPos.x - xOffset, -aPos.y,aPos.z, 1.0);
ourColor = aColor;
selfPos = aPos;
};
FragmentShader.fs
#version 330 core
out vec4 FragColor;
in vec3 ourColor;
in vec3 selfPos;
void main()
{
//FragColor = vec4(ourColor, 1.0f);
FragColor = vec4(selfPos, 1.0f);
};
Shader.h
#ifndef SHADER_H
#define SHADER_H
#include <glad/glad.h>; // 包含glad来获取所有的必须OpenGL头文件
#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
using namespace std;
class Shader
{
public:
Shader();
~Shader();
// 程序ID
unsigned int ID;
// 构造器读取并构建着色器
Shader(const GLchar* vertexPath, const GLchar* fragmentPath)
{
string vertexCode;
string fragmentCode;
ifstream vShaderFile;
ifstream fShaderFile;
//保证ifstream对象可以抛出异常:
vShaderFile.exceptions(ifstream::failbit | ifstream::badbit);
fShaderFile.exceptions(ifstream::failbit | ifstream::badbit);
try
{
vShaderFile.open(vertexPath);
fShaderFile.open(fragmentPath);
stringstream vShaderStream, fShaderStream;
//实现一个流对象指向的内容用另一个流对象来输出
vShaderStream << vShaderFile.rdbuf();
fShaderStream << fShaderFile.rdbuf();
vShaderFile.close();