diff options
Diffstat (limited to 'xbmc/rendering')
-rw-r--r-- | xbmc/rendering/gles/GLESShader.cpp | 3 | ||||
-rw-r--r-- | xbmc/rendering/gles/GLESShader.h | 6 | ||||
-rw-r--r-- | xbmc/rendering/gles/RenderSystemGLES.cpp | 40 | ||||
-rw-r--r-- | xbmc/rendering/gles/RenderSystemGLES.h | 5 |
4 files changed, 53 insertions, 1 deletions
diff --git a/xbmc/rendering/gles/GLESShader.cpp b/xbmc/rendering/gles/GLESShader.cpp index 961c3f7961..ba7b83175d 100644 --- a/xbmc/rendering/gles/GLESShader.cpp +++ b/xbmc/rendering/gles/GLESShader.cpp @@ -54,6 +54,9 @@ void CGLESShader::OnCompiledAndLinked() m_hProj = glGetUniformLocation(ProgramHandle(), "m_proj"); m_hModel = glGetUniformLocation(ProgramHandle(), "m_model"); m_hCoord0Matrix = glGetUniformLocation(ProgramHandle(), "m_coord0Matrix"); + m_hMatrix = glGetUniformLocation(ProgramHandle(), "m_matrix"); + m_hShaderClip = glGetUniformLocation(ProgramHandle(), "m_shaderClip"); + m_hCoordStep = glGetUniformLocation(ProgramHandle(), "m_cordStep"); // Vertex attributes m_hPos = glGetAttribLocation(ProgramHandle(), "m_attrpos"); diff --git a/xbmc/rendering/gles/GLESShader.h b/xbmc/rendering/gles/GLESShader.h index 1f59895740..ddc31202c5 100644 --- a/xbmc/rendering/gles/GLESShader.h +++ b/xbmc/rendering/gles/GLESShader.h @@ -32,6 +32,9 @@ public: GLint GetContrastLoc() { return m_hContrast; } GLint GetBrightnessLoc() { return m_hBrightness; } GLint GetModelLoc() { return m_hModel; } + GLint GetMatrixLoc() { return m_hMatrix; } + GLint GetShaderClipLoc() { return m_hShaderClip; } + GLint GetShaderCoordStepLoc() { return m_hCoordStep; } bool HardwareClipIsPossible() { return m_clipPossible; } GLfloat GetClipXFactor() { return m_clipXFactor; } GLfloat GetClipXOffset() { return m_clipXOffset; } @@ -44,6 +47,9 @@ protected: GLint m_hUniCol = 0; GLint m_hProj = 0; GLint m_hModel = 0; + GLint m_hMatrix{0}; // m_hProj * m_hModel + GLint m_hShaderClip{0}; // clipping rect vec4(x1,y1,x2,y2) + GLint m_hCoordStep{0}; // step (1/resolution) for the two textures vec4(t1.x,t1.y,t2.x,t2.y) GLint m_hPos = 0; GLint m_hCol = 0; GLint m_hCord0 = 0; diff --git a/xbmc/rendering/gles/RenderSystemGLES.cpp b/xbmc/rendering/gles/RenderSystemGLES.cpp index f25f783960..a5c02803b0 100644 --- a/xbmc/rendering/gles/RenderSystemGLES.cpp +++ b/xbmc/rendering/gles/RenderSystemGLES.cpp @@ -425,7 +425,7 @@ void CRenderSystemGLES::InitialiseShaders() } m_pShader[ShaderMethodGLES::SM_FONTS] = - std::make_unique<CGLESShader>("gles_shader_fonts.frag", defines); + std::make_unique<CGLESShader>("gles_shader_simple.vert", "gles_shader_fonts.frag", defines); if (!m_pShader[ShaderMethodGLES::SM_FONTS]->CompileAndLink()) { m_pShader[ShaderMethodGLES::SM_FONTS]->Free(); @@ -433,6 +433,16 @@ void CRenderSystemGLES::InitialiseShaders() CLog::Log(LOGERROR, "GUI Shader gles_shader_fonts.frag - compile and link failed"); } + m_pShader[ShaderMethodGLES::SM_FONTS_SHADER_CLIP] = + std::make_unique<CGLESShader>("gles_shader_clip.vert", "gles_shader_fonts.frag", defines); + if (!m_pShader[ShaderMethodGLES::SM_FONTS_SHADER_CLIP]->CompileAndLink()) + { + m_pShader[ShaderMethodGLES::SM_FONTS_SHADER_CLIP]->Free(); + m_pShader[ShaderMethodGLES::SM_FONTS_SHADER_CLIP].reset(); + CLog::Log(LOGERROR, "GUI Shader gles_shader_clip.vert + gles_shader_fonts.frag - compile " + "and link failed"); + } + m_pShader[ShaderMethodGLES::SM_TEXTURE_NOBLEND] = std::make_unique<CGLESShader>("gles_shader_texture_noblend.frag", defines); if (!m_pShader[ShaderMethodGLES::SM_TEXTURE_NOBLEND]->CompileAndLink()) @@ -528,6 +538,10 @@ void CRenderSystemGLES::ReleaseShaders() m_pShader[ShaderMethodGLES::SM_FONTS]->Free(); m_pShader[ShaderMethodGLES::SM_FONTS].reset(); + if (m_pShader[ShaderMethodGLES::SM_FONTS_SHADER_CLIP]) + m_pShader[ShaderMethodGLES::SM_FONTS_SHADER_CLIP]->Free(); + m_pShader[ShaderMethodGLES::SM_FONTS_SHADER_CLIP].reset(); + if (m_pShader[ShaderMethodGLES::SM_TEXTURE_NOBLEND]) m_pShader[ShaderMethodGLES::SM_TEXTURE_NOBLEND]->Free(); m_pShader[ShaderMethodGLES::SM_TEXTURE_NOBLEND].reset(); @@ -675,3 +689,27 @@ GLint CRenderSystemGLES::GUIShaderGetModel() return -1; } + +GLint CRenderSystemGLES::GUIShaderGetMatrix() +{ + if (m_pShader[m_method]) + return m_pShader[m_method]->GetMatrixLoc(); + + return -1; +} + +GLint CRenderSystemGLES::GUIShaderGetClip() +{ + if (m_pShader[m_method]) + return m_pShader[m_method]->GetShaderClipLoc(); + + return -1; +} + +GLint CRenderSystemGLES::GUIShaderGetCoordStep() +{ + if (m_pShader[m_method]) + return m_pShader[m_method]->GetShaderCoordStepLoc(); + + return -1; +} diff --git a/xbmc/rendering/gles/RenderSystemGLES.h b/xbmc/rendering/gles/RenderSystemGLES.h index e0cd72b9c1..7986f2c0a4 100644 --- a/xbmc/rendering/gles/RenderSystemGLES.h +++ b/xbmc/rendering/gles/RenderSystemGLES.h @@ -25,6 +25,7 @@ enum class ShaderMethodGLES SM_TEXTURE, SM_MULTI, SM_FONTS, + SM_FONTS_SHADER_CLIP, SM_TEXTURE_NOBLEND, SM_MULTI_BLENDCOLOR, SM_TEXTURE_RGBA, @@ -55,6 +56,7 @@ private: {ShaderMethodGLES::SM_TEXTURE, "texture"}, {ShaderMethodGLES::SM_MULTI, "multi"}, {ShaderMethodGLES::SM_FONTS, "fonts"}, + {ShaderMethodGLES::SM_FONTS_SHADER_CLIP, "fonts with vertex shader based clipping"}, {ShaderMethodGLES::SM_TEXTURE_NOBLEND, "texture no blending"}, {ShaderMethodGLES::SM_MULTI_BLENDCOLOR, "multi blend colour"}, {ShaderMethodGLES::SM_TEXTURE_RGBA, "texure rgba"}, @@ -124,6 +126,9 @@ public: GLint GUIShaderGetContrast(); GLint GUIShaderGetBrightness(); GLint GUIShaderGetModel(); + GLint GUIShaderGetMatrix(); + GLint GUIShaderGetClip(); + GLint GUIShaderGetCoordStep(); protected: virtual void SetVSyncImpl(bool enable) = 0; |