Rebel Fork Framework
Urho3D::RenderBufferManager Class Reference

Class that manages all render buffers within viewport and viewport itself. More...

#include <Urho3D/RenderPipeline/RenderBufferManager.h>

Inheritance diagram for Urho3D::RenderBufferManager:
Urho3D::Object Urho3D::RefCounted

Public Member Functions

 RenderBufferManager (RenderPipelineInterface *renderPipeline)
 
void SetSettings (const RenderBufferManagerSettings &settings)
 
void SetFrameSettings (const RenderBufferManagerFrameSettings &frameSettings)
 
void OnViewportDefined (RenderSurface *renderTarget, const IntRect &viewportRect)
 
SharedPtr< RenderBufferCreateColorBuffer (const RenderBufferParams &params, const Vector2 &size=Vector2::ONE)
 
void SwapColorBuffers (bool synchronizeContents)
 
PipelineState * GetQuadPipelineState (StaticPipelineStateId id)
 Return pipeline state for fullscreen quad rendering for current output.
 
void DrawQuad (ea::string_view debugComment, const DrawQuadParams &params, bool flipVertical=false)
 Render fullscreen quad with custom parameters into currently bound render buffer.
 
void DrawViewportQuad (ea::string_view debugComment, StaticPipelineStateId pipelineStateId, ea::span< const ShaderResourceDesc > resources, ea::span< const ShaderParameterDesc > parameters, bool flipVertical=false)
 Render fullscreen quad into currently bound viewport-sized render buffer.
 
void DrawFeedbackViewportQuad (ea::string_view debugComment, StaticPipelineStateId pipelineStateId, ea::span< const ShaderResourceDesc > resources, ea::span< const ShaderParameterDesc > parameters, bool flipVertical=false)
 
void DrawTextureRegion (ea::string_view debugComment, RawTexture *sourceTexture, const IntRect &sourceRect, ColorSpaceTransition mode=ColorSpaceTransition::None, bool flipVertical=false)
 Draw region of input texture into into currently bound render buffer. sRGB is taken into account.
 
void DrawTexture (ea::string_view debugComment, RawTexture *sourceTexture, ColorSpaceTransition mode=ColorSpaceTransition::None, bool flipVertical=false)
 Draw input texture into into currently bound render buffer. sRGB is taken into account.
 
RenderBufferGetDepthStencilOutput () const
 Return depth-stencil buffer. Stays the same during the frame.
 
RenderBufferGetColorOutput () const
 Return color render buffer. Changes on SwapColorBuffers.
 
RawTexture * GetDepthStencilTexture () const
 
RawTexture * GetSecondaryColorTexture () const
 
IntVector2 GetOutputSize () const
 Return size of output region (not size of output texture itself).
 
Vector2 GetInvOutputSize () const
 
Vector4 GetDefaultClipToUVSpaceOffsetAndScale () const
 Return identity offset and scale used to convert clip space to UV space.
 
TextureFormat GetOutputColorFormat () const
 
TextureFormat GetOutputDepthStencilFormat () const
 
bool IsLinearColorSpace () const
 
unsigned GetOutputMultiSample () const
 
const RenderBufferManagerSettingsGetSettings () const
 
void SetRenderTargetsRect (const IntRect &viewportRect, RenderBuffer *depthStencilBuffer, ea::span< RenderBuffer *const > colorBuffers, bool readOnlyDepth=false, CubeMapFace face=FACE_POSITIVE_X)
 
void SetRenderTargets (RenderBuffer *depthStencilBuffer, ea::span< RenderBuffer *const > colorBuffers, bool readOnlyDepth=false, CubeMapFace face=FACE_POSITIVE_X)
 
void SetRenderTargetsRect (const IntRect &viewportRect, RenderBuffer *depthStencilBuffer, std::initializer_list< RenderBuffer * > colorBuffers, bool readOnlyDepth=false, CubeMapFace face=FACE_POSITIVE_X)
 
