Factorize unlit shader.

This commit is contained in:
vlj
2014-07-13 02:39:33 +02:00
parent fbcc430e0e
commit 8ec57b7683
3 changed files with 11 additions and 24 deletions

View File

@@ -691,7 +691,7 @@ void IrrDriver::renderSolidSecondPass()
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::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::ObjectUnlitShaderInstance, { MeshShader::ObjectUnlitShaderInstance->TU_tex }, ListUnlitSM::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);
}

View File

@@ -337,7 +337,7 @@ void Shaders::loadShaders()
MeshShader::InstancedGrassPass2Shader::init();
MeshShader::DetailledObjectPass2ShaderInstance = new MeshShader::DetailledObjectPass2Shader();
MeshShader::ObjectRefPass2ShaderInstance = new MeshShader::ObjectRefPass2Shader();
MeshShader::ObjectUnlitShader::init();
MeshShader::ObjectUnlitShaderInstance = new MeshShader::ObjectUnlitShader();
MeshShader::SphereMapShaderInstance = new MeshShader::SphereMapShader();
MeshShader::SplattingShader::init();
MeshShader::GrassPass1Shader::init();
@@ -742,17 +742,12 @@ namespace MeshShader
DetailledObjectPass2Shader *DetailledObjectPass2ShaderInstance;
GLuint ObjectUnlitShader::Program;
GLuint ObjectUnlitShader::uniform_MM;
GLuint ObjectUnlitShader::TU_tex;
void ObjectUnlitShader::init()
ObjectUnlitShader::ObjectUnlitShader()
{
Program = LoadProgram(
GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(),
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str());
uniform_MM = glGetUniformLocation(Program, "ModelMatrix");
GLuint uniform_tex = glGetUniformLocation(Program, "tex");
AssignUniforms(Program, uniforms, { "ModelMatrix" });
if (!UserConfigParams::m_ubo_disabled)
{
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
@@ -760,17 +755,10 @@ namespace MeshShader
}
TU_tex = 3;
glUseProgram(Program);
glUniform1i(uniform_tex, TU_tex);
glUseProgram(0);
AssignTextureUnit(Program, { { TU_tex, "tex" } });
}
void ObjectUnlitShader::setUniforms(const core::matrix4 &ModelMatrix)
{
if (UserConfigParams::m_ubo_disabled)
bypassUBO(Program);
glUniformMatrix4fv(uniform_MM, 1, GL_FALSE, ModelMatrix.pointer());
}
ObjectUnlitShader *ObjectUnlitShaderInstance;
ObjectRefPass2Shader::ObjectRefPass2Shader()
{

View File

@@ -204,17 +204,16 @@ public:
extern DetailledObjectPass2Shader *DetailledObjectPass2ShaderInstance;
class ObjectUnlitShader
class ObjectUnlitShader : public ShaderHelper<core::matrix4>
{
public:
static GLuint Program;
static GLuint uniform_MM;
static GLuint TU_tex;
GLuint TU_tex;
static void init();
static void setUniforms(const core::matrix4 &ModelMatrix);
ObjectUnlitShader();
};
extern ObjectUnlitShader *ObjectUnlitShaderInstance;
class ObjectRefPass2Shader : public ShaderHelper<core::matrix4, core::matrix4, video::SColorf>
{
public: