Merge "opengles emulator: Fixed Windows renderer termination"

This commit is contained in:
David Turner
2011-08-10 01:12:04 -07:00
committed by Android Code Review
4 changed files with 18 additions and 17 deletions

View File

@@ -91,6 +91,10 @@ void FrameBuffer::finalize(){
s_egl.eglMakeCurrent(s_theFrameBuffer->m_eglDisplay, NULL, NULL, NULL); s_egl.eglMakeCurrent(s_theFrameBuffer->m_eglDisplay, NULL, NULL, NULL);
s_egl.eglDestroySurface(s_theFrameBuffer->m_eglDisplay,s_theFrameBuffer->m_eglSurface); s_egl.eglDestroySurface(s_theFrameBuffer->m_eglDisplay,s_theFrameBuffer->m_eglSurface);
s_egl.eglDestroyContext(s_theFrameBuffer->m_eglDisplay,s_theFrameBuffer->m_eglContext); 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; delete s_theFrameBuffer;
s_theFrameBuffer = NULL; s_theFrameBuffer = NULL;
} }

View File

@@ -38,9 +38,11 @@ EGLNativeWindowType createSubWindow(FBNativeWindowType p_window,
RegisterClass(&wc); RegisterClass(&wc);
printf("creating window %d %d %d %d\n",x,y,width,height); 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", "sub",
WS_CHILD, WS_CHILD|WS_DISABLED,
x,y,width,height, x,y,width,height,
p_window, p_window,
NULL, NULL,
@@ -51,5 +53,5 @@ EGLNativeWindowType createSubWindow(FBNativeWindowType p_window,
} }
void destroySubWindow(EGLNativeDisplayType dis,EGLNativeWindowType win){ void destroySubWindow(EGLNativeDisplayType dis,EGLNativeWindowType win){
DestroyWindow(win); PostMessage(win, WM_CLOSE, 0, 0);
} }

View File

@@ -140,7 +140,7 @@ int main(int argc, char *argv[])
// //
// run the server listener loop // run the server listener loop
// //
server->Main(); // never returns server->Main();
#else #else
// //
// on windows we need to handle messages for the // on windows we need to handle messages for the
@@ -152,24 +152,15 @@ int main(int argc, char *argv[])
// //
// Dispatch events for the subwindow // 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; MSG msg;
HWND hWnd = FrameBuffer::getFB()->getSubWindow(); HWND hWnd = FrameBuffer::getFB()->getSubWindow();
bool done = 0; while( GetMessage(&msg, hWnd, 0, 0) > 0 ) {
while(!done) {
GetMessage(&msg, hWnd, 0, 0);
TranslateMessage(&msg); TranslateMessage(&msg);
DispatchMessage(&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 #endif

View File

@@ -44,7 +44,11 @@ TcpStream::TcpStream(int sock, size_t bufSize) :
TcpStream::~TcpStream() TcpStream::~TcpStream()
{ {
if (m_sock >= 0) { if (m_sock >= 0) {
#ifdef _WIN32
closesocket(m_sock);
#else
::close(m_sock); ::close(m_sock);
#endif
} }
if (m_buf != NULL) { if (m_buf != NULL) {
free(m_buf); free(m_buf);