diff options
Diffstat (limited to 'src/libjin')
-rw-r--r-- | src/libjin/audio/source.h | 11 | ||||
-rw-r--r-- | src/libjin/render/canvas.cpp | 18 | ||||
-rw-r--r-- | src/libjin/render/canvas.h | 6 | ||||
-rw-r--r-- | src/libjin/render/drawable.cpp | 13 | ||||
-rw-r--r-- | src/libjin/render/drawable.h | 7 | ||||
-rw-r--r-- | src/libjin/render/image.cpp | 18 | ||||
-rw-r--r-- | src/libjin/render/image.h | 21 | ||||
-rw-r--r-- | src/libjin/render/jsl.cpp | 54 | ||||
-rw-r--r-- | src/libjin/render/jsl.h | 44 | ||||
-rw-r--r-- | src/libjin/tilemap/tilemap.h | 14 |
10 files changed, 123 insertions, 83 deletions
diff --git a/src/libjin/audio/source.h b/src/libjin/audio/source.h index 8b4b888..ad9a8ba 100644 --- a/src/libjin/audio/source.h +++ b/src/libjin/audio/source.h @@ -10,6 +10,17 @@ namespace audio class Source { + public: + void play(); + void stop(); + void pause(); + void resume(); + void rewind(); + void isStopped() const; + void isPaused() const; + void isFinished() const; + void setPitch(float pitch); + void setVolume(float volume); }; diff --git a/src/libjin/render/canvas.cpp b/src/libjin/render/canvas.cpp index 376c076..89d0d77 100644 --- a/src/libjin/render/canvas.cpp +++ b/src/libjin/render/canvas.cpp @@ -6,26 +6,26 @@ namespace jin { namespace render { - Canvas::Canvas() :Drawable() + Canvas::Canvas(int w, int h) + : Drawable(w, h) { + init(); } Canvas::~Canvas() { } - // no canvas has binded shared GLint Canvas::cur = -1; - bool Canvas::init(int w, int h) + bool Canvas::init() { - Drawable::init(w, h); - Drawable::setVertices( + setVertices( new float [DRAWABLE_V_SIZE] { 0, 0, - 0, (float)h, - (float)w, (float)h, - (float)w, 0, + 0, (float)height, + (float)width, (float)height, + (float)width, 0, }, new float [DRAWABLE_V_SIZE] { 0, 1, @@ -47,7 +47,7 @@ namespace render glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glBindTexture(GL_TEXTURE_2D, 0); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); diff --git a/src/libjin/render/canvas.h b/src/libjin/render/canvas.h index 6f81ed6..e65c0c1 100644 --- a/src/libjin/render/canvas.h +++ b/src/libjin/render/canvas.h @@ -9,11 +9,9 @@ namespace render { public: - Canvas(); + Canvas(int w, int h); ~Canvas(); - bool init(int w, int h); - void bind(); static void unbind(); @@ -26,6 +24,8 @@ namespace render // current binded fbo static GLint cur; + + bool init(); }; } } diff --git a/src/libjin/render/drawable.cpp b/src/libjin/render/drawable.cpp index 1a4cc43..c0d40a1 100644 --- a/src/libjin/render/drawable.cpp +++ b/src/libjin/render/drawable.cpp @@ -6,7 +6,7 @@ namespace jin { namespace render { - Drawable::Drawable():texture(0), width(0), height(0), ancx(0), ancy(0), textCoord(0), vertCoord(0) + Drawable::Drawable(int w, int h):texture(0), width(w), height(h), ancx(0), ancy(0), textCoord(0), vertCoord(0) { } @@ -17,17 +17,6 @@ namespace render delete[] textCoord; } - void Drawable::init(int w, int h) - { - texture = 0; - width = w; - height = h; - ancx = 0; - ancy = 0; - textCoord = 0; - vertCoord = 0; - } - void Drawable::setVertices(float* v, float* t) { // render area diff --git a/src/libjin/render/drawable.h b/src/libjin/render/drawable.h index baf6c97..b8e985a 100644 --- a/src/libjin/render/drawable.h +++ b/src/libjin/render/drawable.h @@ -8,12 +8,9 @@ namespace render class Drawable { public: - - Drawable(); + Drawable(int w = 0, int h = 0); virtual ~Drawable(); - - void init(int w = 0, int h = 0); - + void setAnchor(int x, int y); void draw(int x, int y, float sx, float sy, float r); diff --git a/src/libjin/render/image.cpp b/src/libjin/render/image.cpp index b27b9a6..5de997a 100644 --- a/src/libjin/render/image.cpp +++ b/src/libjin/render/image.cpp @@ -1,23 +1,27 @@ #include "image.h" #include "3rdparty/stb/stb_image.h" #include "../utils/utils.h" + namespace jin { namespace render { - Image::Image(): Drawable(), pixels(0) + + Image::Image(const char* file) + : Drawable(), pixels(0) { + loadf(file); } - Image::~Image() + Image::Image(const char* buffer, size_t size) + : Drawable(), pixels(0) { - stbi_image_free(pixels); + loadb(buffer, size); } - void Image::init() + Image::~Image() { - Drawable::init(); - pixels = 0; + stbi_image_free(pixels); } color Image::getPixel(int x, int y) @@ -61,7 +65,7 @@ namespace render return true; } - bool Image::loadb(const char* b, int size) + bool Image::loadb(const char* b, size_t size) { // ʹstbi_load_from_memory unsigned char* imageData = stbi_load_from_memory((unsigned char *)b, size, &width, &height, NULL, STBI_rgb_alpha); diff --git a/src/libjin/render/image.h b/src/libjin/render/image.h index 7375fc4..58ca04f 100644 --- a/src/libjin/render/image.h +++ b/src/libjin/render/image.h @@ -9,24 +9,23 @@ namespace render { class Image: public Drawable { + public: - Image(); + + Image(const char* file); + Image(const char* buffer, size_t size); + ~Image(); - // just like Image() - void init(); - - // load from file - bool loadf(const char* f); - - // load from memory - bool loadb(const char* b, int size); - color getPixel(int x, int y); private: - + + bool loadf(const char* file); + bool loadb(const char* buffer, size_t size); + color* pixels; + }; } } diff --git a/src/libjin/render/jsl.cpp b/src/libjin/render/jsl.cpp index 56cbc31..49bb18f 100644 --- a/src/libjin/render/jsl.cpp +++ b/src/libjin/render/jsl.cpp @@ -18,15 +18,31 @@ namespace render "gl_FragColor = effect(gl_Color, _tex0_, gl_TexCoord[0].xy, gl_FragCoord.xy);\n" "}\0"; - shared GLint JSLProgram::current_texture_unit = 0; - shared GLint JSLProgram::max_texture_units = 0; + shared GLint JSLProgram::currentTextureUnit = 0; + shared GLint JSLProgram::maxTextureUnits = -1; - shared JSLProgram* JSLProgram::current_JSL_program = nullptr; + shared JSLProgram* JSLProgram::currentJSLProgram = nullptr; - void JSLProgram::init(const char* program) + JSLProgram::JSLProgram(const char* program) { - if(max_texture_units == 0) - glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &max_texture_units); + initialize(program); + } + + JSLProgram::~JSLProgram() + { + destroy(); + } + + void JSLProgram::destroy() + { + if (currentJSLProgram == this) + unuse(); + } + + void JSLProgram::initialize(const char* program) + { + if (maxTextureUnits == -1) + glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &maxTextureUnits); char* fs = (char*)alloca(strlen(program) + strlen(base_f)); sprintf(fs, base_f, program); @@ -39,28 +55,18 @@ namespace render glLinkProgram(pid); } - shared GLint JSLProgram::getTextureUnit(const std::string& name) + GLint JSLProgram::getTextureUnit(const std::string& name) { - if (++current_texture_unit >= max_texture_units) + std::map<std::string, GLint>::iterator texture_unit = texturePool.find(name); + if (texture_unit != texturePool.end()) + return texture_unit->second; + if (++currentTextureUnit >= maxTextureUnits) return 0; - return current_texture_unit; - } - - void JSLProgram::use() - { - glUseProgram(pid); - JSLProgram::current_JSL_program = this; - JSLProgram::current_texture_unit = 0; - } - - shared void JSLProgram::unuse() - { - glUseProgram(0); - JSLProgram::current_JSL_program = nullptr; - JSLProgram::current_texture_unit = 0; + texturePool[name] = currentTextureUnit; + return currentTextureUnit; } -#define checkJSL() if (current_JSL_program != this) return +#define checkJSL() if (currentJSLProgram != this) return void JSLProgram::sendFloat(const char* variable, float number) { 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(); + }; } diff --git a/src/libjin/tilemap/tilemap.h b/src/libjin/tilemap/tilemap.h new file mode 100644 index 0000000..27cbe51 --- /dev/null +++ b/src/libjin/tilemap/tilemap.h @@ -0,0 +1,14 @@ +#ifndef __JIN_TILEMAP_H +#define __JIN_TILEMAP_H + +namespace jin +{ +namespace tilemap +{ + + + +}// tilemap +}// jin + +#endif
\ No newline at end of file |