Revision: 15606
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15606
Author:   blendix
Date:     2008-07-16 18:20:52 +0200 (Wed, 16 Jul 2008)

Log Message:
-----------
Apricot: GLSL
=============

* Moved GLSL setting switching functions into the game engine
  python API so they work in the blender player, and can do
  better state switching.
* Also fixes bug #17331, error compiling with cmake.

* For the makers of test builds: it would be great if builds of
  this revision or newer for various platforms could be made
  available. We want to release a file to test and benchmark
  GLSL on different graphics cards, and we need test builds for
  this. Thanks!

Modified Paths:
--------------
    branches/apricot/source/blender/python/SConscript
    branches/apricot/source/blender/python/api2_2x/Blender.c
    branches/apricot/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    branches/apricot/source/gameengine/GamePlayer/ActiveX/BlenderPlayerCtl.cpp
    branches/apricot/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
    
branches/apricot/source/gameengine/GamePlayer/netscape/src/ketsji/KXH_ketsji_hooks.cpp
    branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.cpp
    branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.h
    branches/apricot/source/gameengine/Ketsji/KX_PythonInit.cpp
    branches/apricot/source/gameengine/Ketsji/KX_PythonInit.h
    branches/apricot/source/gameengine/PyDoc/Rasterizer.py

Modified: branches/apricot/source/blender/python/SConscript
===================================================================
--- branches/apricot/source/blender/python/SConscript   2008-07-16 15:44:47 UTC 
(rev 15605)
+++ branches/apricot/source/blender/python/SConscript   2008-07-16 16:20:52 UTC 
(rev 15606)
@@ -6,7 +6,7 @@
 incs = 'api2_2x ../blenkernel ../nodes ../blenlib ../blenloader'
 incs += ' ../render/extern/include ../radiosity/extern/include'
 incs += ' ../makesdna #intern/guardedalloc #intern/bmfont ../imbuf ../include'
-incs += ' #extern/glew/include ../gpu'
+incs += ' #extern/glew/include'
 incs += ' ' + env['BF_PYTHON_INC']
 incs += ' ' + env['BF_OPENGL_INC']
 

Modified: branches/apricot/source/blender/python/api2_2x/Blender.c
===================================================================
--- branches/apricot/source/blender/python/api2_2x/Blender.c    2008-07-16 
15:44:47 UTC (rev 15605)
+++ branches/apricot/source/blender/python/api2_2x/Blender.c    2008-07-16 
16:20:52 UTC (rev 15606)
@@ -56,7 +56,6 @@
 #include "DNA_screen_types.h"  /* for SPACE_VIEW3D */
 #include "DNA_userdef_types.h"
 #include "DNA_packedFile_types.h"
-#include "GPU_material.h"
 #include "EXPP_interface.h" /* for bpy_gethome() */
 #include "gen_utils.h"
 #include "modules.h"
@@ -316,41 +315,7 @@
                        U.gameflags |= USER_DISABLE_MIPMAP;
                
                set_mipmap(!(U.gameflags & USER_DISABLE_MIPMAP));
