Turn pass1 shaders to singleton template.
This commit is contained in:
parent
5e0fb8dcf7
commit
82b5097391
@ -58,10 +58,10 @@ void apply_instance(const T *Shader, const std::tuple<TupleType...> &arg)
|
||||
unroll_args_instance<std::tuple_size<std::tuple<TupleType...> >::value >::template exec<T>(Shader, arg);
|
||||
}
|
||||
|
||||
template<typename T, enum E_VERTEX_TYPE VertexType, typename... TupleType>
|
||||
void renderMeshes1stPass(const T *Shader, const std::vector<GLuint> &TexUnits, std::vector<std::tuple<TupleType...> > &meshes)
|
||||
template<typename Shader, enum E_VERTEX_TYPE VertexType, typename... TupleType>
|
||||
void renderMeshes1stPass(const std::vector<GLuint> &TexUnits, std::vector<std::tuple<TupleType...> > &meshes)
|
||||
{
|
||||
glUseProgram(Shader->Program);
|
||||
glUseProgram(Shader::getInstance<Shader>()->Program);
|
||||
glBindVertexArray(getVAO(VertexType));
|
||||
for (unsigned i = 0; i < meshes.size(); i++)
|
||||
{
|
||||
@ -80,7 +80,7 @@ void renderMeshes1stPass(const T *Shader, const std::vector<GLuint> &TexUnits, s
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
apply_instance(Shader, meshes[i]);
|
||||
apply_instance(Shader::getInstance<Shader>(), meshes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -109,11 +109,11 @@ void IrrDriver::renderSolidFirstPass()
|
||||
|
||||
{
|
||||
ScopedGPUTimer Timer(getGPUTimer(Q_SOLID_PASS1));
|
||||
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_STANDARD>(MeshShader::ObjectPass1Shader::getInstance<MeshShader::ObjectPass1Shader>(), { MeshShader::ObjectPass1Shader::getInstance<MeshShader::ObjectPass1Shader>()->TU_tex }, ListDefaultStandardG::Arguments);
|
||||
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_2TCOORDS>(MeshShader::ObjectPass1Shader::getInstance(), { MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListDefault2TCoordG::Arguments);
|
||||
renderMeshes1stPass<MeshShader::ObjectRefPass1Shader, video::EVT_STANDARD>(MeshShader::ObjectRefPass1ShaderInstance, { MeshShader::ObjectRefPass1ShaderInstance->TU_tex }, ListAlphaRefG::Arguments);
|
||||
renderMeshes1stPass<MeshShader::NormalMapShader, video::EVT_TANGENTS>(MeshShader::NormalMapShaderInstance, { MeshShader::NormalMapShaderInstance->TU_glossy, MeshShader::NormalMapShaderInstance->TU_normalmap }, ListNormalG::Arguments);
|
||||
renderMeshes1stPass<MeshShader::GrassPass1Shader, video::EVT_STANDARD>(MeshShader::GrassPass1ShaderInstance, { MeshShader::GrassPass1ShaderInstance->TU_tex }, ListGrassG::Arguments);
|
||||
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_STANDARD>({ MeshShader::ObjectPass1Shader::getInstance<MeshShader::ObjectPass1Shader>()->TU_tex }, ListDefaultStandardG::Arguments);
|
||||
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_2TCOORDS>({ MeshShader::ObjectPass1Shader::getInstance<MeshShader::ObjectPass1Shader>()->TU_tex }, ListDefault2TCoordG::Arguments);
|
||||
renderMeshes1stPass<MeshShader::ObjectRefPass1Shader, video::EVT_STANDARD>({ MeshShader::ObjectRefPass1Shader::getInstance<MeshShader::ObjectRefPass1Shader>()->TU_tex }, ListAlphaRefG::Arguments);
|
||||
renderMeshes1stPass<MeshShader::NormalMapShader, video::EVT_TANGENTS>({ MeshShader::NormalMapShader::getInstance<MeshShader::NormalMapShader>()->TU_glossy, MeshShader::NormalMapShader::getInstance<MeshShader::NormalMapShader>()->TU_normalmap }, ListNormalG::Arguments);
|
||||
renderMeshes1stPass<MeshShader::GrassPass1Shader, video::EVT_STANDARD>({ MeshShader::GrassPass1Shader::getInstance<MeshShader::GrassPass1Shader>()->TU_tex }, ListGrassG::Arguments);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -325,9 +325,6 @@ void Shaders::loadShaders()
|
||||
FullScreenShader::MLAABlendWeightSHader::init();
|
||||
FullScreenShader::MLAAGatherSHader::init();
|
||||
MeshShader::ColorizeShader::init();
|
||||
MeshShader::NormalMapShaderInstance = new MeshShader::NormalMapShader();
|
||||
// MeshShader::ObjectPass1ShaderInstance = new MeshShader::ObjectPass1Shader();
|
||||
MeshShader::ObjectRefPass1ShaderInstance = new MeshShader::ObjectRefPass1Shader();
|
||||
MeshShader::InstancedObjectPass1ShaderInstance = new MeshShader::InstancedObjectPass1Shader();
|
||||
MeshShader::InstancedObjectRefPass1ShaderInstance = new MeshShader::InstancedObjectRefPass1Shader();
|
||||
MeshShader::InstancedGrassPass1ShaderInstance = new MeshShader::InstancedGrassPass1Shader();
|
||||
@ -340,7 +337,6 @@ void Shaders::loadShaders()
|
||||
MeshShader::ObjectUnlitShaderInstance = new MeshShader::ObjectUnlitShader();
|
||||
MeshShader::SphereMapShaderInstance = new MeshShader::SphereMapShader();
|
||||
MeshShader::SplattingShaderInstance = new MeshShader::SplattingShader();
|
||||
MeshShader::GrassPass1ShaderInstance = new MeshShader::GrassPass1Shader();
|
||||
MeshShader::GrassPass2ShaderInstance = new MeshShader::GrassPass2Shader();
|
||||
MeshShader::BubbleShader::init();
|
||||
MeshShader::TransparentShaderInstance = new MeshShader::TransparentShader();
|
||||
@ -489,7 +485,7 @@ namespace MeshShader
|
||||
{
|
||||
|
||||
// Solid Normal and depth pass shaders
|
||||
ObjectPass1Shader::ObjectPass1Shader() : Singleton<ObjectPass1Shader>()
|
||||
ObjectPass1Shader::ObjectPass1Shader()
|
||||
{
|
||||
Program = LoadProgram(
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(),
|
||||
@ -520,7 +516,6 @@ namespace MeshShader
|
||||
TU_tex = 0;
|
||||
AssignTextureUnit(Program, { { TU_tex, "tex" } });
|
||||
}
|
||||
ObjectRefPass1Shader *ObjectRefPass1ShaderInstance;
|
||||
|
||||
GrassPass1Shader::GrassPass1Shader()
|
||||
{
|
||||
@ -533,8 +528,6 @@ namespace MeshShader
|
||||
AssignTextureUnit(Program, { { TU_tex, "tex" } });
|
||||
}
|
||||
|
||||
GrassPass1Shader *GrassPass1ShaderInstance;
|
||||
|
||||
NormalMapShader::NormalMapShader()
|
||||
{
|
||||
Program = LoadProgram(
|
||||
@ -551,7 +544,6 @@ namespace MeshShader
|
||||
TU_glossy = 0;
|
||||
AssignTextureUnit(Program, { { TU_normalmap, "normalMap" }, { TU_glossy, "DiffuseForAlpha" } });
|
||||
}
|
||||
NormalMapShader *NormalMapShaderInstance;
|
||||
|
||||
InstancedObjectPass1Shader::InstancedObjectPass1Shader()
|
||||
{
|
||||
|
@ -120,26 +120,40 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T, typename... Args>
|
||||
class ShaderHelperSingleton : public Singleton<T>
|
||||
{
|
||||
protected:
|
||||
std::vector<GLuint> uniforms;
|
||||
public:
|
||||
friend class Singleton<class ObjectPass1Shader>;
|
||||
GLuint Program;
|
||||
|
||||
void setUniforms(const Args & ... args) const
|
||||
{
|
||||
if (UserConfigParams::m_ubo_disabled)
|
||||
bypassUBO(Program);
|
||||
UniformHelper::setUniformsHelper(uniforms, args...);
|
||||
}
|
||||
};
|
||||
|
||||
namespace MeshShader
|
||||
{
|
||||
class ObjectPass1Shader : public ShaderHelper<core::matrix4, core::matrix4>, public Singleton<class ObjectPass1Shader>
|
||||
class ObjectPass1Shader : public ShaderHelperSingleton<ObjectPass1Shader, core::matrix4, core::matrix4>
|
||||
{
|
||||
friend class Singleton<class ObjectPass1Shader>;
|
||||
public:
|
||||
GLuint TU_tex;
|
||||
ObjectPass1Shader();
|
||||
};
|
||||
|
||||
class ObjectRefPass1Shader : public ShaderHelper<core::matrix4, core::matrix4, core::matrix4>
|
||||
class ObjectRefPass1Shader : public ShaderHelperSingleton<ObjectRefPass1Shader, core::matrix4, core::matrix4, core::matrix4>
|
||||
{
|
||||
public:
|
||||
GLuint TU_tex;
|
||||
ObjectRefPass1Shader();
|
||||
};
|
||||
|
||||
extern ObjectRefPass1Shader *ObjectRefPass1ShaderInstance;
|
||||
|
||||
class GrassPass1Shader : public ShaderHelper<core::matrix4, core::matrix4, core::vector3df>
|
||||
class GrassPass1Shader : public ShaderHelperSingleton<GrassPass1Shader, core::matrix4, core::matrix4, core::vector3df>
|
||||
{
|
||||
public:
|
||||
GLuint TU_tex;
|
||||
@ -147,17 +161,13 @@ public:
|
||||
GrassPass1Shader();
|
||||
};
|
||||
|
||||
extern GrassPass1Shader *GrassPass1ShaderInstance;
|
||||
|
||||
class NormalMapShader : public ShaderHelper<core::matrix4, core::matrix4>
|
||||
class NormalMapShader : public ShaderHelperSingleton<NormalMapShader, core::matrix4, core::matrix4>
|
||||
{
|
||||
public:
|
||||
GLuint TU_normalmap, TU_glossy;
|
||||
NormalMapShader();
|
||||
};
|
||||
|
||||
extern NormalMapShader *NormalMapShaderInstance;
|
||||
|
||||
class InstancedObjectPass1Shader : public ShaderHelper<>
|
||||
{
|
||||
public:
|
||||
|
Loading…
x
Reference in New Issue
Block a user