OGRE-Next
3.0.0
Object-Oriented Graphics Rendering Engine
|
#include <OgreVulkanWindow.h>
Public Types | |
enum | Backend { BackendX11 = 1u << 0u } |
enum | SwapchainStatus { SwapchainAcquired , SwapchainUsedInRendering , SwapchainPendingSwap , SwapchainReleased } |
Public Member Functions | |
VulkanWindowSwapChainBased (const String &title, uint32 width, uint32 height, bool fullscreenMode) | |
~VulkanWindowSwapChainBased () override | |
void | _swapBuffers (VkSemaphore queueFinishSemaphore) |
Actually performs present. More... | |
void | acquireNextSwapchain () |
bool | canDownloadData () const override |
Returns true if you can download to CPU (i.e. More... | |
PixelFormatGpu | chooseSurfaceFormat (bool hwGamma) |
void | createSwapchain () |
void | destroy () override |
void | destroySwapchain () |
void | getCustomAttribute (IdString name, void *pData) override |
VkSemaphore | getImageAcquiredSemaphore () |
Returns null if getImageAcquiredSemaphore has already been called during this frame. More... | |
size_t | getNumSwapchains () const |
VkImage | getSwapchainImage (size_t idx) const |
bool | isClosed () const override |
Indicates whether the window has been closed by the user. More... | |
void | parseSharedParams (const NameValuePairList *miscParams) |
void | setVSync (bool vSync, uint32 vSyncInterval) override |
Turns VSync on/off. More... | |
void | setWantsToDownload (bool bWantsToDownload) override |
On Metal you must call this function and set it to true in order to take pictures. More... | |
void | swapBuffers () override |
Tells our VulkanDevice that the next commitAndNextCommandBuffer call should present us Calling swapBuffers during the command buffer that is rendering to us is key for good performance; otherwise Ogre may split the commands that render to this window and the command that presents this window into two queue submissions. More... | |
Public Member Functions inherited from Ogre::VulkanWindow | |
VulkanWindow (const String &title, uint32 width, uint32 height, bool fullscreenMode) | |
void | _initialize (TextureGpuManager *textureGpuManager) override |
virtual void | _initialize (TextureGpuManager *textureGpuManager, const NameValuePairList *miscParams)=0 |
void | _setDevice (VulkanDevice *device) |
Public Member Functions inherited from Ogre::Window | |
Window (const String &title, uint32 widthPt, uint32 heightPt, bool fullscreenMode) | |
virtual | ~Window () |
void | _setPrimary () |
Indicates that this is the primary window. More... | |
virtual void | _setVisible (bool visible)=0 |
Internal method to notify the window it has been obscured or minimized. More... | |
bool | getBorderless () const |
TextureGpu * | getDepthBuffer () const |
uint32 | getFrequencyDenominator () const |
uint32 | getFrequencyNumerator () const |
uint32 | getHeight () const |
virtual void | getMetrics (uint32 &width, uint32 &height, int32 &left, int32 &top) const |
Overloaded version of getMetrics from RenderTarget, including extra details specific to windowing systems. More... | |
PixelFormatGpu | getPixelFormat () const |
uint32 | getRequestedHeightPt () const |
uint32 | getRequestedWidthPt () const |
SampleDescription | getSampleDescription () const |
TextureGpu * | getStencilBuffer () const |
TextureGpu * | getTexture () const |
WARNING: Attempting to change the TextureGpu (e.g. More... | |
const String & | getTitle () const |
virtual float | getViewPointToPixelScale () const |
Many windowing systems that support HiDPI displays use special points to specify size of the windows and controls, so that windows and controls with hardcoded sizes does not become too small on HiDPI displays. More... | |
bool | getVSync () const |
uint32 | getVSyncInterval () const |
uint32 | getWidth () const |
bool | isFocused () const |
bool | isFullscreen () const |
Returns true if we are currently in fullscreen mode. More... | |
virtual bool | isHidden () const =0 |
Indicates whether the window was set to hidden (not displayed) More... | |
virtual bool | isManualSwapRelease () const |
Returns the value set by setManualSwapRelease when supported. More... | |
bool | isMultisample () const |
bool | isPrimary () const |
virtual bool | isVisible () const =0 |
virtual void | performManualRelease () |
See Window::setManualSwapRelease. More... | |
virtual void | reposition (int32 leftPt, int32 topPt)=0 |
virtual void | requestFullscreenSwitch (bool goFullscreen, bool borderless, uint32 monitorIdx, uint32 widthPt, uint32 heightPt, uint32 frequencyNumerator, uint32 frequencyDenominator) |
Requests to toggle between fullscreen and windowed mode. More... | |
virtual void | requestResolution (uint32 widthPt, uint32 heightPt) |
Requests a change in resolution. More... | |
virtual void | setBorderless (bool borderless) |
virtual void | setFocused (bool focused) |
virtual void | setFsaa (const String &fsaa) |
Set the FSAA mode to be used if hardware support it. More... | |
virtual void | setHidden (bool hidden)=0 |
Hide (or show) the window. More... | |
virtual void | setManualSwapRelease (bool bManualRelease) |
Metal doesn't want us to hold on to a drawable after presenting. More... | |
virtual void | setTitle (const String &title) |
bool | wantsToGoFullscreen () const |
Returns true if we are in windowed mode right now, but want to go fullscreen. More... | |
bool | wantsToGoWindowed () const |
Returns true if we are in fullscreen mode right now, but want to go windowed mode. More... | |
virtual void | windowMovedOrResized () |
Notify that the window has been resized. More... | |
Public Attributes | |
bool | mCanDownloadData |
bool | mClosed |
bool | mEnablePreTransform |
bool | mLowestLatencyVSync |
bool | mRebuildingSwapchain |
bool | mSuboptimal |
VkSurfaceKHR | mSurfaceKHR |
VkSwapchainKHR | mSwapchain |
FastArray< VkImage > | mSwapchainImages |
VkSemaphore | mSwapchainSemaphore |
Note: We need a semaphore per frame, not per swapchain. More... | |
SwapchainStatus | mSwapchainStatus |
Enumerator | |
---|---|
SwapchainAcquired | We already called VulkanWindowSwapChainBased::acquireNextSwapchain. Can only go into this state if we're coming from SwapchainReleased |
SwapchainUsedInRendering | We already called VulkanWindowSwapChainBased::getImageAcquiredSemaphore. Further calls to getImageAcquiredSemaphore will return null. Ogre is rendering or intends to into this swapchain. Can only go into this state if we're coming from SwapchainAcquired |
SwapchainPendingSwap | We've come from SwapchainUsedInRendering and are waiting for VulkanDevice::commitAndNextCommandBuffer to present us. |
SwapchainReleased | We don't own a swapchain. Ogre cannot render to this window. This status should not last long unless we're not initialized yet. |
Ogre::VulkanWindowSwapChainBased::VulkanWindowSwapChainBased | ( | const String & | title, |
uint32 | width, | ||
uint32 | height, | ||
bool | fullscreenMode | ||
) |
|
override |
void Ogre::VulkanWindowSwapChainBased::_swapBuffers | ( | VkSemaphore | queueFinishSemaphore | ) |
Actually performs present.
Called by VulkanDevice::commitAndNextCommandBuffer
queueFinishSemaphore | Makes our present request wait until the Queue is done executing before we can present |
void Ogre::VulkanWindowSwapChainBased::acquireNextSwapchain | ( | ) |
|
overridevirtual |
Returns true if you can download to CPU (i.e.
transfer it via AsyncTextureTicket) If it returns false, attempting to do so could result in a crash
See Window::setWantsToDownload See Window::setManualSwapRelease
Reimplemented from Ogre::Window.
PixelFormatGpu Ogre::VulkanWindowSwapChainBased::chooseSurfaceFormat | ( | bool | hwGamma | ) |
void Ogre::VulkanWindowSwapChainBased::createSwapchain | ( | ) |
|
overridevirtual |
Implements Ogre::Window.
Reimplemented in Ogre::VulkanXcbWindow, Ogre::VulkanWin32Window, and Ogre::VulkanAndroidWindow.
void Ogre::VulkanWindowSwapChainBased::destroySwapchain | ( | ) |
|
overridevirtual |
Reimplemented from Ogre::Window.
Reimplemented in Ogre::VulkanXcbWindow, Ogre::VulkanAndroidWindow, and Ogre::VulkanWin32Window.
VkSemaphore Ogre::VulkanWindowSwapChainBased::getImageAcquiredSemaphore | ( | ) |
Returns null if getImageAcquiredSemaphore has already been called during this frame.
|
inline |
References mSwapchainImages, and Ogre::FastArray< T >::size().
|
inline |
References mSwapchainImages.
|
overridevirtual |
Indicates whether the window has been closed by the user.
Implements Ogre::Window.
void Ogre::VulkanWindowSwapChainBased::parseSharedParams | ( | const NameValuePairList * | miscParams | ) |
|
overridevirtual |
Turns VSync on/off.
vSync | |
vSyncInterval | When true, specifies how often the screen should be updated. e.g. at 60hz: vSyncInterval = 1 then update at 60hz vSyncInterval = 2 then update at 30hz vSyncInterval = 3 then update at 15hz vSyncInterval = 4 then update at 7.5hz |
If the 31st bit is set, i.e. 0x80000000, then lowest latency mode, aka mailbox, will be used (which doesn't limit the framerate)
Reimplemented from Ogre::Window.
|
overridevirtual |
On Metal you must call this function and set it to true in order to take pictures.
If you no longer need that functionality, set it to false to improve performance
Reimplemented from Ogre::Window.
|
overridevirtual |
Tells our VulkanDevice that the next commitAndNextCommandBuffer call should present us Calling swapBuffers during the command buffer that is rendering to us is key for good performance; otherwise Ogre may split the commands that render to this window and the command that presents this window into two queue submissions.
Implements Ogre::Window.
bool Ogre::VulkanWindowSwapChainBased::mCanDownloadData |
bool Ogre::VulkanWindowSwapChainBased::mClosed |
bool Ogre::VulkanWindowSwapChainBased::mEnablePreTransform |
bool Ogre::VulkanWindowSwapChainBased::mLowestLatencyVSync |
bool Ogre::VulkanWindowSwapChainBased::mRebuildingSwapchain |
bool Ogre::VulkanWindowSwapChainBased::mSuboptimal |
VkSurfaceKHR Ogre::VulkanWindowSwapChainBased::mSurfaceKHR |
VkSwapchainKHR Ogre::VulkanWindowSwapChainBased::mSwapchain |
FastArray<VkImage> Ogre::VulkanWindowSwapChainBased::mSwapchainImages |
Referenced by getNumSwapchains(), and getSwapchainImage().
VkSemaphore Ogre::VulkanWindowSwapChainBased::mSwapchainSemaphore |
Note: We need a semaphore per frame, not per swapchain.
Makes Queue execution wait until the acquired image is done presenting
SwapchainStatus Ogre::VulkanWindowSwapChainBased::mSwapchainStatus |