[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