1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-14 06:40:40 +00:00
OpenMW/apps/openmw/mwrender/pingpongcanvas.hpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

87 lines
2.7 KiB
C++
Raw Normal View History

2022-05-13 18:58:00 -07:00
#ifndef OPENMW_MWRENDER_PINGPONGCANVAS_H
#define OPENMW_MWRENDER_PINGPONGCANVAS_H
#include <array>
#include <optional>
#include <osg/FrameBufferObject>
#include <osg/Geometry>
#include <osg/Texture2D>
#include <components/fx/technique.hpp>
2022-07-22 20:41:08 -07:00
#include "luminancecalculator.hpp"
2022-05-13 18:58:00 -07:00
namespace Shader
{
class ShaderManager;
}
namespace MWRender
{
class PingPongCanvas : public osg::Geometry
{
public:
PingPongCanvas(
Shader::ShaderManager& shaderManager, const std::shared_ptr<LuminanceCalculator>& luminanceCalculator);
2022-05-13 18:58:00 -07:00
void drawGeometry(osg::RenderInfo& renderInfo) const;
2022-05-13 18:58:00 -07:00
void drawImplementation(osg::RenderInfo& renderInfo) const override;
2022-05-13 18:58:00 -07:00
void dirty() { mDirty = true; }
2022-05-13 18:58:00 -07:00
void setDirtyAttachments(const std::vector<fx::Types::RenderTarget>& attachments)
{
mDirtyAttachments = attachments;
}
const fx::DispatchArray& getPasses() { return mPasses; }
2022-05-13 18:58:00 -07:00
void setPasses(fx::DispatchArray&& passes);
2022-05-13 18:58:00 -07:00
void setMask(bool underwater, bool exterior);
2022-05-13 18:58:00 -07:00
void setTextureScene(osg::ref_ptr<osg::Texture> tex) { mTextureScene = tex; }
2022-05-13 18:58:00 -07:00
void setTextureDepth(osg::ref_ptr<osg::Texture> tex) { mTextureDepth = tex; }
2022-05-13 18:58:00 -07:00
void setTextureNormals(osg::ref_ptr<osg::Texture> tex) { mTextureNormals = tex; }
2022-05-13 18:58:00 -07:00
2023-11-10 08:02:53 -08:00
void setTextureDistortion(osg::ref_ptr<osg::Texture> tex) { mTextureDistortion = tex; }
void setCalculateAvgLum(bool enabled) { mAvgLum = enabled; }
2022-05-13 18:58:00 -07:00
void setPostProcessing(bool enabled) { mPostprocessing = enabled; }
2022-05-13 18:58:00 -07:00
const osg::ref_ptr<osg::Texture>& getSceneTexture(size_t frameId) const { return mTextureScene; }
2022-05-13 18:58:00 -07:00
private:
bool mAvgLum = false;
bool mPostprocessing = false;
2022-05-13 18:58:00 -07:00
fx::DispatchArray mPasses;
2024-01-03 09:10:03 +04:00
fx::FlagsType mMask = 0;
2022-05-13 18:58:00 -07:00
osg::ref_ptr<osg::Program> mFallbackProgram;
2022-06-21 15:55:06 +00:00
osg::ref_ptr<osg::Program> mMultiviewResolveProgram;
2022-05-13 18:58:00 -07:00
osg::ref_ptr<osg::StateSet> mFallbackStateSet;
2022-06-21 15:55:06 +00:00
osg::ref_ptr<osg::StateSet> mMultiviewResolveStateSet;
2022-05-13 18:58:00 -07:00
osg::ref_ptr<osg::Texture> mTextureScene;
osg::ref_ptr<osg::Texture> mTextureDepth;
osg::ref_ptr<osg::Texture> mTextureNormals;
2023-11-10 08:02:53 -08:00
osg::ref_ptr<osg::Texture> mTextureDistortion;
2022-05-13 18:58:00 -07:00
mutable bool mDirty = false;
mutable std::vector<fx::Types::RenderTarget> mDirtyAttachments;
2022-06-21 15:55:06 +00:00
mutable osg::ref_ptr<osg::Viewport> mRenderViewport;
mutable osg::ref_ptr<osg::FrameBufferObject> mMultiviewResolveFramebuffer;
mutable osg::ref_ptr<osg::FrameBufferObject> mDestinationFBO;
mutable std::array<osg::ref_ptr<osg::FrameBufferObject>, 3> mFbos;
mutable std::shared_ptr<LuminanceCalculator> mLuminanceCalculator;
2022-05-13 18:58:00 -07:00
};
}
#endif