Shader::Shader(const char* vertexShader_path, const char* fragmentShader_path)
{
int success;
char infoLog[512];
ID = glCreateProgram();//创建programID
const char* vertexShaderSource = Load(vertexShader_path);//读取顶点着色器资源
GLuint vertexShaderID = glCreateShader(GL_VERTEX_SHADER);//创建顶点着色器ID
glShaderSource(vertexShaderID, 1, &vertexShaderSource, 0);//绑定资源
glCompileShader(vertexShaderID);//编译顶点着色器
glGetShaderiv(vertexShaderID, GL_COMPILE_STATUS, &success);//检测是否编译成功
if (!success)//如果失败
{
glGetShaderInfoLog(vertexShaderID, 512, NULL, infoLog);//获取错误日志
std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
};
const char* fragmentShaderSource = Load(fragmentShader_path);//读取片段着色器资源
GLuint fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);//创建片段着色器ID
glShaderSource(fragmentShaderID, 1, &fragmentShaderSource, 0);//绑定资源
glCompileShader(fragmentShaderID);//编译片段着色器
glGetShaderiv(fragmentShaderID, GL_COMPILE_STATUS, &success);//检测是否编译成功
if (!success)//如果失败
{
glGetShaderInfoLog(fragmentShaderID, 512, NULL, infoLog);//获取错误日志
std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl;
};
//链接着色器至program
glAttachShader(ID, vertexShaderID);
glAttachShader(ID, fragmentShaderID);
//删除着色器
glDeleteShader(vertexShaderID);
glDeleteShader(fragmentShaderID);
}
#version 330 core
layout(location = 0) in vec3 aPos;
layout(location = 1) in vec3 aColor;
out vec3 vColor;
void main()
{
gl_Position = vec4(aPos,1.0f);
vColor = aColor;
}