mirror of
https://github.com/guezoloic/LearnOpenGL.git
synced 2026-01-25 09:34:16 +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