summaryrefslogtreecommitdiffstats
path: root/xbmc/rendering/RenderSystem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/rendering/RenderSystem.cpp')
-rw-r--r--xbmc/rendering/RenderSystem.cpp110
1 files changed, 110 insertions, 0 deletions
diff --git a/xbmc/rendering/RenderSystem.cpp b/xbmc/rendering/RenderSystem.cpp
new file mode 100644
index 0000000..3f10562
--- /dev/null
+++ b/xbmc/rendering/RenderSystem.cpp
@@ -0,0 +1,110 @@
+/*
+ * 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 "RenderSystem.h"
+
+#include "Util.h"
+#include "guilib/GUIFontManager.h"
+#include "guilib/GUIImage.h"
+#include "guilib/GUILabelControl.h"
+#include "settings/AdvancedSettings.h"
+#include "settings/SettingsComponent.h"
+
+CRenderSystemBase::CRenderSystemBase()
+{
+ m_bRenderCreated = false;
+ m_bVSync = true;
+ m_maxTextureSize = 2048;
+ m_RenderVersionMajor = 0;
+ m_RenderVersionMinor = 0;
+ m_minDXTPitch = 0;
+}
+
+CRenderSystemBase::~CRenderSystemBase() = default;
+
+void CRenderSystemBase::GetRenderVersion(unsigned int& major, unsigned int& minor) const
+{
+ major = m_RenderVersionMajor;
+ minor = m_RenderVersionMinor;
+}
+
+bool CRenderSystemBase::SupportsNPOT(bool dxt) const
+{
+ if (dxt)
+ return false;
+
+ return true;
+}
+
+bool CRenderSystemBase::SupportsStereo(RENDER_STEREO_MODE mode) const
+{
+ switch(mode)
+ {
+ case RENDER_STEREO_MODE_OFF:
+ case RENDER_STEREO_MODE_SPLIT_HORIZONTAL:
+ case RENDER_STEREO_MODE_SPLIT_VERTICAL:
+ case RENDER_STEREO_MODE_MONO:
+ return true;
+ default:
+ return false;
+ }
+}
+
+void CRenderSystemBase::ShowSplash(const std::string& message)
+{
+ if (!CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_splashImage && !(m_splashImage || !message.empty()))
+ return;
+
+ if (!m_splashImage)
+ {
+ m_splashImage = std::unique_ptr<CGUIImage>(new CGUIImage(0, 0, 0, 0, CServiceBroker::GetWinSystem()->GetGfxContext().GetWidth(),
+ CServiceBroker::GetWinSystem()->GetGfxContext().GetHeight(), CTextureInfo(CUtil::GetSplashPath())));
+ m_splashImage->SetAspectRatio(CAspectRatio::AR_SCALE);
+ }
+
+ CServiceBroker::GetWinSystem()->GetGfxContext().lock();
+ CServiceBroker::GetWinSystem()->GetGfxContext().Clear();
+
+ RESOLUTION_INFO res = CServiceBroker::GetWinSystem()->GetGfxContext().GetResInfo();
+ CServiceBroker::GetWinSystem()->GetGfxContext().SetRenderingResolution(res, true);
+
+ //render splash image
+ BeginRender();
+
+ m_splashImage->AllocResources();
+ m_splashImage->Render();
+ m_splashImage->FreeResources();
+
+ if (!message.empty())
+ {
+ if (!m_splashMessageLayout)
+ {
+ auto messageFont = g_fontManager.LoadTTF("__splash__", "arial.ttf", 0xFFFFFFFF, 0, 20, FONT_STYLE_NORMAL, false, 1.0f, 1.0f, &res);
+ if (messageFont)
+ m_splashMessageLayout = std::unique_ptr<CGUITextLayout>(new CGUITextLayout(messageFont, true, 0));
+ }
+
+ if (m_splashMessageLayout)
+ {
+ m_splashMessageLayout->Update(message, 1150, false, true);
+ float textWidth, textHeight;
+ m_splashMessageLayout->GetTextExtent(textWidth, textHeight);
+
+ int width = CServiceBroker::GetWinSystem()->GetGfxContext().GetWidth();
+ int height = CServiceBroker::GetWinSystem()->GetGfxContext().GetHeight();
+ float y = height - textHeight - 100;
+ m_splashMessageLayout->RenderOutline(width/2, y, 0, 0xFF000000, XBFONT_CENTER_X, width);
+ }
+ }
+
+ //show it on screen
+ EndRender();
+ CServiceBroker::GetWinSystem()->GetGfxContext().unlock();
+ CServiceBroker::GetWinSystem()->GetGfxContext().Flip(true, false);
+}
+