[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55399] branches/ge_harmony/source/ gameengine/Rasterizer/RAS_OpenGLRasterizer: Fixing up some more 2D Filter fbo issues ( the fbo was never being created and destroyed).
Daniel Stokes
kupomail at gmail.com
Tue Mar 19 05:29:50 CET 2013
Revision: 55399
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55399
Author: kupoman
Date: 2013-03-19 04:29:48 +0000 (Tue, 19 Mar 2013)
Log Message:
-----------
Fixing up some more 2D Filter fbo issues (the fbo was never being created and destroyed). Also, now python post draw code (such as bgui) should work again with 2D filters.
Modified Paths:
--------------
branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.cpp
branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.cpp 2013-03-19 01:32:36 UTC (rev 55398)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.cpp 2013-03-19 04:29:48 UTC (rev 55399)
@@ -93,12 +93,14 @@
texflag[passindex] = 0;
m_gameObjects[passindex] = NULL;
}
+ glGenFramebuffersEXT(1, &m_fbo);
texname[0] = texname[1] = texname[2] = -1;
errorprinted= false;
}
RAS_OGLFilterManager::~RAS_OGLFilterManager()
{
+ glDeleteFramebuffersEXT(1, &m_fbo);
FreeTextures();
}
@@ -531,10 +533,9 @@
// glCopyTexImage2D(GL_TEXTURE_2D,0,GL_LUMINANCE16, rect.GetLeft(), rect.GetBottom(), rect_width, rect_height, 0);
//}
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_fbo);
+ // reverting to texunit 0, without this we get bug [#28462]
-
-
- // reverting to texunit 0, without this we get bug [#28462]
glActiveTextureARB(GL_TEXTURE0);
canvas->SetViewPort(0, 0, rect_width-1, rect_height-1);
@@ -553,8 +554,6 @@
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
-
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_fbo);
for (passindex =0; passindex<MAX_RENDER_PASS; passindex++)
{
if (m_filters[passindex] && m_enabled[passindex])
@@ -590,6 +589,7 @@
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, rast->GetFBO());
rast->SetFinalTarget(texname[buffer_toggle^1]);
}
Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp 2013-03-19 01:32:36 UTC (rev 55398)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp 2013-03-19 04:29:48 UTC (rev 55399)
@@ -495,7 +495,7 @@
SetDrawingMode(drawingmode);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_fbo[0]);
- m_final_target = m_render_target[1];
+ this->SetFinalTarget(m_render_target[1]);
glDrawBuffersARB(m_render_count, DRAW_BUFFERS);
@@ -1656,6 +1656,12 @@
glPopAttrib();
}
+void RAS_OpenGLRasterizer::SetFinalTarget(unsigned int id)
+{
+ m_final_target = id;
+ glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_final_target, 0);
+}
+
static void set_ogl_format(int components, int format, unsigned int *target)
{
unsigned int internal_format = GL_RGBA8;
Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h 2013-03-19 01:32:36 UTC (rev 55398)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h 2013-03-19 04:29:48 UTC (rev 55399)
@@ -382,7 +382,7 @@
unsigned int GetDepthTarget() { return m_render_target[0]; }
unsigned int GetColorTarget(int i = 0) { return m_render_target[i+1]; }
unsigned int GetPrepassTarget(int i) { return m_prepass_target[i+1]; }
- void SetFinalTarget(unsigned int id) { m_final_target = id; }
+ void SetFinalTarget(unsigned int id);
virtual void SetPrepassCount(int count);
virtual void SetPrepassFormat(int target, int components, int format);
More information about the Bf-blender-cvs
mailing list