summaryrefslogtreecommitdiffstats
path: root/xbmc/windowing/osx/OpenGL/WinSystemOSXGL.mm
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/windowing/osx/OpenGL/WinSystemOSXGL.mm')
-rw-r--r--xbmc/windowing/osx/OpenGL/WinSystemOSXGL.mm79
1 files changed, 79 insertions, 0 deletions
diff --git a/xbmc/windowing/osx/OpenGL/WinSystemOSXGL.mm b/xbmc/windowing/osx/OpenGL/WinSystemOSXGL.mm
new file mode 100644
index 0000000..30e44f2
--- /dev/null
+++ b/xbmc/windowing/osx/OpenGL/WinSystemOSXGL.mm
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#include "WinSystemOSXGL.h"
+
+#include "guilib/Texture.h"
+#include "rendering/gl/RenderSystemGL.h"
+#include "windowing/WindowSystemFactory.h"
+
+#include <unistd.h>
+
+void CWinSystemOSXGL::Register()
+{
+ KODI::WINDOWING::CWindowSystemFactory::RegisterWindowSystem(CreateWinSystem);
+}
+
+std::unique_ptr<CWinSystemBase> CWinSystemOSXGL::CreateWinSystem()
+{
+ return std::make_unique<CWinSystemOSXGL>();
+}
+
+void CWinSystemOSXGL::PresentRenderImpl(bool rendered)
+{
+ if (rendered)
+ FlushBuffer();
+
+ // FlushBuffer does not block if window is obscured
+ // in this case we need to throttle the render loop
+ if (IsObscured())
+ usleep(10000);
+
+ if (m_delayDispReset && m_dispResetTimer.IsTimePast())
+ {
+ m_delayDispReset = false;
+ AnnounceOnResetDevice();
+ }
+}
+
+void CWinSystemOSXGL::SetVSyncImpl(bool enable)
+{
+ EnableVSync(false);
+
+ if (enable)
+ {
+ EnableVSync(true);
+ }
+}
+
+bool CWinSystemOSXGL::ResizeWindow(int newWidth, int newHeight, int newLeft, int newTop)
+{
+ CWinSystemOSX::ResizeWindow(newWidth, newHeight, newLeft, newTop);
+ CRenderSystemGL::ResetRenderSystem(newWidth, newHeight);
+
+ if (m_bVSync)
+ {
+ EnableVSync(m_bVSync);
+ }
+
+ return true;
+}
+
+bool CWinSystemOSXGL::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool blankOtherDisplays)
+{
+ CWinSystemOSX::SetFullScreen(fullScreen, res, blankOtherDisplays);
+ CRenderSystemGL::ResetRenderSystem(res.iWidth, res.iHeight);
+
+ if (m_bVSync)
+ {
+ EnableVSync(m_bVSync);
+ }
+
+ return true;
+}
+