xbmc
RPRendererOpenGLES.h
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 "RPBaseRenderer.h"
12 #include "cores/GameSettings.h"
13 #include "cores/RetroPlayer/buffers/BaseRenderBufferPool.h"
14 #include "cores/RetroPlayer/buffers/video/RenderBufferSysMem.h"
15 #include "cores/RetroPlayer/process/RPProcessInfo.h"
16 #include "guilib/TextureGL.h"
17 
18 #include <atomic>
19 #include <map>
20 #include <memory>
21 #include <stdint.h>
22 #include <vector>
23 
24 #include "system_gl.h"
25 
26 namespace KODI
27 {
28 namespace RETRO
29 {
30 class CRenderBufferOpenGLES;
31 
33 {
34 public:
35  ~CRendererFactoryOpenGLES() override = default;
36 
37  // implementation of IRendererFactory
38  std::string RenderSystemName() const override;
40  CRenderContext& context,
41  std::shared_ptr<IRenderBufferPool> bufferPool) override;
42  RenderBufferPoolVector CreateBufferPools(CRenderContext& context) override;
43 };
44 
46 {
47 public:
48  CRPRendererOpenGLES(const CRenderSettings& renderSettings,
49  CRenderContext& context,
50  std::shared_ptr<IRenderBufferPool> bufferPool);
51  ~CRPRendererOpenGLES() override;
52 
53  // implementation of CRPBaseRenderer
54  bool Supports(RENDERFEATURE feature) const override;
55  SCALINGMETHOD GetDefaultScalingMethod() const override { return SCALINGMETHOD::NEAREST; }
56 
57  static bool SupportsScalingMethod(SCALINGMETHOD method);
58 
59 protected:
60  // implementation of CRPBaseRenderer
61  void RenderInternal(bool clear, uint8_t alpha) override;
62  void FlushInternal() override;
63 
67  void ClearBackBuffer();
68 
75  void DrawBlackBars();
76 
77  virtual void Render(uint8_t alpha);
78 
79  GLuint m_mainIndexVBO;
80  GLuint m_mainVertexVBO;
81  GLuint m_blackbarsVertexVBO;
82  GLenum m_textureTarget = GL_TEXTURE_2D;
83  float m_clearColour = 0.0f;
84 
86  {
87  CGLTexture source;
88  CGLTexture target;
89  };
90 
91  std::map<CRenderBufferOpenGLES*, std::unique_ptr<RenderBufferTextures>> m_RBTexturesMap;
92 };
93 } // namespace RETRO
94 } // namespace KODI
Definition: RPRendererOpenGLES.h:45
RenderBufferPoolVector CreateBufferPools(CRenderContext &context) override
Create buffer pools to manager buffers.
Definition: RPRendererOpenGLES.cpp:40
Definition: AudioDecoder.h:18
Rendering factory.
Definition: RPProcessInfo.h:46
std::string RenderSystemName() const override
Get a description name of the rendering system.
Definition: RPRendererOpenGLES.cpp:27
Definition: RenderContext.h:43
Definition: TextureGL.h:18
Definition: settings.py:1
CRPBaseRenderer * CreateRenderer(const CRenderSettings &settings, CRenderContext &context, std::shared_ptr< IRenderBufferPool > bufferPool) override
Create a renderer.
Definition: RPRendererOpenGLES.cpp:32
Definition: RPRendererOpenGLES.h:32
Definition: RPBaseRenderer.h:37
Definition: RenderSettings.h:17