void SetRenderTargets (RenderBuffer *depthStencilBuffer, std::initializer_list< RenderBuffer * > colorBuffers, bool readOnlyDepth=false, CubeMapFace face=FACE_POSITIVE_X)
 
void SetOutputRenderTargetsRect (const IntRect &viewportRect, bool readOnlyDepth=false)
 
void SetOutputRenderTargets (bool readOnlyDepth=false)
 
void ClearDepthStencil (RenderBuffer *depthStencilBuffer, ClearTargetFlags flags, float depth, unsigned stencil, CubeMapFace face=FACE_POSITIVE_X)
 
void ClearColor (RenderBuffer *colorBuffer, const Color &color, CubeMapFace face=FACE_POSITIVE_X)
 
void ClearOutputRect (const IntRect &viewportRect, ClearTargetFlags flags, const Color &color, float depth, unsigned stencil)
 Clears currently writable color output if more than one color buffers are used.
 
void ClearOutput (ClearTargetFlags flags, const Color &color, float depth, unsigned stencil)
 
void ClearOutput (const Color &color, float depth, unsigned stencil)
 
StaticPipelineStateId CreateQuadPipelineState (GraphicsPipelineStateDesc desc)
 
StaticPipelineStateId CreateQuadPipelineState (BlendMode blendMode, const ea::string &shaderName, const ea::string &shaderDefines, ea::span< const NamedSamplerStateDesc > samplers)
 
- Public Member Functions inherited from Urho3D::Object
 Object (Context *context)
 Construct.
 
 ~Object () override
 Destruct. Clean up self from event sender & receiver structures.
 
virtual StringHash GetType () const =0
 
virtual const ea::string & GetTypeName () const =0
 
virtual const TypeInfoGetTypeInfo () const =0
 Return type info.
 
virtual void OnEvent (Object *sender, StringHash eventType, VariantMap &eventData)
 Handle event.
 
virtual void SerializeInBlock (Archive &archive)
 Serialize content from/to archive. May throw ArchiveException.
 
bool IsInstanceOf (StringHash type) const
 Check current instance is type of specified type.
 
bool IsInstanceOf (const TypeInfo *typeInfo) const
 Check current instance is type of specified type.
 
template<typename T >
bool IsInstanceOf () const
 Check current instance is type of specified class.
 
template<typename T >
T * Cast ()
 Cast the object to specified most derived class.
 
template<typename T >
const T * Cast () const
 Cast the object to specified most derived class.
 
void SubscribeToEventManual (StringHash eventType, EventHandler *handler)
 Subscribe to an event that can be sent by any sender.
 
void SubscribeToEventManual (Object *sender, StringHash eventType, EventHandler *handler)
 Subscribe to a specific sender's event.
 
template<class T >
void SubscribeToEvent (StringHash eventType, T handler)
 Subscribe to an event that can be sent by any sender.
 
template<class T >
void SubscribeToEvent (Object *sender, StringHash eventType, T handler)
 Subscribe to a specific sender's event.
 
void UnsubscribeFromEvent (StringHash eventType)
 Unsubscribe from an event.
 
void UnsubscribeFromEvent (Object *sender, StringHash eventType)
 Unsubscribe from a specific sender's event.
 
void UnsubscribeFromEvents (Object *sender)
 Unsubscribe from a specific sender's events.
 
void UnsubscribeFromAllEvents ()
 Unsubscribe from all events.
 
void UnsubscribeFromAllEventsExcept (const ea::vector< StringHash > &exceptions)
 Unsubscribe from all events except those listed.
 
void UnsubscribeFromAllEventsExcept (const ea::vector< Object * > &exceptions)
 Unsubscribe from all events except those with listed senders.
 
void SendEvent (StringHash eventType)
 Send event to all subscribers.
 
void SendEvent (StringHash eventType, VariantMap &eventData)
 Send event with parameters to all subscribers.
 
VariantMapGetEventDataMap () const
 Return a preallocated map for event data. Used for optimization to avoid constant re-allocation of event data maps.
 
