Revision: 19529
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19529
Author:   dfelinto
Date:     2009-04-04 04:05:57 +0200 (Sat, 04 Apr 2009)

Log Message:
-----------
Warp Mesh supported now.
CopyTexSubImage2D implemented now instead of CopyTexImage2D

Modified Paths:
--------------
    branches/ge_dome/source/blender/blenkernel/BKE_blender.h
    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/BKE_blender.h
===================================================================
--- branches/ge_dome/source/blender/blenkernel/BKE_blender.h    2009-04-04 
01:21:00 UTC (rev 19528)
+++ branches/ge_dome/source/blender/blenkernel/BKE_blender.h    2009-04-04 
02:05:57 UTC (rev 19529)
@@ -41,7 +41,7 @@
 struct MemFile;
 
 #define BLENDER_VERSION                        248
-#define BLENDER_SUBVERSION             3
+#define BLENDER_SUBVERSION             4
 
 #define BLENDER_MINVERSION             245
 #define BLENDER_MINSUBVERSION  15

Modified: branches/ge_dome/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/ge_dome/source/blender/blenloader/intern/readfile.c        
2009-04-04 01:21:00 UTC (rev 19528)
+++ branches/ge_dome/source/blender/blenloader/intern/readfile.c        
2009-04-04 02:05:57 UTC (rev 19529)
@@ -3531,7 +3531,9 @@
                                srl->mat_override= newlibadr_us(fd, 
sce->id.lib, srl->mat_override);
                                srl->light_override= newlibadr_us(fd, 
sce->id.lib, srl->light_override);
                        }
-                       
+                       /*Game Settings: Dome Warp Text*/
+                       sce->r.dometext= newlibadr_us(fd, sce->id.lib, 
sce->r.dometext);
+
                        sce->id.flag -= LIB_NEEDLINK;
                }
 
@@ -8035,7 +8037,7 @@
                }
        }
        
-       if (main->versionfile < 248 || (main->versionfile == 248 && 
main->subversionfile < 3)) {
+       if (main->versionfile < 248 || (main->versionfile == 248 && 
main->subversionfile < 4)) {
                Scene *sce;
 
                /*  Dome (Fisheye) default parameters  */
@@ -8854,7 +8856,9 @@
                expand_doit(fd, mainvar, srl->mat_override);
                expand_doit(fd, mainvar, srl->light_override);
        }
-                               
+
+       if(sce->r.dometext)
+               expand_doit(fd, mainvar, sce->r.dometext);
 }
 
 static void expand_camera(FileData *fd, Main *mainvar, Camera *ca)

Modified: branches/ge_dome/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/ge_dome/source/blender/makesdna/DNA_scene_types.h  2009-04-04 
01:21:00 UTC (rev 19528)
+++ branches/ge_dome/source/blender/makesdna/DNA_scene_types.h  2009-04-04 
02:05:57 UTC (rev 19529)
@@ -45,6 +45,7 @@
 struct Scene;
 struct Image;
 struct Group;
+struct Text;
 struct bNodeTree;
 
 typedef struct Base {
@@ -320,6 +321,8 @@
        short domeangle, pad9;
        float domesize;
        float domeresbuf;
+       struct Text *dometext;
+
 } 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-04-04 01:21:00 UTC 
