VBoxDispD3DIf.cpp revision e0e6ca112bdf0d25db2d07365a502ecda5b391d3
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive * VBoxVideo Display D3D User mode dll
acc36ab93565d2880447d535da6ca6e5feac7a70nd * Copyright (C) 2010 Oracle Corporation
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding * This file is part of VirtualBox Open Source Edition (OSE), as
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding * available from http://www.virtualbox.org. This file is free software;
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding * you can redistribute it and/or modify it under the terms of the GNU
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding * General Public License (GPL) as published by the Free Software
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding * Foundation, in version 2 as it comes in the "COPYING" file of the
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
acc36ab93565d2880447d535da6ca6e5feac7a70nd * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a99c5d4cc3cab6a62b04d52000dbc22ce1fa2d94coar pD3D->pfnDirect3DCreate9Ex = (PFNVBOXDISPD3DCREATE9EX)GetProcAddress(pD3D->hD3DLib, "Direct3DCreate9Ex");
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive pD3D->pfnVBoxWineExD3DDev9CreateTexture = (PFNVBOXWINEEXD3DDEV9_CREATETEXTURE)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9CreateTexture");
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive pD3D->pfnVBoxWineExD3DDev9CreateCubeTexture = (PFNVBOXWINEEXD3DDEV9_CREATECUBETEXTURE)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9CreateCubeTexture");
51db0c8d97d68b94230ba4972c7a62b55314acd3slive pD3D->pfnVBoxWineExD3DDev9Flush = (PFNVBOXWINEEXD3DDEV9_FLUSH)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9Flush");
193ba167383a0599478b84ea51ac9ddec2bc0328rbowen pD3D->pfnVBoxWineExD3DDev9Update = (PFNVBOXWINEEXD3DDEV9_UPDATE)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9Update");
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive vboxVDbgPrintR((__FUNCTION__": GetProcAddressW (for Direct3DCreate9Ex) failed, winErr = (%d)", winErr));
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive vboxVDbgPrintR((__FUNCTION__": LoadLibraryW failed, winErr = (%d)", winErr));
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive 0 /*HWND hWnd*/,
d207757a321497bd47d391c95e7dd2144addbb1dslive 0 /*UINT wMsgFilterMin*/,
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive 0 /*UINT wMsgFilterMax*/
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive VBOXDISP_CALLPROC* pData = (VBOXDISP_CALLPROC*)Msg.lParam;
157feddbcf673772f0cea97decb59583a0dfdfeesctemme } while (1);
157feddbcf673772f0cea97decb59583a0dfdfeesctemmestatic int vboxDispWorkerSubmit(VBOXDISPWORKER *pWorker, UINT Msg, LPARAM lParam)
a99c5d4cc3cab6a62b04d52000dbc22ce1fa2d94coar /* need to serialize since vboxDispWorkerThread is using one pWorker->hEvent
a99c5d4cc3cab6a62b04d52000dbc22ce1fa2d94coar * to signal job completion */
a99c5d4cc3cab6a62b04d52000dbc22ce1fa2d94coar BOOL bResult = PostThreadMessage(pWorker->idThread, Msg, 0, lParam);
a99c5d4cc3cab6a62b04d52000dbc22ce1fa2d94coar rc = RTSemEventWait(pWorker->hEvent, RT_INDEFINITE_WAIT);
f915b3725d6bce16d5fa02403601fb9e6872cf49kessHRESULT VBoxDispWorkerSubmitProc(VBOXDISPWORKER *pWorker, PFNVBOXDISPWORKERCB pfnCb, void *pvCb)
925a83633d01d5db2fd3554020c7a47770b3550epquerna int rc = vboxDispWorkerSubmit(pWorker, WM_VBOXDISP_CALLPROC, (LPARAM)&Ctx);
a1ef40892ffa2b44fc249423c5b6c42a74a84c68nd 0 /* SIZE_T dwStackSize */,
860b4efe27e7c1c9a2bf5c872b29c90f76849b51jim 0 /* DWORD dwCreationFlags */,
860b4efe27e7c1c9a2bf5c872b29c90f76849b51jim rc = RTSemEventWait(pWorker->hEvent, RT_INDEFINITE_WAIT);
f915b3725d6bce16d5fa02403601fb9e6872cf49kess /* destroy thread ? */
d207757a321497bd47d391c95e7dd2144addbb1dslive vboxVDbgPrintR((__FUNCTION__": CreateThread failed, winErr = (%d)", winErr));
9ed703ab1543b3300f4b60c0405fc1a212b601c8slive BOOL bResult = PostThreadMessage(pWorker->idThread, WM_QUIT, 0, 0);
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive DWORD dwErr = WaitForSingleObject(pWorker->hThread, INFINITE);
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive vboxVDbgPrint((__FUNCTION__": got WM_CLOSE for hwnd(0x%x)", hwnd));
9ed703ab1543b3300f4b60c0405fc1a212b601c8slive vboxVDbgPrint((__FUNCTION__": got WM_DESTROY for hwnd(0x%x)", hwnd));
645a5920d9fdd53a7f75a6a16e87ff27781b0133slive vboxVDbgPrint((__FUNCTION__": got WM_NCHITTEST for hwnd(0x%x)\n", hwnd));
4a591802e98a2b28a0b742e0fb636f5baaa0845drjungHRESULT vboxDispWndDoCreate(DWORD w, DWORD h, HWND *phWnd)
4a591802e98a2b28a0b742e0fb636f5baaa0845drjung HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);
4a591802e98a2b28a0b742e0fb636f5baaa0845drjung /* Register the Window Class. */
41180d477c0228e5c09e2ad1393054b602295eecrbowen vboxVDbgPrint((__FUNCTION__": RegisterClass failed, winErr(%d)\n", winErr));
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_DISABLED,
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive vboxVDbgPrint((__FUNCTION__": CreateWindowEx failed, winErr(%d)\n", winErr));
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive vboxVDbgPrint((__FUNCTION__": DestroyWindow failed, winErr(%d) for hWnd(0x%x)\n", winErr, hWnd));
e4e4d8f25022f178ceb567b9f2b37be34b729f08sliveDECLCALLBACK(void) vboxDispWndDestroyWorker(void *pvUser)
860b4efe27e7c1c9a2bf5c872b29c90f76849b51jim VBOXDISPWND_DESTROY_INFO *pInfo = (VBOXDISPWND_DESTROY_INFO*)pvUser;
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive VBOXDISPWND_CREATE_INFO *pInfo = (VBOXDISPWND_CREATE_INFO*)pvUser;
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive pInfo->hr = vboxDispWndDoCreate(pInfo->width, pInfo->height, &pInfo->hWnd);
d207757a321497bd47d391c95e7dd2144addbb1dsliveHRESULT VBoxDispWndDestroy(PVBOXWDDMDISP_ADAPTER pAdapter, HWND hWnd)
e4e4d8f25022f178ceb567b9f2b37be34b729f08slive HRESULT hr = VBoxDispWorkerSubmitProc(&pAdapter->WndWorker, vboxDispWndDestroyWorker, &Info);
51db0c8d97d68b94230ba4972c7a62b55314acd3sliveHRESULT VBoxDispWndCreate(PVBOXWDDMDISP_ADAPTER pAdapter, DWORD width, DWORD height, HWND *phWnd)