Use the singleton template
This commit is contained in:
parent
a9d3ef0b78
commit
5e0fb8dcf7
@ -109,8 +109,8 @@ void IrrDriver::renderSolidFirstPass()
|
||||
|
||||
{
|
||||
ScopedGPUTimer Timer(getGPUTimer(Q_SOLID_PASS1));
|
||||
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_STANDARD>(MeshShader::ObjectPass1ShaderInstance, { MeshShader::ObjectPass1ShaderInstance->TU_tex }, ListDefaultStandardG::Arguments);
|
||||
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_2TCOORDS>(MeshShader::ObjectPass1ShaderInstance, { MeshShader::ObjectPass1ShaderInstance->TU_tex }, ListDefault2TCoordG::Arguments);
|
||||
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);
|
||||
|
@ -326,7 +326,7 @@ void Shaders::loadShaders()
|
||||
FullScreenShader::MLAAGatherSHader::init();
|
||||
MeshShader::ColorizeShader::init();
|
||||
MeshShader::NormalMapShaderInstance = new MeshShader::NormalMapShader();
|
||||
MeshShader::ObjectPass1ShaderInstance = new MeshShader::ObjectPass1Shader();
|
||||
// MeshShader::ObjectPass1ShaderInstance = new MeshShader::ObjectPass1Shader();
|
||||
MeshShader::ObjectRefPass1ShaderInstance = new MeshShader::ObjectRefPass1Shader();
|
||||
MeshShader::InstancedObjectPass1ShaderInstance = new MeshShader::InstancedObjectPass1Shader();
|
||||
MeshShader::InstancedObjectRefPass1ShaderInstance = new MeshShader::InstancedObjectRefPass1Shader();
|
||||
@ -489,7 +489,7 @@ namespace MeshShader
|
||||
{
|
||||
|
||||
// Solid Normal and depth pass shaders
|
||||
ObjectPass1Shader::ObjectPass1Shader()
|
||||
ObjectPass1Shader::ObjectPass1Shader() : Singleton<ObjectPass1Shader>()
|
||||
{
|
||||
Program = LoadProgram(
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(),
|
||||
@ -504,7 +504,6 @@ namespace MeshShader
|
||||
TU_tex = 0;
|
||||
AssignTextureUnit(Program, { { TU_tex, "tex" } });
|
||||
}
|
||||
ObjectPass1Shader *ObjectPass1ShaderInstance;
|
||||
|
||||
ObjectRefPass1Shader::ObjectRefPass1Shader()
|
||||
{
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <IMeshSceneNode.h>
|
||||
#include <vector>
|
||||
#include "config/user_config.hpp"
|
||||
#include "utils/singleton.hpp"
|
||||
|
||||
typedef unsigned int GLuint;
|
||||
using namespace irr;
|
||||
@ -121,16 +122,14 @@ public:
|
||||
|
||||
namespace MeshShader
|
||||
{
|
||||
class ObjectPass1Shader : public ShaderHelper<core::matrix4, core::matrix4>
|
||||
class ObjectPass1Shader : public ShaderHelper<core::matrix4, core::matrix4>, public Singleton<class ObjectPass1Shader>
|
||||
{
|
||||
friend class Singleton<class ObjectPass1Shader>;
|
||||
public:
|
||||
GLuint TU_tex;
|
||||
ObjectPass1Shader();
|
||||
};
|
||||
|
||||
extern ObjectPass1Shader *ObjectPass1ShaderInstance;
|
||||
|
||||
|
||||
class ObjectRefPass1Shader : public ShaderHelper<core::matrix4, core::matrix4, core::matrix4>
|
||||
{
|
||||
public:
|
||||
|
@ -225,7 +225,7 @@ void STKMeshSceneNode::render()
|
||||
glDisable(GL_CULL_FACE);
|
||||
if (update_each_frame)
|
||||
updatevbo();
|
||||
glUseProgram(MeshShader::ObjectPass1ShaderInstance->Program);
|
||||
glUseProgram(MeshShader::ObjectPass1Shader::getInstance()->Program);
|
||||
// Only untextured
|
||||
for (unsigned i = 0; i < GLmeshes.size(); i++)
|
||||
{
|
||||
@ -235,7 +235,7 @@ void STKMeshSceneNode::render()
|
||||
GLenum itype = mesh.IndexType;
|
||||
size_t count = mesh.IndexCount;
|
||||
|
||||
MeshShader::ObjectPass1ShaderInstance->setUniforms(AbsoluteTransformation, invmodel);
|
||||
MeshShader::ObjectPass1Shader::getInstance()->setUniforms(AbsoluteTransformation, invmodel);
|
||||
assert(mesh.vao);
|
||||
glBindVertexArray(mesh.vao);
|
||||
glDrawElements(ptype, count, itype, 0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user