d3dxcore.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:45k
- ///////////////////////////////////////////////////////////////////////////
- //
- // Copyright (C) Microsoft Corporation. All Rights Reserved.
- //
- // File: d3dxcore.h
- // Content: D3DX core types and functions
- //
- ///////////////////////////////////////////////////////////////////////////
- #ifndef __D3DXCORE_H__
- #define __D3DXCORE_H__
- #include <d3d.h>
- #include <limits.h>
- #include "d3dxerr.h"
- typedef struct ID3DXContext *LPD3DXCONTEXT;
- // {9B74ED7A-BBEF-11d2-9F8E-0000F8080835}
- DEFINE_GUID(IID_ID3DXContext,
- 0x9b74ed7a, 0xbbef, 0x11d2, 0x9f, 0x8e, 0x0, 0x0, 0xf8, 0x8, 0x8, 0x35);
- ///////////////////////////////////////////////////////////////////////////
- // Defines and Enumerators used below:
- ///////////////////////////////////////////////////////////////////////////
- //-------------------------------------------------------------------------
- // D3DX_DEFAULT:
- // ---------
- // A predefined value that could be used for any parameter in D3DX APIs or
- // member functions that is an enumerant or a handle. The D3DX
- // documentation indicates wherever D3DX_DEFAULT may be used,
- // and how it will be interpreted in each situation.
- //-------------------------------------------------------------------------
- #define D3DX_DEFAULT ULONG_MAX
-
- //-------------------------------------------------------------------------
- // D3DX_DEFAULT_FLOAT:
- // ------------------
- // Similar to D3DX_DEFAULT, but used for floating point parameters.
- // The D3DX documentation indicates wherever D3DX_DEFAULT_FLOAT may be used,
- // and how it will be interpreted in each situation.
- //-------------------------------------------------------------------------
- #define D3DX_DEFAULT_FLOAT FLT_MAX
-
- //-------------------------------------------------------------------------
- // Hardware Acceleration Level:
- // ---------------------------
- // These constants represent pre-defined hardware acceleration levels,
- // and may be used as a default anywhere a (DWORD) deviceIndex is required.
- // Each pre-define indicates a different level of hardware acceleration.
- // They are an alternative to using explicit deviceIndices retrieved by
- // D3DXGetDeviceDescription().
- //
- // The only case these pre-defines should be used as device indices is if
- // a particular level of acceleration is required, and given more than
- // one capable device on the computer, it does not matter which one
- // is used.
- //
- // The method of selection is as follows: If one of the D3DX devices on
- // the primary DDraw device supports a requested hardware acceleration
- // level, it will be used. Otherwise, the first matching device discovered
- // by D3DX will be used.
- //
- // Of course, it is possible for no match to exist for any of the
- // pre-defines on a particular computer. Passing such a value into the
- // D3DX apis will simply cause them to fail, reporting that no match
- // is available.
- //
- // D3DX_HWLEVEL_NULL: Null implementation (draws nothing)
- // D3DX_HWLEVEL_REFERENCE: Reference implementation (slowest)
- // D3DX_HWLEVEL_2D: 2D acceleration only (RGB rasterizer used)
- // D3DX_HWLEVEL_RASTER: Rasterization acceleration (likely most useful)
- // D3DX_HWLEVEL_TL: Transform and lighting acceleration
- // D3DX_DEFAULT: The highest level of acceleration available
- // on the primary DDraw device.
- //-------------------------------------------------------------------------
- #define D3DX_HWLEVEL_NULL (D3DX_DEFAULT - 1)
- #define D3DX_HWLEVEL_REFERENCE (D3DX_DEFAULT - 2)
- #define D3DX_HWLEVEL_2D (D3DX_DEFAULT - 3)
- #define D3DX_HWLEVEL_RASTER (D3DX_DEFAULT - 4)
- #define D3DX_HWLEVEL_TL (D3DX_DEFAULT - 5)
- //-------------------------------------------------------------------------
- // Surface Class:
- // -------------
- // These are the various types of 2D-surfaces classified according to their
- // usage. Note that a number of them overlap. e.g. STENCILBUFFERS and
- // DEPTHBUFFERS overlap (since in DX7 implementation the stencil and depth
- // bits are part of the same pixel format).
- //
- // Mapping to the DX7 DDPIXELFORMAT concepts:
- // -----------------------------------------
- // D3DX_SC_DEPTHBUFFER: All ddpfs which have the DDPF_ZPIXELS or the
- // DDPF_ZBUFFER flags set.
- // D3DX_SC_STENCILBUFFER: All ddpfs which have the DDPF_STENCILBUFFER
- // flag set.
- // D3DX_SC_BUMPMAP: All ddpfs which have the DDPF_BUMPLUMINANCE
- // or the DDPF_BUMPDUDV flags set.
- // D3DX_SC_LUMINANCEMAP: All ddpfs which have the DDPF_BUMPLUMINANCE
- // or the DDPF_LUMINANCE flags set.
- // D3DX_SC_COLORTEXTURE: All the surfaces that have color information in
- // them and can be used for texturing.
- // D3DX_SC_COLORRENDERTGT: All the surfaces that contain color
- // information and can be used as render targets.
- //-------------------------------------------------------------------------
- #define D3DX_SC_DEPTHBUFFER 0x01
- #define D3DX_SC_STENCILBUFFER 0x02
- #define D3DX_SC_COLORTEXTURE 0x04
- #define D3DX_SC_BUMPMAP 0x08
- #define D3DX_SC_LUMINANCEMAP 0x10
- #define D3DX_SC_COLORRENDERTGT 0x20
- //-------------------------------------------------------------------------
- // Surface Formats:
- // ---------------
- // These are the various types of surface formats that can be enumerated,
- // there is no DDPIXELFORMAT structure in D3DX, the enums carry the meaning
- // (like FOURCCs).
- //
- // All the surface classes are represented here.
- //
- //-------------------------------------------------------------------------
- typedef enum _D3DX_SURFACEFORMAT
- {
- D3DX_SF_UNKNOWN = 0,
- D3DX_SF_R8G8B8 = 1,
- D3DX_SF_A8R8G8B8 = 2,
- D3DX_SF_X8R8G8B8 = 3,
- D3DX_SF_R5G6B5 = 4,
- D3DX_SF_R5G5B5 = 5,
- D3DX_SF_PALETTE4 = 6,
- D3DX_SF_PALETTE8 = 7,
- D3DX_SF_A1R5G5B5 = 8,
- D3DX_SF_X4R4G4B4 = 9,
- D3DX_SF_A4R4G4B4 =10,
- D3DX_SF_L8 =11, // 8 bit luminance-only
- D3DX_SF_A8L8 =12, // 16 bit alpha-luminance
- D3DX_SF_U8V8 =13, // 16 bit bump map format
- D3DX_SF_U5V5L6 =14, // 16 bit bump map format with luminance
- D3DX_SF_U8V8L8 =15, // 24 bit bump map format with luminance
- D3DX_SF_UYVY =16, // UYVY format (PC98 compliance)
- D3DX_SF_YUY2 =17, // YUY2 format (PC98 compliance)
- D3DX_SF_DXT1 =18, // S3 texture compression technique 1
- D3DX_SF_DXT3 =19, // S3 texture compression technique 3
- D3DX_SF_DXT5 =20, // S3 texture compression technique 5
- D3DX_SF_R3G3B2 =21, // 8 bit RGB texture format
- D3DX_SF_A8 =22, // 8 bit alpha-only
- D3DX_SF_TEXTUREMAX =23, // Last texture format
- D3DX_SF_Z16S0 =256,
- D3DX_SF_Z32S0 =257,
- D3DX_SF_Z15S1 =258,
- D3DX_SF_Z24S8 =259,
- D3DX_SF_S1Z15 =260,
- D3DX_SF_S8Z24 =261,
- D3DX_SF_DEPTHMAX =262, // Last depth format
- D3DX_SF_FORCEMAX = (DWORD)(-1)
- } D3DX_SURFACEFORMAT;
- //-------------------------------------------------------------------------
- // Filtering types for Texture APIs
- //
- // -------------
- // These are the various filter types for generation of mip-maps
- //
- // D3DX_FILTERTYPE
- // -----------------------------------------
- // D3DX_FT_POINT: Point sampling only - no filtering
- // D3DX_FT_LINEAR: Bi-linear filtering
- //
- //-------------------------------------------------------------------------
- typedef enum _D3DX_FILTERTYPE
- {
- D3DX_FT_POINT = 0x01,
- D3DX_FT_LINEAR = 0x02,
- D3DX_FT_DEFAULT = D3DX_DEFAULT
- } D3DX_FILTERTYPE;
- ///////////////////////////////////////////////////////////////////////////
- // Structures used below:
- ///////////////////////////////////////////////////////////////////////////
- //-------------------------------------------------------------------------
- // D3DX_VIDMODEDESC: Display mode description.
- // ----------------
- // width: Screen Width
- // height: Screen Height
- // bpp: Bits per pixel
- // refreshRate: Refresh rate
- //-------------------------------------------------------------------------
- typedef struct _D3DX_VIDMODEDESC
- {
- DWORD width;
- DWORD height;
- DWORD bpp;
- DWORD refreshRate;
- } D3DX_VIDMODEDESC;
- //-------------------------------------------------------------------------
- // D3DX_DEVICEDESC: Description of a device that can do 3D
- // ---------------
- // deviceIndex: Unique (DWORD) number for the device.
- // hwLevel: Level of acceleration afforded. This is one of the
- // predefined Device Indices, and exists in this
- // structure for informational purposes only. More than
- // one device on the system may have the same hwLevel.
- // To refer to a particular device with the D3DX apis,
- // use the value in the deviceIndex member instead.
- // ddGuid: The ddraw GUID
- // d3dDeviceGuid: Direct3D Device GUID
- // ddDeviceID: DDraw's GetDeviceIdentifier GUID. This GUID is unique to
- // a particular driver revision on a particular video card.
- // driverDesc: String describing the driver
- // monitor: Handle to the video monitor used by this device (multimon
- // specific). Devices that use different monitors on a
- // multimon system report different values in this field.
- // Therefore, to test for a multimon system, an application
- // should look for more than one different monitor handle in
- // the list of D3DX devices.
- // onPrimary: Indicates if this device is on the primary monitor
- // (multimon specific).
- //-------------------------------------------------------------------------
- #define D3DX_DRIVERDESC_LENGTH 256
- typedef struct _D3DX_DEVICEDESC
- {
- DWORD deviceIndex;
- DWORD hwLevel;
- GUID ddGuid;
- GUID d3dDeviceGuid;
- GUID ddDeviceID;
- char driverDesc[D3DX_DRIVERDESC_LENGTH];
- HMONITOR monitor;
- BOOL onPrimary;
- } D3DX_DEVICEDESC;
- ///////////////////////////////////////////////////////////////////////////
- // APIs:
- ///////////////////////////////////////////////////////////////////////////
- #ifdef __cplusplus
- extern "C" {
- #endif //__cplusplus
-
- //-------------------------------------------------------------------------
- // D3DXInitialize: The very first call a D3DX app must make.
- //-------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXInitialize();
- //-------------------------------------------------------------------------
- // D3DXUninitialize: The very last call a D3DX app must make.
- //-------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXUninitialize();
- //-------------------------------------------------------------------------
- // D3DXGetDeviceCount: Returns the maximum number of D3DXdevices
- // ------------------ available.
- //
- // D3DXGetDeviceDescription: Lists the 2D and 3D capabilities of the devices.
- // ------------------------ Also, the various guids needed by ddraw and d3d.
- //
- // Params:
- // [in] DWORD deviceIndex: Which device? Starts at 0.
- // [in] D3DX_DEVICEDESC* pd3dxDevice: Pointer to the D3DX_DEVICEDESC
- // structure to be filled in.
- //-------------------------------------------------------------------------
- DWORD WINAPI
- D3DXGetDeviceCount();
- HRESULT WINAPI
- D3DXGetDeviceDescription(DWORD deviceIndex,
- D3DX_DEVICEDESC* pd3dxDeviceDesc);
- //-------------------------------------------------------------------------
- // D3DXGetMaxNumVideoModes: Returns the maximum number of video-modes .
- // -----------------------
- //
- // Params:
- // [in] DWORD deviceIndex: The device being referred to.
- // [in] DWORD flags: If D3DX_GVM_REFRESHRATE is set, then the refresh
- // rates are not ignored.
- //
- // D3DXGetVideoMode: Describes a particular video mode for this device
- // ----------------
- //
- // Note: These queries will simply give you a list of modes that the
- // display adapter tells DirectX that it supports.
- // There is no guarantee that D3DXCreateContext(Ex) will succeed
- // with all listed video modes. This is a fundamental limitation
- // of the current DirectX architecture which D3DX cannot hide in
- // any clean way.
- //
- // Params:
- // [in] DWORD deviceIndex: The device being referred to.
- // [in] DWORD flags: If D3DX_GVM_REFRESHRATE is set, then the refresh
- // rates are returned
- // [in] DWORD which: Which VideoMode ? Starts at 0.
- // [out] D3DX_VIDMODEDESC* pModeList: Pointer to the D3DX_VIDMODEDESC
- // structure that will be filled in.
- //-------------------------------------------------------------------------
- DWORD WINAPI
- D3DXGetMaxNumVideoModes(DWORD deviceIndex,
- DWORD flags);
- HRESULT WINAPI
- D3DXGetVideoMode(DWORD deviceIndex,
- DWORD flags,
- DWORD modeIndex,
- D3DX_VIDMODEDESC* pModeDesc);
- #define D3DX_GVM_REFRESHRATE 0x00000001
- //-------------------------------------------------------------------------
- // D3DXGetMaxSurfaceFormats: Returns the maximum number of surface
- // ------------------------ formats supported by the device at that
- // video mode.
- //
- // D3DXGetSurfaceFormat: Describes one of the supported surface formats.
- // ---------------------
- //
- // Params:
- // [in] DWORD deviceIndex: The device being referred to.
- // [in] D3DX_VIDMODEDESC* pDesc: The display mode at which the supported
- // surface formats are requested. If it is
- // NULL, the current display mode is
- // assumed.
- // [in] DWORD surfClassFlags: Required surface classes. Only surface
- // formats which support all specified
- // surface classes will be returned.
- // (Multiple surface classes may be specified
- // using bitwise OR.)
- // [in] DWORD which: Which surface formats to retrieve. Starts at 0.
- // [out] D3DX_SURFACEFORMAT* pFormat: The surface format
- //-------------------------------------------------------------------------
- DWORD WINAPI
- D3DXGetMaxSurfaceFormats(DWORD deviceIndex,
- D3DX_VIDMODEDESC* pDesc,
- DWORD surfClassFlags);
- HRESULT WINAPI
- D3DXGetSurfaceFormat(DWORD deviceIndex,
- D3DX_VIDMODEDESC* pDesc,
- DWORD surfClassFlags,
- DWORD surfaceIndex,
- D3DX_SURFACEFORMAT* pFormat);
- //-------------------------------------------------------------------------
- // D3DXGetCurrentVideoMode: Retrieves the current video mode for this device.
- // -------------------
- //
- // Params:
- // [in] DWORD deviceIndex: The device being referred to.
- // [out] D3DX_VIDMODEDESC* pVidMode: The current video mode
- //-------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXGetCurrentVideoMode(DWORD deviceIndex,
- D3DX_VIDMODEDESC* pVidMode);
- //-------------------------------------------------------------------------
- // D3DXGetDeviceCaps: Lists all the capabilities of a device at a display
- // mode.
- // ----------------
- //
- // Params:
- // [in] DWORD deviceIndex: The device being referred to.
- // [in] D3DX_VIDMODEDESC* pDesc: If this is NULL, we will return the
- // caps at the current display mode of
- // the device.
- // [out] D3DDEVICEDESC7* pD3DDeviceDesc7: D3D Caps ( NULL to ignore
- // parameter)
- // [out] DDCAPS7* pDDHalCaps: DDraw HAL Caps (NULL to ignore parameter)
- // [out] DDCAPS7* pDDHelCaps: DDraw HEL Caps (NULL to ignore paramter)
- //-------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXGetDeviceCaps(DWORD deviceIndex,
- D3DX_VIDMODEDESC* pVidMode,
- D3DDEVICEDESC7* pD3DCaps,
- DDCAPS* pDDHALCaps,
- DDCAPS* pDDHELCaps);
- //-------------------------------------------------------------------------
- // D3DXCreateContext: Initializes the chosen device. It is the simplest init
- // ----------------- function available. Parameters are treated the same
- // as the matching subset of parameters in
- // D3DXCreateContextEx, documented below.
- // Remaining D3DXCreateContextEx parameters that are
- // not present in D3DXCreateContext are treated as
- // D3DX_DEFAULT. Note that multimon is not supported
- // with D3DXCreateContext.
- //
- // D3DXCreateContextEx: A more advanced function to initialize the device.
- // ------------------- Also accepts D3DX_DEFAULT for most of the parameters
- // and then will do what D3DXCreateContext did.
- //
- // Note: Do not expect D3DXCreateContext(Ex) to be fail-safe (as with any
- // API). Supported device capablilites should be used as a guide
- // for choosing parameter values. Keep in mind that there will
- // inevitably be some combinations of parameters that just do not work.
- //
- // Params:
- // [in] DWORD deviceIndex: The device being referred to.
- // [in] DWORD flags: The valid flags are D3DX_CONTEXT_FULLSCREEN, and
- // D3DX_CONTEXT_OFFSCREEN. These flags cannot both
- // be specified. If no flags are specified, the
- // context defaults to windowed mode.
- //
- // [in] HWND hwnd: Device window. See note.
- // [in] HWND hwndFocus: Window which receives keyboard messages from
- // the device window. The device window should be
- // a child of focus window. Useful for multimon
- // applications. See note.
- // NOTE:
- // windowed:
- // hwnd must be a valid window. hwndFocus must be NULL or
- // D3DX_DEFAULT.
- //
- // fullscreen:
- // Either hwnd or hwndFocus must be a valid window. (Both cannot
- // be NULL or D3DX_DEFAULT). If hwnd is NULL or D3DX_DEFAULT,
- // a default device window will be created as a child of hwndFocus.
- //
- // offscreen:
- // Both hwnd and hwndFocus must be NULL or D3DX_DEFAULT
- //
- // [in] DWORD numColorBits: If D3DX_DEFAULT is passed for windowed mode,
- // the current desktop's color depth is chosen.
- // For full screen mode, D3DX_DEFAULT causes 16
- // bit color to be used.
- // [in] DWORD numAlphaBits: If D3DX_DEFAULT is passed, 0 is chosen.
- // [in] DWORD numDepthbits: If D3DX_DEFAULT is passed,
- // the highest available number of depth bits
- // is chosen. See note.
- // [in] DWORD numStencilBits: If D3DX_DEFAULT is passed, the highest
- // available number of stencil bits is chosen.
- // See note.
- //
- // NOTE: If both numDepthBits and numStencilBits are D3DX_DEFAULT,
- // D3DX first picks the highest available number of stencil
- // bits. Then, for the chosen number of stencil bits,
- // the highest available number of depth bits is chosen.
- // If only one of numStencilBits or numDepthBits
- // is D3DX_DEFAULT, the highest number of bits available
- // for this parameter is chosen out of only the formats
- // that support the number of bits requested for the
- // fixed parameter.
- //
- // [in] DWORD numBackBuffers: Number of back buffers, or D3DX_DEFAULT.
- // See note.
- //
- // NOTE:
- // windowed: D3DX_DEFAULT means 1. You must specify one back buffer.
- //
- // fullscreen: D3DX_DEFAULT means 1. Any number of back buffers can be
- // specified.
- //
- // offscreen: D3DX_DEFAULT means 0. You cannot specify additional back
- // buffers.
- //
- // [in] DWORD width: Width, in pixels, or D3DX_DEFAULT. See note.
- // [in] DWORD height: Height, in pixels, or D3DX_DEFAULT. See note.
- //
- // NOTE:
- // windowed: If either width or height is D3DX_DEFAULT, both values
- // default to the dimensions of the client area of hwnd.
- //
- // fullscreen: If either width or height is D3DX_DEFAULT, width
- // defaults to 640, and height defaults to 480.
- //
- // offscreen: An error is returned if either width or height is
- // D3DX_DEFAULT.
- //
- // [in] DWORD refreshRate: D3DX_DEFAULT means we let ddraw choose for
- // us. Ignored for windowed and offscreen modes.
- // [out] LPD3DXCONTEXT* ppCtx: This is the Context object that is used for
- // rendering on that device.
- //
- //-------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXCreateContext(DWORD deviceIndex,
- DWORD flags,
- HWND hwnd,
- DWORD width,
- DWORD height,
- LPD3DXCONTEXT* ppCtx);
- HRESULT WINAPI
- D3DXCreateContextEx(DWORD deviceIndex,
- DWORD flags,
- HWND hwnd,
- HWND hwndFocus,
- DWORD numColorBits,
- DWORD numAlphaBits,
- DWORD numDepthbits,
- DWORD numStencilBits,
- DWORD numBackBuffers,
- DWORD width,
- DWORD height,
- DWORD refreshRate,
- LPD3DXCONTEXT* ppCtx);
- // The D3DXCreateContext(Ex) flags are:
- #define D3DX_CONTEXT_FULLSCREEN 0x00000001
- #define D3DX_CONTEXT_OFFSCREEN 0x00000002
- //-------------------------------------------------------------------------
- // D3DXGetErrorString: Prints out the error string given an hresult. Prints
- // ------------------ Win32 as well as DX6 error messages besides the D3DX
- // messages.
- //
- // Params:
- // [in] HRESULT hr: The error code to be deciphered.
- // [in] DWORD strLength: Length of the string passed in.
- // [out] LPSTR pStr: The string output. This string of appropriate
- // size needs to be passed in.
- //-------------------------------------------------------------------------
- void WINAPI
- D3DXGetErrorString(HRESULT hr,
- DWORD strLength,
- LPSTR pStr);
- //-------------------------------------------------------------------------
- // D3DXMakeDDPixelFormat: Fills in a DDPIXELFORMAT structure based on the
- // --------------------- D3DX surface format requested.
- //
- // Params:
- // [in] D3DX_SURFACEFORMAT d3dxFormat: Surface format.
- // [out] DDPIXELFORMAT* pddpf: Pixel format matching the given
- // surface format.
- //-------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXMakeDDPixelFormat(D3DX_SURFACEFORMAT d3dxFormat,
- DDPIXELFORMAT* pddpf);
- //-------------------------------------------------------------------------
- // D3DXMakeSurfaceFormat: Determines the surface format corresponding to
- // --------------------- a given DDPIXELFORMAT.
- //
- // Params:
- // [in] DDPIXELFORMAT* pddpf: Pixel format.
- // Return Value:
- // D3DX_SURFACEFORMAT: Surface format matching the given pixel format.
- // D3DX_SF_UNKNOWN if the format is not supported
- //-------------------------------------------------------------------------
- D3DX_SURFACEFORMAT WINAPI
- D3DXMakeSurfaceFormat(DDPIXELFORMAT* pddpf);
- #ifdef __cplusplus
- }
- #endif //__cplusplus
- ///////////////////////////////////////////////////////////////////////////
- // Interfaces:
- ///////////////////////////////////////////////////////////////////////////
- //-------------------------------------------------------------------------
- // ID3DXContext interface:
- //
- // This encapsulates all the stuff that the app might
- // want to do at initialization time and any global control over d3d and
- // ddraw.
- //-------------------------------------------------------------------------
- DECLARE_INTERFACE_(ID3DXContext, IUnknown)
- {
- //
- // IUnknown methods
- //
- STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID* ppvObj) PURE;
- STDMETHOD_(ULONG,AddRef)(THIS) PURE;
- STDMETHOD_(ULONG,Release)(THIS) PURE;
- // Get the DDraw and Direct3D objects to call DirectDraw or
- // Direct3D Immediate Mode functions.
- // If the objects don't exist (because they have not
- // been created for some reason) NULL is returned.
- // All the objects returned in the following Get* functions
- // are addref'ed. It is the application's responsibility to
- // release them when no longer needed.
- STDMETHOD_(LPDIRECTDRAW7,GetDD)(THIS) PURE;
- STDMETHOD_(LPDIRECT3D7,GetD3D)(THIS) PURE;
- STDMETHOD_(LPDIRECT3DDEVICE7,GetD3DDevice)(THIS) PURE;
- // Get the various buffers that get created at the init time
- // These are addref'ed as well. It is the application's responsibility
- // to release them before the app quits or when it needs a resize.
- STDMETHOD_(LPDIRECTDRAWSURFACE7,GetPrimary)(THIS) PURE;
- STDMETHOD_(LPDIRECTDRAWSURFACE7,GetZBuffer)(THIS) PURE;
- STDMETHOD_(LPDIRECTDRAWSURFACE7,GetBackBuffer)(THIS_ DWORD which) PURE;
- // Get the associated window handles
- STDMETHOD_(HWND,GetWindow)(THIS) PURE;
- STDMETHOD_(HWND,GetFocusWindow)(THIS) PURE;
- //
- // Various Get methods, in case the user had specified default
- // parameters
- //
- STDMETHOD(GetDeviceIndex)(THIS_
- LPDWORD pDeviceIndex,
- LPDWORD pHwLevel) PURE;
- STDMETHOD_(DWORD, GetNumBackBuffers)(THIS) PURE;
- STDMETHOD(GetNumBits)(THIS_
- LPDWORD pColorBits,
- LPDWORD pDepthBits,
- LPDWORD pAlphaBits,
- LPDWORD pStencilBits) PURE;
- STDMETHOD(GetBufferSize)(THIS_
- LPDWORD pWidth,
- LPDWORD pHeight) PURE;
- // Get the flags that were used to create this context
- STDMETHOD_(DWORD, GetCreationFlags)(THIS) PURE;
- STDMETHOD_(DWORD, GetRefreshRate)(THIS) PURE;
-
- // Restoring surfaces in case stuff is lost
- STDMETHOD(RestoreSurfaces)(THIS) PURE;
-
- // Resize all the buffers to the new width and height
- STDMETHOD(Resize)(THIS_ DWORD width, DWORD height) PURE;
- // Update the frame using a flip or a blit,
- // If the D3DX_UPDATE_NOVSYNC flag is set, blit is used if the
- // driver cannot flip without waiting for vsync in full-screen mode.
- STDMETHOD(UpdateFrame)(THIS_ DWORD flags) PURE;
- // Render a string at the specified coordinates, with the specified
- // colour. This is only provided as a convenience for
- // debugging/information during development.
- // topLeftX and topLeftY represent the location of the top left corner
- // of the string, on the render target.
- // The coordinate and color parameters each have a range of 0.0-1.0
- STDMETHOD(DrawDebugText)(THIS_
- float topLeftX,
- float topLeftY,
- D3DCOLOR color,
- LPSTR pString) PURE;
- // Clears to the current viewport
- // The following are the valid flags:
- // D3DCLEAR_TARGET (to clear the render target )
- // D3DCLEAR_ZBUFFER (to clear the depth-buffer )
- // D3DCLEAR_STENCIL (to clear the stencil-buffer )
- STDMETHOD(Clear)(THIS_ DWORD ClearFlags) PURE;
- STDMETHOD(SetClearColor)(THIS_ D3DCOLOR color ) PURE;
- STDMETHOD(SetClearDepth)(THIS_ float z) PURE;
- STDMETHOD(SetClearStencil)(THIS_ DWORD stencil) PURE;
- };
- //-------------------------------------------------------------------------
- // Flags for Update member function:
- //
- // Flag to indicate that blit should be used instead of a flip
- // for full-screen rendering.
- #define D3DX_UPDATE_NOVSYNC (1<<0)
- ///////////////////////////////////////////////////////////////////////////
- // Texturing APIs:
- ///////////////////////////////////////////////////////////////////////////
- #ifdef __cplusplus
- extern "C" {
- #endif //__cplusplus
-
- //-------------------------------------------------------------------------
- // D3DXCheckTextureRequirements: Return information about texture creation
- // ---------------------------- (used by CreateTexture, CreateTextureFromFile
- // and CreateCubeMapTexture)
- //
- // Parameters:
- //
- // pd3dDevice
- // The D3D device with which the texture is going to be used.
- // pFlags
- // allows specification of D3DX_TEXTURE_NOMIPMAP
- // D3DX_TEXTURE_NOMIPMAP may be returned in the case where mipmap creation
- // is not supported.
- // pWidth
- // width in pixels or NULL
- // returns corrected width
- // pHeight
- // height in pixels or NULL
- // returns corrected height
- // pPixelFormat
- // surface format
- // returns best match to input format
- //
- // Notes: 1. Unless the flags is set to specifically prevent creating
- // mipmaps, mipmaps are generated all the way till 1x1 surface.
- // 2. width, height and pixelformat are altered based on available
- // hardware. For example:
- // a. Texture dimensions may be required to be powers of 2
- // b. We may require width == height for some devices
- // c. If PixelFormat is unavailable, a best fit is made
- //-------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXCheckTextureRequirements( LPDIRECT3DDEVICE7 pd3dDevice,
- LPDWORD pFlags,
- LPDWORD pWidth,
- LPDWORD pHeight,
- D3DX_SURFACEFORMAT* pPixelFormat);
- //-------------------------------------------------------------------------
- // D3DXCreateTexture: Create an empty texture object
- // -----------------
- //
- // Parameters:
- //
- // pd3dDevice
- // The D3D device with which the texture is going to be used.
- // pFlags
- // allows specification of D3DX_TEXTURE_NOMIPMAP
- // D3DX_TEXTURE_NOMIPMAP may be returned in the case where mipmap creation
- // is not supported. Additionally, D3DX_TEXTURE_STAGE<n> can be specified
- // to indicate which texture stage the texture is for e.g.
- // D3D_TEXTURE_STAGE1 indicates that the texture is for use with texture
- // stage one. Stage Zero is the default if no TEXTURE_STAGE flags are
- // set.
- // pWidth
- // width in pixels; 0 or NULL is unacceptable
- // returns corrected width
- // pHeight
- // height in pixels; 0 or NULL is unacceptable
- // returns corrected height
- // pPixelFormat
- // surface format. D3DX_DEFAULT is unacceptable.
- // returns actual format that was used
- // pDDPal
- // DDraw palette that is set (if present) on paletted surfaces.
- // It is ignored even if it is set, for non-paletted surfaces.
- // ppDDSurf
- // The ddraw surface that will be created
- // pNumMipMaps
- // the number of mipmaps actually generated
- //
- // Notes: See notes for D3DXCheckTextureRequirements.
- //-------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXCreateTexture( LPDIRECT3DDEVICE7 pd3dDevice,
- LPDWORD pFlags,
- LPDWORD pWidth,
- LPDWORD pHeight,
- D3DX_SURFACEFORMAT* pPixelFormat,
- LPDIRECTDRAWPALETTE pDDPal,
- LPDIRECTDRAWSURFACE7* ppDDSurf,
- LPDWORD pNumMipMaps);
- //-------------------------------------------------------------------------
- // D3DXCreateCubeMapTexture: Create blank cube-map texture
- // ------------------------
- //
- // Parameters:
- //
- // pd3dDevice
- // The D3D device with which the texture is going to be used.
- // pFlags
- // allows specification of D3DX_TEXTURE_NOMIPMAP
- // D3DX_TEXTURE_NOMIPMAP may be returned in the case where mipmap creation
- // is not supported. Additionally, D3DX_TEXTURE_STAGE<n> can be specified
- // to indicate which texture stage the texture is for e.g.
- // D3D_TEXTURE_STAGE1 indicates that the texture is for use with texture
- // stage one. Stage Zero is the default if no TEXTURE_STAGE flags are
- // set.
- // cubefaces
- // allows specification of which faces of the cube-map to generate.
- // D3DX_DEFAULT, 0, and DDSCAPS2_CUBEMAP_ALLFACES all mean
- // "create all 6 faces of the cubemap". Any combination of
- // DDSCAPS2_CUBEMAP_POSITIVEX, DDSCAPS2_CUBEMAP_NEGATIVEX,
- // DDSCAPS2_CUBEMAP_POSITIVEY, DDSCAPS2_CUBEMAP_NEGATIVEY,
- // DDSCAPS2_CUBEMAP_POSITIVEZ, or DDSCAPS2_CUBEMAP_NEGATIVEZ, is
- // valid.
- // colorEmptyFaces
- // allows specification of the color to use for the faces that were not
- // specified in the cubefaces parameter.
- // pWidth
- // width in pixels; 0 or NULL is unacceptable
- // returns corrected width
- // pHeight
- // height in pixels; 0 or NULL is unacceptable
- // returns corrected height
- // pPixelFormat
- // surface format. D3DX_DEFAULT is unacceptable.
- // returns actual format that was used
- // pDDPal
- // DDraw palette that is set (if present) on paletted surfaces.
- // It is ignored even if it is set, for non-paletted surfaces.
- // ppDDSurf
- // the ddraw surface that will be created
- // pNumMipMaps
- // the number of mipmaps generated for a particular face of the
- // cubemap.
- //
- // Notes: See notes for D3DXCheckTextureRequirements.
- //-------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXCreateCubeMapTexture( LPDIRECT3DDEVICE7 pd3dDevice,
- LPDWORD pFlags,
- DWORD cubefaces,
- D3DCOLOR colorEmptyFaces,
- LPDWORD pWidth,
- LPDWORD pHeight,
- D3DX_SURFACEFORMAT *pPixelFormat,
- LPDIRECTDRAWPALETTE pDDPal,
- LPDIRECTDRAWSURFACE7* ppDDSurf,
- LPDWORD pNumMipMaps);
- //-------------------------------------------------------------------------
- // D3DXCreateTextureFromFile: Create a texture object from a file or from the
- // ------------------------- resource. Only BMP and DIB are supported from the
- // resource portion of the executable.
- //
- // Parameters:
- //
- // pd3dDevice
- // The D3D device with which the texture is going to be used.
- // pFlags
- // allows specification of D3DX_TEXTURE_NOMIPMAP
- // D3DX_TEXTURE_NOMIPMAP may be returned in the case where mipmap creation
- // is not supported. Additionally, D3DX_TEXTURE_STAGE<n> can be specified
- // to indicate which texture stage the texture is for e.g.
- // D3D_TEXTURE_STAGE1 indicates that the texture is for use with texture
- // stage one. Stage Zero is the default if no TEXTURE_STAGE flags are
- // set.
- // pWidth
- // Width in pixels. If 0 or D3DX_DEFAULT, the width will be taken
- // from the file
- // returns corrected width
- // pHeight
- // Height in pixels. If 0 or D3DX_DEFAULT, the height will be taken
- // from the file
- // returns corrected height
- // pPixelFormat
- // If D3DX_SF_UNKNOWN is passed in, pixel format closest to the bitmap
- // will be chosen
- // returns actual format that was used
- // pDDPal
- // DDraw palette that is set (if present) on paletted surfaces.
- // It is ignored even if it is set, for non-paletted surfaces.
- // ppDDSurf
- // The ddraw surface that will be created.
- // pNumMipMaps
- // The number of mipmaps generated.
- // pSrcName
- // File name. BMP, DIB, DDS, are supported.
- //
- // TGA is supported for the following cases: 16, 24, 32bpp direct color and 8bpp palettized.
- // Also, 8, 16bpp grayscale is supported. RLE versions of the above
- // TGA formats are also supported. ColorKey and Premultiplied Alpha
- // are not currently supported for TGA files.
- // returns created format
- //
- // Notes: See notes for D3DXCheckTextureRequirements.
- //-------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXCreateTextureFromFile( LPDIRECT3DDEVICE7 pd3dDevice,
- LPDWORD pFlags,
- LPDWORD pWidth,
- LPDWORD pHeight,
- D3DX_SURFACEFORMAT* pPixelFormat,
- LPDIRECTDRAWPALETTE pDDPal,
- LPDIRECTDRAWSURFACE7* ppDDSurf,
- LPDWORD pNumMipMaps,
- LPSTR pSrcName,
- D3DX_FILTERTYPE filterType);
- //-------------------------------------------------------------------------
- // D3DXLoadTextureFromFile: Load from a file into a mipmap level. Doing the
- // ----------------------- necessary color conversion and rescaling. File
- // format support is identical to
- // D3DXCreateTextureFromFile's.
- //
- // pd3dDevice
- // The D3D device with which the texture is going to be used.
- // pTexture
- // a pointer to a DD7Surface which was created with either
- // CreateTextureFromFile or CreateTexture.
- // mipMapLevel
- // indicates mipmap level
- // Note:
- // 1. Error if mipmap level doesn't exist
- // 2. If D3DX_DEFAULT and equal number of mipmap levels exist
- // then all the source mip-levels are loaded
- // 3. If the source has mipmaps and the dest doesn't, use the top one
- // 4. If the dest has miplevels and source doesn't, we expand
- // 5. If there are unequal numbers of miplevels, we expand
- // pSrcName
- // File name. BMP, DIB, DDS, are supported.
- // For details on TGA support, refer to the comments for
- // D3DXCreateTextureFromFile
- // pSrcRect
- // the source rectangle or null (whole surface)
- // pDestRect
- // the destination rectangle or null (whole surface)
- // filterType
- // filter used for mipmap generation
- //-------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXLoadTextureFromFile( LPDIRECT3DDEVICE7 pd3dDevice,
- LPDIRECTDRAWSURFACE7 pTexture,
- DWORD mipMapLevel,
- LPSTR pSrcName,
- RECT* pSrcRect,
- RECT* pDestRect,
- D3DX_FILTERTYPE filterType);
- //-------------------------------------------------------------------------
- // D3DXLoadTextureFromSurface: Load from a DDraw Surface into a mipmap level.
- // -------------------------- Doing the necessary color conversion.
- //
- // pd3dDevice
- // The D3D device with which the texture is going to be used.
- // pTexture
- // a pointer to a DD7Surface which was created with either
- // CreateTextureFromFile or CreateTexture.
- // mipMapLevel
- // indicates mipmap level
- // Note:
- // 1. Error if mipmap level doesn't exist
- // 2. If D3DX_DEFAULT and equal number of mipmap levels exist
- // then all the source mip-levels are loaded
- // 3. If the source has mipmaps and the dest doesn't, use the top one
- // 4. If the dest has miplevels and source doesn't, we expand
- // 5. If there are unequal numbers of miplevels, we expand
- // pSurfaceSrc
- // the source surface
- // pSrcRect
- // the source rectangle or null (whole surface)
- // pDestRect
- // the destination rectangle or null (whole surface)
- // filterType
- // filter used for mipmap generation
- //-------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXLoadTextureFromSurface( LPDIRECT3DDEVICE7 pd3dDevice,
- LPDIRECTDRAWSURFACE7 pTexture,
- DWORD mipMapLevel,
- LPDIRECTDRAWSURFACE7 pSurfaceSrc,
- RECT* pSrcRect,
- RECT* pDestRect,
- D3DX_FILTERTYPE filterType);
- //-------------------------------------------------------------------------
- // D3DXLoadTextureFromMemory: Load a mip level from memory. Doing the necessary
- // ------------------------- color conversion.
- //
- // pd3dDevice
- // The D3D device with which the texture is going to be used.
- // pTexture
- // a pointer to a DD7Surface which was created with either
- // CreateTextureFromFile or CreateTexture.
- // mipMapLevel
- // indicates mipmap level
- // Note:
- // 1. Error if mipmap level doesn't exist
- // 2. If D3DX_DEFAULT and equal number of mipmap levels exist
- // then all the source mip-levels are loaded
- // 3. If the source has mipmaps and the dest doesn't, use the top one
- // 4. If the dest has miplevels and source doesn't, we expand
- // 5. If there are unequal numbers of miplevels, we expand
- // pMemory
- // pointer to source memory from which the texture will be loaded
- // pDDPal
- // DirectDraw Palette, that the app passes in optionally if the memory is
- // supposed to be paletteized.
- // srcPixelFormat
- // PixelFormat of the source.
- // srcPitch
- // The pitch of the memory or D3DX_DEFAULT (based on srcPixelFormat)
- // pDestRect
- // The destination rectangle or null (whole surface)
- // filterType
- // filter used for mipmap generation
- //
- // Assumptions: The source (memory) is loaded in full
- //-------------------------------------------------------------------------
- HRESULT WINAPI
- D3DXLoadTextureFromMemory( LPDIRECT3DDEVICE7 pd3dDevice,
- LPDIRECTDRAWSURFACE7 pTexture,
- DWORD mipMapLevel,
- LPVOID pMemory,
- LPDIRECTDRAWPALETTE pDDPal,
- D3DX_SURFACEFORMAT srcPixelFormat,
- DWORD srcPitch,
- RECT* pDestRect,
- D3DX_FILTERTYPE filterType);
- #ifdef __cplusplus
- }
- #endif //__cplusplus
- //-------------------------------------------------------------------------
- // Flags for texture create functions; applies to
- // D3DXCreateTexture, D3DXCreateCubeMapTexture and D3DXCreateTextureFromFile.
- //
- // Flag to indicate that mipmap generation is not desired.
- #define D3DX_TEXTURE_NOMIPMAP (1 << 8)
- // Flags to indicate which texture stage the texture is
- // intended for use with. Specifying the stage is necessary at
- // texture creation time for HW devices that expose the
- // D3DDEVCAPS_SEPARATETEXTUREMEMORIES bit in their D3DDEVICEDESC
- // structure.
- #define D3DX_TEXTURE_STAGE0 (0)
- #define D3DX_TEXTURE_STAGE1 (1)
- #define D3DX_TEXTURE_STAGE2 (2)
- #define D3DX_TEXTURE_STAGE3 (3)
- #define D3DX_TEXTURE_STAGE4 (4)
- #define D3DX_TEXTURE_STAGE5 (5)
- #define D3DX_TEXTURE_STAGE6 (6)
- #define D3DX_TEXTURE_STAGE7 (7)
- // Mask to extract the texture stage value out of the flags to
- // the texture create functions.
- #define D3DX_TEXTURE_STAGE_MASK (0x7)
- #endif //__D3DXCORE_H__