Open 3D Engine Atom Gem API Reference 25.05.0
O3DE is an open-source, fully-featured, high-fidelity, modular 3D engine for building games and simulations, available to every industry.
AZ::RHI::SwapChain Class Reference

#include <SwapChain.h>

Inherits AZ::RHI::ImagePoolBase.

Classes

struct  InitImageRequest
 

Public Member Functions

 AZ_CLASS_ALLOCATOR (SwapChain, AZ::SystemAllocator, 0)
 
 AZ_RTTI (SwapChain, "{EB2B3AE5-41C0-4833-ABAD-4D964547029C}", Object)
 
 AZ_RHI_MULTI_DEVICE_OBJECT_GETTER (SwapChain)
 
ResultCode Init (int deviceIndex, const SwapChainDescriptor &descriptor)
 
Ptr< DeviceSwapChainGetDeviceSwapChain () const
 
void Present ()
 Presents the swap chain to the display, and rotates the images.
 
void SetVerticalSyncInterval (uint32_t verticalSyncInterval)
 
ResultCode Resize (const SwapChainDimensions &dimensions)
 
uint32_t GetImageCount () const
 Returns the number of images in the swap chain.
 
ImageGetCurrentImage () const
 Returns the current image of the swap chain.
 
ImageGetImage (uint32_t index) const
 
const AttachmentId & GetAttachmentId () const
 Returns the ID used for the SwapChain's attachment.
 
const RHI::SwapChainDescriptorGetDescriptor () const override final
 Returns the descriptor provided when initializing the swap chain.
 
bool IsExclusiveFullScreenPreferred () const
 Returns True if the swap chain prefers to use exclusive full screen mode.
 
bool GetExclusiveFullScreenState () const
 Returns True if the swap chain prefers exclusive full screen mode and it is currently true, false otherwise.
 
bool SetExclusiveFullScreenState (bool fullScreenState)
 Return True if the swap chain prefers exclusive full screen mode and a transition happened, false otherwise.
 
void ProcessRecreation ()
 
void Shutdown () override final
 Shuts down the pool. This method will shutdown all resources associated with the pool.
 
- Public Member Functions inherited from AZ::RHI::ImagePoolBase
 AZ_RTTI (ImagePoolBase, "{CAC2167A-D65A-493F-A450-FDE2B1A883B1}", ResourcePool)
 
- Public Member Functions inherited from AZ::RHI::ResourcePool
 AZ_RTTI (ResourcePool, "{BAE5442C-A312-4133-AE80-1200753A7C3E}", MultiDeviceObject)
 
template<typename ResourceType >
void ForEach (AZStd::function< void(ResourceType &)> callback)
 
template<typename ResourceType >
void ForEach (AZStd::function< void(const ResourceType &)> callback) const
 
uint32_t GetResourceCount () const
 Returns the number of resources in the pool.
 
- Public Member Functions inherited from AZ::RHI::MultiDeviceObject
 AZ_RTTI (MultiDeviceObject, "{17D34F71-944C-4AF5-9823-627474C4C0A6}", Object)
 
bool IsInitialized () const
 Returns whether the device object is initialized.
 
AZ_FORCE_INLINE bool IsDeviceSet (int deviceIndex) const
 
MultiDevice::DeviceMask GetDeviceMask () const
 
- Public Member Functions inherited from AZ::RHI::Object
 AZ_RTTI (Object, "{E43378F1-2331-4173-94B8-990ED20E6003}")
 
void SetName (const Name &name)
 Sets the name of the object.
 
const Name & GetName () const
 Returns the name set on the object by SetName.
 
uint32_t use_count ()
 Returns the current use count of the object.
 

Protected Member Functions

void ShutdownImages ()
 Shutdown and clear all the images.
 
ResultCode InitImages ()
 Initialized all the images.
 
RHI::XRRenderingInterfaceGetXRSystem () const
 Return the xr system interface.
 
- Protected Member Functions inherited from AZ::RHI::ImagePoolBase
ResultCode InitImage (Image *image, const ImageDescriptor &descriptor, PlatformMethod platformInitResourceMethod)
 
- Protected Member Functions inherited from AZ::RHI::ResourcePool
ResultCode Init (MultiDevice::DeviceMask deviceMask, const PlatformMethod &initMethod)
 
ResultCode InitResource (Resource *resource, const PlatformMethod &initResourceMethod)
 
bool ValidateIsRegistered (const Resource *resource) const
 
