Files
android_development/tools/emulator/opengl/host/libs/libOpenglRender/NativeWindowsSubWindow.cpp
Guy Zadickario ded8587d2d opengles emulator: Fixed Windows renderer termination
Make the event pump loop in the renderer process we do on Windows
exit when the Framebuffer's subwindow is destroyed.
Fixed TcpStream to close the socket using 'closesocket' on windows,
otherwise the other end of the socket does not sense that the socket
is closed.

+ Use WS_DISABLED to ensure that our GL subwindow doesn't receive
  any input events.

Change-Id: Icb477b3e1d7993a8880acb5e01bc5da29309ae50
2011-08-10 10:11:13 +02:00

58 lines
2.3 KiB
C++

/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "NativeSubWindow.h"
#include <stdio.h>
LRESULT CALLBACK myWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
EGLNativeWindowType createSubWindow(FBNativeWindowType p_window,
EGLNativeDisplayType* display_out,
int x, int y,int width, int height){
WNDCLASS wc;
wc.style = CS_OWNDC |CS_HREDRAW |CS_VREDRAW; // redraw if size changes
wc.lpfnWndProc = myWndProc; // points to window procedure
wc.cbClsExtra = 0; // no extra class memory
wc.cbWndExtra = sizeof(void*); // save extra window memory, to store VasWindow instance
wc.hInstance = NULL; // handle to instance
wc.hIcon = NULL; // predefined app. icon
wc.hCursor = NULL;
wc.hbrBackground = NULL; // no background brush
wc.lpszMenuName = NULL; // name of menu resource
wc.lpszClassName = "subWin"; // name of window class
RegisterClass(&wc);
printf("creating window %d %d %d %d\n",x,y,width,height);
EGLNativeWindowType ret = CreateWindowEx(
WS_EX_NOPARENTNOTIFY, // do not bother our parent window
"subWin",
"sub",
WS_CHILD|WS_DISABLED,
x,y,width,height,
p_window,
NULL,
NULL,
NULL);
ShowWindow(ret,SW_SHOW);
return ret;
}
void destroySubWindow(EGLNativeDisplayType dis,EGLNativeWindowType win){
PostMessage(win, WM_CLOSE, 0, 0);
}