static void *gfx_ctx_gdi_init(video_frame_info_t *video_info, void *video_driver) { WNDCLASSEX wndclass = {0}; (void)video_driver; if (g_inited) return NULL; win32_window_reset(); win32_monitor_init(); wndclass.lpfnWndProc = WndProcGDI; if (!win32_window_init(&wndclass, true, NULL)) return NULL; switch (win32_gdi_api) { case GFX_CTX_NONE: default: break; } return (void*)"gdi"; }
static void *gfx_ctx_wgl_init(video_frame_info_t *video_info, void *video_driver) { WNDCLASSEX wndclass = {0}; (void)video_driver; if (g_inited) return NULL; dll_handle = dylib_load("OpenGL32.dll"); win32_window_reset(); win32_monitor_init(); wndclass.lpfnWndProc = WndProcGL; if (!win32_window_init(&wndclass, true, NULL)) return NULL; switch (win32_api) { case GFX_CTX_VULKAN_API: #ifdef HAVE_VULKAN if (!vulkan_context_init(&win32_vk, VULKAN_WSI_WIN32)) return NULL; #endif break; case GFX_CTX_NONE: default: break; } return (void*)"wgl"; }
static void *gfx_ctx_gdi_init( video_frame_info_t *video_info, void *video_driver) { WNDCLASSEX wndclass = {0}; gfx_ctx_gdi_data_t *gdi = (gfx_ctx_gdi_data_t*)calloc(1, sizeof(*gdi)); if (!gdi) return NULL; if (g_win32_inited) goto error; win32_window_reset(); win32_monitor_init(); wndclass.lpfnWndProc = WndProcGDI; if (!win32_window_init(&wndclass, true, NULL)) goto error; switch (win32_gdi_api) { case GFX_CTX_NONE: default: break; } return gdi; error: if (gdi) free(gdi); return NULL; }
bool win32_shader_dlg_init(void) { #if defined(HAVE_OPENGL) || defined(HAVE_VULKAN) 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; #endif return true; }
static void *gfx_ctx_wgl_init(void *video_driver) { WNDCLASSEX wndclass = {0}; (void)video_driver; if (g_inited) return NULL; win32_window_reset(); win32_monitor_init(); wndclass.lpfnWndProc = WndProcGL; if (!win32_window_init(&wndclass, true, NULL)) return NULL; return (void*)"wgl"; }
static void *gfx_ctx_wgl_init(video_frame_info_t *video_info, void *video_driver) { WNDCLASSEX wndclass = {0}; gfx_ctx_wgl_data_t *wgl = (gfx_ctx_wgl_data_t*)calloc(1, sizeof(*wgl)); if (!wgl) return NULL; if (g_win32_inited) goto error; #ifdef HAVE_DYNAMIC dll_handle = dylib_load("OpenGL32.dll"); #endif win32_window_reset(); win32_monitor_init(); wndclass.lpfnWndProc = WndProcGL; if (!win32_window_init(&wndclass, true, NULL)) goto error; switch (win32_api) { case GFX_CTX_VULKAN_API: #ifdef HAVE_VULKAN if (!vulkan_context_init(&win32_vk, VULKAN_WSI_WIN32)) goto error; #endif break; case GFX_CTX_NONE: default: break; } return wgl; error: if (wgl) free(wgl); return NULL; }
static bool d3d_construct(d3d_video_t *d3d, const video_info_t *info, const input_driver_t **input, void **input_data) { unsigned full_x, full_y; settings_t *settings = config_get_ptr(); d3d->should_resize = false; #if defined(HAVE_MENU) d3d->menu = new overlay_t(); if (!d3d->menu) return false; d3d->menu->tex_coords[0] = 0; d3d->menu->tex_coords[1] = 0; d3d->menu->tex_coords[2] = 1; d3d->menu->tex_coords[3] = 1; d3d->menu->vert_coords[0] = 0; d3d->menu->vert_coords[1] = 1; d3d->menu->vert_coords[2] = 1; d3d->menu->vert_coords[3] = -1; #endif memset(&d3d->windowClass, 0, sizeof(d3d->windowClass)); #ifdef HAVE_WINDOW d3d->windowClass.lpfnWndProc = WndProcD3D; win32_window_init(&d3d->windowClass, true, NULL); #endif #ifdef HAVE_MONITOR bool windowed_full; RECT mon_rect; MONITORINFOEX current_mon; HMONITOR hm_to_use; win32_monitor_info(¤t_mon, &hm_to_use, &d3d->cur_mon_id); mon_rect = current_mon.rcMonitor; g_resize_width = info->width; g_resize_height = info->height; windowed_full = settings->video.windowed_fullscreen; full_x = (windowed_full || info->width == 0) ? (mon_rect.right - mon_rect.left) : info->width; full_y = (windowed_full || info->height == 0) ? (mon_rect.bottom - mon_rect.top) : info->height; RARCH_LOG("[D3D]: Monitor size: %dx%d.\n", (int)(mon_rect.right - mon_rect.left), (int)(mon_rect.bottom - mon_rect.top)); #else gfx_ctx_get_video_size(&full_x, &full_y); #endif { unsigned new_width = info->fullscreen ? full_x : info->width; unsigned new_height = info->fullscreen ? full_y : info->height; video_driver_set_size(&new_width, &new_height); } #ifdef HAVE_WINDOW DWORD style; unsigned win_width, win_height; RECT rect = {0}; video_driver_get_size(&win_width, &win_height); win32_set_style(¤t_mon, &hm_to_use, &win_width, &win_height, info->fullscreen, windowed_full, &rect, &mon_rect, &style); win32_window_create(d3d, style, &mon_rect, win_width, win_height, info->fullscreen); win32_set_window(&win_width, &win_height, info->fullscreen, windowed_full, &rect); #endif #ifdef HAVE_SHADERS /* This should only be done once here * to avoid set_shader() to be overridden * later. */ enum rarch_shader_type type = video_shader_parse_type(settings->video.shader_path, RARCH_SHADER_NONE); if (settings->video.shader_enable && type == RARCH_SHADER_CG) d3d->shader_path = settings->video.shader_path; if (!d3d_process_shader(d3d)) return false; #endif d3d->video_info = *info; if (!d3d_initialize(d3d, &d3d->video_info)) return false; gfx_ctx_input_driver(input, input_data); RARCH_LOG("[D3D]: Init complete.\n"); return true; }