X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=init.cpp;h=733d24689b5f5c4f2ef56135a32030e92fa9738f;hp=f9e7f1580a91e44be43aaef306e0b10823a4f468;hb=825c90789c229f502520bf0b665596d473f2636d;hpb=9faecb6aed1b84c71286b30b6600ef5e4ee76537 diff --git a/init.cpp b/init.cpp index f9e7f15..733d246 100644 --- a/init.cpp +++ b/init.cpp @@ -79,9 +79,11 @@ void measure_texel_subpixel_precision() glViewport(0, 0, width, 1); + vector frag_shader_outputs; GLuint glsl_program_num = resource_pool.compile_glsl_program( read_version_dependent_file("vs", "vert"), - read_version_dependent_file("texture1d", "frag")); + read_version_dependent_file("texture1d", "frag"), + frag_shader_outputs); glUseProgram(glsl_program_num); check_error(); glUniform1i(glGetUniformLocation(glsl_program_num, "tex"), 0); // Bind the 2D sampler. @@ -211,9 +213,11 @@ void measure_roundoff_problems() glViewport(0, 0, 512, 1); + vector frag_shader_outputs; GLuint glsl_program_num = resource_pool.compile_glsl_program( read_version_dependent_file("vs", "vert"), - read_version_dependent_file("texture1d", "frag")); + read_version_dependent_file("texture1d", "frag"), + frag_shader_outputs); glUseProgram(glsl_program_num); check_error(); glUniform1i(glGetUniformLocation(glsl_program_num, "tex"), 0); // Bind the 2D sampler. @@ -428,11 +432,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;