[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15258] branches/apricot/source/gameengine : Apricot Branch: GLSL

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Jun 18 00:03:32 CEST 2008


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





More information about the Bf-blender-cvs mailing list