Factorize detail and spheremap
This commit is contained in:
parent
12af5eee9a
commit
fd7427a1cf
@ -690,9 +690,9 @@ void IrrDriver::renderSolidSecondPass()
|
|||||||
renderMeshes2ndPass<MeshShader::ObjectPass2Shader, video::EVT_STANDARD>(MeshShader::ObjectPass2ShaderInstance, { MeshShader::ObjectPass2ShaderInstance->TU_Albedo }, ListDefaultStandardSM::Arguments);
|
renderMeshes2ndPass<MeshShader::ObjectPass2Shader, video::EVT_STANDARD>(MeshShader::ObjectPass2ShaderInstance, { MeshShader::ObjectPass2ShaderInstance->TU_Albedo }, ListDefaultStandardSM::Arguments);
|
||||||
renderMeshes2ndPass<MeshShader::ObjectPass2Shader, video::EVT_TANGENTS>(MeshShader::ObjectPass2ShaderInstance, { MeshShader::ObjectPass2ShaderInstance->TU_Albedo }, ListDefaultTangentSM::Arguments);
|
renderMeshes2ndPass<MeshShader::ObjectPass2Shader, video::EVT_TANGENTS>(MeshShader::ObjectPass2ShaderInstance, { MeshShader::ObjectPass2ShaderInstance->TU_Albedo }, ListDefaultTangentSM::Arguments);
|
||||||
renderMeshes2ndPass<MeshShader::ObjectRefPass2Shader, video::EVT_STANDARD>(MeshShader::ObjectRefPass2ShaderInstance, { MeshShader::ObjectRefPass2ShaderInstance->TU_Albedo }, ListAlphaRefSM::Arguments);
|
renderMeshes2ndPass<MeshShader::ObjectRefPass2Shader, video::EVT_STANDARD>(MeshShader::ObjectRefPass2ShaderInstance, { MeshShader::ObjectRefPass2ShaderInstance->TU_Albedo }, ListAlphaRefSM::Arguments);
|
||||||
// renderMeshes2ndPass<MeshShader::SphereMapShader, video::EVT_STANDARD>({ MeshShader::SphereMapShader::TU_tex }, ListSphereMapSM::Arguments);
|
renderMeshes2ndPass<MeshShader::SphereMapShader, video::EVT_STANDARD>(MeshShader::SphereMapShaderInstance, { MeshShader::SphereMapShaderInstance->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::DetailledObjectPass2ShaderInstance, { MeshShader::DetailledObjectPass2ShaderInstance->TU_Albedo, MeshShader::DetailledObjectPass2ShaderInstance->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);
|
// 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -335,10 +335,10 @@ void Shaders::loadShaders()
|
|||||||
MeshShader::InstancedObjectPass2Shader::init();
|
MeshShader::InstancedObjectPass2Shader::init();
|
||||||
MeshShader::InstancedObjectRefPass2Shader::init();
|
MeshShader::InstancedObjectRefPass2Shader::init();
|
||||||
MeshShader::InstancedGrassPass2Shader::init();
|
MeshShader::InstancedGrassPass2Shader::init();
|
||||||
MeshShader::DetailledObjectPass2Shader::init();
|
MeshShader::DetailledObjectPass2ShaderInstance = new MeshShader::DetailledObjectPass2Shader();
|
||||||
MeshShader::ObjectRefPass2ShaderInstance = new MeshShader::ObjectRefPass2Shader();
|
MeshShader::ObjectRefPass2ShaderInstance = new MeshShader::ObjectRefPass2Shader();
|
||||||
MeshShader::ObjectUnlitShader::init();
|
MeshShader::ObjectUnlitShader::init();
|
||||||
MeshShader::SphereMapShader::init();
|
MeshShader::SphereMapShaderInstance = new MeshShader::SphereMapShader();
|
||||||
MeshShader::SplattingShader::init();
|
MeshShader::SplattingShader::init();
|
||||||
MeshShader::GrassPass1Shader::init();
|
MeshShader::GrassPass1Shader::init();
|
||||||
MeshShader::GrassPass2Shader::init();
|
MeshShader::GrassPass2Shader::init();
|
||||||
@ -720,20 +720,13 @@ namespace MeshShader
|
|||||||
glUniform3f(uniform_ambient, s.r, s.g, s.b);
|
glUniform3f(uniform_ambient, s.r, s.g, s.b);
|
||||||
}
|
}
|
||||||
|
|
||||||
GLuint DetailledObjectPass2Shader::Program;
|
DetailledObjectPass2Shader::DetailledObjectPass2Shader()
|
||||||
GLuint DetailledObjectPass2Shader::uniform_MM;
|
|
||||||
GLuint DetailledObjectPass2Shader::uniform_ambient;
|
|
||||||
GLuint DetailledObjectPass2Shader::TU_Albedo;
|
|
||||||
GLuint DetailledObjectPass2Shader::TU_detail;
|
|
||||||
|
|
||||||
void DetailledObjectPass2Shader::init()
|
|
||||||
{
|
{
|
||||||
Program = LoadProgram(
|
Program = LoadProgram(
|
||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(),
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/detailledobject_pass2.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/detailledobject_pass2.frag").c_str());
|
||||||
uniform_MM = glGetUniformLocation(Program, "ModelMatrix");
|
AssignUniforms(Program, uniforms, { "ModelMatrix", "ambient" });
|
||||||
uniform_ambient = glGetUniformLocation(Program, "ambient");
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
TU_Albedo = 3;
|
TU_Albedo = 3;
|
||||||
@ -742,14 +735,7 @@ namespace MeshShader
|
|||||||
AssignTextureUnit(Program, { { 0, "DiffuseMap" }, { 1, "SpecularMap" }, { 2, "SSAO" }, { TU_Albedo, "Albedo" }, { TU_detail, "Detail" } });
|
AssignTextureUnit(Program, { { 0, "DiffuseMap" }, { 1, "SpecularMap" }, { 2, "SSAO" }, { TU_Albedo, "Albedo" }, { TU_detail, "Detail" } });
|
||||||
}
|
}
|
||||||
|
|
||||||
void DetailledObjectPass2Shader::setUniforms(const core::matrix4 &ModelMatrix)
|
DetailledObjectPass2Shader *DetailledObjectPass2ShaderInstance;
|
||||||
{
|
|
||||||
if (UserConfigParams::m_ubo_disabled)
|
|
||||||
bypassUBO(Program);
|
|
||||||
glUniformMatrix4fv(uniform_MM, 1, GL_FALSE, ModelMatrix.pointer());
|
|
||||||
const video::SColorf s = irr_driver->getSceneManager()->getAmbientLight();
|
|
||||||
glUniform3f(uniform_ambient, s.r, s.g, s.b);
|
|
||||||
}
|
|
||||||
|
|
||||||
GLuint ObjectUnlitShader::Program;
|
GLuint ObjectUnlitShader::Program;
|
||||||
GLuint ObjectUnlitShader::uniform_MM;
|
GLuint ObjectUnlitShader::uniform_MM;
|
||||||
@ -874,22 +860,15 @@ namespace MeshShader
|
|||||||
glUniform3f(uniform_windDir, windDirection.X, windDirection.Y, windDirection.Z);
|
glUniform3f(uniform_windDir, windDirection.X, windDirection.Y, windDirection.Z);
|
||||||
}
|
}
|
||||||
|
|
||||||
GLuint SphereMapShader::Program;
|
|
||||||
GLuint SphereMapShader::uniform_MM;
|
|
||||||
GLuint SphereMapShader::uniform_IMM;
|
|
||||||
GLuint SphereMapShader::uniform_ambient;
|
|
||||||
GLuint SphereMapShader::TU_tex;
|
|
||||||
|
|
||||||
void SphereMapShader::init()
|
SphereMapShader::SphereMapShader()
|
||||||
{
|
{
|
||||||
Program = LoadProgram(
|
Program = LoadProgram(
|
||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(),
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getPosFromUVDepth.frag").c_str(),
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getPosFromUVDepth.frag").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectpass_spheremap.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectpass_spheremap.frag").c_str());
|
||||||
uniform_MM = glGetUniformLocation(Program, "ModelMatrix");
|
AssignUniforms(Program, uniforms, { "ModelMatrix", "InverseModelMatrix", "ambient" });
|
||||||
uniform_IMM = glGetUniformLocation(Program, "InverseModelMatrix");
|
|
||||||
uniform_ambient = glGetUniformLocation(Program, "ambient");
|
|
||||||
if (!UserConfigParams::m_ubo_disabled)
|
if (!UserConfigParams::m_ubo_disabled)
|
||||||
{
|
{
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
@ -900,14 +879,7 @@ namespace MeshShader
|
|||||||
AssignTextureUnit(Program, { { 0, "DiffuseMap" }, { 1, "SpecularMap" }, { 2, "SSAO" }, { TU_tex, "tex" } });
|
AssignTextureUnit(Program, { { 0, "DiffuseMap" }, { 1, "SpecularMap" }, { 2, "SSAO" }, { TU_tex, "tex" } });
|
||||||
}
|
}
|
||||||
|
|
||||||
void SphereMapShader::setUniforms(const core::matrix4 &ModelMatrix, const core::matrix4 &InverseModelMatrix, const SColorf &ambient)
|
SphereMapShader *SphereMapShaderInstance;
|
||||||
{
|
|
||||||
if (UserConfigParams::m_ubo_disabled)
|
|
||||||
bypassUBO(Program);
|
|
||||||
glUniformMatrix4fv(uniform_MM, 1, GL_FALSE, ModelMatrix.pointer());
|
|
||||||
glUniformMatrix4fv(uniform_IMM, 1, GL_FALSE, InverseModelMatrix.pointer());
|
|
||||||
glUniform3f(uniform_ambient, ambient.r, ambient.g, ambient.b);
|
|
||||||
}
|
|
||||||
|
|
||||||
GLuint SplattingShader::Program;
|
GLuint SplattingShader::Program;
|
||||||
GLuint SplattingShader::uniform_MM;
|
GLuint SplattingShader::uniform_MM;
|
||||||
|
@ -194,17 +194,16 @@ public:
|
|||||||
static void setUniforms(const core::matrix4 &ViewProjectionMatrix, const core::matrix4 &TextureMatrix);
|
static void setUniforms(const core::matrix4 &ViewProjectionMatrix, const core::matrix4 &TextureMatrix);
|
||||||
};
|
};
|
||||||
|
|
||||||
class DetailledObjectPass2Shader
|
class DetailledObjectPass2Shader : public ShaderHelper<core::matrix4, video::SColorf>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static GLuint Program;
|
GLuint TU_Albedo, TU_detail;
|
||||||
static GLuint uniform_MM, uniform_ambient;
|
|
||||||
static GLuint TU_Albedo, TU_detail;
|
|
||||||
|
|
||||||
static void init();
|
DetailledObjectPass2Shader();
|
||||||
static void setUniforms(const core::matrix4 &ModelMatrix);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern DetailledObjectPass2Shader *DetailledObjectPass2ShaderInstance;
|
||||||
|
|
||||||
class ObjectUnlitShader
|
class ObjectUnlitShader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -248,17 +247,16 @@ public:
|
|||||||
static void setUniforms(const core::matrix4 &ViewProjectionMatrix, const core::matrix4 &InverseViewMatrix, const core::matrix4 &invproj, const core::vector3df &windDirection, const core::vector3df &SunDir);
|
static void setUniforms(const core::matrix4 &ViewProjectionMatrix, const core::matrix4 &InverseViewMatrix, const core::matrix4 &invproj, const core::vector3df &windDirection, const core::vector3df &SunDir);
|
||||||
};
|
};
|
||||||
|
|
||||||
class SphereMapShader
|
class SphereMapShader : public ShaderHelper<core::matrix4, core::matrix4, video::SColorf>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static GLuint Program;
|
GLuint TU_tex;
|
||||||
static GLuint uniform_MM, uniform_IMM, uniform_ambient;
|
|
||||||
static GLuint TU_tex;
|
|
||||||
|
|
||||||
static void init();
|
SphereMapShader();
|
||||||
static void setUniforms(const core::matrix4 &ModelMatrix, const core::matrix4 &InverseModelMatrix, const video::SColorf &ambient);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern SphereMapShader *SphereMapShaderInstance;
|
||||||
|
|
||||||
class SplattingShader
|
class SplattingShader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -176,7 +176,7 @@ void STKAnimatedMesh::render()
|
|||||||
ListUnlitSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation));
|
ListUnlitSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation));
|
||||||
|
|
||||||
for_in(mesh, ShadedMesh[SM_DETAILS])
|
for_in(mesh, ShadedMesh[SM_DETAILS])
|
||||||
ListDetailSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation));
|
ListDetailSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, irr_driver->getSceneManager()->getAmbientLight()));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -375,7 +375,7 @@ std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4, video::SColorf> >
|
|||||||
std::vector<std::tuple<GLMesh *, core::matrix4> > ListSplattingSM::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, video::SColorf> > ListDetailSM::Arguments;
|
||||||
std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4> > ListBlendTransparent::Arguments;
|
std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4> > ListBlendTransparent::Arguments;
|
||||||
std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4> > ListAdditiveTransparent::Arguments;
|
std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4> > ListAdditiveTransparent::Arguments;
|
||||||
std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4, float, float, float, float, float, core::vector3df, core::vector3df> > ListBlendTransparentFog::Arguments;
|
std::vector<std::tuple<GLMesh *, core::matrix4, core::matrix4, float, float, float, float, float, core::vector3df, core::vector3df> > ListBlendTransparentFog::Arguments;
|
||||||
|
@ -185,7 +185,7 @@ public:
|
|||||||
class ListDetailSM
|
class ListDetailSM
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static std::vector<std::tuple<GLMesh *, core::matrix4> > Arguments;
|
static std::vector<std::tuple<GLMesh *, core::matrix4, video::SColorf> > Arguments;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ListBlendTransparent
|
class ListBlendTransparent
|
||||||
|
@ -355,7 +355,7 @@ void STKMeshSceneNode::render()
|
|||||||
ListUnlitSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation));
|
ListUnlitSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation));
|
||||||
|
|
||||||
for_in(mesh, ShadedMesh[SM_DETAILS])
|
for_in(mesh, ShadedMesh[SM_DETAILS])
|
||||||
ListDetailSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation));
|
ListDetailSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, irr_driver->getSceneManager()->getAmbientLight()));
|
||||||
|
|
||||||
if (!ShadedMesh[SM_GRASS].empty())
|
if (!ShadedMesh[SM_GRASS].empty())
|
||||||
glUseProgram(MeshShader::GrassPass2Shader::Program);
|
glUseProgram(MeshShader::GrassPass2Shader::Program);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user