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/VBoxDispMp.cpp

    r30464 r30483  
    5656static VBOXDISPMP g_VBoxDispMp;
    5757
    58 HRESULT vboxDispMpEnable()
     58DECLCALLBACK(HRESULT) vboxDispMpEnableEvents()
    5959{
    6060    g_VBoxDispMp.pEscapeCmd = NULL;
     
    6565
    6666
    67 HRESULT vboxDispMpDisable()
     67DECLCALLBACK(HRESULT) vboxDispMpDisableEvents()
    6868{
    6969    if (g_VBoxDispMp.pEscapeCmd)
     
    7676#define VBOXDISPMP_BUF_MAXSIZE  ((4096*4096)-96)
    7777
    78 HRESULT vboxDispMpGetRegions(PVBOXDISPMP_REGIONS pRegions, DWORD dwMilliseconds)
     78DECLCALLBACK(HRESULT) vboxDispMpGetRegions(PVBOXDISPMP_REGIONS pRegions, DWORD dwMilliseconds)
    7979{
    8080    HRESULT hr = S_OK;
     
    106106                    break;
    107107                }
    108                 else if (g_VBoxDispMp.pEscapeCmd->Hdr.cbRemainingCmds)
     108                else
    109109                {
     110                    Assert(g_VBoxDispMp.pEscapeCmd->Hdr.cbRemainingCmds);
     111                    Assert(g_VBoxDispMp.pEscapeCmd->Hdr.cbRemainingFirstCmd);
    110112                    RTMemFree(g_VBoxDispMp.pEscapeCmd);
    111113                    uint32_t newSize = RT_MAX(g_VBoxDispMp.cbEscapeCmd + VBOXDISPMP_BUF_INCREASE, g_VBoxDispMp.pEscapeCmd->Hdr.cbRemainingFirstCmd);
    112114                    if (newSize < VBOXDISPMP_BUF_MAXSIZE)
    113115                        newSize = RT_MAX(newSize, RT_MIN(g_VBoxDispMp.pEscapeCmd->Hdr.cbRemainingCmds, VBOXDISPMP_BUF_MAXSIZE));
     116                    Assert(g_VBoxDispMp.cbEscapeCmd < newSize);
    114117                    g_VBoxDispMp.pEscapeCmd = (PVBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD)RTMemAlloc(newSize);
    115118                    Assert(g_VBoxDispMp.pEscapeCmd);
    116119                    if (g_VBoxDispMp.pEscapeCmd)
    117120                        g_VBoxDispMp.cbEscapeCmd = newSize;
     121                    else
     122                    {
     123                        g_VBoxDispMp.pEscapeCmd = NULL;
     124                        g_VBoxDispMp.cbEscapeCmd = 0;
     125                        hr = E_OUTOFMEMORY;
     126                        break;
     127                    }
    118128                }
    119129            }
     
    133143    return hr;
    134144}
     145
     146VBOXDISPMP_DECL(HRESULT) VBoxDispMpGetCallbacks(uint32_t u32Version, PVBOXDISPMP_CALLBACKS pCallbacks)
     147{
     148    Assert(u32Version == VBOXDISPMP_VERSION);
     149    if (u32Version != VBOXDISPMP_VERSION)
     150        return E_INVALIDARG;
     151
     152    pCallbacks->pfnEnableEvents = vboxDispMpEnableEvents;
     153    pCallbacks->pfnDisableEvents = vboxDispMpDisableEvents;
     154    pCallbacks->pfnGetRegions = vboxDispMpGetRegions;
     155    return S_OK;
     156}
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