48 lines
1.3 KiB
C++
Executable File
48 lines
1.3 KiB
C++
Executable File
#pragma once
|
|
|
|
#include <string>
|
|
#include <td/Maths.h>
|
|
#include <td/render/OpenGL.h>
|
|
|
|
namespace td {
|
|
|
|
namespace render {
|
|
class Renderer;
|
|
} // namespace render
|
|
|
|
namespace shader {
|
|
|
|
class ShaderProgram {
|
|
public:
|
|
ShaderProgram();
|
|
virtual ~ShaderProgram();
|
|
|
|
void Start() const;
|
|
void Stop() const;
|
|
|
|
protected:
|
|
void LoadProgramFile(const std::string& vertexFile, const std::string& fragmentFile);
|
|
void LoadProgram(const std::string& vertexSource, const std::string& fragmentSource);
|
|
|
|
virtual void GetAllUniformLocation() = 0;
|
|
int GetUniformLocation(const std::string& uniformName) const;
|
|
|
|
void LoadFloat(unsigned int location, float value) const;
|
|
void LoadInt(unsigned int location, int value) const;
|
|
void LoadVector(unsigned int location, const Vec2f& vector) const;
|
|
void LoadVector(unsigned int location, const Vec3f& vector) const;
|
|
void LoadBoolean(unsigned int location, bool value) const;
|
|
void LoadMat4(unsigned int location, const Mat4f& mat) const;
|
|
void CleanUp() const;
|
|
|
|
private:
|
|
unsigned int m_ProgramID;
|
|
unsigned int m_VertexShaderID;
|
|
unsigned int m_FragmentShaderID;
|
|
|
|
unsigned int LoadShaderFromFile(const std::string& file, GLenum type);
|
|
unsigned int LoadShader(const std::string& source, GLenum type);
|
|
};
|
|
|
|
} // namespace shader
|
|
} // namespace td
|