diff --git a/gfx/common/win32_common.h b/gfx/common/win32_common.h index 7afe7d0dd3..f03940ce9d 100644 --- a/gfx/common/win32_common.h +++ b/gfx/common/win32_common.h @@ -63,8 +63,6 @@ void create_gdi_context(HWND hwnd, bool *quit); bool gdi_has_menu_frame(void); -void shader_dlg_params_reload(void); - bool win32_window_init(WNDCLASSEX *wndclass, bool fullscreen, const char *class_name); void win32_set_style(MONITORINFOEX *current_mon, HMONITOR *hm_to_use, diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 1008697366..d3e7dfd2a4 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -2200,11 +2200,6 @@ static bool gl_set_shader(void *data, /* Apparently need to set viewport for passes when we aren't using FBOs. */ gl_set_shader_viewports(gl); context_bind_hw_render(true); -#if defined(_WIN32) && !defined(_XBOX) - /* Shader dialog is disabled for now, until video_threaded issues are fixed. - shader_dlg_params_reload();*/ -#endif - #endif return true; diff --git a/ui/drivers/ui_win32.c b/ui/drivers/ui_win32.c index 2c771ef916..0fd3245901 100644 --- a/ui/drivers/ui_win32.c +++ b/ui/drivers/ui_win32.c @@ -55,451 +55,11 @@ #include "ui_win32.h" -#define SHADER_DLG_WIDTH 220 -#define SHADER_DLG_MIN_HEIGHT 200 -#define SHADER_DLG_MAX_HEIGHT 800 -#define SHADER_DLG_CTRL_MARGIN 8 -#define SHADER_DLG_CTRL_X 10 -#define SHADER_DLG_CHECKBOX_HEIGHT 15 -#define SHADER_DLG_SEPARATOR_HEIGHT 10 -#define SHADER_DLG_LABEL_HEIGHT 14 -#define SHADER_DLG_TRACKBAR_HEIGHT 22 -#define SHADER_DLG_TRACKBAR_LABEL_WIDTH 30 - -#define SHADER_DLG_CTRL_WIDTH (SHADER_DLG_WIDTH - 2 * SHADER_DLG_CTRL_X) -#define SHADER_DLG_TRACKBAR_WIDTH (SHADER_DLG_CTRL_WIDTH - SHADER_DLG_TRACKBAR_LABEL_WIDTH) - typedef struct ui_companion_win32 { void *empty; } ui_companion_win32_t; -#ifdef HAVE_SHADERPIPELINE -enum shader_param_ctrl_type -{ - SHADER_PARAM_CTRL_NONE = 0, - SHADER_PARAM_CTRL_CHECKBOX, - SHADER_PARAM_CTRL_TRACKBAR -}; - -enum -{ - SHADER_DLG_CHECKBOX_ONTOP_ID = GFX_MAX_PARAMETERS, - SHADER_DLG_CHECKBOX_BUTTON1_ID, - SHADER_DLG_CHECKBOX_BUTTON2_ID -}; - -typedef struct -{ - enum shader_param_ctrl_type type; - union - { - ui_window_win32_t checkbox; - struct - { - HWND hwnd; - HWND label_title; - HWND label_val; - } trackbar; - } elems; -} shader_param_ctrl_t; - -typedef struct -{ - ui_window_win32_t window; - ui_window_win32_t separator; - ui_window_win32_t on_top_checkbox; - shader_param_ctrl_t controls[GFX_MAX_PARAMETERS]; - int parameters_start_y; -} shader_dlg_t; - -static shader_dlg_t g_shader_dlg = {{0}}; - -static bool shader_dlg_refresh_trackbar_label(int index, - video_shader_ctx_t *shader_info) -{ - char val_buffer[32] = {0}; - - 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_info->data->parameters[index].current); - - SendMessage(g_shader_dlg.controls[index].elems.trackbar.label_val, - WM_SETTEXT, 0, (LPARAM)val_buffer); - - return true; -} - -static void shader_dlg_params_refresh(void) -{ - int i; - - for (i = 0; i < GFX_MAX_PARAMETERS; i++) - { - shader_param_ctrl_t*control = &g_shader_dlg.controls[i]; - - if (control->type == SHADER_PARAM_CTRL_NONE) - break; - - switch (control->type) - { - case SHADER_PARAM_CTRL_CHECKBOX: - { - bool checked; - - video_shader_ctx_t shader_info; - video_shader_driver_get_current_shader(&shader_info); - - checked = shader_info.data ? - (shader_info.data->parameters[i].current == - shader_info.data->parameters[i].maximum) : false; - SendMessage(control->elems.checkbox.hwnd, BM_SETCHECK, checked, 0); - } - break; - case SHADER_PARAM_CTRL_TRACKBAR: - { - video_shader_ctx_t shader_info; - video_shader_driver_get_current_shader(&shader_info); - if (shader_info.data && !shader_dlg_refresh_trackbar_label(i, &shader_info)) - break; - - if (shader_info.data) - { - SendMessage(control->elems.trackbar.hwnd, - TBM_SETRANGEMIN, (WPARAM)TRUE, (LPARAM)0); - SendMessage(control->elems.trackbar.hwnd, - TBM_SETRANGEMAX, (WPARAM)TRUE, - (LPARAM)((shader_info.data->parameters[i].maximum - - shader_info.data->parameters[i].minimum) - / shader_info.data->parameters[i].step)); - SendMessage(control->elems.trackbar.hwnd, TBM_SETPOS, (WPARAM)TRUE, - (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: - break; - } - } -} - -static void shader_dlg_params_clear(void) -{ - unsigned i; - - for (i = 0; i < GFX_MAX_PARAMETERS; i++) - { - shader_param_ctrl_t*control = &g_shader_dlg.controls[i]; - - if (!control || control->type == SHADER_PARAM_CTRL_NONE) - break; - - switch (control->type) - { - case SHADER_PARAM_CTRL_NONE: - break; - case SHADER_PARAM_CTRL_CHECKBOX: - { - const ui_window_t *window = ui_companion_driver_get_window_ptr(); - if (window) - window->destroy(&control->elems.checkbox); - } - break; - case SHADER_PARAM_CTRL_TRACKBAR: - DestroyWindow(control->elems.trackbar.label_title); - DestroyWindow(control->elems.trackbar.label_val); - DestroyWindow(control->elems.trackbar.hwnd); - break; - } - - control->type = SHADER_PARAM_CTRL_NONE; - } -} -#endif - -void shader_dlg_params_reload(void) -{ -#ifdef HAVE_SHADERPIPELINE - HFONT hFont; - RECT parent_rect; - int i, pos_x, pos_y; - video_shader_ctx_t shader_info; - const ui_window_t *window = NULL; - - shader_dlg_params_clear(); - - video_shader_driver_get_current_shader(&shader_info); - - if (!shader_info.data || shader_info.data->num_parameters > GFX_MAX_PARAMETERS) - return; - - window = ui_companion_driver_get_window_ptr(); - 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_info.data->num_parameters; i++) - { - shader_param_ctrl_t*control = &g_shader_dlg.controls[i]; - - 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) - { - pos_y = g_shader_dlg.parameters_start_y; - pos_x += SHADER_DLG_WIDTH; - } - - control->type = SHADER_PARAM_CTRL_CHECKBOX; - control->elems.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.window.hwnd, (HMENU)(size_t)i, NULL, NULL); - SendMessage(control->elems.checkbox.hwnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); - pos_y += SHADER_DLG_CHECKBOX_HEIGHT + SHADER_DLG_CTRL_MARGIN; - } - else - { - if ((pos_y + SHADER_DLG_LABEL_HEIGHT + SHADER_DLG_TRACKBAR_HEIGHT + - SHADER_DLG_CTRL_MARGIN + 20) > SHADER_DLG_MAX_HEIGHT) - { - pos_y = g_shader_dlg.parameters_start_y; - pos_x += SHADER_DLG_WIDTH; - } - - control->type = SHADER_PARAM_CTRL_TRACKBAR; - control->elems.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.window.hwnd, - (HMENU)(size_t)i, NULL, NULL); - SendMessage(control->elems.trackbar.label_title, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); - - pos_y += SHADER_DLG_LABEL_HEIGHT; - control->elems.trackbar.hwnd = CreateWindowEx(0, (LPCSTR)TRACKBAR_CLASS, "", - WS_CHILD | WS_VISIBLE | TBS_HORZ | TBS_NOTICKS, - pos_x + SHADER_DLG_TRACKBAR_LABEL_WIDTH, pos_y, - SHADER_DLG_TRACKBAR_WIDTH, SHADER_DLG_TRACKBAR_HEIGHT, - g_shader_dlg.window.hwnd, (HMENU)(size_t)i, NULL, NULL); - - control->elems.trackbar.label_val = CreateWindowEx(0, "STATIC", "", - WS_CHILD | WS_VISIBLE | SS_LEFT, pos_x, - pos_y, SHADER_DLG_TRACKBAR_LABEL_WIDTH, SHADER_DLG_LABEL_HEIGHT, - g_shader_dlg.window.hwnd, (HMENU)(size_t)i, NULL, NULL); - SendMessage(control->elems.trackbar.label_val, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); - - SendMessage(control->elems.trackbar.hwnd, TBM_SETBUDDY, (WPARAM)TRUE, - (LPARAM)control->elems.trackbar.label_val); - - pos_y += SHADER_DLG_TRACKBAR_HEIGHT + SHADER_DLG_CTRL_MARGIN; - - } - - } - - if (window && g_shader_dlg.separator.hwnd) - window->destroy(&g_shader_dlg.separator); - - g_shader_dlg.separator.hwnd = CreateWindowEx(0, "STATIC", "", - SS_ETCHEDHORZ | WS_VISIBLE | WS_CHILD, SHADER_DLG_CTRL_X, - g_shader_dlg.parameters_start_y - SHADER_DLG_CTRL_MARGIN - SHADER_DLG_SEPARATOR_HEIGHT / 2, - (pos_x - SHADER_DLG_CTRL_X) + SHADER_DLG_CTRL_WIDTH, - SHADER_DLG_SEPARATOR_HEIGHT / 2, - g_shader_dlg.window.hwnd, NULL, NULL, - NULL); - - shader_dlg_params_refresh(); - - GetWindowRect(g_shader_dlg.window.hwnd, &parent_rect); - SetWindowPos(g_shader_dlg.window.hwnd, NULL, 0, 0, - (pos_x - SHADER_DLG_CTRL_X) + SHADER_DLG_WIDTH, - (pos_x == SHADER_DLG_CTRL_X) ? pos_y + 30 : SHADER_DLG_MAX_HEIGHT, - SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE); -#endif -} - -#ifdef HAVE_SHADERPIPELINE -static void shader_dlg_update_on_top_state(void) -{ - bool on_top = SendMessage(g_shader_dlg.on_top_checkbox.hwnd, - BM_GETCHECK, 0, 0) == BST_CHECKED; - - SetWindowPos(g_shader_dlg.window.hwnd, on_top - ? HWND_TOPMOST : HWND_NOTOPMOST , 0, 0, 0, 0, - SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); -} - -static void shader_dlg_show(HWND parent_hwnd) -{ - const ui_window_t *window = ui_companion_driver_get_window_ptr(); - - if (!IsWindowVisible(g_shader_dlg.window.hwnd)) - { - if (parent_hwnd) - { - RECT parent_rect; - GetWindowRect(parent_hwnd, &parent_rect); - SetWindowPos(g_shader_dlg.window.hwnd, HWND_TOP, - parent_rect.right, parent_rect.top, - 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW); - } - else - window->set_visible(&g_shader_dlg.window, true); - - shader_dlg_update_on_top_state(); - - shader_dlg_params_reload(); - - } - - window->set_focused(&g_shader_dlg.window); -} -#endif - -#if 0 -static LRESULT CALLBACK ShaderDlgWndProc(HWND hwnd, UINT message, - WPARAM wparam, LPARAM lparam) -{ - int i, pos; - const ui_window_t *window = ui_companion_driver_get_window_ptr(); - - switch (message) - { - case WM_CREATE: - break; - - case WM_CLOSE: - case WM_DESTROY: - case WM_QUIT: - if (window) - window->set_visible(&g_shader_dlg.window, false); - return 0; - - case WM_COMMAND: - i = LOWORD(wparam); - - if (i == SHADER_DLG_CHECKBOX_ONTOP_ID) - { - shader_dlg_update_on_top_state(); - break; - } - - if (i >= GFX_MAX_PARAMETERS) - break; - - if (g_shader_dlg.controls[i].type != SHADER_PARAM_CTRL_CHECKBOX) - break; - - { - video_shader_ctx_t shader_info; - video_shader_driver_get_current_shader(&shader_info); - - if (SendMessage(g_shader_dlg.controls[i].elems.checkbox.hwnd, - BM_GETCHECK, 0, 0) == BST_CHECKED) - shader_info.data->parameters[i].current = - shader_info.data->parameters[i].maximum; - else - shader_info.data->parameters[i].current = - shader_info.data->parameters[i].minimum; - } - break; - - case WM_HSCROLL: - { - video_shader_ctx_t shader_info; - video_shader_driver_get_current_shader(&shader_info); - i = GetWindowLong((HWND)lparam, GWL_ID); - - if (i >= GFX_MAX_PARAMETERS) - break; - - if (g_shader_dlg.controls[i].type != SHADER_PARAM_CTRL_TRACKBAR) - break; - - pos = (int)SendMessage(g_shader_dlg.controls[i].elems.trackbar.hwnd, TBM_GETPOS, 0, 0); - - { - - shader_info.data->parameters[i].current = - shader_info.data->parameters[i].minimum + pos * shader_info.data->parameters[i].step; - } - - if (shader_info.data) - shader_dlg_refresh_trackbar_label(i, &shader_info); - } - break; - - } - - return DefWindowProc(hwnd, message, wparam, lparam); -} - -static bool win32_shader_dlg_init(void) -{ - static bool inited = false; - int pos_y; - HFONT hFont; - - if (g_shader_dlg.window.hwnd) - return true; - - if (!inited) - { - WNDCLASSEX wc_shader_dlg = {0}; - INITCOMMONCONTROLSEX comm_ctrl_init = {0}; - - comm_ctrl_init.dwSize = sizeof(comm_ctrl_init); - comm_ctrl_init.dwICC = ICC_BAR_CLASSES; - - if (!InitCommonControlsEx(&comm_ctrl_init)) - return false; - - wc_shader_dlg.lpfnWndProc = ShaderDlgWndProc; - wc_shader_dlg.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); - - if (!win32_window_init(&wc_shader_dlg, true, "Shader Dialog")) - return false; - - inited = true; - } - - hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT); - - g_shader_dlg.window.hwnd = CreateWindowEx(0, "Shader Dialog", "Shader Parameters", - WS_POPUPWINDOW | WS_CAPTION, 100, 100, - SHADER_DLG_WIDTH, SHADER_DLG_MIN_HEIGHT, NULL, NULL, NULL, NULL); - - pos_y = SHADER_DLG_CTRL_MARGIN; - g_shader_dlg.on_top_checkbox.hwnd = CreateWindowEx(0, "BUTTON", "Always on Top", - BS_AUTOCHECKBOX | WS_VISIBLE | WS_CHILD, - SHADER_DLG_CTRL_X, pos_y, SHADER_DLG_CTRL_WIDTH, - SHADER_DLG_CHECKBOX_HEIGHT, g_shader_dlg.window.hwnd, - (HMENU)SHADER_DLG_CHECKBOX_ONTOP_ID, NULL, NULL); - pos_y += SHADER_DLG_CHECKBOX_HEIGHT + SHADER_DLG_CTRL_MARGIN; - - SendMessage(g_shader_dlg.on_top_checkbox.hwnd, - WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); - - pos_y += SHADER_DLG_SEPARATOR_HEIGHT + SHADER_DLG_CTRL_MARGIN; - - g_shader_dlg.parameters_start_y = pos_y; - return true; -} -#endif - bool win32_window_init(WNDCLASSEX *wndclass, bool fullscreen, const char *class_name) { @@ -520,16 +80,6 @@ bool win32_window_init(WNDCLASSEX *wndclass, if (!RegisterClassEx(wndclass)) return false; - /* This is non-NULL when we want a window for shader dialogs, - * therefore early return here */ - /* TODO/FIXME - this is ugly. Find a better way */ - if (class_name != NULL) - return true; - - /* Shader dialog is disabled for now, until - * video_threaded issues are fixed. - if (!win32_shader_dlg_init()) - RARCH_ERR("[WGL]: wgl_shader_dlg_init() failed.\n");*/ return true; } @@ -680,11 +230,6 @@ LRESULT win32_menu_loop(HWND owner, WPARAM wparam) case ID_M_FULL_SCREEN: cmd = CMD_EVENT_FULLSCREEN_TOGGLE; break; - case ID_M_SHADER_PARAMETERS: -#if !defined(_XBOX) && defined(HAVE_SHADERPIPELINE) - shader_dlg_show(owner); -#endif - break; case ID_M_MOUSE_GRAB: cmd = CMD_EVENT_GRAB_MOUSE_TOGGLE; break;