windraw2.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:28k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: windraw2.h,v 1.5.20.1 2004/07/09 01:58:48 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef __WINDRAW2_H__
  50. #define __WINDRAW2_H__   1
  51. // forward declaration
  52. struct CModesDesc;
  53. /*
  54.  * Just a more accurately defined BITMAPINFO structure:
  55.  */
  56. typedef struct tagBMI
  57. {
  58.     BITMAPINFOHEADER bmiHeader;         /* bitmap info header               */
  59.     union {
  60.         DWORD   dwBitMask [3];          /* color masks (for BI_BITFIELDS)   */
  61.         DWORD   dwPalette [256];        /* palette (for 8-bit mode)         */
  62.     };
  63. } BMI, *PBMI, FAR *LPBMI;
  64. #include "hxslist.h"
  65. //#include "baseroot.h"
  66. #include "basesurf.h"
  67. #include "ddraw.h"
  68. _INTERFACE IHXErrorMessages;
  69. /*
  70.  * Same for Windows' LOGPALETTE:
  71.  */
  72. typedef struct tagLOGPAL
  73. {
  74.     WORD         palVersion;            /* palette version                  */
  75.     WORD         palNumEntries;         /* # of colors used                 */
  76.     PALETTEENTRY palPalEntry [256];     /* palette colors                   */
  77. } LOGPAL, *PLOGPAL, FAR *LPLOGPAL;
  78. /*
  79.  * Information we will need to work with each GDI DIB.
  80.  */
  81. typedef struct tagGDISURFACE
  82. {
  83.     DIBSECTION  DibSection;             /* details of DIB section allocated */
  84.     HBITMAP     hBitMap;                /* handle to bitmap for drawing     */
  85.     HANDLE      hMapping;               /* handle to shared memory block    */
  86.     LPBYTE      lpBase;                 /* pointer to base memory address   */
  87.     LPBYTE lpAlphaSurface;
  88.     HANDLE      hEmpty;                 /* Is the buffer empty              */
  89. } GDISURFACE, *LPGDISURFACE;
  90. /*
  91.  * WinDrawSurface flags:
  92.  */
  93. #define WINDRAWSURFACE_DIRECTDRAW       0x0001  /* GDI/DirectDraw engine?   */
  94. #define WINDRAWSURFACE_OVERLAY          0x0002  /* is an overlay surface    */
  95. #define WINDRAWSURFACE_COMPLEX          0x0004  /* has multiple buffers     */
  96. #define WINDRAWSURFACE_VIDEOMEMORY      0x0008  /* surface is in video mem. */
  97. #define WINDRAWSURFACE_NONLOCALVIDMEM   0x0010  /* surface resides in AGP   */
  98. #define WINDRAWSURFACE_SYSTEMMEMORY     0x0020  /* surface resides in main memory */
  99. #define WINDRAWSURFACE_DEFAULTMEMORY 0x0040 /* allow direct draw to do what it wants */
  100. /* internal flags: */
  101. #define WINDRAWSURFACE_OPENED           0x0100  /* surface has been created */
  102. /*
  103.  * Buffers in a flippable chain:
  104.  */
  105. #define MAX_BACKBUFFERCOUNT     3       /* max # of back buffers            */
  106. #define FRONTBUFFER             0       /* index of the front buffer        */
  107. #define BACKBUFFER              1       /* index of the first back buffer   */
  108.  
  109.  /*
  110.  *  defines for asserts
  111.  */
  112. #define CID_NOTSUPPORTED 0
  113. /*
  114.  * Windraw surface:
  115.  */
  116. typedef struct tagENUMSURFACE
  117. {
  118.     LPDIRECTDRAWSURFACE lpSurface;
  119.     BYTE                *pHwMemBuffer;
  120.     HANDLE              hEmpty;
  121.     double              dTimeAvailable;
  122. } ENUMSURFACE;
  123. typedef struct tagWINDRAWSURFACE
  124. {
  125.     /* buffer state: */
  126.     DWORD       fMode;                  /* surface type/mode                */
  127.     DWORD       dwBackBufferCount;      /* number of back buffers           */
  128.     DWORD       dwFrontBuffer;          /* Offset in lpChain of front buffer*/
  129.     DWORD       dwNextBuffer;           /* Next buffer in the chain         */
  130.     HANDLE      hOverlayIndexMutex,     /* Index the flipping chaing        */
  131.                 hOverlayMutex;          /* Prevent flipping locked surfaces */
  132.     /* surface format: */
  133.     BMI         bmiSurfaceFormat;       /* surface geometry & pixel format  */
  134.     int         cidSurfaceColor;        /* bitmap pixel format              */
  135.     /* we should never need both GDI and DD working together: */
  136.     union {
  137.         /* GDI implementation: */
  138.         struct {
  139.             LONG         lPitch;        /* buffer pitch, <0 if bottom-up bmp*/
  140.             //LPGDISURFACE lpGDISurface; /* front buffer                    */
  141.             LPGDISURFACE lpGDIBackBuffer [MAX_BACKBUFFERCOUNT+1];
  142.         } gdi;
  143.         /* DirectDraw implementation: */
  144.         struct {
  145.             LPDIRECTDRAWPALETTE lpDDPal;        /* attached palette         */
  146.             LPDIRECTDRAWSURFACE lpDDSurface;    /* main DD surface object   */
  147.             LPDIRECTDRAWSURFACE lpDDBackBuffer; /* first back-buffer        */
  148.             ENUMSURFACE         *lpChain;       /* flipping chain           */
  149.             LONG                lPitch;         /* surface pitch            */
  150.             HANDLE              hAbort;
  151.             DDCOLORCONTROL      ddcc;
  152.     void* lpSurfaceData;
  153.         } dd;
  154.     };
  155. } WINDRAWSURFACE, *PWINDRAWSURFACE, FAR *LPWINDRAWSURFACE;
  156. /*
  157.  * WINDRAW mode:
  158.  */
  159. #define WINDRAW_DIRECTDRAW          0x0001  /* use DirectDraw engine        */
  160. #define WINDRAW_FULLSCREEN          0x0002  /* switch in full screen mode   */
  161. /* internal state flags: */
  162. #define WINDRAW_OPENED              0x0100  /* sets by WinDraw2_Open ()      */
  163. #define WINDRAW_PALETTE             0x0200  /* uses palette                 */
  164. #define WINDRAW_DDCLIPPER           0x0400  /* uses DirectDraw clipper      */
  165. #define WINDRAW_DDDESTCKEY          0x0800  /* uses destination color key   */
  166. #define WINDRAW_RESIZING            0x1000  /* window in process of resizing*/
  167. #define WINDRAW_REALIZING           0x2000  /* set when we realize palette  */
  168. #define WINDRAW_REALIZEBACKGROUND   0x4000  /* realize pal-te in background */
  169. /*
  170.  * Blend modes
  171.  */
  172. #define BLEND_ONE_MINUS_SRC_ALPHA   0
  173. #define BLEND_SRCCPY     1
  174. /*
  175.  * The main WinDraw structure:
  176.  */
  177. typedef struct tagWINDRAW
  178. {
  179.     /* WinDraw state variables: */
  180.     DWORD       fMode;                  /* WinDraw mode (WINDRAW_XXX flags) */
  181.     HWND        hWnd;                   /* window handle to use             */
  182.     HWND m_hCurrentClipWindow; /* the current clipper window     */
  183.     /* display parameters: */
  184.     LPSTR       lpszDisplayDevice;      /* display device name              */
  185.     BMI         bmiDisplayFormat;       /* display size, palette, etc.      */
  186.     int         cidDisplayColor;        /* display color format ID          */
  187.     /* logical palette to use with 8-bit displays: */
  188.     LOGPAL      lgplDefaultPalette;     /* the entire 256-color palette     */
  189.     int         loColor, hiColor;       /* the range of colors we need most */
  190.     /* window size: */
  191.     DWORD       dwWindowWidth;          /* current client area width        */
  192.     DWORD       dwWindowHeight;         /* current client area height       */
  193.     /* Four CC Codes supported: */
  194.     DWORD numCodes;
  195.     LPDWORD lpCodes;
  196.     LPDWORD lpCID;
  197.     /* Monitor properties */
  198.     DWORD       dwMaxScanLine;          /* number of horizontal lines       */
  199.     DWORD       dwReportedHeight;       /* reported y resolution for filtering
  200.                                         /* max scan line */
  201.     double      dRefreshRate;           /* In hertz                         */
  202.     double      dMsPerVBlank;
  203.     UINT32      ulBadConsecutiveVblankCount;
  204.     
  205.     int         nSchedulerResolution;   /* In ms                            */       
  206.     /* modes supported by video card */
  207.     CHXSimpleList* m_pModesList;
  208.     /* List of surfaces which were created with this windraw Object */
  209.     CHXSimpleList* m_pSurfaceList;
  210.     /* we should never have both GDI and DirectDraw working together:
  211.      * the minimum of what we can expect DirectDraw to do is RGB blits
  212.      * from offscreen surfaces without stretching; if it cannot do even this,
  213.      * we will use GDI for all our needs. */
  214.     union {
  215.         /* GDI implementation: */
  216.         struct {
  217.             HDC         hDC;            /* device context for the window    */
  218.             HDC         hMemoryDC;      /* context for GDI video buffers    */
  219.             HDC         hMemoryDC2;     /* context for GDI video buffers    */
  220.     HBITMAP hOldBitmap; /* context for GDI video buffers    */
  221.             HPALETTE    hPalette;       /* handle to the palette to use     */
  222.         } gdi;
  223.         /* DirectDraw implementation: */
  224.         struct {
  225.             HINSTANCE           hDD;            /* instance of DDRAW.DLL    */
  226.             LPDIRECTDRAW lpDD;           /* DDraw object             */
  227.             LPDIRECTDRAW2       lpDD2;          /* DDraw2 object            */
  228.             DDCAPS              ddCaps;         /* DDraw HW capabilities    */
  229.             DDCAPS              ddHELCaps;      /* DDraw HEL capabilities   */
  230.             LPDIRECTDRAWSURFACE lpDDSPrimary;   /* DDraw primary surface    */
  231.             DDCOLORKEY          ddDestColorKey; /* destination color key    */
  232.             LPDIRECTDRAWCLIPPER lpDDClipper;    /* clipper for primary surf */
  233.             LPDIRECTDRAWPALETTE lpDDPal;        /* DDraw palette            */
  234.     DDCAPS m_caps; /* DDraw Caps     */
  235.         } dd;
  236.     };
  237.     CRITICAL_SECTION    csPrimary;      /* Protect the primary surface since
  238.                                            vidsurf2 accesses it on multiple threads */
  239.     IHXErrorMessages*  pErrMsg;        /* Means to pass exception errors   */
  240. } WINDRAW, *PWINDRAW, FAR *LPWINDRAW;
  241. HRESULT WindrawSurface_CreatePrimarySurface(LPWINDRAW lpwd);
  242. /*
  243.  * Initialize WinDraw engine.
  244.  * Use:
  245.  *  HRESULT WinDraw2_Open (LPWINDRAW lpwd, HWND hWnd, DWORD fMode,
  246.  *      LPSTR lpszDisplay, LPBMI lpbiDisplayFormat);
  247.  * Input:
  248.  *  lpwd - pointer to a WINDRAW structure to initialize
  249.  *  hWnd - a window handle to use
  250.  *  fMode - WinDraw mode to set (e.g. WINDRAW_FULLSCREEN)
  251.  *  lpszDisplay - monitor to use (NULL or zero string = use all monitors)
  252.  *  lpbiDisplayFormat - preferred display mode in full screen
  253.  * Returns:
  254.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  255.  */
  256. HRESULT WinDraw2_Open (LPWINDRAW lpwd, HWND hWnd, DWORD fMode,
  257.     LPSTR lpszDisplay, LPBMI lpbiDisplayFormat);
  258. /*
  259.  * Get Description of all modes availiable on the system
  260.  * Use:
  261.  *  HRESULT WinDraw2_GetModes(LPWINDRAW lpwd, CModesDesc* pModesDesc, UINT32* nNumModes);
  262.  * Input:
  263.  *  lpwd - pointer to a WINDRAW engine to work with 
  264.  *  pModesDesc - pointer to a block of memory into which the mode description data will 
  265.  *  be filled.
  266.  *  nNumModes  - the number of elements which the pModesDesc can contain. If this is too small
  267.  *  then proper value will be placed within it.
  268.  * Returns:
  269.  *  NOERROR if OK, or E_FAIL.
  270.  */
  271. HRESULT WinDraw2_GetModes(LPWINDRAW lpwd, CModesDesc* pModesDesc, UINT32* nNumModes);
  272. /*
  273.  * Sets Windraw to DD exclusive and sets the display mode to what is specified (if availiable)
  274.  * Use:
  275.  *  HRESULT WinDraw2_SetResolution(LPWINDRAW lpwd, UINT32 width, UINT32 height, UINT32 depth);
  276.  * Input:
  277.  *  lpwd    - pointer to a WINDRAW engine to work with 
  278.  *  width   - target width
  279.  *  height  - target height
  280.  *  depth   - target pixel depth
  281.  *
  282.  * Returns:
  283.  *  NOERROR if OK, or E_FAIL.
  284.  */
  285. HRESULT WinDraw2_GetResolution(LPWINDRAW lpwd, UINT32* width, UINT32* height, UINT32* depth);
  286. HRESULT WinDraw2_SetResolution(LPWINDRAW lpwd, UINT32 width, UINT32 height, UINT32 depth, HWND);
  287. HRESULT WinDraw2_RestoreResolution(LPWINDRAW lpwd);
  288. HRESULT WinDraw2_RestorePrimarySurface(LPWINDRAW lpwd);
  289. /*
  290.  * Close WinDraw library.
  291.  * Use:
  292.  *  HRESULT WinDrawClose (LPWINDRAW lpwd);
  293.  * Input:
  294.  *  lpwd - pointer to a WINDRAW engine to deactivate
  295.  * Returns:
  296.  *  NOERROR if OK, or E_FAIL.
  297.  */
  298. HRESULT WinDraw2_Close (LPWINDRAW lpwd);
  299. /*
  300.  * Handles Windows palette change messages.
  301.  * Use:
  302.  *  LRESULT WinDraw2_OnPaletteChange (LPWINDRAW lpwd, HWND hwnd, UINT Message);
  303.  * Input:
  304.  *  lpwd - pointer to a WINDRAW structure we work with
  305.  *  hwnd - with WM_PALETTECHANGED: identifies a window that CAUSED the
  306.  *         palette to change; window that received a message otherwise
  307.  *  Message - either WM_QUERYNEWPALETTE or WM_PALETTECHANGED
  308.  * Returns:
  309.  *  TRUE, if we do realise our palette; FALSE, otherwise.
  310.  */
  311. LRESULT WinDraw2_OnPaletteChange (LPWINDRAW lpwd, HWND hwnd, UINT Message);
  312. /*
  313.  * Get display/primary surface format.
  314.  * Use:
  315.  *  HRESULT WinDraw2_GetDisplayFormat (LPWINDRAW lpwd, LPBMI lpbiDisplayFormat);
  316.  * Input:
  317.  *  lpwd - pointer to a WINDRAW structure to initialize
  318.  *  lpbiDisplayFormat - a structure to contain display format
  319.  * Returns:
  320.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  321.  */
  322. HRESULT WinDraw2_GetDisplayFormat (LPWINDRAW lpwd, LPBMI lpbiDisplayFormat);
  323. /*
  324.  * Creates a new surface to be used for image data.
  325.  * Use:
  326.  *   HRESULT WinDraw2_CreateSurface (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  327.  *      LPBMI lpImageFormat, DWORD fSurfaceType, int nBackBuffers, DWORD dwCKey);
  328.  * Input:
  329.  *  lpwd - pointer to a base WINDRAW structure
  330.  *  lpwds - pointer to a WINDRAWSURFACE structure to initialize
  331.  *  lpImageFormat - pointer to BITMAPINFO structure describing image format
  332.  *  fSurfaceType - combination of desired properties for a surface
  333.  *  nBackBuffers - number of flippable backbuffers to allocate for this surface
  334.  *  dwCKey - a color key to use (if transparent surface)
  335.  * Returns:
  336.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  337.  */
  338. HRESULT WinDraw2_CreateSurface (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  339.     LPBMI lpImageFormat, DWORD fSurfaceType, int nBackBuffers, DWORD dwCKey);
  340. HRESULT WinDraw2_SetColorKey (LPWINDRAW lpwd, DWORD dwLowColor, DWORD dwHighColor);
  341. HRESULT WinDraw2_SetOverlayPosition(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds, UINT32 x, UINT32 y);
  342. HRESULT WinDraw2_UpdateOverlay(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds, RECT* pDestRect, RECT* pSrcRect, DWORD flags);
  343. HRESULT Windraw_GetCaps(LPWINDRAW lpwd, UINT32* pfSurfaceCaps, UINT32* xMin, UINT32* yMin);
  344. HRESULT WinDraw2_GetOverlayPosition(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds, POINT* pLocation);
  345. BOOL WinDraw2_IsSurfaceVisible(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds);
  346. BOOL WinDraw2_IsDDAvailable(LPWINDRAW lpwd);
  347. int     Windraw_ColorMatch(LPWINDRAW lpwd, COLORREF color);
  348. int     Windraw_GetLowestColor(LPWINDRAW lpwd);
  349. HRESULT WinDraw2_GetColorspacePriorities(int cidIn, int *pCPList, int &nSize);
  350. HRESULT WinDraw2_GetScanLine(LPWINDRAW lpwd, DWORD* pdwScanLine);
  351. /*
  352.  * Blits one secondary surface to another.
  353.  * Use:
  354.  *  HRESULT Windraw_AttachSurface(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds, 
  355.  *  BITMAPINFOHEADER* lpImageFormat, void* pImageData);
  356.  *
  357.  * Input:
  358.  *  lpwd     - pointer to a base WINDRAW structure
  359.  *  lpwds     - pointer to a WINDRAWSURFACE structure to initialize
  360.  *  lpImageFormat   - pointer to BITMAPINFOHEADER structure describing image format
  361.  *  pImageData     - pointer to the image data
  362.  * Returns:
  363.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  364.  */
  365. HRESULT Windraw_AttachSurface(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  366.     BITMAPINFOHEADER* lpImageFormat, void* pImageData);
  367.     
  368. /*
  369.  * Adds alpha data to a specified surface.
  370.  * Use:
  371.  *   HRESULT WinDraw2_AttachAlphaSurface (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  372.  *    UCHAR* pAlphaData);
  373.  * Input:
  374.  *  lpwd - pointer to a base WINDRAW structure
  375.  *  lpwds - pointer to a WINDRAWSURFACE structure to initialize
  376.  * Returns:
  377.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  378.  */
  379. HRESULT WinDraw2_CreateAlphaSurface(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds);
  380.   
  381. /*
  382.  * Gets the alpha data for the specified surface.
  383.  * Use:
  384.  *   HRESULT WinDraw2_AttachAlphaSurface (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  385.  *    UCHAR* pAlphaData);
  386.  * Input:
  387.  *  lpwd - pointer to a base WINDRAW structure
  388.  *  lpwds - pointer to a WINDRAWSURFACE structure to initialize
  389.  *  pSurface - pointer to receive the data.
  390.  * Returns:
  391.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  392.  */
  393. HRESULT WinDraw2_GetAlphaSurface(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds, UCHAR** pSurface);
  394.   
  395. /*
  396.  * Releases a surface.
  397.  * Use:
  398.  *  HRESULT WinDraw2_ReleaseSurface (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds);
  399.  * Input:
  400.  *  lpwd - pointer to a base WINDRAW structure
  401.  *  lpwds - pointer to a WINDRAWSURFACE structure to release
  402.  * Returns:
  403.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  404.  */
  405. HRESULT WinDraw2_ReleaseSurface (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds);
  406. /*
  407.  * Obtains refresh rate, ms per vblank, and max scan line of the monitor
  408.  * Use:
  409.  *  HRESULT WinDraw2_GetMonitorProperties (LPWINDRAW lpwd);
  410.  * Input:
  411.  *  lpwd - pointer to a base WINDRAW structure
  412.  * Returns:
  413.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  414.  */
  415. HRESULT WinDraw2_GetMonitorProperties (LPWINDRAW lpwd);
  416. /*
  417.  * Get WinDrawSurface capabilities.
  418.  * Use:
  419.  *  HRESULT WinDrawSurface_GetCaps (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  420.  *      DWORD *lpdwCaps);
  421.  * Input:
  422.  *  lpwd - pointer to a WINDRAW structure to query
  423.  *  lpwds - pointer to a WINDRAWSURFACE structure to query
  424.  *  lpdwCaps - a variable to contain WinDrawSurface capabilities
  425.  * Returns:
  426.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  427.  */
  428. HRESULT WinDrawSurface_GetCaps (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  429.     DWORD *lpdwCaps);
  430. /*
  431.  * Get WinDrawSurface format.
  432.  * Use:
  433.  *  HRESULT WinDrawSurface_GetFormat (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  434.  *      LPBMI lpbiSurfaceFormat);
  435.  * Input:
  436.  *  lpwd - pointer to a WINDRAW structure to query
  437.  *  lpwds - pointer to a WINDRAWSURFACE structure to query
  438.  *  lpbiFormat - a structure to contain surface resolution and color format
  439.  * Returns:
  440.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  441.  */
  442. HRESULT WinDrawSurface_GetFormat (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  443.     LPBMI lpbiSurfaceFormat);
  444. /*
  445.  * Locks pointer to a buffer.
  446.  * Use:
  447.  *  HRESULT WinDrawSurface_Lock (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  448.  *      int nBufferNo, LPVOID *lpSurfPtr, LONG  *lplSurfPitch);
  449.  * Input:
  450.  *  lpwd - pointer to a base WINDRAW structure
  451.  *  lpwds - pointer to a WINDRAWSURFACE structure to lock
  452.  *  nBufferNo - # of the surface buffer to lock
  453.  *  lpSurfPtr - a variable to contain a base pointer to the surface's data
  454.  *  lplSurfPitch - a variable to contain the pitch of the surface
  455.  * Returns:
  456.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  457.  * Notes:
  458.  * This functions shall be called before copying data into the surface.
  459.  * Unlock it as soon as you are done with moving data in!!!
  460.  */
  461. HRESULT WinDrawSurface_Lock (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  462.     int nBufferNo, LPVOID *lpSurfPtr, LONG  *lplSurfPitch);
  463. /*
  464.  * Unlocks the buffer.
  465.  * Use:
  466.  *  HRESULT WinDrawSurface_Lock (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  467.  *      int nBufferNo, LPVOID *lpSurfPtr, LONG  *lplSurfPitch);
  468.  * Input:
  469.  *  lpwd - pointer to a base WINDRAW structure
  470.  *  lpwds - pointer to a WINDRAWSURFACE structure to unlock
  471.  *  nBufferNo - # of the surface buffer to unlock
  472.  * Returns:
  473.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  474.  */
  475. HRESULT WinDrawSurface_Unlock (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  476.     int nBufferNo);
  477. /*
  478.  * Gives a DC to the surface.
  479.  * Use:
  480.  *  HRESULT WinDrawSurface_GetDC(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  481.  *      HDC* pDC);
  482.  * Input:
  483.  *  lpwd    - pointer to a base WINDRAW structure
  484.  *  lpwds   - pointer to a WINDRAWSURFACE structure to unlock
  485.  *  HDC*    - pointer to a DC which will be created.
  486.  * Returns:
  487.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  488.  */
  489. HRESULT WinDrawSurface_GetDC(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  490.     HDC* pDC);
  491. /*
  492.  * Releases a DC obtained by WinDrawSurface_GetDC
  493.  * Use:
  494.  *  HRESULT WinDrawSurface_ReleaseDC(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  495.  *      HDC pDC);
  496.  * Input:
  497.  *  lpwd    - pointer to a base WINDRAW structure
  498.  *  lpwds   - pointer to a WINDRAWSURFACE structure to unlock
  499.  *  HDC     - pointer to a DC which is to be released.
  500.  * Returns:
  501.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  502.  */
  503. HRESULT WinDrawSurface_ReleaseDC(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  504.     HDC pDC);
  505.     
  506. /*
  507.  * Blits the surface data to the screen (primary surface).
  508.  * Use:
  509.  *  HRESULT WinDrawSurface_Blt (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  510.  *      LPRECT lpDestRect, LPRECT lpSrcRect);
  511.  * Input:
  512.  *  lpwd - pointer to a base WINDRAW structure
  513.  *  lpwds - pointer to a WINDRAWSURFACE structure containing data to blit
  514.  *  lpDestRect - rectangle on the primary surface to be blitted to
  515.  *  lpSrcRect - rectangle on the source surface to be blitted from
  516.  *  nGdiBuffer - the index of the gdi buffer to blt
  517.  * Returns:
  518.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  519.  */
  520. HRESULT WinDrawSurface_Blt (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  521.     LPRECT lpDestRect, LPRECT lpSrcRect, int nGdiBufferNo=FRONTBUFFER);
  522. /*
  523.  * Blits one secondary surface to another.
  524.  * Use:
  525.  *  HRESULT WinDrawSurface_BltIndirect (LPWINDRAW lpwd,
  526.  *      LPWINDRAWSURFACE lpwdsDestSurf, LPWINDRAWSURFACE lpwdsSrcSurf,
  527.  *      LPRECT lpDestRect, LPRECT lpSrcRect);
  528.  * Input:
  529.  *  lpwd - pointer to a base WINDRAW structure
  530.  *  lpwdsDestSurf - pointer to a destination WINDRAW structure
  531.  *  lpwdsSrcSurf - pointer to a source WINDRAW structure
  532.  *  lpDestRect - rectangle on the primary surface to be blitted to
  533.  *  lpSrcRect - rectangle on the source surface to be blitted from
  534.  *  nGdiBuffer - the index of the gdi buffer to blt
  535.  * Returns:
  536.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  537.  */
  538. HRESULT WinDrawSurface_BltIndirect (LPWINDRAW lpwd,
  539.     LPWINDRAWSURFACE lpwdsDestSurf, LPWINDRAWSURFACE lpwdsSrcSurf,
  540.     LPRECT lpDestRect, LPRECT lpSrcRect, int nGdiBufferNo=FRONTBUFFER);
  541. /*
  542.  * Flips buffers in a complex surface.
  543.  * Use:
  544.  *  HRESULT WinDrawSurface_Flip (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds);
  545.  * Input:
  546.  *  lpwd - pointer to a base WINDRAW structure
  547.  *  lpwds - pointer to a surface to be flipped
  548.  * Returns:
  549.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  550.  */
  551. HRESULT WinDrawSurface_Flip (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds);
  552. /*
  553.  * Updates a surface's state/position.
  554.  * Use:
  555.  *  HRESULT WinDrawSurface_Update (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  556.  *     LPRECT lpDestRect, LPRECT lpSrcRect, BOOL bShow);
  557.  * Input:
  558.  *  lpwd - pointer to a base WINDRAW structure
  559.  *  lpwds - pointer to a WINDRAWSURFACE to update
  560.  *  lpDestRect - rectangle on the primary surface
  561.  *     where secondary surface (overlay) is mapped
  562.  *  lpSrcRect - rectangle on the source surface to be mapped
  563.  *  bShow - 1, to make secondary surface visible; 0, to hide it
  564.  * Returns:
  565.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  566.  */
  567. HRESULT WinDrawSurface_Update (LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  568.     LPRECT lpDestRect, LPRECT lpSrcRect, BOOL bShow);
  569. /*
  570.  * Updates the window that the clipper should use
  571.  * Use:
  572.  *  HRESULT WinDrawSurface_Clipper(LPWINDRAW lpwd, HWND hwnd);
  573.  * Input:
  574.  *  lpwd - pointer to a base WINDRAW structure
  575.  *  hwnd - the window that the clipper should be set to
  576.  * Returns:
  577.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  578.  */
  579. HRESULT WinDrawSurface_SetClipper(LPWINDRAW lpwd, HWND hwnd);
  580. /*
  581.  * Returns the window to which the clipper is currently set.
  582.  * Use:
  583.  *  HRESULT WinDrawSurface_GetClipperWindow(LPWINDRAW lpwd, HWND* pHwnd);
  584.  * Input:
  585.  *  lpwd - pointer to a base WINDRAW structure
  586.  *  phwnd - is fulled with the current window to which the clipper is set.
  587.  * Returns:
  588.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  589.  */
  590. HRESULT WinDrawSurface_GetClipperWindow(LPWINDRAW lpwd, HWND* pHwnd);
  591. /*
  592.  * Sets the color controls for a given surface
  593.  * Use:
  594.  *  HRESULT WinDrawSurface_GetColorControls(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds, 
  595.  *   float &fBright, float &fContrast, float &fSaturation, 
  596.  *   float &fHue, float &fSharpness);
  597.  * Input:
  598.  *  lpwds - pointer to a WINDRAWSURFACE to update
  599.  *  fBright - brightness value from -1 to 1 (0 disables)
  600.  *  fContrast - contrast value from -1 to 1 (0 disables)
  601.  *  fSaturation - contrast value from -1 to 1 (0 disables)
  602.  *  fHue - contrast value from -1 to 1 (0 disables)
  603.  *  fSharpness - contrast value from -1 to 1 (0 disables)
  604.  * Returns:
  605.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  606.  */
  607. HRESULT WinDrawSurface_GetColorControls(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds, float &fBright,
  608.  float &fContrast, float &fSaturation, float &fHue, float &fSharpness);
  609.  /*
  610.  * Sets the color controls for a given surface
  611.  * Use:
  612.  *  HRESULT WinDrawSurface_SetColorControls(LPWINDRAWSURFACE lpwds, float fBright,
  613.  *   float fContrast, float Saturation, float fHue, float fSharpness);
  614.  * Input:
  615.  *  lpwds - pointer to a WINDRAWSURFACE to update
  616.  *  fBright - brightness value from -1 to 1 (0 disables)
  617.  *  fContrast - contrast value from -1 to 1 (0 disables)
  618.  *  fSaturation - contrast value from -1 to 1 (0 disables)
  619.  *  fHue - contrast value from -1 to 1 (0 disables)
  620.  *  fSharpness - contrast value from -1 to 1 (0 disables)
  621.  * Returns:
  622.  *  NOERROR if OK, or the last relevant DirectDraw error code, or E_FAIL.
  623.  */
  624. HRESULT WinDrawSurface_SetColorControls(LPWINDRAW lpwd, LPWINDRAWSURFACE lpwds,
  625.  float fBright, float fContrast, float fSaturation,
  626.  float fHue, float fSharpness);
  627. HRESULT WinDraw_CanLockSurface (LPWINDRAW lpwd, WINDRAWSURFACE *lpwds, UCHAR* &pBuffer, int& nIndex, BOOL bBlock=TRUE);
  628. HRESULT WinDraw_GetLockedSurface (LPWINDRAW lpwd, WINDRAWSURFACE *lpwds, UCHAR* &pBuffer, int nIndex=-1, BOOL bBlock=TRUE);
  629. HRESULT WinDraw_ReleaseLockedSurface (LPWINDRAW lpwd, WINDRAWSURFACE *lpwds, BYTE *pHwBuf, BOOL bDiscard=FALSE);
  630. HRESULT WinDraw_AdvanceSurface (LPWINDRAW lpwd, WINDRAWSURFACE *lpwds, int &nIndex);
  631. HRESULT WinDraw_DisplaySurface (LPWINDRAW lpwd, WINDRAWSURFACE *lpwds, DWORD dwFlags, int nIndex=-1, BOOL bAbort=FALSE);
  632. HRESULT WinDraw_CacelPendingDisplay (LPWINDRAW lpwd, WINDRAWSURFACE *lpwds);
  633. HRESULT WinDraw_ResetSurfaceIndexes (LPWINDRAW lpwd, WINDRAWSURFACE *lpwds);
  634. char*   CollectDDInfo(LPWINDRAW lpwd, LPDIRECTDRAWSURFACE lpSurface, char *pFunction, char* pSeparator);
  635. #endif /* __WINDRAW2_H__ */