]> git.sesse.net Git - movit/blobdiff - init.cpp
Add a hack to use #version 110 but keep using 130 features, for the benefit of OS X.
[movit] / init.cpp
index f9e7f1580a91e44be43aaef306e0b10823a4f468..7781ba24ccd7e8fb76c1e5f305ecff8ba75c35bc 100644 (file)
--- a/init.cpp
+++ b/init.cpp
@@ -428,11 +428,29 @@ bool init_movit(const string& data_directory, MovitDebugLevel debug_level)
        }
 
        // Find out what shader model we should compile for.
+       // We need at least 1.30, due to use of (among others) integers.
        if (epoxy_is_desktop_gl()) {
-               if (get_glsl_version() >= 1.30) {
+               if (get_glsl_version() < 1.30f) {
+                       fprintf(stderr, "Movit system requirements: Needs at least GLSL version 1.30 (has version %.1f)\n",
+                               get_glsl_version());
+                       if (get_glsl_version() >= 1.10f) {
+                               fprintf(stderr, "Attempting to continue nevertheless; expect shader compilation issues.\n");
+                               fprintf(stderr, "Try switching to a core OpenGL context, as especially OS X drivers\n");
+                               fprintf(stderr, "support newer GLSL versions there.\n");
+                               movit_shader_model = MOVIT_GLSL_130_AS_110;
+                       } else {
+                               return false;
+                       }
+               }
+               if (get_glsl_version() < 1.50f) {
                        movit_shader_model = MOVIT_GLSL_130;
                } else {
-                       movit_shader_model = MOVIT_GLSL_110;
+                       // Note: All of our 1.50 shaders are identical to our 1.30 shaders,
+                       // but OS X does not support 1.30; only 1.10 (which we don't support
+                       // anymore) and 1.50 (and then only with core contexts). So we keep
+                       // a second set of shaders around whose only difference is the different
+                       // #version declaration.
+                       movit_shader_model = MOVIT_GLSL_150;
                }
        } else {
                movit_shader_model = MOVIT_ESSL_300;