diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp index 32c9216a7..9bb4943ba 100644 --- a/src/graphics/render.cpp +++ b/src/graphics/render.cpp @@ -605,14 +605,14 @@ struct unroll_args<0> } }; -template -void apply(std::tuple arg) +template +void apply(std::tuple arg) { unroll_args::value>::exec(arg); } -template -void renderMeshes2ndPass(std::vector > &meshes) +template +void renderMeshes2ndPass(std::vector > &meshes) { glUseProgram(Shader::Program); glBindVertexArray(getVAO(VertexType)); @@ -669,6 +669,7 @@ void IrrDriver::renderSolidSecondPass() ListDefaultStandardSM::Arguments.clear(); ListDefaultTangentSM::Arguments.clear(); ListAlphaRefSM::Arguments.clear(); + ListSphereMapSM::Arguments.clear(); GroupedSM::reset(); GroupedSM::reset(); GroupedSM::reset(); @@ -687,27 +688,7 @@ void IrrDriver::renderSolidSecondPass() renderMeshes2ndPass(ListDefaultStandardSM::Arguments); renderMeshes2ndPass(ListDefaultTangentSM::Arguments); renderMeshes2ndPass(ListAlphaRefSM::Arguments); - - glUseProgram(MeshShader::SphereMapShader::Program); - glBindVertexArray(getVAO(EVT_STANDARD)); - for (unsigned i = 0; i < GroupedSM::MeshSet.size(); i++) - { - GLMesh &mesh = *GroupedSM::MeshSet[i]; - assert(mesh.VAOType == EVT_STANDARD); - compressTexture(mesh.textures[0], true); - if (irr_driver->getLightViz()) - { - GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA }; - glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); - } - else - { - GLint swizzleMask[] = { GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA }; - glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); - } - setTexture(MeshShader::SphereMapShader::TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); - draw(&mesh, GroupedSM::MVPSet[i], GroupedSM::TIMVSet[i], irr_driver->getSceneManager()->getAmbientLight()); - } + renderMeshes2ndPass(ListSphereMapSM::Arguments); glUseProgram(MeshShader::SplattingShader::Program); glBindVertexArray(getVAO(EVT_2TCOORDS)); diff --git a/src/graphics/stkmesh.cpp b/src/graphics/stkmesh.cpp index 45b92753d..bc6b2f709 100644 --- a/src/graphics/stkmesh.cpp +++ b/src/graphics/stkmesh.cpp @@ -521,4 +521,5 @@ void initvaostate(GLMesh &mesh, TransparentMaterial TranspMat) std::vector > ListDefaultStandardSM::Arguments; std::vector > ListDefaultTangentSM::Arguments; -std::vector > ListAlphaRefSM::Arguments; \ No newline at end of file +std::vector > ListAlphaRefSM::Arguments; +std::vector > ListSphereMapSM::Arguments; \ No newline at end of file diff --git a/src/graphics/stkmesh.hpp b/src/graphics/stkmesh.hpp index a3b3cbb9c..86bc0f9cc 100644 --- a/src/graphics/stkmesh.hpp +++ b/src/graphics/stkmesh.hpp @@ -127,6 +127,12 @@ public: static std::vector > Arguments; }; +class ListSphereMapSM +{ +public: + static std::vector > Arguments; +}; + template class GroupedSM { diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index 3bab24e22..1d9d9a6b3 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -358,9 +358,7 @@ void STKMeshSceneNode::render() for_in(mesh, ShadedMesh[SM_SPHEREMAP]) { - GroupedSM::MeshSet.push_back(mesh); - GroupedSM::MVPSet.push_back(AbsoluteTransformation); - GroupedSM::TIMVSet.push_back(invmodel); + ListSphereMapSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight())); } for_in(mesh, ShadedMesh[SM_SPLATTING])