[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19529] branches/ge_dome/source: Warp Mesh supported now.

Dalai Felinto dfelinto at gmail.com
Sat Apr 4 04:05:58 CEST 2009


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




More information about the Bf-blender-cvs mailing list