1 /*
2  *  Copyright (C) 2017-2018 Team Kodi
3  *  This file is part of Kodi - https://kodi.tv
4  *
5  *  SPDX-License-Identifier: GPL-2.0-or-later
6  *  See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "cores/GameSettings.h"
12 #include "cores/RetroPlayer/RetroPlayerTypes.h"
13 #include "threads/CriticalSection.h"
14 
15 #include <memory>
16 #include <vector>
17 
18 namespace KODI
19 {
20 namespace RETRO
21 {
22 class IRendererFactory;
23 class IRenderBufferPools;
24 
25 class CRenderBufferManager
26 {
27 public:
28   CRenderBufferManager() = default;
29   ~CRenderBufferManager();
30 
31   void RegisterPools(IRendererFactory* factory, RenderBufferPoolVector pools);
32   RenderBufferPoolVector GetPools(IRendererFactory* factory);
33   std::vector<IRenderBufferPool*> GetBufferPools();
34   void FlushPools();
35 
36   std::string GetRenderSystemName(IRenderBufferPool* renderBufferPool) const;
37 
38   bool HasScalingMethod(SCALINGMETHOD scalingMethod) const;
39 
40 protected:
41   struct RenderBufferPools
42   {
43     IRendererFactory* factory;
44     RenderBufferPoolVector pools;
45   };
46 
47   std::vector<RenderBufferPools> m_pools;
48   mutable CCriticalSection m_critSection;
49 };
50 } // namespace RETRO
51 } // namespace KODI
52