mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-02-18 04:53:06 +01:00
Weird fix for frame rate doubling after second created window. (#2564)
* Weird fix for frame rate doubling after second created window. * Don't double buffer with vsync in metal to prevent 2x fps instead. * Setting number of back buffers in metal if available. * Better function call syntax. * Matching maxFrameLatency to maximumDrawableCount in Metal backend.
This commit is contained in:
@@ -1036,7 +1036,7 @@ namespace bgfx { namespace mtl
|
||||
~SwapChainMtl();
|
||||
|
||||
void init(void* _nwh);
|
||||
void resize(FrameBufferMtl &_frameBuffer, uint32_t _width, uint32_t _height, uint32_t _flags);
|
||||
void resize(FrameBufferMtl &_frameBuffer, uint32_t _width, uint32_t _height, uint32_t _flags, uint32_t _maximumDrawableCount);
|
||||
|
||||
id <MTLTexture> currentDrawableTexture();
|
||||
|
||||
|
||||
@@ -936,7 +936,7 @@ namespace bgfx { namespace mtl
|
||||
|
||||
FrameBufferMtl& fb = m_frameBuffers[_handle.idx];
|
||||
fb.create(denseIdx, _nwh, _width, _height, _format, _depthFormat);
|
||||
fb.m_swapChain->resize(m_frameBuffers[_handle.idx], _width, _height, m_resolution.reset);
|
||||
fb.m_swapChain->resize(m_frameBuffers[_handle.idx], _width, _height, m_resolution.reset, m_resolution.maxFrameLatency);
|
||||
}
|
||||
|
||||
void destroyFrameBuffer(FrameBufferHandle _handle) override
|
||||
@@ -1262,7 +1262,7 @@ namespace bgfx { namespace mtl
|
||||
}
|
||||
m_resolution.reset &= ~BGFX_RESET_INTERNAL_FORCE;
|
||||
|
||||
m_mainFrameBuffer.m_swapChain->resize(m_mainFrameBuffer, _resolution.width, _resolution.height, _resolution.reset);
|
||||
m_mainFrameBuffer.m_swapChain->resize(m_mainFrameBuffer, _resolution.width, _resolution.height, _resolution.reset, m_resolution.maxFrameLatency);
|
||||
|
||||
for (uint32_t ii = 0; ii < BX_COUNTOF(m_frameBuffers); ++ii)
|
||||
{
|
||||
@@ -3171,7 +3171,7 @@ namespace bgfx { namespace mtl
|
||||
retain(m_metalLayer);
|
||||
}
|
||||
|
||||
void SwapChainMtl::resize(FrameBufferMtl &_frameBuffer, uint32_t _width, uint32_t _height, uint32_t _flags)
|
||||
void SwapChainMtl::resize(FrameBufferMtl &_frameBuffer, uint32_t _width, uint32_t _height, uint32_t _flags, uint32_t _maximumDrawableCount)
|
||||
{
|
||||
const int32_t sampleCount = s_msaa[(_flags&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT];
|
||||
|
||||
@@ -3181,6 +3181,10 @@ namespace bgfx { namespace mtl
|
||||
{
|
||||
m_metalLayer.displaySyncEnabled = 0 != (_flags&BGFX_RESET_VSYNC);
|
||||
}
|
||||
if (@available(macOS 10.13.2, *))
|
||||
{
|
||||
m_metalLayer.maximumDrawableCount = bx::clamp<uint32_t>(_maximumDrawableCount, 2, 3);
|
||||
}
|
||||
#endif // __MAC_OS_X_VERSION_MAX_ALLOWED >= 101300
|
||||
#endif // BX_PLATFORM_OSX
|
||||
|
||||
|
||||
Reference in New Issue
Block a user