mirror of
https://github.com/guezoloic/LearnOpenGL.git
synced 2026-01-25 03:34:15 +00:00
feat(shader): add shader file
This commit is contained in:
28
inc/shader.hpp
Executable file
28
inc/shader.hpp
Executable file
@@ -0,0 +1,28 @@
|
||||
#ifndef SHADER_HPP
|
||||
#define SHADER_HPP
|
||||
|
||||
#include <gl/glew.h>
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <glm/gtc/type_ptr.hpp>
|
||||
|
||||
class Shaders
|
||||
{
|
||||
private:
|
||||
GLuint vertexShader;
|
||||
GLuint fragmentShader;
|
||||
GLuint shaderProgram;
|
||||
|
||||
void addVertShader(const char* vertexShaderSource);
|
||||
void addFragShader(const char* fragmentShaderSource);
|
||||
void compileInProgram();
|
||||
|
||||
public:
|
||||
Shaders(const char* vertexShaderSource, const char* fragmentShaderSource);
|
||||
~Shaders();
|
||||
|
||||
GLuint getProgram() const;
|
||||
void use() const;
|
||||
};
|
||||
|
||||
#endif
|
||||
52
src/shader.cpp
Executable file
52
src/shader.cpp
Executable file
@@ -0,0 +1,52 @@
|
||||
#include "shader.hpp"
|
||||
|
||||
Shaders::Shaders(const char* vertexShaderSource, const char* fragmentShaderSource)
|
||||
{
|
||||
vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
||||
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
shaderProgram = glCreateProgram();
|
||||
|
||||
addVertShader(vertexShaderSource);
|
||||
addFragShader(fragmentShaderSource);
|
||||
|
||||
compileInProgram();
|
||||
}
|
||||
|
||||
void Shaders::addVertShader(const char* vertexShaderSource)
|
||||
{
|
||||
glShaderSource(vertexShader, 1, &vertexShaderSource, nullptr);
|
||||
glCompileShader(vertexShader);
|
||||
}
|
||||
|
||||
void Shaders::addFragShader(const char* fragmentShaderSource)
|
||||
{
|
||||
glShaderSource(fragmentShader, 1, &fragmentShaderSource, nullptr);
|
||||
glCompileShader(fragmentShader);
|
||||
}
|
||||
|
||||
void Shaders::compileInProgram()
|
||||
{
|
||||
glAttachShader(shaderProgram, vertexShader);
|
||||
glAttachShader(shaderProgram, fragmentShader);
|
||||
glLinkProgram(shaderProgram);
|
||||
|
||||
glDetachShader(shaderProgram, vertexShader);
|
||||
glDetachShader(shaderProgram, fragmentShader);
|
||||
glDeleteShader(vertexShader);
|
||||
glDeleteShader(fragmentShader);
|
||||
}
|
||||
|
||||
Shaders::~Shaders()
|
||||
{
|
||||
glDeleteProgram(shaderProgram);
|
||||
}
|
||||
|
||||
void Shaders::use() const
|
||||
{
|
||||
glUseProgram(shaderProgram);
|
||||
}
|
||||
|
||||
GLuint Shaders::getProgram() const
|
||||
{
|
||||
return shaderProgram;
|
||||
}
|
||||
Reference in New Issue
Block a user