[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19406] branches/ge_dome/source: Dome and Panorama mode using the whole canvas as buffer size

Dalai Felinto dfelinto at gmail.com
Wed Mar 25 06:41:19 CET 2009


Revision: 19406
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19406
Author:   dfelinto
Date:     2009-03-25 06:41:18 +0100 (Wed, 25 Mar 2009)

Log Message:
-----------
Dome and Panorama mode using the whole canvas as buffer size
- added ResBuffer option to reduce the size of the buffer
- changes in FlattenPanorama, I may revert this later

Modified Paths:
--------------
    branches/ge_dome/source/blender/blenkernel/intern/scene.c
    branches/ge_dome/source/blender/blenloader/intern/readfile.c
    branches/ge_dome/source/blender/makesdna/DNA_scene_types.h
    branches/ge_dome/source/blender/src/buttons_scene.c
    branches/ge_dome/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    branches/ge_dome/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
    branches/ge_dome/source/gameengine/Ketsji/KX_Dome.cpp
    branches/ge_dome/source/gameengine/Ketsji/KX_Dome.h
    branches/ge_dome/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
    branches/ge_dome/source/gameengine/Ketsji/KX_KetsjiEngine.h

Modified: branches/ge_dome/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/ge_dome/source/blender/blenkernel/intern/scene.c	2009-03-25 03:00:33 UTC (rev 19405)
+++ branches/ge_dome/source/blender/blenkernel/intern/scene.c	2009-03-25 05:41:18 UTC (rev 19406)
@@ -234,6 +234,7 @@
 	sce->r.domeres = 4;
 	sce->r.domemode = 1;
 	sce->r.domeangle = 180;
+	sce->r.domeresbuf = 1.0f;
 
 	sce->r.simplify_subsurf= 6;
 	sce->r.simplify_particles= 1.0f;

Modified: branches/ge_dome/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/ge_dome/source/blender/blenloader/intern/readfile.c	2009-03-25 03:00:33 UTC (rev 19405)
+++ branches/ge_dome/source/blender/blenloader/intern/readfile.c	2009-03-25 05:41:18 UTC (rev 19406)
@@ -8034,6 +8034,7 @@
 			sce->r.domeres = 4;
 			sce->r.domemode = 1;
 			sce->r.domeangle = 180;
+			sce->r.domeresbuf = 1.0f;
 		}
 	}
 

Modified: branches/ge_dome/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/ge_dome/source/blender/makesdna/DNA_scene_types.h	2009-03-25 03:00:33 UTC (rev 19405)
+++ branches/ge_dome/source/blender/makesdna/DNA_scene_types.h	2009-03-25 05:41:18 UTC (rev 19406)
@@ -319,7 +319,7 @@
 	short domeres, domemode;
 	short domeangle, pad9;
 	float domesize;
-	float pad10;
+	float domeresbuf;
 } RenderData;
 
 /* control render convert and shading engine */

Modified: branches/ge_dome/source/blender/src/buttons_scene.c
===================================================================
--- branches/ge_dome/source/blender/src/buttons_scene.c	2009-03-25 03:00:33 UTC (rev 19405)
+++ branches/ge_dome/source/blender/src/buttons_scene.c	2009-03-25 05:41:18 UTC (rev 19406)
@@ -1832,8 +1832,8 @@
 	uiDefButS(block, NUM, 0, "Mode:",		xco+=90, yco, 88, 19, &G.scene->r.domemode, 1.0, 3.0, 0, 0, "Dome mode - 1 fisheye, 2 truncated, 3 panoramic");//, 4 (tests), 5 offset, 6 warped");
 
 	uiDefButF(block, NUM, 0, "Size:",		xco-=180, yco-=21, 88, 19, &G.scene->r.domesize, 0.5, 3.5, 0, 0, "Size adjustemnts");
-	uiDefButS(block, NUM, 0, "Res:",		xco+=90, yco, 88, 19, &G.scene->r.domeres, 1.0, 8.0, 0, 0, "Resolution of the dome - 1 to 8");
-//	uiDefButF(block, NUM, 0, "Off:",		xco+=90, yco, 88, 19, &G.scene->r.domeoffset, 0.0, 0.999, 0, 0, "Offset - only works in mode 4");
+	uiDefButS(block, NUM, 0, "Def:",		xco+=90, yco, 88, 19, &G.scene->r.domeres, 1.0, 8.0, 0, 0, "Resolution of the dome - 1 to 8");
+	uiDefButF(block, NUM, 0, "Res:",	xco+=90, yco, 88, 19, &G.scene->r.domeresbuf, 0.1, 1.0, 0, 0, "Buffer Resolution - decrease it to increase speed");
 	uiBlockEndAlign(block);
 
 	uiBlockSetDirection(block, UI_TOP);

