Skip to content

Commit bf884e3

Browse files
RealBadAngelparamat
authored andcommittedFeb 7, 2016
Use tangent space meshes only when shaders are enabled
1 parent 0e75eb4 commit bf884e3

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed
 

‎src/mapblock_mesh.cpp

+11-8
Original file line numberDiff line numberDiff line change
@@ -1167,7 +1167,7 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
11671167

11681168
for(u32 j = 0; j < p.vertices.size(); j++)
11691169
{
1170-
video::S3DVertexTangents *vertex = &p.vertices[j];
1170+
video::S3DVertex *vertex = &p.vertices[j];
11711171
// Note applyFacesShading second parameter is precalculated sqrt
11721172
// value for speed improvement
11731173
// Skip it for lightsources and top faces.
@@ -1221,11 +1221,12 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
12211221
}
12221222

12231223
// Create meshbuffer
1224-
scene::SMeshBufferTangents *buf = new scene::SMeshBufferTangents();
1224+
scene::SMeshBuffer *buf = new scene::SMeshBuffer();
12251225
// Set material
12261226
buf->Material = material;
12271227
// Add to mesh
1228-
m_mesh->addMeshBuffer(buf);
1228+
scene::SMesh *mesh = (scene::SMesh *)m_mesh;
1229+
mesh->addMeshBuffer(buf);
12291230
// Mesh grabbed it
12301231
buf->drop();
12311232
buf->append(&p.vertices[0], p.vertices.size(),
@@ -1241,7 +1242,9 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
12411242

12421243
if (m_enable_shaders) {
12431244
scene::IMeshManipulator* meshmanip = m_gamedef->getSceneManager()->getMeshManipulator();
1244-
meshmanip->recalculateTangents(m_mesh, true, false, false);
1245+
scene::IMesh* tangentMesh = meshmanip->createMeshWithTangents(m_mesh);
1246+
m_mesh->drop();
1247+
m_mesh = tangentMesh;
12451248
}
12461249

12471250
if(m_mesh)
@@ -1361,7 +1364,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat
13611364
i != m_daynight_diffs.end(); ++i)
13621365
{
13631366
scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(i->first);
1364-
video::S3DVertexTangents *vertices = (video::S3DVertexTangents *)buf->getVertices();
1367+
video::S3DVertex *vertices = (video::S3DVertex *)buf->getVertices();
13651368
for(std::map<u32, std::pair<u8, u8 > >::iterator
13661369
j = i->second.begin();
13671370
j != i->second.end(); ++j)
@@ -1392,7 +1395,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat
13921395
i != m_highlighted_materials.end(); ++i)
13931396
{
13941397
scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(*i);
1395-
video::S3DVertexTangents *vertices = (video::S3DVertexTangents*)buf->getVertices();
1398+
video::S3DVertex *vertices = (video::S3DVertex *)buf->getVertices();
13961399
for (u32 j = 0; j < buf->getVertexCount() ;j++)
13971400
vertices[j].Color = hc;
13981401
}
@@ -1448,7 +1451,7 @@ void MeshCollector::append(const TileSpec &tile,
14481451
}
14491452

14501453
for (u32 i = 0; i < numVertices; i++) {
1451-
video::S3DVertexTangents vert(vertices[i].Pos, vertices[i].Normal,
1454+
video::S3DVertex vert(vertices[i].Pos, vertices[i].Normal,
14521455
vertices[i].Color, vertices[i].TCoords);
14531456
p->vertices.push_back(vert);
14541457
}
@@ -1494,7 +1497,7 @@ void MeshCollector::append(const TileSpec &tile,
14941497
}
14951498

14961499
for (u32 i = 0; i < numVertices; i++) {
1497-
video::S3DVertexTangents vert(vertices[i].Pos + pos, vertices[i].Normal,
1500+
video::S3DVertex vert(vertices[i].Pos + pos, vertices[i].Normal,
14981501
c, vertices[i].TCoords);
14991502
p->vertices.push_back(vert);
15001503
}

‎src/mapblock_mesh.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ class MapBlockMesh
104104
// Returns true if anything has been changed.
105105
bool animate(bool faraway, float time, int crack, u32 daynight_ratio);
106106

107-
scene::SMesh *getMesh()
107+
scene::IMesh *getMesh()
108108
{
109109
return m_mesh;
110110
}
@@ -130,7 +130,7 @@ class MapBlockMesh
130130
void updateCameraOffset(v3s16 camera_offset);
131131

132132
private:
133-
scene::SMesh *m_mesh;
133+
scene::IMesh *m_mesh;
134134
MinimapMapblock *m_minimap_mapblock;
135135
IGameDef *m_gamedef;
136136
ITextureSource *m_tsrc;
@@ -177,7 +177,7 @@ struct PreMeshBuffer
177177
{
178178
TileSpec tile;
179179
std::vector<u16> indices;
180-
std::vector<video::S3DVertexTangents> vertices;
180+
std::vector<video::S3DVertex> vertices;
181181
};
182182

183183
struct MeshCollector

2 commit comments

Comments
 (2)

Fixer-007 commented on Feb 8, 2016

@Fixer-007
Contributor

paramat said:
FPS up from 42 to 52, 42 is 81% of 52 so a 19% drop, close enough to 21% so PR seems good.

My results on AMD/ATI HD6870 on Win7, before 51fps, now 49fps, -2% drop (tested with my saved just test world and tinytask automation tool + fraps, two times for before and after).
Config:

menu_last_game = minetest
name = 
selected_world_path = D:\Newprog\minetest\bin\..\worlds\Just Test
fps_max = 0
viewing_range_nodes_min = 70
viewing_range_nodes_max = 70
noclip = true
enable_shaders = false
creative_mode = false
enable_damage = false
mainmenu_last_selected_world = 1
server_announce = false
server_dedicated = false

Fixer-007 commented on Feb 10, 2016

@Fixer-007
Contributor

This commit also has one bad side effect (slow block placing/digging rendering), I already reported it to @RealBadAngel.

Please sign in to comment.