OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 #include "SkTypes.h" | 7 #include "SkTypes.h" |
8 | 8 |
9 #if defined(SK_BUILD_FOR_WIN) | 9 #if defined(SK_BUILD_FOR_WIN) |
10 | 10 |
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 } | 388 } |
389 | 389 |
390 void SkOSWindow::presentGL() { | 390 void SkOSWindow::presentGL() { |
391 HDC dc = GetDC((HWND)fHWND); | 391 HDC dc = GetDC((HWND)fHWND); |
392 SwapBuffers(dc); | 392 SwapBuffers(dc); |
393 ReleaseDC((HWND)fHWND, dc); | 393 ReleaseDC((HWND)fHWND, dc); |
394 } | 394 } |
395 | 395 |
396 #if SK_ANGLE | 396 #if SK_ANGLE |
397 | 397 |
398 void* get_angle_egl_display(void* nativeDisplay) { | |
399 PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT; | |
400 eglGetPlatformDisplayEXT = | |
401 (PFNEGLGETPLATFORMDISPLAYEXTPROC)eglGetProcAddress("eglGetPlatformDispla
yEXT"); | |
402 | |
403 // We expect ANGLE to support this extension | |
404 if (!eglGetPlatformDisplayEXT) { | |
405 return EGL_NO_DISPLAY; | |
406 } | |
407 | |
408 EGLDisplay display = EGL_NO_DISPLAY; | |
409 // Try for an ANGLE D3D11 context, fall back to D3D9, and finally GL. | |
410 EGLint attribs[3][3] = { | |
411 { | |
412 EGL_PLATFORM_ANGLE_TYPE_ANGLE, | |
413 EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, | |
414 EGL_NONE | |
415 }, | |
416 { | |
417 EGL_PLATFORM_ANGLE_TYPE_ANGLE, | |
418 EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE, | |
419 EGL_NONE | |
420 }, | |
421 }; | |
422 for (int i = 0; i < 3 && display == EGL_NO_DISPLAY; ++i) { | |
423 display = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE,nativeDispla
y, attribs[i]); | |
424 } | |
425 return display; | |
426 } | |
427 | |
428 bool create_ANGLE(EGLNativeWindowType hWnd, | 398 bool create_ANGLE(EGLNativeWindowType hWnd, |
429 int msaaSampleCount, | 399 int msaaSampleCount, |
430 EGLDisplay* eglDisplay, | 400 EGLDisplay* eglDisplay, |
431 EGLContext* eglContext, | 401 EGLContext* eglContext, |
432 EGLSurface* eglSurface, | 402 EGLSurface* eglSurface, |
433 EGLConfig* eglConfig) { | 403 EGLConfig* eglConfig) { |
434 static const EGLint contextAttribs[] = { | 404 static const EGLint contextAttribs[] = { |
435 EGL_CONTEXT_CLIENT_VERSION, 2, | 405 EGL_CONTEXT_CLIENT_VERSION, 2, |
436 EGL_NONE, EGL_NONE | 406 EGL_NONE, EGL_NONE |
437 }; | 407 }; |
438 static const EGLint configAttribList[] = { | 408 static const EGLint configAttribList[] = { |
439 EGL_RED_SIZE, 8, | 409 EGL_RED_SIZE, 8, |
440 EGL_GREEN_SIZE, 8, | 410 EGL_GREEN_SIZE, 8, |
441 EGL_BLUE_SIZE, 8, | 411 EGL_BLUE_SIZE, 8, |
442 EGL_ALPHA_SIZE, 8, | 412 EGL_ALPHA_SIZE, 8, |
443 EGL_DEPTH_SIZE, 8, | 413 EGL_DEPTH_SIZE, 8, |
444 EGL_STENCIL_SIZE, 8, | 414 EGL_STENCIL_SIZE, 8, |
445 EGL_NONE | 415 EGL_NONE |
446 }; | 416 }; |
447 static const EGLint surfaceAttribList[] = { | 417 static const EGLint surfaceAttribList[] = { |
448 EGL_NONE, EGL_NONE | 418 EGL_NONE, EGL_NONE |
449 }; | 419 }; |
450 | 420 |
451 EGLDisplay display = get_angle_egl_display(GetDC(hWnd), false); | 421 EGLDisplay display = SkANGLEGLContext::GetD3DEGLDisplay(GetDC(hWnd), false); |
452 | 422 |
453 if (EGL_NO_DISPLAY == display) { | 423 if (EGL_NO_DISPLAY == display) { |
454 SkDebugf("Could not create ANGLE egl display!\n"); | 424 SkDebugf("Could not create ANGLE egl display!\n"); |
455 return false; | 425 return false; |
456 } | 426 } |
457 | 427 |
458 // Initialize EGL | 428 // Initialize EGL |
459 EGLint majorVersion, minorVersion; | 429 EGLint majorVersion, minorVersion; |
460 if (!eglInitialize(display, &majorVersion, &minorVersion)) { | 430 if (!eglInitialize(display, &majorVersion, &minorVersion)) { |
461 return false; | 431 return false; |
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
800 } | 770 } |
801 | 771 |
802 void SkOSWindow::closeWindow() { | 772 void SkOSWindow::closeWindow() { |
803 DestroyWindow((HWND)fHWND); | 773 DestroyWindow((HWND)fHWND); |
804 if (fFullscreen) { | 774 if (fFullscreen) { |
805 DestroyWindow((HWND)fSavedWindowState.fHWND); | 775 DestroyWindow((HWND)fSavedWindowState.fHWND); |
806 } | 776 } |
807 gHwndToOSWindowMap.remove(fHWND); | 777 gHwndToOSWindowMap.remove(fHWND); |
808 } | 778 } |
809 #endif | 779 #endif |
OLD | NEW |