-       } 
-       else if(StringEqual( name, "glsl_lights" ) ||
-               StringEqual( name, "glsl_shaders" ) ||
-               StringEqual( name, "glsl_shadows" ) ||
-               StringEqual( name, "glsl_ramps" ) ||
-               StringEqual( name, "glsl_nodes" ) ||
-               StringEqual( name, "glsl_extra_textures" )) {
-
-               int value = PyObject_IsTrue( arg );
-               int flag = 0;
-               
-               if (value==-1)
-                       return EXPP_ReturnPyObjError( PyExc_ValueError,
-                                       "expected an integer" );
-               
-               if(StringEqual( name, "glsl_lights" ))
-                       flag = G_FILE_GLSL_NO_LIGHTS;
-               else if(StringEqual( name, "glsl_shaders" ))
-                       flag = G_FILE_GLSL_NO_SHADERS;
-               else if(StringEqual( name, "glsl_shadows" ))
-                       flag = G_FILE_GLSL_NO_SHADOWS;
-               else if(StringEqual( name, "glsl_ramps" ))
-                       flag = G_FILE_GLSL_NO_RAMPS;
-               else if(StringEqual( name, "glsl_nodes" ))
-                       flag = G_FILE_GLSL_NO_NODES;
-               else if(StringEqual( name, "glsl_extra_textures" ))
-                       flag = G_FILE_GLSL_NO_EXTRA_TEX;
-
-               if (value)
-                       G.fileflags &= ~flag;
-               else
-                       G.fileflags |= flag;
-
-               GPU_materials_free();
-       }else
+       } else
                return ( EXPP_ReturnPyObjError( PyExc_AttributeError,
                                                "value given is not a blender 
setting" ) );
        Py_RETURN_NONE;
@@ -597,18 +562,6 @@
                ret = PyInt_FromLong( (U.flag & USER_FILECOMPRESS) >> 15  );
        else if(StringEqual( str, "mipmap" ))
                ret = PyInt_FromLong( (U.gameflags & USER_DISABLE_MIPMAP)!=0  );
-       else if(StringEqual( str, "glsl_lights" ))
-               ret = PyInt_FromLong( (G.fileflags & G_FILE_GLSL_NO_LIGHTS)==0  
);
-       else if(StringEqual( str, "glsl_shaders" ))
-               ret = PyInt_FromLong( (G.fileflags & G_FILE_GLSL_NO_SHADERS)==0 
 );
-       else if(StringEqual( str, "glsl_shadows" ))
-               ret = PyInt_FromLong( (G.fileflags & G_FILE_GLSL_NO_SHADOWS)==0 
 );
-       else if(StringEqual( str, "glsl_ramps" ))
-               ret = PyInt_FromLong( (G.fileflags & G_FILE_GLSL_NO_RAMPS)==0  
);
-       else if(StringEqual( str, "glsl_nodes" ))
-               ret = PyInt_FromLong( (G.fileflags & G_FILE_GLSL_NO_NODES)==0  
);
-       else if(StringEqual( str, "glsl_extra_textures" ))
-               ret = PyInt_FromLong( (G.fileflags & 
G_FILE_GLSL_NO_EXTRA_TEX)==0  );
        else if(StringEqual( str, "add_view_align" ))
                ret = PyInt_FromLong( ((U.flag & USER_ADD_VIEWALIGNED)!=0)  );
        else if(StringEqual( str, "add_editmode" ))

Modified: 
branches/apricot/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- branches/apricot/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp  
2008-07-16 15:44:47 UTC (rev 15605)
+++ branches/apricot/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp  
2008-07-16 16:20:52 UTC (rev 15606)
@@ -336,7 +336,7 @@
                        PyObject* dictionaryobject = 
initGamePythonScripting("Ketsji", psl_Lowest);
                        ketsjiengine->SetPythonDictionary(dictionaryobject);
                        initRasterizer(rasterizer, canvas);
-                       PyObject *gameLogic = initGameLogic(startscene);
+                       PyObject *gameLogic = initGameLogic(ketsjiengine, 
startscene);
                        PyDict_SetItemString(dictionaryobject, "GameLogic", 
gameLogic); // Same as importing the module.
                        initGameKeys();
                        initPythonConstraintBinding();
@@ -603,7 +603,7 @@
                        PyObject* dictionaryobject = 
initGamePythonScripting("Ketsji", psl_Lowest);
                        ketsjiengine->SetPythonDictionary(dictionaryobject);
                        initRasterizer(rasterizer, canvas);
-                       PyObject *gameLogic = initGameLogic(startscene);
+                       PyObject *gameLogic = initGameLogic(ketsjiengine, 
startscene);
                        PyDict_SetItemString(dictionaryobject, "GameLogic", 
gameLogic); // Same as importing the module
                        initGameKeys();
                        initPythonConstraintBinding();

Modified: 
branches/apricot/source/gameengine/GamePlayer/ActiveX/BlenderPlayerCtl.cpp
===================================================================
--- branches/apricot/source/gameengine/GamePlayer/ActiveX/BlenderPlayerCtl.cpp  
2008-07-16 15:44:47 UTC (rev 15605)
+++ branches/apricot/source/gameengine/GamePlayer/ActiveX/BlenderPlayerCtl.cpp  
2008-07-16 16:20:52 UTC (rev 15606)
@@ -668,7 +668,7 @@
                        m_ketsjiengine->SetPythonDictionary(m_dictionaryobject);
 
                        initRasterizer(m_rasterizer, m_canvas);                 
-                       PyDict_SetItemString(m_dictionaryobject, "GameLogic", 
initGameLogic(startscene)); // Same as importing the module
+                       PyDict_SetItemString(m_dictionaryobject, "GameLogic", 
initGameLogic(m_ketsjiengine, startscene)); // Same as importing the module
                        initGameKeys();
                        
                        initPythonConstraintBinding();

Modified: 
branches/apricot/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
===================================================================
--- branches/apricot/source/gameengine/GamePlayer/ghost/GPG_Application.cpp     
2008-07-16 15:44:47 UTC (rev 15605)
+++ branches/apricot/source/gameengine/GamePlayer/ghost/GPG_Application.cpp     
2008-07-16 16:20:52 UTC (rev 15606)
@@ -651,7 +651,7 @@
                PyObject* dictionaryobject = 
initGamePlayerPythonScripting("Ketsji", psl_Lowest);
                m_ketsjiengine->SetPythonDictionary(dictionaryobject);
                initRasterizer(m_rasterizer, m_canvas);
-               PyDict_SetItemString(dictionaryobject, "GameLogic", 
initGameLogic(startscene)); // Same as importing the module
+               PyDict_SetItemString(dictionaryobject, "GameLogic", 
initGameLogic(m_ketsjiengine, startscene)); // Same as importing the module
                initGameKeys();
                initPythonConstraintBinding();
 

Modified: 
branches/apricot/source/gameengine/GamePlayer/netscape/src/ketsji/KXH_ketsji_hooks.cpp
===================================================================
--- 
branches/apricot/source/gameengine/GamePlayer/netscape/src/ketsji/KXH_ketsji_hooks.cpp
      2008-07-16 15:44:47 UTC (rev 15605)
+++ 
branches/apricot/source/gameengine/GamePlayer/netscape/src/ketsji/KXH_ketsji_hooks.cpp
      2008-07-16 16:20:52 UTC (rev 15606)
@@ -567,7 +567,7 @@
                                       startSceneName->Ptr());
                
                initRasterizer(k->rasterizer, k->canvas_device);;
-               PyDict_SetItemString(dictionaryobject, "GameLogic", 
initGameLogic(startscene)); // Same as importing the module
+               PyDict_SetItemString(dictionaryobject, "GameLogic", 
initGameLogic(k->kx_engine, startscene)); // Same as importing the module
                initGameKeys();
                initPythonConstraintBinding();
                

Modified: branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.cpp
===================================================================
--- branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.cpp      
2008-07-16 15:44:47 UTC (rev 15605)
+++ branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.cpp      
2008-07-16 16:20:52 UTC (rev 15606)
@@ -29,8 +29,10 @@
        return (Scene*)G.main->scene.first;
 }
 
