SkWGLPbufferContext* SkWGLPbufferContext::Create(HDC parentDC, int msaaSampleCount, SkWGLContextRequest contextType) { SkWGLExtensions extensions; if (!extensions.hasExtension(parentDC, "WGL_ARB_pixel_format") || !extensions.hasExtension(parentDC, "WGL_ARB_pbuffer")) { return nullptr; } // try for single buffer first for (int dblBuffer = 0; dblBuffer < 2; ++dblBuffer) { int pixelFormatsToTry[] = { -1, -1 }; get_pixel_formats_to_try(parentDC, extensions, (0 != dblBuffer), msaaSampleCount, false, pixelFormatsToTry); for (int f = 0; -1 != pixelFormatsToTry[f] && f < SK_ARRAY_COUNT(pixelFormatsToTry); ++f) { HPBUFFER pbuf = extensions.createPbuffer(parentDC, pixelFormatsToTry[f], 1, 1, nullptr); if (0 != pbuf) { HDC dc = extensions.getPbufferDC(pbuf); if (dc) { HGLRC glrc = create_gl_context(dc, extensions, contextType); if (glrc) { return new SkWGLPbufferContext(pbuf, dc, glrc); } extensions.releasePbufferDC(pbuf, dc); } extensions.destroyPbuffer(pbuf); } } } return nullptr; }
LRESULT CALLBACK WndProcGL(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { LRESULT ret; bool quit = false; settings_t *settings = config_get_ptr(); switch (message) { case WM_SYSCOMMAND: case WM_CHAR: case WM_KEYDOWN: case WM_KEYUP: case WM_SYSKEYUP: case WM_SYSKEYDOWN: case WM_CLOSE: case WM_DESTROY: case WM_QUIT: case WM_SIZE: case WM_COMMAND: ret = WndProcCommon(&quit, hwnd, message, wparam, lparam); if (quit) return ret; break; case WM_CREATE: create_gl_context(hwnd, &g_quit); return 0; } if (dinput_handle_message(dinput_wgl, message, wparam, lparam)) return 0; return DefWindowProc(hwnd, message, wparam, lparam); }
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { settings_t *settings = config_get_ptr(); switch (message) { case WM_SYSCOMMAND: /* Prevent screensavers, etc, while running. */ switch (wparam) { case SC_SCREENSAVE: case SC_MONITORPOWER: return 0; } break; case WM_CHAR: case WM_KEYDOWN: case WM_KEYUP: case WM_SYSKEYUP: case WM_SYSKEYDOWN: return win32_handle_keyboard_event(hwnd, message, wparam, lparam); case WM_CREATE: create_gl_context(hwnd); return 0; case WM_CLOSE: case WM_DESTROY: case WM_QUIT: { WINDOWPLACEMENT placement; GetWindowPlacement(g_hwnd, &placement); g_pos_x = placement.rcNormalPosition.left; g_pos_y = placement.rcNormalPosition.top; g_quit = true; return 0; } case WM_SIZE: /* Do not send resize message if we minimize. */ if (wparam != SIZE_MAXHIDE && wparam != SIZE_MINIMIZED) { g_resize_width = LOWORD(lparam); g_resize_height = HIWORD(lparam); g_resized = true; } return 0; case WM_COMMAND: if (settings->ui.menubar_enable) { LRESULT ret = win32_menu_loop(g_hwnd, wparam); } break; } if (dinput_handle_message(dinput_wgl, message, wparam, lparam)) return 0; return DefWindowProc(hwnd, message, wparam, lparam); }
static int cocoa_init(MPGLContext *ctx, int vo_flags) { vo_cocoa_init(ctx->vo); if (!create_gl_context(ctx)) return -1; ctx->gl->SwapInterval = set_swap_interval; return 0; }
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { switch (message) { case WM_SYSCOMMAND: // Prevent screensavers, etc, while running. switch (wparam) { case SC_SCREENSAVE: case SC_MONITORPOWER: return 0; } break; case WM_SYSKEYDOWN: switch (wparam) { case VK_F10: case VK_MENU: case VK_RSHIFT: return 0; } break; case WM_CREATE: create_gl_context(hwnd); return 0; case WM_CLOSE: case WM_DESTROY: case WM_QUIT: { WINDOWPLACEMENT placement; GetWindowPlacement(g_hwnd, &placement); g_pos_x = placement.rcNormalPosition.left; g_pos_y = placement.rcNormalPosition.top; g_quit = true; return 0; } case WM_SIZE: // Do not send resize message if we minimize. if (wparam != SIZE_MAXHIDE && wparam != SIZE_MINIMIZED) { g_resize_width = LOWORD(lparam); g_resize_height = HIWORD(lparam); g_resized = true; } return 0; } return DefWindowProc(hwnd, message, wparam, lparam); }
int SJView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; HWND hWnd = GetSafeHwnd(); HDC hDC = ::GetDC(hWnd); if(set_window_pixel_format(hDC) == FALSE) return 0; if(create_gl_context(hDC) == FALSE) return 0; gl_init(); return 0; }
static bool config_window_cocoa(struct MPGLContext *ctx, int flags) { struct cgl_context *p = ctx->priv; if (p->ctx == NULL) if (!create_gl_context(ctx)) return false; if (!ctx->gl->SwapInterval) ctx->gl->SwapInterval = set_swap_interval; vo_cocoa_config_window(ctx->vo, flags); return true; }
void create_graphics_context(HWND hwnd, bool *quit) { switch (win32_api) { case GFX_CTX_OPENGL_API: #if defined(HAVE_OPENGL) create_gl_context(hwnd, quit); #endif break; case GFX_CTX_VULKAN_API: { #ifdef HAVE_VULKAN RECT rect; HINSTANCE instance; unsigned width = 0; unsigned height = 0; GetClientRect(hwnd, &rect); instance = GetModuleHandle(NULL); width = rect.right - rect.left; height = rect.bottom - rect.top; if (!vulkan_surface_create(&win32_vk, VULKAN_WSI_WIN32, &instance, &hwnd, width, height, win32_interval)) *quit = true; g_win32_inited = true; #endif } break; case GFX_CTX_NONE: default: break; } }
HGLRC SkCreateWGLContext(HDC dc, int msaaSampleCount, bool deepColor, SkWGLContextRequest contextType) { SkWGLExtensions extensions; if (!extensions.hasExtension(dc, "WGL_ARB_pixel_format")) { return nullptr; } BOOL set = FALSE; int pixelFormatsToTry[] = { -1, -1 }; get_pixel_formats_to_try(dc, extensions, true, msaaSampleCount, deepColor, pixelFormatsToTry); for (int f = 0; !set && -1 != pixelFormatsToTry[f] && f < SK_ARRAY_COUNT(pixelFormatsToTry); ++f) { PIXELFORMATDESCRIPTOR pfd; DescribePixelFormat(dc, pixelFormatsToTry[f], sizeof(pfd), &pfd); set = SetPixelFormat(dc, pixelFormatsToTry[f], &pfd); } if (!set) { return nullptr; } return create_gl_context(dc, extensions, contextType);}
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { switch (message) { case WM_SYSCOMMAND: // Prevent screensavers, etc, while running. switch (wparam) { case SC_SCREENSAVE: case SC_MONITORPOWER: return 0; } break; case WM_SYSKEYDOWN: switch (wparam) { case VK_F10: case VK_MENU: case VK_RSHIFT: return 0; } break; case WM_CREATE: create_gl_context(hwnd); return 0; case WM_CLOSE: case WM_DESTROY: case WM_QUIT: { WINDOWPLACEMENT placement; GetWindowPlacement(g_hwnd, &placement); g_pos_x = placement.rcNormalPosition.left; g_pos_y = placement.rcNormalPosition.top; g_quit = true; return 0; } case WM_SIZE: // Do not send resize message if we minimize. if (wparam != SIZE_MAXHIDE && wparam != SIZE_MINIMIZED) { g_resize_width = LOWORD(lparam); g_resize_height = HIWORD(lparam); g_resized = true; } return 0; case WM_COMMAND: switch (wparam & 0xffff) { case ID_M_OPENROM: { char rom_file[PATH_MAX] = {0}; if (BrowseForFile(rom_file)) { strlcpy(g_extern.fullpath, rom_file, sizeof(g_extern.fullpath)); g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME); PostMessage(g_hwnd, WM_CLOSE, 0, 0); } break; } case ID_M_RESET: rarch_game_reset(); break; case ID_M_QUIT: PostMessage(g_hwnd, WM_CLOSE, 0, 0); break; } break; } return DefWindowProc(hwnd, message, wparam, lparam); }
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { settings_t *settings = config_get_ptr(); driver_t *driver = driver_get_ptr(); const char *video_driver = win32_video_get_ident(); switch (message) { case WM_SYSCOMMAND: /* Prevent screensavers, etc, while running. */ switch (wparam) { case SC_SCREENSAVE: case SC_MONITORPOWER: return 0; } break; case WM_CHAR: case WM_KEYDOWN: case WM_KEYUP: case WM_SYSKEYUP: case WM_SYSKEYDOWN: return win32_handle_keyboard_event(hwnd, message, wparam, lparam); case WM_CREATE: if (!strcmp(video_driver, "gl")) create_gl_context(hwnd); else if (!strcmp(video_driver, "d3d")) { LPCREATESTRUCT p_cs = (LPCREATESTRUCT)lparam; curD3D = p_cs->lpCreateParams; } return 0; case WM_CLOSE: case WM_DESTROY: case WM_QUIT: { WINDOWPLACEMENT placement; GetWindowPlacement(g_hwnd, &placement); g_pos_x = placement.rcNormalPosition.left; g_pos_y = placement.rcNormalPosition.top; g_quit = true; return 0; } case WM_SIZE: /* Do not send resize message if we minimize. */ if (wparam != SIZE_MAXHIDE && wparam != SIZE_MINIMIZED) { g_resize_width = LOWORD(lparam); g_resize_height = HIWORD(lparam); g_resized = true; } return 0; case WM_COMMAND: if (settings->ui.menubar_enable) { HWND d3dr = g_hwnd; if (!strcmp(video_driver, "d3d")) { d3d_video_t *d3d = (d3d_video_t*)driver->video_data; d3dr = g_hwnd; } LRESULT ret = win32_menu_loop(d3dr, wparam); (void)ret; } break; } if (dinput_handle_message((!strcmp(video_driver, "gl")) ? dinput_wgl : dinput, message, wparam, lparam)) return 0; return DefWindowProc(hwnd, message, wparam, lparam); }