(rev 19528)
+++ branches/ge_dome/source/blender/src/buttons_scene.c 2009-04-04 02:05:57 UTC 
(rev 19529)
@@ -1766,13 +1766,13 @@
 static uiBlock *framing_render_menu(void *arg_unused)
 {
        uiBlock *block;
-       short yco = 241, xco = 0;
+       short yco = 267, xco = 0;
        int randomcolorindex = 1234;
 
        block= uiNewBlock(&curarea->uiblocks, "framing_options", UI_EMBOSS, 
UI_HELV, curarea->win);
 
        /* use this for a fake extra empy space around the buttons */
-       uiDefBut(block, LABEL, 0, "",                   -5, -10, 295, 275, 
NULL, 0, 0, 0, 0, "");
+       uiDefBut(block, LABEL, 0, "",                   -5, -10, 295, 300, 
NULL, 0, 0, 0, 0, "");
 
        uiDefBut(block, LABEL, 0, "Framing:", xco, yco, 68,19, 0, 0, 0, 0, 0, 
"");
        uiBlockBeginAlign(block);
@@ -1834,6 +1834,8 @@
        uiDefButF(block, NUM, 0, "Size:",               xco-=180, yco-=21, 88, 
19, &G.scene->r.domesize, 0.5, 3.5, 0, 0, "Size adjustments");
        uiDefButS(block, NUM, 0, "Tes:",                xco+=90, yco, 88, 19, 
&G.scene->r.domeres, 1.0, 8.0, 0, 0, "Tesselation level - 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");
+
+       uiDefIDPoinBut(block, test_scriptpoin_but, ID_SCRIPT, 1, "Warp Data: ", 
xco-180,yco-=21,268, 19, &G.scene->r.dometext, "Custom Warp Mesh data file");
        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-04-04 01:21:00 UTC (rev 19528)
+++ branches/ge_dome/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp  
2009-04-04 02:05:57 UTC (rev 19529)
@@ -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, 
blscene->r.domeresbuf);
+                               ketsjiengine->InitDome(blscene->r.domesize, 
blscene->r.domeres, blscene->r.domemode, blscene->r.domeangle, 
blscene->r.domeresbuf, blscene->r.dometext);
 
                        if (sceneconverter)
                        {

Modified: 
branches/ge_dome/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
===================================================================
--- branches/ge_dome/source/gameengine/GamePlayer/ghost/GPG_Application.cpp     
2009-04-04 01:21:00 UTC (rev 19528)
+++ branches/ge_dome/source/gameengine/GamePlayer/ghost/GPG_Application.cpp     
2009-04-04 02:05:57 UTC (rev 19529)
@@ -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_startScene->r.domeresbuf);
+                       m_ketsjiengine->InitDome(m_startScene->r.domesize, 
m_startScene->r.domeres, m_startScene->r.domemode, m_startScene->r.domeangle, 
m_startScene->r.domeresbuf, m_startScene->r.dometext);
 
                // 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-04-04 
01:21:00 UTC (rev 19528)
+++ branches/ge_dome/source/gameengine/Ketsji/KX_Dome.cpp       2009-04-04 
02:05:57 UTC (rev 19529)
@@ -49,7 +49,8 @@
        short res,              //resolution of the mesh
        short mode,             //mode - fisheye, truncated, warped, panoramic, 
...
        short angle,
-       float resbuf    //size adjustment of the buffer
+       float resbuf,   //size adjustment of the buffer
+       struct Text* warptext
 
 ):
        m_canvas(canvas),
@@ -65,9 +66,22 @@
        canvaswidth(-1), canvasheight(-1),
        dlistSupported(false)
 {
-       if (mode > DOME_NUM_MODES)
+       warp.usemesh = false;
+
+       if (mode >= DOME_NUM_MODES)
                m_mode = DOME_FISHEYE;
-       
+
+       if (warptext) // it there is a text data try to warp it
+       {
+               char *buf;
+               buf = txt_to_buf(warptext);
+               if (buf)
+               {
+                       warp.usemesh = ParseWarpMesh(STR_String(buf));
+                       MEM_freeN(buf);
+               }
+       }
+
        //setting the viewport size
        GLuint  viewport[4]={0};
        glGetIntegerv(GL_VIEWPORT,(GLint *)viewport);
@@ -118,45 +132,70 @@
                        break;
        }
 
+       m_numimages =(warp.usemesh?m_numfaces+1:m_numfaces);
+
        CalculateCameraOrientation();
 
        CreateGLImages();
 
-       //openGL check 
-       if(GLEW_VERSION_1_1){
-               dlistSupported = true;
-               CreateDL();
-       }
+       dlistSupported = CreateDL();
 }
 
 // destructor
 KX_Dome::~KX_Dome (void)
 {
+       GLuint m_numimages = m_numfaces;
+
        ClearGLImages();
 
        if(dlistSupported)
-               glDeleteLists(dlistId, (GLsizei) m_numfaces);
+               glDeleteLists(dlistId, (GLsizei) m_numimages);
 }
 
