aboutsummaryrefslogtreecommitdiff
path: root/src/client/render/anaglyph.cpp
diff options
context:
space:
mode:
authorx2048 <codeforsmile@gmail.com>2022-09-06 08:25:18 +0200
committerGitHub <noreply@github.com>2022-09-06 08:25:18 +0200
commitff6dcfea82974df6db5a557e31aaddb6bdb7a71f (patch)
tree18bafaedcfdff36a0c0719653b99370b7434b344 /src/client/render/anaglyph.cpp
parent464043b8abdbd936640757604ecb21662592043b (diff)
downloadminetest-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.cpp69
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>());
}