[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