Revision: 15517
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15517
Author:   blendix
Date:     2008-07-10 14:47:20 +0200 (Thu, 10 Jul 2008)

Log Message:
-----------
Sync with Apricot Game Engine
=============================

* Clean up and optimizations in skinned/deformed mesh code.
* Compatibility fixes and clean up in the rasterizer.
* Changes related to GLSL shadow buffers which should have no
  effect, to keep the code in sync with apricot.

Modified Paths:
--------------
    trunk/blender/intern/moto/include/GEN_Map.h
    trunk/blender/source/blender/src/usiblender.c
    trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
    trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
    trunk/blender/source/gameengine/Converter/BL_MeshDeformer.cpp
    trunk/blender/source/gameengine/Converter/BL_MeshDeformer.h
    trunk/blender/source/gameengine/Converter/BL_ShapeDeformer.h
    trunk/blender/source/gameengine/Converter/BL_SkinDeformer.cpp
    trunk/blender/source/gameengine/Converter/BL_SkinDeformer.h
    trunk/blender/source/gameengine/Converter/BL_SkinMeshObject.cpp
    trunk/blender/source/gameengine/Converter/BL_SkinMeshObject.h
    trunk/blender/source/gameengine/Ketsji/BL_BlenderShader.cpp
    trunk/blender/source/gameengine/Ketsji/BL_BlenderShader.h
    trunk/blender/source/gameengine/Ketsji/BL_Material.cpp
    trunk/blender/source/gameengine/Ketsji/BL_Material.h
    trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
    trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
    trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.h
    trunk/blender/source/gameengine/Ketsji/KX_Light.cpp
    trunk/blender/source/gameengine/Ketsji/KX_Light.h
    trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp
    trunk/blender/source/gameengine/Ketsji/KX_Scene.h
    trunk/blender/source/gameengine/Rasterizer/RAS_BucketManager.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
    trunk/blender/source/gameengine/Rasterizer/RAS_IRasterizer.h
    trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.h
    trunk/blender/source/gameengine/Rasterizer/RAS_MeshObject.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_MeshObject.h
    
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
    
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
    
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
    
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
    
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
    
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.h
    trunk/blender/source/gameengine/Rasterizer/RAS_TexVert.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_TexVert.h
    trunk/blender/source/kernel/gen_system/GEN_HashedPtr.h
    trunk/blender/source/kernel/gen_system/GEN_Map.h

Modified: trunk/blender/intern/moto/include/GEN_Map.h
===================================================================
--- trunk/blender/intern/moto/include/GEN_Map.h 2008-07-10 01:47:51 UTC (rev 
15516)
+++ trunk/blender/intern/moto/include/GEN_Map.h 2008-07-10 12:47:20 UTC (rev 
15517)
@@ -82,6 +82,24 @@
         }
         return 0;
     }
