1 /* 2 * Copyright (C) 2005-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 "GLESShader.h" 12 #include "rendering/RenderSystem.h" 13 #include "utils/Color.h" 14 15 #include <array> 16 17 #include "system_gl.h" 18 19 enum ESHADERMETHOD 20 { 21 SM_DEFAULT, 22 SM_TEXTURE, 23 SM_MULTI, 24 SM_FONTS, 25 SM_TEXTURE_NOBLEND, 26 SM_MULTI_BLENDCOLOR, 27 SM_TEXTURE_RGBA, 28 SM_TEXTURE_RGBA_OES, 29 SM_TEXTURE_RGBA_BLENDCOLOR, 30 SM_TEXTURE_RGBA_BOB, 31 SM_TEXTURE_RGBA_BOB_OES, 32 SM_TEXTURE_NOALPHA, 33 SM_MAX 34 }; 35 36 class CRenderSystemGLES : public CRenderSystemBase 37 { 38 public: 39 CRenderSystemGLES(); 40 ~CRenderSystemGLES() override = default; 41 42 bool InitRenderSystem() override; 43 bool DestroyRenderSystem() override; 44 bool ResetRenderSystem(int width, int height) override; 45 46 bool BeginRender() override; 47 bool EndRender() override; 48 void PresentRender(bool rendered, bool videoLayer) override; 49 bool ClearBuffers(UTILS::Color color) override; 50 bool IsExtSupported(const char* extension) const override; 51 52 void SetVSync(bool vsync); ResetVSync()53 void ResetVSync() { m_bVsyncInit = false; } 54 55 void SetViewPort(const CRect& viewPort) override; 56 void GetViewPort(CRect& viewPort) override; 57 58 bool ScissorsCanEffectClipping() override; 59 CRect ClipRectToScissorRect(const CRect &rect) override; 60 void SetScissors(const CRect& rect) override; 61 void ResetScissors() override; 62 63 void CaptureStateBlock() override; 64 void ApplyStateBlock() override; 65 66 void SetCameraPosition(const CPoint &camera, int screenWidth, int screenHeight, float stereoFactor = 0.0f) override; 67 68 bool SupportsStereo(RENDER_STEREO_MODE mode) const override; 69 70 void Project(float &x, float &y, float &z) override; 71 GetShaderPath(const std::string & filename)72 std::string GetShaderPath(const std::string &filename) override { return "GLES/2.0/"; } 73 74 void InitialiseShaders(); 75 void ReleaseShaders(); 76 void EnableGUIShader(ESHADERMETHOD method); 77 void DisableGUIShader(); 78 79 GLint GUIShaderGetPos(); 80 GLint GUIShaderGetCol(); 81 GLint GUIShaderGetCoord0(); 82 GLint GUIShaderGetCoord1(); 83 GLint GUIShaderGetUniCol(); 84 GLint GUIShaderGetCoord0Matrix(); 85 GLint GUIShaderGetField(); 86 GLint GUIShaderGetStep(); 87 GLint GUIShaderGetContrast(); 88 GLint GUIShaderGetBrightness(); 89 GLint GUIShaderGetModel(); 90 91 protected: 92 virtual void SetVSyncImpl(bool enable) = 0; 93 virtual void PresentRenderImpl(bool rendered) = 0; 94 void CalculateMaxTexturesize(); 95 96 bool m_bVsyncInit{false}; 97 int m_width; 98 int m_height; 99 100 std::string m_RenderExtensions; 101 102 std::array<std::unique_ptr<CGLESShader>, SM_MAX> m_pShader; 103 ESHADERMETHOD m_method = SM_DEFAULT; 104 105 GLint m_viewPort[4]; 106 }; 107 108