#pragma once #include "IEngine.h" #include "IShader.h" #include "ITexture.h" #include "IRenderCommandNode.h" #include "IResourceFactory.h" #include "IPingPongBuffer.h" class PingPongBuffer : public IPingPongBuffer { public: PingPongBuffer(IEngine& argEngine); virtual ~PingPongBuffer(); virtual ITexture& get_InputTexture() const; virtual void set_InputTexture(ITexture& argTexture); virtual ITexture& get_OutputTexture() const; virtual const PingPongBufferDescription& get_Descriptor() const; virtual void set_Descriptor(const PingPongBufferDescription& argValue); virtual IRenderCommandNode& get_RootNode() const; virtual IRenderCommandNode& get_PreProcessNode() const; protected: void Rebuild(const PingPongBufferDescription& argValue); private: IEngine& m_Engine; PingPongBufferDescription m_Descriptor; ITexture* m_InputTexture; IRenderCommandNode* m_RootNode; IRenderCommandNode* m_PreProcessNode; IRenderCommandNode* m_RenderTargetNodeA; IRenderCommandNode* m_RenderTargetNodeB; IShader* m_ShaderA; IShader* m_ShaderB; IShader* m_ShaderPreProcess; IRenderTargetTexture* m_TextureA; IRenderTargetTexture* m_TextureB; IGeometryBuffer* m_ScreenQuad; IShaderParameterCollection* m_ShaderParameterA; IShaderParameterCollection* m_ShaderParameterB; IShaderParameterCollection* m_ShaderParameterPreProcess; };