mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 01:53:45 +01:00
Move drawing of wield tool into a dedicated step of the pipeline (#13338)
This commit is contained in:
parent
09342c0811
commit
6cd2eea487
@ -635,11 +635,14 @@ void Camera::wield(const ItemStack &item)
|
|||||||
|
|
||||||
void Camera::drawWieldedTool(irr::core::matrix4* translation)
|
void Camera::drawWieldedTool(irr::core::matrix4* translation)
|
||||||
{
|
{
|
||||||
|
// Clear Z buffer so that the wielded tool stays in front of world geometry
|
||||||
|
m_wieldmgr->getVideoDriver()->clearBuffers(video::ECBF_DEPTH);
|
||||||
|
|
||||||
// Draw the wielded node (in a separate scene manager)
|
// Draw the wielded node (in a separate scene manager)
|
||||||
scene::ICameraSceneNode* cam = m_wieldmgr->getActiveCamera();
|
scene::ICameraSceneNode* cam = m_wieldmgr->getActiveCamera();
|
||||||
cam->setAspectRatio(m_cameranode->getAspectRatio());
|
cam->setAspectRatio(m_cameranode->getAspectRatio());
|
||||||
cam->setFOV(72.0*M_PI/180.0);
|
cam->setFOV(72.0*M_PI/180.0);
|
||||||
cam->setNearValue(40); // give wield tool smaller z-depth than the world in most cases.
|
cam->setNearValue(10);
|
||||||
cam->setFarValue(1000);
|
cam->setFarValue(1000);
|
||||||
if (translation != NULL)
|
if (translation != NULL)
|
||||||
{
|
{
|
||||||
|
@ -73,19 +73,20 @@ void populateAnaglyphPipeline(RenderPipeline *pipeline, Client *client)
|
|||||||
step3D->setRenderTarget(enable_override_material);
|
step3D->setRenderTarget(enable_override_material);
|
||||||
|
|
||||||
// left eye
|
// left eye
|
||||||
pipeline->addStep(pipeline->createOwned<OffsetCameraStep>(false));
|
pipeline->addStep<OffsetCameraStep>(false);
|
||||||
pipeline->addStep(pipeline->createOwned<SetColorMaskStep>(video::ECP_RED));
|
pipeline->addStep<SetColorMaskStep>(video::ECP_RED);
|
||||||
pipeline->addStep(step3D);
|
pipeline->addStep(step3D);
|
||||||
|
|
||||||
// right eye
|
// right eye
|
||||||
pipeline->addStep(pipeline->createOwned<OffsetCameraStep>(true));
|
pipeline->addStep<OffsetCameraStep>(true);
|
||||||
pipeline->addStep(pipeline->createOwned<SetColorMaskStep>(video::ECP_GREEN | video::ECP_BLUE));
|
pipeline->addStep<SetColorMaskStep>(video::ECP_GREEN | video::ECP_BLUE);
|
||||||
pipeline->addStep(step3D);
|
pipeline->addStep(step3D);
|
||||||
|
|
||||||
// reset
|
// reset
|
||||||
pipeline->addStep(pipeline->createOwned<OffsetCameraStep>(0.0f));
|
pipeline->addStep<OffsetCameraStep>(0.0f);
|
||||||
pipeline->addStep(pipeline->createOwned<SetColorMaskStep>(video::ECP_ALL));
|
pipeline->addStep<SetColorMaskStep>(video::ECP_ALL);
|
||||||
|
|
||||||
pipeline->addStep(pipeline->createOwned<MapPostFxStep>());
|
pipeline->addStep<DrawWield>();
|
||||||
pipeline->addStep(pipeline->createOwned<DrawHUD>());
|
pipeline->addStep<MapPostFxStep>();
|
||||||
|
pipeline->addStep<DrawHUD>();
|
||||||
}
|
}
|
||||||
|
@ -69,6 +69,7 @@ void populateInterlacedPipeline(RenderPipeline *pipeline, Client *client)
|
|||||||
auto output = pipeline->createOwned<TextureBufferOutput>(buffer, right ? TEXTURE_RIGHT : TEXTURE_LEFT);
|
auto output = pipeline->createOwned<TextureBufferOutput>(buffer, right ? TEXTURE_RIGHT : TEXTURE_LEFT);
|
||||||
pipeline->addStep<SetRenderTargetStep>(step3D, output);
|
pipeline->addStep<SetRenderTargetStep>(step3D, output);
|
||||||
pipeline->addStep(step3D);
|
pipeline->addStep(step3D);
|
||||||
|
pipeline->addStep<DrawWield>();
|
||||||
pipeline->addStep<MapPostFxStep>();
|
pipeline->addStep<MapPostFxStep>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,6 +39,13 @@ void Draw3D::run(PipelineContext &context)
|
|||||||
return;
|
return;
|
||||||
context.hud->drawBlockBounds();
|
context.hud->drawBlockBounds();
|
||||||
context.hud->drawSelectionMesh();
|
context.hud->drawSelectionMesh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawWield::run(PipelineContext &context)
|
||||||
|
{
|
||||||
|
if (m_target)
|
||||||
|
m_target->activate(context);
|
||||||
|
|
||||||
if (context.draw_wield_tool)
|
if (context.draw_wield_tool)
|
||||||
context.client->getCamera()->drawWieldedTool();
|
context.client->getCamera()->drawWieldedTool();
|
||||||
}
|
}
|
||||||
@ -144,6 +151,7 @@ void populatePlainPipeline(RenderPipeline *pipeline, Client *client)
|
|||||||
auto downscale_factor = getDownscaleFactor();
|
auto downscale_factor = getDownscaleFactor();
|
||||||
auto step3D = pipeline->own(create3DStage(client, downscale_factor));
|
auto step3D = pipeline->own(create3DStage(client, downscale_factor));
|
||||||
pipeline->addStep(step3D);
|
pipeline->addStep(step3D);
|
||||||
|
pipeline->addStep<DrawWield>();
|
||||||
pipeline->addStep<MapPostFxStep>();
|
pipeline->addStep<MapPostFxStep>();
|
||||||
|
|
||||||
step3D = addUpscaling(pipeline, step3D, downscale_factor);
|
step3D = addUpscaling(pipeline, step3D, downscale_factor);
|
||||||
|
@ -38,6 +38,19 @@ private:
|
|||||||
RenderTarget *m_target {nullptr};
|
RenderTarget *m_target {nullptr};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class DrawWield : public RenderStep
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void setRenderSource(RenderSource *) override {}
|
||||||
|
virtual void setRenderTarget(RenderTarget *target) override { m_target = target; }
|
||||||
|
|
||||||
|
virtual void reset(PipelineContext &context) override {}
|
||||||
|
virtual void run(PipelineContext &context) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
RenderTarget *m_target {nullptr};
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implements a pipeline step that renders the game HUD
|
* Implements a pipeline step that renders the game HUD
|
||||||
*/
|
*/
|
||||||
|
@ -73,6 +73,7 @@ void populateSideBySidePipeline(RenderPipeline *pipeline, Client *client, bool h
|
|||||||
auto output = pipeline->createOwned<TextureBufferOutput>(buffer, right ? TEXTURE_RIGHT : TEXTURE_LEFT);
|
auto output = pipeline->createOwned<TextureBufferOutput>(buffer, right ? TEXTURE_RIGHT : TEXTURE_LEFT);
|
||||||
pipeline->addStep<SetRenderTargetStep>(step3D, output);
|
pipeline->addStep<SetRenderTargetStep>(step3D, output);
|
||||||
pipeline->addStep(step3D);
|
pipeline->addStep(step3D);
|
||||||
|
pipeline->addStep<DrawWield>();
|
||||||
pipeline->addStep<MapPostFxStep>();
|
pipeline->addStep<MapPostFxStep>();
|
||||||
pipeline->addStep<DrawHUD>();
|
pipeline->addStep<DrawHUD>();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user