-void KX_Dome::CreateGLImages(void){
-       glGenTextures(m_numfaces, (GLuint*)&domefacesId);
+void KX_Dome::SetViewPort(GLuint viewport[4])
+{
+       if(canvaswidth != m_canvas->GetWidth() || canvasheight != 
m_canvas->GetHeight())
+       {
+               m_viewport.SetLeft(viewport[0]); 
+               m_viewport.SetBottom(viewport[1]);
+               m_viewport.SetRight(viewport[2]);
+               m_viewport.SetTop(viewport[3]);
 
+               CalculateImageSize();
+       }
+}
+
+void KX_Dome::CreateGLImages(void)
+{
+       glGenTextures(m_numimages, (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,
+               glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, m_imagesize, 
m_imagesize, 0, GL_RGB8,
                                GL_UNSIGNED_BYTE, 0);
+               glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, m_imagesize, 
m_imagesize, 0);
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, 
GL_LINEAR);
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 
GL_LINEAR);
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 
GL_CLAMP_TO_EDGE);
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, 
GL_CLAMP_TO_EDGE);
        }
+       if(warp.usemesh){
+               glBindTexture(GL_TEXTURE_2D, domefacesId[m_numfaces]);
+               glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, warp.imagewidth, 
warp.imageheight, 0, GL_RGB8,
+                               GL_UNSIGNED_BYTE, 0);
+               glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, 
warp.imagewidth, warp.imageheight, 0);
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, 
GL_LINEAR);
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 
GL_LINEAR);
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 
GL_CLAMP_TO_EDGE);
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, 
GL_CLAMP_TO_EDGE);
+       }
 }
 
 void KX_Dome::ClearGLImages(void)
 {
-       glDeleteTextures(m_numfaces, (GLuint*)&domefacesId);
+       glDeleteTextures(m_numimages, (GLuint*)&domefacesId);
 /*
-       for (int i=0;i<m_numfaces;i++)
+       for (int i=0;i<m_numimages;i++)
                if(glIsTexture(domefacesId[i]))
                        glDeleteTextures(1, (GLuint*)&domefacesId[i]);
 */
@@ -180,12 +219,27 @@
        while ((1 << i) <= m_buffersize)
                i++;
        m_imagesize = (1 << i);
+
+       if (warp.usemesh){
+               warp.bufferwidth = canvaswidth;
+               warp.bufferheight = canvasheight;
+
+               i = 0;
+               while ((1 << i) <= warp.bufferwidth)
+                       i++;
+               warp.imagewidth = (1 << i);
+
+               i = 0;
+               while ((1 << i) <= warp.bufferheight)
+                       i++;
+               warp.imageheight = (1 << i);
+       }
 }
 
-void KX_Dome::CreateDL(){
+bool KX_Dome::CreateDL(){
        int i,j;
 
-       dlistId = glGenLists((GLsizei) m_numfaces);
+       dlistId = glGenLists((GLsizei) m_numimages);
        if (dlistId != 0) {
                if(m_mode == DOME_FISHEYE || m_mode == DOME_TRUNCATED){
                        glNewList(dlistId, GL_COMPILE);
@@ -210,8 +264,8 @@
                                glEndList();
                        }
                }
-               else if (m_mode == DOME_PANORAM_SPH){
-
+               else if (m_mode == DOME_PANORAM_SPH)
+               {
                        glNewList(dlistId, GL_COMPILE);
                                GLDrawTriangles(cubetop, nfacestop);
                        glEndList();
@@ -236,6 +290,13 @@
                                GLDrawTriangles(cuberightback, nfacesrightback);
                        glEndList();
                }
+
+               if(warp.usemesh){
+                       glNewList((dlistId + m_numfaces), GL_COMPILE);
+                               GLDrawWarpQuads();
+                       glEndList();
+               }
+

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