OGRE-Next
2.3
Object-Oriented Graphics Rendering Engine
|
#include <OgreVulkanWindow.h>
Public Types | |
enum | Backend { BackendX11 = 1u << 0u } |
enum | SwapchainStatus { SwapchainAcquired , SwapchainUsedInRendering , SwapchainPendingSwap , SwapchainReleased } |
Public Member Functions | |
VulkanWindow (const String &title, uint32 width, uint32 height, bool fullscreenMode) | |
~VulkanWindow () override | |
void | _initialize (TextureGpuManager *textureGpuManager) override |
virtual void | _initialize (TextureGpuManager *textureGpuManager, const NameValuePairList *miscParams)=0 |
void | _setDevice (VulkanDevice *device) |
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... | |
void | _swapBuffers (VkSemaphore queueFinishSemaphore) |
Actually performs present. More... | |
void | acquireNextSwapchain () |
PixelFormatGpu | chooseSurfaceFormat (bool hwGamma) |
void | createSwapchain () |
void | destroy () override |
void | destroySwapchain () |
bool | getBorderless () const |
void | getCustomAttribute (IdString name, void *pData) override |
TextureGpu * | getDepthBuffer () const |
uint32 | getFrequencyDenominator () const |
uint32 | getFrequencyNumerator () const |
uint32 | getHeight () const |
VkSemaphore | getImageAcquiredSemaphore () |
Returns null if getImageAcquiredSemaphore has already been called during this frame. More... | |
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... | |
size_t | getNumSwapchains () const |
PixelFormatGpu | getPixelFormat () const |
uint32 | getRequestedHeightPt () const |
uint32 | getRequestedWidthPt () const |
SampleDescription | getSampleDescription () const |
TextureGpu * | getStencilBuffer () const |
VkImage | getSwapchainImage (size_t idx) 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 | isClosed () const override |
Indicates whether the window has been closed by the user. More... | |
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... | |
bool | isMultisample () const |
bool | isPrimary () const |
virtual bool | isVisible () const =0 |
void | operator delete (void *ptr) |
void | operator delete (void *ptr, const char *, int, const char *) |
void | operator delete (void *ptr, void *) |
void | operator delete[] (void *ptr) |
void | operator delete[] (void *ptr, const char *, int, const char *) |
void * | operator new (size_t sz) |
void * | operator new (size_t sz, const char *file, int line, const char *func) |
operator new, with debug line info More... | |
void * | operator new (size_t sz, void *ptr) |
placement operator new More... | |
void * | operator new[] (size_t sz) |
void * | operator new[] (size_t sz, const char *file, int line, const char *func) |
array operator new, with debug line info More... | |
void | parseSharedParams (const NameValuePairList *miscParams) |
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 | setTitle (const String &title) |
void | setVSync (bool vSync, uint32 vSyncInterval) override |
Turns VSync on/off. 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... | |
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 | mClosed |
VulkanDevice * | mDevice |
bool | mHwGamma |
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 VulkanWindow::acquireNextSwapchain. Can only go into this state if we're coming from SwapchainReleased |
SwapchainUsedInRendering | We already called VulkanWindow::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::VulkanWindow::VulkanWindow | ( | const String & | title, |
uint32 | width, | ||
uint32 | height, | ||
bool | fullscreenMode | ||
) |
|
override |
|
overridevirtual |
Implements Ogre::Window.
|
pure virtual |
Implemented in Ogre::VulkanXcbWindow, Ogre::VulkanWin32Window, and Ogre::VulkanAndroidWindow.
void Ogre::VulkanWindow::_setDevice | ( | VulkanDevice * | device | ) |
|
inherited |
Indicates that this is the primary window.
Only to be called by Ogre::Root
|
pure virtualinherited |
Internal method to notify the window it has been obscured or minimized.
Implemented in Ogre::VulkanXcbWindow, Ogre::VulkanWin32Window, Ogre::VulkanAndroidWindow, Ogre::CocoaWindow, Ogre::GLXWindow, Ogre::D3D11Window, Ogre::NULLWindow, Ogre::MetalWindow, Ogre::Win32Window, Ogre::EglPBufferWindow, and Ogre::EGLWindow.
void Ogre::VulkanWindow::_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::VulkanWindow::acquireNextSwapchain | ( | ) |
PixelFormatGpu Ogre::VulkanWindow::chooseSurfaceFormat | ( | bool | hwGamma | ) |
void Ogre::VulkanWindow::createSwapchain | ( | ) |
|
overridevirtual |
Implements Ogre::Window.
Reimplemented in Ogre::VulkanXcbWindow, Ogre::VulkanWin32Window, and Ogre::VulkanAndroidWindow.
void Ogre::VulkanWindow::destroySwapchain | ( | ) |
|
inherited |
|
overridevirtual |
Reimplemented from Ogre::Window.
Reimplemented in Ogre::VulkanXcbWindow, Ogre::VulkanAndroidWindow, and Ogre::VulkanWin32Window.
|
inherited |
|
inherited |
|
inherited |
|
inherited |
VkSemaphore Ogre::VulkanWindow::getImageAcquiredSemaphore | ( | ) |
Returns null if getImageAcquiredSemaphore has already been called during this frame.
|
virtualinherited |
Overloaded version of getMetrics from RenderTarget, including extra details specific to windowing systems.
Result is in pixels.
|
inline |
References mSwapchainImages, and Ogre::FastArray< T >::size().
|
inherited |
|
inherited |
|
inherited |
|
inherited |
|
inherited |
|
inline |
References mSwapchainImages.
|
inherited |
WARNING: Attempting to change the TextureGpu (e.g.
setResolution, setPixelFormat) is undefined behavior
|
inherited |
|
inlinevirtualinherited |
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.
Such points have constant density ~ 100 points per inch (probably 96 on Windows and 72 on Mac), that is independent of pixel density of real display, and are used through the all windowing system.
Sometimes, such view points are choosen bigger for output devices that are viewed from larger distances, like 30" TV comparing to 30" monitor, therefore maintaining constant points angular density rather than constant linear density.
In any case, all such windowing system provides the way to convert such view points to pixels, be it DisplayProperties::LogicalDpi on WinRT or backingScaleFactor on MacOSX. We use pixels consistently through the Ogre, but window/view management functions takes view points for convenience, as does the rest of windowing system. Such parameters are named using xxxxPt pattern, and should not be mixed with pixels without being converted using getViewPointToPixelScale() function.
Sometimes such scale factor can change on-the-fly, for example if window is dragged to monitor with different DPI. In such situation, window size in view points is usually preserved by windowing system, and Ogre should adjust pixel size of RenderWindow.
Reimplemented in Ogre::CocoaWindow, and Ogre::MetalWindow.
|
inherited |
|
inherited |
|
inherited |
|
overridevirtual |
Indicates whether the window has been closed by the user.
Implements Ogre::Window.
|
inherited |
|
inherited |
Returns true if we are currently in fullscreen mode.
|
pure virtualinherited |
Indicates whether the window was set to hidden (not displayed)
Implemented in Ogre::VulkanXcbWindow, Ogre::VulkanWin32Window, Ogre::VulkanAndroidWindow, Ogre::CocoaWindow, Ogre::GLXWindow, Ogre::D3D11Window, Ogre::NULLWindow, Ogre::MetalWindow, Ogre::Win32Window, Ogre::EglPBufferWindow, and Ogre::EGLWindow.
|
inherited |
|
inherited |
|
pure virtualinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
operator new, with debug line info
|
inlineinherited |
placement operator new
|
inlineinherited |
|
inlineinherited |
array operator new, with debug line info
void Ogre::VulkanWindow::parseSharedParams | ( | const NameValuePairList * | miscParams | ) |
|
virtualinherited |
Requests to toggle between fullscreen and windowed mode.
goFullscreen | True to go fullscreen, false to go windowed mode. |
borderless | Whether to be borderless. Only useful if goFullscreen == false; |
monitorIdx | |
width | New width. Leave 0 if you don't care. |
height | New height. Leave 0 if you don't care. |
frequencyNumerator | New frequency (fullscreen only). Leave 0 if you don't care. |
frequencyDenominator | New frequency (fullscreen only). Leave 0 if you don't care. |
Reimplemented in Ogre::VulkanXcbWindow, Ogre::VulkanWin32Window, Ogre::GLXWindow, Ogre::NULLWindow, Ogre::Win32Window, Ogre::EglPBufferWindow, and Ogre::EGLWindow.
Requests a change in resolution.
Change is not immediate. Use getRequestedWidthPt & getRequestedHeightPt if you need to know what you've requested, but beware you may not get that resolution, and once we get word from the OS, getRequested{Width/Height}Pt will change again so that getWidth == getRequestedWidthPt * getViewPointToPixelScale.
Reimplemented in Ogre::VulkanXcbWindow, Ogre::VulkanWin32Window, Ogre::VulkanAndroidWindow, Ogre::GLXWindow, Ogre::NULLWindow, Ogre::MetalWindow, Ogre::Win32Window, Ogre::EglPBufferWindow, and Ogre::EGLWindow.
|
virtualinherited |
|
virtualinherited |
Reimplemented in Ogre::VulkanWin32Window, and Ogre::Win32Window.
|
inlinevirtualinherited |
Set the FSAA mode to be used if hardware support it.
This option will be ignored if the hardware does not support it or setting can not be changed on the fly on per-target level.
fsaa | Requesed FSAA mode ( |
Reimplemented in Ogre::D3D11WindowSwapChainBased.
|
pure virtualinherited |
Hide (or show) the window.
If called with hidden=true, this will make the window completely invisible to the user.
Implemented in Ogre::VulkanXcbWindow, Ogre::VulkanWin32Window, Ogre::VulkanAndroidWindow, Ogre::CocoaWindow, Ogre::GLXWindow, Ogre::D3D11Window, Ogre::NULLWindow, Ogre::MetalWindow, Ogre::Win32Window, Ogre::EglPBufferWindow, and Ogre::EGLWindow.
|
virtualinherited |
|
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 |
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.
|
inherited |
Returns true if we are in windowed mode right now, but want to go fullscreen.
|
inherited |
Returns true if we are in fullscreen mode right now, but want to go windowed mode.
|
inlinevirtualinherited |
Notify that the window has been resized.
Reimplemented in Ogre::VulkanXcbWindow, Ogre::VulkanWin32Window, Ogre::VulkanAndroidWindow, Ogre::CocoaWindow, Ogre::GLXWindow, Ogre::MetalWindow, Ogre::Win32Window, and Ogre::EGLWindow.
bool Ogre::VulkanWindow::mClosed |
VulkanDevice* Ogre::VulkanWindow::mDevice |
bool Ogre::VulkanWindow::mHwGamma |
bool Ogre::VulkanWindow::mLowestLatencyVSync |
bool Ogre::VulkanWindow::mRebuildingSwapchain |
bool Ogre::VulkanWindow::mSuboptimal |
VkSurfaceKHR Ogre::VulkanWindow::mSurfaceKHR |
VkSwapchainKHR Ogre::VulkanWindow::mSwapchain |
FastArray<VkImage> Ogre::VulkanWindow::mSwapchainImages |
Referenced by getNumSwapchains(), and getSwapchainImage().
VkSemaphore Ogre::VulkanWindow::mSwapchainSemaphore |
Note: We need a semaphore per frame, not per swapchain.
Makes Queue execution wait until the acquired image is done presenting
SwapchainStatus Ogre::VulkanWindow::mSwapchainStatus |