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