windraw2.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:27k
源码类别:

Symbian

开发平台:

C/C++

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