static bool gl_glsl_compile_shader(glsl_shader_data_t *glsl, GLuint shader, const char *define, const char *program) { GLint status; const char *source[4]; char version[32] = {0}; if (glsl_core && !strstr(program, "#version")) { unsigned version_no = 0; unsigned gl_ver = glsl_major * 100 + glsl_minor * 10; switch (gl_ver) { case 300: version_no = 130; break; case 310: version_no = 140; break; case 320: version_no = 150; break; default: version_no = gl_ver; break; } snprintf(version, sizeof(version), "#version %u\n", version_no); RARCH_LOG("[GL]: Using GLSL version %u.\n", version_no); } source[0] = version; source[1] = define; source[2] = glsl->alias_define; source[3] = program; glShaderSource(shader, ARRAY_SIZE(source), source, NULL); glCompileShader(shader); glGetShaderiv(shader, GL_COMPILE_STATUS, &status); gl_glsl_print_shader_log(shader); return status == GL_TRUE; }
static bool gl_glsl_compile_shader(glsl_shader_data_t *glsl, GLuint shader, const char *define, const char *program) { GLint status; const char *source[4]; char version[32]; const char *existing_version = strstr(program, "#version"); version[0] = '\0'; if (existing_version) { const char* version_extra = ""; unsigned version_no = strtoul(existing_version + 8, (char**)&program, 10); #ifdef HAVE_OPENGLES if (version_no < 130) version_no = 100; else { version_extra = " es"; version_no = 300; } #endif snprintf(version, sizeof(version), "#version %u%s\n", version_no, version_extra); RARCH_LOG("[GLSL]: Using GLSL version %u%s.\n", version_no, version_extra); } else if (glsl_core) { unsigned version_no = 0; unsigned gl_ver = glsl_major * 100 + glsl_minor * 10; switch (gl_ver) { case 300: version_no = 130; break; case 310: version_no = 140; break; case 320: version_no = 150; break; default: version_no = gl_ver; break; } snprintf(version, sizeof(version), "#version %u\n", version_no); RARCH_LOG("[GLSL]: Using GLSL version %u.\n", version_no); } source[0] = version; source[1] = define; source[2] = glsl->alias_define; source[3] = program; glShaderSource(shader, ARRAY_SIZE(source), source, NULL); glCompileShader(shader); glGetShaderiv(shader, GL_COMPILE_STATUS, &status); gl_glsl_print_shader_log(shader); return status == GL_TRUE; }