/* * * Copyright (C) Microsoft Corporation. All Rights Reserved. * * File: d3dx8core.h * Content: D3DX core types and functions */ #include "d3dx8.h" #ifndef __D3DX8CORE_H__ #define __D3DX8CORE_H__ /* * ID3DXBuffer: * ------------ * The buffer object is used by D3DX to return arbitrary size data. * * GetBufferPointer - * Returns a pointer to the beginning of the buffer. * * GetBufferSize - * Returns the size of the buffer, in bytes. */ typedef interface ID3DXBuffer ID3DXBuffer; typedef interface ID3DXBuffer *LPD3DXBUFFER; /* {932E6A7E-C68E-45dd-A7BF-53D19C86DB1F} */ DEFINE_GUID(IID_ID3DXBuffer, 0x932e6a7e, 0xc68e, 0x45dd, 0xa7, 0xbf, 0x53, 0xd1, 0x9c, 0x86, 0xdb, 0x1f); #undef INTERFACE #define INTERFACE ID3DXBuffer DECLARE_INTERFACE_(ID3DXBuffer, IUnknown) { /* IUnknown */ STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* ID3DXBuffer */ STDMETHOD_(LPVOID, GetBufferPointer)(THIS) PURE; STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE; }; /* * ID3DXFont: * ---------- * Font objects contain the textures and resources needed to render * a specific font on a specific device. * * Begin - * Prepartes device for drawing text. This is optional.. if DrawText * is called outside of Begin/End, it will call Begin and End for you. * * DrawText - * Draws formatted text on a D3D device. Some parameters are * surprisingly similar to those of GDI's DrawText function. See GDI * documentation for a detailed description of these parameters. * * End - * Restores device state to how it was when Begin was called. * * OnLostDevice, OnResetDevice - * Call OnLostDevice() on this object before calling Reset() on the * device, so that this object can release any stateblocks and video * memory resources. After Reset(), the call OnResetDevice(). * */ typedef interface ID3DXFont ID3DXFont; typedef interface ID3DXFont *LPD3DXFONT; /* {89FAD6A5-024D-49af-8FE7-F51123B85E25} */ DEFINE_GUID( IID_ID3DXFont, 0x89fad6a5, 0x24d, 0x49af, 0x8f, 0xe7, 0xf5, 0x11, 0x23, 0xb8, 0x5e, 0x25); #undef INTERFACE #define INTERFACE ID3DXFont DECLARE_INTERFACE_(ID3DXFont, IUnknown) { /* IUnknown */ STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* ID3DXFont */ STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE8* ppDevice) PURE; STDMETHOD(GetLogFont)(THIS_ LOGFONT* pLogFont) PURE; STDMETHOD(Begin)(THIS) PURE; STDMETHOD_(INT, DrawTextA)(THIS_ LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) PURE; STDMETHOD_(INT, DrawTextW)(THIS_ LPCWSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) PURE; STDMETHOD(End)(THIS) PURE; STDMETHOD(OnLostDevice)(THIS) PURE; STDMETHOD(OnResetDevice)(THIS) PURE; }; #ifndef DrawText #ifdef UNICODE #define DrawText DrawTextW #else #define DrawText DrawTextA #endif #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ HRESULT WINAPI D3DXCreateFont( LPDIRECT3DDEVICE8 pDevice, HFONT hFont, LPD3DXFONT* ppFont); HRESULT WINAPI D3DXCreateFontIndirect( LPDIRECT3DDEVICE8 pDevice, CONST LOGFONT* pLogFont, LPD3DXFONT* ppFont); #ifdef __cplusplus } #endif /* __cplusplus */ /* * ID3DXSprite: * ------------ * This object intends to provide an easy way to drawing sprites using D3D. * * Begin - * Prepares device for drawing sprites * * Draw, DrawAffine, DrawTransform - * Draws a sprite in screen-space. Before transformation, the sprite is * the size of SrcRect, with its top-left corner at the origin (0,0). * The color and alpha channels are modulated by Color. * * End - * Restores device state to how it was when Begin was called. * * OnLostDevice, OnResetDevice - * Call OnLostDevice() on this object before calling Reset() on the * device, so that this object can release any stateblocks and video * memory resources. After Reset(), the call OnResetDevice(). */ typedef interface ID3DXSprite ID3DXSprite; typedef interface ID3DXSprite *LPD3DXSPRITE; /* {13D69D15-F9B0-4e0f-B39E-C91EB33F6CE7} */ DEFINE_GUID( IID_ID3DXSprite, 0x13d69d15, 0xf9b0, 0x4e0f, 0xb3, 0x9e, 0xc9, 0x1e, 0xb3, 0x3f, 0x6c, 0xe7); #undef INTERFACE #define INTERFACE ID3DXSprite DECLARE_INTERFACE_(ID3DXSprite, IUnknown) { /* IUnknown */ STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* ID3DXSprite */ STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE8* ppDevice) PURE; STDMETHOD(Begin)(THIS) PURE; STDMETHOD(Draw)(THIS_ LPDIRECT3DTEXTURE8 pSrcTexture, CONST RECT* pSrcRect, CONST D3DXVECTOR2* pScaling, CONST D3DXVECTOR2* pRotationCenter, FLOAT Rotation, CONST D3DXVECTOR2* pTranslation, D3DCOLOR Color) PURE; STDMETHOD(DrawTransform)(THIS_ LPDIRECT3DTEXTURE8 pSrcTexture, CONST RECT* pSrcRect, CONST D3DXMATRIX* pTransform, D3DCOLOR Color) PURE; STDMETHOD(End)(THIS) PURE; STDMETHOD(OnLostDevice)(THIS) PURE; STDMETHOD(OnResetDevice)(THIS) PURE; }; #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ HRESULT WINAPI D3DXCreateSprite( LPDIRECT3DDEVICE8 pDevice, LPD3DXSPRITE* ppSprite); #ifdef __cplusplus } #endif /* __cplusplus */ /* * ID3DXRenderToSurface: * --------------------- * This object abstracts rendering to surfaces. These surfaces do not * necessarily need to be render targets. If they are not, a compatible * render target is used, and the result copied into surface at end scene. * * BeginScene, EndScene - * Call BeginScene() and EndScene() at the beginning and ending of your * scene. These calls will setup and restore render targets, viewports, * etc.. * * OnLostDevice, OnResetDevice - * Call OnLostDevice() on this object before calling Reset() on the * device, so that this object can release any stateblocks and video * memory resources. After Reset(), the call OnResetDevice(). */ typedef struct _D3DXRTS_DESC { UINT Width; UINT Height; D3DFORMAT Format; BOOL DepthStencil; D3DFORMAT DepthStencilFormat; } D3DXRTS_DESC; typedef interface ID3DXRenderToSurface ID3DXRenderToSurface; typedef interface ID3DXRenderToSurface *LPD3DXRENDERTOSURFACE; /* {82DF5B90-E34E-496e-AC1C-62117A6A5913} */ DEFINE_GUID( IID_ID3DXRenderToSurface, 0x82df5b90, 0xe34e, 0x496e, 0xac, 0x1c, 0x62, 0x11, 0x7a, 0x6a, 0x59, 0x13); #undef INTERFACE #define INTERFACE ID3DXRenderToSurface DECLARE_INTERFACE_(ID3DXRenderToSurface, IUnknown) { /* IUnknown */ STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* ID3DXRenderToSurface */ STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE8* ppDevice) PURE; STDMETHOD(GetDesc)(THIS_ D3DXRTS_DESC* pDesc) PURE; STDMETHOD(BeginScene)(THIS_ LPDIRECT3DSURFACE8 pSurface, CONST D3DVIEWPORT8* pViewport) PURE; STDMETHOD(EndScene)(THIS) PURE; STDMETHOD(OnLostDevice)(THIS) PURE; STDMETHOD(OnResetDevice)(THIS) PURE; }; #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ HRESULT WINAPI D3DXCreateRenderToSurface( LPDIRECT3DDEVICE8 pDevice, UINT Width, UINT Height, D3DFORMAT Format, BOOL DepthStencil, D3DFORMAT DepthStencilFormat, LPD3DXRENDERTOSURFACE* ppRenderToSurface); #ifdef __cplusplus } #endif /* __cplusplus */ /* * ID3DXRenderToEnvMap: * -------------------- * This object abstracts rendering to environment maps. These surfaces * do not necessarily need to be render targets. If they are not, a * compatible render target is used, and the result copied into the * environment map at end scene. * * BeginCube, BeginSphere, BeginHemisphere, BeginParabolic - * This function initiates the rendering of the environment map. As * parameters, you pass the textures in which will get filled in with * the resulting environment map. * * Face - * Call this function to initiate the drawing of each face. For each * environment map, you will call this six times.. once for each face * in D3DCUBEMAP_FACES. * * End - * This will restore all render targets, and if needed compose all the * rendered faces into the environment map surfaces. * * OnLostDevice, OnResetDevice - * Call OnLostDevice() on this object before calling Reset() on the * device, so that this object can release any stateblocks and video * memory resources. After Reset(), the call OnResetDevice(). */ typedef struct _D3DXRTE_DESC { UINT Size; D3DFORMAT Format; BOOL DepthStencil; D3DFORMAT DepthStencilFormat; } D3DXRTE_DESC; typedef interface ID3DXRenderToEnvMap ID3DXRenderToEnvMap; typedef interface ID3DXRenderToEnvMap *LPD3DXRenderToEnvMap; /* {4E42C623-9451-44b7-8C86-ABCCDE5D52C8} */ DEFINE_GUID( IID_ID3DXRenderToEnvMap, 0x4e42c623, 0x9451, 0x44b7, 0x8c, 0x86, 0xab, 0xcc, 0xde, 0x5d, 0x52, 0xc8); #undef INTERFACE #define INTERFACE ID3DXRenderToEnvMap DECLARE_INTERFACE_(ID3DXRenderToEnvMap, IUnknown) { /* IUnknown */ STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* ID3DXRenderToEnvMap */ STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE8* ppDevice) PURE; STDMETHOD(GetDesc)(THIS_ D3DXRTE_DESC* pDesc) PURE; STDMETHOD(BeginCube)(THIS_ LPDIRECT3DCUBETEXTURE8 pCubeTex) PURE; STDMETHOD(BeginSphere)(THIS_ LPDIRECT3DTEXTURE8 pTex) PURE; STDMETHOD(BeginHemisphere)(THIS_ LPDIRECT3DTEXTURE8 pTexZPos, LPDIRECT3DTEXTURE8 pTexZNeg) PURE; STDMETHOD(BeginParabolic)(THIS_ LPDIRECT3DTEXTURE8 pTexZPos, LPDIRECT3DTEXTURE8 pTexZNeg) PURE; STDMETHOD(Face)(THIS_ D3DCUBEMAP_FACES Face) PURE; STDMETHOD(End)(THIS) PURE; STDMETHOD(OnLostDevice)(THIS) PURE; STDMETHOD(OnResetDevice)(THIS) PURE; }; #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ HRESULT WINAPI D3DXCreateRenderToEnvMap( LPDIRECT3DDEVICE8 pDevice, UINT Size, D3DFORMAT Format, BOOL DepthStencil, D3DFORMAT DepthStencilFormat, LPD3DXRenderToEnvMap* ppRenderToEnvMap); #ifdef __cplusplus } #endif /* __cplusplus */ /* * Shader assemblers: */ /* * D3DXASM flags: * -------------- * * D3DXASM_DEBUG * Generate debug info. * * D3DXASM_SKIPVALIDATION * Do not validate the generated code against known capabilities and * constraints. This option is only recommended when assembling shaders * you KNOW will work. (ie. have assembled before without this option.) */ #define D3DXASM_DEBUG (1 << 0) #define D3DXASM_SKIPVALIDATION (1 << 1) #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * D3DXAssembleShader: * ------------------- * Assembles an ascii description of a vertex or pixel shader into * binary form. * * Parameters: * pSrcFile * Source file name * hSrcModule * Module handle. if NULL, current module will be used. * pSrcResource * Resource name in module * pSrcData * Pointer to source code * SrcDataLen * Size of source code, in bytes * Flags * D3DXASM_xxx flags * ppConstants * Returns an ID3DXBuffer object containing constant declarations. * ppCompiledShader * Returns an ID3DXBuffer object containing the object code. * ppCompilationErrors * Returns an ID3DXBuffer object containing ascii error messages */ HRESULT WINAPI D3DXAssembleShaderFromFileA( LPCSTR pSrcFile, DWORD Flags, LPD3DXBUFFER* ppConstants, LPD3DXBUFFER* ppCompiledShader, LPD3DXBUFFER* ppCompilationErrors); HRESULT WINAPI D3DXAssembleShaderFromFileW( LPCWSTR pSrcFile, DWORD Flags, LPD3DXBUFFER* ppConstants, LPD3DXBUFFER* ppCompiledShader, LPD3DXBUFFER* ppCompilationErrors); #ifdef UNICODE #define D3DXAssembleShaderFromFile D3DXAssembleShaderFromFileW #else #define D3DXAssembleShaderFromFile D3DXAssembleShaderFromFileA #endif HRESULT WINAPI D3DXAssembleShaderFromResourceA( HMODULE hSrcModule, LPCSTR pSrcResource, DWORD Flags, LPD3DXBUFFER* ppConstants, LPD3DXBUFFER* ppCompiledShader, LPD3DXBUFFER* ppCompilationErrors); HRESULT WINAPI D3DXAssembleShaderFromResourceW( HMODULE hSrcModule, LPCWSTR pSrcResource, DWORD Flags, LPD3DXBUFFER* ppConstants, LPD3DXBUFFER* ppCompiledShader, LPD3DXBUFFER* ppCompilationErrors); #ifdef UNICODE #define D3DXAssembleShaderFromResource D3DXAssembleShaderFromResourceW #else #define D3DXAssembleShaderFromResource D3DXAssembleShaderFromResourceA #endif HRESULT WINAPI D3DXAssembleShader( LPCVOID pSrcData, UINT SrcDataLen, DWORD Flags, LPD3DXBUFFER* ppConstants, LPD3DXBUFFER* ppCompiledShader, LPD3DXBUFFER* ppCompilationErrors); #ifdef __cplusplus } #endif /* __cplusplus */ /* * Misc APIs: */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * D3DXGetErrorString: * ------------------ * Returns the error string for given an hresult. Interprets all D3DX and * D3D hresults. * * Parameters: * hr * The error code to be deciphered. * pBuffer * Pointer to the buffer to be filled in. * BufferLen * Count of characters in buffer. Any error message longer than this * length will be truncated to fit. */ HRESULT WINAPI D3DXGetErrorStringA( HRESULT hr, LPSTR pBuffer, UINT BufferLen); HRESULT WINAPI D3DXGetErrorStringW( HRESULT hr, LPWSTR pBuffer, UINT BufferLen); #ifdef UNICODE #define D3DXGetErrorString D3DXGetErrorStringW #else #define D3DXGetErrorString D3DXGetErrorStringA #endif #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __D3DX8CORE_H__ */