Revision: 15258
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15258
Author:   blendix
Date:     2008-06-18 00:03:17 +0200 (Wed, 18 Jun 2008)

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

* GLSL in the game engine now uses the second uv layer too.

Modified Paths:
--------------
    branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp
    branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.cpp
    branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.h
    branches/apricot/source/gameengine/Ketsji/BL_Material.cpp
    branches/apricot/source/gameengine/Ketsji/BL_Material.h
    branches/apricot/source/gameengine/Ketsji/KX_BlenderMaterial.cpp

Modified: 
branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp   
2008-06-17 21:23:51 UTC (rev 15257)
+++ branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp   
2008-06-17 22:03:17 UTC (rev 15258)
@@ -310,6 +310,7 @@
        Mesh* mesh, 
        Material *mat, 
        MTFace* tface,  
+       const char *tfaceName,
        MFace* mface, 
        MCol* mmcol, 
        int lightlayer, 
@@ -588,6 +589,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);
@@ -614,6 +616,8 @@
 
                if (mface->v4) 
                        uv[3]   = MT_Point2(tface->uv[3]);
+
+               uvName = tfaceName;
        } 
        else {
                // nothing at all
@@ -639,40 +643,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;
-                                       }
                                }
                        }
                }
@@ -691,10 +694,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);
@@ -795,6 +797,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);
 
@@ -830,6 +833,8 @@
 
                        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++;
                }
        }
@@ -896,7 +901,7 @@
                                        else 
                                                ma = 
give_current_material(blenderobj, 1);
 
-                                       bl_mat = ConvertMaterial(mesh, ma, 
tface, mface, mmcol, lightlayer, blenderobj, layers);
+                                       bl_mat = ConvertMaterial(mesh, ma, 
tface, tfaceName, mface, mmcol, lightlayer, blenderobj, layers);
                                        bl_mat->glslmat = 
converter->GetGLSLMaterials();
                                        // set the index were dealing with
                                        bl_mat->material_index =  
(int)mface->mat_nr;

Modified: branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.cpp
===================================================================
--- branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.cpp      
2008-06-17 21:23:51 UTC (rev 15257)
+++ branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.cpp      
2008-06-17 22:03:17 UTC (rev 15258)
@@ -2,6 +2,7 @@
 #include "DNA_customdata_types.h"
 
 #include "BL_BlenderShader.h"
+#include "BL_Material.h"
 
 #include "GPU_extensions.h"
 #include "GPU_material.h"
@@ -69,7 +70,7 @@
        return enabled;
 }
 
-void BL_BlenderShader::SetTexCoords(RAS_IRasterizer* ras)
+void BL_BlenderShader::SetTexCoords(RAS_IRasterizer* ras, const BL_Material 
*mat)
 {
        GPUVertexAttribs attribs;
        int i, attrib_num;
@@ -90,8 +91,14 @@
                        if(attribs.layer[i].glindex > attrib_num)
                                continue;
 
-                       if(attribs.layer[i].type == CD_MTFACE)
-                               ras->SetAttrib(RAS_IRasterizer::RAS_TEXCO_UV1, 
attribs.layer[i].glindex);
+                       if(attribs.layer[i].type == CD_MTFACE) {
+                               if(!mat->uvName.IsEmpty() && 
strcmp(mat->uvName.ReadPtr(), attribs.layer[i].name) == 0)
+                                       
ras->SetAttrib(RAS_IRasterizer::RAS_TEXCO_UV1, attribs.layer[i].glindex);
+                               else if(!mat->uv2Name.IsEmpty() && 
strcmp(mat->uv2Name.ReadPtr(), attribs.layer[i].name) == 0)
+                                       
ras->SetAttrib(RAS_IRasterizer::RAS_TEXCO_UV2, attribs.layer[i].glindex);
+                               else
+                                       
ras->SetAttrib(RAS_IRasterizer::RAS_TEXCO_UV1, attribs.layer[i].glindex);
+                       }
                        else if(attribs.layer[i].type == CD_TANGENT)
                                ras->SetAttrib(RAS_IRasterizer::RAS_TEXTANGENT, 
attribs.layer[i].glindex);
                        else if(attribs.layer[i].type == CD_ORCO)

Modified: branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.h
===================================================================
--- branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.h        
2008-06-17 21:23:51 UTC (rev 15257)
+++ branches/apricot/source/gameengine/Ketsji/BL_BlenderShader.h        
2008-06-17 22:03:17 UTC (rev 15258)
@@ -11,6 +11,7 @@
 #include "MT_Tuple4.h"
 
 struct Material;
+class BL_Material;
 
 #define BL_MAX_ATTRIB  16
 
@@ -32,7 +33,7 @@
        void                            SetProg(bool enable);
 
        void ApplyShader();
-       void SetTexCoords(class RAS_IRasterizer* ras);
+       void SetTexCoords(class RAS_IRasterizer* ras, const BL_Material *mat);
        int GetAttribNum();
        void Update(const class KX_MeshSlot & ms, class RAS_IRasterizer* rasty);
 };