Modified: branches/ge_dome/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- branches/ge_dome/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2009-03-25 03:00:33 UTC (rev 19405)
+++ branches/ge_dome/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2009-03-25 05:41:18 UTC (rev 19406)
@@ -374,7 +374,7 @@
 
 			//initialize Dome Settings
 			if(blscene->r.stereomode == RAS_IRasterizer::RAS_STEREO_DOME)
-				ketsjiengine->InitDome(blscene->r.domesize, blscene->r.domeres, blscene->r.domemode, blscene->r.domeangle);
+				ketsjiengine->InitDome(blscene->r.domesize, blscene->r.domeres, blscene->r.domemode, blscene->r.domeangle, blscene->r.domeresbuf);
 
 			if (sceneconverter)
 			{

Modified: branches/ge_dome/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
===================================================================
--- branches/ge_dome/source/gameengine/GamePlayer/ghost/GPG_Application.cpp	2009-03-25 03:00:33 UTC (rev 19405)
+++ branches/ge_dome/source/gameengine/GamePlayer/ghost/GPG_Application.cpp	2009-03-25 05:41:18 UTC (rev 19406)
@@ -695,7 +695,7 @@
 
 		//initialize Dome Settings
 		if(m_startScene->r.stereomode == RAS_IRasterizer::RAS_STEREO_DOME)
-			m_ketsjiengine->InitDome(m_startScene->r.domesize, m_startScene->r.domeres, m_startScene->r.domemode, m_startScene->r.domeangle);
+			m_ketsjiengine->InitDome(m_startScene->r.domesize, m_startScene->r.domeres, m_startScene->r.domemode, m_startScene->r.domeangle, m_startScene->r.domeresbuf);
 
 		// Set the GameLogic.globalDict from marshal'd data, so we can
 		// load new blend files and keep data in GameLogic.globalDict

Modified: branches/ge_dome/source/gameengine/Ketsji/KX_Dome.cpp
===================================================================
--- branches/ge_dome/source/gameengine/Ketsji/KX_Dome.cpp	2009-03-25 03:00:33 UTC (rev 19405)
+++ branches/ge_dome/source/gameengine/Ketsji/KX_Dome.cpp	2009-03-25 05:41:18 UTC (rev 19406)
@@ -51,11 +51,11 @@
     /// engine
     KX_KetsjiEngine* engine,
 	
-	float size, //size for adjustments
-	short res, //resolution
-	short mode, //mode - fisheye, truncated, warped, panoramic, ...
-	short angle
-//	float offset //offset distance of the camera
+	float size,		//size for adjustments
+	short res,		//resolution of the mesh
+	short mode,		//mode - fisheye, truncated, warped, panoramic, ...
+	short angle,
+	float resbuf	//size adjustment of the buffer
 
 ):
 	m_canvas(canvas),
@@ -67,9 +67,9 @@
 	m_size(size),
 	m_resolution(res),
 	m_mode(mode),
-	m_angle(angle)
-//	m_offset(offset)
-
+	m_angle(angle),
+	m_resbuffer(resbuf),
+	canvaswidth(-1), canvasheight(-1)
 {
 	if (mode > DOME_NUM_MODES)
 		m_mode = DOME_FISHEYE;
@@ -79,7 +79,6 @@
 	glGetIntegerv(GL_VIEWPORT,(GLint *)viewport);
 
 	SetViewPort(viewport);
-	CalculateImageSize(); //it could be called from m_dome->SetViewPort()
 
 	//4 == 180\xBA; 5 == 250\xBA; 6 == 360\xBA
 	m_numfaces = 5;
@@ -152,11 +151,8 @@
 			m_numfaces = 6;
 			break;
 		default: // temporary
-			cubetop.resize(1);
-			cubebottom.resize(1);
-			cubeleft.resize(2);
-			cuberight.resize(2);
-			m_numfaces = 4;
+			m_angle = 360;
+			m_numfaces = 6;
 			break;
 	}
 
@@ -164,44 +160,24 @@
 
 	CreateGLImages();
 	//openGL check 
