static SCP_string opengl_shader_get_header(shader_type type_id, int flags, shader_stage stage) { SCP_stringstream sflags; sflags << "#version " << GLSL_version << " core\n"; if (GL_workaround_clipping_planes) { sflags << "#define WORKAROUND_CLIPPING_PLANES\n"; } if (type_id == SDR_TYPE_POST_PROCESS_MAIN || type_id == SDR_TYPE_POST_PROCESS_LIGHTSHAFTS || type_id == SDR_TYPE_POST_PROCESS_FXAA) { // ignore looking for variants. main post process, lightshafts, and FXAA shaders need special headers to be hacked in opengl_post_shader_header(sflags, type_id, flags); } else { for (int i = 0; i < GL_num_shader_variants; ++i) { opengl_shader_variant_t &variant = GL_shader_variants[i]; if (type_id == variant.type_id && flags & variant.flag) { sflags << "#define " << variant.flag_text << "\n"; } } } return sflags.str(); }
static SCP_string opengl_shader_get_header(shader_type type_id, int flags, bool has_geo_shader) { SCP_stringstream sflags; sflags << "#version " << GLSL_version << " core\n"; if (Detail.lighting < 3) { sflags << "#define FLAG_LIGHT_MODEL_BLINN_PHONG\n"; } if (has_geo_shader) { // If there is a geometry shader then we define a special preprocessor symbol to make writing shaders easier sflags << "#define HAS_GEOMETRY_SHADER\n"; } if (type_id == SDR_TYPE_POST_PROCESS_MAIN || type_id == SDR_TYPE_POST_PROCESS_LIGHTSHAFTS || type_id == SDR_TYPE_POST_PROCESS_FXAA) { // ignore looking for variants. main post process, lightshafts, and FXAA shaders need special headers to be hacked in opengl_post_shader_header(sflags, type_id, flags); } else { for (int i = 0; i < GL_num_shader_variants; ++i) { opengl_shader_variant_t &variant = GL_shader_variants[i]; if (type_id == variant.type_id && flags & variant.flag) { sflags << "#define " << variant.flag_text << "\n"; } } } return sflags.str(); }
static SCP_string get_shader_header(shader_type type_id, int flags) { SCP_stringstream sflags; #ifdef __APPLE__ sflags << "#version 120\n"; sflags << "#define APPLE\n"; #endif if (type_id == SDR_TYPE_POST_PROCESS_MAIN || type_id == SDR_TYPE_POST_PROCESS_LIGHTSHAFTS || type_id == SDR_TYPE_POST_PROCESS_FXAA) { // ignore looking for variants. main post process, lightshafts, and FXAA shaders need special headers to be hacked in opengl_post_shader_header(sflags, type_id, flags); } else { for (int i = 0; i < GL_num_shader_variants; ++i) { opengl_shader_variant_t &variant = GL_shader_variants[i]; if (type_id == variant.type_id && flags & variant.flag) { sflags << "#define " << variant.flag_text << "\n"; } } } return sflags.str(); }