source-engine/common/quicktime_win32/CGDirectDisplay.h
FluorescentCIAAfricanAmerican 3bf9df6b27 1
2020-04-22 12:56:21 -04:00

914 lines
24 KiB
C

/*
File: CGDirectDisplay.h
Contains: CoreGraphics direct display
Version: QuickTime 7.3
Copyright: (c) 2007 (c) 2000-2001 by Apple Computer, Inc., all rights reserved.
Bugs?: For bug reports, consult the following page on
the World Wide Web:
http://developer.apple.com/bugreporter/
*/
#ifndef CGDIRECTDISPLAY_H_
#define CGDIRECTDISPLAY_H_
#ifndef __CGBASE__
#include <CGBase.h>
#endif
#ifndef __CGGEOMETRY__
#include <CGGeometry.h>
#endif
#ifndef __CGERROR__
#include <CGError.h>
#endif
#ifndef __CFARRAY__
#include <CFArray.h>
#endif
#ifndef __CFSTRING__
#include <CFString.h>
#endif
#ifndef __CFDICTIONARY__
#include <CFDictionary.h>
#endif
#include <stdint.h>
#if PRAGMA_ONCE
#pragma once
#endif
#ifdef __cplusplus
extern "C" {
#endif
#if PRAGMA_IMPORT
#pragma import on
#endif
typedef struct _CGDirectDisplayID* CGDirectDisplayID;
typedef struct _CGDirectPaletteRef* CGDirectPaletteRef;
typedef uint32_t CGDisplayCount;
typedef uint32_t CGTableCount;
typedef int32_t CGDisplayCoord;
typedef uint8_t CGByteValue;
typedef uint32_t CGOpenGLDisplayMask;
typedef uint32_t CGBeamPosition;
typedef int32_t CGMouseDelta;
typedef double CGRefreshRate;
typedef CGError CGDisplayErr;
enum {
CGDisplayNoErr = kCGErrorSuccess
};
/* A NULL value points to the main display device as a programming convention */
#define kCGDirectMainDisplay ((CGDirectDisplayID)NULL)
/*
* Mechanisms used to find screen IDs
* An array length (maxDisplays) and array of CGDirectDisplayIDs are passed in.
* Up to maxDisplays of the array are filled in with the displays meeting the
* specified criteria. The actual number of displays filled in is returned in
* dspyCnt.
*
* If the dspys array is NULL, maxDisplays is ignored, and *dspyCnt is filled
* in with the number of displays meeting the function's requirements.
*/
/*
* CGGetDisplaysWithPoint()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGGetDisplaysWithPoint(
CGPoint point,
CGDisplayCount maxDisplays,
CGDirectDisplayID * dspys,
CGDisplayCount * dspyCnt);
/*
* CGGetDisplaysWithRect()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGGetDisplaysWithRect(
CGRect rect,
CGDisplayCount maxDisplays,
CGDirectDisplayID * dspys,
CGDisplayCount * dspyCnt);
/*
* CGGetDisplaysWithOpenGLDisplayMask()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGGetDisplaysWithOpenGLDisplayMask(
CGOpenGLDisplayMask mask,
CGDisplayCount maxDisplays,
CGDirectDisplayID * dspys,
CGDisplayCount * dspyCnt);
/*
* Get lists of displays. Use this to determine display IDs
*
* If the activeDspys array is NULL, maxDisplays is ignored, and *dspyCnt is filled
* in with the number of displays meeting the function's requirements.
*
* The first display returned in the list is the main display,
* the one with the menu bar.
* When mirroring, this will be the largest display,
* or if all are the same size, the one with the deepest pixel depth.
*/
/*
* CGGetActiveDisplayList()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGGetActiveDisplayList(
CGDisplayCount maxDisplays,
CGDirectDisplayID * activeDspys,
CGDisplayCount * dspyCnt);
/* Map a display to an OpenGL display mask; returns 0 on invalid display */
/*
* CGDisplayIDToOpenGLDisplayMask()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGOpenGLDisplayMask )
CGDisplayIDToOpenGLDisplayMask(CGDirectDisplayID display);
/* Return screen size and origin in global coords; Empty rect if display is invalid */
/*
* CGDisplayBounds()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGRect )
CGDisplayBounds(CGDirectDisplayID display);
/*
* CGDisplayPixelsWide()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( size_t )
CGDisplayPixelsWide(CGDirectDisplayID display);
/*
* CGDisplayPixelsHigh()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( size_t )
CGDisplayPixelsHigh(CGDirectDisplayID display);
/*
* Display mode selection
* Display modes are represented as CFDictionaries
* All dictionaries and arrays returned via these mechanisms are
* owned by the framework and should not be released. The framework
* will not release them out from under your application.
*
* Values associated with the following keys are CFNumber types.
* With CFNumberGetValue(), use kCFNumberLongType for best results.
*/
/*
* Keys used in mode dictionaries. Source C strings shown won't change.
* Some CFM environments cannot import data variables, and so
* duplicate these CFStringRefs locally.
*/
/*
* kCGDisplayWidth
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
extern CFStringRef kCGDisplayWidth;
/*
* kCGDisplayHeight
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
extern CFStringRef kCGDisplayHeight;
/*
* kCGDisplayMode
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
extern CFStringRef kCGDisplayMode;
/*
* kCGDisplayBitsPerPixel
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
extern CFStringRef kCGDisplayBitsPerPixel;
/*
* kCGDisplayBitsPerSample
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
extern CFStringRef kCGDisplayBitsPerSample;
/*
* kCGDisplaySamplesPerPixel
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
extern CFStringRef kCGDisplaySamplesPerPixel;
/*
* kCGDisplayRefreshRate
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
extern CFStringRef kCGDisplayRefreshRate;
/*
* kCGDisplayModeUsableForDesktopGUI
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
extern CFStringRef kCGDisplayModeUsableForDesktopGUI;
/*
* kCGDisplayIOFlags
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
extern CFStringRef kCGDisplayIOFlags;
/*
* Return a CFArray of CFDictionaries describing all display modes.
* Returns NULL if the display is invalid.
*/
/*
* CGDisplayAvailableModes()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CFArrayRef )
CGDisplayAvailableModes(CGDirectDisplayID display);
/*
* Try to find a display mode of specified depth with dimensions equal or greater than
* specified.
* If no depth match is found, try for the next larger depth with dimensions equal or greater
* than specified. If no luck, then just return the current mode.
*
* exactmatch, if not NULL, is set to 'true' if an exact match in width, height, and depth is found,
* and 'false' otherwise.
* Returns NULL if display is invalid.
*/
/*
* CGDisplayBestModeForParameters()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CFDictionaryRef )
CGDisplayBestModeForParameters(
CGDirectDisplayID display,
size_t bitsPerPixel,
size_t width,
size_t height,
boolean_t * exactMatch);
/*
* CGDisplayBestModeForParametersAndRefreshRate()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CFDictionaryRef )
CGDisplayBestModeForParametersAndRefreshRate(
CGDirectDisplayID display,
size_t bitsPerPixel,
size_t width,
size_t height,
CGRefreshRate refresh,
boolean_t * exactMatch);
/*
* Return a CFDictionary describing the current display mode.
* Returns NULL if display is invalid.
*/
/*
* CGDisplayCurrentMode()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CFDictionaryRef )
CGDisplayCurrentMode(CGDirectDisplayID display);
/*
* Switch display mode. Note that after switching,
* display parameters and addresses may change.
* The selected display mode persists for the life of the program, and automatically
* reverts to the permanent setting made by Preferences when the program terminates.
* The mode dictionary passed in must be a dictionary vended by other CGDirectDisplay
* APIs such as CGDisplayBestModeForParameters() and CGDisplayAvailableModes().
*/
/*
* CGDisplaySwitchToMode()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGDisplaySwitchToMode(
CGDirectDisplayID display,
CFDictionaryRef mode);
/* Query parameters for current mode */
/*
* CGDisplayBitsPerPixel()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( size_t )
CGDisplayBitsPerPixel(CGDirectDisplayID display);
/*
* CGDisplayBitsPerSample()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( size_t )
CGDisplayBitsPerSample(CGDirectDisplayID display);
/*
* CGDisplaySamplesPerPixel()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( size_t )
CGDisplaySamplesPerPixel(CGDirectDisplayID display);
/*
* CGDisplayBytesPerRow()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( size_t )
CGDisplayBytesPerRow(CGDirectDisplayID display);
/*
* Set a display gamma/transfer function from a formula specifying
* min and max values and a gamma for each channel.
* Gamma values must be greater than 0.0.
* To get an antigamma of 1.6, one would specify a value of (1.0 / 1.6)
* Min values must be greater than or equal to 0.0 and less than 1.0.
* Max values must be greater than 0.0 and less than or equal to 1.0.
* Out of range values, or Max greater than or equal to Min result
* in a kCGSRangeCheck error.
*
* Values are computed by sampling a function for a range of indices from 0 through 1:
* value = Min + ((Max - Min) * pow(index, Gamma))
* The resulting values are converted to a machine specific format
* and loaded into hardware.
*/
typedef float CGGammaValue;
/*
* CGSetDisplayTransferByFormula()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGSetDisplayTransferByFormula(
CGDirectDisplayID display,
CGGammaValue redMin,
CGGammaValue redMax,
CGGammaValue redGamma,
CGGammaValue greenMin,
CGGammaValue greenMax,
CGGammaValue greenGamma,
CGGammaValue blueMin,
CGGammaValue blueMax,
CGGammaValue blueGamma);
/*
* CGGetDisplayTransferByFormula()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGGetDisplayTransferByFormula(
CGDirectDisplayID display,
CGGammaValue * redMin,
CGGammaValue * redMax,
CGGammaValue * redGamma,
CGGammaValue * greenMin,
CGGammaValue * greenMax,
CGGammaValue * greenGamma,
CGGammaValue * blueMin,
CGGammaValue * blueMax,
CGGammaValue * blueGamma);
/*
* Set a display gamma/transfer function using tables of data for each channel.
* Values within each table should have values in the range of 0.0 through 1.0.
* The same table may be passed in for red, green, and blue channels. 'tableSize'
* indicates the number of entries in each table.
* The tables are interpolated as needed to generate the number of samples needed
* by hardware.
*/
/*
* CGSetDisplayTransferByTable()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGSetDisplayTransferByTable(
CGDirectDisplayID display,
CGTableCount tableSize,
const CGGammaValue * redTable,
const CGGammaValue * greenTable,
const CGGammaValue * blueTable);
/*
* Get transfer tables. Capacity should contain the number of samples each
* array can hold, and *sampleCount is filled in with the number of samples
* actually copied in.
*/
/*
* CGGetDisplayTransferByTable()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGGetDisplayTransferByTable(
CGDirectDisplayID display,
CGTableCount capacity,
CGGammaValue * redTable,
CGGammaValue * greenTable,
CGGammaValue * blueTable,
CGTableCount * sampleCount);
/* As a convenience, allow setting of the gamma table by byte values */
/*
* CGSetDisplayTransferByByteTable()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGSetDisplayTransferByByteTable(
CGDirectDisplayID display,
CGTableCount tableSize,
const CGByteValue * redTable,
const CGByteValue * greenTable,
const CGByteValue * blueTable);
/* Restore gamma tables of system displays to the user's ColorSync specified values */
/*
* CGDisplayRestoreColorSyncSettings()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( void )
CGDisplayRestoreColorSyncSettings(void);
/* Display capture and release */
/*
* CGDisplayIsCaptured()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( boolean_t )
CGDisplayIsCaptured(CGDirectDisplayID display);
/*
* CGDisplayCapture()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGDisplayCapture(CGDirectDisplayID display);
/*
* CGDisplayRelease()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGDisplayRelease(CGDirectDisplayID display);
/*
* Capture all displays; this has the nice effect of providing an immersive
* environment, and preventing other apps from trying to adjust themselves
* to display changes only needed by your app.
*/
/*
* CGCaptureAllDisplays()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGCaptureAllDisplays(void);
/*
* Release all captured displays, and restore the display modes to the
* user's preferences. May be used in conjunction with CGDisplayCapture()
* or CGCaptureAllDisplays().
*/
/*
* CGReleaseAllDisplays()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGReleaseAllDisplays(void);
/*
* Returns CoreGraphics raw shield window ID or NULL if not shielded
* This value may be used with drawing surface APIs.
*/
/*
* CGShieldingWindowID()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( void * )
CGShieldingWindowID(CGDirectDisplayID display);
/*
* Returns the window level used for the shield window.
* This value may be used with Cocoa windows to position the
* Cocoa window in the same window level as the shield window.
*/
/*
* CGShieldingWindowLevel()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( int32_t )
CGShieldingWindowLevel(void);
/*
* Returns base address of display or NULL for an invalid display.
* If the display has not been captured, the returned address may refer
* to read-only memory.
*/
/*
* CGDisplayBaseAddress()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( void * )
CGDisplayBaseAddress(CGDirectDisplayID display);
/*
* return address for X,Y in screen coordinates;
* (0,0) represents the upper left corner of the display.
* returns NULL for an invalid display or out of bounds coordinates
* If the display has not been captured, the returned address may refer
* to read-only memory.
*/
/*
* CGDisplayAddressForPosition()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( void * )
CGDisplayAddressForPosition(
CGDirectDisplayID display,
CGDisplayCoord x,
CGDisplayCoord y);
/* Mouse Cursor controls */
/*
* CGDisplayHideCursor()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGDisplayHideCursor(CGDirectDisplayID display);
/* increments hide cursor count */
/*
* CGDisplayShowCursor()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGDisplayShowCursor(CGDirectDisplayID display);
/* decrements hide cursor count */
/*
* Move the cursor to the specified point relative to the display origin
* (the upper left corner of the display). Returns CGDisplayNoErr on success.
* No events are generated as a result of this move.
* Points that would lie outside the desktop are clipped to the desktop.
*/
/*
* CGDisplayMoveCursorToPoint()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGDisplayMoveCursorToPoint(
CGDirectDisplayID display,
CGPoint point);
/*
* Report the mouse position change associated with the last mouse move event
* recieved by this application.
*/
/*
* CGGetLastMouseDelta()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( void )
CGGetLastMouseDelta(
CGMouseDelta * deltaX,
CGMouseDelta * deltaY);
/* Palette controls (8 bit pseudocolor only) */
/*
* Returns TRUE if the current display mode supports palettes
*/
/*
* CGDisplayCanSetPalette()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( boolean_t )
CGDisplayCanSetPalette(CGDirectDisplayID display);
/*
* Set a palette. The current gamma function is applied to the palette
* elements before being loaded into hardware.
*/
/*
* CGDisplaySetPalette()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGDisplaySetPalette(
CGDirectDisplayID display,
CGDirectPaletteRef palette);
/*
* Wait until the beam position is outside the range specified by upperScanLine and lowerScanLine.
* Note that if upperScanLine and lowerScanLine encompass the entire display height,
* the function returns an error.
* lowerScanLine must be greater than or equal to upperScanLine.
*
* Some display systems may not conventional video vertical and horizontal sweep in painting.
* These displays report a kCGDisplayRefreshRate of 0 in the CFDictionaryRef returned by
* CGDisplayCurrentMode(). On such displays, this function returns at once.
*
* Some drivers may not implement support for this mechanism.
* On such displays, this function returns at once.
*
* Returns CGDisplayNoErr on success, and an error if display or upperScanLine and
* lowerScanLine are invalid.
*
* The app should set the values of upperScanLine and lowerScanLine to allow enough lead time
* for the drawing operation to complete. A common strategy is to wait for the beam to pass
* the bottom of the drawing area, allowing almost a full vertical sweep period to perform drawing.
* To do this, set upperScanLine to 0, and set lowerScanLine to the bottom of the bounding box:
* lowerScanLine = (CGBeamPosition)(cgrect.origin.y + cgrect.size.height);
*
* IOKit may implement this as a spin-loop on the beam position call used for CGDisplayBeamPosition().
* On such system the function is CPU bound, and subject to all the usual scheduling pre-emption.
* In particular, attempting to wait for the beam to hit a specific scanline may be an exercise in frustration.
*
* These functions are advisary in nature, and depend on IOKit and hardware specific drivers to implement
* support. If you need extremely precise timing, or access to vertical blanking interrupts,
* you should consider writing a device driver to tie into hardware-specific capabilities.
*/
/*
* CGDisplayWaitForBeamPositionOutsideLines()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGDisplayErr )
CGDisplayWaitForBeamPositionOutsideLines(
CGDirectDisplayID display,
CGBeamPosition upperScanLine,
CGBeamPosition lowerScanLine);
/*
* Returns the current beam position on the display. If display is invalid,
* or the display does not implement conventional video vertical and horizontal
* sweep in painting, or the driver does not implement this functionality, 0 is returned.
*/
/*
* CGDisplayBeamPosition()
*
* Availability:
* Non-Carbon CFM: not available
* CarbonLib: not available
* Mac OS X: in version 10.0 and later
*/
EXTERN_API_C( CGBeamPosition )
CGDisplayBeamPosition(CGDirectDisplayID display);
#ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
#endif
#ifdef __cplusplus
}
#endif
#endif /* CGDIRECTDISPLAY_H_ */