Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Use tangent space meshes only when shaders are enabled
  • Loading branch information
RealBadAngel authored and paramat committed Feb 7, 2016
1 parent 0e75eb4 commit bf884e3
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 11 deletions.
19 changes: 11 additions & 8 deletions src/mapblock_mesh.cpp
Expand Up @@ -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.
Expand Down Expand Up @@ -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(),
Expand All @@ -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)
Expand Down Expand Up @@ -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<u32, std::pair<u8, u8 > >::iterator
j = i->second.begin();
j != i->second.end(); ++j)
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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);
}
Expand Down
6 changes: 3 additions & 3 deletions src/mapblock_mesh.h
Expand Up @@ -104,7 +104,7 @@ class MapBlockMesh
// 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;
}
Expand All @@ -130,7 +130,7 @@ class MapBlockMesh
void updateCameraOffset(v3s16 camera_offset);

private:
scene::SMesh *m_mesh;
scene::IMesh *m_mesh;
MinimapMapblock *m_minimap_mapblock;
IGameDef *m_gamedef;
ITextureSource *m_tsrc;
Expand Down Expand Up @@ -177,7 +177,7 @@ struct PreMeshBuffer
{
TileSpec tile;
std::vector<u16> indices;
std::vector<video::S3DVertexTangents> vertices;
std::vector<video::S3DVertex> vertices;
};

struct MeshCollector
Expand Down

2 comments on commit bf884e3

@Fixer-007
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Please sign in to comment.