+
+    Key* getKey(int index) {
+        int count=0;
+        for (int i=0;i<m_num_buckets;i++)
+        {
+            Entry* bucket = m_buckets[i];
+            while(bucket)
+            {
+                if (count==index)
+                {
+                    return &bucket->m_key;
+                }
+                bucket = bucket->m_next;
+                count++;
+            }
+        }
+        return 0;
+    }
     
     void clear() {
         for (int i = 0; i < m_num_buckets; ++i) {

Modified: trunk/blender/source/blender/src/usiblender.c
===================================================================
--- trunk/blender/source/blender/src/usiblender.c       2008-07-10 01:47:51 UTC 
(rev 15516)
+++ trunk/blender/source/blender/src/usiblender.c       2008-07-10 12:47:20 UTC 
(rev 15517)
@@ -34,6 +34,8 @@
 #include <stdio.h>
 #include <string.h>
 
+#include "GL/glew.h"
+
 #ifdef WIN32
 #include <windows.h> /* need to include windows.h so _WIN32_IE is defined  */
 #ifndef _WIN32_IE

Modified: trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp    
2008-07-10 01:47:51 UTC (rev 15516)
+++ trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp    
2008-07-10 12:47:20 UTC (rev 15517)
@@ -26,6 +26,7 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
+#include "GL/glew.h"
 #include "KX_BlenderGL.h"
 
 #ifdef HAVE_CONFIG_H
@@ -44,7 +45,6 @@
 
 #include "BMF_Api.h"
 
-#include "GL/glew.h"
 #include "BIF_gl.h"
 
 #include "BL_Material.h" // MAXTEX

Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp      
2008-07-10 01:47:51 UTC (rev 15516)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp      
2008-07-10 12:47:20 UTC (rev 15517)
@@ -312,11 +312,13 @@
        Mesh* mesh, 
        Material *mat, 
        MTFace* tface,  
+       const char *tfaceName,
        MFace* mface, 
        MCol* mmcol, 
        int lightlayer, 
        Object* blenderobj,
-       MTF_localLayer *layers)
+       MTF_localLayer *layers,
+       bool glslmat)
 {
        //this needs some type of manager
        BL_Material *material = new BL_Material();
@@ -335,7 +337,7 @@
        if(validmat) {
 
                // use vertex colors by explicitly setting
-               if(mat->mode &MA_VERTEXCOLP)
+               if(mat->mode &MA_VERTEXCOLP || glslmat)
                        type = 0;
 
                // use lighting?
@@ -558,6 +560,7 @@
        }
        else {
                int valid = 0;
+
                // check for tface tex to fallback on
                if( validface ){
 
@@ -590,6 +593,7 @@
        }
        MT_Point2 uv[4];
        MT_Point2 uv2[4];
+       const char *uvName = "", *uv2Name = "";
 
        uv[0]= uv[1]= uv[2]= uv[3]= MT_Point2(0.0f, 0.0f);
        uv2[0]= uv2[1]= uv2[2]= uv2[3]= MT_Point2(0.0f, 0.0f);
@@ -616,6 +620,8 @@
 
                if (mface->v4) 
                        uv[3]   = MT_Point2(tface->uv[3]);
+
+               uvName = tfaceName;
        } 
        else {
                // nothing at all
@@ -641,40 +647,39 @@
                                isFirstSet = false;
                        else
                        {
-                               MT_Point2 uvSet[4];
                                for (int lay=0; lay<MAX_MTFACE; lay++)
                                {
                                        MTF_localLayer& layer = layers[lay];
                                        if (layer.face == 0) break;
 
-
-                                       bool processed = false;
                                        if (strcmp(map.uvCoName.ReadPtr(), 
layer.name)==0)
                                        {
+                                               MT_Point2 uvSet[4];
+
                                                uvSet[0]        = 
MT_Point2(layer.face->uv[0]);
                                                uvSet[1]        = 
MT_Point2(layer.face->uv[1]);
                                                uvSet[2]        = 
MT_Point2(layer.face->uv[2]);
 
                                                if (mface->v4) 
                                                        uvSet[3]        = 
MT_Point2(layer.face->uv[3]);
+                                               else
+                                                       uvSet[3]        = 
MT_Point2(0.0f, 0.0f);
 
-                                               processed = true;
+                                               if (isFirstSet)
+                                               {
+                                                       uv[0] = uvSet[0]; uv[1] 
= uvSet[1];
+                                                       uv[2] = uvSet[2]; uv[3] 
= uvSet[3];
+                                                       isFirstSet = false;
+                                                       uvName = layer.name;
+                                               }
+                                               else
+                                               {
+                                                       uv2[0] = uvSet[0]; 
uv2[1] = uvSet[1];
+                                                       uv2[2] = uvSet[2]; 
uv2[3] = uvSet[3];
+                                                       map.mapping |= 
USECUSTOMUV;
+                                                       uv2Name = layer.name;
+                                               }
                                        }
-
-                                       if (!processed) continue;
-
-                                       if (isFirstSet)
-                                       {
-                                               uv[0] = uvSet[0]; uv[1] = 
uvSet[1];
-                                               uv[2] = uvSet[2]; uv[3] = 
uvSet[3];
-                                               isFirstSet = false;
-                                       }
-                                       else
-                                       {
-                                               uv2[0] = uvSet[0]; uv2[1] = 
uvSet[1];
-                                               uv2[2] = uvSet[2]; uv2[3] = 
uvSet[3];
-                                               map.mapping |= USECUSTOMUV;
-                                       }
                                }
                        }
                }
@@ -693,10 +698,9 @@
        }
 
        material->SetConversionRGB(rgb);
