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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to