shader class has improved ownership handling stuff garbage thingies

This commit is contained in:
Robert 2021-01-21 01:00:42 +01:00
parent d9cd0f19cb
commit 4fe91a12e2
3 changed files with 101 additions and 83 deletions

View file

@ -55,10 +55,10 @@ int main(int argc, char** argv)
{ 1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float)) } { 1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float)) }
}; };
oglu::Shader* shader; oglu::Shader shader;
try try
{ {
shader = new oglu::Shader("shaders/vertexShader.vert", "shaders/fragmentShader.frag"); shader = oglu::MakeShader("shaders/vertexShader.vert", "shaders/fragmentShader.frag");
} }
catch (const std::exception& e) catch (const std::exception& e)
{ {

View file

@ -1,6 +1,7 @@
#ifndef SHADER_HPP #ifndef SHADER_HPP
#define SHADER_HPP #define SHADER_HPP
#include <memory>
#include <core.hpp> #include <core.hpp>
#include <glad/glad.h> #include <glad/glad.h>
@ -8,11 +9,12 @@ namespace oglu
{ {
class Color; class Color;
class OGLU_API Shader class OGLU_API AbstractShader
{ {
public: public:
Shader(const char* vertexShaderFile, const char* fragmentShaderFile); friend std::shared_ptr<AbstractShader> OGLU_API MakeShader(const char* vertexShaderFile, const char* fragmentShaderFile);
~Shader(); AbstractShader(const AbstractShader& other);
~AbstractShader();
void Use(); void Use();
@ -123,11 +125,15 @@ namespace oglu
#pragma endregion Uniforms #pragma endregion Uniforms
private: private:
AbstractShader(const char* vertexShaderFile, const char* fragmentShaderFile);
void LoadShaderSource(const char* filename, char** buffer); void LoadShaderSource(const char* filename, char** buffer);
private: private:
GLuint vertexShader, fragmentShader, program; GLuint program;
}; };
typedef std::shared_ptr<AbstractShader> Shader;
} }
#endif #endif

View file

@ -9,14 +9,26 @@
namespace oglu namespace oglu
{ {
Shader::Shader(const char* vertexShaderFile, const char* fragmentShaderFile) : AbstractShader::AbstractShader(const AbstractShader& other) :
vertexShader(0), fragmentShader(0) program(other.program)
{
}
std::shared_ptr<AbstractShader> MakeShader(const char* vertexShaderFile, const char* fragmentShaderFile)
{
AbstractShader* tmp = new AbstractShader(vertexShaderFile, fragmentShaderFile);
return std::shared_ptr<AbstractShader>(tmp);
}
AbstractShader::AbstractShader(const char* vertexShaderFile, const char* fragmentShaderFile) :
program(0)
{ {
// Load vertex shader // Load vertex shader
char* source = nullptr; char* source = nullptr;
LoadShaderSource(vertexShaderFile, &source); LoadShaderSource(vertexShaderFile, &source);
vertexShader = glCreateShader(GL_VERTEX_SHADER); GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &source, NULL); glShaderSource(vertexShader, 1, &source, NULL);
glCompileShader(vertexShader); glCompileShader(vertexShader);
@ -34,7 +46,7 @@ namespace oglu
// Load Fragment shader // Load Fragment shader
LoadShaderSource(fragmentShaderFile, &source); LoadShaderSource(fragmentShaderFile, &source);
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &source, NULL); glShaderSource(fragmentShader, 1, &source, NULL);
glCompileShader(fragmentShader); glCompileShader(fragmentShader);
@ -65,148 +77,148 @@ namespace oglu
glDeleteShader(vertexShader); glDeleteShader(vertexShader);
} }
Shader::~Shader() AbstractShader::~AbstractShader()
{ {
glDeleteProgram(program);
} }
void Shader::Use() void AbstractShader::Use()
{ {
glUseProgram(program); glUseProgram(program);
} }
GLint Shader::GetUniformLocation(const GLchar* name) GLint AbstractShader::GetUniformLocation(const GLchar* name)
{ {
return glGetUniformLocation(program, name); return glGetUniformLocation(program, name);
} }
#pragma region Uniforms #pragma region Uniforms
void Shader::SetUniform(const GLchar* name, GLfloat v0) void AbstractShader::SetUniform(const GLchar* name, GLfloat v0)
{ {
glUniform1f(glGetUniformLocation(program, name), v0); glUniform1f(glGetUniformLocation(program, name), v0);
} }
void Shader::SetUniform(GLint location, GLfloat v0) void AbstractShader::SetUniform(GLint location, GLfloat v0)
{ {
glUniform1f(location, v0); glUniform1f(location, v0);
} }
void Shader::SetUniform(const GLchar* name, GLfloat v0, GLfloat v1) void AbstractShader::SetUniform(const GLchar* name, GLfloat v0, GLfloat v1)
{ {
glUniform2f(glGetUniformLocation(program, name), v0, v1); glUniform2f(glGetUniformLocation(program, name), v0, v1);
} }
void Shader::SetUniform(GLint location, GLfloat v0, GLfloat v1) void AbstractShader::SetUniform(GLint location, GLfloat v0, GLfloat v1)
{ {
glUniform2f(location, v0, v1); glUniform2f(location, v0, v1);
} }
void Shader::SetUniform(const GLchar* name, GLfloat v0, GLfloat v1, GLfloat v2) void AbstractShader::SetUniform(const GLchar* name, GLfloat v0, GLfloat v1, GLfloat v2)
{ {
glUniform3f(glGetUniformLocation(program, name), v0, v1, v2); glUniform3f(glGetUniformLocation(program, name), v0, v1, v2);
} }
void Shader::SetUniform(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) void AbstractShader::SetUniform(GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
{ {
glUniform3f(location, v0, v1, v2); glUniform3f(location, v0, v1, v2);
} }
void Shader::SetUniform(const GLchar* name, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) void AbstractShader::SetUniform(const GLchar* name, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
{ {
glUniform4f(glGetUniformLocation(program, name), v0, v1, v2, v3); glUniform4f(glGetUniformLocation(program, name), v0, v1, v2, v3);
} }
void Shader::SetUniform(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) void AbstractShader::SetUniform(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
{ {
glUniform4f(location, v0, v1, v2, v3); glUniform4f(location, v0, v1, v2, v3);
} }
void Shader::SetUniform(const GLchar* name, GLint v0) void AbstractShader::SetUniform(const GLchar* name, GLint v0)
{ {
glUniform1i(glGetUniformLocation(program, name), v0); glUniform1i(glGetUniformLocation(program, name), v0);
} }
void Shader::SetUniform(GLint location, GLint v0) void AbstractShader::SetUniform(GLint location, GLint v0)
{ {
glUniform1i(location, v0); glUniform1i(location, v0);
} }
void Shader::SetUniform(const GLchar* name, GLint v0, GLint v1) void AbstractShader::SetUniform(const GLchar* name, GLint v0, GLint v1)
{ {
glUniform2i(glGetUniformLocation(program, name), v0, v1); glUniform2i(glGetUniformLocation(program, name), v0, v1);
} }
void Shader::SetUniform(GLint location, GLint v0, GLint v1) void AbstractShader::SetUniform(GLint location, GLint v0, GLint v1)
{ {
glUniform2i(location, v0, v1); glUniform2i(location, v0, v1);
} }
void Shader::SetUniform(const GLchar* name, GLint v0, GLint v1, GLint v2) void AbstractShader::SetUniform(const GLchar* name, GLint v0, GLint v1, GLint v2)
{ {
glUniform3i(glGetUniformLocation(program, name), v0, v1, v2); glUniform3i(glGetUniformLocation(program, name), v0, v1, v2);
} }
void Shader::SetUniform(GLint location, GLint v0, GLint v1, GLint v2) void AbstractShader::SetUniform(GLint location, GLint v0, GLint v1, GLint v2)
{ {
glUniform3i(location, v0, v1, v2); glUniform3i(location, v0, v1, v2);
} }
void Shader::SetUniform(const GLchar* name, GLint v0, GLint v1, GLint v2, GLint v3) void AbstractShader::SetUniform(const GLchar* name, GLint v0, GLint v1, GLint v2, GLint v3)
{ {
glUniform4i(glGetUniformLocation(program, name), v0, v1, v2, v3); glUniform4i(glGetUniformLocation(program, name), v0, v1, v2, v3);
} }
void Shader::SetUniform(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) void AbstractShader::SetUniform(GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
{ {
glUniform4i(location, v0, v1, v2, v3); glUniform4i(location, v0, v1, v2, v3);
} }
void Shader::SetUniform(const GLchar* name, GLuint v0) void AbstractShader::SetUniform(const GLchar* name, GLuint v0)
{ {
glUniform1ui(glGetUniformLocation(program, name), v0); glUniform1ui(glGetUniformLocation(program, name), v0);
} }
void Shader::SetUniform(GLint location, GLuint v0) void AbstractShader::SetUniform(GLint location, GLuint v0)
{ {
glUniform1ui(location, v0); glUniform1ui(location, v0);
} }
void Shader::SetUniform(const GLchar* name, GLuint v0, GLuint v1) void AbstractShader::SetUniform(const GLchar* name, GLuint v0, GLuint v1)
{ {
glUniform2ui(glGetUniformLocation(program, name), v0, v1); glUniform2ui(glGetUniformLocation(program, name), v0, v1);
} }
void Shader::SetUniform(GLint location, GLuint v0, GLuint v1) void AbstractShader::SetUniform(GLint location, GLuint v0, GLuint v1)
{ {
glUniform2ui(location, v0, v1); glUniform2ui(location, v0, v1);
} }
void Shader::SetUniform(const GLchar* name, GLuint v0, GLuint v1, GLuint v2) void AbstractShader::SetUniform(const GLchar* name, GLuint v0, GLuint v1, GLuint v2)
{ {
glUniform3ui(glGetUniformLocation(program, name), v0, v1, v2); glUniform3ui(glGetUniformLocation(program, name), v0, v1, v2);
} }
void Shader::SetUniform(GLint location, GLuint v0, GLuint v1, GLuint v2) void AbstractShader::SetUniform(GLint location, GLuint v0, GLuint v1, GLuint v2)
{ {
glUniform3ui(location, v0, v1, v2); glUniform3ui(location, v0, v1, v2);
} }
void Shader::SetUniform(const GLchar* name, GLuint v0, GLuint v1, GLuint v2, GLuint v3) void AbstractShader::SetUniform(const GLchar* name, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
{ {
glUniform4ui(glGetUniformLocation(program, name), v0, v1, v2, v3); glUniform4ui(glGetUniformLocation(program, name), v0, v1, v2, v3);
} }
void Shader::SetUniform(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) void AbstractShader::SetUniform(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
{ {
glUniform4ui(location, v0, v1, v2, v3); glUniform4ui(location, v0, v1, v2, v3);
} }
void Shader::SetUniform(const GLchar* name, const Color* v0, bool ignoreAlpha) void AbstractShader::SetUniform(const GLchar* name, const Color* v0, bool ignoreAlpha)
{ {
SetUniform(glGetUniformLocation(program, name), v0, ignoreAlpha); SetUniform(glGetUniformLocation(program, name), v0, ignoreAlpha);
} }
void Shader::SetUniform(GLint location, const Color* v0, bool ignoreAlpha) void AbstractShader::SetUniform(GLint location, const Color* v0, bool ignoreAlpha)
{ {
if (ignoreAlpha) if (ignoreAlpha)
glUniform3f(location, v0->r, v0->g, v0->b); glUniform3f(location, v0->r, v0->g, v0->b);
@ -214,218 +226,218 @@ namespace oglu
glUniform4f(location, v0->r, v0->g, v0->b, v0->a); glUniform4f(location, v0->r, v0->g, v0->b, v0->a);
} }
void Shader::SetUniform1fv(const GLchar* name, GLsizei count, const GLfloat* value) void AbstractShader::SetUniform1fv(const GLchar* name, GLsizei count, const GLfloat* value)
{ {
glUniform1fv(glGetUniformLocation(program, name), count, value); glUniform1fv(glGetUniformLocation(program, name), count, value);
} }
void Shader::SetUniform1fv(GLint location, GLsizei count, const GLfloat* value) void AbstractShader::SetUniform1fv(GLint location, GLsizei count, const GLfloat* value)
{ {
glUniform1fv(location, count, value); glUniform1fv(location, count, value);
} }
void Shader::SetUniform2fv(const GLchar* name, GLsizei count, const GLfloat* value) void AbstractShader::SetUniform2fv(const GLchar* name, GLsizei count, const GLfloat* value)
{ {
glUniform2fv(glGetUniformLocation(program, name), count, value); glUniform2fv(glGetUniformLocation(program, name), count, value);
} }
void Shader::SetUniform2fv(GLint location, GLsizei count, const GLfloat* value) void AbstractShader::SetUniform2fv(GLint location, GLsizei count, const GLfloat* value)
{ {
glUniform2fv(location, count, value); glUniform2fv(location, count, value);
} }
void Shader::SetUniform3fv(const GLchar* name, GLsizei count, const GLfloat* value) void AbstractShader::SetUniform3fv(const GLchar* name, GLsizei count, const GLfloat* value)
{ {
glUniform3fv(glGetUniformLocation(program, name), count, value); glUniform3fv(glGetUniformLocation(program, name), count, value);
} }
void Shader::SetUniform3fv(GLint location, GLsizei count, const GLfloat* value) void AbstractShader::SetUniform3fv(GLint location, GLsizei count, const GLfloat* value)
{ {
glUniform3fv(location, count, value); glUniform3fv(location, count, value);
} }
void Shader::SetUniform4fv(const GLchar* name, GLsizei count, const GLfloat* value) void AbstractShader::SetUniform4fv(const GLchar* name, GLsizei count, const GLfloat* value)
{ {
glUniform4fv(glGetUniformLocation(program, name), count, value); glUniform4fv(glGetUniformLocation(program, name), count, value);
} }
void Shader::SetUniform4fv(GLint location, GLsizei count, const GLfloat* value) void AbstractShader::SetUniform4fv(GLint location, GLsizei count, const GLfloat* value)
{ {
glUniform4fv(location, count, value); glUniform4fv(location, count, value);
} }
void Shader::SetUniform1iv(const GLchar* name, GLsizei count, const GLint* value) void AbstractShader::SetUniform1iv(const GLchar* name, GLsizei count, const GLint* value)
{ {
glUniform1iv(glGetUniformLocation(program, name), count, value); glUniform1iv(glGetUniformLocation(program, name), count, value);
} }
void Shader::SetUniform1iv(GLint location, GLsizei count, const GLint* value) void AbstractShader::SetUniform1iv(GLint location, GLsizei count, const GLint* value)
{ {
glUniform1iv(location, count, value); glUniform1iv(location, count, value);
} }
void Shader::SetUniform2iv(const GLchar* name, GLsizei count, const GLint* value) void AbstractShader::SetUniform2iv(const GLchar* name, GLsizei count, const GLint* value)
{ {
glUniform2iv(glGetUniformLocation(program, name), count, value); glUniform2iv(glGetUniformLocation(program, name), count, value);
} }
void Shader::SetUniform2iv(GLint location, GLsizei count, const GLint* value) void AbstractShader::SetUniform2iv(GLint location, GLsizei count, const GLint* value)
{ {
glUniform2iv(location, count, value); glUniform2iv(location, count, value);
} }
void Shader::SetUniform3iv(const GLchar* name, GLsizei count, const GLint* value) void AbstractShader::SetUniform3iv(const GLchar* name, GLsizei count, const GLint* value)
{ {
glUniform3iv(glGetUniformLocation(program, name), count, value); glUniform3iv(glGetUniformLocation(program, name), count, value);
} }
void Shader::SetUniform3iv(GLint location, GLsizei count, const GLint* value) void AbstractShader::SetUniform3iv(GLint location, GLsizei count, const GLint* value)
{ {
glUniform3iv(location, count, value); glUniform3iv(location, count, value);
} }
void Shader::SetUniform4iv(const GLchar* name, GLsizei count, const GLint* value) void AbstractShader::SetUniform4iv(const GLchar* name, GLsizei count, const GLint* value)
{ {
glUniform4iv(glGetUniformLocation(program, name), count, value); glUniform4iv(glGetUniformLocation(program, name), count, value);
} }
void Shader::SetUniform4iv(GLint location, GLsizei count, const GLint* value) void AbstractShader::SetUniform4iv(GLint location, GLsizei count, const GLint* value)
{ {
glUniform4iv(location, count, value); glUniform4iv(location, count, value);
} }
void Shader::SetUniform1uiv(const GLchar* name, GLsizei count, const GLuint* value) void AbstractShader::SetUniform1uiv(const GLchar* name, GLsizei count, const GLuint* value)
{ {
glUniform1uiv(glGetUniformLocation(program, name), count, value); glUniform1uiv(glGetUniformLocation(program, name), count, value);
} }
void Shader::SetUniform1uiv(GLint location, GLsizei count, const GLuint* value) void AbstractShader::SetUniform1uiv(GLint location, GLsizei count, const GLuint* value)
{ {
glUniform1uiv(location, count, value); glUniform1uiv(location, count, value);
} }
void Shader::SetUniform2uiv(const GLchar* name, GLsizei count, const GLuint* value) void AbstractShader::SetUniform2uiv(const GLchar* name, GLsizei count, const GLuint* value)
{ {
glUniform2uiv(glGetUniformLocation(program, name), count, value); glUniform2uiv(glGetUniformLocation(program, name), count, value);
} }
void Shader::SetUniform2uiv(GLint location, GLsizei count, const GLuint* value) void AbstractShader::SetUniform2uiv(GLint location, GLsizei count, const GLuint* value)
{ {
glUniform2uiv(location, count, value); glUniform2uiv(location, count, value);
} }
void Shader::SetUniform3uiv(const GLchar* name, GLsizei count, const GLuint* value) void AbstractShader::SetUniform3uiv(const GLchar* name, GLsizei count, const GLuint* value)
{ {
glUniform3uiv(glGetUniformLocation(program, name), count, value); glUniform3uiv(glGetUniformLocation(program, name), count, value);
} }
void Shader::SetUniform3uiv(GLint location, GLsizei count, const GLuint* value) void AbstractShader::SetUniform3uiv(GLint location, GLsizei count, const GLuint* value)
{ {
glUniform3uiv(location, count, value); glUniform3uiv(location, count, value);
} }
void Shader::SetUniform4uiv(const GLchar* name, GLsizei count, const GLuint* value) void AbstractShader::SetUniform4uiv(const GLchar* name, GLsizei count, const GLuint* value)
{ {
glUniform4uiv(glGetUniformLocation(program, name), count, value); glUniform4uiv(glGetUniformLocation(program, name), count, value);
} }
void Shader::SetUniform4uiv(GLint location, GLsizei count, const GLuint* value) void AbstractShader::SetUniform4uiv(GLint location, GLsizei count, const GLuint* value)
{ {
glUniform4uiv(location, count, value); glUniform4uiv(location, count, value);
} }
void Shader::SetUniformMatrix2fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix2fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix2fv(glGetUniformLocation(program, name), count, transpose, value); glUniformMatrix2fv(glGetUniformLocation(program, name), count, transpose, value);
} }
void Shader::SetUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix2fv(location, count, transpose, value); glUniformMatrix2fv(location, count, transpose, value);
} }
void Shader::SetUniformMatrix3fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix3fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix3fv(glGetUniformLocation(program, name), count, transpose, value); glUniformMatrix3fv(glGetUniformLocation(program, name), count, transpose, value);
} }
void Shader::SetUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix3fv(location, count, transpose, value); glUniformMatrix3fv(location, count, transpose, value);
} }
void Shader::SetUniformMatrix4fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix4fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix4fv(glGetUniformLocation(program, name), count, transpose, value); glUniformMatrix4fv(glGetUniformLocation(program, name), count, transpose, value);
} }
void Shader::SetUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix4fv(location, count, transpose, value); glUniformMatrix4fv(location, count, transpose, value);
} }
void Shader::SetUniformMatrix2x3fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix2x3fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix2x3fv(glGetUniformLocation(program, name), count, transpose, value); glUniformMatrix2x3fv(glGetUniformLocation(program, name), count, transpose, value);
} }
void Shader::SetUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix2x3fv(location, count, transpose, value); glUniformMatrix2x3fv(location, count, transpose, value);
} }
void Shader::SetUniformMatrix3x2fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix3x2fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix3x2fv(glGetUniformLocation(program, name), count, transpose, value); glUniformMatrix3x2fv(glGetUniformLocation(program, name), count, transpose, value);
} }
void Shader::SetUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix3x2fv(location, count, transpose, value); glUniformMatrix3x2fv(location, count, transpose, value);
} }
void Shader::SetUniformMatrix2x4fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix2x4fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix2x4fv(glGetUniformLocation(program, name), count, transpose, value); glUniformMatrix2x4fv(glGetUniformLocation(program, name), count, transpose, value);
} }
void Shader::SetUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix2x4fv(location, count, transpose, value); glUniformMatrix2x4fv(location, count, transpose, value);
} }
void Shader::SetUniformMatrix4x2fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix4x2fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix4x2fv(glGetUniformLocation(program, name), count, transpose, value); glUniformMatrix4x2fv(glGetUniformLocation(program, name), count, transpose, value);
} }
void Shader::SetUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix4x2fv(location, count, transpose, value); glUniformMatrix4x2fv(location, count, transpose, value);
} }
void Shader::SetUniformMatrix3x4fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix3x4fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix3x4fv(glGetUniformLocation(program, name), count, transpose, value); glUniformMatrix3x4fv(glGetUniformLocation(program, name), count, transpose, value);
} }
void Shader::SetUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix3x4fv(location, count, transpose, value); glUniformMatrix3x4fv(location, count, transpose, value);
} }
void Shader::SetUniformMatrix4x3fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix4x3fv(const GLchar* name, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix4x3fv(glGetUniformLocation(program, name), count, transpose, value); glUniformMatrix4x3fv(glGetUniformLocation(program, name), count, transpose, value);
} }
void Shader::SetUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) void AbstractShader::SetUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{ {
glUniformMatrix4x3fv(location, count, transpose, value); glUniformMatrix4x3fv(location, count, transpose, value);
} }
#pragma endregion Uniforms #pragma endregion Uniforms
void Shader::LoadShaderSource(const char* filename, char** buffer) void AbstractShader::LoadShaderSource(const char* filename, char** buffer)
{ {
std::ifstream file(filename); std::ifstream file(filename);
if (!file.good()) if (!file.good())