-       material->SetConversionUV(uv);
-       material->SetConversionUV2(uv2);
+       material->SetConversionUV(uvName, uv);
+       material->SetConversionUV2(uv2Name, uv2);
 
-
        material->ras_mode |= (mface->v4==0)?TRIANGLE:0;
        if(validmat)
                material->matname       =(mat->id.name);
@@ -797,6 +801,7 @@
        
        MFace* mface = static_cast<MFace*>(mesh->mface);
        MTFace* tface = static_cast<MTFace*>(mesh->mtface);
+       const char *tfaceName = "";
        MCol* mmcol = mesh->mcol;
        MT_assert(mface || mesh->totface == 0);
 
@@ -832,14 +837,14 @@
 
                        layers[validLayers].face = 
(MTFace*)mesh->fdata.layers[i].data;;
                        layers[validLayers].name = mesh->fdata.layers[i].name;
+                       if(tface == layers[validLayers].face)
+                               tfaceName = layers[validLayers].name;
                        validLayers++;
                }
        }
 
        meshobj->SetName(mesh->id.name);
        meshobj->m_xyz_index_to_vertex_index_mapping.resize(mesh->totvert);
-       if(skinMesh)
-               
((BL_SkinMeshObject*)meshobj)->m_mvert_to_dvert_mapping.resize(mesh->totvert);
        for (int f=0;f<mesh->totface;f++,mface++)
        {
                
@@ -898,8 +903,7 @@
                                        else 
                                                ma = 
give_current_material(blenderobj, 1);
 
-                                       bl_mat = ConvertMaterial(mesh, ma, 
tface, mface, mmcol, lightlayer, blenderobj, layers);
-                                       bl_mat->glslmat = 
converter->GetGLSLMaterials();
+                                       bl_mat = ConvertMaterial(mesh, ma, 
tface, tfaceName, mface, mmcol, lightlayer, blenderobj, layers, 
converter->GetGLSLMaterials());
                                        // set the index were dealing with
                                        bl_mat->material_index =  
(int)mface->mat_nr;
 
@@ -1059,35 +1063,25 @@
                                int nverts = mface->v4?4:3;
                                int vtxarray = 
meshobj->FindVertexArray(nverts,polymat);
                                RAS_Polygon* poly = new 
RAS_Polygon(bucket,polyvisible,nverts,vtxarray);
+
+                               bool flat;
+
                                if (skinMesh) {
-                                       int d1, d2, d3, d4=0;
-                                       bool flat;
-
                                        /* If the face is set to solid, all 
fnors are the same */
                                        if (mface->flag & ME_SMOOTH)
                                                flat = false;
                                        else
                                                flat = true;
-                                       
-                                       
d1=((BL_SkinMeshObject*)meshobj)->FindOrAddDeform(vtxarray, mface->v1, 
&mesh->dvert[mface->v1], polymat);
-                                       
d2=((BL_SkinMeshObject*)meshobj)->FindOrAddDeform(vtxarray, mface->v2, 
&mesh->dvert[mface->v2], polymat);
-                                       
d3=((BL_SkinMeshObject*)meshobj)->FindOrAddDeform(vtxarray, mface->v3, 
&mesh->dvert[mface->v3], polymat);
-                                       if (nverts==4)
-                                               
d4=((BL_SkinMeshObject*)meshobj)->FindOrAddDeform(vtxarray, mface->v4, 
&mesh->dvert[mface->v4], polymat);
-                                       
poly->SetVertex(0,((BL_SkinMeshObject*)meshobj)->FindOrAddVertex(vtxarray,pt0,uv0,uv20,tan0,rgb0,no0,d1,flat,polymat,mface->v1));
-                                       
poly->SetVertex(1,((BL_SkinMeshObject*)meshobj)->FindOrAddVertex(vtxarray,pt1,uv1,uv21,tan1,rgb1,no1,d2,flat,polymat,mface->v2));
-                                       
poly->SetVertex(2,((BL_SkinMeshObject*)meshobj)->FindOrAddVertex(vtxarray,pt2,uv2,uv22,tan2,rgb2,no2,d3,flat,polymat,mface->v3));
-                                       if (nverts==4)
-                                               
poly->SetVertex(3,((BL_SkinMeshObject*)meshobj)->FindOrAddVertex(vtxarray,pt3,uv3,uv23,tan3,rgb3,no3,d4,flat,polymat,mface->v4));
                                }
                                else
-                               {
-                                       
poly->SetVertex(0,meshobj->FindOrAddVertex(vtxarray,pt0,uv0,uv20,tan0,rgb0,no0,false,polymat,mface->v1));
-                                       
poly->SetVertex(1,meshobj->FindOrAddVertex(vtxarray,pt1,uv1,uv21,tan1,rgb1,no1,false,polymat,mface->v2));
-                                       
poly->SetVertex(2,meshobj->FindOrAddVertex(vtxarray,pt2,uv2,uv22,tan2,rgb2,no2,false,polymat,mface->v3));
-                                       if (nverts==4)
-                                               
poly->SetVertex(3,meshobj->FindOrAddVertex(vtxarray,pt3,uv3,uv23,tan3,rgb3,no3,false,polymat,mface->v4));
-                               }
+                                       flat = false;
+
+                               
poly->SetVertex(0,meshobj->FindOrAddVertex(vtxarray,pt0,uv0,uv20,tan0,rgb0,no0,flat,polymat,mface->v1));
+                               
poly->SetVertex(1,meshobj->FindOrAddVertex(vtxarray,pt1,uv1,uv21,tan1,rgb1,no1,flat,polymat,mface->v2));
+                               
poly->SetVertex(2,meshobj->FindOrAddVertex(vtxarray,pt2,uv2,uv22,tan2,rgb2,no2,flat,polymat,mface->v3));
+                               if (nverts==4)
+                                       
poly->SetVertex(3,meshobj->FindOrAddVertex(vtxarray,pt3,uv3,uv23,tan3,rgb3,no3,flat,polymat,mface->v4));
+
                                meshobj->AddPolygon(poly);
                                if (poly->IsCollider())
                                {
@@ -1125,8 +1119,6 @@
                }
        }
        meshobj->m_xyz_index_to_vertex_index_mapping.clear();
