[vlc-commits] opengl: fixed shader support for iOS

Felix Paul Kühne git at videolan.org
Fri Feb 8 21:36:18 CET 2013


vlc | branch: master | Felix Paul Kühne <fkuehne at videolan.org> | Fri Feb  8 21:34:01 2013 +0100| [b5cf1c1e04213a3abef0e33cf3c58e2242d0179b] | committer: Felix Paul Kühne

opengl: fixed shader support for iOS

note that certain samples are not supported so far

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b5cf1c1e04213a3abef0e33cf3c58e2242d0179b
---

 modules/video_output/opengl.c |   19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/modules/video_output/opengl.c b/modules/video_output/opengl.c
index 81fc6f5..ef3821c 100644
--- a/modules/video_output/opengl.c
+++ b/modules/video_output/opengl.c
@@ -194,7 +194,8 @@ static void BuildVertexShader(vout_display_opengl_t *vgl,
     /* Basic vertex shader */
     const char *vertexShader =
         "#version " GLSL_VERSION "\n"
-        "varying   vec4 TexCoord0,TexCoord1, TexCoord2;"
+        "precision highp float;"
+        "varying vec4 TexCoord0,TexCoord1, TexCoord2;"
         "attribute vec4 MultiTexCoord0,MultiTexCoord1,MultiTexCoord2;"
         "attribute vec4 VertexPosition;"
         "void main() {"
@@ -237,6 +238,7 @@ static void BuildYUVFragmentShader(vout_display_opengl_t *vgl,
     /* Basic linear YUV -> RGB conversion using bilinear interpolation */
     const char *template_glsl_yuv =
         "#version " GLSL_VERSION "\n"
+        "precision highp float;"
         "uniform sampler2D Texture0;"
         "uniform sampler2D Texture1;"
         "uniform sampler2D Texture2;"
@@ -287,6 +289,7 @@ static void BuildRGBFragmentShader(vout_display_opengl_t *vgl,
     // Simple shader for RGB
     const char *code =
         "#version " GLSL_VERSION "\n"
+        "precision highp float;"
         "uniform sampler2D Texture[3];"
         "varying vec4 TexCoord0,TexCoord1,TexCoord2;"
         "void main()"
@@ -304,6 +307,7 @@ static void BuildRGBAFragmentShader(vout_display_opengl_t *vgl,
     // Simple shader for RGBA
     const char *code =
         "#version " GLSL_VERSION "\n"
+        "precision highp float;"
         "uniform sampler2D Texture;"
         "uniform vec4 FillColor;"
         "varying vec4 TexCoord0;"
@@ -342,9 +346,9 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt,
     bool supports_shaders = strverscmp((const char *)ogl_version, "2.0") >= 0;
 #else
     bool supports_shaders = false;
+
 #ifdef __APPLE__
-    if (kCFCoreFoundationVersionNumber >= 786.)
-        supports_shaders = true;
+    supports_shaders = true;
 #endif
 #endif
 
@@ -382,6 +386,13 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt,
     GLint max_texture_units = 0;
     glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &max_texture_units);
 
+#ifdef __APPLE__
+    /* work-around an iOS 6 bug */
+    if (kCFCoreFoundationVersionNumber >= 786.)
+        max_texture_units = 8;
+    supports_shaders = true;
+#endif
+
     /* Initialize with default chroma */
     vgl->fmt = *fmt;
     vgl->fmt.i_chroma = VLC_CODEC_RGB32;
@@ -401,8 +412,10 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt,
     /* Use YUV if possible and needed */
     bool need_fs_yuv = false;
     float yuv_range_correction = 1.0;
+
     if (max_texture_units >= 3 && supports_shaders &&
         vlc_fourcc_IsYUV(fmt->i_chroma) && !vlc_fourcc_IsYUV(vgl->fmt.i_chroma)) {
+        printf("passed check\n");
         const vlc_fourcc_t *list = vlc_fourcc_GetYUVFallback(fmt->i_chroma);
         while (*list) {
             const vlc_chroma_description_t *dsc = vlc_fourcc_GetChromaDescription(*list);



More information about the vlc-commits mailing list