• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "ANGLETest.h"
2 
3 #include <windows.h>
4 
WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)5 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
6 {
7     switch (message)
8     {
9       case WM_CLOSE:
10         PostQuitMessage(0);
11         return 1;
12 
13       default:
14         break;
15     }
16 
17     return DefWindowProc(hWnd, message, wParam, lParam);
18 }
19 
GetTestWindowName()20 static const PTCHAR GetTestWindowName()
21 {
22     return TEXT("ANGLE_TEST");
23 }
24 
InitTestWindow()25 bool ANGLETest::InitTestWindow()
26 {
27     WNDCLASS sWC;
28     sWC.style = CS_OWNDC;
29     sWC.lpfnWndProc = WndProc;
30     sWC.cbClsExtra = 0;
31     sWC.cbWndExtra = 0;
32     sWC.hInstance = NULL;
33     sWC.hIcon = NULL;
34     sWC.hCursor = LoadCursor(NULL, IDC_ARROW);
35     sWC.lpszMenuName = NULL;
36     sWC.hbrBackground = NULL;
37     sWC.lpszClassName = GetTestWindowName();
38 
39     if (!RegisterClass(&sWC))
40     {
41         return false;
42     }
43 
44     mNativeWindow = CreateWindow(GetTestWindowName(), NULL, WS_BORDER, 128, 128, 128, 128, NULL, NULL, NULL, NULL);
45 
46     SetWindowLong(mNativeWindow, GWL_STYLE, 0);
47     ShowWindow(mNativeWindow, SW_SHOW);
48 
49     mNativeDisplay = GetDC(mNativeWindow);
50     if (!mNativeDisplay)
51     {
52         DestroyTestWindow();
53         return false;
54     }
55 
56     mDisplay = eglGetDisplay(mNativeDisplay);
57     if(mDisplay == EGL_NO_DISPLAY)
58     {
59          mDisplay = eglGetDisplay((EGLNativeDisplayType)EGL_DEFAULT_DISPLAY);
60     }
61 
62     EGLint majorVersion, minorVersion;
63     if (!eglInitialize(mDisplay, &majorVersion, &minorVersion))
64     {
65         DestroyTestWindow();
66         return false;
67     }
68 
69     eglBindAPI(EGL_OPENGL_ES_API);
70     if (eglGetError() != EGL_SUCCESS)
71     {
72         DestroyTestWindow();
73         return false;
74     }
75 
76     return true;
77 }
78 
DestroyTestWindow()79 bool ANGLETest::DestroyTestWindow()
80 {
81     eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
82     eglTerminate(mDisplay);
83 
84     if (mNativeDisplay)
85     {
86         ReleaseDC(mNativeWindow, mNativeDisplay);
87         mNativeDisplay = 0;
88     }
89 
90     if (mNativeWindow)
91     {
92         DestroyWindow(mNativeWindow);
93         mNativeWindow = 0;
94     }
95 
96     UnregisterClass(GetTestWindowName(), NULL);
97 
98     return true;
99 }
100 
ReizeWindow(int width,int height)101 bool ANGLETest::ReizeWindow(int width, int height)
102 {
103     RECT windowRect;
104     if (!GetWindowRect(mNativeWindow, &windowRect))
105     {
106         return false;
107     }
108 
109     if (!MoveWindow(mNativeWindow, windowRect.left, windowRect.top, width, height, FALSE))
110     {
111         return false;
112     }
113 
114     return true;
115 }
116