Modified: branches/apricot/source/gameengine/Ketsji/BL_Material.cpp
===================================================================
--- branches/apricot/source/gameengine/Ketsji/BL_Material.cpp   2008-06-17 
21:23:51 UTC (rev 15257)
+++ branches/apricot/source/gameengine/Ketsji/BL_Material.cpp   2008-06-17 
22:03:17 UTC (rev 15258)
@@ -105,7 +105,8 @@
        *nrgb   = rgb[3];
 }
 
-void BL_Material::SetConversionUV(MT_Point2 *nuv) {
+void BL_Material::SetConversionUV(const STR_String& name, MT_Point2 *nuv) {
+       uvName = name;
        uv[0] = *nuv++;
        uv[1] = *nuv++;
        uv[2] = *nuv++;
@@ -118,7 +119,8 @@
        *nuv++ = uv[2];
        *nuv   = uv[3];
 }
-void BL_Material::SetConversionUV2(MT_Point2 *nuv) {
+void BL_Material::SetConversionUV2(const STR_String& name, MT_Point2 *nuv) {
+       uv2Name = name;
        uv2[0] = *nuv++;
        uv2[1] = *nuv++;
        uv2[2] = *nuv++;

Modified: branches/apricot/source/gameengine/Ketsji/BL_Material.h
===================================================================
--- branches/apricot/source/gameengine/Ketsji/BL_Material.h     2008-06-17 
21:23:51 UTC (rev 15257)
+++ branches/apricot/source/gameengine/Ketsji/BL_Material.h     2008-06-17 
22:03:17 UTC (rev 15258)
@@ -83,13 +83,16 @@
        MT_Point2 uv[4];
        MT_Point2 uv2[4];
 
+       STR_String uvName;
+       STR_String uv2Name;
+
        void SetConversionRGB(unsigned int *rgb);
        void GetConversionRGB(unsigned int *rgb);
 
-       void SetConversionUV(MT_Point2 *uv);
+       void SetConversionUV(const STR_String& name, MT_Point2 *uv);
        void GetConversionUV(MT_Point2 *uv);
 
-       void SetConversionUV2(MT_Point2 *uv);
+       void SetConversionUV2(const STR_String& name, MT_Point2 *uv);
        void GetConversionUV2(MT_Point2 *uv);
 
        void SetSharedMaterial(bool v);

Modified: branches/apricot/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
===================================================================
--- branches/apricot/source/gameengine/Ketsji/KX_BlenderMaterial.cpp    
2008-06-17 21:23:51 UTC (rev 15257)
+++ branches/apricot/source/gameengine/Ketsji/KX_BlenderMaterial.cpp    
2008-06-17 22:03:17 UTC (rev 15258)
@@ -372,7 +372,7 @@
        }
 
        ActivatGLMaterials(rasty);
-       mBlenderShader->SetTexCoords(rasty);
+       mBlenderShader->SetTexCoords(rasty, mMaterial);
 }
 
 void


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

Reply via email to