Open 3D Engine Atom Gem API Reference 23.10.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.

Inherited by AZ::DX12::SwapChain, AZ::Metal::SwapChain, AZ::Null::SwapChain, and AZ::Vulkan::SwapChain.


struct  InitImageRequest

Public Member Functions

 AZ_RTTI (SwapChain, "{888B64A5-D956-406F-9C33-CF6A54FC41B0}", Object)
ResultCode Init (RHI::Device &device, const SwapChainDescriptor &descriptor)
 Initializes the swap chain, making it ready for attachment.
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.
uint32_t GetCurrentImageIndex () const
 Returns the current image index of 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.
virtual bool IsExclusiveFullScreenPreferred () const
 Returns True if the swap chain prefers to use exclusive full screen mode.
virtual bool GetExclusiveFullScreenState () const
 Returns True if the swap chain prefers exclusive full screen mode and it is currently true, false otherwise.
virtual bool SetExclusiveFullScreenState (bool fullScreenState)
 Return True if the swap chain prefers exclusive full screen mode and a transition happened, false otherwise.
virtual void ProcessRecreation ()
- Public Member Functions inherited from AZ::RHI::ImagePoolBase
 AZ_RTTI (ImagePoolBase, "{6353E390-C5D2-42FF-8AA9-9AFCD1F2F1B5}", ResourcePool)
- Public Member Functions inherited from AZ::RHI::ResourcePool
 AZ_RTTI (ResourcePool, "{757EB674-25DC-4D00-9808-D3DAF33A4EFE}", DeviceObject)
void Shutdown () override final
 Shuts down the pool. This method will shutdown all resources associated with the pool.
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.
ResourcePoolResolverGetResolver ()
 Returns the resolver for this pool.
const ResourcePoolResolverGetResolver () const
virtual const ResourcePoolDescriptorGetDescriptor () const =0
 Returns the resource pool descriptor.
const HeapMemoryUsageGetHeapMemoryUsage (HeapMemoryLevel heapMemoryLevel) const
 Returns the memory used by this pool for a specific heap type.
const PoolMemoryUsageGetMemoryUsage () const
 Returns the memory used by this pool.
- Public Member Functions inherited from AZ::RHI::DeviceObject
 AZ_RTTI (DeviceObject, "{17D34F71-944C-4AF5-9823-627474C4C0A6}", Object)
bool IsInitialized () const
 Returns whether the device object is initialized.
DeviceGetDevice () 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 ComputeFragmentation () const override
 Fragmentation is not an issue (or measured) for the swapchain image pool.
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
void OnFrameBegin () override
void OnFrameCompile () override
void OnFrameEnd () override
void SetResolver (AZStd::unique_ptr< ResourcePoolResolver > &&resolvePolicy)
virtual void ComputeFragmentation () const =0
ResultCode Init (Device &device, const ResourcePoolDescriptor &descriptor, 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.
bool ValidateNotProcessingFrame () const
 Validates that we are not in the frame processing phase.
- Protected Member Functions inherited from AZ::RHI::DeviceObject
void Init (Device &device)
 The derived class should call this method to assign the device.
void Shutdown () override
 Clears the current bound device to null.
- 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::ResourcePool
PoolMemoryUsage m_memoryUsage
- Protected Attributes inherited from AZ::RHI::Object
AZStd::atomic_int m_useCount = 0

Additional Inherited Members

- Protected Types inherited from AZ::RHI::ResourcePool
using PlatformMethod = AZStd::function< RHI::ResultCode()>
 A simple functor that returns a result code.

Detailed Description

The platform-independent 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.

Member Function Documentation

◆ ComputeFragmentation()

void AZ::RHI::SwapChain::ComputeFragmentation ( ) const

Fragmentation is not an issue (or measured) for the swapchain image pool.

Implements AZ::RHI::ResourcePool.

◆ GetDescriptor()

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

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().

◆ ProcessRecreation()

virtual 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.

Reimplemented in AZ::Vulkan::SwapChain.

◆ 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.

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