VirtualBox

Ignore:
Timestamp:
Jun 28, 2010 7:00:55 PM (14 years ago)
Author:
vboxsync
Message:

wddm/3d: visible regions impl & fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispMpTst.cpp

    r30464 r30483  
    2020
    2121static RTTHREAD g_VBoxDispMpTstThread;
     22static VBOXDISPMP_CALLBACKS g_VBoxDispMpTstCallbacks;
     23static HMODULE g_hVBoxDispMpModule;
     24static PFNVBOXDISPMP_GETCALLBACKS g_pfnVBoxDispMpGetCallbacks;
     25
    2226
    2327static void vboxDispMpTstLogRect(const char * pPrefix, RECT *pRect, const char * pSuffix)
    2428{
    25     vboxVDbgDoPrint("%s left(%d), top(%d), right(%d), bottom(%d) %s", pPrefix, pRect->left, pRect->top, pRect->right, pRect->bottom, pSuffix);
     29    vboxVDbgPrint(("%s left(%d), top(%d), right(%d), bottom(%d) %s", pPrefix, pRect->left, pRect->top, pRect->right, pRect->bottom, pSuffix));
    2630}
    2731
     
    3034    VBOXDISPMP_REGIONS Regions;
    3135
    32     HRESULT hr;
     36    HRESULT hr = g_VBoxDispMpTstCallbacks.pfnEnableEvents();
     37    Assert(hr == S_OK);
     38    if (hr != S_OK)
     39        return VERR_GENERAL_FAILURE;
     40
    3341    do
    3442    {
    35         hr = vboxDispMpGetRegions(&Regions, INFINITE);
     43        hr = g_VBoxDispMpTstCallbacks.pfnGetRegions(&Regions, INFINITE);
    3644        Assert(hr == S_OK);
    3745        if (hr == S_OK)
    3846        {
    39             vboxVDbgDoPrint("\n>>>\n");
     47            vboxVDbgPrint(("\n>>>\n"));
    4048            HWND hWnd = Regions.hWnd;
    4149            if (Regions.pRegions->fFlags.bAddVisibleRects)
     
    4856                    --cVidibleRects;
    4957
    50                     vboxVDbgDoPrint("hWnd (0x%p), position and/or size changed: ", hWnd);
     58                    vboxVDbgPrint(("hWnd (0x%p), position and/or size changed: ", hWnd));
    5159                    vboxDispMpTstLogRect("", Regions.pRegions->RectsInfo.aRects, "\n");
    5260                }
    5361
    54                 vboxVDbgDoPrint("hWnd (0x%p), visibleRects: \n", hWnd);
     62                vboxVDbgPrint(("hWnd (0x%p), visibleRects: \n", hWnd));
    5563                for (uint32_t i = iVisibleRects; i < cVidibleRects; ++i)
    5664                {
     
    6068            else if (Regions.pRegions->fFlags.bAddHiddenRects)
    6169            {
    62                 vboxVDbgDoPrint("hWnd (0x%p), hiddenRects: \n", hWnd);
     70                vboxVDbgPrint(("hWnd (0x%p), hiddenRects: \n", hWnd));
    6371                for (uint32_t i = 0; i < Regions.pRegions->RectsInfo.cRects; ++i)
    6472                {
     
    6775            }
    6876
    69             vboxVDbgDoPrint("\n<<<\n");
     77            vboxVDbgPrint(("\n<<<\n"));
    7078        }
    7179    } while (1);
     80
     81    hr = g_VBoxDispMpTstCallbacks.pfnDisableEvents();
     82    Assert(hr == S_OK);
     83
    7284    return VINF_SUCCESS;
    7385}
     
    7587HRESULT vboxDispMpTstStart()
    7688{
    77     HRESULT hr = vboxDispMpEnable();
    78     Assert(hr == S_OK);
    79     if (hr == S_OK)
     89    HRESULT hr = E_FAIL;
     90    g_hVBoxDispMpModule = GetModuleHandleW(L"VBoxDispD3D.dll");
     91    Assert(g_hVBoxDispMpModule);
     92
     93    if (g_hVBoxDispMpModule)
    8094    {
    81         int rc = RTThreadCreate(&g_VBoxDispMpTstThread, vboxDispMpTstThreadProc, NULL, 0,
    82                 RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "VBoxDispMpTst");
    83         AssertRC(rc);
    84         if (RT_SUCCESS(rc))
    85             return S_OK;
     95        g_pfnVBoxDispMpGetCallbacks = (PFNVBOXDISPMP_GETCALLBACKS)GetProcAddress(g_hVBoxDispMpModule, "VBoxDispMpGetCallbacks");
     96        Assert(g_pfnVBoxDispMpGetCallbacks);
     97        if (g_pfnVBoxDispMpGetCallbacks)
     98        {
     99            hr = g_pfnVBoxDispMpGetCallbacks(VBOXDISPMP_VERSION, &g_VBoxDispMpTstCallbacks);
     100            Assert(hr == S_OK);
     101            if (hr == S_OK)
     102            {
     103                int rc = RTThreadCreate(&g_VBoxDispMpTstThread, vboxDispMpTstThreadProc, NULL, 0,
     104                                RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "VBoxDispMpTst");
     105                AssertRC(rc);
     106                if (RT_SUCCESS(rc))
     107                    return S_OK;
    86108
    87         hr = vboxDispMpDisable();
    88         Assert(hr == S_OK);
    89         hr = E_FAIL;
     109                hr = E_FAIL;
     110            }
     111        }
     112        FreeLibrary(g_hVBoxDispMpModule);
    90113    }
     114
    91115    return hr;
    92116}
     
    94118HRESULT vboxDispMpTstStop()
    95119{
    96     HRESULT hr = vboxDispMpDisable();
     120    HRESULT hr = g_VBoxDispMpTstCallbacks.pfnDisableEvents();
    97121    Assert(hr == S_OK);
     122#if 0
    98123    if (hr == S_OK)
    99124    {
    100125        int rc = RTThreadWaitNoResume(g_VBoxDispMpTstThread, RT_INDEFINITE_WAIT, NULL);
    101126        AssertRC(rc);
     127        if (RT_SUCCESS(rc))
     128        {
     129            BOOL bResult = FreeLibrary(g_hVBoxDispMpModule);
     130            Assert(bResult);
     131#ifdef DEBUG
     132            if (!bResult)
     133            {
     134                DWORD winEr = GetLastError();
     135                hr = HRESULT_FROM_WIN32(winEr);
     136            }
     137#endif
     138        }
     139        else
     140            hr = E_FAIL;
    102141    }
     142#endif
    103143    return hr;
    104144}
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette