aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/ParticleSystem.exebin1052672 -> 1053696 bytes
-rw-r--r--bin/jin.exebin1596416 -> 1596416 bytes
-rw-r--r--examples/particle_system/main.cpp4
-rw-r--r--src/libjin/graphics/je_canvas.cpp44
-rw-r--r--src/libjin/graphics/je_canvas.h26
-rw-r--r--src/libjin/graphics/je_gl.cpp52
-rw-r--r--src/libjin/graphics/je_gl.h9
-rw-r--r--src/libjin/graphics/je_window.cpp5
-rw-r--r--src/libjin/graphics/shaders/je_shader.cpp18
-rw-r--r--src/libjin/graphics/shaders/je_shader.h10
10 files changed, 66 insertions, 102 deletions
diff --git a/bin/ParticleSystem.exe b/bin/ParticleSystem.exe
index 0d79bf5..a70f777 100644
--- a/bin/ParticleSystem.exe
+++ b/bin/ParticleSystem.exe
Binary files differ
diff --git a/bin/jin.exe b/bin/jin.exe
index 5241d02..4561246 100644
--- a/bin/jin.exe
+++ b/bin/jin.exe
Binary files differ
diff --git a/examples/particle_system/main.cpp b/examples/particle_system/main.cpp
index 1c76ee6..6b7de94 100644
--- a/examples/particle_system/main.cpp
+++ b/examples/particle_system/main.cpp
@@ -144,13 +144,13 @@ void onUpdate(int ms)
void onDraw()
{
- shader->use();
+ gl.useShader(shader);
Mouse* m = Mouse::get();
int x, y;
m->getState(&x, &y);
p->setPosition(x, y);
p->render();
- shader->unuse();
+ gl.unuseShader();
}
int main(int argc, char* argv[])
diff --git a/src/libjin/graphics/je_canvas.cpp b/src/libjin/graphics/je_canvas.cpp
index 8f216e6..831544d 100644
--- a/src/libjin/graphics/je_canvas.cpp
+++ b/src/libjin/graphics/je_canvas.cpp
@@ -10,9 +10,6 @@ namespace JinEngine
namespace Graphics
{
- const Canvas* Canvas::current = nullptr;
- const Canvas* const Canvas::DEFAULT_CANVAS = new Canvas(0);
-
Canvas* Canvas::createCanvas(int w, int h)
{
return new Canvas(w, h);
@@ -53,46 +50,7 @@ namespace JinEngine
bool Canvas::isBinded(const Canvas* cvs)
{
- return current == cvs;
- }
-
- /**
- * bind to canvas
- */
- void Canvas::bind(Canvas* canvas)
- {
- if (isBinded(canvas)) return;
- current = canvas;
- gl.bindFrameBuffer(canvas->fbo);
- int w = canvas->getWidth();
- int h = canvas->getHeight();
- // Set view port to canvas.
- glViewport(0, 0, w, h);
- gl.setProjectionMatrix(0, w, 0, h, -1, 1);
- }
-
- /**
- * bind to default screen render buffer.
- * do some coordinates transform work
- * https://blog.csdn.net/liji_digital/article/details/79370841
- * https://blog.csdn.net/lyx2007825/article/details/8792475
- */
- void Canvas::unbind()
- {
- if (isBinded(DEFAULT_CANVAS)) return;
- current = DEFAULT_CANVAS;
- /* get window size as viewport */
- Window* wnd = Window::get();
- int w = wnd->getW();
- int h = wnd->getH();
-
- glBindFramebuffer(GL_FRAMEBUFFER, DEFAULT_CANVAS->fbo);
-
- /* set viewport on screen */
- glViewport(0, 0, w, h);
-
- gl.setProjectionMatrix(0, w, h, 0, -1, 1);
-
+ return gl.getCanvas() == cvs;
}
} // namespace Graphics
diff --git a/src/libjin/graphics/je_canvas.h b/src/libjin/graphics/je_canvas.h
index c88decc..e848e25 100644
--- a/src/libjin/graphics/je_canvas.h
+++ b/src/libjin/graphics/je_canvas.h
@@ -24,39 +24,27 @@ namespace JinEngine
///
///
- ///
- static void bind(Canvas*);
-
- ///
- ///
- ///
- static void unbind();
-
- ///
- ///
///
static bool isBinded(const Canvas*);
///
///
///
- ~Canvas();
-
- inline GLuint getGLFrameBuffer() { return fbo; };
-
- protected:
- static const Canvas* const DEFAULT_CANVAS;
- static const Canvas* current;
+ Canvas(GLuint n);
///
///
///
- Canvas(int w, int h);
+ Canvas(int w, int h);
///
///
///
- Canvas(GLuint n);
+ ~Canvas();
+
+ inline GLuint getGLFrameBuffer() const { return fbo; };
+
+ protected:
GLuint fbo;
diff --git a/src/libjin/graphics/je_gl.cpp b/src/libjin/graphics/je_gl.cpp
index 72ebb45..a6abd34 100644
--- a/src/libjin/graphics/je_gl.cpp
+++ b/src/libjin/graphics/je_gl.cpp
@@ -3,10 +3,13 @@
#include "je_color.h"
#include "je_canvas.h"
#include "je_texture.h"
+#include "je_window.h"
#include "shaders/je_shader.h"
#include "fonts/je_font.h"
using namespace JinEngine::Math;
+using namespace JinEngine::Graphics;
+using namespace JinEngine::Graphics::Shaders;
namespace JinEngine
{
@@ -15,6 +18,8 @@ namespace JinEngine
OpenGL gl;
+ const Canvas* const OpenGL::DEFAULT_CANVAS = new Canvas(0);
+
OpenGL::OpenGL()
: mBlendMode(BlendMode::NONE)
{
@@ -79,11 +84,6 @@ namespace JinEngine
glBindTexture(GL_TEXTURE_2D, texture);
}
- GLuint OpenGL::curTexture()
- {
- return mTexture;
- }
-
void OpenGL::deleteTexture(GLuint texture)
{
glDeleteTextures(1, &texture);
@@ -292,7 +292,8 @@ namespace JinEngine
{
if (shader)
{
- shader->use();
+ glUseProgram(shader->getGLProgramID());
+ shader->setDefaultUniform();
mShader = shader;
}
}
@@ -301,7 +302,7 @@ namespace JinEngine
{
if (mShader)
{
- mShader->unuse();
+ glUseProgram(0);
mShader = nullptr;
}
}
@@ -315,18 +316,43 @@ namespace JinEngine
{
if (canvas)
{
- Canvas::bind(canvas);
+ GLuint fbo = canvas->getGLFrameBuffer();
+ gl.bindFrameBuffer(fbo);
+ int w = canvas->getWidth();
+ int h = canvas->getHeight();
+ glViewport(0, 0, w, h);
+ gl.setProjectionMatrix(0, w, 0, h, -1, 1);
+
mCanvas = canvas;
}
}
+ /**
+ * bind to default screen render buffer.
+ * do some coordinates transform work
+ * https://blog.csdn.net/liji_digital/article/details/79370841
+ * https://blog.csdn.net/lyx2007825/article/details/8792475
+ */
void OpenGL::unbindCanvas()
{
- if (mCanvas)
- {
- mCanvas->unbind();
- mCanvas = nullptr;
- }
+ // Default bind to default canvas.
+ if (getCanvas() == DEFAULT_CANVAS)
+ return;
+ // Get window size as viewport.
+ Window* wnd = Window::get();
+ int w = wnd->getW();
+ int h = wnd->getH();
+ GLuint fbo = DEFAULT_CANVAS->getGLFrameBuffer();
+ glBindFramebuffer(GL_FRAMEBUFFER, fbo);
+ glViewport(0, 0, w, h);
+ gl.setProjectionMatrix(0, w, h, 0, -1, 1);
+
+ mCanvas = nullptr;
+ }
+
+ Canvas* OpenGL::getCanvas()
+ {
+ return mCanvas;
}
void OpenGL::setFont(Fonts::Font* font)
diff --git a/src/libjin/graphics/je_gl.h b/src/libjin/graphics/je_gl.h
index d4f1ced..b9205c6 100644
--- a/src/libjin/graphics/je_gl.h
+++ b/src/libjin/graphics/je_gl.h
@@ -166,6 +166,11 @@ namespace JinEngine
///
///
void unbindCanvas();
+
+ ///
+ ///
+ ///
+ Canvas* getCanvas();
///
///
@@ -179,6 +184,8 @@ namespace JinEngine
private:
+ static const Canvas* const DEFAULT_CANVAS;
+
///
///
///
@@ -208,8 +215,6 @@ namespace JinEngine
//struct { GLubyte r, g, b, a; } mBackColor; // previous draw color
Color mBackColor;
- GLuint mTexture; // current binded texture
-
///
///
///
diff --git a/src/libjin/graphics/je_window.cpp b/src/libjin/graphics/je_window.cpp
index f08e816..4c699aa 100644
--- a/src/libjin/graphics/je_window.cpp
+++ b/src/libjin/graphics/je_window.cpp
@@ -95,8 +95,9 @@ namespace JinEngine
// Default blend function.
gl.setBlendMode(OpenGL::BlendMode::ALPHA);
// Bind to default canvas.
- Canvas::unbind();
- Shader::unuse();
+ gl.unbindCanvas();
+ gl.unuseShader();
+ //Shader::unuse();
// Avoid white blinnk.
swapBuffers();
diff --git a/src/libjin/graphics/shaders/je_shader.cpp b/src/libjin/graphics/shaders/je_shader.cpp
index b78c71c..f33adaf 100644
--- a/src/libjin/graphics/shaders/je_shader.cpp
+++ b/src/libjin/graphics/shaders/je_shader.cpp
@@ -78,11 +78,16 @@ namespace JinEngine
Shader::~Shader()
{
if (gl.getShader() == this)
- unuse();
+ gl.unuseShader();
// delete shader program
glDeleteShader(mPID);
}
+ void Shader::setDefaultUniform()
+ {
+ sendInt(SHADER_MAIN_TEXTURE, DEFAULT_TEXTURE_UNIT);
+ }
+
bool Shader::compile(const string& program)
{
string vertex_shader, fragment_shader;
@@ -127,17 +132,6 @@ if (success == GL_FALSE) \
return maxTextureUnits;
}
- void Shader::use()
- {
- glUseProgram(mPID);
- sendInt(SHADER_MAIN_TEXTURE, DEFAULT_TEXTURE_UNIT);
- }
-
- void Shader::unuse()
- {
- glUseProgram(0);
- }
-
GLint Shader::claimTextureUnit(const std::string& name)
{
std::map<std::string, GLint>::iterator unit = mTextureUnits.find(name);
diff --git a/src/libjin/graphics/shaders/je_shader.h b/src/libjin/graphics/shaders/je_shader.h
index bb7bee0..2f53ab0 100644
--- a/src/libjin/graphics/shaders/je_shader.h
+++ b/src/libjin/graphics/shaders/je_shader.h
@@ -40,19 +40,11 @@ namespace JinEngine
static Shader* createShader(const std::string& source);
///
- /// Unuse current shader.
- ///
- static void unuse();
-
- ///
/// Destructor of shader.
///
virtual ~Shader();
- ///
- /// Use specific shader.
- ///
- void use();
+ void setDefaultUniform();
///
/// Send float value to shader.