From: RealBadAngel Date: Sat, 6 Feb 2016 04:49:12 +0000 (+0100) Subject: Use tangent space meshes only when shaders are enabled X-Git-Tag: 0.4.14~288 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=bf884e37a06e0a8dd6c31789a69921f07ec5a9a9;p=oweals%2Fminetest.git Use tangent space meshes only when shaders are enabled --- diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp index 6ae9dec14..9bcc4fa6a 100644 --- a/src/mapblock_mesh.cpp +++ b/src/mapblock_mesh.cpp @@ -1167,7 +1167,7 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): for(u32 j = 0; j < p.vertices.size(); j++) { - video::S3DVertexTangents *vertex = &p.vertices[j]; + video::S3DVertex *vertex = &p.vertices[j]; // Note applyFacesShading second parameter is precalculated sqrt // value for speed improvement // Skip it for lightsources and top faces. @@ -1221,11 +1221,12 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): } // Create meshbuffer - scene::SMeshBufferTangents *buf = new scene::SMeshBufferTangents(); + scene::SMeshBuffer *buf = new scene::SMeshBuffer(); // Set material buf->Material = material; // Add to mesh - m_mesh->addMeshBuffer(buf); + scene::SMesh *mesh = (scene::SMesh *)m_mesh; + mesh->addMeshBuffer(buf); // Mesh grabbed it buf->drop(); buf->append(&p.vertices[0], p.vertices.size(), @@ -1241,7 +1242,9 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): if (m_enable_shaders) { scene::IMeshManipulator* meshmanip = m_gamedef->getSceneManager()->getMeshManipulator(); - meshmanip->recalculateTangents(m_mesh, true, false, false); + scene::IMesh* tangentMesh = meshmanip->createMeshWithTangents(m_mesh); + m_mesh->drop(); + m_mesh = tangentMesh; } if(m_mesh) @@ -1361,7 +1364,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat i != m_daynight_diffs.end(); ++i) { scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(i->first); - video::S3DVertexTangents *vertices = (video::S3DVertexTangents *)buf->getVertices(); + video::S3DVertex *vertices = (video::S3DVertex *)buf->getVertices(); for(std::map >::iterator j = i->second.begin(); j != i->second.end(); ++j) @@ -1392,7 +1395,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat i != m_highlighted_materials.end(); ++i) { scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(*i); - video::S3DVertexTangents *vertices = (video::S3DVertexTangents*)buf->getVertices(); + video::S3DVertex *vertices = (video::S3DVertex *)buf->getVertices(); for (u32 j = 0; j < buf->getVertexCount() ;j++) vertices[j].Color = hc; } @@ -1448,7 +1451,7 @@ void MeshCollector::append(const TileSpec &tile, } for (u32 i = 0; i < numVertices; i++) { - video::S3DVertexTangents vert(vertices[i].Pos, vertices[i].Normal, + video::S3DVertex vert(vertices[i].Pos, vertices[i].Normal, vertices[i].Color, vertices[i].TCoords); p->vertices.push_back(vert); } @@ -1494,7 +1497,7 @@ void MeshCollector::append(const TileSpec &tile, } for (u32 i = 0; i < numVertices; i++) { - video::S3DVertexTangents vert(vertices[i].Pos + pos, vertices[i].Normal, + video::S3DVertex vert(vertices[i].Pos + pos, vertices[i].Normal, c, vertices[i].TCoords); p->vertices.push_back(vert); } diff --git a/src/mapblock_mesh.h b/src/mapblock_mesh.h index 8e994ec6b..9c4fb655a 100644 --- a/src/mapblock_mesh.h +++ b/src/mapblock_mesh.h @@ -104,7 +104,7 @@ public: // Returns true if anything has been changed. bool animate(bool faraway, float time, int crack, u32 daynight_ratio); - scene::SMesh *getMesh() + scene::IMesh *getMesh() { return m_mesh; } @@ -130,7 +130,7 @@ public: void updateCameraOffset(v3s16 camera_offset); private: - scene::SMesh *m_mesh; + scene::IMesh *m_mesh; MinimapMapblock *m_minimap_mapblock; IGameDef *m_gamedef; ITextureSource *m_tsrc; @@ -177,7 +177,7 @@ struct PreMeshBuffer { TileSpec tile; std::vector indices; - std::vector vertices; + std::vector vertices; }; struct MeshCollector