STKMesh: Filter stkmesh using stencil and disable lightblend on them.
This commit is contained in:
@@ -61,6 +61,7 @@ GlowNode::~GlowNode()
|
||||
|
||||
void GlowNode::render()
|
||||
{
|
||||
return;
|
||||
IVideoDriver * const drv = irr_driver->getVideoDriver();
|
||||
drv->setTransform(ETS_WORLD, AbsoluteTransformation);
|
||||
drv->setMaterial(mat);
|
||||
|
||||
@@ -632,6 +632,8 @@ void PostProcessing::renderLightbBlend(ITexture *diffuse, ITexture *specular, IT
|
||||
const SColorf s = irr_driver->getSceneManager()->getAmbientLight();
|
||||
if (!LightBlendShader::Program)
|
||||
LightBlendShader::init();
|
||||
glStencilFunc(GL_EQUAL, 1, ~0);
|
||||
glEnable(GL_STENCIL_TEST);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendEquation(GL_FUNC_ADD);
|
||||
if (debug)
|
||||
@@ -664,6 +666,7 @@ void PostProcessing::renderLightbBlend(ITexture *diffuse, ITexture *specular, IT
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDisable(GL_BLEND);
|
||||
glDisable(GL_STENCIL_TEST);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -193,14 +193,21 @@ void IrrDriver::renderGLSL(float dt)
|
||||
m_video_driver->setRenderTarget(m_mrt, false, false);
|
||||
|
||||
m_renderpass = scene::ESNRP_CAMERA | scene::ESNRP_SOLID;
|
||||
glClear(GL_STENCIL_BUFFER_BIT);
|
||||
glStencilFunc(GL_ALWAYS, 1, ~0);
|
||||
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
|
||||
glEnable(GL_STENCIL_TEST);
|
||||
m_scene_manager->drawAll(m_renderpass);
|
||||
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
||||
glDisable(GL_STENCIL_TEST);
|
||||
irr_driver->setProjMatrix(irr_driver->getVideoDriver()->getTransform(video::ETS_PROJECTION));
|
||||
irr_driver->setViewMatrix(irr_driver->getVideoDriver()->getTransform(video::ETS_VIEW));
|
||||
irr_driver->genProjViewMatrix();
|
||||
|
||||
ShadowImportanceProvider * const sicb = (ShadowImportanceProvider *)
|
||||
irr_driver->getCallback(ES_SHADOW_IMPORTANCE);
|
||||
sicb->updateIPVMatrix();
|
||||
// Todo : reenable glow and shadows
|
||||
//ShadowImportanceProvider * const sicb = (ShadowImportanceProvider *)
|
||||
// irr_driver->getCallback(ES_SHADOW_IMPORTANCE);
|
||||
//sicb->updateIPVMatrix();
|
||||
|
||||
// Used to cull glowing items & lights
|
||||
const core::aabbox3df cambox = camnode->getViewFrustum()->getBoundingBox();
|
||||
@@ -208,14 +215,14 @@ void IrrDriver::renderGLSL(float dt)
|
||||
// Render anything glowing.
|
||||
if (!m_mipviz && !m_wireframe)
|
||||
{
|
||||
renderGlow(overridemat, glows, cambox, cam);
|
||||
//renderGlow(overridemat, glows, cambox, cam);
|
||||
} // end glow
|
||||
|
||||
// Shadows
|
||||
if (!m_mipviz && !m_wireframe && UserConfigParams::m_shadows &&
|
||||
World::getWorld()->getTrack()->hasShadows())
|
||||
{
|
||||
renderShadows(sicb, camnode, overridemat, camera);
|
||||
//renderShadows(sicb, camnode, overridemat, camera);
|
||||
}
|
||||
|
||||
// Lights
|
||||
|
||||
@@ -155,6 +155,7 @@ void draw(const GLMesh &mesh, video::E_MATERIAL_TYPE type)
|
||||
{
|
||||
if (!mesh.textures)
|
||||
return;
|
||||
glStencilFunc(GL_ALWAYS, 0, ~0);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glEnable(GL_ALPHA_TEST);
|
||||
glDepthMask(GL_TRUE);
|
||||
@@ -185,6 +186,7 @@ void draw(const GLMesh &mesh, video::E_MATERIAL_TYPE type)
|
||||
glDrawElements(ptype, count, itype, 0);
|
||||
glBindVertexArray(0);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
glStencilFunc(GL_ALWAYS, 1, ~0);
|
||||
|
||||
video::SMaterial material;
|
||||
material.MaterialType = irr_driver->getShader(ES_RAIN);
|
||||
|
||||
Reference in New Issue
Block a user