summaryrefslogtreecommitdiff
path: root/source/modules/asura-core/graphics/canvas.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-04-02 21:45:33 +0800
committerchai <chaifix@163.com>2019-04-02 21:45:33 +0800
commitaf7bdaa10ee71a319dc55c3c7556fa43a95c9dc9 (patch)
tree58611985001b78c5a76b78ae146fdb07dde31c1d /source/modules/asura-core/graphics/canvas.cpp
parent250e30d73f09e9da2b5a81d0fbae63744ae12a73 (diff)
*misc
Diffstat (limited to 'source/modules/asura-core/graphics/canvas.cpp')
-rw-r--r--source/modules/asura-core/graphics/canvas.cpp34
1 files changed, 27 insertions, 7 deletions
diff --git a/source/modules/asura-core/graphics/canvas.cpp b/source/modules/asura-core/graphics/canvas.cpp
index 89be45c..0543461 100644
--- a/source/modules/asura-core/graphics/canvas.cpp
+++ b/source/modules/asura-core/graphics/canvas.cpp
@@ -8,21 +8,41 @@ namespace AsuraEngine
Canvas::Canvas()
: mWidth(0)
, mHeight(0)
+ , mFBO(0)
{
- glGenFramebuffers(1, &mFBO);
- GLint current_fbo;
- glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &current_fbo);
- glBindFramebuffer(GL_FRAMEBUFFER, mFBO);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mTex, 0);
- glBindFramebuffer(GL_FRAMEBUFFER, current_fbo);
+ // Fix: ôСʼʱframebufferԴ
+ //glGenFramebuffers(1, &mFBO);
+ //GLint current_fbo;
+ //glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &current_fbo);
+ //glBindFramebuffer(GL_FRAMEBUFFER, mFBO);
+ //glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mTex, 0);
+ //glBindFramebuffer(GL_FRAMEBUFFER, current_fbo);
}
void Canvas::SetSize(uint w, uint h)
{
+ if (mFBO == 0)
+ {
+ glGenFramebuffers(1, &mFBO);
+ if (mFBO == 0)
+ throw Exception("OpenGL glGenFramebuffers cannot generate frame buffer object.");
+ //
+ if (mTex == 0)
+ {
+ glGenTextures(1, &mTex);
+ if (mTex == 0)
+ throw Exception("OpenGL glGenTextures cannot generate texture.");
+ }
+ GLint current_fbo;
+ glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &current_fbo);
+ glBindFramebuffer(GL_FRAMEBUFFER, mFBO);
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mTex, 0);
+ glBindFramebuffer(GL_FRAMEBUFFER, current_fbo);
+ }
GLint current_tex;
glGetIntegerv(GL_TEXTURE_BINDING_2D, &current_tex);
glBindTexture(GL_TEXTURE_2D, mTex);
-
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glBindTexture(GL_TEXTURE_2D, current_tex);
}