will let us cache shaders.legacy
| @@ -44,6 +44,16 @@ private: | |||||
| * Public Shader class | * Public Shader class | ||||
| */ | */ | ||||
| Shader *Shader::Create(char const *vert, char const *frag) | |||||
| { | |||||
| return new Shader(vert, frag); | |||||
| } | |||||
| void Shader::Destroy(Shader *shader) | |||||
| { | |||||
| delete shader; | |||||
| } | |||||
| Shader::Shader(char const *vert, char const *frag) | Shader::Shader(char const *vert, char const *frag) | ||||
| : data(new ShaderData()) | : data(new ShaderData()) | ||||
| { | { | ||||
| @@ -76,7 +86,7 @@ Shader::Shader(char const *vert, char const *frag) | |||||
| int Shader::GetAttribLocation(char const *attr) const | int Shader::GetAttribLocation(char const *attr) const | ||||
| { | { | ||||
| return glGetAttribLocation(data->prog_id, attr); | |||||
| return glGetAttribLocation(data->prog_id, attr); | |||||
| } | } | ||||
| int Shader::GetUniformLocation(char const *uni) const | int Shader::GetUniformLocation(char const *uni) const | ||||
| @@ -10,7 +10,7 @@ | |||||
| // | // | ||||
| // The Shader class | // The Shader class | ||||
| // -------------- | |||||
| // ---------------- | |||||
| // | // | ||||
| #if !defined __DH_SHADER_H__ | #if !defined __DH_SHADER_H__ | ||||
| @@ -21,14 +21,18 @@ class ShaderData; | |||||
| class Shader | class Shader | ||||
| { | { | ||||
| public: | public: | ||||
| Shader(char const *vert, char const *frag); | |||||
| ~Shader(); | |||||
| static Shader *Create(char const *vert, char const *frag); | |||||
| static void Destroy(Shader *shader); | |||||
| int GetAttribLocation(char const *attr) const; | int GetAttribLocation(char const *attr) const; | ||||
| int GetUniformLocation(char const *uni) const; | int GetUniformLocation(char const *uni) const; | ||||
| void Bind() const; | void Bind() const; | ||||
| protected: | |||||
| Shader(char const *vert, char const *frag); | |||||
| ~Shader(); | |||||
| private: | private: | ||||
| ShaderData *data; | ShaderData *data; | ||||
| }; | }; | ||||
| @@ -85,7 +85,7 @@ void Video::Setup(int width, int height) | |||||
| glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); | glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); | ||||
| #if LOL_EXPERIMENTAL | #if LOL_EXPERIMENTAL | ||||
| stdshader = new Shader(vertexshader, fragmentshader); | |||||
| stdshader = Shader::Create(vertexshader, fragmentshader); | |||||
| #endif | #endif | ||||
| } | } | ||||
| @@ -168,7 +168,7 @@ void Video::Clear() | |||||
| void Video::Destroy() | void Video::Destroy() | ||||
| { | { | ||||
| #if LOL_EXPERIMENTAL | #if LOL_EXPERIMENTAL | ||||
| delete stdshader; | |||||
| Shader::Destroy(stdshader); | |||||
| #endif | #endif | ||||
| } | } | ||||