[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15437] branches/soc-2008-mxcurioni/source /blender/freestyle/intern/app_blender: soc-2008-mxcurioni: render layer with FBOs -> render buffers, version 2.

Maxime Curioni maxime.curioni at gmail.com
Sat Jul 5 10:51:20 CEST 2008


Revision: 15437
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15437
Author:   mxcurioni
Date:     2008-07-05 10:50:41 +0200 (Sat, 05 Jul 2008)

Log Message:
-----------
soc-2008-mxcurioni: render layer with FBOs -> render buffers, version 2. Still not working.

Modified Paths:
--------------
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/app_blender/AppGLWidget.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/app_blender/api.cpp

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/app_blender/AppGLWidget.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/app_blender/AppGLWidget.cpp	2008-07-05 06:22:15 UTC (rev 15436)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/app_blender/AppGLWidget.cpp	2008-07-05 08:50:41 UTC (rev 15437)
@@ -413,7 +413,7 @@
   // }
   // else if(_backBufferFlag)
   //   glDrawBuffer(GL_BACK);
-	glDrawBuffer( workingBuffer ); //soc
+	//glDrawBuffer( workingBuffer ); //soc
 
   // Projection Matrix
   //==================
@@ -431,7 +431,7 @@
 void AppGLWidget::releaseCanvas()
 {
   makeCurrent();
-  glDrawBuffer( workingBuffer ); //soc
+  //glDrawBuffer( workingBuffer ); //soc
   glPopAttrib();
 }
 

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/app_blender/api.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/app_blender/api.cpp	2008-07-05 06:22:15 UTC (rev 15436)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/app_blender/api.cpp	2008-07-05 08:50:41 UTC (rev 15437)
@@ -132,7 +132,7 @@
 
 	void FRS_execute(Render* re, int render_in_layer) {
 		
-		GLuint framebuffer, renderbuffer;
+		GLuint framebuffer, renderbuffers[2];
 		GLenum status;
 		RenderLayer *rl;
 		
@@ -143,23 +143,28 @@
 			glGenFramebuffersEXT(1, &framebuffer);
 			glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framebuffer);
 
-			// set up render buffer
-			glGenRenderbuffersEXT(1, &renderbuffer);
-			glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, renderbuffer);
-			glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA8, re->winx, re->winy);
-			glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, renderbuffer);
+			// set up render buffer: one color buffer, one depth buffer
+			glGenRenderbuffersEXT(2, renderbuffers);
+			
+			glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,	renderbuffers[0]);
+			glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, re->winx, re->winy);
+			glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, renderbuffers[0]);
+			
+			glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, renderbuffers[1]);
+			glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, re->winx, re->winy);
+			glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, renderbuffers[1]);
 
 			// status verification 
 			status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
 			if (status != GL_FRAMEBUFFER_COMPLETE_EXT){
 				cout << "Framebuffer setup error" << endl;
+				glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+				glDeleteRenderbuffersEXT(2, renderbuffers);
+				glDeleteFramebuffersEXT(1, &framebuffer);
 				return;
 			}
 			
 			glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
-			
-		} else {
-			glDrawBuffer(GL_BACK);
 		}
 		
 		FRS_render(re, render_in_layer);
@@ -168,14 +173,14 @@
 			for(rl = (RenderLayer *)re->result->layers.first; rl; rl= rl->next) {
 				if(rl->layflag & SCE_LAY_FRS) {
 					cout << "Freestyle as a render layer - RESULT" << endl;
-
+					
 					// transfer render to layer
 					glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
 					glReadPixels(0, 0, re->winx, re->winy, GL_RGBA, GL_FLOAT, rl->rectf );
 
 					// bind window
 					glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
-					glDeleteRenderbuffersEXT(1, &renderbuffer);
+					glDeleteRenderbuffersEXT(2, renderbuffers);
 					glDeleteFramebuffersEXT(1, &framebuffer);
 				}
 			}





More information about the Bf-blender-cvs mailing list