(PS3) Add third-pass shaders (ifdeffed for PS3 for now - could
be added to PC as well)
This commit is contained in:
parent
f0c5499bbc
commit
8b4e6bed93
5
driver.h
5
driver.h
|
@ -151,7 +151,10 @@ enum rarch_shader_index
|
|||
{
|
||||
RARCH_SHADER_INDEX_MULTIPASS = 0,
|
||||
RARCH_SHADER_INDEX_PASS0 = 1,
|
||||
RARCH_SHADER_INDEX_PASS1 = 2
|
||||
RARCH_SHADER_INDEX_PASS1 = 2,
|
||||
#ifdef __CELLOS_LV2__
|
||||
RARCH_SHADER_INDEX_PASS2 = 3,
|
||||
#endif
|
||||
};
|
||||
|
||||
typedef struct video_info
|
||||
|
|
|
@ -334,6 +334,12 @@ static void populate_setting_item(void *data, unsigned input)
|
|||
strlcpy(current_item->setting_text, fname, sizeof(current_item->setting_text));
|
||||
strlcpy(current_item->comment, "INFO - Select a shader as [Shader #2].", sizeof(current_item->comment));
|
||||
break;
|
||||
case SETTING_SHADER_3:
|
||||
fill_pathname_base(fname, g_settings.video.third_pass_shader, sizeof(fname));
|
||||
strlcpy(current_item->text, "Shader #3", sizeof(current_item->text));
|
||||
strlcpy(current_item->setting_text, fname, sizeof(current_item->setting_text));
|
||||
strlcpy(current_item->comment, "INFO - Select a shader as [Shader #3].", sizeof(current_item->comment));
|
||||
break;
|
||||
#endif
|
||||
case SETTING_EMU_SKIN:
|
||||
fill_pathname_base(fname, g_extern.console.menu_texture_path, sizeof(fname));
|
||||
|
@ -1065,6 +1071,22 @@ static int select_file(uint8_t menu_type, uint64_t input)
|
|||
|
||||
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_SECOND_SHADER);
|
||||
}
|
||||
|
||||
if (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_THIRD_SHADER))
|
||||
{
|
||||
strlcpy(g_settings.video.third_pass_shader, path, sizeof(g_settings.video.third_pass_shader));
|
||||
|
||||
if (g_settings.video.shader_type != RARCH_SHADER_NONE)
|
||||
{
|
||||
driver.video->set_shader(driver.video_data, (enum rarch_shader_type)g_settings.video.shader_type, path, RARCH_SHADER_INDEX_PASS2);
|
||||
if (g_extern.lifecycle_mode_state & (1ULL << MODE_INFO_DRAW))
|
||||
msg_queue_push(g_extern.msg_queue, "INFO - Shader successfully loaded.", 1, 180);
|
||||
}
|
||||
else
|
||||
RARCH_ERR("Shaders are unsupported on this platform.\n");
|
||||
|
||||
g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_THIRD_SHADER);
|
||||
}
|
||||
break;
|
||||
case PRESET_CHOICE:
|
||||
strlcpy(g_extern.file_state.cgp_path, path, sizeof(g_extern.file_state.cgp_path));
|
||||
|
@ -1516,6 +1538,26 @@ static int set_setting_action(uint8_t menu_type, unsigned switchvalue, uint64_t
|
|||
RARCH_ERR("Shaders are unsupported on this platform.\n");
|
||||
}
|
||||
break;
|
||||
case SETTING_SHADER_3:
|
||||
if ((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) || (input & (1ULL << RMENU_DEVICE_NAV_B)))
|
||||
{
|
||||
menu_stack_push(SHADER_CHOICE);
|
||||
filebrowser_set_root_and_ext(filebrowser, EXT_SHADERS, default_paths.shader_dir);
|
||||
g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_THIRD_SHADER);
|
||||
}
|
||||
if (input & (1ULL << RMENU_DEVICE_NAV_START))
|
||||
{
|
||||
strlcpy(g_settings.video.third_pass_shader, default_paths.shader_file, sizeof(g_settings.video.third_pass_shader));
|
||||
if (g_settings.video.shader_type != RARCH_SHADER_NONE)
|
||||
{
|
||||
driver.video->set_shader(driver.video_data, (enum rarch_shader_type)g_settings.video.shader_type, NULL, RARCH_SHADER_INDEX_PASS2);
|
||||
if (g_extern.lifecycle_mode_state & (1ULL << MODE_INFO_DRAW))
|
||||
msg_queue_push(g_extern.msg_queue, "INFO - Shader successfully loaded.", 1, 180);
|
||||
}
|
||||
else
|
||||
RARCH_ERR("Shaders are unsupported on this platform.\n");
|
||||
}
|
||||
break;
|
||||
case SETTING_EMU_SKIN:
|
||||
if ((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) || (input & (1ULL << RMENU_DEVICE_NAV_B)))
|
||||
{
|
||||
|
@ -1828,6 +1870,7 @@ static int set_setting_action(uint8_t menu_type, unsigned switchvalue, uint64_t
|
|||
#if defined(HAVE_CG) || defined(HAVE_HLSL) || defined(HAVE_GLSL)
|
||||
set_setting_action(NULL, SETTING_SHADER, 1ULL << RMENU_DEVICE_NAV_START);
|
||||
set_setting_action(NULL, SETTING_SHADER_2, 1ULL << RMENU_DEVICE_NAV_START);
|
||||
set_setting_action(NULL, SETTING_SHADER_3, 1ULL << RMENU_DEVICE_NAV_START);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -100,6 +100,7 @@ enum
|
|||
SETTING_SHADER_PRESETS,
|
||||
SETTING_SHADER,
|
||||
SETTING_SHADER_2,
|
||||
SETTING_SHADER_3,
|
||||
#endif
|
||||
SETTING_FONT_SIZE,
|
||||
SETTING_KEEP_ASPECT_RATIO,
|
||||
|
|
|
@ -109,6 +109,7 @@ enum menu_enums
|
|||
MODE_LOAD_GAME_STATE_DIR_ENABLE,
|
||||
MODE_LOAD_FIRST_SHADER,
|
||||
MODE_LOAD_SECOND_SHADER,
|
||||
MODE_LOAD_THIRD_SHADER,
|
||||
MODE_INIT,
|
||||
MODE_MENU,
|
||||
MODE_MENU_WIDESCREEN,
|
||||
|
@ -194,6 +195,9 @@ struct settings
|
|||
|
||||
char second_pass_shader[PATH_MAX];
|
||||
bool second_pass_smooth;
|
||||
#ifdef __CELLOS_LV2__
|
||||
char third_pass_shader[PATH_MAX];
|
||||
#endif
|
||||
char shader_dir[PATH_MAX];
|
||||
|
||||
char font_path[PATH_MAX];
|
||||
|
|
|
@ -486,6 +486,8 @@ static bool load_plain(const char *path)
|
|||
if (!load_stock())
|
||||
return false;
|
||||
|
||||
cg_shader_num = 1;
|
||||
|
||||
if (path)
|
||||
{
|
||||
RARCH_LOG("Loading Cg file: %s\n", path);
|
||||
|
@ -493,6 +495,7 @@ static bool load_plain(const char *path)
|
|||
if (!load_program(1, path, true))
|
||||
return false;
|
||||
|
||||
|
||||
if (*g_settings.video.second_pass_shader
|
||||
#ifndef RARCH_CONSOLE
|
||||
&& g_settings.video.render_to_texture
|
||||
|
@ -502,19 +505,34 @@ static bool load_plain(const char *path)
|
|||
if (!load_program(2, g_settings.video.second_pass_shader, true))
|
||||
return false;
|
||||
|
||||
cg_shader_num = 2;
|
||||
cg_shader_num++;
|
||||
}
|
||||
else
|
||||
{
|
||||
prg[2] = prg[0];
|
||||
cg_shader_num = 1;
|
||||
|
||||
#ifdef __CELLOS_LV2__
|
||||
if (*g_settings.video.third_pass_shader
|
||||
#ifndef RARCH_CONSOLE
|
||||
&& g_settings.video.render_to_texture
|
||||
#endif
|
||||
)
|
||||
{
|
||||
if (!load_program(3, g_settings.video.third_pass_shader, true))
|
||||
return false;
|
||||
|
||||
cg_shader_num++;
|
||||
}
|
||||
else
|
||||
prg[3] = prg[0];
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
RARCH_LOG("Loading stock Cg file.\n");
|
||||
prg[2] = prg[1] = prg[0];
|
||||
cg_shader_num = 1;
|
||||
#ifdef __CELLOS_LV2__
|
||||
prg[3] = prg[0];
|
||||
#endif
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -823,6 +841,12 @@ static bool load_shader(const char *cgp_path, unsigned i, config_file_t *conf)
|
|||
strlcpy(g_settings.video.second_pass_shader,
|
||||
path_buf, sizeof(g_settings.video.second_pass_shader));
|
||||
break;
|
||||
#ifdef __CELLOS_LV2__
|
||||
case 2:
|
||||
strlcpy(g_settings.video.third_pass_shader,
|
||||
path_buf, sizeof(g_settings.video.third_pass_shader));
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1038,6 +1062,11 @@ static bool load_preset(const char *path)
|
|||
case 1:
|
||||
g_settings.video.second_pass_smooth = fbo_smooth[2] == FILTER_LINEAR;
|
||||
break;
|
||||
#ifdef __CELLOS_LV2__
|
||||
case 2:
|
||||
g_settings.video.second_pass_smooth = fbo_smooth[3] == FILTER_LINEAR;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -254,6 +254,9 @@ void config_set_defaults(void)
|
|||
#if defined(HAVE_CG) || defined(HAVE_HLSL) || defined(HAVE_GLSL)
|
||||
strlcpy(g_settings.video.cg_shader_path, default_paths.shader_file, sizeof(g_settings.video.cg_shader_path));
|
||||
strlcpy(g_settings.video.second_pass_shader, default_paths.shader_file, sizeof(g_settings.video.second_pass_shader));
|
||||
#ifdef __CELLOS_LV2__
|
||||
strlcpy(g_settings.video.third_pass_shader, default_paths.shader_file, sizeof(g_settings.video.third_pass_shader));
|
||||
#endif
|
||||
#endif
|
||||
|
||||
strlcpy(g_settings.system_directory, default_paths.system_dir, sizeof(g_settings.system_directory));
|
||||
|
@ -456,6 +459,9 @@ bool config_load_file(const char *path)
|
|||
CONFIG_GET_PATH(video.cg_shader_path, "video_cg_shader");
|
||||
CONFIG_GET_PATH(video.bsnes_shader_path, "video_bsnes_shader");
|
||||
CONFIG_GET_PATH(video.second_pass_shader, "video_second_pass_shader");
|
||||
#ifdef __CELLOS_LV2__
|
||||
CONFIG_GET_PATH(video.third_pass_shader, "video_third_pass_shader");
|
||||
#endif
|
||||
CONFIG_GET_BOOL(video.render_to_texture, "video_render_to_texture");
|
||||
CONFIG_GET_FLOAT(video.fbo.scale_x, "video_fbo_scale_x");
|
||||
CONFIG_GET_FLOAT(video.fbo.scale_y, "video_fbo_scale_y");
|
||||
|
@ -1200,6 +1206,9 @@ bool config_save_file(const char *path)
|
|||
config_set_float(conf, "video_fbo_scale_x", g_settings.video.fbo.scale_x);
|
||||
config_set_float(conf, "video_fbo_scale_y", g_settings.video.fbo.scale_y);
|
||||
config_set_string(conf, "video_second_pass_shader", g_settings.video.second_pass_shader);
|
||||
#ifdef __CELLOS_LV2__
|
||||
config_set_string(conf, "video_third_pass_shader", g_settings.video.third_pass_shader);
|
||||
#endif
|
||||
config_set_bool(conf, "video_render_to_texture", g_settings.video.render_to_texture);
|
||||
config_set_bool(conf, "video_second_pass_smooth", g_settings.video.second_pass_smooth);
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue