aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/graphics/canvas.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/graphics/canvas.cpp')
-rw-r--r--src/libjin/graphics/canvas.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/libjin/graphics/canvas.cpp b/src/libjin/graphics/canvas.cpp
new file mode 100644
index 0000000..db02110
--- /dev/null
+++ b/src/libjin/graphics/canvas.cpp
@@ -0,0 +1,58 @@
+#include "../core/configuration.h"
+#if defined(jin_graphics)
+
+#include "../utils/macros.h"
+#include "canvas.h"
+#include "window.h"
+
+namespace JinEngine
+{
+ namespace Graphics
+ {
+
+ Canvas::Canvas(GLuint n)
+ : fbo(n)
+ {
+ ++gl.getStats().canvases;
+ }
+
+ Canvas::Canvas(int w, int h)
+ : Graphic(w, h)
+ {
+ GLint current_fbo;
+ glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &current_fbo);
+
+ // Generate a new render buffer object.
+ fbo = gl.genFrameBuffer();
+ gl.bindFrameBuffer(fbo);
+
+ // Render texture.
+ GLuint texture = getGLTexture();
+ gl.bindTexture2D(texture);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ gl.texImage(GL_RGBA8, w, h, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
+ GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
+
+ // Unbind framebuffer
+ gl.bindFrameBuffer(current_fbo);
+
+ ++gl.getStats().canvases;
+ }
+
+ Canvas::~Canvas()
+ {
+ --gl.getStats().canvases;
+ }
+
+ bool Canvas::isBinded(const Canvas* cvs)
+ {
+ return gl.getCanvas() == cvs;
+ }
+
+ } // namespace Graphics
+} // namespace JinEngine
+
+#endif // defined(jin_graphics) \ No newline at end of file