egl_native_win.cc 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. extern "C" {
  5. #if defined(GLES2_CONFORM_SUPPORT_ONLY)
  6. #include "gpu/gles2_conform_support/gtf/gtf_stubs.h"
  7. #else
  8. #include "third_party/gles2_conform/GTF_ES/glsl/GTF/Source/eglNative.h" // nogncheck
  9. #endif
  10. }
  11. #include <string>
  12. namespace {
  13. LPCTSTR kWindowClassName = TEXT("ES2CONFORM");
  14. LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg,
  15. WPARAM w_param, LPARAM l_param) {
  16. LRESULT result = 0;
  17. switch (msg) {
  18. case WM_CLOSE:
  19. ::DestroyWindow(hwnd);
  20. break;
  21. case WM_DESTROY:
  22. ::PostQuitMessage(0);
  23. break;
  24. case WM_ERASEBKGND:
  25. // Return a non-zero value to indicate that the background has been
  26. // erased.
  27. result = 1;
  28. break;
  29. default:
  30. result = ::DefWindowProc(hwnd, msg, w_param, l_param);
  31. break;
  32. }
  33. return result;
  34. }
  35. } // namespace.
  36. extern "C" {
  37. GTFbool GTFNativeCreateDisplay(EGLNativeDisplayType *pNativeDisplay) {
  38. *pNativeDisplay = EGL_DEFAULT_DISPLAY;
  39. return GTFtrue;
  40. }
  41. void GTFNativeDestroyDisplay(EGLNativeDisplayType nativeDisplay) {
  42. // Nothing to destroy since we are using EGL_DEFAULT_DISPLAY
  43. }
  44. GTFbool GTFNativeCreateWindow(EGLNativeDisplayType nativeDisplay,
  45. EGLDisplay eglDisplay, EGLConfig eglConfig,
  46. const char* title, int width, int height,
  47. EGLNativeWindowType *pNativeWindow) {
  48. WNDCLASS wnd_class = {0};
  49. HINSTANCE instance = GetModuleHandle(nullptr);
  50. wnd_class.style = CS_OWNDC;
  51. wnd_class.lpfnWndProc = WindowProc;
  52. wnd_class.hInstance = instance;
  53. wnd_class.hbrBackground =
  54. reinterpret_cast<HBRUSH>(GetStockObject(BLACK_BRUSH));
  55. wnd_class.lpszClassName = kWindowClassName;
  56. if (!RegisterClass(&wnd_class))
  57. return GTFfalse;
  58. DWORD wnd_style = WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
  59. RECT wnd_rect;
  60. wnd_rect.left = 0;
  61. wnd_rect.top = 0;
  62. wnd_rect.right = width;
  63. wnd_rect.bottom = height;
  64. if (!AdjustWindowRect(&wnd_rect, wnd_style, FALSE))
  65. return GTFfalse;
  66. #ifdef UNICODE
  67. // Convert ascii string to wide string.
  68. const std::wstring wnd_title(title, title + strlen(title));
  69. #else
  70. const std::string wnd_title = title;
  71. #endif // UNICODE
  72. HWND hwnd = CreateWindow(wnd_class.lpszClassName, wnd_title.c_str(),
  73. wnd_style, 0, 0, wnd_rect.right - wnd_rect.left,
  74. wnd_rect.bottom - wnd_rect.top, nullptr, nullptr,
  75. instance, nullptr);
  76. if (hwnd == nullptr)
  77. return GTFfalse;
  78. ShowWindow(hwnd, SW_SHOWNORMAL);
  79. *pNativeWindow = hwnd;
  80. return GTFtrue;
  81. }
  82. void GTFNativeDestroyWindow(EGLNativeDisplayType nativeDisplay,
  83. EGLNativeWindowType nativeWindow) {
  84. DestroyWindow(nativeWindow);
  85. UnregisterClass(kWindowClassName, GetModuleHandle(nullptr));
  86. }
  87. EGLImageKHR GTFCreateEGLImage(int width, int height,
  88. GLenum format, GLenum type) {
  89. return (EGLImageKHR) nullptr;
  90. }
  91. void GTFDestroyEGLImage(EGLImageKHR image) {
  92. }
  93. } // extern "C"