-       if(skinMesh)
-               ((BL_SkinMeshObject*)meshobj)->m_mvert_to_dvert_mapping.clear();
        meshobj->UpdateMaterialList();
 
        // pre calculate texture generation
@@ -1545,7 +1537,7 @@
 
 
 
-static KX_LightObject *gamelight_from_blamp(Lamp *la, unsigned int layerflag, 
KX_Scene *kxscene, RAS_IRenderTools *rendertools, KX_BlenderSceneConverter 
*converter) {
+static KX_LightObject *gamelight_from_blamp(Object *ob, Lamp *la, unsigned int 
layerflag, KX_Scene *kxscene, RAS_IRenderTools *rendertools, 
KX_BlenderSceneConverter *converter) {
        RAS_LightObject lightobj;
        KX_LightObject *gamelight;
        
@@ -1577,8 +1569,15 @@
        } else {
                lightobj.m_type = RAS_LightObject::LIGHT_NORMAL;
        }
+
+#ifdef BLENDER_GLSL
+       if(converter->GetGLSLMaterials())
+               GPU_lamp_from_blender(ob, la);
        
-       gamelight = new KX_LightObject(kxscene, KX_Scene::m_callbacks, 
rendertools, lightobj);
+       gamelight = new KX_LightObject(kxscene, KX_Scene::m_callbacks, 
rendertools, lightobj, ob->gpulamp);
+#else
+       gamelight = new KX_LightObject(kxscene, KX_Scene::m_callbacks, 
rendertools, lightobj, NULL);
+#endif
        BL_ConvertLampIpos(la, gamelight, converter);
        
        return gamelight;
@@ -1610,7 +1609,7 @@
        {
        case OB_LAMP:
        {
-               KX_LightObject* gamelight= 
gamelight_from_blamp(static_cast<Lamp*>(ob->data), ob->lay, kxscene, 
rendertools, converter);
+               KX_LightObject* gamelight= gamelight_from_blamp(ob, 
static_cast<Lamp*>(ob->data), ob->lay, kxscene, rendertools, converter);
                gameobj = gamelight;
                
                gamelight->AddRef();
@@ -1660,7 +1659,7 @@
                // two options exists for deform: shape keys and armature
                // only support relative shape key

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to