Commit b5cf1c1e authored by Felix Paul Kühne's avatar Felix Paul Kühne

opengl: fixed shader support for iOS

note that certain samples are not supported so far
parent 6c648e41
...@@ -194,7 +194,8 @@ static void BuildVertexShader(vout_display_opengl_t *vgl, ...@@ -194,7 +194,8 @@ static void BuildVertexShader(vout_display_opengl_t *vgl,
/* Basic vertex shader */ /* Basic vertex shader */
const char *vertexShader = const char *vertexShader =
"#version " GLSL_VERSION "\n" "#version " GLSL_VERSION "\n"
"varying vec4 TexCoord0,TexCoord1, TexCoord2;" "precision highp float;"
"varying vec4 TexCoord0,TexCoord1, TexCoord2;"
"attribute vec4 MultiTexCoord0,MultiTexCoord1,MultiTexCoord2;" "attribute vec4 MultiTexCoord0,MultiTexCoord1,MultiTexCoord2;"
"attribute vec4 VertexPosition;" "attribute vec4 VertexPosition;"
"void main() {" "void main() {"
...@@ -237,6 +238,7 @@ static void BuildYUVFragmentShader(vout_display_opengl_t *vgl, ...@@ -237,6 +238,7 @@ static void BuildYUVFragmentShader(vout_display_opengl_t *vgl,
/* Basic linear YUV -> RGB conversion using bilinear interpolation */ /* Basic linear YUV -> RGB conversion using bilinear interpolation */
const char *template_glsl_yuv = const char *template_glsl_yuv =
"#version " GLSL_VERSION "\n" "#version " GLSL_VERSION "\n"
"precision highp float;"
"uniform sampler2D Texture0;" "uniform sampler2D Texture0;"
"uniform sampler2D Texture1;" "uniform sampler2D Texture1;"
"uniform sampler2D Texture2;" "uniform sampler2D Texture2;"
...@@ -287,6 +289,7 @@ static void BuildRGBFragmentShader(vout_display_opengl_t *vgl, ...@@ -287,6 +289,7 @@ static void BuildRGBFragmentShader(vout_display_opengl_t *vgl,
// Simple shader for RGB // Simple shader for RGB
const char *code = const char *code =
"#version " GLSL_VERSION "\n" "#version " GLSL_VERSION "\n"
"precision highp float;"
"uniform sampler2D Texture[3];" "uniform sampler2D Texture[3];"
"varying vec4 TexCoord0,TexCoord1,TexCoord2;" "varying vec4 TexCoord0,TexCoord1,TexCoord2;"
"void main()" "void main()"
...@@ -304,6 +307,7 @@ static void BuildRGBAFragmentShader(vout_display_opengl_t *vgl, ...@@ -304,6 +307,7 @@ static void BuildRGBAFragmentShader(vout_display_opengl_t *vgl,
// Simple shader for RGBA // Simple shader for RGBA
const char *code = const char *code =
"#version " GLSL_VERSION "\n" "#version " GLSL_VERSION "\n"
"precision highp float;"
"uniform sampler2D Texture;" "uniform sampler2D Texture;"
"uniform vec4 FillColor;" "uniform vec4 FillColor;"
"varying vec4 TexCoord0;" "varying vec4 TexCoord0;"
...@@ -342,9 +346,9 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt, ...@@ -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; bool supports_shaders = strverscmp((const char *)ogl_version, "2.0") >= 0;
#else #else
bool supports_shaders = false; bool supports_shaders = false;
#ifdef __APPLE__ #ifdef __APPLE__
if (kCFCoreFoundationVersionNumber >= 786.) supports_shaders = true;
supports_shaders = true;
#endif #endif
#endif #endif
...@@ -382,6 +386,13 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt, ...@@ -382,6 +386,13 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt,
GLint max_texture_units = 0; GLint max_texture_units = 0;
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &max_texture_units); 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 */ /* Initialize with default chroma */
vgl->fmt = *fmt; vgl->fmt = *fmt;
vgl->fmt.i_chroma = VLC_CODEC_RGB32; vgl->fmt.i_chroma = VLC_CODEC_RGB32;
...@@ -401,8 +412,10 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt, ...@@ -401,8 +412,10 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt,
/* Use YUV if possible and needed */ /* Use YUV if possible and needed */
bool need_fs_yuv = false; bool need_fs_yuv = false;
float yuv_range_correction = 1.0; float yuv_range_correction = 1.0;
if (max_texture_units >= 3 && supports_shaders && if (max_texture_units >= 3 && supports_shaders &&
vlc_fourcc_IsYUV(fmt->i_chroma) && !vlc_fourcc_IsYUV(vgl->fmt.i_chroma)) { 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); const vlc_fourcc_t *list = vlc_fourcc_GetYUVFallback(fmt->i_chroma);
while (*list) { while (*list) {
const vlc_chroma_description_t *dsc = vlc_fourcc_GetChromaDescription(*list); const vlc_chroma_description_t *dsc = vlc_fourcc_GetChromaDescription(*list);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment