CreateFromDDSurface method

Creates a DXSurface that contains a specified DirectDrawSurface object.


HRESULT retVal = object.CreateFromDDSurface(pDDrawSurface, pFormatID, dwFlags, punkOuter, riid, ppDXSurface);


  • pDDrawSurface [in]
    Type: IUnknown

    Pointer to a DirectDrawSurface object to wrap with a new DXSurface.

  • pFormatID [in]
    Type: const GUID

    Optional pointer to the source pixel format. If NULL, the pixel format of the DirectDrawSurface object is used. If non-NULL, the pixel format of the DirectDrawSurface object is ignored, and the data is treated as though it were the format specified by this GUID. This is usually used to force a DirectDrawSurface object that has no alpha channel to be treated as a 32-bit surface with alpha.

  • dwFlags [in]
    Type: DWORD

    DXSFCREATE creation flags. A value of DXSF_FORMAT_IS_CLSID specifies that the pFormatID parameter is the CLSID of a custom surface implementation.

  • punkOuter [in]
    Type: IUnknown

    Optional outer IUnknown interface pointer for aggregation.

  • riid [in]
    Type: REFIID

    Interface to return from the new surface.

  • ppDXSurface [out]
    Type: void

    Address of a pointer to the new interface.


The default behavior for a system memory DXSurface is to do all lock arbitration at the DXSurface level for performance and correct lock behavior. The DirectDrawSurface object is locked once to obtain a memory pointer and then released. If the user plans to access the underlying IDirectDrawSurface::Lock method directly (not via the DXSurface interface), DXSF_NO_LAZY_DDRAW_LOCK must be used. In this case, a lock to the DXSurface always locks the underlying DirectDrawSurface object, assuring safe access. This is the default for video-memory-based surfaces.

The resulting DXSurface uses the source color key of the underlying DirectDrawSurface object.

See also