mirror of
https://github.com/libretro/RetroArch
synced 2025-02-28 22:13:51 +00:00
Add SHADER_CTL_GET_CURRENT_SHADER
This commit is contained in:
parent
38034abce6
commit
debb5dd0ce
@ -58,18 +58,6 @@ const shader_backend_t *shader_ctx_find_driver(const char *ident)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct video_shader *video_shader_driver_get_current_shader(void)
|
||||
{
|
||||
void *video_driver = video_driver_get_ptr(false);
|
||||
const video_poke_interface_t *video_poke = video_driver_get_poke();
|
||||
if (!video_poke || !video_driver)
|
||||
return NULL;
|
||||
if (!video_poke->get_current_shader)
|
||||
return NULL;
|
||||
return video_poke->get_current_shader(video_driver);
|
||||
}
|
||||
|
||||
|
||||
const char *video_shader_driver_get_ident(void)
|
||||
{
|
||||
if (!current_shader)
|
||||
@ -88,6 +76,20 @@ bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *dat
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
case SHADER_CTL_GET_CURRENT_SHADER:
|
||||
{
|
||||
video_shader_ctx_t *shader = (video_shader_ctx_t*)data;
|
||||
void *video_driver = video_driver_get_ptr(false);
|
||||
const video_poke_interface_t *video_poke = video_driver_get_poke();
|
||||
|
||||
shader->data = NULL;
|
||||
if (!video_poke || !video_driver)
|
||||
return false;
|
||||
if (!video_poke->get_current_shader)
|
||||
return false;
|
||||
shader->data = video_poke->get_current_shader(video_driver);
|
||||
}
|
||||
break;
|
||||
case SHADER_CTL_DIRECT_GET_CURRENT_SHADER:
|
||||
{
|
||||
video_shader_ctx_t *shader = (video_shader_ctx_t*)data;
|
||||
|
@ -70,6 +70,7 @@ enum video_shader_driver_ctl_state
|
||||
SHADER_CTL_FILTER_TYPE,
|
||||
SHADER_CTL_USE,
|
||||
SHADER_CTL_WRAP_TYPE,
|
||||
SHADER_CTL_GET_CURRENT_SHADER,
|
||||
SHADER_CTL_DIRECT_GET_CURRENT_SHADER
|
||||
};
|
||||
|
||||
@ -190,8 +191,6 @@ extern const shader_backend_t shader_null_backend;
|
||||
**/
|
||||
const shader_backend_t *shader_ctx_find_driver(const char *ident);
|
||||
|
||||
struct video_shader *video_shader_driver_get_current_shader(void);
|
||||
|
||||
const char *video_shader_driver_get_ident(void);
|
||||
|
||||
unsigned video_shader_driver_get_prev_textures(void);
|
||||
|
@ -252,20 +252,20 @@ static void menu_action_setting_disp_set_label_shader_parameter(
|
||||
char *s2, size_t len2)
|
||||
{
|
||||
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL)
|
||||
video_shader_ctx_t shader_info;
|
||||
const struct video_shader_parameter *param = NULL;
|
||||
struct video_shader *shader = NULL;
|
||||
#endif
|
||||
*s = '\0';
|
||||
*w = 19;
|
||||
strlcpy(s2, path, len2);
|
||||
|
||||
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL)
|
||||
shader = video_shader_driver_get_current_shader();
|
||||
video_shader_driver_ctl(SHADER_CTL_GET_CURRENT_SHADER, &shader_info);
|
||||
|
||||
if (!shader)
|
||||
if (!shader_info.data)
|
||||
return;
|
||||
|
||||
param = &shader->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0];
|
||||
param = &shader_info.data->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0];
|
||||
|
||||
if (!param)
|
||||
return;
|
||||
|
@ -52,9 +52,13 @@ static int generic_shader_action_parameter_left(
|
||||
static int shader_action_parameter_left(unsigned type, const char *label,
|
||||
bool wraparound)
|
||||
{
|
||||
struct video_shader *shader = video_shader_driver_get_current_shader();
|
||||
struct video_shader_parameter *param = &shader->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0];
|
||||
return generic_shader_action_parameter_left(shader, param, type, label, wraparound);
|
||||
video_shader_ctx_t shader_info;
|
||||
struct video_shader_parameter *param = NULL;
|
||||
|
||||
video_shader_driver_ctl(SHADER_CTL_GET_CURRENT_SHADER, &shader_info);
|
||||
|
||||
param = &shader_info.data->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0];
|
||||
return generic_shader_action_parameter_left(shader_info.data, param, type, label, wraparound);
|
||||
}
|
||||
|
||||
static int shader_action_parameter_preset_left(unsigned type, const char *label,
|
||||
|
@ -56,9 +56,13 @@ static int generic_shader_action_parameter_right(
|
||||
|
||||
int shader_action_parameter_right(unsigned type, const char *label, bool wraparound)
|
||||
{
|
||||
struct video_shader *shader = video_shader_driver_get_current_shader();
|
||||
struct video_shader_parameter *param = &shader->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0];
|
||||
return generic_shader_action_parameter_right(shader, param, type, label, wraparound);
|
||||
video_shader_ctx_t shader_info;
|
||||
struct video_shader_parameter *param = NULL;
|
||||
|
||||
video_shader_driver_ctl(SHADER_CTL_GET_CURRENT_SHADER, &shader_info);
|
||||
|
||||
param = &shader_info.data->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0];
|
||||
return generic_shader_action_parameter_right(shader_info.data, param, type, label, wraparound);
|
||||
}
|
||||
|
||||
int shader_action_parameter_preset_right(unsigned type, const char *label,
|
||||
|
@ -114,13 +114,16 @@ static int action_start_input_desc(unsigned type, const char *label)
|
||||
static int action_start_shader_action_parameter(unsigned type, const char *label)
|
||||
{
|
||||
#ifdef HAVE_SHADER_MANAGER
|
||||
video_shader_ctx_t shader_info;
|
||||
struct video_shader_parameter *param = NULL;
|
||||
struct video_shader *shader = video_shader_driver_get_current_shader();
|
||||
|
||||
if (!shader)
|
||||
video_shader_driver_ctl(SHADER_CTL_GET_CURRENT_SHADER, &shader_info);
|
||||
|
||||
if (!shader_info.data)
|
||||
return 0;
|
||||
|
||||
param = &shader->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0];
|
||||
param = &shader_info.data->parameters
|
||||
[type - MENU_SETTINGS_SHADER_PARAMETER_0];
|
||||
param->current = param->initial;
|
||||
param->current = min(max(param->minimum, param->current), param->maximum);
|
||||
|
||||
|
@ -2569,10 +2569,10 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
|
||||
{
|
||||
size_t i;
|
||||
menu_ctx_displaylist_t disp_list;
|
||||
int ret = 0;
|
||||
#ifdef HAVE_SHADER_MANAGER
|
||||
struct video_shader *shader = NULL;
|
||||
video_shader_ctx_t shader_info;
|
||||
#endif
|
||||
int ret = 0;
|
||||
rarch_system_info_t *system = NULL;
|
||||
core_info_list_t *list = NULL;
|
||||
menu_handle_t *menu = NULL;
|
||||
@ -3014,11 +3014,13 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
|
||||
case DISPLAYLIST_SHADER_PARAMETERS:
|
||||
case DISPLAYLIST_SHADER_PARAMETERS_PRESET:
|
||||
#ifdef HAVE_SHADER_MANAGER
|
||||
shader = video_shader_driver_get_current_shader();
|
||||
if (shader)
|
||||
ret = deferred_push_video_shader_parameters_common(info, shader,
|
||||
video_shader_driver_ctl(SHADER_CTL_GET_CURRENT_SHADER, &shader_info);
|
||||
|
||||
if (shader_info.data)
|
||||
ret = deferred_push_video_shader_parameters_common(info, shader_info.data,
|
||||
(type == DISPLAYLIST_SHADER_PARAMETERS)
|
||||
? MENU_SETTINGS_SHADER_PARAMETER_0 : MENU_SETTINGS_SHADER_PRESET_PARAMETER_0
|
||||
? MENU_SETTINGS_SHADER_PARAMETER_0
|
||||
: MENU_SETTINGS_SHADER_PRESET_PARAMETER_0
|
||||
);
|
||||
else
|
||||
{
|
||||
|
@ -118,13 +118,18 @@ static shader_dlg_t g_shader_dlg = {0};
|
||||
|
||||
static void shader_dlg_refresh_trackbar_label(int index)
|
||||
{
|
||||
video_shader_ctx_t shader_info;
|
||||
char val_buffer[32] = {0};
|
||||
struct video_shader* shader = video_shader_driver_get_current_shader();
|
||||
|
||||
if (floorf(shader->parameters[index].current) == shader->parameters[index].current)
|
||||
snprintf(val_buffer, sizeof(val_buffer), "%.0f", shader->parameters[index].current);
|
||||
video_shader_driver_ctl(SHADER_CTL_GET_CURRENT_SHADER, &shader_info);
|
||||
|
||||
if (floorf(shader_info.data->parameters[index].current)
|
||||
== shader_info.data->parameters[index].current)
|
||||
snprintf(val_buffer, sizeof(val_buffer), "%.0f",
|
||||
shader_info.data->parameters[index].current);
|
||||
else
|
||||
snprintf(val_buffer, sizeof(val_buffer), "%.2f", shader->parameters[index].current);
|
||||
snprintf(val_buffer, sizeof(val_buffer), "%.2f",
|
||||
shader_info.data->parameters[index].current);
|
||||
|
||||
SendMessage(g_shader_dlg.controls[index].trackbar.label_val, WM_SETTEXT, 0, (LPARAM)val_buffer);
|
||||
|
||||
@ -133,7 +138,9 @@ static void shader_dlg_refresh_trackbar_label(int index)
|
||||
static void shader_dlg_params_refresh(void)
|
||||
{
|
||||
int i;
|
||||
struct video_shader* shader = video_shader_driver_get_current_shader();
|
||||
video_shader_ctx_t shader_info;
|
||||
|
||||
video_shader_driver_ctl(SHADER_CTL_GET_CURRENT_SHADER, &shader_info);
|
||||
|
||||
for (i = 0; i < GFX_MAX_PARAMETERS; i++)
|
||||
{
|
||||
@ -146,7 +153,9 @@ static void shader_dlg_params_refresh(void)
|
||||
{
|
||||
case SHADER_PARAM_CTRL_CHECKBOX:
|
||||
{
|
||||
bool checked = (shader->parameters[i].current == shader->parameters[i].maximum);
|
||||
bool checked =
|
||||
(shader_info.data->parameters[i].current ==
|
||||
shader_info.data->parameters[i].maximum);
|
||||
SendMessage(control->checkbox.hwnd, BM_SETCHECK, checked, 0);
|
||||
}
|
||||
break;
|
||||
@ -155,9 +164,13 @@ static void shader_dlg_params_refresh(void)
|
||||
|
||||
SendMessage(control->trackbar.hwnd, TBM_SETRANGEMIN, (WPARAM)TRUE, (LPARAM)0);
|
||||
SendMessage(control->trackbar.hwnd, TBM_SETRANGEMAX, (WPARAM)TRUE,
|
||||
(LPARAM)((shader->parameters[i].maximum - shader->parameters[i].minimum) / shader->parameters[i].step));
|
||||
(LPARAM)((shader_info.data->parameters[i].maximum -
|
||||
shader_info.data->parameters[i].minimum)
|
||||
/ shader_info.data->parameters[i].step));
|
||||
SendMessage(control->trackbar.hwnd, TBM_SETPOS, (WPARAM)TRUE,
|
||||
(LPARAM)((shader->parameters[i].current - shader->parameters[i].minimum) / shader->parameters[i].step));
|
||||
(LPARAM)((shader_info.data->parameters[i].current -
|
||||
shader_info.data->parameters[i].minimum) /
|
||||
shader_info.data->parameters[i].step));
|
||||
break;
|
||||
case SHADER_PARAM_CTRL_NONE:
|
||||
default:
|
||||
@ -200,25 +213,28 @@ void shader_dlg_params_reload(void)
|
||||
HFONT hFont;
|
||||
RECT parent_rect;
|
||||
int i, pos_x, pos_y;
|
||||
struct video_shader* shader = video_shader_driver_get_current_shader();
|
||||
video_shader_ctx_t shader_info;
|
||||
|
||||
video_shader_driver_ctl(SHADER_CTL_GET_CURRENT_SHADER, &shader_info);
|
||||
|
||||
shader_dlg_params_clear();
|
||||
|
||||
if (!shader)
|
||||
if (!shader_info.data)
|
||||
return;
|
||||
if (shader->num_parameters > GFX_MAX_PARAMETERS)
|
||||
if (shader_info.data->num_parameters > GFX_MAX_PARAMETERS)
|
||||
return;
|
||||
|
||||
hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
|
||||
pos_y = g_shader_dlg.parameters_start_y;
|
||||
pos_x = SHADER_DLG_CTRL_X;
|
||||
|
||||
for (i = 0; i < (int)shader->num_parameters; i++)
|
||||
for (i = 0; i < (int)shader_info.data->num_parameters; i++)
|
||||
{
|
||||
shader_param_ctrl_t*control = &g_shader_dlg.controls[i];
|
||||
|
||||
if ((shader->parameters[i].minimum == 0.0)
|
||||
&& (shader->parameters[i].maximum == (shader->parameters[i].minimum + shader->parameters[i].step)))
|
||||
if ((shader_info.data->parameters[i].minimum == 0.0)
|
||||
&& (shader_info.data->parameters[i].maximum
|
||||
== (shader_info.data->parameters[i].minimum + shader_info.data->parameters[i].step)))
|
||||
{
|
||||
if ((pos_y + SHADER_DLG_CHECKBOX_HEIGHT + SHADER_DLG_CTRL_MARGIN + 20) > SHADER_DLG_MAX_HEIGHT)
|
||||
{
|
||||
@ -227,7 +243,7 @@ void shader_dlg_params_reload(void)
|
||||
}
|
||||
|
||||
control->type = SHADER_PARAM_CTRL_CHECKBOX;
|
||||
control->checkbox.hwnd = CreateWindowEx(0, "BUTTON", shader->parameters[i].desc,
|
||||
control->checkbox.hwnd = CreateWindowEx(0, "BUTTON", shader_info.data->parameters[i].desc,
|
||||
WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, pos_x, pos_y, SHADER_DLG_CTRL_WIDTH, SHADER_DLG_CHECKBOX_HEIGHT,
|
||||
g_shader_dlg.hwnd, (HMENU)(size_t)i, NULL, NULL);
|
||||
SendMessage(control->checkbox.hwnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
|
||||
@ -243,7 +259,7 @@ void shader_dlg_params_reload(void)
|
||||
}
|
||||
|
||||
control->type = SHADER_PARAM_CTRL_TRACKBAR;
|
||||
control->trackbar.label_title = CreateWindowEx(0, "STATIC", shader->parameters[i].desc,
|
||||
control->trackbar.label_title = CreateWindowEx(0, "STATIC", shader_info.data->parameters[i].desc,
|
||||
WS_CHILD | WS_VISIBLE | SS_LEFT, pos_x, pos_y, SHADER_DLG_CTRL_WIDTH, SHADER_DLG_LABEL_HEIGHT, g_shader_dlg.hwnd,
|
||||
(HMENU)(size_t)i, NULL, NULL);
|
||||
SendMessage(control->trackbar.label_title, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
|
||||
@ -318,7 +334,9 @@ static LRESULT CALLBACK ShaderDlgWndProc(HWND hwnd, UINT message,
|
||||
WPARAM wparam, LPARAM lparam)
|
||||
{
|
||||
int i, pos;
|
||||
struct video_shader* shader = video_shader_driver_get_current_shader();
|
||||
video_shader_ctx_t shader_info;
|
||||
|
||||
video_shader_driver_ctl(SHADER_CTL_GET_CURRENT_SHADER, &shader_info);
|
||||
|
||||
switch (message)
|
||||
{
|
||||
@ -347,9 +365,9 @@ static LRESULT CALLBACK ShaderDlgWndProc(HWND hwnd, UINT message,
|
||||
break;
|
||||
|
||||
if (SendMessage(g_shader_dlg.controls[i].checkbox.hwnd, BM_GETCHECK, 0, 0) == BST_CHECKED)
|
||||
shader->parameters[i].current = shader->parameters[i].maximum;
|
||||
shader_info.data->parameters[i].current = shader_info.data->parameters[i].maximum;
|
||||
else
|
||||
shader->parameters[i].current = shader->parameters[i].minimum;
|
||||
shader_info.data->parameters[i].current = shader_info.data->parameters[i].minimum;
|
||||
|
||||
break;
|
||||
|
||||
@ -363,7 +381,8 @@ static LRESULT CALLBACK ShaderDlgWndProc(HWND hwnd, UINT message,
|
||||
break;
|
||||
|
||||
pos = (int)SendMessage(g_shader_dlg.controls[i].trackbar.hwnd, TBM_GETPOS, 0, 0);
|
||||
shader->parameters[i].current = shader->parameters[i].minimum + pos * shader->parameters[i].step;
|
||||
shader_info.data->parameters[i].current =
|
||||
shader_info.data->parameters[i].minimum + pos * shader_info.data->parameters[i].step;
|
||||
|
||||
shader_dlg_refresh_trackbar_label(i);
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user