-const bool BL_BlenderShader::Ok()const
+bool BL_BlenderShader::Ok()
 {
+       VerifyShader();
+
        return (mMat && mMat->gpumaterial);
 }
 
@@ -61,15 +63,7 @@
        if(mMat && !mMat->gpumaterial)
                GPU_material_from_blender(mBlenderScene, mMat);
 
-       if(mMat && mMat->gpumaterial != mGPUMat) {
-               mGPUMat = mMat->gpumaterial;
-
-               /* this is shaky - display lists are wrong now after the
-                * material changed, so we set all meshes as modified to
-                * rebuild their display lists */
-               if(mScene->GetBucketManager())
-                       mScene->GetBucketManager()->ReleaseDisplayLists();
-       }
+       mGPUMat = mMat->gpumaterial;
        
        return (mMat && mGPUMat);
 }

Modified: branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.h
===================================================================
--- branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.h        
2008-07-16 15:44:47 UTC (rev 15605)
+++ branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.h        
2008-07-16 16:20:52 UTC (rev 15606)
@@ -40,7 +40,7 @@
        BL_BlenderShader(KX_Scene *scene, struct Material *ma, int lightlayer);
        virtual ~BL_BlenderShader();
 
-       const bool                      Ok()const;
+       bool                            Ok();
        void                            SetProg(bool enable);
 
        int GetAttribNum();

Modified: branches/apricot/source/gameengine/Ketsji/KX_PythonInit.cpp
===================================================================
--- branches/apricot/source/gameengine/Ketsji/KX_PythonInit.cpp 2008-07-16 
15:44:47 UTC (rev 15605)
+++ branches/apricot/source/gameengine/Ketsji/KX_PythonInit.cpp 2008-07-16 
16:20:52 UTC (rev 15606)
@@ -51,13 +51,13 @@
 #include "BL_ActionActuator.h"
 #include "RAS_IRasterizer.h"
 #include "RAS_ICanvas.h"
+#include "RAS_BucketManager.h"
 #include "MT_Vector3.h"
 #include "MT_Point3.h"
 #include "ListValue.h"
 #include "KX_Scene.h"
 #include "SND_DeviceManager.h"
 
-#include "RAS_OpenGLRasterizer/RAS_GLExtensionManager.h"
 #include "BL_Shader.h"
 
 #include "KX_PyMath.h"
@@ -73,6 +73,7 @@
 #include "BKE_utildefines.h"
 #include "BKE_global.h"
 #include "BLI_blenlib.h"
+#include "GPU_material.h"
 
 static void setSandbox(TPythonSecurityLevel level);
 
@@ -80,6 +81,7 @@
 // 'local' copy of canvas ptr, for window height/width python scripts
 static RAS_ICanvas* gp_Canvas = NULL;
 static KX_Scene*       gp_KetsjiScene = NULL;
+static KX_KetsjiEngine*        gp_KetsjiEngine = NULL;
 static RAS_IRasterizer* gp_Rasterizer = NULL;
 
 void   KX_RasterizerDrawDebugLine(const MT_Vector3& from,const MT_Vector3& 
to,const MT_Vector3& color)
@@ -671,6 +673,76 @@
        Py_Return;
 }
 
+int getGLSLSettingFlag(char *setting)

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