bool ValidateIsUnregistered (const Resource *resource) const
 
bool ValidateIsInitialized () const
 Validates that the resource pool is initialized and ready to service requests.
 
- Protected Member Functions inherited from AZ::RHI::MultiDeviceObject
void Init (MultiDevice::DeviceMask deviceMask)
 The derived class should call this method to assign the device.
 
template<typename T >
AZ_FORCE_INLINE void IterateDevices (T callback)
 Helper method that will iterate over all selected devices and call the provided callback.
 
template<typename T , typename U >
AZ_FORCE_INLINE decltype(auto) IterateObjects (U callback)
 
template<typename T , typename U >
AZ_FORCE_INLINE decltype(auto) IterateObjects (U callback) const
 
template<typename T >
AZ_FORCE_INLINE Ptr< T > GetDeviceObject (int deviceIndex) const
 
- Protected Member Functions inherited from AZ::RHI::Object
void add_ref () const
 
void release () const
 

Protected Attributes

bool m_pendingRecreation = false
 Flag indicating if swapchain recreation is needed at the end of the frame.
 
- Protected Attributes inherited from AZ::RHI::MultiDeviceObject
AZStd::unordered_map< int, Ptr< DeviceObject > > m_deviceObjects
 A map of all device-specific objects, indexed by the device index.
 
- Protected Attributes inherited from AZ::RHI::Object
AZStd::atomic_int m_useCount = 0
 

Additional Inherited Members

- Static Public Member Functions inherited from AZ::RHI::MultiDeviceObject
template<typename T >
static AZ_FORCE_INLINE void IterateDevices (MultiDevice::DeviceMask deviceMask, T callback)
 
- Protected Types inherited from AZ::RHI::ResourcePool
using PlatformMethod = AZStd::function< RHI::ResultCode()>
 //!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//
 

Detailed Description

The platform-independent, multi-device swap chain base class. Swap chains contain a "chain" of images which map to a platform-specific window, displayed on a physical monitor. The user is allowed to adjust the swap chain outside of the current FrameScheduler frame. Doing so within a frame scheduler frame results in undefined behavior.

The frame scheduler controls presentation of the swap chain. The user may attach a swap chain to a scope in order to render to the current image.

Although a multi-device resource class, we still enforce single-device behavior, as a DeviceSwapChain is tied to a specific window. This is done by initializing it with a device index, which sets the correspondings bit in the deviceMask. The need for a multi-device class arises from the interoperability within a multi-device context, especially attachments and the FrameGraph.

Member Function Documentation

◆ GetDescriptor()

const RHI::SwapChainDescriptor & AZ::RHI::SwapChain::GetDescriptor ( ) const
finaloverridevirtual

Returns the descriptor provided when initializing the swap chain.

Implements AZ::RHI::ResourcePool.

◆ GetImage()

Image * AZ::RHI::SwapChain::GetImage ( uint32_t  index) const

Returns the image associated with the provided index, where the total number of images is given by GetImageCount().

◆ Init()

ResultCode AZ::RHI::SwapChain::Init ( int  deviceIndex,
const SwapChainDescriptor descriptor 
)

Initializes the swap chain, making it ready for attachment. As the DeviceSwapChain uses multi-device resources on just a single device, it is explicitly initialized with just a deviceIndex

◆ ProcessRecreation()

void AZ::RHI::SwapChain::ProcessRecreation ( )

Recreate the swapchain if it becomes invalid during presenting. This should happen at the end of the frame due to images being used as attachments in the frame graph.

◆ Resize()

ResultCode AZ::RHI::SwapChain::Resize ( const SwapChainDimensions dimensions)

Resizes the display resolution of the swap chain. Ideally, this matches the platform window resolution. Typically, the resize operation will occur in reaction to a platform window size change. Takes effect immediately and results in a GPU pipeline flush.

◆ SetVerticalSyncInterval()

void AZ::RHI::SwapChain::SetVerticalSyncInterval ( uint32_t  verticalSyncInterval)

Sets the vertical sync interval for the swap chain. 0 - No vsync. N - Sync to every N vertical refresh.

A value of 1 syncs to the refresh rate of the monitor.

◆ Shutdown()

void AZ::RHI::SwapChain::Shutdown ( )
finaloverridevirtual

Shuts down the pool. This method will shutdown all resources associated with the pool.

Implements AZ::RHI::ResourcePool.


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