| 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 |