[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