aboutsummaryrefslogtreecommitdiff
path: root/src/libjin
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin')
-rw-r--r--src/libjin/audio/source.h11
-rw-r--r--src/libjin/render/canvas.cpp18
-rw-r--r--src/libjin/render/canvas.h6
-rw-r--r--src/libjin/render/drawable.cpp13
-rw-r--r--src/libjin/render/drawable.h7
-rw-r--r--src/libjin/render/image.cpp18
-rw-r--r--src/libjin/render/image.h21
-rw-r--r--src/libjin/render/jsl.cpp54
-rw-r--r--src/libjin/render/jsl.h44
-rw-r--r--src/libjin/tilemap/tilemap.h14
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