diff options
author | x2048 <codeforsmile@gmail.com> | 2022-09-06 08:25:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-06 08:25:18 +0200 |
commit | ff6dcfea82974df6db5a557e31aaddb6bdb7a71f (patch) | |
tree | 18bafaedcfdff36a0c0719653b99370b7434b344 /src/client/render/anaglyph.cpp | |
parent | 464043b8abdbd936640757604ecb21662592043b (diff) | |
download | minetest-ff6dcfea82974df6db5a557e31aaddb6bdb7a71f.tar.xz |
Implement rendering pipeline and post-processing (#12465)
Co-authored-by: Lars Mueller <appgurulars@gmx.de>
Co-authored-by: sfan5 <sfan5@live.de>
Co-authored-by: lhofhansl <lhofhansl@yahoo.com>
Diffstat (limited to 'src/client/render/anaglyph.cpp')
-rw-r--r-- | src/client/render/anaglyph.cpp | 69 |
1 files changed, 54 insertions, 15 deletions
diff --git a/src/client/render/anaglyph.cpp b/src/client/render/anaglyph.cpp index 2571f7333..46f417900 100644 --- a/src/client/render/anaglyph.cpp +++ b/src/client/render/anaglyph.cpp @@ -19,17 +19,18 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "anaglyph.h" +#include "client/camera.h" -void RenderingCoreAnaglyph::drawAll() -{ - renderBothImages(); - drawPostFx(); - drawHUD(); -} -void RenderingCoreAnaglyph::setupMaterial(int color_mask) +/// SetColorMaskStep step + +SetColorMaskStep::SetColorMaskStep(int _color_mask) + : color_mask(_color_mask) +{} + +void SetColorMaskStep::run(PipelineContext &context) { - video::SOverrideMaterial &mat = driver->getOverrideMaterial(); + video::SOverrideMaterial &mat = context.device->getVideoDriver()->getOverrideMaterial(); mat.reset(); mat.Material.ColorMask = color_mask; mat.EnableFlags = video::EMF_COLOR_MASK; @@ -38,15 +39,53 @@ void RenderingCoreAnaglyph::setupMaterial(int color_mask) scene::ESNRP_SHADOW; } -void RenderingCoreAnaglyph::useEye(bool right) +/// ClearDepthBufferTarget + +ClearDepthBufferTarget::ClearDepthBufferTarget(RenderTarget *_target) : + target(_target) +{} + +void ClearDepthBufferTarget::activate(PipelineContext &context) +{ + target->activate(context); + context.device->getVideoDriver()->clearBuffers(video::ECBF_DEPTH); +} + +ConfigureOverrideMaterialTarget::ConfigureOverrideMaterialTarget(RenderTarget *_upstream, bool _enable) : + upstream(_upstream), enable(_enable) +{ +} + +void ConfigureOverrideMaterialTarget::activate(PipelineContext &context) { - RenderingCoreStereo::useEye(right); - driver->clearBuffers(video::ECBF_DEPTH); - setupMaterial(right ? video::ECP_GREEN | video::ECP_BLUE : video::ECP_RED); + upstream->activate(context); + context.device->getVideoDriver()->getOverrideMaterial().Enabled = enable; } -void RenderingCoreAnaglyph::resetEye() + +void populateAnaglyphPipeline(RenderPipeline *pipeline, Client *client) { - setupMaterial(video::ECP_ALL); - RenderingCoreStereo::resetEye(); + // clear depth buffer every time 3D is rendered + auto step3D = pipeline->own(create3DStage(client, v2f(1.0))); + auto screen = pipeline->createOwned<ScreenTarget>(); + auto clear_depth = pipeline->createOwned<ClearDepthBufferTarget>(screen); + auto enable_override_material = pipeline->createOwned<ConfigureOverrideMaterialTarget>(clear_depth, true); + step3D->setRenderTarget(enable_override_material); + + // left eye + pipeline->addStep(pipeline->createOwned<OffsetCameraStep>(false)); + pipeline->addStep(pipeline->createOwned<SetColorMaskStep>(video::ECP_RED)); + pipeline->addStep(step3D); + + // right eye + pipeline->addStep(pipeline->createOwned<OffsetCameraStep>(true)); + pipeline->addStep(pipeline->createOwned<SetColorMaskStep>(video::ECP_GREEN | video::ECP_BLUE)); + pipeline->addStep(step3D); + + // reset + pipeline->addStep(pipeline->createOwned<OffsetCameraStep>(0.0f)); + pipeline->addStep(pipeline->createOwned<SetColorMaskStep>(video::ECP_ALL)); + + pipeline->addStep(pipeline->createOwned<MapPostFxStep>()); + pipeline->addStep(pipeline->createOwned<DrawHUD>()); } |