[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