aboutsummaryrefslogtreecommitdiff
path: root/xbmc/rendering
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/rendering')
-rw-r--r--xbmc/rendering/gles/GLESShader.cpp3
-rw-r--r--xbmc/rendering/gles/GLESShader.h6
-rw-r--r--xbmc/rendering/gles/RenderSystemGLES.cpp40
-rw-r--r--xbmc/rendering/gles/RenderSystemGLES.h5
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;