aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/render/jsl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/render/jsl.h')
-rw-r--r--src/libjin/render/jsl.h44
1 files changed, 32 insertions, 12 deletions
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<std::string, GLint> texturePool;
+
+ static JSLProgram* currentJSLProgram;
+ static GLint currentTextureUnit;
+ static GLint maxTextureUnits;
+
+ GLint getTextureUnit(const std::string& name);
+
+ void initialize(const char* program);
+ void destroy();
+
};
}