[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