diff --git a/uppsrc/GLDraw/Code.cpp b/uppsrc/GLDraw/Code.cpp index d138c109b..38f01986a 100644 --- a/uppsrc/GLDraw/Code.cpp +++ b/uppsrc/GLDraw/Code.cpp @@ -105,19 +105,4 @@ GLCode& GLCode::operator()(int i, Color c, double alpha) return Uniform(i, c.GetR() / 255.0f, c.GetG() / 255.0f, c.GetB() / 255.0f, alpha); } -GLCode::GLCode() -{ - static int64 h; - serialid = ++h; -} - -void GLCode::Use() -{ - static int64 currentid; - if(currentid != serialid) { - serialid = currentid; - glUseProgram(program); - } -} - }; diff --git a/uppsrc/GLDraw/GLDraw.h b/uppsrc/GLDraw/GLDraw.h index cfead5897..7a4494260 100644 --- a/uppsrc/GLDraw/GLDraw.h +++ b/uppsrc/GLDraw/GLDraw.h @@ -43,6 +43,7 @@ protected: GLuint vertex_shader; GLuint fragment_shader; GLuint program; + int64 serialid; public: void Create(const char *vertex_shader, const char *fragment_shader, @@ -61,7 +62,7 @@ public: int GetAttrib(const char *name) { return glGetAttribLocation(program, name); } int GetUniform(const char *name) { return glGetUniformLocation(program, name); } - void Use() { glUseProgram(program); } + void Use(); GLProgram(); ~GLProgram(); diff --git a/uppsrc/GLDraw/GLPainter.h b/uppsrc/GLDraw/GLPainter.h index 1a2011f8e..a7858a239 100644 --- a/uppsrc/GLDraw/GLPainter.h +++ b/uppsrc/GLDraw/GLPainter.h @@ -58,10 +58,6 @@ struct GLCode : GLProgram { GLCode& operator()(int i, Sizef sz) { return Uniform(i, sz.cx, sz.cy); } GLCode& operator()(const char *id, Color c, double alpha = 1); GLCode& operator()(int i, Color c, double alpha = 1); - - void Use(); - - GLCode(); }; class GLTexture { diff --git a/uppsrc/GLDraw/GLShaders.cpp b/uppsrc/GLDraw/GLShaders.cpp index 26873f117..30e402b3b 100644 --- a/uppsrc/GLDraw/GLShaders.cpp +++ b/uppsrc/GLDraw/GLShaders.cpp @@ -112,8 +112,19 @@ void GLProgram::Clear() glDeleteShader(fragment_shader); } +void GLProgram::Use() +{ + static int64 currentid; + if(currentid != serialid) { + currentid = serialid; + glUseProgram(program); + } +} + GLProgram::GLProgram() { + static int64 h; + serialid = ++h; vertex_shader = fragment_shader = program = 0; }