xbmc
RPRendererOpenGL.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/RetroPlayer/process/RPProcessInfo.h"
13 #include "guilib/TextureGL.h"
14 
15 #include <map>
16 #include <memory>
17 
18 #include "system_gl.h"
19 
20 namespace KODI
21 {
22 namespace RETRO
23 {
24 class CRenderContext;
25 class CRenderBufferOpenGL;
26 
28 {
29 public:
30  ~CRendererFactoryOpenGL() override = default;
31 
32  // implementation of IRendererFactory
33  std::string RenderSystemName() const override;
35  CRenderContext& context,
36  std::shared_ptr<IRenderBufferPool> bufferPool) override;
37  RenderBufferPoolVector CreateBufferPools(CRenderContext& context) override;
38 };
39 
41 {
42 public:
43  CRPRendererOpenGL(const CRenderSettings& renderSettings,
44  CRenderContext& context,
45  std::shared_ptr<IRenderBufferPool> bufferPool);
46  ~CRPRendererOpenGL() override;
47 
48  // implementation of CRPBaseRenderer
49  bool Supports(RENDERFEATURE feature) const override;
50  SCALINGMETHOD GetDefaultScalingMethod() const override { return SCALINGMETHOD::NEAREST; }
51 
52  static bool SupportsScalingMethod(SCALINGMETHOD method);
53 
54 protected:
55  struct PackedVertex
56  {
57  float x, y, z;
58  float u1, v1;
59  };
60  struct Svertex
61  {
62  float x;
63  float y;
64  float z;
65  };
67  {
68  CGLTexture source;
69  CGLTexture target;
70  };
71 
72  // implementation of CRPBaseRenderer
73  void RenderInternal(bool clear, uint8_t alpha) override;
74  void FlushInternal() override;
75 
79  void ClearBackBuffer();
80 
87  void DrawBlackBars();
88 
89  virtual void Render(uint8_t alpha);
90 
91  std::map<CRenderBufferOpenGL*, std::unique_ptr<RenderBufferTextures>> m_RBTexturesMap;
92 
93  GLuint m_mainVAO;
94  GLuint m_mainVertexVBO;
95  GLuint m_mainIndexVBO;
96 
97  GLuint m_blackbarsVAO;
98  GLuint m_blackbarsVertexVBO;
99 
100  GLenum m_textureTarget = GL_TEXTURE_2D;
101  float m_clearColour = 0.0f;
102 };
103 } // namespace RETRO
104 } // namespace KODI
RenderBufferPoolVector CreateBufferPools(CRenderContext &context) override
Create buffer pools to manager buffers.
Definition: RPRendererOpenGL.cpp:38
CRPBaseRenderer * CreateRenderer(const CRenderSettings &settings, CRenderContext &context, std::shared_ptr< IRenderBufferPool > bufferPool) override
Create a renderer.
Definition: RPRendererOpenGL.cpp:30
Definition: RPRendererOpenGL.h:55
Definition: AudioDecoder.h:18
Rendering factory.
Definition: RPProcessInfo.h:46
Definition: RenderContext.h:43
Definition: TextureGL.h:18
Definition: settings.py:1
Definition: RPRendererOpenGL.h:60
Definition: RPRendererOpenGL.h:27
std::string RenderSystemName() const override
Get a description name of the rendering system.
Definition: RPRendererOpenGL.cpp:25
Definition: RPBaseRenderer.h:37
Definition: RenderSettings.h:17
Definition: RPRendererOpenGL.h:40