template<typename... Args>
void SendEvent (StringHash eventType, const Args &... args)
 Send event with variadic parameter pairs to all subscribers. The parameters are (paramID, paramValue) pairs.
 
ContextGetContext () const
 Return execution context.
 
const VariantGetGlobalVar (StringHash key) const
 
const VariantMapGetGlobalVars () const
 
void SetGlobalVar (StringHash key, const Variant &value)
 
ObjectGetSubsystem (StringHash type) const
 Return subsystem by type.
 
ObjectGetEventSender () const
 Return active event sender. Null outside event handling.
 
EventHandlerGetEventHandler () const
 Return active event handler. Null outside event handling.
 
bool HasSubscribedToEvent (StringHash eventType) const
 Return whether has subscribed to an event without specific sender.
 
bool HasSubscribedToEvent (Object *sender, StringHash eventType) const
 Return whether has subscribed to a specific sender's event.
 
bool HasEventHandlers () const
 Return whether has subscribed to any event.
 
template<class T >
T * GetSubsystem () const
 Template version of returning a subsystem.
 
const ea::string & GetCategory () const
 
void SendEvent (StringHash eventType, const VariantMap &eventData)
 Send event with parameters to all subscribers.
 
void SetBlockEvents (bool block)
 Block object from sending and receiving events.
 
bool GetBlockEvents () const
 Return sending and receiving events blocking status.
 
- Public Member Functions inherited from Urho3D::RefCounted
 RefCounted ()
 Construct. Allocate the reference count structure and set an initial self weak reference.
 
virtual ~RefCounted ()
 Destruct. Mark as expired and also delete the reference count structure if no outside weak references exist.
 
 RefCounted (const RefCounted &rhs)=delete
 Prevent copy construction.
 
RefCountedoperator= (const RefCounted &rhs)=delete
 Prevent assignment.
 
int AddRef ()
 
int ReleaseRef ()
 
int Refs () const
 
int WeakRefs () const
 
RefCountRefCountPtr () const
 Return pointer to the reference count structure.
 
bool HasScriptObject () const
 Return true if script runtime object wrapping this native object exists.
 
bool IsScriptStrongRef () const
 Return true if script reference is strong.
 

Private Member Functions

 URHO3D_OBJECT (RenderBufferManager, Object)
 
void InitializePipelineStates ()
 
void ResetCachedRenderBuffers ()
 
void CopyTextureRegion (ea::string_view debugComment, RawTexture *sourceTexture, const IntRect &sourceRect, RenderTargetView destinationSurface, const IntRect &destinationRect, ColorSpaceTransition mode, bool flipVertical)
 
void OnPipelineStatesInvalidated ()
 
void OnRenderBegin (const CommonFrameInfo &frameInfo)
 
void OnRenderEnd (const CommonFrameInfo &frameInfo)
 

Private Attributes

RenderPipelineInterfacerenderPipeline_ {}
 
Graphicsgraphics_ {}
 
Rendererrenderer_ {}
 
RenderDevice * renderDevice_ {}
 
RenderContext * renderContext_ {}
 
RenderPipelineDebuggerdebugger_ {}
 
SharedPtr< DrawCommandQueue > drawQueue_
 
RenderBufferManagerSettings settings_
 
StaticPipelineStateCache pipelineStates_
 
SharedPtr< RenderBufferviewportColorBuffer_
 
SharedPtr< RenderBufferviewportDepthBuffer_
 
StaticPipelineStateId copyTexturePipelineState_ {}
 
StaticPipelineStateId copyGammaToLinearTexturePipelineState_ {}
 
StaticPipelineStateId copyLinearToGammaTexturePipelineState_ {}
 
StaticPipelineStateId clearPipelineState_ [MaxClearVariants] {}
 
SharedPtr< RenderBuffersubstituteRenderBuffers_ [2]
 
SharedPtr< RenderBuffersubstituteDepthBuffer_
 
RenderBufferParams colorOutputParams_
 
RenderBufferParams depthStencilOutputParams_
 
bool linearColorSpace_ {}
 
RenderBufferManagerFrameSettings frameSettings_
 
