Try to replace emplace_back() call.

Only on some part of the code, need confirmation it works before
propagating.
This commit is contained in:
Vincent Lejeune 2014-07-28 23:41:01 +02:00
parent 46f73e8ecc
commit b9e56303c1

View File

@ -189,6 +189,18 @@ void STKMeshSceneNode::OnRegisterSceneNode()
CMeshSceneNode::OnRegisterSceneNode(); CMeshSceneNode::OnRegisterSceneNode();
} }
template<typename T, typename... Args>
static void
pushVector(std::vector<T> &vec, Args ...args)
{
#if __cplusplus >= 201103 || _MSC_VER >=1800
vec.emplace_back(args...);
#else
vec.push_back(T(args...));
#endif
}
void STKMeshSceneNode::render() void STKMeshSceneNode::render()
{ {
irr::video::IVideoDriver* driver = irr_driver->getVideoDriver(); irr::video::IVideoDriver* driver = irr_driver->getVideoDriver();
@ -246,29 +258,29 @@ void STKMeshSceneNode::render()
GLMesh* mesh; GLMesh* mesh;
for_in(mesh, MeshSolidMaterials[MAT_DEFAULT]) for_in(mesh, MeshSolidMaterials[MAT_DEFAULT])
ListMatDefault::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); pushVector(ListMatDefault::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight());
for_in(mesh, MeshSolidMaterials[MAT_ALPHA_REF]) for_in(mesh, MeshSolidMaterials[MAT_ALPHA_REF])
ListMatAlphaRef::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); pushVector(ListMatAlphaRef::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight());
for_in(mesh, MeshSolidMaterials[MAT_SPHEREMAP]) for_in(mesh, MeshSolidMaterials[MAT_SPHEREMAP])
ListMatSphereMap::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); pushVector(ListMatSphereMap::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight());
for_in(mesh, MeshSolidMaterials[MAT_DETAIL]) for_in(mesh, MeshSolidMaterials[MAT_DETAIL])
ListMatDetails::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); pushVector(ListMatDetails::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight());
windDir = getWind(); windDir = getWind();
for_in(mesh, MeshSolidMaterials[MAT_GRASS]) for_in(mesh, MeshSolidMaterials[MAT_GRASS])
ListMatGrass::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, windDir, irr_driver->getSceneManager()->getAmbientLight()); pushVector(ListMatGrass::Arguments, mesh, AbsoluteTransformation, invmodel, windDir, irr_driver->getSceneManager()->getAmbientLight());
for_in(mesh, MeshSolidMaterials[MAT_UNLIT]) for_in(mesh, MeshSolidMaterials[MAT_UNLIT])
ListMatUnlit::Arguments.emplace_back(mesh, AbsoluteTransformation, core::matrix4::EM4CONST_IDENTITY); pushVector(ListMatUnlit::Arguments, mesh, AbsoluteTransformation, core::matrix4::EM4CONST_IDENTITY);
for_in(mesh, MeshSolidMaterials[MAT_SPLATTING]) for_in(mesh, MeshSolidMaterials[MAT_SPLATTING])
ListMatSplatting::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight()); pushVector(ListMatSplatting::Arguments, mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight());
for_in(mesh, MeshSolidMaterials[MAT_NORMAL_MAP]) for_in(mesh, MeshSolidMaterials[MAT_NORMAL_MAP])
ListMatNormalMap::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, core::matrix4::EM4CONST_IDENTITY, irr_driver->getSceneManager()->getAmbientLight()); pushVector( ListMatNormalMap::Arguments, mesh, AbsoluteTransformation, invmodel, core::matrix4::EM4CONST_IDENTITY, irr_driver->getSceneManager()->getAmbientLight());
return; return;
} }
@ -408,23 +420,23 @@ void STKMeshSceneNode::render()
tmpcol.getBlue() / 255.0f); tmpcol.getBlue() / 255.0f);
for_in(mesh, TransparentMesh[TM_DEFAULT]) for_in(mesh, TransparentMesh[TM_DEFAULT])
ListBlendTransparentFog::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix, pushVector(ListBlendTransparentFog::Arguments, mesh, AbsoluteTransformation, mesh->TextureMatrix,
fogmax, startH, endH, start, end, col); fogmax, startH, endH, start, end, col);
for_in(mesh, TransparentMesh[TM_ADDITIVE]) for_in(mesh, TransparentMesh[TM_ADDITIVE])
ListAdditiveTransparentFog::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix, pushVector(ListAdditiveTransparentFog::Arguments, mesh, AbsoluteTransformation, mesh->TextureMatrix,
fogmax, startH, endH, start, end, col); fogmax, startH, endH, start, end, col);
} }
else else
{ {
for_in(mesh, TransparentMesh[TM_DEFAULT]) for_in(mesh, TransparentMesh[TM_DEFAULT])
ListBlendTransparent::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix); pushVector(ListBlendTransparent::Arguments, mesh, AbsoluteTransformation, mesh->TextureMatrix);
for_in(mesh, TransparentMesh[TM_ADDITIVE]) for_in(mesh, TransparentMesh[TM_ADDITIVE])
ListAdditiveTransparent::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix); pushVector(ListAdditiveTransparent::Arguments, mesh, AbsoluteTransformation, mesh->TextureMatrix);
} }
for_in(mesh, TransparentMesh[TM_DISPLACEMENT]) for_in(mesh, TransparentMesh[TM_DISPLACEMENT])
ListDisplacement::Arguments.emplace_back(mesh, AbsoluteTransformation); pushVector(ListDisplacement::Arguments, mesh, AbsoluteTransformation);
if (!TransparentMesh[TM_BUBBLE].empty()) if (!TransparentMesh[TM_BUBBLE].empty())
glUseProgram(MeshShader::BubbleShader::Program); glUseProgram(MeshShader::BubbleShader::Program);