Revision: 16508
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16508
Author:   blendix
Date:     2008-09-13 21:19:51 +0200 (Sat, 13 Sep 2008)

Log Message:
-----------
Game engine: added Rasterizer.get/setMaterialMode to set texface,
multitexture or glsl materials. This does not affect existing
scenes, only newly created ones.

Modified Paths:
--------------
    trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
    trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
    trunk/blender/source/gameengine/PyDoc/Rasterizer.py

Modified: 
trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp     
2008-09-13 18:09:41 UTC (rev 16507)
+++ trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp     
2008-09-13 19:19:51 UTC (rev 16508)
@@ -138,10 +138,12 @@
                bool usemat = false, useglslmat = false;
 
                if(GLEW_ARB_multitexture && GLEW_VERSION_1_1)
-                       usemat = (SYS_GetCommandLineInt(syshandle, 
"blender_material", 0) != 0);
+                       usemat = (SYS_GetCommandLineInt(syshandle, 
"blender_material", 1) != 0);
 
                if(GPU_extensions_minimum_support())
-                       useglslmat = (SYS_GetCommandLineInt(syshandle, 
"blender_glsl_material", 0) != 0);
+                       useglslmat = (SYS_GetCommandLineInt(syshandle, 
"blender_glsl_material", 1) != 0);
+               else if(G.fileflags & G_FILE_GAME_MAT_GLSL)
+                       usemat = false;
 
                // create the canvas, rasterizer and rendertools
                RAS_ICanvas* canvas = new KX_BlenderCanvas(area);
@@ -299,10 +301,10 @@
                        sceneconverter->addInitFromFrame=false;
                        if (always_use_expand_framing)
                                sceneconverter->SetAlwaysUseExpandFraming(true);
-                       
-                       if(usemat)
+
+                       if(usemat && (G.fileflags & G_FILE_GAME_MAT))
                                sceneconverter->SetMaterials(true);
