Factorize splatting material.
This commit is contained in:
parent
97971a11b9
commit
de5499401c
@ -651,7 +651,7 @@ void IrrDriver::renderSolidSecondPass()
|
|||||||
ListSphereMapSM::Arguments.clear();
|
ListSphereMapSM::Arguments.clear();
|
||||||
ListUnlitSM::Arguments.clear();
|
ListUnlitSM::Arguments.clear();
|
||||||
ListDetailSM::Arguments.clear();
|
ListDetailSM::Arguments.clear();
|
||||||
GroupedSM<SM_SPLATTING>::reset();
|
ListSplattingSM::Arguments.clear();
|
||||||
setTexture(0, m_rtts->getRenderTarget(RTT_TMP1), GL_NEAREST, GL_NEAREST);
|
setTexture(0, m_rtts->getRenderTarget(RTT_TMP1), GL_NEAREST, GL_NEAREST);
|
||||||
setTexture(1, m_rtts->getRenderTarget(RTT_TMP2), GL_NEAREST, GL_NEAREST);
|
setTexture(1, m_rtts->getRenderTarget(RTT_TMP2), GL_NEAREST, GL_NEAREST);
|
||||||
setTexture(2, m_rtts->getRenderTarget(RTT_HALF1_R), GL_LINEAR, GL_LINEAR);
|
setTexture(2, m_rtts->getRenderTarget(RTT_HALF1_R), GL_LINEAR, GL_LINEAR);
|
||||||
@ -667,11 +667,7 @@ void IrrDriver::renderSolidSecondPass()
|
|||||||
renderMeshes2ndPass<MeshShader::SphereMapShader, video::EVT_STANDARD>({ MeshShader::SphereMapShader::TU_tex }, ListSphereMapSM::Arguments);
|
renderMeshes2ndPass<MeshShader::SphereMapShader, video::EVT_STANDARD>({ MeshShader::SphereMapShader::TU_tex }, ListSphereMapSM::Arguments);
|
||||||
renderMeshes2ndPass<MeshShader::ObjectUnlitShader, video::EVT_STANDARD>({ MeshShader::ObjectUnlitShader::TU_tex }, ListUnlitSM::Arguments);
|
renderMeshes2ndPass<MeshShader::ObjectUnlitShader, video::EVT_STANDARD>({ MeshShader::ObjectUnlitShader::TU_tex }, ListUnlitSM::Arguments);
|
||||||
renderMeshes2ndPass<MeshShader::DetailledObjectPass2Shader, video::EVT_2TCOORDS>({ MeshShader::DetailledObjectPass2Shader::TU_Albedo, MeshShader::DetailledObjectPass2Shader::TU_detail }, ListDetailSM::Arguments);
|
renderMeshes2ndPass<MeshShader::DetailledObjectPass2Shader, video::EVT_2TCOORDS>({ MeshShader::DetailledObjectPass2Shader::TU_Albedo, MeshShader::DetailledObjectPass2Shader::TU_detail }, ListDetailSM::Arguments);
|
||||||
|
renderMeshes2ndPass<MeshShader::SplattingShader, video::EVT_2TCOORDS>({ 8, MeshShader::SplattingShader::TU_tex_layout, MeshShader::SplattingShader::TU_tex_detail0, MeshShader::SplattingShader::TU_tex_detail1, MeshShader::SplattingShader::TU_tex_detail2, MeshShader::SplattingShader::TU_tex_detail3 }, ListSplattingSM::Arguments);
|
||||||
glUseProgram(MeshShader::SplattingShader::Program);
|
|
||||||
glBindVertexArray(getVAO(EVT_2TCOORDS));
|
|
||||||
for (unsigned i = 0; i < GroupedSM<SM_SPLATTING>::MeshSet.size(); i++)
|
|
||||||
drawSplatting(*GroupedSM<SM_SPLATTING>::MeshSet[i], GroupedSM<SM_SPLATTING>::MVPSet[i]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,85 +273,6 @@ void drawGrassPass1(const GLMesh &mesh, const core::matrix4 & ModelViewProjectio
|
|||||||
glDrawElementsBaseVertex(ptype, count, itype, (GLvoid *)mesh.vaoOffset, mesh.vaoBaseVertex);
|
glDrawElementsBaseVertex(ptype, count, itype, (GLvoid *)mesh.vaoOffset, mesh.vaoBaseVertex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void drawSplatting(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix)
|
|
||||||
{
|
|
||||||
irr_driver->IncreaseObjectCount();
|
|
||||||
GLenum ptype = mesh.PrimitiveType;
|
|
||||||
GLenum itype = mesh.IndexType;
|
|
||||||
size_t count = mesh.IndexCount;
|
|
||||||
|
|
||||||
// Texlayout
|
|
||||||
compressTexture(mesh.textures[1], true);
|
|
||||||
setTexture(MeshShader::SplattingShader::TU_tex_layout, getTextureGLuint(mesh.textures[1]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, 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);
|
|
||||||
}
|
|
||||||
//Tex detail0
|
|
||||||
compressTexture(mesh.textures[2], true);
|
|
||||||
setTexture(MeshShader::SplattingShader::TU_tex_detail0, getTextureGLuint(mesh.textures[2]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, 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);
|
|
||||||
}
|
|
||||||
//Tex detail1
|
|
||||||
compressTexture(mesh.textures[3], true);
|
|
||||||
setTexture(MeshShader::SplattingShader::TU_tex_detail1, getTextureGLuint(mesh.textures[3]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, 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);
|
|
||||||
}
|
|
||||||
compressTexture(mesh.textures[4], true);
|
|
||||||
//Tex detail2
|
|
||||||
setTexture(MeshShader::SplattingShader::TU_tex_detail2, getTextureGLuint(mesh.textures[4]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, 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);
|
|
||||||
}
|
|
||||||
//Tex detail3
|
|
||||||
compressTexture(mesh.textures[5], true);
|
|
||||||
setTexture(MeshShader::SplattingShader::TU_tex_detail3, getTextureGLuint(mesh.textures[5]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
MeshShader::SplattingShader::setUniforms(ModelViewProjectionMatrix);
|
|
||||||
glDrawElementsBaseVertex(ptype, count, itype, (GLvoid *)mesh.vaoOffset, mesh.vaoBaseVertex);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void drawGrassPass2(const GLMesh &mesh, const core::matrix4 & ModelViewProjectionMatrix, core::vector3df windDir)
|
void drawGrassPass2(const GLMesh &mesh, const core::matrix4 & ModelViewProjectionMatrix, core::vector3df windDir)
|
||||||
{
|
{
|
||||||
irr_driver->IncreaseObjectCount();
|
irr_driver->IncreaseObjectCount();
|
||||||
@ -451,6 +372,7 @@ std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4> > ListNormalG::Ar
|
|||||||
std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4> > ListDefaultStandardSM::Arguments;
|
std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4> > ListDefaultStandardSM::Arguments;
|
||||||
std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4> > ListDefaultTangentSM::Arguments;
|
std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4> > ListDefaultTangentSM::Arguments;
|
||||||
std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4> > ListAlphaRefSM::Arguments;
|
std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4> > ListAlphaRefSM::Arguments;
|
||||||
|
std::vector<std::tuple<GLMesh *, core::matrix4> > ListSplattingSM::Arguments;
|
||||||
std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4, video::SColorf> > ListSphereMapSM::Arguments;
|
std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4, video::SColorf> > ListSphereMapSM::Arguments;
|
||||||
std::vector<std::tuple<GLMesh *, core::matrix4> > ListUnlitSM::Arguments;
|
std::vector<std::tuple<GLMesh *, core::matrix4> > ListUnlitSM::Arguments;
|
||||||
std::vector<std::tuple<GLMesh *, core::matrix4> > ListDetailSM::Arguments;
|
std::vector<std::tuple<GLMesh *, core::matrix4> > ListDetailSM::Arguments;
|
||||||
|
@ -158,6 +158,12 @@ public:
|
|||||||
static std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4, video::SColorf> > Arguments;
|
static std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4, video::SColorf> > Arguments;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ListSplattingSM
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static std::vector<std::tuple<GLMesh *, core::matrix4> > Arguments;
|
||||||
|
};
|
||||||
|
|
||||||
class ListUnlitSM
|
class ListUnlitSM
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -216,7 +222,6 @@ std::vector<core::matrix4> GroupedSM<T>::MVPSet;
|
|||||||
template<enum ShadedMaterial T>
|
template<enum ShadedMaterial T>
|
||||||
std::vector<core::matrix4> GroupedSM<T>::TIMVSet;
|
std::vector<core::matrix4> GroupedSM<T>::TIMVSet;
|
||||||
|
|
||||||
void drawSplatting(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix);
|
|
||||||
void drawGrassPass2(const GLMesh &mesh, const core::matrix4 & ModelViewProjectionMatrix, core::vector3df windDir);
|
void drawGrassPass2(const GLMesh &mesh, const core::matrix4 & ModelViewProjectionMatrix, core::vector3df windDir);
|
||||||
|
|
||||||
template<enum TransparentMaterial T>
|
template<enum TransparentMaterial T>
|
||||||
|
@ -349,11 +349,7 @@ void STKMeshSceneNode::render()
|
|||||||
ListSphereMapSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight()));
|
ListSphereMapSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight()));
|
||||||
|
|
||||||
for_in(mesh, ShadedMesh[SM_SPLATTING])
|
for_in(mesh, ShadedMesh[SM_SPLATTING])
|
||||||
{
|
ListSplattingSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation));
|
||||||
GroupedSM<SM_SPLATTING>::MeshSet.push_back(mesh);
|
|
||||||
GroupedSM<SM_SPLATTING>::MVPSet.push_back(AbsoluteTransformation);
|
|
||||||
GroupedSM<SM_SPLATTING>::TIMVSet.push_back(invmodel);
|
|
||||||
}
|
|
||||||
|
|
||||||
for_in(mesh, ShadedMesh[SM_UNLIT])
|
for_in(mesh, ShadedMesh[SM_UNLIT])
|
||||||
ListUnlitSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation));
|
ListUnlitSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user