-	//XXX to-do: check if fbo and display list are supported
-	if(GLEW_VERSION_1_1)
-		dlistSupported=true;
-
-	if(GPU_extensions_minimum_support())
-		fboSupported=true;
-
-	fboSupported = false;//not implemented yet
-
-	if(fboSupported)
-		CreateFBO();
-
-	if(dlistSupported)
+	if(GLEW_VERSION_1_1){
+		dlistSupported = true;
 		CreateDL();
+	}
 }
 
 // destructor
 KX_Dome::~KX_Dome (void)
 {
-//	if(glIsTexture(domefacesId[0]))
-	glDeleteTextures(m_numfaces, (GLuint*)&domefacesId);
+	ClearGLImages();
 
-	// clean up FBO, RBO
-	if(fboSupported)
-	{
-		//XXX fix it
-		for (int i=0; i< m_numfaces;i++){
-			glDeleteFramebuffersEXT(m_numfaces, &fboId[0]);
-			glDeleteRenderbuffersEXT(m_numfaces, &rboId[0]);
-		}
-	}
 	if(dlistSupported)
 		glDeleteLists(dlistId, (GLsizei) m_numfaces);
 }
 
-void KX_Dome::CreateGLImages(){
+void KX_Dome::CreateGLImages(void){
 	glGenTextures(m_numfaces, (GLuint*)&domefacesId);
-	
+
 	for (int j=0;j<m_numfaces;j++){
 		glBindTexture(GL_TEXTURE_2D, domefacesId[j]);
 		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16, m_imagesize, m_imagesize, 0, GL_RGBA,
@@ -213,84 +189,34 @@
 	}
 }
 
-void KX_Dome::CalculateImageSize(void)
+void KX_Dome::ClearGLImages(void)
 {
-	// find the closest power of 2 smaller than the viewport size
-	// this is a cheap solution when FBO is not supported
-
-	short canvaswidth = m_canvas->GetWidth();
-	short canvasheight = m_canvas->GetHeight();
-	short texturewidth=0, textureheight =0;
-
-	GLint i;
-	i = 0;
-	while ((1 << i) < canvaswidth)
-		i++;
-	texturewidth = (1 << (i-1));
-
-	// Now for height
-	i = 0;
-	while ((1 << i) < canvasheight)
-		i++;
-	textureheight = (1 << (i-1));
-
-	m_imagesize = (texturewidth > textureheight?textureheight:texturewidth);
+	glDeleteTextures(m_numfaces, (GLuint*)&domefacesId);
+/*
+	for (int i=0;i<m_numfaces;i++)
+		if(glIsTexture(domefacesId[i]))
+			glDeleteTextures(1, (GLuint*)&domefacesId[i]);
+*/
 }
 
-/*
 void KX_Dome::CalculateImageSize(void)
 {
-	// higher resolution than the uncommented CalculateImageSize function. Using non-power of 2 textures. not using it
+/*
+- determine the minimum buffer size
+- reduce the buffer for better performace
+- create a power of 2 texture bigger than the buffer
+*/
 
-	short canvas_width = m_viewport.GetWidth();
-	short canvas_height = m_viewport.GetHeight();
-	
-	m_imagesize = (canvas_width > canvas_height?canvas_height:canvas_width);
-}
-//*/
-void KX_Dome::CreateFBO(){
-// not using it right now. I had performance issues when trying to use that. I should try again later.
-// create a framebuffer object, you need to delete them when program exits.
+	canvaswidth = m_canvas->GetWidth();
+	canvasheight = m_canvas->GetHeight();
 
-	glGenFramebuffersEXT(m_numfaces, &fboId[0]);
-	glGenRenderbuffersEXT(m_numfaces, &rboId[0]);
+	m_buffersize = (canvaswidth > canvasheight?canvasheight:canvaswidth);
+	m_buffersize *= m_resbuffer; //reduce buffer size for better performance
 
-	for (int i=0;i<m_numfaces;i++){
-		glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboId[i]);
-
-		// create a renderbuffer object to store depth info
-		// NOTE: A depth renderable image should be attached the FBO for depth test.
-		// If we don't attach a depth renderable image to the FBO, then
-		// the rendering output will be corrupted because of missing depth test.
-		// If you also need stencil test for your rendering, then you must
-		// attach additional image to the stencil attachement point, too.
-//		glGenRenderbuffersEXT(1, &rboId);
-		glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rboId[i]);
-		glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, m_imagesize, m_imagesize);
-		glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
-
-		// attach a texture to FBO color attachment 
-		// I wanna change this per render, pre bindimage I guess
-		glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, domefacesId[i], 0);
-
-		// attach a renderbuffer to depth attachment point
-		glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, rboId[i]);
-
-		//@ disable color buffer if you don't attach any color buffer image,
-		//@ for example, rendering depth buffer only to a texture.
-		//@ Otherwise, glCheckFramebufferStatusEXT will not be complete.
-		//glDrawBuffer(GL_NONE);
-		//glReadBuffer(GL_NONE);
-
-		// check FBO status
-		/*
-			printFramebufferInfo();

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list