From 1b773ad2c250e09c09c065eb3eec64bfebde09ca Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 18 May 2018 14:39:38 +0800 Subject: =?UTF-8?q?=E4=BF=AE=E6=94=B9userdata=E5=88=9B=E5=BB=BA=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libjin/render/jsl.h | 44 ++++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) (limited to 'src/libjin/render/jsl.h') diff --git a/src/libjin/render/jsl.h b/src/libjin/render/jsl.h index 80ef4dc..7183325 100644 --- a/src/libjin/render/jsl.h +++ b/src/libjin/render/jsl.h @@ -17,11 +17,22 @@ namespace render { public: - void init(const char* program); + JSLProgram(const char* program); + ~JSLProgram(); - void use(); - - static void unuse(); + inline void JSLProgram::use() + { + glUseProgram(pid); + JSLProgram::currentJSLProgram = this; + JSLProgram::currentTextureUnit = 0; + } + + static inline void JSLProgram::unuse() + { + glUseProgram(0); + JSLProgram::currentJSLProgram = nullptr; + JSLProgram::currentTextureUnit = 0; + } void sendFloat(const char* name, float number); void sendImage(const char* name, const Image* image); @@ -30,18 +41,27 @@ namespace render void sendVec4(const char* name, float x, float y, float z, float w); void sendCanvas(const char* name, const Canvas* canvas); void sendColor(const char* name, const color* col); - - private: - JSLProgram(); + static inline JSLProgram* getCurrentJSL() + { + return currentJSLProgram; + } + + private: GLuint pid; - - static JSLProgram* current_JSL_program; - static GLint current_texture_unit; - static GLint max_texture_units; - static GLint getTextureUnit(const std::string& name); + std::map texturePool; + + static JSLProgram* currentJSLProgram; + static GLint currentTextureUnit; + static GLint maxTextureUnits; + + GLint getTextureUnit(const std::string& name); + + void initialize(const char* program); + void destroy(); + }; } -- cgit v1.1-26-g67d0