VBoxDispD3DIf.cpp revision 3c5c04d7b0973be0757addef8ba44b9352b38386
/* $Id$ */
/** @file
* VBoxVideo Display D3D User mode dll
*/
/*
* Copyright (C) 2011 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*/
#include "VBoxDispD3DIf.h"
#include "VBoxDispD3DCmn.h"
{
}
{
#ifdef VBOX_WDDM_WOW64
#else
#endif
{
pD3D->pfnDirect3DCreate9Ex = (PFNVBOXDISPD3DCREATE9EX)GetProcAddress(pD3D->hD3DLib, "Direct3DCreate9Ex");
if (pD3D->pfnDirect3DCreate9Ex)
{
pD3D->pfnVBoxWineExD3DDev9CreateTexture = (PFNVBOXWINEEXD3DDEV9_CREATETEXTURE)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9CreateTexture");
{
pD3D->pfnVBoxWineExD3DDev9CreateCubeTexture = (PFNVBOXWINEEXD3DDEV9_CREATECUBETEXTURE)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9CreateCubeTexture");
{
pD3D->pfnVBoxWineExD3DDev9Flush = (PFNVBOXWINEEXD3DDEV9_FLUSH)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9Flush");
{
pD3D->pfnVBoxWineExD3DDev9Update = (PFNVBOXWINEEXD3DDEV9_UPDATE)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9Update");
{
return S_OK;
}
}
}
}
}
else
{
vboxVDbgPrintR((__FUNCTION__": GetProcAddressW (for Direct3DCreate9Ex) failed, winErr = (%d)", winErr));
}
}
else
{
}
return E_FAIL;
}
typedef struct VBOXDISP_CALLPROC
{
void *pvCb;
{
NULL /* HWND hWnd */,
WM_USER /* UINT wMsgFilterMin */,
WM_USER /* UINT wMsgFilterMax */,
do
{
0 /*HWND hWnd*/,
0 /*UINT wMsgFilterMin*/,
0 /*UINT wMsgFilterMax*/
);
if(!bResult) /* WM_QUIT was posted */
break;
break;
{
case WM_VBOXDISP_CALLPROC:
{
break;
}
default:
}
} while (1);
return 0;
}
{
/* need to serialize since vboxDispWorkerThread is using one pWorker->hEvent
* to signal job completion */
if (RT_SUCCESS(rc))
{
if (bResult)
{
}
else
}
return rc;
}
{
}
{
if (RT_SUCCESS(rc))
{
if (RT_SUCCESS(rc))
{
NULL /* LPSECURITY_ATTRIBUTES lpThreadAttributes */,
0 /* SIZE_T dwStackSize */,
0 /* DWORD dwCreationFlags */,
{
if (RT_SUCCESS(rc))
return S_OK;
/* destroy thread ? */
}
else
{
}
}
}
return E_FAIL;
}
{
int rc = VINF_SUCCESS;
if (bResult)
{
if (dwErr == WAIT_OBJECT_0)
{
if (RT_SUCCESS(rc))
{
}
}
else
}
else
}
)
{
switch(uMsg)
{
case WM_CLOSE:
return 0;
case WM_DESTROY:
return 0;
case WM_NCHITTEST:
return HTNOWHERE;
}
}
#define VBOXDISPWND_NAME L"VboxDispD3DWindow"
{
/* Register the Window Class. */
{
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
if (!RegisterClass(&wc))
{
}
}
{
0, 0,
w, h,
NULL, //GetDesktopWindow() /* hWndParent */,
NULL /* hMenu */,
NULL /* lpParam */);
if (hWnd)
{
}
else
{
}
}
return hr;
}
{
if (bResult)
return S_OK;
return E_FAIL;
}
typedef struct VBOXDISPWND_CREATE_INFO
{
int hr;
typedef struct VBOXDISPWND_DESTROY_INFO
{
int hr;
{
}
{
}
{
{
}
return hr;
}
{
{
}
return hr;
}