Merge branch 'master' of github.com:supertuxkart/stk-code
This commit is contained in:
commit
383cbef14d
@ -2,7 +2,7 @@
|
|||||||
<stkgui>
|
<stkgui>
|
||||||
<div x="5%" y="5%" width="90%" height="90%" layout="vertical-row" >
|
<div x="5%" y="5%" width="90%" height="90%" layout="vertical-row" >
|
||||||
|
|
||||||
<header id="title" width="80%" text="Race Setup" align="center" text_align="center" />
|
<header id="title" width="100%" text="Race Setup" align="center" text_align="center" />
|
||||||
|
|
||||||
<spacer height="2%" width="1"/>
|
<spacer height="2%" width="1"/>
|
||||||
|
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
#include <IMeshBuffer.h>
|
#include <IMeshBuffer.h>
|
||||||
#include "utils/log.hpp"
|
#include "utils/log.hpp"
|
||||||
#include "graphics/irr_driver.hpp"
|
#include "graphics/irr_driver.hpp"
|
||||||
|
#include "modes/world.hpp"
|
||||||
|
#include "tracks/track.hpp"
|
||||||
|
|
||||||
void MeshTools::minMax3D(scene::IMesh* mesh, Vec3 *min, Vec3 *max) {
|
void MeshTools::minMax3D(scene::IMesh* mesh, Vec3 *min, Vec3 *max) {
|
||||||
|
|
||||||
@ -325,7 +327,8 @@ bool MeshTools::isNormalMap(scene::IMeshBuffer* mb)
|
|||||||
{
|
{
|
||||||
if (!irr_driver->isGLSL())
|
if (!irr_driver->isGLSL())
|
||||||
return false;
|
return false;
|
||||||
return (mb->getMaterial().MaterialType == irr_driver->getShader(ES_NORMAL_MAP));
|
return (mb->getMaterial().MaterialType == irr_driver->getShader(ES_NORMAL_MAP) &&
|
||||||
|
mb->getVertexType() != video::EVT_TANGENTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copied from irrlicht
|
// Copied from irrlicht
|
||||||
@ -385,28 +388,28 @@ scene::IMesh* MeshTools::createMeshWithTangents(scene::IMesh* mesh, bool(*predic
|
|||||||
{
|
{
|
||||||
switch (vType)
|
switch (vType)
|
||||||
{
|
{
|
||||||
case video::EVT_STANDARD:
|
case video::EVT_STANDARD:
|
||||||
{
|
{
|
||||||
const video::S3DVertex* v =
|
const video::S3DVertex* v =
|
||||||
(const video::S3DVertex*)original->getVertices();
|
(const video::S3DVertex*)original->getVertices();
|
||||||
vNew = video::S3DVertexTangents(
|
vNew = video::S3DVertexTangents(
|
||||||
v[idx[i]].Pos, v[idx[i]].Normal, v[idx[i]].Color, v[idx[i]].TCoords);
|
v[idx[i]].Pos, v[idx[i]].Normal, v[idx[i]].Color, v[idx[i]].TCoords);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case video::EVT_2TCOORDS:
|
case video::EVT_2TCOORDS:
|
||||||
{
|
{
|
||||||
const video::S3DVertex2TCoords* v =
|
const video::S3DVertex2TCoords* v =
|
||||||
(const video::S3DVertex2TCoords*)original->getVertices();
|
(const video::S3DVertex2TCoords*)original->getVertices();
|
||||||
vNew = video::S3DVertexTangents(
|
vNew = video::S3DVertexTangents(
|
||||||
v[idx[i]].Pos, v[idx[i]].Normal, v[idx[i]].Color, v[idx[i]].TCoords);
|
v[idx[i]].Pos, v[idx[i]].Normal, v[idx[i]].Color, v[idx[i]].TCoords);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case video::EVT_TANGENTS:
|
case video::EVT_TANGENTS:
|
||||||
{
|
{
|
||||||
const video::S3DVertexTangents* v =
|
const video::S3DVertexTangents* v =
|
||||||
(const video::S3DVertexTangents*)original->getVertices();
|
(const video::S3DVertexTangents*)original->getVertices();
|
||||||
vNew = v[idx[i]];
|
vNew = v[idx[i]];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
core::map<video::S3DVertexTangents, int>::Node* n = vertMap.find(vNew);
|
core::map<video::S3DVertexTangents, int>::Node* n = vertMap.find(vNew);
|
||||||
@ -435,8 +438,28 @@ scene::IMesh* MeshTools::createMeshWithTangents(scene::IMesh* mesh, bool(*predic
|
|||||||
if (calculateTangents)
|
if (calculateTangents)
|
||||||
recalculateTangents(clone, recalculateNormals, smooth, angleWeighted);
|
recalculateTangents(clone, recalculateNormals, smooth, angleWeighted);
|
||||||
|
|
||||||
|
int mbcount = clone->getMeshBufferCount();
|
||||||
|
for (int i = 0; i < mbcount; i++)
|
||||||
|
{
|
||||||
|
scene::IMeshBuffer* mb = clone->getMeshBuffer(i);
|
||||||
|
|
||||||
|
for (int t = 0; t < video::MATERIAL_MAX_TEXTURES; t++)
|
||||||
|
{
|
||||||
|
video::ITexture* texture = mb->getMaterial().TextureLayer[t].Texture;
|
||||||
|
if (texture != NULL)
|
||||||
|
texture->grab();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
scene::IMeshCache* meshCache = irr_driver->getSceneManager()->getMeshCache();
|
||||||
|
io::SNamedPath path = meshCache->getMeshName(mesh);
|
||||||
irr_driver->removeMeshFromCache(mesh);
|
irr_driver->removeMeshFromCache(mesh);
|
||||||
|
|
||||||
|
scene::SAnimatedMesh* amesh = new scene::SAnimatedMesh(clone);
|
||||||
|
meshCache->addMesh(path, amesh);
|
||||||
|
|
||||||
|
World::getWorld()->getTrack()->addCachedMesh(amesh);
|
||||||
|
|
||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user