diff --git a/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.cpp b/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.cpp index 2f9a55697..9f849375d 100644 --- a/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.cpp +++ b/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.cpp @@ -91,6 +91,10 @@ void FrameBuffer::finalize(){ s_egl.eglMakeCurrent(s_theFrameBuffer->m_eglDisplay, NULL, NULL, NULL); s_egl.eglDestroySurface(s_theFrameBuffer->m_eglDisplay,s_theFrameBuffer->m_eglSurface); s_egl.eglDestroyContext(s_theFrameBuffer->m_eglDisplay,s_theFrameBuffer->m_eglContext); + if (s_theFrameBuffer->m_subWin) { + destroySubWindow(s_theFrameBuffer->m_subWinDisplay, + s_theFrameBuffer->m_subWin); + } delete s_theFrameBuffer; s_theFrameBuffer = NULL; } diff --git a/tools/emulator/opengl/host/libs/libOpenglRender/NativeWindowsSubWindow.cpp b/tools/emulator/opengl/host/libs/libOpenglRender/NativeWindowsSubWindow.cpp index 4ff3943d3..e519b688f 100644 --- a/tools/emulator/opengl/host/libs/libOpenglRender/NativeWindowsSubWindow.cpp +++ b/tools/emulator/opengl/host/libs/libOpenglRender/NativeWindowsSubWindow.cpp @@ -38,9 +38,11 @@ EGLNativeWindowType createSubWindow(FBNativeWindowType p_window, RegisterClass(&wc); printf("creating window %d %d %d %d\n",x,y,width,height); - EGLNativeWindowType ret = CreateWindow("subWin", + EGLNativeWindowType ret = CreateWindowEx( + WS_EX_NOPARENTNOTIFY, // do not bother our parent window + "subWin", "sub", - WS_CHILD, + WS_CHILD|WS_DISABLED, x,y,width,height, p_window, NULL, @@ -51,5 +53,5 @@ EGLNativeWindowType createSubWindow(FBNativeWindowType p_window, } void destroySubWindow(EGLNativeDisplayType dis,EGLNativeWindowType win){ - DestroyWindow(win); + PostMessage(win, WM_CLOSE, 0, 0); } diff --git a/tools/emulator/opengl/host/renderer/main.cpp b/tools/emulator/opengl/host/renderer/main.cpp index 3a6d0af17..fb2045412 100644 --- a/tools/emulator/opengl/host/renderer/main.cpp +++ b/tools/emulator/opengl/host/renderer/main.cpp @@ -140,7 +140,7 @@ int main(int argc, char *argv[]) // // run the server listener loop // - server->Main(); // never returns + server->Main(); #else // // on windows we need to handle messages for the @@ -152,24 +152,15 @@ int main(int argc, char *argv[]) // // Dispatch events for the subwindow + // During termination of the render server, the FrameBuffer + // will be finalized, the Framebuffer subwindow will + // get destroyed and the following loop will exit. // MSG msg; HWND hWnd = FrameBuffer::getFB()->getSubWindow(); - bool done = 0; - while(!done) { - GetMessage(&msg, hWnd, 0, 0); + while( GetMessage(&msg, hWnd, 0, 0) > 0 ) { TranslateMessage(&msg); DispatchMessage(&msg); - - // - // if server thread has exiting - // wait for it to exit and done. - // - if (server->isExiting()) { - int exitStatus; - server->wait(&exitStatus); - done = true; - } } #endif diff --git a/tools/emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp b/tools/emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp index f144a9f3b..4e947daa5 100644 --- a/tools/emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp +++ b/tools/emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp @@ -44,7 +44,11 @@ TcpStream::TcpStream(int sock, size_t bufSize) : TcpStream::~TcpStream() { if (m_sock >= 0) { +#ifdef _WIN32 + closesocket(m_sock); +#else ::close(m_sock); +#endif } if (m_buf != NULL) { free(m_buf);