#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< DeviceSwapChain > | GetDeviceSwapChain () 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. | |
Image * | GetCurrentImage () const |
Returns the current image of the swap chain. | |
Image * | GetImage (uint32_t index) const |
const AttachmentId & | GetAttachmentId () const |
Returns the ID used for the SwapChain's attachment. | |
const RHI::SwapChainDescriptor & | GetDescriptor () 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. | |
![]() | |
AZ_RTTI (ImagePoolBase, "{CAC2167A-D65A-493F-A450-FDE2B1A883B1}", 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. | |
![]() | |
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 |
![]() | |
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::XRRenderingInterface * | GetXRSystem () const |
Return the xr system interface. | |
![]() | |
ResultCode | InitImage (Image *image, const ImageDescriptor &descriptor, PlatformMethod platformInitResourceMethod) |
![]() | |
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. | |
![]() | |
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 |
![]() | |
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. | |
![]() | |
AZStd::unordered_map< int, Ptr< DeviceObject > > | m_deviceObjects |
A map of all device-specific objects, indexed by the device index. | |
![]() | |
AZStd::atomic_int | m_useCount = 0 |
Additional Inherited Members | |
![]() | |
template<typename T > | |
static AZ_FORCE_INLINE void | IterateDevices (MultiDevice::DeviceMask deviceMask, T callback) |
![]() | |
using | PlatformMethod = AZStd::function< RHI::ResultCode()> |
//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!//!// | |
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.
|
finaloverridevirtual |
Returns the descriptor provided when initializing the swap chain.
Implements AZ::RHI::ResourcePool.
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().
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
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.
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.
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.
|
finaloverridevirtual |
Shuts down the pool. This method will shutdown all resources associated with the pool.
Implements AZ::RHI::ResourcePool.