-                       if(useglslmat)
+                       if(useglslmat && (G.fileflags & G_FILE_GAME_MAT_GLSL))
                                sceneconverter->SetGLSLMaterials(true);
                                        
                        KX_Scene* startscene = new KX_Scene(keyboarddevice,

Modified: trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp        
2008-09-13 18:09:41 UTC (rev 16507)
+++ trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp        
2008-09-13 19:19:51 UTC (rev 16508)
@@ -524,17 +524,14 @@
                bool frameRate = (SYS_GetCommandLineInt(syshandle, 
"show_framerate", 0) != 0);
                bool useLists = (SYS_GetCommandLineInt(syshandle, 
"displaylists", G.fileflags & G_FILE_DISPLAY_LISTS) != 0);
 
-               if(GLEW_ARB_multitexture && GLEW_VERSION_1_1) {
-                       int gameflag =(G.fileflags & G_FILE_GAME_MAT);
-                       m_blendermat = (SYS_GetCommandLineInt(syshandle, 
"blender_material", gameflag) != 0);
-               }
+               if(GLEW_ARB_multitexture && GLEW_VERSION_1_1)
+                       m_blendermat = (SYS_GetCommandLineInt(syshandle, 
"blender_material", 1) != 0);
 
-               if(GPU_extensions_minimum_support()) {
-                       int gameflag = (G.fileflags & G_FILE_GAME_MAT_GLSL);
+               if(GPU_extensions_minimum_support())
+                       m_blenderglslmat = (SYS_GetCommandLineInt(syshandle, 
"blender_glsl_material", 1) != 0);
+               else if(G.fileflags & G_FILE_GAME_MAT_GLSL)
+                       m_blendermat = false;
 
-                       m_blenderglslmat = (SYS_GetCommandLineInt(syshandle, 
"blender_glsl_material", gameflag) != 0);
-               }
-       
                // create the canvas, rasterizer and rendertools
                m_canvas = new GPG_Canvas(window);
                if (!m_canvas)
@@ -657,12 +654,12 @@
        {
                STR_String startscenename = m_startSceneName.Ptr();
                m_ketsjiengine->SetSceneConverter(m_sceneconverter);
-               
+
                //      if (always_use_expand_framing)
                //              sceneconverter->SetAlwaysUseExpandFraming(true);
-               if(m_blendermat)
+               if(m_blendermat && (G.fileflags & G_FILE_GAME_MAT))
                        m_sceneconverter->SetMaterials(true);
-               if(m_blenderglslmat)
+               if(m_blenderglslmat && (G.fileflags & G_FILE_GAME_MAT_GLSL))
                        m_sceneconverter->SetGLSLMaterials(true);
 
                KX_Scene* startscene = new KX_Scene(m_keyboard,

Modified: trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp    2008-09-13 
18:09:41 UTC (rev 16507)
+++ trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp    2008-09-13 
19:19:51 UTC (rev 16508)
@@ -303,7 +303,7 @@
        
     if((dp  = opendir(cpath)) == NULL) {
                /* todo, show the errno, this shouldnt happen anyway if the 
blendfile is readable */
-               fprintf(stderr, "Could not read directoty () failed, code %d 
(%s)\n", cpath, errno, strerror(errno));
+               fprintf(stderr, "Could not read directoty (%s) failed, code %d 
(%s)\n", cpath, errno, strerror(errno));
                return list;
     }
        
@@ -696,7 +696,7 @@
                                                                                
        PyObject*)
 {
        char *setting;
-       int enable, flag;
+       int enable, flag, fileflags;
 
        if (!PyArg_ParseTuple(args,"si",&setting,&enable))
                return NULL;
@@ -707,6 +707,8 @@
                PyErr_SetString(PyExc_ValueError, "glsl setting is not known");
                return NULL;
        }
+
+       fileflags = G.fileflags;
        
        if (enable)
                G.fileflags &= ~flag;
@@ -714,17 +716,19 @@
                G.fileflags |= flag;
 
        /* display lists and GLSL materials need to be remade */
-       if(gp_KetsjiEngine) {
-               KX_SceneList *scenes = gp_KetsjiEngine->CurrentScenes();
-               KX_SceneList::iterator it;
+       if(G.fileflags != fileflags) {
+               if(gp_KetsjiEngine) {
+                       KX_SceneList *scenes = gp_KetsjiEngine->CurrentScenes();
+                       KX_SceneList::iterator it;
 
-               for(it=scenes->begin(); it!=scenes->end(); it++)
-                       if((*it)->GetBucketManager())
-                               
(*it)->GetBucketManager()->ReleaseDisplayLists();
+                       for(it=scenes->begin(); it!=scenes->end(); it++)
+                               if((*it)->GetBucketManager())
+                                       
(*it)->GetBucketManager()->ReleaseDisplayLists();
+               }
+
+               GPU_materials_free();
        }
 
-       GPU_materials_free();
-
        Py_RETURN_NONE;
 }
 
@@ -749,6 +753,50 @@
        return PyInt_FromLong(enabled);
 }
 
+#define KX_TEXFACE_MATERIAL                            0
+#define KX_BLENDER_MULTITEX_MATERIAL   1
+#define KX_BLENDER_GLSL_MATERIAL               2
+
+static PyObject* gPySetMaterialType(PyObject*,
+                                                                       
PyObject* args,
+                                                                       
PyObject*)
+{
+       int flag, type;
+
+       if (!PyArg_ParseTuple(args,"i",&type))
+               return NULL;
+
+       if(type == KX_BLENDER_GLSL_MATERIAL)
+               flag = G_FILE_GAME_MAT|G_FILE_GAME_MAT_GLSL;
+       else if(type == KX_BLENDER_MULTITEX_MATERIAL)
+               flag = G_FILE_GAME_MAT;
+       else if(type == KX_TEXFACE_MATERIAL)
+               flag = 0;
+       else {
+               PyErr_SetString(PyExc_ValueError, "material type is not known");
+               return NULL;
+       }
+
+       G.fileflags &= ~(G_FILE_GAME_MAT|G_FILE_GAME_MAT_GLSL);
+       G.fileflags |= flag;
+
+       Py_RETURN_NONE;
+}
+
+static PyObject* gPyGetMaterialType(PyObject*)
+{
+       int flag;
+
+       if(G.fileflags & (G_FILE_GAME_MAT|G_FILE_GAME_MAT_GLSL))
+               flag = KX_BLENDER_GLSL_MATERIAL;
+       else if(G.fileflags & G_FILE_GAME_MAT)
+               flag = KX_BLENDER_MULTITEX_MATERIAL;
+       else
+               flag = KX_TEXFACE_MATERIAL;
+       
+       return PyInt_FromLong(flag);
+}
+
 STR_String     gPyGetWindowHeight__doc__="getWindowHeight doc";
 STR_String     gPyGetWindowWidth__doc__="getWindowWidth doc";
 STR_String     gPyEnableVisibility__doc__="enableVisibility doc";
@@ -782,6 +830,10 @@
   {"getEyeSeparation", (PyCFunction) gPyGetEyeSeparation, METH_VARARGS, "get 
the eye separation for stereo mode"},
   {"setFocalLength", (PyCFunction) gPySetFocalLength, METH_VARARGS, "set the 
focal length for stereo mode"},
   {"getFocalLength", (PyCFunction) gPyGetFocalLength, METH_VARARGS, "get the 
focal length for stereo mode"},
+  {"setMaterialMode",(PyCFunction) gPySetMaterialType,
+   METH_VARARGS, "set the material mode to use for OpenGL rendering"},
+  {"getMaterialMode",(PyCFunction) gPyGetMaterialType,
+   METH_NOARGS, "get the material mode being used for OpenGL rendering"},
   {"setGLSLMaterialSetting",(PyCFunction) gPySetGLSLMaterialSetting,
    METH_VARARGS, "set the state of a GLSL material setting"},
   {"getGLSLMaterialSetting",(PyCFunction) gPyGetGLSLMaterialSetting,
@@ -1111,6 +1163,11 @@
   ErrorObject = PyString_FromString("Rasterizer.error");
   PyDict_SetItemString(d, "error", ErrorObject);
 
+  /* needed for get/setMaterialType */
+  KX_MACRO_addTypesToDict(d, KX_TEXFACE_MATERIAL, KX_TEXFACE_MATERIAL);
+  KX_MACRO_addTypesToDict(d, KX_BLENDER_MULTITEX_MATERIAL, 
KX_BLENDER_MULTITEX_MATERIAL);
+  KX_MACRO_addTypesToDict(d, KX_BLENDER_GLSL_MATERIAL, 
KX_BLENDER_GLSL_MATERIAL);
+
   // XXXX Add constants here
 
   // Check for errors

Modified: trunk/blender/source/gameengine/PyDoc/Rasterizer.py
===================================================================
--- trunk/blender/source/gameengine/PyDoc/Rasterizer.py 2008-09-13 18:09:41 UTC 
(rev 16507)
+++ trunk/blender/source/gameengine/PyDoc/Rasterizer.py 2008-09-13 19:19:51 UTC 
(rev 16508)
@@ -37,6 +37,10 @@
        # Centre the mouse
        Rasterizer.setMousePosition(Rasterizer.getWindowWidth()/2, 
Rasterizer.getWindowHeight()/2)
 
[EMAIL PROTECTED] Material Types: KX_TEXFACE_MATERIAL, 
KX_BLENDER_MULTITEX_MATERIAL, KX_BLENDER_GLSL_MATERIAL
[EMAIL PROTECTED] KX_TEXFACE_MATERIAL: Materials as defined by the texture face 
settings.
[EMAIL PROTECTED] KX_BLENDER_MULTITEX_MATERIAL: Materials approximating blender 
materials with multitexturing.
[EMAIL PROTECTED] KX_BLENDER_BLENDER_MATERIAL: Materials approximating blender 
materials with GLSL.
        
 """
 
@@ -147,6 +151,21 @@
        @rtype: float
        """
 
+def setMaterialMode(mode):
+       """
+       Set the material mode to use for OpenGL rendering.
+       
+       @type mode: KX_TEXFACE_MATERIAL, KX_BLENDER_MULTITEX_MATERIAL, 
KX_BLENDER_GLSL_MATERIAL
+       @note: Changes will only affect newly created scenes.
+       """
+
+def getMaterialMode(mode):
+       """
+       Get the material mode to use for OpenGL rendering.
+       
+       @rtype: KX_TEXFACE_MATERIAL, KX_BLENDER_MULTITEX_MATERIAL, 
KX_BLENDER_GLSL_MATERIAL
+       """
+
 def setGLSLMaterialSetting(setting, enable):
        """
        Enables or disables a GLSL material setting.


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to