Moved shared shaders into Shaders class.
This commit is contained in:
parent
cbd5670764
commit
ced9e55639
@ -519,8 +519,8 @@ struct DefaultMaterial
|
||||
typedef InstancedShadowShader InstancedShadowPassShader;
|
||||
typedef CInstancedRSMShader InstancedRSMShader;
|
||||
typedef ListInstancedMatDefault InstancedList;
|
||||
typedef MeshShader::ObjectPass1Shader FirstPassShader;
|
||||
typedef MeshShader::ObjectPass2Shader SecondPassShader;
|
||||
typedef Shaders::ObjectPass1Shader FirstPassShader;
|
||||
typedef Shaders::ObjectPass2Shader SecondPassShader;
|
||||
typedef ShadowShader ShadowPassShader;
|
||||
typedef CRSMShader RSMShader;
|
||||
typedef ListMatDefault List;
|
||||
@ -579,7 +579,7 @@ struct SphereMap
|
||||
typedef InstancedShadowShader InstancedShadowPassShader;
|
||||
typedef CInstancedRSMShader InstancedRSMShader;
|
||||
typedef ListInstancedMatSphereMap InstancedList;
|
||||
typedef MeshShader::ObjectPass1Shader FirstPassShader;
|
||||
typedef Shaders::ObjectPass1Shader FirstPassShader;
|
||||
typedef SphereMapShader SecondPassShader;
|
||||
typedef ShadowShader ShadowPassShader;
|
||||
typedef CRSMShader RSMShader;
|
||||
@ -844,7 +844,7 @@ struct NormalMat
|
||||
typedef CInstancedRSMShader InstancedRSMShader;
|
||||
typedef ListInstancedMatNormalMap InstancedList;
|
||||
typedef NormalMapShader FirstPassShader;
|
||||
typedef MeshShader::ObjectPass2Shader SecondPassShader;
|
||||
typedef Shaders::ObjectPass2Shader SecondPassShader;
|
||||
typedef ShadowShader ShadowPassShader;
|
||||
typedef CRSMShader RSMShader;
|
||||
typedef ListMatNormalMap List;
|
||||
@ -874,7 +874,7 @@ struct DetailMat
|
||||
typedef InstancedShadowShader InstancedShadowPassShader;
|
||||
typedef CInstancedRSMShader InstancedRSMShader;
|
||||
typedef ListInstancedMatDetails InstancedList;
|
||||
typedef MeshShader::ObjectPass1Shader FirstPassShader;
|
||||
typedef Shaders::ObjectPass1Shader FirstPassShader;
|
||||
typedef DetailedObjectPass2Shader SecondPassShader;
|
||||
typedef ShadowShader ShadowPassShader;
|
||||
typedef CRSMShader RSMShader;
|
||||
@ -899,7 +899,7 @@ const STK::Tuple<size_t> DetailMat::RSMTextures = STK::Tuple<size_t>(0);
|
||||
// ----------------------------------------------------------------------------
|
||||
struct SplattingMat
|
||||
{
|
||||
typedef MeshShader::ObjectPass1Shader FirstPassShader;
|
||||
typedef Shaders::ObjectPass1Shader FirstPassShader;
|
||||
typedef SplattingShader SecondPassShader;
|
||||
typedef ShadowShader ShadowPassShader;
|
||||
typedef SplattingRSMShader RSMShader;
|
||||
@ -1312,22 +1312,22 @@ void IrrDriver::renderSolidSecondPass()
|
||||
if (CVS->isAZDOEnabled())
|
||||
{
|
||||
DiffuseHandle = glGetTextureSamplerHandleARB(m_rtts->getRenderTarget(RTT_DIFFUSE),
|
||||
MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[0]);
|
||||
Shaders::ObjectPass2Shader::getInstance()->m_sampler_ids[0]);
|
||||
if (!glIsTextureHandleResidentARB(DiffuseHandle))
|
||||
glMakeTextureHandleResidentARB(DiffuseHandle);
|
||||
|
||||
SpecularHandle = glGetTextureSamplerHandleARB(m_rtts->getRenderTarget(RTT_SPECULAR),
|
||||
MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[1]);
|
||||
Shaders::ObjectPass2Shader::getInstance()->m_sampler_ids[1]);
|
||||
if (!glIsTextureHandleResidentARB(SpecularHandle))
|
||||
glMakeTextureHandleResidentARB(SpecularHandle);
|
||||
|
||||
SSAOHandle = glGetTextureSamplerHandleARB(m_rtts->getRenderTarget(RTT_HALF1_R),
|
||||
MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[2]);
|
||||
Shaders::ObjectPass2Shader::getInstance()->m_sampler_ids[2]);
|
||||
if (!glIsTextureHandleResidentARB(SSAOHandle))
|
||||
glMakeTextureHandleResidentARB(SSAOHandle);
|
||||
|
||||
DepthHandle = glGetTextureSamplerHandleARB(getDepthStencilTexture(),
|
||||
MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[3]);
|
||||
Shaders::ObjectPass2Shader::getInstance()->m_sampler_ids[3]);
|
||||
if (!glIsTextureHandleResidentARB(DepthHandle))
|
||||
glMakeTextureHandleResidentARB(DepthHandle);
|
||||
}
|
||||
@ -1530,12 +1530,12 @@ void IrrDriver::renderTransparent()
|
||||
if (World::getWorld() && World::getWorld()->isFogEnabled())
|
||||
{
|
||||
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||
renderTransparenPass<MeshShader::TransparentFogShader, video::EVT_STANDARD,
|
||||
renderTransparenPass<Shaders::TransparentFogShader, video::EVT_STANDARD,
|
||||
8, 7, 6, 5, 4, 3, 2, 1>(
|
||||
TexUnits(RenderGeometry::TexUnit(0, true)),
|
||||
ListBlendTransparentFog::getInstance());
|
||||
glBlendFunc(GL_ONE, GL_ONE);
|
||||
renderTransparenPass<MeshShader::TransparentFogShader,
|
||||
renderTransparenPass<Shaders::TransparentFogShader,
|
||||
video::EVT_STANDARD, 8, 7, 6, 5, 4, 3, 2, 1>(
|
||||
TexUnits(RenderGeometry::TexUnit(0, true)),
|
||||
ListAdditiveTransparentFog::getInstance());
|
||||
@ -1543,12 +1543,12 @@ void IrrDriver::renderTransparent()
|
||||
else
|
||||
{
|
||||
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||
renderTransparenPass<MeshShader::TransparentShader,
|
||||
renderTransparenPass<Shaders::TransparentShader,
|
||||
video::EVT_STANDARD, 2, 1>(
|
||||
TexUnits(RenderGeometry::TexUnit(0, true)),
|
||||
ListBlendTransparent::getInstance());
|
||||
glBlendFunc(GL_ONE, GL_ONE);
|
||||
renderTransparenPass<MeshShader::TransparentShader, video::EVT_STANDARD, 2, 1>(
|
||||
renderTransparenPass<Shaders::TransparentShader, video::EVT_STANDARD, 2, 1>(
|
||||
TexUnits(RenderGeometry::TexUnit(0, true)),
|
||||
ListAdditiveTransparent::getInstance());
|
||||
}
|
||||
|
@ -225,25 +225,6 @@ GLuint LoadShader(const char * file, unsigned type)
|
||||
}
|
||||
|
||||
|
||||
|
||||
Shaders::ColoredLine::ColoredLine()
|
||||
{
|
||||
loadProgram(OBJECT, GL_VERTEX_SHADER, "object_pass.vert",
|
||||
GL_FRAGMENT_SHADER, "coloredquad.frag");
|
||||
|
||||
assignUniforms("color");
|
||||
|
||||
glGenVertexArrays(1, &m_vao);
|
||||
glBindVertexArray(m_vao);
|
||||
glGenBuffers(1, &m_vbo);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, 6 * 1024 * sizeof(float), 0, GL_DYNAMIC_DRAW);
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), 0);
|
||||
glBindVertexArray(0);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
} // Shaders::ColoredLine
|
||||
|
||||
void Shaders::loadShaders()
|
||||
{
|
||||
const std::string &dir = file_manager->getAsset(FileManager::SHADER, "");
|
||||
@ -350,55 +331,66 @@ unsigned getGLSLVersion()
|
||||
return CVS->getGLSLVersion();
|
||||
}
|
||||
|
||||
namespace MeshShader
|
||||
// ============================================================================
|
||||
// Solid Normal and depth pass shaders
|
||||
Shaders::ObjectPass1Shader::ObjectPass1Shader()
|
||||
{
|
||||
// Solid Normal and depth pass shaders
|
||||
ObjectPass1Shader::ObjectPass1Shader()
|
||||
{
|
||||
loadProgram(OBJECT,
|
||||
GL_VERTEX_SHADER, "object_pass.vert",
|
||||
GL_FRAGMENT_SHADER, "utils/encode_normal.frag",
|
||||
GL_FRAGMENT_SHADER, "object_pass1.frag");
|
||||
assignUniforms("ModelMatrix", "InverseModelMatrix");
|
||||
assignSamplerNames(0, "tex", ST_TRILINEAR_ANISOTROPIC_FILTERED);
|
||||
}
|
||||
loadProgram(OBJECT, GL_VERTEX_SHADER, "object_pass.vert",
|
||||
GL_FRAGMENT_SHADER, "utils/encode_normal.frag",
|
||||
GL_FRAGMENT_SHADER, "object_pass1.frag");
|
||||
assignUniforms("ModelMatrix", "InverseModelMatrix");
|
||||
assignSamplerNames(0, "tex", ST_TRILINEAR_ANISOTROPIC_FILTERED);
|
||||
} // ObjectPass1Shader
|
||||
|
||||
// ============================================================================
|
||||
// Solid Lit pass shaders
|
||||
Shaders::ObjectPass2Shader::ObjectPass2Shader()
|
||||
{
|
||||
loadProgram(OBJECT, GL_VERTEX_SHADER, "object_pass.vert",
|
||||
GL_FRAGMENT_SHADER, "utils/getLightFactor.frag",
|
||||
GL_FRAGMENT_SHADER, "object_pass2.frag");
|
||||
assignUniforms("ModelMatrix", "TextureMatrix");
|
||||
assignSamplerNames(0, "DiffuseMap", ST_NEAREST_FILTERED,
|
||||
1, "SpecularMap", ST_NEAREST_FILTERED,
|
||||
2, "SSAO", ST_BILINEAR_FILTERED,
|
||||
3, "Albedo", ST_TRILINEAR_ANISOTROPIC_FILTERED,
|
||||
4, "SpecMap", ST_TRILINEAR_ANISOTROPIC_FILTERED);
|
||||
} // ObjectPass2Shader
|
||||
|
||||
// Solid Lit pass shaders
|
||||
ObjectPass2Shader::ObjectPass2Shader()
|
||||
{
|
||||
loadProgram(OBJECT,
|
||||
GL_VERTEX_SHADER, "object_pass.vert",
|
||||
GL_FRAGMENT_SHADER, "utils/getLightFactor.frag",
|
||||
GL_FRAGMENT_SHADER, "object_pass2.frag");
|
||||
assignUniforms("ModelMatrix", "TextureMatrix");
|
||||
assignSamplerNames(0, "DiffuseMap", ST_NEAREST_FILTERED,
|
||||
1, "SpecularMap", ST_NEAREST_FILTERED,
|
||||
2, "SSAO", ST_BILINEAR_FILTERED,
|
||||
3, "Albedo", ST_TRILINEAR_ANISOTROPIC_FILTERED,
|
||||
4, "SpecMap", ST_TRILINEAR_ANISOTROPIC_FILTERED);
|
||||
}
|
||||
// ============================================================================
|
||||
Shaders::TransparentShader::TransparentShader()
|
||||
{
|
||||
loadProgram(OBJECT, GL_VERTEX_SHADER, "object_pass.vert",
|
||||
GL_FRAGMENT_SHADER, "transparent.frag");
|
||||
assignUniforms("ModelMatrix", "TextureMatrix");
|
||||
assignSamplerNames(0, "tex", ST_TRILINEAR_ANISOTROPIC_FILTERED);
|
||||
} // TransparentShader
|
||||
|
||||
// ============================================================================
|
||||
Shaders::TransparentFogShader::TransparentFogShader()
|
||||
{
|
||||
loadProgram(OBJECT, GL_VERTEX_SHADER, "object_pass.vert",
|
||||
GL_FRAGMENT_SHADER, "transparentfog.frag");
|
||||
assignUniforms("ModelMatrix", "TextureMatrix", "fogmax", "startH",
|
||||
"endH", "start", "end", "col");
|
||||
assignSamplerNames(0, "tex", ST_TRILINEAR_ANISOTROPIC_FILTERED);
|
||||
} // TransparentFogShader
|
||||
|
||||
// ============================================================================
|
||||
Shaders::ColoredLine::ColoredLine()
|
||||
{
|
||||
loadProgram(OBJECT, GL_VERTEX_SHADER, "object_pass.vert",
|
||||
GL_FRAGMENT_SHADER, "coloredquad.frag");
|
||||
|
||||
TransparentShader::TransparentShader()
|
||||
{
|
||||
loadProgram(OBJECT,
|
||||
GL_VERTEX_SHADER, "object_pass.vert",
|
||||
GL_FRAGMENT_SHADER, "transparent.frag");
|
||||
assignUniforms("ModelMatrix", "TextureMatrix");
|
||||
assignSamplerNames(0, "tex", ST_TRILINEAR_ANISOTROPIC_FILTERED);
|
||||
}
|
||||
|
||||
TransparentFogShader::TransparentFogShader()
|
||||
{
|
||||
loadProgram(OBJECT,
|
||||
GL_VERTEX_SHADER, "object_pass.vert",
|
||||
GL_FRAGMENT_SHADER, "transparentfog.frag");
|
||||
assignUniforms("ModelMatrix", "TextureMatrix", "fogmax", "startH",
|
||||
"endH", "start", "end", "col");
|
||||
assignSamplerNames(0, "tex", ST_TRILINEAR_ANISOTROPIC_FILTERED);
|
||||
}
|
||||
|
||||
}
|
||||
assignUniforms("color");
|
||||
|
||||
glGenVertexArrays(1, &m_vao);
|
||||
glBindVertexArray(m_vao);
|
||||
glGenBuffers(1, &m_vbo);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, 6 * 1024 * sizeof(float), 0, GL_DYNAMIC_DRAW);
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), 0);
|
||||
glBindVertexArray(0);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
} // Shaders::ColoredLine
|
||||
|
@ -31,43 +31,6 @@
|
||||
using namespace irr;
|
||||
class ParticleSystemProxy;
|
||||
|
||||
|
||||
namespace MeshShader
|
||||
{
|
||||
class ObjectPass1Shader : public TextureShader<ObjectPass1Shader, 1,
|
||||
core::matrix4, core::matrix4>
|
||||
{
|
||||
public:
|
||||
ObjectPass1Shader();
|
||||
};
|
||||
|
||||
|
||||
|
||||
class ObjectPass2Shader : public TextureShader<ObjectPass2Shader, 5, core::matrix4, core::matrix4>
|
||||
{
|
||||
public:
|
||||
ObjectPass2Shader();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
class TransparentShader : public TextureShader<TransparentShader, 1, core::matrix4, core::matrix4>
|
||||
{
|
||||
public:
|
||||
TransparentShader();
|
||||
};
|
||||
|
||||
class TransparentFogShader : public TextureShader<TransparentFogShader, 1, core::matrix4, core::matrix4, float, float,
|
||||
float, float, float, video::SColorf>
|
||||
{
|
||||
public:
|
||||
TransparentFogShader();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
#define FOREACH_SHADER(ACT) \
|
||||
ACT(ES_NORMAL_MAP) \
|
||||
ACT(ES_NORMAL_MAP_LIGHTMAP) \
|
||||
@ -166,6 +129,41 @@ public:
|
||||
} // bindBuffer
|
||||
}; // class ColoredLine
|
||||
|
||||
// ========================================================================
|
||||
class TransparentShader : public TextureShader<TransparentShader, 1,
|
||||
core::matrix4, core::matrix4 >
|
||||
{
|
||||
public:
|
||||
TransparentShader();
|
||||
}; // TransparentShader
|
||||
|
||||
// ========================================================================
|
||||
class TransparentFogShader : public TextureShader<TransparentFogShader, 1,
|
||||
core::matrix4, core::matrix4, float, float,
|
||||
float, float, float, video::SColorf >
|
||||
{
|
||||
public:
|
||||
TransparentFogShader();
|
||||
}; // TransparentFogShader
|
||||
// ========================================================================
|
||||
class ObjectPass1Shader : public TextureShader<ObjectPass1Shader, 1,
|
||||
core::matrix4, core::matrix4>
|
||||
{
|
||||
public:
|
||||
ObjectPass1Shader();
|
||||
}; // ObjectPass1Shader
|
||||
|
||||
// ========================================================================
|
||||
class ObjectPass2Shader : public TextureShader < ObjectPass2Shader, 5,
|
||||
core::matrix4, core::matrix4 >
|
||||
{
|
||||
public:
|
||||
ObjectPass2Shader();
|
||||
}; // ObjectPass2Shader
|
||||
|
||||
// ========================================================================
|
||||
|
||||
|
||||
}; // class Shaders
|
||||
|
||||
#undef ENUM
|
||||
|
@ -347,7 +347,7 @@ static void setTexture(GLMesh &mesh, unsigned i, bool is_srgb,
|
||||
{
|
||||
mesh.TextureHandles[i] = glGetTextureSamplerHandleARB(
|
||||
getTextureGLuint(mesh.textures[i]),
|
||||
MeshShader::ObjectPass1Shader::getInstance()->m_sampler_ids[0]);
|
||||
Shaders::ObjectPass1Shader::getInstance()->m_sampler_ids[0]);
|
||||
}
|
||||
if (!glIsTextureHandleResidentARB(mesh.TextureHandles[i]))
|
||||
glMakeTextureHandleResidentARB(mesh.TextureHandles[i]);
|
||||
@ -426,7 +426,7 @@ void initTexturesTransparent(GLMesh &mesh)
|
||||
{
|
||||
mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(
|
||||
getTextureGLuint(mesh.textures[0]),
|
||||
MeshShader::ObjectPass1Shader::getInstance()->m_sampler_ids[0]);
|
||||
Shaders::ObjectPass1Shader::getInstance()->m_sampler_ids[0]);
|
||||
}
|
||||
if (!glIsTextureHandleResidentARB(mesh.TextureHandles[0]))
|
||||
glMakeTextureHandleResidentARB(mesh.TextureHandles[0]);
|
||||
|
@ -290,7 +290,7 @@ void STKMeshSceneNode::render()
|
||||
glDisable(GL_CULL_FACE);
|
||||
if (update_each_frame)
|
||||
updatevbo();
|
||||
MeshShader::ObjectPass1Shader::getInstance()->use();
|
||||
Shaders::ObjectPass1Shader::getInstance()->use();
|
||||
// Only untextured
|
||||
for (unsigned i = 0; i < GLmeshes.size(); i++)
|
||||
{
|
||||
@ -304,14 +304,19 @@ void STKMeshSceneNode::render()
|
||||
if (CVS->isAZDOEnabled())
|
||||
{
|
||||
if (!mesh.TextureHandles[0])
|
||||
mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]), MeshShader::ObjectPass1Shader::getInstance()->m_sampler_ids[0]);
|
||||
{
|
||||
mesh.TextureHandles[0] =
|
||||
glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]),
|
||||
Shaders::ObjectPass1Shader
|
||||
::getInstance()->m_sampler_ids[0]);
|
||||
}
|
||||
if (!glIsTextureHandleResidentARB(mesh.TextureHandles[0]))
|
||||
glMakeTextureHandleResidentARB(mesh.TextureHandles[0]);
|
||||
MeshShader::ObjectPass1Shader::getInstance()->setTextureHandles(mesh.TextureHandles[0]);
|
||||
Shaders::ObjectPass1Shader::getInstance()->setTextureHandles(mesh.TextureHandles[0]);
|
||||
}
|
||||
else
|
||||
MeshShader::ObjectPass1Shader::getInstance()->setTextureUnits(getTextureGLuint(mesh.textures[0]));
|
||||
MeshShader::ObjectPass1Shader::getInstance()->setUniforms(AbsoluteTransformation, invmodel);
|
||||
Shaders::ObjectPass1Shader::getInstance()->setTextureUnits(getTextureGLuint(mesh.textures[0]));
|
||||
Shaders::ObjectPass1Shader::getInstance()->setUniforms(AbsoluteTransformation, invmodel);
|
||||
assert(mesh.vao);
|
||||
glBindVertexArray(mesh.vao);
|
||||
glDrawElements(ptype, count, itype, 0);
|
||||
@ -329,7 +334,7 @@ void STKMeshSceneNode::render()
|
||||
glDisable(GL_CULL_FACE);
|
||||
if (update_each_frame && !CVS->isDefferedEnabled())
|
||||
updatevbo();
|
||||
MeshShader::ObjectPass2Shader::getInstance()->use();
|
||||
Shaders::ObjectPass2Shader::getInstance()->use();
|
||||
// Only untextured
|
||||
for (unsigned i = 0; i < GLmeshes.size(); i++)
|
||||
{
|
||||
@ -341,36 +346,50 @@ void STKMeshSceneNode::render()
|
||||
|
||||
if (CVS->isAZDOEnabled())
|
||||
{
|
||||
GLuint64 DiffuseHandle = glGetTextureSamplerHandleARB(irr_driver->getRenderTargetTexture(RTT_DIFFUSE), MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[0]);
|
||||
GLuint64 DiffuseHandle =
|
||||
glGetTextureSamplerHandleARB(irr_driver->getRenderTargetTexture(RTT_DIFFUSE),
|
||||
Shaders::ObjectPass2Shader
|
||||
::getInstance()->m_sampler_ids[0]);
|
||||
if (!glIsTextureHandleResidentARB(DiffuseHandle))
|
||||
glMakeTextureHandleResidentARB(DiffuseHandle);
|
||||
|
||||
GLuint64 SpecularHandle = glGetTextureSamplerHandleARB(irr_driver->getRenderTargetTexture(RTT_SPECULAR), MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[1]);
|
||||
GLuint64 SpecularHandle =
|
||||
glGetTextureSamplerHandleARB(irr_driver->getRenderTargetTexture(RTT_SPECULAR),
|
||||
Shaders::ObjectPass2Shader::getInstance()->m_sampler_ids[1]);
|
||||
if (!glIsTextureHandleResidentARB(SpecularHandle))
|
||||
glMakeTextureHandleResidentARB(SpecularHandle);
|
||||
|
||||
GLuint64 SSAOHandle = glGetTextureSamplerHandleARB(irr_driver->getRenderTargetTexture(RTT_HALF1_R), MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[2]);
|
||||
GLuint64 SSAOHandle =
|
||||
glGetTextureSamplerHandleARB(irr_driver->getRenderTargetTexture(RTT_HALF1_R),
|
||||
Shaders::ObjectPass2Shader::getInstance()->m_sampler_ids[2]);
|
||||
if (!glIsTextureHandleResidentARB(SSAOHandle))
|
||||
glMakeTextureHandleResidentARB(SSAOHandle);
|
||||
|
||||
if (!mesh.TextureHandles[0])
|
||||
mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]), MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[0]);
|
||||
mesh.TextureHandles[0] =
|
||||
glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]),
|
||||
Shaders::ObjectPass2Shader::getInstance()->m_sampler_ids[0]);
|
||||
if (!glIsTextureHandleResidentARB(mesh.TextureHandles[0]))
|
||||
glMakeTextureHandleResidentARB(mesh.TextureHandles[0]);
|
||||
if (!mesh.TextureHandles[1])
|
||||
mesh.TextureHandles[1] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[1]), MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[0]);
|
||||
mesh.TextureHandles[1] =
|
||||
glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[1]),
|
||||
Shaders::ObjectPass2Shader::getInstance()->m_sampler_ids[0]);
|
||||
if (!glIsTextureHandleResidentARB(mesh.TextureHandles[1]))
|
||||
glMakeTextureHandleResidentARB(mesh.TextureHandles[1]);
|
||||
MeshShader::ObjectPass2Shader::getInstance()->setTextureHandles(DiffuseHandle, SpecularHandle, SSAOHandle, mesh.TextureHandles[0], mesh.TextureHandles[1]);
|
||||
Shaders::ObjectPass2Shader::getInstance()
|
||||
->setTextureHandles(DiffuseHandle, SpecularHandle, SSAOHandle,
|
||||
mesh.TextureHandles[0], mesh.TextureHandles[1]);
|
||||
}
|
||||
else
|
||||
MeshShader::ObjectPass2Shader::getInstance()->setTextureUnits(
|
||||
Shaders::ObjectPass2Shader::getInstance()->setTextureUnits(
|
||||
irr_driver->getRenderTargetTexture(RTT_DIFFUSE),
|
||||
irr_driver->getRenderTargetTexture(RTT_SPECULAR),
|
||||
irr_driver->getRenderTargetTexture(RTT_HALF1_R),
|
||||
getTextureGLuint(mesh.textures[0]),
|
||||
getTextureGLuint(mesh.textures[1]));
|
||||
MeshShader::ObjectPass2Shader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix);
|
||||
Shaders::ObjectPass2Shader::getInstance()->setUniforms(AbsoluteTransformation,
|
||||
mesh.TextureMatrix);
|
||||
assert(mesh.vao);
|
||||
glBindVertexArray(mesh.vao);
|
||||
glDrawElements(ptype, count, itype, 0);
|
||||
@ -411,7 +430,7 @@ void STKMeshSceneNode::render()
|
||||
|
||||
if (World::getWorld() && World::getWorld()->isFogEnabled())
|
||||
{
|
||||
MeshShader::TransparentFogShader::getInstance()->use();
|
||||
Shaders::TransparentFogShader::getInstance()->use();
|
||||
for (unsigned i = 0; i < GLmeshes.size(); i++)
|
||||
{
|
||||
GLMesh &mesh = GLmeshes[i];
|
||||
@ -438,14 +457,22 @@ void STKMeshSceneNode::render()
|
||||
if (CVS->isAZDOEnabled())
|
||||
{
|
||||
if (!mesh.TextureHandles[0])
|
||||
mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]), MeshShader::TransparentFogShader::getInstance()->m_sampler_ids[0]);
|
||||
mesh.TextureHandles[0] =
|
||||
glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]),
|
||||
Shaders::TransparentFogShader::getInstance()->m_sampler_ids[0]);
|
||||
if (!glIsTextureHandleResidentARB(mesh.TextureHandles[0]))
|
||||
glMakeTextureHandleResidentARB(mesh.TextureHandles[0]);
|
||||
MeshShader::TransparentFogShader::getInstance()->setTextureHandles(mesh.TextureHandles[0]);
|
||||
Shaders::TransparentFogShader::getInstance()
|
||||
->setTextureHandles(mesh.TextureHandles[0]);
|
||||
}
|
||||
else
|
||||
MeshShader::TransparentFogShader::getInstance()->setTextureUnits(getTextureGLuint(mesh.textures[0]));
|
||||
MeshShader::TransparentFogShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix, fogmax, startH, endH, start, end, col);
|
||||
{
|
||||
Shaders::TransparentFogShader::getInstance()
|
||||
->setTextureUnits(getTextureGLuint(mesh.textures[0]));
|
||||
}
|
||||
Shaders::TransparentFogShader::getInstance()
|
||||
->setUniforms(AbsoluteTransformation, mesh.TextureMatrix,
|
||||
fogmax, startH, endH, start, end, col);
|
||||
|
||||
assert(mesh.vao);
|
||||
glBindVertexArray(mesh.vao);
|
||||
@ -455,7 +482,7 @@ void STKMeshSceneNode::render()
|
||||
}
|
||||
else
|
||||
{
|
||||
MeshShader::TransparentShader::getInstance()->use();
|
||||
Shaders::TransparentShader::getInstance()->use();
|
||||
for (unsigned i = 0; i < GLmeshes.size(); i++)
|
||||
{
|
||||
irr_driver->IncreaseObjectCount();
|
||||
@ -468,15 +495,17 @@ void STKMeshSceneNode::render()
|
||||
if (CVS->isAZDOEnabled())
|
||||
{
|
||||
if (!mesh.TextureHandles[0])
|
||||
mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]), MeshShader::TransparentShader::getInstance()->m_sampler_ids[0]);
|
||||
mesh.TextureHandles[0] =
|
||||
glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]),
|
||||
Shaders::TransparentShader::getInstance()->m_sampler_ids[0]);
|
||||
if (!glIsTextureHandleResidentARB(mesh.TextureHandles[0]))
|
||||
glMakeTextureHandleResidentARB(mesh.TextureHandles[0]);
|
||||
MeshShader::TransparentShader::getInstance()->setTextureHandles(mesh.TextureHandles[0]);
|
||||
Shaders::TransparentShader::getInstance()->setTextureHandles(mesh.TextureHandles[0]);
|
||||
}
|
||||
else
|
||||
MeshShader::TransparentShader::getInstance()->setTextureUnits(getTextureGLuint(mesh.textures[0]));
|
||||
Shaders::TransparentShader::getInstance()->setTextureUnits(getTextureGLuint(mesh.textures[0]));
|
||||
|
||||
MeshShader::TransparentShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix);
|
||||
Shaders::TransparentShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix);
|
||||
assert(mesh.vao);
|
||||
glBindVertexArray(mesh.vao);
|
||||
glDrawElements(ptype, count, itype, 0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user