Use template to declare shader texture usage.
This commit is contained in:
parent
30c91217a7
commit
af9c3d53b7
@ -932,7 +932,7 @@ static void drawTexColoredQuad(const video::ITexture *texture, const video::SCol
|
|||||||
glUseProgram(UIShader::ColoredTextureRectShader::getInstance()->Program);
|
glUseProgram(UIShader::ColoredTextureRectShader::getInstance()->Program);
|
||||||
glBindVertexArray(UIShader::ColoredTextureRectShader::getInstance()->vao);
|
glBindVertexArray(UIShader::ColoredTextureRectShader::getInstance()->vao);
|
||||||
|
|
||||||
setTexture(UIShader::ColoredTextureRectShader::getInstance()->TU_tex, static_cast<const irr::video::COpenGLTexture*>(texture)->getOpenGLTextureName(), GL_LINEAR, GL_LINEAR);
|
UIShader::ColoredTextureRectShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ static_cast<const irr::video::COpenGLTexture*>(texture)->getOpenGLTextureName() });
|
||||||
UIShader::ColoredTextureRectShader::getInstance()->setUniforms(
|
UIShader::ColoredTextureRectShader::getInstance()->setUniforms(
|
||||||
core::vector2df(center_pos_x, center_pos_y), core::vector2df(width, height),
|
core::vector2df(center_pos_x, center_pos_y), core::vector2df(width, height),
|
||||||
core::vector2df(tex_center_pos_x, tex_center_pos_y), core::vector2df(tex_width, tex_height));
|
core::vector2df(tex_center_pos_x, tex_center_pos_y), core::vector2df(tex_width, tex_height));
|
||||||
@ -952,7 +952,7 @@ void drawTexQuad(GLuint texture, float width, float height,
|
|||||||
glUseProgram(UIShader::TextureRectShader::getInstance()->Program);
|
glUseProgram(UIShader::TextureRectShader::getInstance()->Program);
|
||||||
glBindVertexArray(SharedObject::UIVAO);
|
glBindVertexArray(SharedObject::UIVAO);
|
||||||
|
|
||||||
setTexture(UIShader::TextureRectShader::getInstance()->TU_tex, texture, GL_LINEAR, GL_LINEAR);
|
UIShader::TextureRectShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ texture });
|
||||||
UIShader::TextureRectShader::getInstance()->setUniforms(
|
UIShader::TextureRectShader::getInstance()->setUniforms(
|
||||||
core::vector2df(center_pos_x, center_pos_y), core::vector2df(width, height),
|
core::vector2df(center_pos_x, center_pos_y), core::vector2df(width, height),
|
||||||
core::vector2df(tex_center_pos_x, tex_center_pos_y),
|
core::vector2df(tex_center_pos_x, tex_center_pos_y),
|
||||||
@ -1055,7 +1055,7 @@ void draw2DImage(const video::ITexture* texture, const core::rect<s32>& destRect
|
|||||||
glUseProgram(UIShader::UniformColoredTextureRectShader::getInstance()->Program);
|
glUseProgram(UIShader::UniformColoredTextureRectShader::getInstance()->Program);
|
||||||
glBindVertexArray(SharedObject::UIVAO);
|
glBindVertexArray(SharedObject::UIVAO);
|
||||||
|
|
||||||
setTexture(UIShader::UniformColoredTextureRectShader::getInstance()->TU_tex, static_cast<const irr::video::COpenGLTexture*>(texture)->getOpenGLTextureName(), GL_LINEAR, GL_LINEAR);
|
UIShader::UniformColoredTextureRectShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ static_cast<const irr::video::COpenGLTexture*>(texture)->getOpenGLTextureName() });
|
||||||
UIShader::UniformColoredTextureRectShader::getInstance()->setUniforms(
|
UIShader::UniformColoredTextureRectShader::getInstance()->setUniforms(
|
||||||
core::vector2df(center_pos_x, center_pos_y), core::vector2df(width, height), core::vector2df(tex_center_pos_x, tex_center_pos_y), core::vector2df(tex_width, tex_height), colors);
|
core::vector2df(center_pos_x, center_pos_y), core::vector2df(width, height), core::vector2df(tex_center_pos_x, tex_center_pos_y), core::vector2df(tex_width, tex_height), colors);
|
||||||
|
|
||||||
@ -1091,7 +1091,7 @@ void draw2DImageFromRTT(GLuint texture, size_t texture_w, size_t texture_h,
|
|||||||
glUseProgram(UIShader::UniformColoredTextureRectShader::getInstance()->Program);
|
glUseProgram(UIShader::UniformColoredTextureRectShader::getInstance()->Program);
|
||||||
glBindVertexArray(SharedObject::UIVAO);
|
glBindVertexArray(SharedObject::UIVAO);
|
||||||
|
|
||||||
setTexture(UIShader::UniformColoredTextureRectShader::getInstance()->TU_tex, texture, GL_LINEAR, GL_LINEAR);
|
UIShader::UniformColoredTextureRectShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ texture });
|
||||||
UIShader::UniformColoredTextureRectShader::getInstance()->setUniforms(
|
UIShader::UniformColoredTextureRectShader::getInstance()->setUniforms(
|
||||||
core::vector2df(center_pos_x, center_pos_y), core::vector2df(width, height),
|
core::vector2df(center_pos_x, center_pos_y), core::vector2df(width, height),
|
||||||
core::vector2df(tex_center_pos_x, tex_center_pos_y), core::vector2df(tex_width, tex_height),
|
core::vector2df(tex_center_pos_x, tex_center_pos_y), core::vector2df(tex_width, tex_height),
|
||||||
|
@ -348,9 +348,7 @@ void ParticleSystemProxy::drawFlip()
|
|||||||
glBlendFunc(GL_ONE, GL_ONE);
|
glBlendFunc(GL_ONE, GL_ONE);
|
||||||
glUseProgram(ParticleShader::FlipParticleRender::getInstance()->Program);
|
glUseProgram(ParticleShader::FlipParticleRender::getInstance()->Program);
|
||||||
|
|
||||||
setTexture(ParticleShader::FlipParticleRender::getInstance()->TU_tex, texture, GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR);
|
ParticleShader::FlipParticleRender::getInstance()->SetTextureUnits(std::vector<GLuint>{ texture, irr_driver->getDepthStencilTexture() });
|
||||||
setTexture(ParticleShader::FlipParticleRender::getInstance()->TU_dtex, irr_driver->getDepthStencilTexture(), GL_NEAREST, GL_NEAREST);
|
|
||||||
|
|
||||||
ParticleShader::FlipParticleRender::getInstance()->setUniforms();
|
ParticleShader::FlipParticleRender::getInstance()->setUniforms();
|
||||||
|
|
||||||
glBindVertexArray(current_rendering_vao);
|
glBindVertexArray(current_rendering_vao);
|
||||||
@ -365,8 +363,7 @@ void ParticleSystemProxy::drawNotFlip()
|
|||||||
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
glUseProgram(ParticleShader::SimpleParticleRender::getInstance()->Program);
|
glUseProgram(ParticleShader::SimpleParticleRender::getInstance()->Program);
|
||||||
|
|
||||||
setTexture(ParticleShader::SimpleParticleRender::getInstance()->TU_tex, texture, GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR);
|
ParticleShader::SimpleParticleRender::getInstance()->SetTextureUnits(std::vector<GLuint>{ texture, irr_driver->getDepthStencilTexture() });
|
||||||
setTexture(ParticleShader::SimpleParticleRender::getInstance()->TU_dtex, irr_driver->getDepthStencilTexture(), GL_NEAREST, GL_NEAREST);
|
|
||||||
video::SColorf ColorFrom = video::SColorf(getColorFrom()[0], getColorFrom()[1], getColorFrom()[2]);
|
video::SColorf ColorFrom = video::SColorf(getColorFrom()[0], getColorFrom()[1], getColorFrom()[2]);
|
||||||
video::SColorf ColorTo = video::SColorf(getColorTo()[0], getColorTo()[1], getColorTo()[2]);
|
video::SColorf ColorTo = video::SColorf(getColorTo()[0], getColorTo()[1], getColorTo()[2]);
|
||||||
|
|
||||||
|
@ -216,7 +216,7 @@ static void DrawFullScreenEffect(Args...args)
|
|||||||
static
|
static
|
||||||
void renderBloom(GLuint in)
|
void renderBloom(GLuint in)
|
||||||
{
|
{
|
||||||
setTexture(FullScreenShader::BloomShader::getInstance()->TU_tex, in, GL_NEAREST, GL_NEAREST);
|
FullScreenShader::BloomShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ in });
|
||||||
DrawFullScreenEffect<FullScreenShader::BloomShader>();
|
DrawFullScreenEffect<FullScreenShader::BloomShader>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -263,26 +263,8 @@ void PostProcessing::renderGI(const core::matrix4 &RHMatrix, const core::vector3
|
|||||||
core::matrix4 InvRHMatrix;
|
core::matrix4 InvRHMatrix;
|
||||||
RHMatrix.getInverse(InvRHMatrix);
|
RHMatrix.getInverse(InvRHMatrix);
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
glActiveTexture(GL_TEXTURE0 + FullScreenShader::GlobalIlluminationReconstructionShader::getInstance()->TU_SHR);
|
FullScreenShader::GlobalIlluminationReconstructionShader::getInstance()->SetTextureUnits(std::vector<GLuint>
|
||||||
glBindTexture(GL_TEXTURE_3D, shr);
|
{ irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture(), shr, shg, shb });
|
||||||
{
|
|
||||||
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
||||||
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
||||||
}
|
|
||||||
glActiveTexture(GL_TEXTURE0 + FullScreenShader::GlobalIlluminationReconstructionShader::getInstance()->TU_SHG);
|
|
||||||
glBindTexture(GL_TEXTURE_3D, shg);
|
|
||||||
{
|
|
||||||
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
||||||
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
||||||
}
|
|
||||||
glActiveTexture(GL_TEXTURE0 + FullScreenShader::GlobalIlluminationReconstructionShader::getInstance()->TU_SHB);
|
|
||||||
glBindTexture(GL_TEXTURE_3D, shb);
|
|
||||||
{
|
|
||||||
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
||||||
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
||||||
}
|
|
||||||
setTexture(FullScreenShader::GlobalIlluminationReconstructionShader::getInstance()->TU_ntex, irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), GL_NEAREST, GL_NEAREST);
|
|
||||||
setTexture(FullScreenShader::GlobalIlluminationReconstructionShader::getInstance()->TU_dtex, irr_driver->getDepthStencilTexture(), GL_NEAREST, GL_NEAREST);
|
|
||||||
DrawFullScreenEffect<FullScreenShader::GlobalIlluminationReconstructionShader>(RHMatrix, InvRHMatrix, rh_extend);
|
DrawFullScreenEffect<FullScreenShader::GlobalIlluminationReconstructionShader>(RHMatrix, InvRHMatrix, rh_extend);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,17 +291,7 @@ void PostProcessing::renderShadowedSunlight(const std::vector<core::matrix4> &su
|
|||||||
glBlendFunc(GL_ONE, GL_ONE);
|
glBlendFunc(GL_ONE, GL_ONE);
|
||||||
glBlendEquation(GL_FUNC_ADD);
|
glBlendEquation(GL_FUNC_ADD);
|
||||||
|
|
||||||
setTexture(FullScreenShader::ShadowedSunLightShader::getInstance()->TU_ntex, irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), GL_NEAREST, GL_NEAREST);
|
FullScreenShader::ShadowedSunLightShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture(), depthtex });
|
||||||
setTexture(FullScreenShader::ShadowedSunLightShader::getInstance()->TU_dtex, irr_driver->getDepthStencilTexture(), GL_NEAREST, GL_NEAREST);
|
|
||||||
glActiveTexture(GL_TEXTURE0 + FullScreenShader::ShadowedSunLightShader::getInstance()->TU_shadowtex);
|
|
||||||
glBindTexture(GL_TEXTURE_2D_ARRAY, depthtex);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
|
||||||
glTexParameterf(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
|
|
||||||
glTexParameterf(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
|
|
||||||
|
|
||||||
DrawFullScreenEffect<FullScreenShader::ShadowedSunLightShader>(cb->getPosition(), video::SColorf(cb->getRed(), cb->getGreen(), cb->getBlue()));
|
DrawFullScreenEffect<FullScreenShader::ShadowedSunLightShader>(cb->getPosition(), video::SColorf(cb->getRed(), cb->getGreen(), cb->getBlue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -331,17 +303,13 @@ void PostProcessing::renderGaussian3Blur(FrameBuffer &in_fbo, FrameBuffer &auxil
|
|||||||
{
|
{
|
||||||
auxiliary.Bind();
|
auxiliary.Bind();
|
||||||
|
|
||||||
setTexture(FullScreenShader::Gaussian3VBlurShader::getInstance()->TU_tex, in_fbo.getRTT()[0], GL_LINEAR, GL_LINEAR);
|
FullScreenShader::Gaussian3VBlurShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ in_fbo.getRTT()[0] });
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
|
||||||
DrawFullScreenEffect<FullScreenShader::Gaussian3VBlurShader>(core::vector2df(inv_width, inv_height));
|
DrawFullScreenEffect<FullScreenShader::Gaussian3VBlurShader>(core::vector2df(inv_width, inv_height));
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
in_fbo.Bind();
|
in_fbo.Bind();
|
||||||
|
|
||||||
setTexture(FullScreenShader::Gaussian3HBlurShader::getInstance()->TU_tex, auxiliary.getRTT()[0], GL_LINEAR, GL_LINEAR);
|
FullScreenShader::Gaussian3HBlurShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ auxiliary.getRTT()[0] });
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
|
||||||
DrawFullScreenEffect<FullScreenShader::Gaussian3HBlurShader>(core::vector2df(inv_width, inv_height));
|
DrawFullScreenEffect<FullScreenShader::Gaussian3HBlurShader>(core::vector2df(inv_width, inv_height));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -353,17 +321,13 @@ void PostProcessing::renderGaussian6Blur(FrameBuffer &in_fbo, FrameBuffer &auxil
|
|||||||
{
|
{
|
||||||
auxiliary.Bind();
|
auxiliary.Bind();
|
||||||
|
|
||||||
setTexture(FullScreenShader::Gaussian6VBlurShader::getInstance()->TU_tex, in_fbo.getRTT()[0], GL_LINEAR, GL_LINEAR);
|
FullScreenShader::Gaussian6VBlurShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ in_fbo.getRTT()[0] });
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
|
||||||
DrawFullScreenEffect<FullScreenShader::Gaussian6VBlurShader>(core::vector2df(inv_width, inv_height));
|
DrawFullScreenEffect<FullScreenShader::Gaussian6VBlurShader>(core::vector2df(inv_width, inv_height));
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
in_fbo.Bind();
|
in_fbo.Bind();
|
||||||
|
|
||||||
setTexture(FullScreenShader::Gaussian6HBlurShader::getInstance()->TU_tex, auxiliary.getRTT()[0], GL_LINEAR, GL_LINEAR);
|
FullScreenShader::Gaussian6HBlurShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ auxiliary.getRTT()[0] });
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
|
||||||
DrawFullScreenEffect<FullScreenShader::Gaussian6HBlurShader>(core::vector2df(inv_width, inv_height));
|
DrawFullScreenEffect<FullScreenShader::Gaussian6HBlurShader>(core::vector2df(inv_width, inv_height));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -434,7 +398,7 @@ void PostProcessing::renderPassThrough(GLuint tex)
|
|||||||
glUseProgram(FullScreenShader::PassThroughShader::getInstance()->Program);
|
glUseProgram(FullScreenShader::PassThroughShader::getInstance()->Program);
|
||||||
glBindVertexArray(FullScreenShader::PassThroughShader::getInstance()->vao);
|
glBindVertexArray(FullScreenShader::PassThroughShader::getInstance()->vao);
|
||||||
|
|
||||||
setTexture(FullScreenShader::PassThroughShader::getInstance()->TU_tex, tex, GL_LINEAR, GL_LINEAR);
|
FullScreenShader::PassThroughShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ tex });
|
||||||
FullScreenShader::PassThroughShader::getInstance()->setUniforms();
|
FullScreenShader::PassThroughShader::getInstance()->setUniforms();
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
@ -459,7 +423,7 @@ void PostProcessing::renderGlow(unsigned tex)
|
|||||||
glUseProgram(FullScreenShader::GlowShader::getInstance()->Program);
|
glUseProgram(FullScreenShader::GlowShader::getInstance()->Program);
|
||||||
glBindVertexArray(FullScreenShader::GlowShader::getInstance()->vao);
|
glBindVertexArray(FullScreenShader::GlowShader::getInstance()->vao);
|
||||||
|
|
||||||
setTexture(FullScreenShader::GlowShader::getInstance()->TU_tex, tex, GL_LINEAR, GL_LINEAR);
|
FullScreenShader::GlowShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ tex });
|
||||||
FullScreenShader::GlowShader::getInstance()->setUniforms();
|
FullScreenShader::GlowShader::getInstance()->setUniforms();
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
@ -473,11 +437,11 @@ void PostProcessing::renderSSAO()
|
|||||||
|
|
||||||
// Generate linear depth buffer
|
// Generate linear depth buffer
|
||||||
irr_driver->getFBO(FBO_LINEAR_DEPTH).Bind();
|
irr_driver->getFBO(FBO_LINEAR_DEPTH).Bind();
|
||||||
setTexture(FullScreenShader::LinearizeDepthShader::getInstance()->TU_tex, irr_driver->getDepthStencilTexture(), GL_LINEAR, GL_LINEAR);
|
FullScreenShader::LinearizeDepthShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ irr_driver->getDepthStencilTexture() });
|
||||||
DrawFullScreenEffect<FullScreenShader::LinearizeDepthShader>(irr_driver->getSceneManager()->getActiveCamera()->getNearValue(), irr_driver->getSceneManager()->getActiveCamera()->getFarValue());
|
DrawFullScreenEffect<FullScreenShader::LinearizeDepthShader>(irr_driver->getSceneManager()->getActiveCamera()->getNearValue(), irr_driver->getSceneManager()->getActiveCamera()->getFarValue());
|
||||||
irr_driver->getFBO(FBO_SSAO).Bind();
|
irr_driver->getFBO(FBO_SSAO).Bind();
|
||||||
|
|
||||||
setTexture(FullScreenShader::SSAOShader::getInstance()->TU_dtex, irr_driver->getRenderTargetTexture(RTT_LINEAR_DEPTH), GL_LINEAR, GL_LINEAR_MIPMAP_NEAREST);
|
FullScreenShader::SSAOShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ irr_driver->getRenderTargetTexture(RTT_LINEAR_DEPTH) });
|
||||||
glGenerateMipmap(GL_TEXTURE_2D);
|
glGenerateMipmap(GL_TEXTURE_2D);
|
||||||
|
|
||||||
DrawFullScreenEffect<FullScreenShader::SSAOShader>(irr_driver->getSSAORadius(), irr_driver->getSSAOK(), irr_driver->getSSAOSigma());
|
DrawFullScreenEffect<FullScreenShader::SSAOShader>(irr_driver->getSSAORadius(), irr_driver->getSSAOK(), irr_driver->getSSAOSigma());
|
||||||
@ -505,8 +469,8 @@ void PostProcessing::renderFog()
|
|||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
|
|
||||||
setTexture(FullScreenShader::FogShader::getInstance()->TU_tex, irr_driver->getDepthStencilTexture(), GL_NEAREST, GL_NEAREST);
|
FullScreenShader::FogShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ irr_driver->getDepthStencilTexture() });
|
||||||
DrawFullScreenEffect<FullScreenShader::FogShader>(fogmax, startH, endH, start, end, col);
|
DrawFullScreenEffect<FullScreenShader::FogShader>(fogmax, startH, endH, start, end, col);
|
||||||
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
@ -533,10 +497,7 @@ void PostProcessing::renderMotionBlur(unsigned cam, FrameBuffer &in_fbo, FrameBu
|
|||||||
out_fbo.Bind();
|
out_fbo.Bind();
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
setTexture(FullScreenShader::MotionBlurShader::getInstance()->TU_cb, in_fbo.getRTT()[0], GL_LINEAR, GL_LINEAR);
|
FullScreenShader::MotionBlurShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ in_fbo.getRTT()[0], irr_driver->getDepthStencilTexture() });
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
|
||||||
setTexture(FullScreenShader::MotionBlurShader::getInstance()->TU_dtex, irr_driver->getDepthStencilTexture(), GL_NEAREST, GL_NEAREST);
|
|
||||||
DrawFullScreenEffect<FullScreenShader::MotionBlurShader>(
|
DrawFullScreenEffect<FullScreenShader::MotionBlurShader>(
|
||||||
// Todo : use a previousPVMatrix per cam, not global
|
// Todo : use a previousPVMatrix per cam, not global
|
||||||
irr_driver->getPreviousPVMatrix(),
|
irr_driver->getPreviousPVMatrix(),
|
||||||
@ -549,7 +510,7 @@ static void renderGodFade(GLuint tex, const SColor &col)
|
|||||||
{
|
{
|
||||||
glUseProgram(FullScreenShader::GodFadeShader::getInstance()->Program);
|
glUseProgram(FullScreenShader::GodFadeShader::getInstance()->Program);
|
||||||
glBindVertexArray(FullScreenShader::GodFadeShader::getInstance()->vao);
|
glBindVertexArray(FullScreenShader::GodFadeShader::getInstance()->vao);
|
||||||
setTexture(FullScreenShader::GodFadeShader::getInstance()->TU_tex, tex, GL_LINEAR, GL_LINEAR);
|
FullScreenShader::GodFadeShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ tex });
|
||||||
FullScreenShader::GodFadeShader::getInstance()->setUniforms(col);
|
FullScreenShader::GodFadeShader::getInstance()->setUniforms(col);
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
@ -559,7 +520,7 @@ static void renderGodRay(GLuint tex, const core::vector2df &sunpos)
|
|||||||
{
|
{
|
||||||
glUseProgram(FullScreenShader::GodRayShader::getInstance()->Program);
|
glUseProgram(FullScreenShader::GodRayShader::getInstance()->Program);
|
||||||
glBindVertexArray(FullScreenShader::GodRayShader::getInstance()->vao);
|
glBindVertexArray(FullScreenShader::GodRayShader::getInstance()->vao);
|
||||||
setTexture(FullScreenShader::GodRayShader::getInstance()->TU_tex, tex, GL_LINEAR, GL_LINEAR);
|
FullScreenShader::GodRayShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ tex });
|
||||||
FullScreenShader::GodRayShader::getInstance()->setUniforms(sunpos);
|
FullScreenShader::GodRayShader::getInstance()->setUniforms(sunpos);
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
@ -568,15 +529,14 @@ static void renderGodRay(GLuint tex, const core::vector2df &sunpos)
|
|||||||
static void toneMap(FrameBuffer &fbo, GLuint rtt)
|
static void toneMap(FrameBuffer &fbo, GLuint rtt)
|
||||||
{
|
{
|
||||||
fbo.Bind();
|
fbo.Bind();
|
||||||
setTexture(FullScreenShader::ToneMapShader::getInstance()->TU_tex, rtt, GL_NEAREST, GL_NEAREST);
|
FullScreenShader::ToneMapShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ rtt });
|
||||||
DrawFullScreenEffect<FullScreenShader::ToneMapShader>();
|
DrawFullScreenEffect<FullScreenShader::ToneMapShader>();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void renderDoF(FrameBuffer &fbo, GLuint rtt)
|
static void renderDoF(FrameBuffer &fbo, GLuint rtt)
|
||||||
{
|
{
|
||||||
fbo.Bind();
|
fbo.Bind();
|
||||||
setTexture(FullScreenShader::DepthOfFieldShader::getInstance()->TU_tex, rtt, GL_LINEAR, GL_LINEAR);
|
FullScreenShader::DepthOfFieldShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ rtt, irr_driver->getDepthStencilTexture() });
|
||||||
setTexture(FullScreenShader::DepthOfFieldShader::getInstance()->TU_depth, irr_driver->getDepthStencilTexture(), GL_NEAREST, GL_NEAREST);
|
|
||||||
DrawFullScreenEffect<FullScreenShader::DepthOfFieldShader>();
|
DrawFullScreenEffect<FullScreenShader::DepthOfFieldShader>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -592,8 +552,8 @@ void PostProcessing::applyMLAA()
|
|||||||
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
|
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
|
||||||
|
|
||||||
// Pass 1: color edge detection
|
// Pass 1: color edge detection
|
||||||
setTexture(FullScreenShader::MLAAColorEdgeDetectionSHader::getInstance()->TU_colorMapG, irr_driver->getRenderTargetTexture(RTT_MLAA_COLORS), GL_NEAREST, GL_NEAREST);
|
|
||||||
glUseProgram(FullScreenShader::MLAAColorEdgeDetectionSHader::getInstance()->Program);
|
glUseProgram(FullScreenShader::MLAAColorEdgeDetectionSHader::getInstance()->Program);
|
||||||
|
FullScreenShader::MLAAColorEdgeDetectionSHader::getInstance()->SetTextureUnits(std::vector<GLuint>{ irr_driver->getRenderTargetTexture(RTT_MLAA_COLORS) });
|
||||||
FullScreenShader::MLAAColorEdgeDetectionSHader::getInstance()->setUniforms(PIXEL_SIZE);
|
FullScreenShader::MLAAColorEdgeDetectionSHader::getInstance()->setUniforms(PIXEL_SIZE);
|
||||||
|
|
||||||
glBindVertexArray(FullScreenShader::MLAAColorEdgeDetectionSHader::getInstance()->vao);
|
glBindVertexArray(FullScreenShader::MLAAColorEdgeDetectionSHader::getInstance()->vao);
|
||||||
@ -607,8 +567,7 @@ void PostProcessing::applyMLAA()
|
|||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
glUseProgram(FullScreenShader::MLAABlendWeightSHader::getInstance()->Program);
|
glUseProgram(FullScreenShader::MLAABlendWeightSHader::getInstance()->Program);
|
||||||
setTexture(FullScreenShader::MLAABlendWeightSHader::getInstance()->TU_edgesMap, irr_driver->getRenderTargetTexture(RTT_MLAA_TMP), GL_LINEAR, GL_LINEAR);
|
FullScreenShader::MLAABlendWeightSHader::getInstance()->SetTextureUnits(std::vector<GLuint>{ irr_driver->getRenderTargetTexture(RTT_MLAA_TMP), getTextureGLuint(m_areamap) });
|
||||||
setTexture(FullScreenShader::MLAABlendWeightSHader::getInstance()->TU_areaMap, getTextureGLuint(m_areamap), GL_NEAREST, GL_NEAREST);
|
|
||||||
FullScreenShader::MLAABlendWeightSHader::getInstance()->setUniforms(PIXEL_SIZE);
|
FullScreenShader::MLAABlendWeightSHader::getInstance()->setUniforms(PIXEL_SIZE);
|
||||||
|
|
||||||
glBindVertexArray(FullScreenShader::MLAABlendWeightSHader::getInstance()->vao);
|
glBindVertexArray(FullScreenShader::MLAABlendWeightSHader::getInstance()->vao);
|
||||||
@ -621,8 +580,7 @@ void PostProcessing::applyMLAA()
|
|||||||
irr_driver->getFBO(FBO_MLAA_COLORS).Bind();
|
irr_driver->getFBO(FBO_MLAA_COLORS).Bind();
|
||||||
|
|
||||||
glUseProgram(FullScreenShader::MLAAGatherSHader::getInstance()->Program);
|
glUseProgram(FullScreenShader::MLAAGatherSHader::getInstance()->Program);
|
||||||
setTexture(FullScreenShader::MLAAGatherSHader::getInstance()->TU_colorMap, irr_driver->getRenderTargetTexture(RTT_MLAA_TMP), GL_NEAREST, GL_NEAREST);
|
FullScreenShader::MLAAGatherSHader::getInstance()->SetTextureUnits(std::vector<GLuint>{ irr_driver->getRenderTargetTexture(RTT_MLAA_BLEND), irr_driver->getRenderTargetTexture(RTT_MLAA_TMP)});
|
||||||
setTexture(FullScreenShader::MLAAGatherSHader::getInstance()->TU_blendMap, irr_driver->getRenderTargetTexture(RTT_MLAA_BLEND), GL_NEAREST, GL_NEAREST);
|
|
||||||
FullScreenShader::MLAAGatherSHader::getInstance()->setUniforms(PIXEL_SIZE);
|
FullScreenShader::MLAAGatherSHader::getInstance()->setUniforms(PIXEL_SIZE);
|
||||||
|
|
||||||
glBindVertexArray(FullScreenShader::MLAAGatherSHader::getInstance()->vao);
|
glBindVertexArray(FullScreenShader::MLAAGatherSHader::getInstance()->vao);
|
||||||
@ -753,9 +711,8 @@ FrameBuffer *PostProcessing::render(scene::ICameraSceneNode * const camnode, boo
|
|||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFunc(GL_ONE, GL_ONE);
|
glBlendFunc(GL_ONE, GL_ONE);
|
||||||
glBlendEquation(GL_FUNC_ADD);
|
glBlendEquation(GL_FUNC_ADD);
|
||||||
setTexture(FullScreenShader::BloomBlendShader::getInstance()->TU_tex_128, irr_driver->getRenderTargetTexture(RTT_BLOOM_128), GL_LINEAR, GL_LINEAR);
|
FullScreenShader::BloomBlendShader::getInstance()->SetTextureUnits(std::vector<GLuint>
|
||||||
setTexture(FullScreenShader::BloomBlendShader::getInstance()->TU_tex_256, irr_driver->getRenderTargetTexture(RTT_BLOOM_256), GL_LINEAR, GL_LINEAR);
|
{ irr_driver->getRenderTargetTexture(RTT_BLOOM_128), irr_driver->getRenderTargetTexture(RTT_BLOOM_256), irr_driver->getRenderTargetTexture(RTT_BLOOM_512) });
|
||||||
setTexture(FullScreenShader::BloomBlendShader::getInstance()->TU_tex_512, irr_driver->getRenderTargetTexture(RTT_BLOOM_512), GL_LINEAR, GL_LINEAR);
|
|
||||||
DrawFullScreenEffect<FullScreenShader::BloomBlendShader>();
|
DrawFullScreenEffect<FullScreenShader::BloomBlendShader>();
|
||||||
|
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
|
@ -122,13 +122,14 @@ void renderMeshes1stPass(const std::vector<TexUnit> &TexUnits, std::vector<STK::
|
|||||||
glBindVertexArray(getVAO(VertexType));
|
glBindVertexArray(getVAO(VertexType));
|
||||||
for (unsigned i = 0; i < meshes->size(); i++)
|
for (unsigned i = 0; i < meshes->size(); i++)
|
||||||
{
|
{
|
||||||
|
std::vector<GLuint> Textures;
|
||||||
GLMesh &mesh = *(STK::tuple_get<0>(meshes->at(i)));
|
GLMesh &mesh = *(STK::tuple_get<0>(meshes->at(i)));
|
||||||
for (unsigned j = 0; j < TexUnits.size(); j++)
|
for (unsigned j = 0; j < TexUnits.size(); j++)
|
||||||
{
|
{
|
||||||
if (!mesh.textures[j])
|
if (!mesh.textures[j])
|
||||||
mesh.textures[j] = getUnicolorTexture(video::SColor(255, 255, 255, 255));
|
mesh.textures[j] = getUnicolorTexture(video::SColor(255, 255, 255, 255));
|
||||||
compressTexture(mesh.textures[j], TexUnits[j].m_premul_alpha);
|
compressTexture(mesh.textures[j], TexUnits[j].m_premul_alpha);
|
||||||
setTexture(TexUnits[j].m_id, getTextureGLuint(mesh.textures[j]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
Textures.push_back(getTextureGLuint(mesh.textures[TexUnits[j].m_id]));
|
||||||
}
|
}
|
||||||
if (mesh.VAOType != VertexType)
|
if (mesh.VAOType != VertexType)
|
||||||
{
|
{
|
||||||
@ -137,6 +138,7 @@ void renderMeshes1stPass(const std::vector<TexUnit> &TexUnits, std::vector<STK::
|
|||||||
#endif
|
#endif
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
Shader::getInstance()->SetTextureUnits(Textures);
|
||||||
custom_unroll_args<List...>::template exec(Shader::getInstance(), meshes->at(i));
|
custom_unroll_args<List...>::template exec(Shader::getInstance(), meshes->at(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -178,6 +180,7 @@ void renderInstancedMeshes1stPass(const std::vector<TexUnit> &TexUnits, std::vec
|
|||||||
glUseProgram(Shader::getInstance()->Program);
|
glUseProgram(Shader::getInstance()->Program);
|
||||||
for (unsigned i = 0; i < meshes->size(); i++)
|
for (unsigned i = 0; i < meshes->size(); i++)
|
||||||
{
|
{
|
||||||
|
std::vector<GLuint> Textures;
|
||||||
GLMesh &mesh = *(STK::tuple_get<0>(meshes->at(i)));
|
GLMesh &mesh = *(STK::tuple_get<0>(meshes->at(i)));
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (mesh.VAOType != VertexType)
|
if (mesh.VAOType != VertexType)
|
||||||
@ -186,11 +189,12 @@ void renderInstancedMeshes1stPass(const std::vector<TexUnit> &TexUnits, std::vec
|
|||||||
glBindVertexArray(mesh.vao);
|
glBindVertexArray(mesh.vao);
|
||||||
for (unsigned j = 0; j < TexUnits.size(); j++)
|
for (unsigned j = 0; j < TexUnits.size(); j++)
|
||||||
{
|
{
|
||||||
if (!mesh.textures[j])
|
if (!mesh.textures[TexUnits[j].m_id])
|
||||||
mesh.textures[j] = getUnicolorTexture(video::SColor(255, 255, 255, 255));
|
mesh.textures[j] = getUnicolorTexture(video::SColor(255, 255, 255, 255));
|
||||||
compressTexture(mesh.textures[j], TexUnits[j].m_premul_alpha);
|
compressTexture(mesh.textures[TexUnits[j].m_id], TexUnits[j].m_premul_alpha);
|
||||||
setTexture(TexUnits[j].m_id, getTextureGLuint(mesh.textures[j]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
Textures.push_back(getTextureGLuint(mesh.textures[TexUnits[j].m_id]));
|
||||||
}
|
}
|
||||||
|
Shader::getInstance()->SetTextureUnits(Textures);
|
||||||
instanced_custom_unroll_args<List...>::template exec(Shader::getInstance(), meshes->at(i));
|
instanced_custom_unroll_args<List...>::template exec(Shader::getInstance(), meshes->at(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -251,35 +255,35 @@ void IrrDriver::renderSolidFirstPass()
|
|||||||
{
|
{
|
||||||
ScopedGPUTimer Timer(getGPUTimer(Q_SOLID_PASS1));
|
ScopedGPUTimer Timer(getGPUTimer(Q_SOLID_PASS1));
|
||||||
|
|
||||||
std::vector<TexUnit> object_pass1_texunits = TexUnits(TexUnit(MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true) );
|
std::vector<TexUnit> object_pass1_texunits = TexUnits(TexUnit(0, true) );
|
||||||
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_STANDARD, 2, 1>(object_pass1_texunits, ListMatDefault::getInstance());
|
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_STANDARD, 2, 1>(object_pass1_texunits, ListMatDefault::getInstance());
|
||||||
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_STANDARD, 2, 1>(object_pass1_texunits, ListMatSphereMap::getInstance());
|
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_STANDARD, 2, 1>(object_pass1_texunits, ListMatSphereMap::getInstance());
|
||||||
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_2TCOORDS, 2, 1>(object_pass1_texunits, ListMatDetails::getInstance());
|
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_2TCOORDS, 2, 1>(object_pass1_texunits, ListMatDetails::getInstance());
|
||||||
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_2TCOORDS, 2, 1>(object_pass1_texunits, ListMatSplatting::getInstance());
|
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_2TCOORDS, 2, 1>(object_pass1_texunits, ListMatSplatting::getInstance());
|
||||||
renderMeshes1stPass<MeshShader::ObjectRefPass1Shader, video::EVT_STANDARD, 3, 2, 1>(object_pass1_texunits, ListMatUnlit::getInstance());
|
renderMeshes1stPass<MeshShader::ObjectRefPass1Shader, video::EVT_STANDARD, 3, 2, 1>(object_pass1_texunits, ListMatUnlit::getInstance());
|
||||||
renderMeshes1stPass<MeshShader::ObjectRefPass1Shader, video::EVT_STANDARD, 3, 2, 1>(TexUnits(TexUnit(MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex, true)), ListMatAlphaRef::getInstance());
|
renderMeshes1stPass<MeshShader::ObjectRefPass1Shader, video::EVT_STANDARD, 3, 2, 1>(TexUnits(TexUnit(0, true)), ListMatAlphaRef::getInstance());
|
||||||
renderMeshes1stPass<MeshShader::GrassPass1Shader, video::EVT_STANDARD, 3, 2, 1>(TexUnits(TexUnit(MeshShader::GrassPass1Shader::getInstance()->TU_tex, true)), ListMatGrass::getInstance());
|
renderMeshes1stPass<MeshShader::GrassPass1Shader, video::EVT_STANDARD, 3, 2, 1>(TexUnits(TexUnit(0, true)), ListMatGrass::getInstance());
|
||||||
renderMeshes1stPass<MeshShader::NormalMapShader, video::EVT_TANGENTS, 2, 1>(TexUnits(
|
renderMeshes1stPass<MeshShader::NormalMapShader, video::EVT_TANGENTS, 2, 1>(TexUnits(
|
||||||
TexUnit(MeshShader::NormalMapShader::getInstance()->TU_glossy, true),
|
TexUnit(1, false),
|
||||||
TexUnit(MeshShader::NormalMapShader::getInstance()->TU_normalmap, false)
|
TexUnit(0, true)
|
||||||
), ListMatNormalMap::getInstance());
|
), ListMatNormalMap::getInstance());
|
||||||
|
|
||||||
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_STANDARD, 2, 1>(object_pass1_texunits, AnimatedListMatDefault::getInstance());
|
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_STANDARD, 2, 1>(TexUnits(TexUnit(0, true)), AnimatedListMatDefault::getInstance());
|
||||||
renderMeshes1stPass<MeshShader::ObjectRefPass1Shader, video::EVT_STANDARD, 3, 2, 1>(TexUnits(TexUnit(MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex, true)), AnimatedListMatAlphaRef::getInstance());
|
renderMeshes1stPass<MeshShader::ObjectRefPass1Shader, video::EVT_STANDARD, 3, 2, 1>(TexUnits(TexUnit(0, true)), AnimatedListMatAlphaRef::getInstance());
|
||||||
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_2TCOORDS, 2, 1>(object_pass1_texunits, AnimatedListMatDetails::getInstance());
|
renderMeshes1stPass<MeshShader::ObjectPass1Shader, video::EVT_2TCOORDS, 2, 1>(TexUnits(TexUnit(0, true)), AnimatedListMatDetails::getInstance());
|
||||||
renderMeshes1stPass<MeshShader::ObjectRefPass1Shader, video::EVT_STANDARD, 3, 2, 1>(object_pass1_texunits, AnimatedListMatUnlit::getInstance());
|
renderMeshes1stPass<MeshShader::ObjectRefPass1Shader, video::EVT_STANDARD, 3, 2, 1>(TexUnits(TexUnit(0, true)), AnimatedListMatUnlit::getInstance());
|
||||||
|
|
||||||
renderInstancedMeshes1stPass<MeshShader::InstancedObjectPass1Shader, video::EVT_STANDARD>(
|
renderInstancedMeshes1stPass<MeshShader::InstancedObjectPass1Shader, video::EVT_STANDARD>(
|
||||||
TexUnits(TexUnit(MeshShader::InstancedObjectPass1Shader::getInstance()->TU_tex, true)),
|
TexUnits(TexUnit(0, true)),
|
||||||
ListInstancedMatDefault::getInstance());
|
ListInstancedMatDefault::getInstance());
|
||||||
renderInstancedMeshes1stPass<MeshShader::InstancedObjectRefPass1Shader, video::EVT_STANDARD>(
|
renderInstancedMeshes1stPass<MeshShader::InstancedObjectRefPass1Shader, video::EVT_STANDARD>(
|
||||||
TexUnits(TexUnit(MeshShader::InstancedObjectRefPass1Shader::getInstance()->TU_tex, true)),
|
TexUnits(TexUnit(0, true)),
|
||||||
ListInstancedMatAlphaRef::getInstance());
|
ListInstancedMatAlphaRef::getInstance());
|
||||||
renderInstancedMeshes1stPass<MeshShader::InstancedGrassPass1Shader, video::EVT_STANDARD, 2>(
|
renderInstancedMeshes1stPass<MeshShader::InstancedGrassPass1Shader, video::EVT_STANDARD, 2>(
|
||||||
TexUnits(TexUnit(MeshShader::InstancedGrassPass1Shader::getInstance()->TU_tex, true)),
|
TexUnits(TexUnit(0, true)),
|
||||||
ListInstancedMatGrass::getInstance());
|
ListInstancedMatGrass::getInstance());
|
||||||
renderInstancedMeshes1stPass<MeshShader::InstancedNormalMapShader, video::EVT_TANGENTS>(
|
renderInstancedMeshes1stPass<MeshShader::InstancedNormalMapShader, video::EVT_TANGENTS>(
|
||||||
TexUnits(TexUnit(MeshShader::InstancedNormalMapShader::getInstance()->TU_glossy, true), TexUnit(MeshShader::InstancedNormalMapShader::getInstance()->TU_normalmap, false)),
|
TexUnits(TexUnit(1, false), TexUnit(0, true)),
|
||||||
ListInstancedMatNormalMap::getInstance());
|
ListInstancedMatNormalMap::getInstance());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -291,13 +295,14 @@ void renderMeshes2ndPass(const std::vector<TexUnit> &TexUnits, std::vector<STK::
|
|||||||
glBindVertexArray(getVAO(VertexType));
|
glBindVertexArray(getVAO(VertexType));
|
||||||
for (unsigned i = 0; i < meshes->size(); i++)
|
for (unsigned i = 0; i < meshes->size(); i++)
|
||||||
{
|
{
|
||||||
|
std::vector<GLuint> Textures;
|
||||||
GLMesh &mesh = *(STK::tuple_get<0>(meshes->at(i)));
|
GLMesh &mesh = *(STK::tuple_get<0>(meshes->at(i)));
|
||||||
for (unsigned j = 0; j < TexUnits.size(); j++)
|
for (unsigned j = 0; j < TexUnits.size(); j++)
|
||||||
{
|
{
|
||||||
if (!mesh.textures[j])
|
if (!mesh.textures[TexUnits[j].m_id])
|
||||||
mesh.textures[j] = getUnicolorTexture(video::SColor(255, 255, 255, 255));
|
mesh.textures[TexUnits[j].m_id] = getUnicolorTexture(video::SColor(255, 255, 255, 255));
|
||||||
compressTexture(mesh.textures[j], TexUnits[j].m_premul_alpha);
|
compressTexture(mesh.textures[TexUnits[j].m_id], TexUnits[j].m_premul_alpha);
|
||||||
setTexture(TexUnits[j].m_id, getTextureGLuint(mesh.textures[j]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
Textures.push_back(getTextureGLuint(mesh.textures[TexUnits[j].m_id]));
|
||||||
if (irr_driver->getLightViz())
|
if (irr_driver->getLightViz())
|
||||||
{
|
{
|
||||||
GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA };
|
GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA };
|
||||||
@ -317,6 +322,7 @@ void renderMeshes2ndPass(const std::vector<TexUnit> &TexUnits, std::vector<STK::
|
|||||||
#endif
|
#endif
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
Shader::getInstance()->SetTextureUnits(Textures);
|
||||||
custom_unroll_args<List...>::template exec(Shader::getInstance(), meshes->at(i));
|
custom_unroll_args<List...>::template exec(Shader::getInstance(), meshes->at(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -329,12 +335,13 @@ void renderInstancedMeshes2ndPass(const std::vector<TexUnit> &TexUnits, std::vec
|
|||||||
{
|
{
|
||||||
GLMesh &mesh = *(STK::tuple_get<0>(meshes->at(i)));
|
GLMesh &mesh = *(STK::tuple_get<0>(meshes->at(i)));
|
||||||
glBindVertexArray(mesh.vao);
|
glBindVertexArray(mesh.vao);
|
||||||
|
std::vector<GLuint> Textures;
|
||||||
for (unsigned j = 0; j < TexUnits.size(); j++)
|
for (unsigned j = 0; j < TexUnits.size(); j++)
|
||||||
{
|
{
|
||||||
if (!mesh.textures[j])
|
if (!mesh.textures[TexUnits[j].m_id])
|
||||||
mesh.textures[j] = getUnicolorTexture(video::SColor(255, 255, 255, 255));
|
mesh.textures[TexUnits[j].m_id] = getUnicolorTexture(video::SColor(255, 255, 255, 255));
|
||||||
compressTexture(mesh.textures[j], TexUnits[j].m_premul_alpha);
|
compressTexture(mesh.textures[TexUnits[j].m_id], TexUnits[j].m_premul_alpha);
|
||||||
setTexture(TexUnits[j].m_id, getTextureGLuint(mesh.textures[j]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
Textures.push_back(getTextureGLuint(mesh.textures[TexUnits[j].m_id]));
|
||||||
if (irr_driver->getLightViz())
|
if (irr_driver->getLightViz())
|
||||||
{
|
{
|
||||||
GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA };
|
GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA };
|
||||||
@ -346,7 +353,7 @@ void renderInstancedMeshes2ndPass(const std::vector<TexUnit> &TexUnits, std::vec
|
|||||||
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);
|
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Shader::getInstance()->SetTextureUnits(Textures);
|
||||||
instanced_custom_unroll_args<List...>::template exec(Shader::getInstance(), meshes->at(i));
|
instanced_custom_unroll_args<List...>::template exec(Shader::getInstance(), meshes->at(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -373,8 +380,11 @@ void IrrDriver::renderSolidSecondPass()
|
|||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glDisable(GL_ALPHA_TEST);
|
glDisable(GL_ALPHA_TEST);
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
|
glBindSampler(0, 0);
|
||||||
setTexture(0, m_rtts->getRenderTarget(RTT_TMP1), GL_NEAREST, GL_NEAREST);
|
setTexture(0, m_rtts->getRenderTarget(RTT_TMP1), GL_NEAREST, GL_NEAREST);
|
||||||
|
glBindSampler(1, 0);
|
||||||
setTexture(1, m_rtts->getRenderTarget(RTT_TMP2), GL_NEAREST, GL_NEAREST);
|
setTexture(1, m_rtts->getRenderTarget(RTT_TMP2), GL_NEAREST, GL_NEAREST);
|
||||||
|
glBindSampler(2, 0);
|
||||||
setTexture(2, m_rtts->getRenderTarget(RTT_HALF1_R), GL_LINEAR, GL_LINEAR);
|
setTexture(2, m_rtts->getRenderTarget(RTT_HALF1_R), GL_LINEAR, GL_LINEAR);
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -383,70 +393,68 @@ void IrrDriver::renderSolidSecondPass()
|
|||||||
m_scene_manager->drawAll(scene::ESNRP_SOLID);
|
m_scene_manager->drawAll(scene::ESNRP_SOLID);
|
||||||
|
|
||||||
renderMeshes2ndPass<MeshShader::ObjectPass2Shader, video::EVT_STANDARD, 3, 1>(TexUnits(
|
renderMeshes2ndPass<MeshShader::ObjectPass2Shader, video::EVT_STANDARD, 3, 1>(TexUnits(
|
||||||
TexUnit(MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true)
|
TexUnit(0, true)
|
||||||
), ListMatDefault::getInstance());
|
), ListMatDefault::getInstance());
|
||||||
renderMeshes2ndPass<MeshShader::ObjectPass2Shader, video::EVT_STANDARD, 3, 1>(TexUnits(
|
renderMeshes2ndPass<MeshShader::ObjectPass2Shader, video::EVT_STANDARD, 3, 1>(TexUnits(
|
||||||
TexUnit(MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true)
|
TexUnit(0, true)
|
||||||
), AnimatedListMatDefault::getInstance());
|
), AnimatedListMatDefault::getInstance());
|
||||||
|
|
||||||
renderMeshes2ndPass<MeshShader::ObjectRefPass2Shader, video::EVT_STANDARD, 3, 1 >(TexUnits(
|
renderMeshes2ndPass<MeshShader::ObjectRefPass2Shader, video::EVT_STANDARD, 3, 1 >(TexUnits(
|
||||||
TexUnit(MeshShader::ObjectRefPass2Shader::getInstance()->TU_Albedo, true)
|
TexUnit(0, true)
|
||||||
), ListMatAlphaRef::getInstance());
|
), ListMatAlphaRef::getInstance());
|
||||||
renderMeshes2ndPass<MeshShader::ObjectRefPass2Shader, video::EVT_STANDARD, 3, 1 >(TexUnits(
|
renderMeshes2ndPass<MeshShader::ObjectRefPass2Shader, video::EVT_STANDARD, 3, 1 >(TexUnits(
|
||||||
TexUnit(MeshShader::ObjectRefPass2Shader::getInstance()->TU_Albedo, true)
|
TexUnit(0, true)
|
||||||
), AnimatedListMatAlphaRef::getInstance());
|
), AnimatedListMatAlphaRef::getInstance());
|
||||||
|
|
||||||
renderMeshes2ndPass<MeshShader::SphereMapShader, video::EVT_STANDARD, 2, 1>(TexUnits(
|
renderMeshes2ndPass<MeshShader::SphereMapShader, video::EVT_STANDARD, 2, 1>(TexUnits(
|
||||||
TexUnit(MeshShader::SphereMapShader::getInstance()->TU_tex, true)
|
TexUnit(0, true)
|
||||||
), ListMatSphereMap::getInstance());
|
), ListMatSphereMap::getInstance());
|
||||||
|
|
||||||
renderMeshes2ndPass<MeshShader::DetailledObjectPass2Shader, video::EVT_2TCOORDS, 1>(TexUnits(
|
renderMeshes2ndPass<MeshShader::DetailledObjectPass2Shader, video::EVT_2TCOORDS, 1>(TexUnits(
|
||||||
TexUnit(MeshShader::DetailledObjectPass2Shader::getInstance()->TU_Albedo, true),
|
TexUnit(0, true),
|
||||||
TexUnit(MeshShader::DetailledObjectPass2Shader::getInstance()->TU_detail, true)
|
TexUnit(1, true)
|
||||||
), ListMatDetails::getInstance());
|
), ListMatDetails::getInstance());
|
||||||
renderMeshes2ndPass<MeshShader::DetailledObjectPass2Shader, video::EVT_2TCOORDS, 1>(TexUnits(
|
renderMeshes2ndPass<MeshShader::DetailledObjectPass2Shader, video::EVT_2TCOORDS, 1>(TexUnits(
|
||||||
TexUnit(MeshShader::DetailledObjectPass2Shader::getInstance()->TU_Albedo, true),
|
TexUnit(0, true),
|
||||||
TexUnit(MeshShader::DetailledObjectPass2Shader::getInstance()->TU_detail, true)
|
TexUnit(1, true)
|
||||||
), AnimatedListMatDetails::getInstance());
|
), AnimatedListMatDetails::getInstance());
|
||||||
|
|
||||||
renderMeshes2ndPass<MeshShader::GrassPass2Shader, video::EVT_STANDARD, 3, 1>(TexUnits(
|
renderMeshes2ndPass<MeshShader::GrassPass2Shader, video::EVT_STANDARD, 3, 1>(TexUnits(
|
||||||
TexUnit(MeshShader::GrassPass2Shader::getInstance()->TU_Albedo, true)
|
TexUnit(0, true)
|
||||||
), ListMatGrass::getInstance());
|
), ListMatGrass::getInstance());
|
||||||
|
|
||||||
renderMeshes2ndPass<MeshShader::ObjectUnlitShader, video::EVT_STANDARD, 3, 1>(TexUnits(
|
renderMeshes2ndPass<MeshShader::ObjectUnlitShader, video::EVT_STANDARD, 3, 1>(TexUnits(
|
||||||
TexUnit(MeshShader::ObjectUnlitShader::getInstance()->TU_tex, true)
|
TexUnit(0, true)
|
||||||
), ListMatUnlit::getInstance());
|
), ListMatUnlit::getInstance());
|
||||||
renderMeshes2ndPass<MeshShader::ObjectUnlitShader, video::EVT_STANDARD, 3, 1>(TexUnits(
|
renderMeshes2ndPass<MeshShader::ObjectUnlitShader, video::EVT_STANDARD, 3, 1>(TexUnits(
|
||||||
TexUnit(MeshShader::ObjectUnlitShader::getInstance()->TU_tex, true)
|
TexUnit(0, true)
|
||||||
), AnimatedListMatUnlit::getInstance());
|
), AnimatedListMatUnlit::getInstance());
|
||||||
|
|
||||||
renderMeshes2ndPass<MeshShader::SplattingShader, video::EVT_2TCOORDS, 1>(TexUnits(
|
renderMeshes2ndPass<MeshShader::SplattingShader, video::EVT_2TCOORDS, 1>(TexUnits(
|
||||||
TexUnit(8, true),
|
TexUnit(1, false),
|
||||||
TexUnit(MeshShader::SplattingShader::getInstance()->TU_tex_layout, false),
|
TexUnit(2, true),
|
||||||
TexUnit(MeshShader::SplattingShader::getInstance()->TU_tex_detail0, true),
|
TexUnit(3, true),
|
||||||
TexUnit(MeshShader::SplattingShader::getInstance()->TU_tex_detail1, true),
|
TexUnit(4, true),
|
||||||
TexUnit(MeshShader::SplattingShader::getInstance()->TU_tex_detail2, true),
|
TexUnit(5, true)
|
||||||
TexUnit(MeshShader::SplattingShader::getInstance()->TU_tex_detail3, true)
|
|
||||||
), ListMatSplatting::getInstance());
|
), ListMatSplatting::getInstance());
|
||||||
|
|
||||||
renderMeshes2ndPass<MeshShader::ObjectPass2Shader, video::EVT_TANGENTS, 3, 1>(TexUnits(
|
renderMeshes2ndPass<MeshShader::ObjectPass2Shader, video::EVT_TANGENTS, 3, 1>(TexUnits(
|
||||||
TexUnit(MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true)
|
TexUnit(0, true)
|
||||||
), ListMatNormalMap::getInstance());
|
), ListMatNormalMap::getInstance());
|
||||||
|
|
||||||
|
|
||||||
renderInstancedMeshes2ndPass<MeshShader::InstancedObjectPass2Shader>(
|
renderInstancedMeshes2ndPass<MeshShader::InstancedObjectPass2Shader>(
|
||||||
TexUnits(TexUnit(MeshShader::InstancedObjectPass2Shader::getInstance()->TU_Albedo, true)),
|
TexUnits(TexUnit(0, true)),
|
||||||
ListInstancedMatDefault::getInstance());
|
ListInstancedMatDefault::getInstance());
|
||||||
renderInstancedMeshes2ndPass<MeshShader::InstancedObjectPass2Shader>(
|
renderInstancedMeshes2ndPass<MeshShader::InstancedObjectPass2Shader>(
|
||||||
TexUnits(TexUnit(MeshShader::InstancedObjectPass2Shader::getInstance()->TU_Albedo, true)),
|
TexUnits(TexUnit(0, true)),
|
||||||
ListInstancedMatNormalMap::getInstance());
|
ListInstancedMatNormalMap::getInstance());
|
||||||
renderInstancedMeshes2ndPass<MeshShader::InstancedObjectRefPass2Shader>(
|
renderInstancedMeshes2ndPass<MeshShader::InstancedObjectRefPass2Shader>(
|
||||||
TexUnits(TexUnit(MeshShader::InstancedObjectRefPass2Shader::getInstance()->TU_Albedo, true)),
|
TexUnits(TexUnit(0, true)),
|
||||||
ListInstancedMatAlphaRef::getInstance());
|
ListInstancedMatAlphaRef::getInstance());
|
||||||
setTexture(MeshShader::InstancedGrassPass2Shader::getInstance()->TU_dtex,
|
setTexture(4, irr_driver->getDepthStencilTexture(), GL_NEAREST, GL_NEAREST);
|
||||||
irr_driver->getDepthStencilTexture(), GL_NEAREST, GL_NEAREST);
|
|
||||||
renderInstancedMeshes2ndPass<MeshShader::InstancedGrassPass2Shader, 3, 2>(
|
renderInstancedMeshes2ndPass<MeshShader::InstancedGrassPass2Shader, 3, 2>(
|
||||||
TexUnits(TexUnit(MeshShader::InstancedGrassPass2Shader::getInstance()->TU_Albedo, true)),
|
TexUnits(TexUnit(0, true)),
|
||||||
ListInstancedMatGrass::getInstance());
|
ListInstancedMatGrass::getInstance());
|
||||||
}
|
}
|
||||||
m_sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
|
m_sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
|
||||||
@ -511,22 +519,22 @@ void IrrDriver::renderTransparent()
|
|||||||
{
|
{
|
||||||
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
renderMeshes2ndPass<MeshShader::TransparentFogShader, video::EVT_STANDARD, 8, 7, 6, 5, 4, 3, 2, 1>(TexUnits(
|
renderMeshes2ndPass<MeshShader::TransparentFogShader, video::EVT_STANDARD, 8, 7, 6, 5, 4, 3, 2, 1>(TexUnits(
|
||||||
TexUnit(MeshShader::TransparentFogShader::getInstance()->TU_tex, true)
|
TexUnit(0, true)
|
||||||
), ListBlendTransparentFog::getInstance());
|
), ListBlendTransparentFog::getInstance());
|
||||||
glBlendFunc(GL_ONE, GL_ONE);
|
glBlendFunc(GL_ONE, GL_ONE);
|
||||||
renderMeshes2ndPass<MeshShader::TransparentFogShader, video::EVT_STANDARD, 8, 7, 6, 5, 4, 3, 2, 1>(TexUnits(
|
renderMeshes2ndPass<MeshShader::TransparentFogShader, video::EVT_STANDARD, 8, 7, 6, 5, 4, 3, 2, 1>(TexUnits(
|
||||||
TexUnit(MeshShader::TransparentFogShader::getInstance()->TU_tex, true)
|
TexUnit(0, true)
|
||||||
), ListAdditiveTransparentFog::getInstance());
|
), ListAdditiveTransparentFog::getInstance());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
renderMeshes2ndPass<MeshShader::TransparentShader, video::EVT_STANDARD, 2, 1>(TexUnits(
|
renderMeshes2ndPass<MeshShader::TransparentShader, video::EVT_STANDARD, 2, 1>(TexUnits(
|
||||||
TexUnit(MeshShader::TransparentShader::getInstance()->TU_tex, true)
|
TexUnit(0, true)
|
||||||
), ListBlendTransparent::getInstance());
|
), ListBlendTransparent::getInstance());
|
||||||
glBlendFunc(GL_ONE, GL_ONE);
|
glBlendFunc(GL_ONE, GL_ONE);
|
||||||
renderMeshes2ndPass<MeshShader::TransparentShader, video::EVT_STANDARD, 2, 1>(TexUnits(
|
renderMeshes2ndPass<MeshShader::TransparentShader, video::EVT_STANDARD, 2, 1>(TexUnits(
|
||||||
TexUnit(MeshShader::TransparentShader::getInstance()->TU_tex, true)
|
TexUnit(0, true)
|
||||||
), ListAdditiveTransparent::getInstance());
|
), ListAdditiveTransparent::getInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -590,10 +598,8 @@ void IrrDriver::renderTransparent()
|
|||||||
GLenum itype = mesh.IndexType;
|
GLenum itype = mesh.IndexType;
|
||||||
size_t count = mesh.IndexCount;
|
size_t count = mesh.IndexCount;
|
||||||
// Render the effect
|
// Render the effect
|
||||||
setTexture(MeshShader::DisplaceShader::getInstance()->TU_displacement_tex, getTextureGLuint(displaceTex), GL_LINEAR, GL_LINEAR, true);
|
MeshShader::DisplaceShader::getInstance()->SetTextureUnits(
|
||||||
setTexture(MeshShader::DisplaceShader::getInstance()->TU_mask_tex, irr_driver->getRenderTargetTexture(RTT_TMP1), GL_LINEAR, GL_LINEAR, true);
|
{ getTextureGLuint(displaceTex), irr_driver->getRenderTargetTexture(RTT_COLOR), irr_driver->getRenderTargetTexture(RTT_TMP1), getTextureGLuint(mesh.textures[0]) });
|
||||||
setTexture(MeshShader::DisplaceShader::getInstance()->TU_color_tex, irr_driver->getRenderTargetTexture(RTT_COLOR), GL_LINEAR, GL_LINEAR, true);
|
|
||||||
setTexture(MeshShader::DisplaceShader::getInstance()->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR, true);
|
|
||||||
glUseProgram(MeshShader::DisplaceShader::getInstance()->Program);
|
glUseProgram(MeshShader::DisplaceShader::getInstance()->Program);
|
||||||
MeshShader::DisplaceShader::getInstance()->setUniforms(AbsoluteTransformation,
|
MeshShader::DisplaceShader::getInstance()->setUniforms(AbsoluteTransformation,
|
||||||
core::vector2df(cb->getDirX(), cb->getDirY()),
|
core::vector2df(cb->getDirX(), cb->getDirY()),
|
||||||
@ -651,13 +657,14 @@ void renderShadow(const std::vector<GLuint> TextureUnits, const std::vector<STK:
|
|||||||
glBindVertexArray(getVAO(VertexType));
|
glBindVertexArray(getVAO(VertexType));
|
||||||
for (unsigned i = 0; i < t->size(); i++)
|
for (unsigned i = 0; i < t->size(); i++)
|
||||||
{
|
{
|
||||||
|
std::vector<GLuint> Textures;
|
||||||
const GLMesh *mesh = STK::tuple_get<0>(t->at(i));
|
const GLMesh *mesh = STK::tuple_get<0>(t->at(i));
|
||||||
for (unsigned j = 0; j < TextureUnits.size(); j++)
|
for (unsigned j = 0; j < TextureUnits.size(); j++)
|
||||||
{
|
{
|
||||||
compressTexture(mesh->textures[j], true);
|
compressTexture(mesh->textures[TextureUnits[j]], true);
|
||||||
setTexture(TextureUnits[j], getTextureGLuint(mesh->textures[j]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
Textures.push_back(getTextureGLuint(mesh->textures[TextureUnits[j]]));
|
||||||
}
|
}
|
||||||
|
T::getInstance()->SetTextureUnits(Textures);
|
||||||
shadow_custom_unroll_args<List...>::template exec<T>(T::getInstance(), t->at(i));
|
shadow_custom_unroll_args<List...>::template exec<T>(T::getInstance(), t->at(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -699,14 +706,15 @@ void renderInstancedShadow(const std::vector<GLuint> TextureUnits, const std::ve
|
|||||||
glUseProgram(T::getInstance()->Program);
|
glUseProgram(T::getInstance()->Program);
|
||||||
for (unsigned i = 0; i < t->size(); i++)
|
for (unsigned i = 0; i < t->size(); i++)
|
||||||
{
|
{
|
||||||
|
std::vector<GLuint> Textures;
|
||||||
const GLMesh *mesh = STK::tuple_get<0>(t->at(i));
|
const GLMesh *mesh = STK::tuple_get<0>(t->at(i));
|
||||||
glBindVertexArray(mesh->vao_shadow_pass);
|
glBindVertexArray(mesh->vao_shadow_pass);
|
||||||
for (unsigned j = 0; j < TextureUnits.size(); j++)
|
for (unsigned j = 0; j < TextureUnits.size(); j++)
|
||||||
{
|
{
|
||||||
compressTexture(mesh->textures[j], true);
|
compressTexture(mesh->textures[TextureUnits[j]], true);
|
||||||
setTexture(TextureUnits[j], getTextureGLuint(mesh->textures[j]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
Textures.push_back(getTextureGLuint(mesh->textures[TextureUnits[j]]));
|
||||||
}
|
}
|
||||||
|
T::getInstance()->SetTextureUnits(Textures);
|
||||||
instanced_shadow_custom_unroll_args<List...>::template exec<T>(T::getInstance(), t->at(i));
|
instanced_shadow_custom_unroll_args<List...>::template exec<T>(T::getInstance(), t->at(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -749,18 +757,18 @@ void IrrDriver::renderShadows()
|
|||||||
renderShadow<MeshShader::ShadowShader, EVT_2TCOORDS, 1>(noTexUnits, ListMatDetails::getInstance());
|
renderShadow<MeshShader::ShadowShader, EVT_2TCOORDS, 1>(noTexUnits, ListMatDetails::getInstance());
|
||||||
renderShadow<MeshShader::ShadowShader, EVT_2TCOORDS, 1>(noTexUnits, ListMatSplatting::getInstance());
|
renderShadow<MeshShader::ShadowShader, EVT_2TCOORDS, 1>(noTexUnits, ListMatSplatting::getInstance());
|
||||||
renderShadow<MeshShader::ShadowShader, EVT_TANGENTS, 1>(noTexUnits, ListMatNormalMap::getInstance());
|
renderShadow<MeshShader::ShadowShader, EVT_TANGENTS, 1>(noTexUnits, ListMatNormalMap::getInstance());
|
||||||
renderShadow<MeshShader::RefShadowShader, EVT_STANDARD, 1>(std::vector<GLuint>{ MeshShader::RefShadowShader::getInstance()->TU_tex }, ListMatAlphaRef::getInstance());
|
renderShadow<MeshShader::RefShadowShader, EVT_STANDARD, 1>(std::vector<GLuint>{ 0 }, ListMatAlphaRef::getInstance());
|
||||||
renderShadow<MeshShader::RefShadowShader, EVT_STANDARD, 1>(std::vector<GLuint>{ MeshShader::RefShadowShader::getInstance()->TU_tex }, ListMatUnlit::getInstance());
|
renderShadow<MeshShader::RefShadowShader, EVT_STANDARD, 1>(std::vector<GLuint>{ 0 }, ListMatUnlit::getInstance());
|
||||||
renderShadow<MeshShader::GrassShadowShader, EVT_STANDARD, 3, 1>(std::vector<GLuint>{ MeshShader::GrassShadowShader::getInstance()->TU_tex }, ListMatGrass::getInstance());
|
renderShadow<MeshShader::GrassShadowShader, EVT_STANDARD, 3, 1>(std::vector<GLuint>{ 0 }, ListMatGrass::getInstance());
|
||||||
|
|
||||||
renderShadow<MeshShader::ShadowShader, EVT_STANDARD, 1>(noTexUnits, AnimatedListMatDefault::getInstance());
|
renderShadow<MeshShader::ShadowShader, EVT_STANDARD, 1>(noTexUnits, AnimatedListMatDefault::getInstance());
|
||||||
renderShadow<MeshShader::RefShadowShader, EVT_STANDARD, 1>(std::vector<GLuint>{ MeshShader::RefShadowShader::getInstance()->TU_tex }, AnimatedListMatAlphaRef::getInstance());
|
renderShadow<MeshShader::RefShadowShader, EVT_STANDARD, 1>(std::vector<GLuint>{ 0 }, AnimatedListMatAlphaRef::getInstance());
|
||||||
renderShadow<MeshShader::RefShadowShader, EVT_STANDARD, 1>(std::vector<GLuint>{ MeshShader::RefShadowShader::getInstance()->TU_tex }, AnimatedListMatUnlit::getInstance());
|
renderShadow<MeshShader::RefShadowShader, EVT_STANDARD, 1>(std::vector<GLuint>{ 0 }, AnimatedListMatUnlit::getInstance());
|
||||||
renderShadow<MeshShader::ShadowShader, EVT_2TCOORDS, 1>(noTexUnits, AnimatedListMatDetails::getInstance());
|
renderShadow<MeshShader::ShadowShader, EVT_2TCOORDS, 1>(noTexUnits, AnimatedListMatDetails::getInstance());
|
||||||
|
|
||||||
renderInstancedShadow<MeshShader::InstancedShadowShader>(noTexUnits, ListInstancedMatDefault::getInstance());
|
renderInstancedShadow<MeshShader::InstancedShadowShader>(noTexUnits, ListInstancedMatDefault::getInstance());
|
||||||
renderInstancedShadow<MeshShader::InstancedRefShadowShader>(std::vector<GLuint>{ MeshShader::InstancedRefShadowShader::getInstance()->TU_tex }, ListInstancedMatAlphaRef::getInstance());
|
renderInstancedShadow<MeshShader::InstancedRefShadowShader>(std::vector<GLuint>{ 0 }, ListInstancedMatAlphaRef::getInstance());
|
||||||
renderInstancedShadow<MeshShader::InstancedGrassShadowShader, 2>(std::vector<GLuint>{ MeshShader::InstancedGrassShadowShader::getInstance()->TU_tex }, ListInstancedMatGrass::getInstance());
|
renderInstancedShadow<MeshShader::InstancedGrassShadowShader, 2>(std::vector<GLuint>{ 0 }, ListInstancedMatGrass::getInstance());
|
||||||
renderInstancedShadow<MeshShader::InstancedShadowShader>(noTexUnits, ListInstancedMatNormalMap::getInstance());
|
renderInstancedShadow<MeshShader::InstancedShadowShader>(noTexUnits, ListInstancedMatNormalMap::getInstance());
|
||||||
|
|
||||||
glDisable(GL_POLYGON_OFFSET_FILL);
|
glDisable(GL_POLYGON_OFFSET_FILL);
|
||||||
@ -798,14 +806,16 @@ void drawRSM(const core::matrix4 & rsm_matrix, const std::vector<GLuint> &Textur
|
|||||||
glBindVertexArray(getVAO(VertexType));
|
glBindVertexArray(getVAO(VertexType));
|
||||||
for (unsigned i = 0; i < t->size(); i++)
|
for (unsigned i = 0; i < t->size(); i++)
|
||||||
{
|
{
|
||||||
|
std::vector<GLuint> Textures;
|
||||||
GLMesh *mesh = STK::tuple_get<0>(t->at(i));
|
GLMesh *mesh = STK::tuple_get<0>(t->at(i));
|
||||||
for (unsigned j = 0; j < TextureUnits.size(); j++)
|
for (unsigned j = 0; j < TextureUnits.size(); j++)
|
||||||
{
|
{
|
||||||
if (!mesh->textures[j])
|
if (!mesh->textures[TextureUnits[j]])
|
||||||
mesh->textures[j] = getUnicolorTexture(video::SColor(255, 255, 255, 255));
|
mesh->textures[TextureUnits[j]] = getUnicolorTexture(video::SColor(255, 255, 255, 255));
|
||||||
compressTexture(mesh->textures[j], true);
|
compressTexture(mesh->textures[TextureUnits[j]], true);
|
||||||
setTexture(TextureUnits[j], getTextureGLuint(mesh->textures[j]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
Textures.push_back(getTextureGLuint(mesh->textures[TextureUnits[j]]));
|
||||||
}
|
}
|
||||||
|
T::getInstance()->SetTextureUnits(Textures);
|
||||||
rsm_custom_unroll_args<Selector...>::template exec<T>(rsm_matrix, t->at(i));
|
rsm_custom_unroll_args<Selector...>::template exec<T>(rsm_matrix, t->at(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -815,18 +825,10 @@ void IrrDriver::renderRSM()
|
|||||||
m_rtts->getRSM().Bind();
|
m_rtts->getRSM().Bind();
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
drawRSM<MeshShader::RSMShader, EVT_STANDARD, 3, 1>(rsm_matrix, std::vector<GLuint>{ MeshShader::RSMShader::getInstance()->TU_tex }, ListMatDefault::getInstance());
|
drawRSM<MeshShader::RSMShader, EVT_STANDARD, 3, 1>(rsm_matrix, std::vector<GLuint>{ 0 }, ListMatDefault::getInstance());
|
||||||
drawRSM<MeshShader::RSMShader, EVT_STANDARD, 3, 1>(rsm_matrix, std::vector<GLuint>{ MeshShader::RSMShader::getInstance()->TU_tex }, ListMatAlphaRef::getInstance());
|
drawRSM<MeshShader::RSMShader, EVT_STANDARD, 3, 1>(rsm_matrix, std::vector<GLuint>{ 0 }, ListMatAlphaRef::getInstance());
|
||||||
drawRSM<MeshShader::RSMShader, EVT_TANGENTS, 3, 1>(rsm_matrix, std::vector<GLuint>{ MeshShader::RSMShader::getInstance()->TU_tex }, ListMatNormalMap::getInstance());
|
drawRSM<MeshShader::RSMShader, EVT_TANGENTS, 3, 1>(rsm_matrix, std::vector<GLuint>{ 0 }, ListMatNormalMap::getInstance());
|
||||||
drawRSM<MeshShader::RSMShader, EVT_STANDARD, 3, 1>(rsm_matrix, std::vector<GLuint>{ MeshShader::RSMShader::getInstance()->TU_tex }, ListMatUnlit::getInstance());
|
drawRSM<MeshShader::RSMShader, EVT_STANDARD, 3, 1>(rsm_matrix, std::vector<GLuint>{ 0 }, ListMatUnlit::getInstance());
|
||||||
drawRSM<MeshShader::RSMShader, EVT_2TCOORDS, 3, 1>(rsm_matrix, std::vector<GLuint>{ MeshShader::RSMShader::getInstance()->TU_tex }, ListMatDetails::getInstance());
|
drawRSM<MeshShader::RSMShader, EVT_2TCOORDS, 3, 1>(rsm_matrix, std::vector<GLuint>{ 0 }, ListMatDetails::getInstance());
|
||||||
drawRSM<MeshShader::SplattingRSMShader, EVT_2TCOORDS, 1>(rsm_matrix,
|
drawRSM<MeshShader::SplattingRSMShader, EVT_2TCOORDS, 1>(rsm_matrix, std::vector<GLuint>{ 1, 2, 3, 4, 5}, ListMatSplatting::getInstance());
|
||||||
std::vector<GLuint>{
|
|
||||||
8,
|
|
||||||
MeshShader::SplattingRSMShader::getInstance()->TU_layout,
|
|
||||||
MeshShader::SplattingRSMShader::getInstance()->TU_detail0,
|
|
||||||
MeshShader::SplattingRSMShader::getInstance()->TU_detail1,
|
|
||||||
MeshShader::SplattingRSMShader::getInstance()->TU_detail2,
|
|
||||||
MeshShader::SplattingRSMShader::getInstance()->TU_detail3},
|
|
||||||
ListMatSplatting::getInstance());
|
|
||||||
}
|
}
|
||||||
|
@ -155,9 +155,7 @@ void IrrDriver::renderLights(unsigned pointlightcount)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
glUseProgram(FullScreenShader::RadianceHintsConstructionShader::getInstance()->Program);
|
glUseProgram(FullScreenShader::RadianceHintsConstructionShader::getInstance()->Program);
|
||||||
setTexture(FullScreenShader::RadianceHintsConstructionShader::getInstance()->TU_ctex, m_rtts->getRSM().getRTT()[0], GL_LINEAR, GL_LINEAR);
|
FullScreenShader::RadianceHintsConstructionShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ m_rtts->getRSM().getRTT()[0], m_rtts->getRSM().getRTT()[1], m_rtts->getRSM().getDepthTexture() });
|
||||||
setTexture(FullScreenShader::RadianceHintsConstructionShader::getInstance()->TU_ntex, m_rtts->getRSM().getRTT()[1], GL_LINEAR, GL_LINEAR);
|
|
||||||
setTexture(FullScreenShader::RadianceHintsConstructionShader::getInstance()->TU_dtex, m_rtts->getRSM().getDepthTexture(), GL_LINEAR, GL_LINEAR);
|
|
||||||
FullScreenShader::RadianceHintsConstructionShader::getInstance()->setUniforms(rsm_matrix, rh_matrix, rh_extend);
|
FullScreenShader::RadianceHintsConstructionShader::getInstance()->setUniforms(rsm_matrix, rh_matrix, rh_extend);
|
||||||
glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, 32);
|
glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, 32);
|
||||||
}
|
}
|
||||||
|
@ -595,6 +595,171 @@ void glUniform1iWrapper(GLuint a, int b)
|
|||||||
glUniform1i(a, b);
|
glUniform1i(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setTextureSampler(GLenum tp, GLuint texunit, GLuint tid, GLuint sid)
|
||||||
|
{
|
||||||
|
glActiveTexture(GL_TEXTURE0 + texunit);
|
||||||
|
glBindTexture(tp, tid);
|
||||||
|
glBindSampler(texunit, sid);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GLuint createNearestSampler()
|
||||||
|
{
|
||||||
|
unsigned id;
|
||||||
|
glGenSamplers(1, &id);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
glSamplerParameterf(id, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BindTextureNearest(GLuint TU, GLuint tex)
|
||||||
|
{
|
||||||
|
glActiveTexture(GL_TEXTURE0 + TU);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, tex);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.);
|
||||||
|
}
|
||||||
|
|
||||||
|
GLuint createBilinearSampler()
|
||||||
|
{
|
||||||
|
unsigned id;
|
||||||
|
glGenSamplers(1, &id);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
glSamplerParameterf(id, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BindTextureBilinear(GLuint TU, GLuint tex)
|
||||||
|
{
|
||||||
|
glActiveTexture(GL_TEXTURE0 + TU);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, tex);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.);
|
||||||
|
}
|
||||||
|
|
||||||
|
GLuint createBilinearClampedSampler()
|
||||||
|
{
|
||||||
|
unsigned id;
|
||||||
|
glGenSamplers(1, &id);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
|
glSamplerParameterf(id, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BindTextureBilinearClamped(GLuint TU, GLuint tex)
|
||||||
|
{
|
||||||
|
glActiveTexture(GL_TEXTURE0 + TU);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, tex);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
|
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.);
|
||||||
|
}
|
||||||
|
|
||||||
|
GLuint createSemiTrilinearSampler()
|
||||||
|
{
|
||||||
|
unsigned id;
|
||||||
|
glGenSamplers(1, &id);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
|
glSamplerParameterf(id, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BindTextureSemiTrilinear(GLuint TU, GLuint tex)
|
||||||
|
{
|
||||||
|
glActiveTexture(GL_TEXTURE0 + TU);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, tex);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.);
|
||||||
|
}
|
||||||
|
|
||||||
|
GLuint createTrilinearSampler()
|
||||||
|
{
|
||||||
|
unsigned id;
|
||||||
|
glGenSamplers(1, &id);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
|
||||||
|
int aniso = UserConfigParams::m_anisotropic;
|
||||||
|
if (aniso == 0) aniso = 1;
|
||||||
|
glSamplerParameterf(id, GL_TEXTURE_MAX_ANISOTROPY_EXT, (float)aniso);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BindTextureTrilinearAnisotropic(GLuint TU, GLuint tex)
|
||||||
|
{
|
||||||
|
glActiveTexture(GL_TEXTURE0 + TU);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, tex);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
|
||||||
|
int aniso = UserConfigParams::m_anisotropic;
|
||||||
|
if (aniso == 0) aniso = 1;
|
||||||
|
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, (float)aniso);
|
||||||
|
}
|
||||||
|
|
||||||
|
GLuint createShadowSampler()
|
||||||
|
{
|
||||||
|
unsigned id;
|
||||||
|
glGenSamplers(1, &id);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glSamplerParameteri(id, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
glSamplerParameterf(id, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
|
||||||
|
glSamplerParameterf(id, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BindTextureShadow(GLuint TU, GLuint tex)
|
||||||
|
{
|
||||||
|
glActiveTexture(GL_TEXTURE0 + TU);
|
||||||
|
glBindTexture(GL_TEXTURE_2D_ARRAY, tex);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
glTexParameterf(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
|
||||||
|
glTexParameterf(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BindTextureVolume(GLuint TU, GLuint tex)
|
||||||
|
{
|
||||||
|
glActiveTexture(GL_TEXTURE0 + TU);
|
||||||
|
glBindTexture(GL_TEXTURE_3D, tex);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.);
|
||||||
|
}
|
||||||
|
|
||||||
bool needsUBO()
|
bool needsUBO()
|
||||||
{
|
{
|
||||||
return irr_driver->needUBOWorkaround();
|
return irr_driver->needUBOWorkaround();
|
||||||
@ -619,8 +784,7 @@ namespace MeshShader
|
|||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
|
|
||||||
TU_tex = 0;
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectRefPass1Shader::ObjectRefPass1Shader()
|
ObjectRefPass1Shader::ObjectRefPass1Shader()
|
||||||
@ -634,8 +798,7 @@ namespace MeshShader
|
|||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
|
|
||||||
TU_tex = 0;
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GrassPass1Shader::GrassPass1Shader()
|
GrassPass1Shader::GrassPass1Shader()
|
||||||
@ -645,8 +808,8 @@ namespace MeshShader
|
|||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(),
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str());
|
||||||
AssignUniforms("ModelMatrix", "InverseModelMatrix", "windDir");
|
AssignUniforms("ModelMatrix", "InverseModelMatrix", "windDir");
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
}
|
}
|
||||||
|
|
||||||
NormalMapShader::NormalMapShader()
|
NormalMapShader::NormalMapShader()
|
||||||
@ -660,9 +823,7 @@ namespace MeshShader
|
|||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
|
|
||||||
TU_normalmap = 1;
|
AssignSamplerNames(Program, 1, "normalMap", 0, "DiffuseForAlpha");
|
||||||
TU_glossy = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_normalmap, "normalMap"), TexUnit(TU_glossy, "DiffuseForAlpha"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
InstancedObjectPass1Shader::InstancedObjectPass1Shader()
|
InstancedObjectPass1Shader::InstancedObjectPass1Shader()
|
||||||
@ -672,9 +833,9 @@ namespace MeshShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_object_pass.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_object_pass.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(),
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass1.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass1.frag").c_str());
|
||||||
TU_tex = 0;
|
|
||||||
AssignUniforms();
|
AssignUniforms();
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
@ -687,9 +848,9 @@ namespace MeshShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_object_pass.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_object_pass.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(),
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str());
|
||||||
TU_tex = 0;
|
|
||||||
AssignUniforms();
|
AssignUniforms();
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
@ -703,8 +864,8 @@ namespace MeshShader
|
|||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(),
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str());
|
||||||
AssignUniforms("windDir");
|
AssignUniforms("windDir");
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
@ -722,9 +883,7 @@ namespace MeshShader
|
|||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
|
|
||||||
TU_normalmap = 1;
|
AssignSamplerNames(Program, 0, "normalMap", 1, "DiffuseForAlpha");
|
||||||
TU_glossy = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_normalmap, "normalMap"), TexUnit(TU_glossy, "DiffuseForAlpha"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Solid Lit pass shaders
|
// Solid Lit pass shaders
|
||||||
@ -739,14 +898,11 @@ namespace MeshShader
|
|||||||
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;
|
|
||||||
|
|
||||||
AssignTextureUnit(Program,
|
AssignTextureUnit(Program,
|
||||||
TexUnit(0, "DiffuseMap"),
|
TexUnit(0, "DiffuseMap"),
|
||||||
TexUnit(1, "SpecularMap"),
|
TexUnit(1, "SpecularMap"),
|
||||||
TexUnit(2, "SSAO"),
|
TexUnit(2, "SSAO"));
|
||||||
TexUnit(TU_Albedo, "Albedo")
|
AssignSamplerNames(Program, 3, "Albedo");
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
InstancedObjectPass2Shader::InstancedObjectPass2Shader()
|
InstancedObjectPass2Shader::InstancedObjectPass2Shader()
|
||||||
@ -757,14 +913,13 @@ namespace MeshShader
|
|||||||
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/object_pass2.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass2.frag").c_str());
|
||||||
AssignUniforms();
|
AssignUniforms();
|
||||||
TU_Albedo = 3;
|
|
||||||
|
|
||||||
AssignTextureUnit(Program,
|
AssignTextureUnit(Program,
|
||||||
TexUnit(0, "DiffuseMap"),
|
TexUnit(0, "DiffuseMap"),
|
||||||
TexUnit(1, "SpecularMap"),
|
TexUnit(1, "SpecularMap"),
|
||||||
TexUnit(2, "SSAO"),
|
TexUnit(2, "SSAO"));
|
||||||
TexUnit(TU_Albedo, "Albedo")
|
|
||||||
);
|
AssignSamplerNames(Program, 3, "Albedo");
|
||||||
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
@ -779,14 +934,13 @@ namespace MeshShader
|
|||||||
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/objectref_pass2.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass2.frag").c_str());
|
||||||
AssignUniforms();
|
AssignUniforms();
|
||||||
TU_Albedo = 3;
|
|
||||||
|
|
||||||
AssignTextureUnit(Program,
|
AssignTextureUnit(Program,
|
||||||
TexUnit(0, "DiffuseMap"),
|
TexUnit(0, "DiffuseMap"),
|
||||||
TexUnit(1, "SpecularMap"),
|
TexUnit(1, "SpecularMap"),
|
||||||
TexUnit(2, "SSAO"),
|
TexUnit(2, "SSAO"));
|
||||||
TexUnit(TU_Albedo, "Albedo")
|
|
||||||
);
|
AssignSamplerNames(Program, 3, "Albedo");
|
||||||
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
@ -801,16 +955,12 @@ namespace MeshShader
|
|||||||
AssignUniforms("ModelMatrix");
|
AssignUniforms("ModelMatrix");
|
||||||
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_detail = 4;
|
|
||||||
|
|
||||||
AssignTextureUnit(Program,
|
AssignTextureUnit(Program,
|
||||||
TexUnit(0, "DiffuseMap"),
|
TexUnit(0, "DiffuseMap"),
|
||||||
TexUnit(1, "SpecularMap"),
|
TexUnit(1, "SpecularMap"),
|
||||||
TexUnit(2, "SSAO"),
|
TexUnit(2, "SSAO"));
|
||||||
TexUnit(TU_Albedo, "Albedo"),
|
AssignSamplerNames(Program, 3, "Albedo", 4, "Detail");
|
||||||
TexUnit(TU_detail, "Detail")
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectUnlitShader::ObjectUnlitShader()
|
ObjectUnlitShader::ObjectUnlitShader()
|
||||||
@ -823,9 +973,7 @@ namespace MeshShader
|
|||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
|
|
||||||
TU_tex = 3;
|
AssignSamplerNames(Program, 3, "tex");
|
||||||
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectRefPass2Shader::ObjectRefPass2Shader()
|
ObjectRefPass2Shader::ObjectRefPass2Shader()
|
||||||
@ -839,14 +987,11 @@ namespace MeshShader
|
|||||||
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;
|
|
||||||
|
|
||||||
AssignTextureUnit(Program,
|
AssignTextureUnit(Program,
|
||||||
TexUnit(0, "DiffuseMap"),
|
TexUnit(0, "DiffuseMap"),
|
||||||
TexUnit(1, "SpecularMap"),
|
TexUnit(1, "SpecularMap"),
|
||||||
TexUnit(2, "SSAO"),
|
TexUnit(2, "SSAO"));
|
||||||
TexUnit(TU_Albedo, "Albedo")
|
AssignSamplerNames(Program, 3, "Albedo");
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GrassPass2Shader::GrassPass2Shader()
|
GrassPass2Shader::GrassPass2Shader()
|
||||||
@ -856,14 +1001,12 @@ namespace MeshShader
|
|||||||
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/grass_pass2.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/grass_pass2.frag").c_str());
|
||||||
AssignUniforms("ModelMatrix", "windDir");
|
AssignUniforms("ModelMatrix", "windDir");
|
||||||
TU_Albedo = 3;
|
|
||||||
|
|
||||||
AssignTextureUnit(Program,
|
AssignTextureUnit(Program,
|
||||||
TexUnit(0, "DiffuseMap"),
|
TexUnit(0, "DiffuseMap"),
|
||||||
TexUnit(1, "SpecularMap"),
|
TexUnit(1, "SpecularMap"),
|
||||||
TexUnit(2, "SSAO"),
|
TexUnit(2, "SSAO"));
|
||||||
TexUnit(TU_Albedo, "Albedo")
|
AssignSamplerNames(Program, 3, "Albedo");
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
InstancedGrassPass2Shader::InstancedGrassPass2Shader()
|
InstancedGrassPass2Shader::InstancedGrassPass2Shader()
|
||||||
@ -874,16 +1017,16 @@ namespace MeshShader
|
|||||||
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/grass_pass2.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/grass_pass2.frag").c_str());
|
||||||
AssignUniforms("windDir", "SunDir");
|
AssignUniforms("windDir", "SunDir");
|
||||||
TU_Albedo = 3;
|
|
||||||
TU_dtex = 4;
|
|
||||||
|
|
||||||
AssignTextureUnit(Program,
|
AssignTextureUnit(Program,
|
||||||
TexUnit(0, "DiffuseMap"),
|
TexUnit(0, "DiffuseMap"),
|
||||||
TexUnit(1, "SpecularMap"),
|
TexUnit(1, "SpecularMap"),
|
||||||
TexUnit(2, "SSAO"),
|
TexUnit(2, "SSAO"),
|
||||||
TexUnit(TU_Albedo, "Albedo"),
|
TexUnit(4, "dtex")
|
||||||
TexUnit(TU_dtex, "dtex")
|
);
|
||||||
);
|
|
||||||
|
AssignSamplerNames(Program, 3, "Albedo");
|
||||||
|
|
||||||
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
@ -901,14 +1044,11 @@ namespace MeshShader
|
|||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
|
|
||||||
TU_tex = 3;
|
|
||||||
|
|
||||||
AssignTextureUnit(Program,
|
AssignTextureUnit(Program,
|
||||||
TexUnit(0, "DiffuseMap"),
|
TexUnit(0, "DiffuseMap"),
|
||||||
TexUnit(1, "SpecularMap"),
|
TexUnit(1, "SpecularMap"),
|
||||||
TexUnit(2, "SSAO"),
|
TexUnit(2, "SSAO"));
|
||||||
TexUnit(TU_tex, "tex")
|
AssignSamplerNames(Program, 3, "tex");
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SplattingShader::SplattingShader()
|
SplattingShader::SplattingShader()
|
||||||
@ -918,22 +1058,17 @@ namespace MeshShader
|
|||||||
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/splatting.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/splatting.frag").c_str());
|
||||||
AssignUniforms("ModelMatrix");
|
AssignUniforms("ModelMatrix");
|
||||||
TU_tex_layout = 3;
|
|
||||||
TU_tex_detail0 = 4;
|
|
||||||
TU_tex_detail1 = 5;
|
|
||||||
TU_tex_detail2 = 6;
|
|
||||||
TU_tex_detail3 = 7;
|
|
||||||
|
|
||||||
AssignTextureUnit(Program,
|
AssignTextureUnit(Program,
|
||||||
TexUnit(0, "DiffuseMap"),
|
TexUnit(0, "DiffuseMap"),
|
||||||
TexUnit(1, "SpecularMap"),
|
TexUnit(1, "SpecularMap"),
|
||||||
TexUnit(2, "SSAO"),
|
TexUnit(2, "SSAO"));
|
||||||
TexUnit(TU_tex_layout, "tex_layout"),
|
AssignSamplerNames(Program,
|
||||||
TexUnit(TU_tex_detail0, "tex_detail0"),
|
3, "tex_layout",
|
||||||
TexUnit(TU_tex_detail1, "tex_detail1"),
|
4, "tex_detail0",
|
||||||
TexUnit(TU_tex_detail2, "tex_detail2"),
|
5, "tex_detail1",
|
||||||
TexUnit(TU_tex_detail3, "tex_detail3")
|
6, "tex_detail2",
|
||||||
);
|
7, "tex_detail3");
|
||||||
}
|
}
|
||||||
|
|
||||||
GLuint BubbleShader::Program;
|
GLuint BubbleShader::Program;
|
||||||
@ -970,9 +1105,7 @@ namespace MeshShader
|
|||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
|
|
||||||
TU_tex = 0;
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TransparentFogShader::TransparentFogShader()
|
TransparentFogShader::TransparentFogShader()
|
||||||
@ -985,9 +1118,7 @@ namespace MeshShader
|
|||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
|
|
||||||
TU_tex = 0;
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BillboardShader::BillboardShader()
|
BillboardShader::BillboardShader()
|
||||||
@ -1000,9 +1131,7 @@ namespace MeshShader
|
|||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
AssignUniforms("ModelViewMatrix", "ProjectionMatrix", "Position", "Size");
|
AssignUniforms("ModelViewMatrix", "ProjectionMatrix", "Position", "Size");
|
||||||
|
|
||||||
TU_tex = 0;
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ColorizeShader::ColorizeShader()
|
ColorizeShader::ColorizeShader()
|
||||||
@ -1044,9 +1173,9 @@ namespace MeshShader
|
|||||||
Program = LoadProgram(
|
Program = LoadProgram(
|
||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/rsm.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/rsm.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/rsm.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/rsm.frag").c_str());
|
||||||
TU_tex = 0;
|
|
||||||
AssignUniforms("RSMMatrix", "ModelMatrix", "TextureMatrix");
|
AssignUniforms("RSMMatrix", "ModelMatrix", "TextureMatrix");
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
@ -1057,13 +1186,9 @@ namespace MeshShader
|
|||||||
Program = LoadProgram(
|
Program = LoadProgram(
|
||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/rsm.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/rsm.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/splatting_rsm.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/splatting_rsm.frag").c_str());
|
||||||
TU_layout = 0;
|
|
||||||
TU_detail0 = 1;
|
|
||||||
TU_detail1 = 2;
|
|
||||||
TU_detail2 = 3;
|
|
||||||
TU_detail3 = 4;
|
|
||||||
AssignUniforms("RSMMatrix", "ModelMatrix");
|
AssignUniforms("RSMMatrix", "ModelMatrix");
|
||||||
AssignTextureUnit(Program, TexUnit(TU_layout, "tex_layout"), TexUnit(TU_detail0, "tex_detail0"), TexUnit(TU_detail1, "tex_detail1"), TexUnit(TU_detail2, "tex_detail2"), TexUnit(TU_detail3, "tex_detail3"));
|
AssignSamplerNames(Program, 0, "tex_layout", 1, "tex_detail0", 2, "tex_detail1", 3, "tex_detail2", 4, "tex_detail3");
|
||||||
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
@ -1114,9 +1239,8 @@ namespace MeshShader
|
|||||||
AssignUniforms("ModelMatrix");
|
AssignUniforms("ModelMatrix");
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
TU_tex = 0;
|
|
||||||
|
|
||||||
AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") });
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
}
|
}
|
||||||
|
|
||||||
InstancedRefShadowShader::InstancedRefShadowShader()
|
InstancedRefShadowShader::InstancedRefShadowShader()
|
||||||
@ -1139,8 +1263,8 @@ namespace MeshShader
|
|||||||
GL_GEOMETRY_SHADER, file_manager->getAsset("shaders/shadow.geom").c_str(),
|
GL_GEOMETRY_SHADER, file_manager->getAsset("shaders/shadow.geom").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str());
|
||||||
}
|
}
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") });
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
}
|
}
|
||||||
@ -1166,9 +1290,8 @@ namespace MeshShader
|
|||||||
AssignUniforms("ModelMatrix", "windDir");
|
AssignUniforms("ModelMatrix", "windDir");
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
TU_tex = 0;
|
|
||||||
|
|
||||||
AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") });
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
}
|
}
|
||||||
|
|
||||||
InstancedGrassShadowShader::InstancedGrassShadowShader()
|
InstancedGrassShadowShader::InstancedGrassShadowShader()
|
||||||
@ -1191,8 +1314,8 @@ namespace MeshShader
|
|||||||
GL_GEOMETRY_SHADER, file_manager->getAsset("shaders/shadow.geom").c_str(),
|
GL_GEOMETRY_SHADER, file_manager->getAsset("shaders/shadow.geom").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str());
|
||||||
}
|
}
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
|
|
||||||
AssignUniforms("windDir");
|
AssignUniforms("windDir");
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
@ -1217,16 +1340,12 @@ namespace MeshShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/displace.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/displace.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/displace.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/displace.frag").c_str());
|
||||||
AssignUniforms("ModelMatrix", "dir", "dir2");
|
AssignUniforms("ModelMatrix", "dir", "dir2");
|
||||||
TU_displacement_tex = 0;
|
|
||||||
TU_color_tex = 1;
|
AssignSamplerNames(Program,
|
||||||
TU_mask_tex = 2;
|
0, "displacement_tex",
|
||||||
TU_tex = 3;
|
1, "color_tex",
|
||||||
AssignTextureUnit(Program,
|
2, "mask_tex",
|
||||||
TexUnit(TU_displacement_tex, "displacement_tex"),
|
3, "tex");
|
||||||
TexUnit(TU_color_tex, "color_tex"),
|
|
||||||
TexUnit(TU_mask_tex, "mask_tex"),
|
|
||||||
TexUnit(TU_tex, "tex")
|
|
||||||
);
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
}
|
}
|
||||||
@ -1414,9 +1533,7 @@ namespace ParticleShader
|
|||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/particle.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/particle.frag").c_str());
|
||||||
AssignUniforms("color_from", "color_to");
|
AssignUniforms("color_from", "color_to");
|
||||||
|
|
||||||
TU_tex = 0;
|
AssignSamplerNames(Program, 0, "tex", 1, "dtex");
|
||||||
TU_dtex = 1;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"), TexUnit(TU_dtex, "dtex"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FlipParticleRender::FlipParticleRender()
|
FlipParticleRender::FlipParticleRender()
|
||||||
@ -1427,9 +1544,7 @@ namespace ParticleShader
|
|||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/particle.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/particle.frag").c_str());
|
||||||
AssignUniforms();
|
AssignUniforms();
|
||||||
|
|
||||||
TU_tex = 0;
|
AssignSamplerNames(Program, 0, "tex", 1, "dtex");
|
||||||
TU_dtex = 1;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"), TexUnit(TU_dtex, "dtex"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1458,8 +1573,8 @@ namespace FullScreenShader
|
|||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getCIEXYZ.frag").c_str(),
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getCIEXYZ.frag").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/bloom.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/bloom.frag").c_str());
|
||||||
AssignUniforms();
|
AssignUniforms();
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
}
|
}
|
||||||
|
|
||||||
BloomBlendShader::BloomBlendShader()
|
BloomBlendShader::BloomBlendShader()
|
||||||
@ -1468,10 +1583,8 @@ namespace FullScreenShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/bloomblend.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/bloomblend.frag").c_str());
|
||||||
AssignUniforms();
|
AssignUniforms();
|
||||||
TU_tex_128 = 0;
|
|
||||||
TU_tex_256 = 1;
|
AssignSamplerNames(Program, 0, "tex_128", 1, "tex_256", 2, "tex_512");
|
||||||
TU_tex_512 = 2;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex_128, "tex_128"), TexUnit(TU_tex_256, "tex_256"), TexUnit(TU_tex_512, "tex_512"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ToneMapShader::ToneMapShader()
|
ToneMapShader::ToneMapShader()
|
||||||
@ -1482,8 +1595,8 @@ namespace FullScreenShader
|
|||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getCIEXYZ.frag").c_str(),
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getCIEXYZ.frag").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/tonemap.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/tonemap.frag").c_str());
|
||||||
AssignUniforms();
|
AssignUniforms();
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "text"));
|
AssignSamplerNames(Program, 0, "text");
|
||||||
}
|
}
|
||||||
|
|
||||||
DepthOfFieldShader::DepthOfFieldShader()
|
DepthOfFieldShader::DepthOfFieldShader()
|
||||||
@ -1491,10 +1604,9 @@ namespace FullScreenShader
|
|||||||
Program = LoadProgram(
|
Program = LoadProgram(
|
||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/dof.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/dof.frag").c_str());
|
||||||
TU_tex = 0;
|
|
||||||
TU_depth = 1;
|
|
||||||
AssignUniforms();
|
AssignUniforms();
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"), TexUnit(TU_depth, "dtex"));
|
AssignSamplerNames(Program, 0, "tex", 1, "dtex");
|
||||||
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
@ -1554,10 +1666,9 @@ namespace FullScreenShader
|
|||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getSpecular.frag").c_str(),
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getSpecular.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/sunlightshadow.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/sunlightshadow.frag").c_str());
|
||||||
TU_ntex = 0;
|
|
||||||
TU_dtex = 1;
|
// Use 8 to circumvent a catalyst bug when binding sampler
|
||||||
TU_shadowtex = 2;
|
AssignSamplerNames(Program, 0, "ntex", 1, "dtex", 8, "shadowtex");
|
||||||
AssignTextureUnit(Program, TexUnit(TU_ntex, "ntex"), TexUnit(TU_dtex, "dtex"), TexUnit(TU_shadowtex, "shadowtex"));
|
|
||||||
AssignUniforms("direction", "col");
|
AssignUniforms("direction", "col");
|
||||||
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
@ -1583,10 +1694,7 @@ namespace FullScreenShader
|
|||||||
}
|
}
|
||||||
|
|
||||||
AssignUniforms("RSMMatrix", "RHMatrix", "extents");
|
AssignUniforms("RSMMatrix", "RHMatrix", "extents");
|
||||||
TU_ctex = 0;
|
AssignSamplerNames(Program, 0, "ctex", 1, "ntex", 2, "dtex");
|
||||||
TU_ntex = 1;
|
|
||||||
TU_dtex = 2;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_ctex, "ctex"), TexUnit(TU_ntex, "ntex"), TexUnit(TU_dtex, "dtex"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NVWorkaroundRadianceHintsConstructionShader::NVWorkaroundRadianceHintsConstructionShader()
|
NVWorkaroundRadianceHintsConstructionShader::NVWorkaroundRadianceHintsConstructionShader()
|
||||||
@ -1628,12 +1736,8 @@ namespace FullScreenShader
|
|||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/gi.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/gi.frag").c_str());
|
||||||
|
|
||||||
AssignUniforms("RHMatrix", "InvRHMatrix", "extents");
|
AssignUniforms("RHMatrix", "InvRHMatrix", "extents");
|
||||||
TU_ntex = 0;
|
|
||||||
TU_dtex = 1;
|
AssignSamplerNames(Program, 0, "ntex", 1, "dtex", 2, "SHR", 3, "SHG", 4, "SHB");
|
||||||
TU_SHR = 2;
|
|
||||||
TU_SHG = 3;
|
|
||||||
TU_SHB = 4;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_ntex, "ntex"), TexUnit(TU_dtex, "dtex"), TexUnit(TU_SHR, "SHR"), TexUnit(TU_SHG, "SHG"), TexUnit(TU_SHB, "SHB"));
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
}
|
}
|
||||||
@ -1670,8 +1774,8 @@ namespace FullScreenShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/gaussian6h.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/gaussian6h.frag").c_str());
|
||||||
AssignUniforms("pixel");
|
AssignUniforms("pixel");
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
}
|
}
|
||||||
|
|
||||||
Gaussian3HBlurShader::Gaussian3HBlurShader()
|
Gaussian3HBlurShader::Gaussian3HBlurShader()
|
||||||
@ -1680,8 +1784,8 @@ namespace FullScreenShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/gaussian3h.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/gaussian3h.frag").c_str());
|
||||||
AssignUniforms("pixel");
|
AssignUniforms("pixel");
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
}
|
}
|
||||||
|
|
||||||
Gaussian17TapVShader::Gaussian17TapVShader()
|
Gaussian17TapVShader::Gaussian17TapVShader()
|
||||||
@ -1715,8 +1819,8 @@ namespace FullScreenShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/gaussian6v.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/gaussian6v.frag").c_str());
|
||||||
AssignUniforms("pixel");
|
AssignUniforms("pixel");
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
}
|
}
|
||||||
|
|
||||||
Gaussian3VBlurShader::Gaussian3VBlurShader()
|
Gaussian3VBlurShader::Gaussian3VBlurShader()
|
||||||
@ -1725,8 +1829,8 @@ namespace FullScreenShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/gaussian3v.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/gaussian3v.frag").c_str());
|
||||||
AssignUniforms("pixel");
|
AssignUniforms("pixel");
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
}
|
}
|
||||||
|
|
||||||
PassThroughShader::PassThroughShader()
|
PassThroughShader::PassThroughShader()
|
||||||
@ -1734,9 +1838,9 @@ namespace FullScreenShader
|
|||||||
Program = LoadProgram(
|
Program = LoadProgram(
|
||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/texturedquad.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/texturedquad.frag").c_str());
|
||||||
TU_tex = 0;
|
|
||||||
AssignUniforms();
|
AssignUniforms();
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "texture"));
|
AssignSamplerNames(Program, 0, "texture");
|
||||||
vao = createVAO(Program);
|
vao = createVAO(Program);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1757,8 +1861,8 @@ namespace FullScreenShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/linearizedepth.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/linearizedepth.frag").c_str());
|
||||||
AssignUniforms("zn", "zf");
|
AssignUniforms("zn", "zf");
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "texture"));
|
AssignSamplerNames(Program, 0, "texture");
|
||||||
}
|
}
|
||||||
|
|
||||||
GlowShader::GlowShader()
|
GlowShader::GlowShader()
|
||||||
@ -1767,8 +1871,8 @@ namespace FullScreenShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/glow.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/glow.frag").c_str());
|
||||||
AssignUniforms();
|
AssignUniforms();
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
vao = createVAO(Program);
|
vao = createVAO(Program);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1779,8 +1883,8 @@ namespace FullScreenShader
|
|||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/decodeNormal.frag").c_str(),
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/decodeNormal.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/ssao.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/ssao.frag").c_str());
|
||||||
TU_dtex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_dtex, "dtex"));
|
AssignSamplerNames(Program, 0, "dtex");
|
||||||
AssignUniforms("radius", "k", "sigma");
|
AssignUniforms("radius", "k", "sigma");
|
||||||
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
@ -1793,9 +1897,9 @@ namespace FullScreenShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").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/fog.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/fog.frag").c_str());
|
||||||
TU_tex = 0;
|
|
||||||
AssignUniforms("fogmax", "startH", "endH", "start", "end", "col");
|
AssignUniforms("fogmax", "startH", "endH", "start", "end", "col");
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
|
|
||||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||||
@ -1808,9 +1912,8 @@ namespace FullScreenShader
|
|||||||
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/motion_blur.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/motion_blur.frag").c_str());
|
||||||
AssignUniforms("previous_viewproj", "center", "boost_amount", "mask_radius");
|
AssignUniforms("previous_viewproj", "center", "boost_amount", "mask_radius");
|
||||||
TU_cb = 0;
|
|
||||||
TU_dtex = 1;
|
AssignSamplerNames(Program, 0, "color_buffer", 1, "dtex");
|
||||||
AssignTextureUnit(Program, TexUnit(TU_dtex, "dtex"), TexUnit(TU_cb, "color_buffer"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GodFadeShader::GodFadeShader()
|
GodFadeShader::GodFadeShader()
|
||||||
@ -1819,8 +1922,8 @@ namespace FullScreenShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/godfade.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/godfade.frag").c_str());
|
||||||
AssignUniforms("col");
|
AssignUniforms("col");
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
vao = createVAO(Program);
|
vao = createVAO(Program);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1829,9 +1932,9 @@ namespace FullScreenShader
|
|||||||
Program = LoadProgram(
|
Program = LoadProgram(
|
||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/godray.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/godray.frag").c_str());
|
||||||
TU_tex = 0;
|
|
||||||
AssignUniforms("sunpos");
|
AssignUniforms("sunpos");
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
vao = createVAO(Program);
|
vao = createVAO(Program);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1841,8 +1944,8 @@ namespace FullScreenShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/mlaa_offset.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/mlaa_offset.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/mlaa_color1.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/mlaa_color1.frag").c_str());
|
||||||
AssignUniforms("PIXEL_SIZE");
|
AssignUniforms("PIXEL_SIZE");
|
||||||
TU_colorMapG = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_colorMapG, "colorMapG"));
|
AssignSamplerNames(Program, 0, "colorMapG");
|
||||||
vao = createVAO(Program);
|
vao = createVAO(Program);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1852,9 +1955,8 @@ namespace FullScreenShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/mlaa_blend2.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/mlaa_blend2.frag").c_str());
|
||||||
AssignUniforms("PIXEL_SIZE");
|
AssignUniforms("PIXEL_SIZE");
|
||||||
TU_edgesMap = 0;
|
|
||||||
TU_areaMap = 1;
|
AssignSamplerNames(Program, 0, "edgesMap", 1, "areaMap");
|
||||||
AssignTextureUnit(Program, TexUnit(TU_edgesMap, "edgesMap"), TexUnit(TU_areaMap, "areaMap"));
|
|
||||||
vao = createVAO(Program);
|
vao = createVAO(Program);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1864,9 +1966,8 @@ namespace FullScreenShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/mlaa_offset.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/mlaa_offset.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/mlaa_neigh3.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/mlaa_neigh3.frag").c_str());
|
||||||
AssignUniforms("PIXEL_SIZE");
|
AssignUniforms("PIXEL_SIZE");
|
||||||
TU_blendMap = 0;
|
|
||||||
TU_colorMap = 1;
|
AssignSamplerNames(Program, 0, "blendMap", 1, "colorMap");
|
||||||
AssignTextureUnit(Program, TexUnit(TU_blendMap, "blendMap"), TexUnit(TU_colorMap, "colorMap"));
|
|
||||||
vao = createVAO(Program);
|
vao = createVAO(Program);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1879,8 +1980,8 @@ namespace UIShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/texturedquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/texturedquad.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/texturedquad.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/texturedquad.frag").c_str());
|
||||||
AssignUniforms("center", "size", "texcenter", "texsize");
|
AssignUniforms("center", "size", "texcenter", "texsize");
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
}
|
}
|
||||||
|
|
||||||
UniformColoredTextureRectShader::UniformColoredTextureRectShader()
|
UniformColoredTextureRectShader::UniformColoredTextureRectShader()
|
||||||
@ -1890,8 +1991,8 @@ namespace UIShader
|
|||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/uniformcolortexturedquad.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/uniformcolortexturedquad.frag").c_str());
|
||||||
|
|
||||||
AssignUniforms("center", "size", "texcenter", "texsize", "color");
|
AssignUniforms("center", "size", "texcenter", "texsize", "color");
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
}
|
}
|
||||||
|
|
||||||
ColoredTextureRectShader::ColoredTextureRectShader()
|
ColoredTextureRectShader::ColoredTextureRectShader()
|
||||||
@ -1900,8 +2001,8 @@ namespace UIShader
|
|||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/colortexturedquad.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/colortexturedquad.vert").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/colortexturedquad.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/colortexturedquad.frag").c_str());
|
||||||
AssignUniforms("center", "size", "texcenter", "texsize");
|
AssignUniforms("center", "size", "texcenter", "texsize");
|
||||||
TU_tex = 0;
|
|
||||||
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
|
AssignSamplerNames(Program, 0, "tex");
|
||||||
|
|
||||||
glGenVertexArrays(1, &vao);
|
glGenVertexArrays(1, &vao);
|
||||||
glBindVertexArray(vao);
|
glBindVertexArray(vao);
|
||||||
|
@ -137,7 +137,7 @@ protected:
|
|||||||
template<typename... U>
|
template<typename... U>
|
||||||
void AssignUniforms_impl(const char* name, U... rest)
|
void AssignUniforms_impl(const char* name, U... rest)
|
||||||
{
|
{
|
||||||
uniforms.push_back(getUniformLocation(Program, name));
|
uniforms.push_back(glGetUniformLocation(Program, name));
|
||||||
AssignUniforms_impl(rest...);
|
AssignUniforms_impl(rest...);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,146 +159,365 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum SamplerType {
|
||||||
|
Trilinear_Anisotropic_Filtered,
|
||||||
|
Semi_trilinear,
|
||||||
|
Bilinear_Filtered,
|
||||||
|
Bilinear_Clamped_Filtered,
|
||||||
|
Nearest_Filtered,
|
||||||
|
Shadow_Sampler,
|
||||||
|
Volume_Linear_Filtered,
|
||||||
|
};
|
||||||
|
|
||||||
|
void setTextureSampler(GLenum, GLuint, GLuint, GLuint);
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct CreateSamplers;
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct BindTexture;
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct CreateSamplers<>
|
||||||
|
{
|
||||||
|
static void exec(std::vector<unsigned> &, std::vector<GLenum> &e)
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct BindTexture<>
|
||||||
|
{
|
||||||
|
static void exec(const std::vector<unsigned> &TU, const std::vector<unsigned> &TexId, unsigned N)
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
GLuint createNearestSampler();
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct CreateSamplers<Nearest_Filtered, tp...>
|
||||||
|
{
|
||||||
|
static void exec(std::vector<unsigned> &v, std::vector<GLenum> &e)
|
||||||
|
{
|
||||||
|
v.push_back(createNearestSampler());
|
||||||
|
e.push_back(GL_TEXTURE_2D);
|
||||||
|
CreateSamplers<tp...>::exec(v, e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void BindTextureNearest(unsigned TU, unsigned tid);
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct BindTexture<Nearest_Filtered, tp...>
|
||||||
|
{
|
||||||
|
static void exec(const std::vector<unsigned> &TU, const std::vector<unsigned> &TexId, unsigned N)
|
||||||
|
{
|
||||||
|
BindTextureNearest(TU[N], TexId[N]);
|
||||||
|
BindTexture<tp...>::exec(TU, TexId, N + 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
GLuint createBilinearSampler();
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct CreateSamplers<Bilinear_Filtered, tp...>
|
||||||
|
{
|
||||||
|
static void exec(std::vector<unsigned> &v, std::vector<GLenum> &e)
|
||||||
|
{
|
||||||
|
v.push_back(createBilinearSampler());
|
||||||
|
e.push_back(GL_TEXTURE_2D);
|
||||||
|
CreateSamplers<tp...>::exec(v, e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void BindTextureBilinear(unsigned TU, unsigned tex);
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct BindTexture<Bilinear_Filtered, tp...>
|
||||||
|
{
|
||||||
|
static void exec(const std::vector<unsigned> &TU, const std::vector<unsigned> &TexId, unsigned N)
|
||||||
|
{
|
||||||
|
BindTextureBilinear(TU[N], TexId[N]);
|
||||||
|
BindTexture<tp...>::exec(TU, TexId, N + 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
GLuint createBilinearClampedSampler();
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct CreateSamplers<Bilinear_Clamped_Filtered, tp...>
|
||||||
|
{
|
||||||
|
static void exec(std::vector<unsigned> &v, std::vector<GLenum> &e)
|
||||||
|
{
|
||||||
|
v.push_back(createBilinearClampedSampler());
|
||||||
|
e.push_back(GL_TEXTURE_2D);
|
||||||
|
CreateSamplers<tp...>::exec(v, e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void BindTextureBilinearClamped(unsigned TU, unsigned tex);
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct BindTexture<Bilinear_Clamped_Filtered, tp...>
|
||||||
|
{
|
||||||
|
static void exec(const std::vector<unsigned> &TU, const std::vector<unsigned> &TexId, unsigned N)
|
||||||
|
{
|
||||||
|
BindTextureBilinearClamped(TU[N], TexId[N]);
|
||||||
|
BindTexture<tp...>::exec(TU, TexId, N + 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
GLuint createSemiTrilinearSampler();
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct CreateSamplers<Semi_trilinear, tp...>
|
||||||
|
{
|
||||||
|
static void exec(std::vector<unsigned> &v, std::vector<GLenum> &e)
|
||||||
|
{
|
||||||
|
v.push_back(createSemiTrilinearSampler());
|
||||||
|
e.push_back(GL_TEXTURE_2D);
|
||||||
|
CreateSamplers<tp...>::exec(v, e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void BindTextureSemiTrilinear(unsigned TU, unsigned tex);
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct BindTexture<Semi_trilinear, tp...>
|
||||||
|
{
|
||||||
|
static void exec(const std::vector<unsigned> &TU, const std::vector<unsigned> &TexId, unsigned N)
|
||||||
|
{
|
||||||
|
BindTextureSemiTrilinear(TU[N], TexId[N]);
|
||||||
|
BindTexture<tp...>::exec(TU, TexId, N + 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
GLuint createTrilinearSampler();
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct CreateSamplers<Trilinear_Anisotropic_Filtered, tp...>
|
||||||
|
{
|
||||||
|
static void exec(std::vector<unsigned> &v, std::vector<GLenum> &e)
|
||||||
|
{
|
||||||
|
v.push_back(createTrilinearSampler());
|
||||||
|
e.push_back(GL_TEXTURE_2D);
|
||||||
|
CreateSamplers<tp...>::exec(v, e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void BindTextureTrilinearAnisotropic(unsigned TU, unsigned tex);
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct BindTexture<Trilinear_Anisotropic_Filtered, tp...>
|
||||||
|
{
|
||||||
|
static void exec(const std::vector<unsigned> &TU, const std::vector<unsigned> &TexId, unsigned N)
|
||||||
|
{
|
||||||
|
BindTextureTrilinearAnisotropic(TU[N], TexId[N]);
|
||||||
|
BindTexture<tp...>::exec(TU, TexId, N + 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct CreateSamplers<Volume_Linear_Filtered, tp...>
|
||||||
|
{
|
||||||
|
static void exec(std::vector<unsigned> &v, std::vector<GLenum> &e)
|
||||||
|
{
|
||||||
|
v.push_back(createBilinearSampler());
|
||||||
|
e.push_back(GL_TEXTURE_3D);
|
||||||
|
CreateSamplers<tp...>::exec(v, e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void BindTextureVolume(unsigned TU, unsigned tex);
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct BindTexture<Volume_Linear_Filtered, tp...>
|
||||||
|
{
|
||||||
|
static void exec(const std::vector<unsigned> &TU, const std::vector<unsigned> &TexId, unsigned N)
|
||||||
|
{
|
||||||
|
BindTextureVolume(TU[N], TexId[N]);
|
||||||
|
BindTexture<tp...>::exec(TU, TexId, N + 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
GLuint createShadowSampler();
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct CreateSamplers<Shadow_Sampler, tp...>
|
||||||
|
{
|
||||||
|
static void exec(std::vector<unsigned> &v, std::vector<GLenum> &e)
|
||||||
|
{
|
||||||
|
v.push_back(createShadowSampler());
|
||||||
|
e.push_back(GL_TEXTURE_2D_ARRAY);
|
||||||
|
CreateSamplers<tp...>::exec(v, e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void BindTextureShadow(unsigned TU, unsigned tex);
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
struct BindTexture<Shadow_Sampler, tp...>
|
||||||
|
{
|
||||||
|
static void exec(const std::vector<unsigned> &TU, const std::vector<unsigned> &TexId, unsigned N)
|
||||||
|
{
|
||||||
|
BindTextureShadow(TU[N], TexId[N]);
|
||||||
|
BindTexture<tp...>::exec(TU, TexId, N + 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template<SamplerType...tp>
|
||||||
|
class TextureRead
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
template<unsigned N, typename...Args>
|
||||||
|
void AssignTextureNames_impl(GLuint)
|
||||||
|
{}
|
||||||
|
|
||||||
|
template<unsigned N, typename...Args>
|
||||||
|
void AssignTextureNames_impl(GLuint Program, GLuint TexUnit, const char *name, Args...args...)
|
||||||
|
{
|
||||||
|
GLuint location = glGetUniformLocation(Program, name);
|
||||||
|
glUniform1i(location, TexUnit);
|
||||||
|
TextureUnits.push_back(TexUnit);
|
||||||
|
AssignTextureNames_impl<N + 1>(Program, args...);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
std::vector<GLuint> SamplersId;
|
||||||
|
std::vector<GLuint> TextureUnits;
|
||||||
|
std::vector<GLenum> TextureType;
|
||||||
|
template<typename...Args>
|
||||||
|
void AssignSamplerNames(GLuint Program, Args...args)
|
||||||
|
{
|
||||||
|
CreateSamplers<tp...>::exec(SamplersId, TextureType);
|
||||||
|
|
||||||
|
glUseProgram(Program);
|
||||||
|
AssignTextureNames_impl<0>(Program, args...);
|
||||||
|
glUseProgram(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
void SetTextureUnits(const std::vector<GLuint> &args)
|
||||||
|
{
|
||||||
|
assert(args.size() == sizeof...(tp) && "Too much texture unit provided");
|
||||||
|
if (getGLSLVersion() >= 330)
|
||||||
|
{
|
||||||
|
for (unsigned i = 0; i < args.size(); i++)
|
||||||
|
{
|
||||||
|
setTextureSampler(TextureType[i], TextureUnits[i], args[i], SamplersId[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
BindTexture<tp...>::exec(TextureUnits, args, 0);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
namespace MeshShader
|
namespace MeshShader
|
||||||
{
|
{
|
||||||
class ObjectPass1Shader : public ShaderHelperSingleton<ObjectPass1Shader, core::matrix4, core::matrix4>
|
class ObjectPass1Shader : public ShaderHelperSingleton<ObjectPass1Shader, core::matrix4, core::matrix4>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
ObjectPass1Shader();
|
ObjectPass1Shader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class ObjectRefPass1Shader : public ShaderHelperSingleton<ObjectRefPass1Shader, core::matrix4, core::matrix4, core::matrix4>
|
class ObjectRefPass1Shader : public ShaderHelperSingleton<ObjectRefPass1Shader, core::matrix4, core::matrix4, core::matrix4>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
ObjectRefPass1Shader();
|
ObjectRefPass1Shader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class GrassPass1Shader : public ShaderHelperSingleton<GrassPass1Shader, core::matrix4, core::matrix4, core::vector3df>
|
class GrassPass1Shader : public ShaderHelperSingleton<GrassPass1Shader, core::matrix4, core::matrix4, core::vector3df>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
GrassPass1Shader();
|
GrassPass1Shader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class NormalMapShader : public ShaderHelperSingleton<NormalMapShader, core::matrix4, core::matrix4>
|
class NormalMapShader : public ShaderHelperSingleton<NormalMapShader, core::matrix4, core::matrix4>, public TextureRead<Trilinear_Anisotropic_Filtered, Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_normalmap, TU_glossy;
|
|
||||||
NormalMapShader();
|
NormalMapShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class InstancedObjectPass1Shader : public ShaderHelperSingleton<InstancedObjectPass1Shader>
|
class InstancedObjectPass1Shader : public ShaderHelperSingleton<InstancedObjectPass1Shader>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
InstancedObjectPass1Shader();
|
InstancedObjectPass1Shader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class InstancedObjectRefPass1Shader : public ShaderHelperSingleton<InstancedObjectRefPass1Shader>
|
class InstancedObjectRefPass1Shader : public ShaderHelperSingleton<InstancedObjectRefPass1Shader>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
InstancedObjectRefPass1Shader();
|
InstancedObjectRefPass1Shader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class InstancedGrassPass1Shader : public ShaderHelperSingleton<InstancedGrassPass1Shader, core::vector3df>
|
class InstancedGrassPass1Shader : public ShaderHelperSingleton<InstancedGrassPass1Shader, core::vector3df>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
InstancedGrassPass1Shader();
|
InstancedGrassPass1Shader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class InstancedNormalMapShader : public ShaderHelperSingleton<InstancedNormalMapShader>
|
class InstancedNormalMapShader : public ShaderHelperSingleton<InstancedNormalMapShader>, public TextureRead<Trilinear_Anisotropic_Filtered, Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_glossy, TU_normalmap;
|
|
||||||
|
|
||||||
InstancedNormalMapShader();
|
InstancedNormalMapShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class ObjectPass2Shader : public ShaderHelperSingleton<ObjectPass2Shader, core::matrix4, core::matrix4>
|
class ObjectPass2Shader : public ShaderHelperSingleton<ObjectPass2Shader, core::matrix4, core::matrix4>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_Albedo;
|
|
||||||
|
|
||||||
ObjectPass2Shader();
|
ObjectPass2Shader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class InstancedObjectPass2Shader : public ShaderHelperSingleton<InstancedObjectPass2Shader>
|
class InstancedObjectPass2Shader : public ShaderHelperSingleton<InstancedObjectPass2Shader>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_Albedo;
|
|
||||||
|
|
||||||
InstancedObjectPass2Shader();
|
InstancedObjectPass2Shader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class InstancedObjectRefPass2Shader : public ShaderHelperSingleton<InstancedObjectRefPass2Shader>
|
class InstancedObjectRefPass2Shader : public ShaderHelperSingleton<InstancedObjectRefPass2Shader>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_Albedo;
|
|
||||||
|
|
||||||
InstancedObjectRefPass2Shader();
|
InstancedObjectRefPass2Shader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class DetailledObjectPass2Shader : public ShaderHelperSingleton<DetailledObjectPass2Shader, core::matrix4>
|
class DetailledObjectPass2Shader : public ShaderHelperSingleton<DetailledObjectPass2Shader, core::matrix4>, public TextureRead<Trilinear_Anisotropic_Filtered, Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_Albedo, TU_detail;
|
|
||||||
|
|
||||||
DetailledObjectPass2Shader();
|
DetailledObjectPass2Shader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class ObjectUnlitShader : public ShaderHelperSingleton<ObjectUnlitShader, core::matrix4, core::matrix4>
|
class ObjectUnlitShader : public ShaderHelperSingleton<ObjectUnlitShader, core::matrix4, core::matrix4>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
ObjectUnlitShader();
|
ObjectUnlitShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class ObjectRefPass2Shader : public ShaderHelperSingleton<ObjectRefPass2Shader, core::matrix4, core::matrix4>
|
class ObjectRefPass2Shader : public ShaderHelperSingleton<ObjectRefPass2Shader, core::matrix4, core::matrix4>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_Albedo;
|
|
||||||
|
|
||||||
ObjectRefPass2Shader();
|
ObjectRefPass2Shader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class GrassPass2Shader : public ShaderHelperSingleton<GrassPass2Shader, core::matrix4, core::vector3df>
|
class GrassPass2Shader : public ShaderHelperSingleton<GrassPass2Shader, core::matrix4, core::vector3df>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_Albedo;
|
|
||||||
|
|
||||||
GrassPass2Shader();
|
GrassPass2Shader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class InstancedGrassPass2Shader : public ShaderHelperSingleton<InstancedGrassPass2Shader, core::vector3df, core::vector3df>
|
class InstancedGrassPass2Shader : public ShaderHelperSingleton<InstancedGrassPass2Shader, core::vector3df, core::vector3df>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_Albedo, TU_dtex;
|
|
||||||
|
|
||||||
InstancedGrassPass2Shader();
|
InstancedGrassPass2Shader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class SphereMapShader : public ShaderHelperSingleton<SphereMapShader, core::matrix4, core::matrix4>
|
class SphereMapShader : public ShaderHelperSingleton<SphereMapShader, core::matrix4, core::matrix4>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
SphereMapShader();
|
SphereMapShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class SplattingShader : public ShaderHelperSingleton<SplattingShader, core::matrix4>
|
class SplattingShader : public ShaderHelperSingleton<SplattingShader, core::matrix4>, public TextureRead<Trilinear_Anisotropic_Filtered, Trilinear_Anisotropic_Filtered, Trilinear_Anisotropic_Filtered, Trilinear_Anisotropic_Filtered, Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex_layout, TU_tex_detail0, TU_tex_detail1, TU_tex_detail2, TU_tex_detail3;
|
|
||||||
|
|
||||||
SplattingShader();
|
SplattingShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -312,27 +531,21 @@ public:
|
|||||||
static void setUniforms(const core::matrix4 &ModelViewProjectionMatrix, unsigned TU_tex, float time, float transparency);
|
static void setUniforms(const core::matrix4 &ModelViewProjectionMatrix, unsigned TU_tex, float time, float transparency);
|
||||||
};
|
};
|
||||||
|
|
||||||
class TransparentShader : public ShaderHelperSingleton<TransparentShader, core::matrix4, core::matrix4>
|
class TransparentShader : public ShaderHelperSingleton<TransparentShader, core::matrix4, core::matrix4>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
TransparentShader();
|
TransparentShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class TransparentFogShader : public ShaderHelperSingleton<TransparentFogShader, core::matrix4, core::matrix4, float, float, float, float, float, video::SColorf>
|
class TransparentFogShader : public ShaderHelperSingleton<TransparentFogShader, core::matrix4, core::matrix4, float, float, float, float, float, video::SColorf>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
TransparentFogShader();
|
TransparentFogShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class BillboardShader : public ShaderHelperSingleton<BillboardShader, core::matrix4, core::matrix4, core::vector3df, core::dimension2df>
|
class BillboardShader : public ShaderHelperSingleton<BillboardShader, core::matrix4, core::matrix4, core::vector3df, core::dimension2df>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
BillboardShader();
|
BillboardShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -343,59 +556,52 @@ public:
|
|||||||
ColorizeShader();
|
ColorizeShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class ShadowShader : public ShaderHelperSingleton<ShadowShader, core::matrix4>
|
class ShadowShader : public ShaderHelperSingleton<ShadowShader, core::matrix4>, public TextureRead<>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ShadowShader();
|
ShadowShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class RSMShader : public ShaderHelperSingleton<RSMShader, core::matrix4, core::matrix4, core::matrix4>
|
class RSMShader : public ShaderHelperSingleton<RSMShader, core::matrix4, core::matrix4, core::matrix4>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
RSMShader();
|
RSMShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class SplattingRSMShader : public ShaderHelperSingleton<SplattingRSMShader, core::matrix4, core::matrix4>
|
class SplattingRSMShader : public ShaderHelperSingleton<SplattingRSMShader, core::matrix4, core::matrix4>,
|
||||||
|
public TextureRead<Trilinear_Anisotropic_Filtered, Trilinear_Anisotropic_Filtered, Trilinear_Anisotropic_Filtered, Trilinear_Anisotropic_Filtered, Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_layout, TU_detail0, TU_detail1, TU_detail2, TU_detail3;
|
|
||||||
|
|
||||||
SplattingRSMShader();
|
SplattingRSMShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class InstancedShadowShader : public ShaderHelperSingleton<InstancedShadowShader>
|
class InstancedShadowShader : public ShaderHelperSingleton<InstancedShadowShader>, public TextureRead<>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
InstancedShadowShader();
|
InstancedShadowShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class RefShadowShader : public ShaderHelperSingleton<RefShadowShader, core::matrix4>
|
class RefShadowShader : public ShaderHelperSingleton<RefShadowShader, core::matrix4>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
RefShadowShader();
|
RefShadowShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class InstancedRefShadowShader : public ShaderHelperSingleton<InstancedRefShadowShader>
|
class InstancedRefShadowShader : public ShaderHelperSingleton<InstancedRefShadowShader>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
InstancedRefShadowShader();
|
InstancedRefShadowShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class GrassShadowShader : public ShaderHelperSingleton<GrassShadowShader, core::matrix4, core::vector3df>
|
class GrassShadowShader : public ShaderHelperSingleton<GrassShadowShader, core::matrix4, core::vector3df>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
GrassShadowShader();
|
GrassShadowShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class InstancedGrassShadowShader : public ShaderHelperSingleton<InstancedGrassShadowShader, core::vector3df>
|
class InstancedGrassShadowShader : public ShaderHelperSingleton<InstancedGrassShadowShader, core::vector3df>, public TextureRead<Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
InstancedGrassShadowShader();
|
InstancedGrassShadowShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -405,11 +611,9 @@ public:
|
|||||||
DisplaceMaskShader();
|
DisplaceMaskShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class DisplaceShader : public ShaderHelperSingleton<DisplaceShader, core::matrix4, core::vector2df, core::vector2df>
|
class DisplaceShader : public ShaderHelperSingleton<DisplaceShader, core::matrix4, core::vector2df, core::vector2df>, public TextureRead<Trilinear_Anisotropic_Filtered, Trilinear_Anisotropic_Filtered, Trilinear_Anisotropic_Filtered, Trilinear_Anisotropic_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_displacement_tex, TU_mask_tex, TU_color_tex, TU_tex;
|
|
||||||
|
|
||||||
DisplaceShader();
|
DisplaceShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -495,19 +699,15 @@ public:
|
|||||||
HeightmapSimulationShader();
|
HeightmapSimulationShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class SimpleParticleRender : public ShaderHelperSingleton<SimpleParticleRender, video::SColorf, video::SColorf>
|
class SimpleParticleRender : public ShaderHelperSingleton<SimpleParticleRender, video::SColorf, video::SColorf>, public TextureRead<Trilinear_Anisotropic_Filtered, Nearest_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex, TU_dtex;
|
|
||||||
|
|
||||||
SimpleParticleRender();
|
SimpleParticleRender();
|
||||||
};
|
};
|
||||||
|
|
||||||
class FlipParticleRender : public ShaderHelperSingleton<FlipParticleRender>
|
class FlipParticleRender : public ShaderHelperSingleton<FlipParticleRender>, public TextureRead<Trilinear_Anisotropic_Filtered, Nearest_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex, TU_dtex;
|
|
||||||
|
|
||||||
FlipParticleRender();
|
FlipParticleRender();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -515,35 +715,27 @@ public:
|
|||||||
namespace FullScreenShader
|
namespace FullScreenShader
|
||||||
{
|
{
|
||||||
|
|
||||||
class BloomShader : public ShaderHelperSingleton<BloomShader>
|
class BloomShader : public ShaderHelperSingleton<BloomShader>, public TextureRead<Nearest_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
BloomShader();
|
BloomShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class BloomBlendShader : public ShaderHelperSingleton<BloomBlendShader>
|
class BloomBlendShader : public ShaderHelperSingleton<BloomBlendShader>, public TextureRead<Bilinear_Filtered, Bilinear_Filtered, Bilinear_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex_128, TU_tex_256, TU_tex_512;
|
|
||||||
|
|
||||||
BloomBlendShader();
|
BloomBlendShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class ToneMapShader : public ShaderHelperSingleton<ToneMapShader>
|
class ToneMapShader : public ShaderHelperSingleton<ToneMapShader>, public TextureRead<Nearest_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
ToneMapShader();
|
ToneMapShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class DepthOfFieldShader : public ShaderHelperSingleton<DepthOfFieldShader>
|
class DepthOfFieldShader : public ShaderHelperSingleton<DepthOfFieldShader>, public TextureRead<Bilinear_Filtered, Nearest_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex, TU_depth;
|
|
||||||
|
|
||||||
DepthOfFieldShader();
|
DepthOfFieldShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -565,19 +757,15 @@ public:
|
|||||||
static void setUniforms(const core::matrix4 &TransposeViewMatrix, const float *blueSHCoeff, const float *greenSHCoeff, const float *redSHCoeff, unsigned TU_ntex);
|
static void setUniforms(const core::matrix4 &TransposeViewMatrix, const float *blueSHCoeff, const float *greenSHCoeff, const float *redSHCoeff, unsigned TU_ntex);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ShadowedSunLightShader : public ShaderHelperSingleton<ShadowedSunLightShader, core::vector3df, video::SColorf>
|
class ShadowedSunLightShader : public ShaderHelperSingleton<ShadowedSunLightShader, core::vector3df, video::SColorf>, public TextureRead<Nearest_Filtered, Nearest_Filtered, Shadow_Sampler>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_ntex, TU_dtex, TU_shadowtex;
|
|
||||||
|
|
||||||
ShadowedSunLightShader();
|
ShadowedSunLightShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class RadianceHintsConstructionShader : public ShaderHelperSingleton<RadianceHintsConstructionShader, core::matrix4, core::matrix4, core::vector3df>
|
class RadianceHintsConstructionShader : public ShaderHelperSingleton<RadianceHintsConstructionShader, core::matrix4, core::matrix4, core::vector3df>, public TextureRead<Bilinear_Filtered, Bilinear_Filtered, Bilinear_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_ctex, TU_ntex, TU_dtex;
|
|
||||||
|
|
||||||
RadianceHintsConstructionShader();
|
RadianceHintsConstructionShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -598,11 +786,10 @@ public:
|
|||||||
RHDebug();
|
RHDebug();
|
||||||
};
|
};
|
||||||
|
|
||||||
class GlobalIlluminationReconstructionShader : public ShaderHelperSingleton<GlobalIlluminationReconstructionShader, core::matrix4, core::matrix4, core::vector3df>
|
class GlobalIlluminationReconstructionShader : public ShaderHelperSingleton<GlobalIlluminationReconstructionShader, core::matrix4, core::matrix4, core::vector3df>,
|
||||||
|
public TextureRead<Nearest_Filtered, Nearest_Filtered, Volume_Linear_Filtered, Volume_Linear_Filtered, Volume_Linear_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_ntex, TU_dtex, TU_SHR, TU_SHG, TU_SHB, uniform_RHMatrix;
|
|
||||||
|
|
||||||
GlobalIlluminationReconstructionShader();
|
GlobalIlluminationReconstructionShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -621,19 +808,15 @@ public:
|
|||||||
ComputeGaussian17TapHShader();
|
ComputeGaussian17TapHShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class Gaussian6HBlurShader : public ShaderHelperSingleton<Gaussian6HBlurShader, core::vector2df>
|
class Gaussian6HBlurShader : public ShaderHelperSingleton<Gaussian6HBlurShader, core::vector2df>, public TextureRead<Bilinear_Clamped_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
Gaussian6HBlurShader();
|
Gaussian6HBlurShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class Gaussian3HBlurShader : public ShaderHelperSingleton<Gaussian3HBlurShader, core::vector2df>
|
class Gaussian3HBlurShader : public ShaderHelperSingleton<Gaussian3HBlurShader, core::vector2df>, public TextureRead<Bilinear_Clamped_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
Gaussian3HBlurShader();
|
Gaussian3HBlurShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -654,26 +837,21 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Gaussian6VBlurShader : public ShaderHelperSingleton<Gaussian6VBlurShader, core::vector2df>
|
class Gaussian6VBlurShader : public ShaderHelperSingleton<Gaussian6VBlurShader, core::vector2df>, public TextureRead<Bilinear_Clamped_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
Gaussian6VBlurShader();
|
Gaussian6VBlurShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class Gaussian3VBlurShader : public ShaderHelperSingleton<Gaussian3VBlurShader, core::vector2df>
|
class Gaussian3VBlurShader : public ShaderHelperSingleton<Gaussian3VBlurShader, core::vector2df>, public TextureRead<Bilinear_Clamped_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
Gaussian3VBlurShader();
|
Gaussian3VBlurShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class PassThroughShader : public ShaderHelperSingleton<PassThroughShader>
|
class PassThroughShader : public ShaderHelperSingleton<PassThroughShader>, public TextureRead<Bilinear_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
GLuint vao;
|
GLuint vao;
|
||||||
|
|
||||||
PassThroughShader();
|
PassThroughShader();
|
||||||
@ -688,87 +866,73 @@ public:
|
|||||||
LayerPassThroughShader();
|
LayerPassThroughShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class LinearizeDepthShader : public ShaderHelperSingleton<LinearizeDepthShader, float, float>
|
class LinearizeDepthShader : public ShaderHelperSingleton<LinearizeDepthShader, float, float>, public TextureRead<Bilinear_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
LinearizeDepthShader();
|
LinearizeDepthShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class GlowShader : public ShaderHelperSingleton<GlowShader>
|
class GlowShader : public ShaderHelperSingleton<GlowShader>, public TextureRead<Bilinear_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
GLuint vao;
|
GLuint vao;
|
||||||
|
|
||||||
GlowShader();
|
GlowShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class SSAOShader : public ShaderHelperSingleton<SSAOShader, float, float, float>
|
class SSAOShader : public ShaderHelperSingleton<SSAOShader, float, float, float>, public TextureRead<Semi_trilinear>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_dtex;
|
|
||||||
|
|
||||||
SSAOShader();
|
SSAOShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class FogShader : public ShaderHelperSingleton<FogShader, float, float, float, float, float, core::vector3df>
|
class FogShader : public ShaderHelperSingleton<FogShader, float, float, float, float, float, core::vector3df>, public TextureRead<Nearest_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
FogShader();
|
FogShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class MotionBlurShader : public ShaderHelperSingleton<MotionBlurShader, core::matrix4, core::vector2df, float, float>
|
class MotionBlurShader : public ShaderHelperSingleton<MotionBlurShader, core::matrix4, core::vector2df, float, float>, public TextureRead<Bilinear_Clamped_Filtered, Nearest_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_cb, TU_dtex;
|
|
||||||
|
|
||||||
MotionBlurShader();
|
MotionBlurShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class GodFadeShader : public ShaderHelperSingleton<GodFadeShader, video::SColorf>
|
class GodFadeShader : public ShaderHelperSingleton<GodFadeShader, video::SColorf>, public TextureRead<Bilinear_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
GLuint vao;
|
GLuint vao;
|
||||||
|
|
||||||
GodFadeShader();
|
GodFadeShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class GodRayShader : public ShaderHelperSingleton<GodRayShader, core::vector2df>
|
class GodRayShader : public ShaderHelperSingleton<GodRayShader, core::vector2df>, public TextureRead<Bilinear_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
GLuint vao;
|
GLuint vao;
|
||||||
|
|
||||||
GodRayShader();
|
GodRayShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class MLAAColorEdgeDetectionSHader : public ShaderHelperSingleton<MLAAColorEdgeDetectionSHader, core::vector2df>
|
class MLAAColorEdgeDetectionSHader : public ShaderHelperSingleton<MLAAColorEdgeDetectionSHader, core::vector2df>, public TextureRead<Nearest_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_colorMapG;
|
|
||||||
GLuint vao;
|
GLuint vao;
|
||||||
|
|
||||||
MLAAColorEdgeDetectionSHader();
|
MLAAColorEdgeDetectionSHader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class MLAABlendWeightSHader : public ShaderHelperSingleton<MLAABlendWeightSHader, core::vector2df>
|
class MLAABlendWeightSHader : public ShaderHelperSingleton<MLAABlendWeightSHader, core::vector2df>, public TextureRead<Bilinear_Filtered, Nearest_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_edgesMap, TU_areaMap;
|
|
||||||
GLuint vao;
|
GLuint vao;
|
||||||
|
|
||||||
MLAABlendWeightSHader();
|
MLAABlendWeightSHader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class MLAAGatherSHader : public ShaderHelperSingleton<MLAAGatherSHader, core::vector2df>
|
class MLAAGatherSHader : public ShaderHelperSingleton<MLAAGatherSHader, core::vector2df>, public TextureRead<Nearest_Filtered, Nearest_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_colorMap, TU_blendMap;
|
|
||||||
GLuint vao;
|
GLuint vao;
|
||||||
|
|
||||||
MLAAGatherSHader();
|
MLAAGatherSHader();
|
||||||
@ -778,26 +942,21 @@ public:
|
|||||||
|
|
||||||
namespace UIShader
|
namespace UIShader
|
||||||
{
|
{
|
||||||
class TextureRectShader : public ShaderHelperSingleton<TextureRectShader, core::vector2df, core::vector2df, core::vector2df, core::vector2df>
|
class TextureRectShader : public ShaderHelperSingleton<TextureRectShader, core::vector2df, core::vector2df, core::vector2df, core::vector2df>, public TextureRead<Bilinear_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
TextureRectShader();
|
TextureRectShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class UniformColoredTextureRectShader : public ShaderHelperSingleton<UniformColoredTextureRectShader, core::vector2df, core::vector2df, core::vector2df, core::vector2df, video::SColor>
|
class UniformColoredTextureRectShader : public ShaderHelperSingleton<UniformColoredTextureRectShader, core::vector2df, core::vector2df, core::vector2df, core::vector2df, video::SColor>, public TextureRead<Bilinear_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
|
|
||||||
UniformColoredTextureRectShader();
|
UniformColoredTextureRectShader();
|
||||||
};
|
};
|
||||||
|
|
||||||
class ColoredTextureRectShader : public ShaderHelperSingleton<ColoredTextureRectShader, core::vector2df, core::vector2df, core::vector2df, core::vector2df>
|
class ColoredTextureRectShader : public ShaderHelperSingleton<ColoredTextureRectShader, core::vector2df, core::vector2df, core::vector2df, core::vector2df>, public TextureRead<Bilinear_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GLuint TU_tex;
|
|
||||||
GLuint colorvbo;
|
GLuint colorvbo;
|
||||||
GLuint vao;
|
GLuint vao;
|
||||||
|
|
||||||
|
@ -51,8 +51,8 @@ void STKBillboard::render()
|
|||||||
return;
|
return;
|
||||||
compressTexture(tex, true, true);
|
compressTexture(tex, true, true);
|
||||||
GLuint texid = getTextureGLuint(tex);
|
GLuint texid = getTextureGLuint(tex);
|
||||||
setTexture(0, texid, GL_LINEAR, GL_LINEAR);
|
|
||||||
glUseProgram(MeshShader::BillboardShader::getInstance()->Program);
|
glUseProgram(MeshShader::BillboardShader::getInstance()->Program);
|
||||||
|
MeshShader::BillboardShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ texid });
|
||||||
MeshShader::BillboardShader::getInstance()->setUniforms(irr_driver->getViewMatrix(), irr_driver->getProjMatrix(), pos, Size);
|
MeshShader::BillboardShader::getInstance()->setUniforms(irr_driver->getViewMatrix(), irr_driver->getProjMatrix(), pos, Size);
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
|
@ -278,7 +278,7 @@ void STKMeshSceneNode::render()
|
|||||||
GLenum itype = mesh.IndexType;
|
GLenum itype = mesh.IndexType;
|
||||||
size_t count = mesh.IndexCount;
|
size_t count = mesh.IndexCount;
|
||||||
|
|
||||||
setTexture(MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, getTextureGLuint(spareWhiteTex), GL_NEAREST, GL_NEAREST, false);
|
MeshShader::ObjectPass2Shader::getInstance()->SetTextureUnits(std::vector<GLuint>{ getTextureGLuint(spareWhiteTex) });
|
||||||
MeshShader::ObjectPass2Shader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix);
|
MeshShader::ObjectPass2Shader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix);
|
||||||
assert(mesh.vao);
|
assert(mesh.vao);
|
||||||
glBindVertexArray(mesh.vao);
|
glBindVertexArray(mesh.vao);
|
||||||
@ -341,7 +341,7 @@ void STKMeshSceneNode::render()
|
|||||||
tmpcol.getBlue() / 255.0f);
|
tmpcol.getBlue() / 255.0f);
|
||||||
|
|
||||||
compressTexture(mesh.textures[0], true);
|
compressTexture(mesh.textures[0], true);
|
||||||
setTexture(MeshShader::TransparentFogShader::getInstance()->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
MeshShader::TransparentFogShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ getTextureGLuint(mesh.textures[0]) });
|
||||||
MeshShader::TransparentFogShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix, fogmax, startH, endH, start, end, col);
|
MeshShader::TransparentFogShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix, fogmax, startH, endH, start, end, col);
|
||||||
|
|
||||||
assert(mesh.vao);
|
assert(mesh.vao);
|
||||||
@ -362,7 +362,7 @@ void STKMeshSceneNode::render()
|
|||||||
size_t count = mesh.IndexCount;
|
size_t count = mesh.IndexCount;
|
||||||
|
|
||||||
compressTexture(mesh.textures[0], true);
|
compressTexture(mesh.textures[0], true);
|
||||||
setTexture(MeshShader::TransparentShader::getInstance()->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
MeshShader::TransparentShader::getInstance()->SetTextureUnits(std::vector<GLuint>{ getTextureGLuint(mesh.textures[0]) });
|
||||||
|
|
||||||
MeshShader::TransparentShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix);
|
MeshShader::TransparentShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix);
|
||||||
assert(mesh.vao);
|
assert(mesh.vao);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user