float timeStep_ {}
 
IntRect viewportRect_
 
RenderBufferdepthStencilBuffer_ {}
 
RenderBufferwriteableColorBuffer_ {}
 
RenderBufferreadableColorBuffer_ {}
 
bool flipColorBuffersNextTime_ {}
 

Static Private Attributes

static constexpr unsigned MaxClearVariants = (CLEAR_COLOR | CLEAR_DEPTH | CLEAR_STENCIL).AsInteger() + 1
 

Additional Inherited Members

- Static Public Member Functions inherited from Urho3D::Object
static const TypeInfoGetTypeInfoStatic ()
 Return type info static.
 
- Protected Attributes inherited from Urho3D::Object
WeakPtr< Contextcontext_
 Execution context.
 

Detailed Description

Class that manages all render buffers within viewport and viewport itself.

Member Function Documentation

◆ ClearDepthStencil()

void Urho3D::RenderBufferManager::ClearDepthStencil ( RenderBuffer depthStencilBuffer,
ClearTargetFlags  flags,
float  depth,
unsigned  stencil,
CubeMapFace  face = FACE_POSITIVE_X 
)

Clear color, depth and/or stencil render target(s). If rectangle is specified, only part of render target is cleared. Changes currently bound depth-stencil and render targets.

◆ CreateQuadPipelineState()

StaticPipelineStateId Urho3D::RenderBufferManager::CreateQuadPipelineState ( GraphicsPipelineStateDesc  desc)

Create pipeline states for fullscreen quad rendering

◆ DrawFeedbackViewportQuad()

void Urho3D::RenderBufferManager::DrawFeedbackViewportQuad ( ea::string_view  debugComment,
StaticPipelineStateId  pipelineStateId,
ea::span< const ShaderResourceDesc resources,
ea::span< const ShaderParameterDesc parameters,
bool  flipVertical = false 
)

Render fullscreen quad into currently bound viewport-sized render buffer. Current secondary color render buffer is passed as diffuse texture input.

◆ GetDepthStencilTexture()

RawTexture* Urho3D::RenderBufferManager::GetDepthStencilTexture ( ) const
inline

Return readable depth texture. It's not allowed to write depth and read it from shader input simultaneously for same depth-stencil buffer.

◆ GetSecondaryColorTexture()

RawTexture* Urho3D::RenderBufferManager::GetSecondaryColorTexture ( ) const
inline

Return secondary color render buffer texture that can be used while writing to color render buffer. Texture content is defined at the moment of previous SwapColorBuffers. Content is undefined if SwapColorBuffers was not called during current frame.

◆ OnPipelineStatesInvalidated()

void Urho3D::RenderBufferManager::OnPipelineStatesInvalidated ( )
private

RenderPipeline callbacks

◆ SetRenderTargetsRect()

void Urho3D::RenderBufferManager::SetRenderTargetsRect ( const IntRect viewportRect,
RenderBuffer depthStencilBuffer,
ea::span< RenderBuffer *const >  colorBuffers,
bool  readOnlyDepth = false,
CubeMapFace  face = FACE_POSITIVE_X 
)

Set depth-stencil and color buffers. At least one color or depth-stencil buffer should be set. All render buffers should have same multisample levels. If rectangle is not specified, all render buffers should have same size and viewport rectanges.

◆ SwapColorBuffers()

void Urho3D::RenderBufferManager::SwapColorBuffers ( bool  synchronizeContents)

Swap color buffers used to render to and to read from. Invalid if SupportOutputColorReadWrite is not requested.

Member Data Documentation

◆ frameSettings_

RenderBufferManagerFrameSettings Urho3D::RenderBufferManager::frameSettings_
private

State of current frame

◆ renderPipeline_

RenderPipelineInterface* Urho3D::RenderBufferManager::renderPipeline_ {}
private

External dependencies

◆ settings_

RenderBufferManagerSettings Urho3D::RenderBufferManager::settings_
private

Cached between frames


The documentation for this class was generated from the following files: