#include "pch.h"
#include "ddraw.h"
#include "d3d.h"
#include "d3drm.h"
#include "dinput.h"
#ifdef _DEBUG
class HRESULTInfo {
public:
HRESULT hresult;
char* pszError;
char* pszText;
};
HRESULTInfo gpinfo[] =
{
{DDERR_ALREADYINITIALIZED, "DDERR_ALREADYINITIALIZED",
"This object is already initialized"},
{DDERR_CANNOTATTACHSURFACE, "DDERR_CANNOTATTACHSURFACE",
"This surface can not be attached to the requested surface"},
{DDERR_CANNOTDETACHSURFACE, "DDERR_CANNOTDETACHSURFACE",
"This surface can not be detached from the requested surface"},
{DDERR_CURRENTLYNOTAVAIL, "DDERR_CURRENTLYNOTAVAIL",
"Support is currently not available"},
{DDERR_EXCEPTION, "DDERR_EXCEPTION",
"An exception was encountered while performing the requested "
"operation"},
{DDERR_GENERIC, "DDERR_GENERIC",
"Generic failure"},
{DDERR_HEIGHTALIGN, "DDERR_HEIGHTALIGN",
"Height of rectangle provided is not a multiple of required "
"alignment"},
{DDERR_INCOMPATIBLEPRIMARY, "DDERR_INCOMPATIBLEPRIMARY",
"Unable to match primary surface creation request with existing "
"primary surface"},
{DDERR_INVALIDCAPS, "DDERR_INVALIDCAPS",
"One or more of the caps bits passed to the callback are incorrect"},
{DDERR_INVALIDCLIPLIST, "DDERR_INVALIDCLIPLIST",
"DirectDraw does not support provided Cliplist"},
{DDERR_INVALIDMODE, "DDERR_INVALIDMODE",
"DirectDraw does not support the requested mode"},
{DDERR_INVALIDOBJECT, "DDERR_INVALIDOBJECT",
"DirectDraw received a pointer that was an invalid DIRECTDRAW object"},
{DDERR_INVALIDPARAMS, "DDERR_INVALIDPARAMS",
"One or more of the parameters passed to the method are incorrect."},
{DDERR_INVALIDPIXELFORMAT, "DDERR_INVALIDPIXELFORMAT",
"Pixel format was invalid as specified"},
{DDERR_INVALIDRECT, "DDERR_INVALIDRECT",
"Rectangle provided was invalid"},
{DDERR_LOCKEDSURFACES, "DDERR_LOCKEDSURFACES",
"Operation could not be carried out because one or more surfaces "
"are locked"},
{DDERR_NO3D, "DDERR_NO3D",
"There is no 3D present"},
{DDERR_NOALPHAHW, "DDERR_NOALPHAHW",
"Operation could not be carried out because there is no alpha "
"accleration hardware present or available"},
{DDERR_NOCLIPLIST, "DDERR_NOCLIPLIST",
"No clip list available"},
{DDERR_NOCOLORCONVHW, "DDERR_NOCOLORCONVHW",
"Operation could not be carried out because there is no color "
"conversion hardware present or available"},
{DDERR_NOCOOPERATIVELEVELSET, "DDERR_NOCOOPERATIVELEVELSET",
"Create function called without DirectDraw object method "
"SetCooperativeLevel being called"},
{DDERR_NOCOLORKEY, "DDERR_NOCOLORKEY",
"Surface doesn't currently have a color key"},
{DDERR_NOCOLORKEYHW, "DDERR_NOCOLORKEYHW",
"Operation could not be carried out because there is no "
"hardware support of the destination color key"},
{DDERR_NODIRECTDRAWSUPPORT, "DDERR_NODIRECTDRAWSUPPORT",
"No DirectDraw support possible with current display driver"},
{DDERR_NOEXCLUSIVEMODE, "DDERR_NOEXCLUSIVEMODE",
"Operation requires the application to have exclusive mode "
"but the application does not have exclusive mode"},
{DDERR_NOFLIPHW, "DDERR_NOFLIPHW",
"Flipping visible surfaces is not supported"},
{DDERR_NOGDI, "DDERR_NOGDI",
"There is no GDI present"},
{DDERR_NOMIRRORHW, "DDERR_NOMIRRORHW",
"Operation could not be carried out because there is "
"no hardware present or available"},
{DDERR_NOTFOUND, "DDERR_NOTFOUND",
"Requested item was not found"},
{DDERR_NOOVERLAYHW, "DDERR_NOOVERLAYHW",
"Operation could not be carried out because there is "
"no overlay hardware present or available"},
{DDERR_NORASTEROPHW, "DDERR_NORASTEROPHW",
"Operation could not be carried out because there is "
"no appropriate raster op hardware present or available"},
{DDERR_NOROTATIONHW, "DDERR_NOROTATIONHW",
"Operation could not be carried out because there is "
"no rotation hardware present or available"},
{DDERR_NOSTRETCHHW, "DDERR_NOSTRETCHHW",
"Operation could not be carried out because there is "
"no hardware support for stretching"},
{DDERR_NOT4BITCOLOR, "DDERR_NOT4BITCOLOR",
"DirectDrawSurface is not in 4 bit color palette and "
"the requested operation requires 4 bit color palette"},
{DDERR_NOT4BITCOLORINDEX, "DDERR_NOT4BITCOLORINDEX",
"DirectDrawSurface is not in 4 bit color index palette "
"and the requested operation requires 4 bit color index palette"},
{DDERR_NOT8BITCOLOR, "DDERR_NOT8BITCOLOR",
"DirectDraw Surface is not in 8 bit color mode "
"and the requested operation requires 8 bit color"},
{DDERR_NOTEXTUREHW, "DDERR_NOTEXTUREHW",
"Operation could not be carried out because there is "
"no texture mapping hardware present or available"},
{DDERR_NOVSYNCHW, "DDERR_NOVSYNCHW",
"Operation could not be carried out because there is "
"no hardware support for vertical blank synchronized operations"},
{DDERR_NOZBUFFERHW, "DDERR_NOZBUFFERHW",
"Operation could not be carried out because there is "
"no hardware support for zbuffer blting"},
{DDERR_NOZOVERLAYHW, "DDERR_NOZOVERLAYHW",
"Overlay surfaces could not be z layered based on their "
"BltOrder because the hardware does not support z layering of overlays"},
{DDERR_OUTOFCAPS, "DDERR_OUTOFCAPS",
"The hardware needed for the requested operation has "
"already been allocated"},
{DDERR_OUTOFMEMORY, "DDERR_OUTOFMEMORY",
"DirectDraw does not have enough memory to perform the operation"},
{DDERR_OUTOFVIDEOMEMORY, "DDERR_OUTOFVIDEOMEMORY",
"DirectDraw does not have enough memory to perform the operation"},
{DDERR_OVERLAYCANTCLIP, "DDERR_OVERLAYCANTCLIP",
"hardware does not support clipped overlays"},
{DDERR_OVERLAYCOLORKEYONLYONEACTIVE, "DDERR_OVERLAYCOLORKEYONLYONEACTIVE",
"Can only have ony color key active at one time for overlays"},
{DDERR_PALETTEBUSY, "DDERR_PALETTEBUSY",
"Access to this palette is being refused because the palette "
"is already locked by another thread"},
{DDERR_COLORKEYNOTSET, "DDERR_COLORKEYNOTSET",
"No src color key specified for this operation"},
{DDERR_SURFACEALREADYATTACHED, "DDERR_SURFACEALREADYATTACHED",
"This surface is already attached to the surface it is "
"being attached to"},
{DDERR_SURFACEALREADYDEPENDENT, "DDERR_SURFACEALREADYDEPENDENT",
"This surface is already a dependency of the surface it "
"is being made a dependency of"},
{DDERR_SURFACEBUSY, "DDERR_SURFACEBUSY",
"Access to this surface is being refused because the surface "
"is already locked by another thread"},
{DDERR_SURFACEISOBSCURED, "DDERR_SURFACEISOBSCURED",
"Access to Surface refused because Surface is obscured"},
{DDERR_SURFACELOST, "DDERR_SURFACELOST",
"The DIRECTDRAWSURFACE object representing this surface "
"should have Restore called on it. Access to this surface is "
"being refused because the surface is gone"},
{DDERR_SURFACENOTATTACHED, "DDERR_SURFACENOTATTACHED",
"The requested surface is not attached"},
{DDERR_TOOBIGHEIGHT, "DDERR_TOOBIGHEIGHT",
"Height requested by DirectDraw is too large"},
{DDERR_TOOBIGSIZE, "DDERR_TOOBIGSIZE",
"Size requested by DirectDraw is too large. The individual height "
"and width are OK"},
{DDERR_TOOBIGWIDTH, "DDERR_TOOBIGWIDTH",
"Width requested by DirectDraw is too large"},
{DDERR_UNSUPPORTED, "DDERR_UNSUPPORTED",
"Action not supported"},
{DDERR_UNSUPPORTEDFORMAT, "DDERR_UNSUPPORTEDFORMAT",
"FOURCC format requested is unsupported by DirectDraw"},
{DDERR_UNSUPPORTEDMASK, "DDERR_UNSUPPORTEDMASK",
"Bitmask in the pixel format requested is unsupported by DirectDraw"},
{DDERR_VERTICALBLANKINPROGRESS, "DDERR_VERTICALBLANKINPROGRESS",
"vertical blank is in progress"},
{DDERR_WASSTILLDRAWING, "DDERR_WASSTILLDRAWING",
"Informs DirectDraw that the previous Blt which is "
"transfering information to or from this Surface is incomplete"},
{DDERR_XALIGN, "DDERR_XALIGN",
"Rectangle provided was not horizontally aligned on required boundary"},
{DDERR_INVALIDDIRECTDRAWGUID, "DDERR_INVALIDDIRECTDRAWGUID",
"The GUID passed to DirectDrawCreate is not a valid DirectDraw driver "
"identifier"},
{DDERR_DIRECTDRAWALREADYCREATED, "DDERR_DIRECTDRAWALREADYCREATED",
"A DirectDraw object representing this driver has already been "
"created for this process"},
{DDERR_NODIRECTDRAWHW, "DDERR_NODIRECTDRAWHW",
"A hardware only DirectDraw object creation was attempted "
"but the driver did not support any hardware"},
{DDERR_PRIMARYSURFACEALREADYEXISTS, "DDERR_PRIMARYSURFACEALREADYEXISTS",
"This process already has created a primary surface"},
{DDERR_NOEMULATION, "DDERR_NOEMULATION",
"Software emulation not available"},
{DDERR_REGIONTOOSMALL, "DDERR_REGIONTOOSMALL",
"Region passed to Clipper::GetClipList is too small"},
{DDERR_CLIPPERISUSINGHWND, "DDERR_CLIPPERISUSINGHWND",
"An attempt was made to set a clip list for a clipper objec that is "
"already monitoring an hwnd"},
{DDERR_NOCLIPPERATTACHED, "DDERR_NOCLIPPERATTACHED",
"No clipper object attached to surface object"},
{DDERR_NOHWND, "DDERR_NOHWND",
"Clipper notification requires an HWND or no HWND has previously "
"been set as the CooperativeLevel HWND"},
{DDERR_HWNDSUBCLASSED, "DDERR_HWNDSUBCLASSED",
"HWND used by DirectDraw CooperativeLevel has been subclassed, "
"this prevents DirectDraw from restoring state"},
{DDERR_HWNDALREADYSET, "DDERR_HWNDALREADYSET",
"The CooperativeLevel HWND has already been set. It can not be "
"reset while the process has surfaces or palettes created"},
{DDERR_NOPALETTEATTACHED, "DDERR_NOPALETTEATTACHED",
"No palette object attached to this surface"},
{DDERR_NOPALETTEHW, "DDERR_NOPALETTEHW",
"No hardware support for 16 or 256 color palettes"},
{DDERR_BLTFASTCANTCLIP, "DDERR_BLTFASTCANTCLIP",
"If a clipper object is attached to the source surface passed "
"into a BltFast call"},
{DDERR_NOBLTHW, "DDERR_NOBLTHW",
"No blitter hardware"},
{DDERR_NODDROPSHW, "DDERR_NODDROPSHW",
"No DirectDraw ROP hardware"},
{DDERR_OVERLAYNOTVISIBLE, "DDERR_OVERLAYNOTVISIBLE",
"GetOverlayPosition called on a hidden overlay"},
{DDERR_NOOVERLAYDEST, "DDERR_NOOVERLAYDEST",
"GetOverlayPosition called on a overlay that "
"UpdateOverlay has never been called on to establish a destination"},
{DDERR_INVALIDPOSITION, "DDERR_INVALIDPOSITION",
"The position of the overlay on the destination is "
"no longer legal for that destination"},
{DDERR_NOTAOVERLAYSURFACE, "DDERR_NOTAOVERLAYSURFACE",
"Overlay member called for a non-overlay surface"},
{DDERR_EXCLUSIVEMODEALREADYSET, "DDERR_EXCLUSIVEMODEALREADYSET",
"An attempt was made to set the cooperative level when it was "
"already set to exclusive"},
{DDERR_NOTFLIPPABLE, "DDERR_NOTFLIPPABLE",
"An attempt has been made to flip a surface that is not flippable"},
{DDERR_CANTDUPLICATE, "DDERR_CANTDUPLICATE",
"Can't duplicate primary & 3D surfaces, or surfaces that are "
"implicitly created"},
{DDERR_NOTLOCKED, "DDERR_NOTLOCKED",
"Surface was not locked. An attempt to unlock a surface that was "
"not locked at all, or by this process, has been attempted"},
{DDERR_CANTCREATEDC, "DDERR_CANTCREATEDC",
"Windows can not create any more DCs"},
{DDERR_NODC, "DDERR_NODC",
"No DC was ever created for this surface"},
{DDERR_WRONGMODE, "DDERR_WRONGMODE",
"This surface can not be restored because it was created in a "
"different mode"},
{DDERR_IMPLICITLYCREATED, "DDERR_IMPLICITLYCREATED",
"This surface can not be restored because it is an implicitly "
"created surface"},
{DDERR_NOTPALETTIZED, "DDERR_NOTPALETTIZED",
"The surface being used is not a palette-based surface"},
{DDERR_UNSUPPORTEDMODE, "DDERR_UNSUPPORTEDMODE",
"The display is currently in an unsupported mode"},
{D3DERR_BADMAJORVERSION, "D3DERR_BADMAJORVERSION",
"Bad major version"},
{D3DERR_BADMINORVERSION, "D3DERR_BADMINORVERSION",
"Bad minor version"},
{D3DERR_EXECUTE_CREATE_FAILED, "D3DERR_EXECUTE_CREATE_FAILED",
"Execute buffer create failed"},
{D3DERR_EXECUTE_DESTROY_FAILED, "D3DERR_EXECUTE_DESTROY_FAILED",
"Execute buffer destroy failed"},
{D3DERR_EXECUTE_LOCK_FAILED, "D3DERR_EXECUTE_LOCK_FAILED",
"Execute buffer lock failed"},
{D3DERR_EXECUTE_UNLOCK_FAILED, "D3DERR_EXECUTE_UNLOCK_FAILED",
"Execute buffer unlock failed"},
{D3DERR_EXECUTE_LOCKED, "D3DERR_EXECUTE_LOCKED",
"Execute buffer locked"},
{D3DERR_EXECUTE_NOT_LOCKED, "D3DERR_EXECUTE_NOT_LOCKED",
"Execute buffer not locked"},
{D3DERR_EXECUTE_FAILED, "D3DERR_EXECUTE_FAILED",
"Execute buffer execute failed"},
{D3DERR_EXECUTE_CLIPPED_FAILED, "D3DERR_EXECUTE_CLIPPED_FAILED",
"Execute buffer execute clipped failed"},
{D3DERR_TEXTURE_NO_SUPPORT, "D3DERR_TEXTURE_NO_SUPPORT",
"Texture not supported"},
{D3DERR_TEXTURE_CREATE_FAILED, "D3DERR_TEXTURE_CREATE_FAILED",
"Texture create failed"},
{D3DERR_TEXTURE_DESTROY_FAILED, "D3DERR_TEXTURE_DESTROY_FAILED",
"Texture destroy failed"},
{D3DERR_TEXTURE_LOCK_FAILED, "D3DERR_TEXTURE_LOCK_FAILED",
"Texture lock failed"},
{D3DERR_TEXTURE_UNLOCK_FAILED, "D3DERR_TEXTURE_UNLOCK_FAILED",
"Texture unlock failed"},
{D3DERR_TEXTURE_LOAD_FAILED, "D3DERR_TEXTURE_LOAD_FAILED",
"Texture load failed"},
{D3DERR_TEXTURE_SWAP_FAILED, "D3DERR_TEXTURE_SWAP_FAILED",
"Texture swap failed"},
{D3DERR_TEXTURE_LOCKED, "D3DERR_TEXTURE_LOCKED",
"Texture locked"},
{D3DERR_TEXTURE_NOT_LOCKED, "D3DERR_TEXTURE_NOT_LOCKED",
"Texture not locked"},
{D3DERR_TEXTURE_GETSURF_FAILED, "D3DERR_TEXTURE_GETSURF_FAILED",
"Texture get surface failed"},
{D3DERR_MATRIX_CREATE_FAILED, "D3DERR_MATRIX_CREATE_FAILED",
"Matrix create failed"},
{D3DERR_MATRIX_DESTROY_FAILED, "D3DERR_MATRIX_DESTROY_FAILED",
"Matrix destroy failedj"},
{D3DERR_MATRIX_SETDATA_FAILED, "D3DERR_MATRIX_SETDATA_FAILED",
"Matrix set data failed"},
{D3DERR_MATRIX_GETDATA_FAILED, "D3DERR_MATRIX_GETDATA_FAILED",
"Matrix get data failed"},
{D3DERR_SETVIEWPORTDATA_FAILED, "D3DERR_SETVIEWPORTDATA_FAILED",
"Set viewport data failed"},
{D3DERR_MATERIAL_CREATE_FAILED, "D3DERR_MATERIAL_CREATE_FAILED",
"Material create failed"},
{D3DERR_MATERIAL_DESTROY_FAILED, "D3DERR_MATERIAL_DESTROY_FAILED",
"Material destroy failed"},
{D3DERR_MATERIAL_SETDATA_FAILED, "D3DERR_MATERIAL_SETDATA_FAILED",
"Material set data failed"},
{D3DERR_MATERIAL_GETDATA_FAILED, "D3DERR_MATERIAL_GETDATA_FAILED",
"Material get data failed"},
{D3DERR_LIGHT_SET_FAILED, "D3DERR_LIGHT_SET_FAILED",
"Light set failed"},
{D3DERR_SCENE_IN_SCENE, "D3DERR_SCENE_IN_SCENE",
"Scene in scene"},
{D3DERR_SCENE_NOT_IN_SCENE, "D3DERR_SCENE_NOT_IN_SCENE",
"Scene not in scene"},
{D3DERR_SCENE_BEGIN_FAILED, "D3DERR_SCENE_BEGIN_FAILED",
"Scene begin failed"},
{D3DERR_SCENE_END_FAILED, "D3DERR_SCENE_END_FAILED",
"Scene end failed"},
{D3DRMERR_BADOBJECT, "D3DRMERR_BADOBJECT",
"Object expected in argument"},
{D3DRMERR_BADTYPE, "D3DRMERR_BADTYPE",
"Bad argument type passed"},
{D3DRMERR_BADALLOC, "D3DRMERR_ALLOC",
"Out of memory"},
{D3DRMERR_FACEUSED, "D3DRMERR_FACEUSED",
"Face already used in a mesh"},
{D3DRMERR_NOTFOUND, "D3DRMERR_NOTFOUND",
"Object not found in specified place"},
{D3DRMERR_NOTDONEYET, "D3DRMERR_NOTDONEYET",
"Unimplemented"},
{D3DRMERR_FILENOTFOUND, "D3DRMERR_FILENOTFOUND",
"File cannot be opened"},
{D3DRMERR_BADFILE, "D3DRMERR_BADFILE",
"Data file is corrupt or has incorrect format"},
{D3DRMERR_BADDEVICE, "D3DRMERR_BADDEVICE",
"Device is not compatible with renderer"},
{D3DRMERR_BADVALUE, "D3DRMERR_BADVALUE",
"Bad argument value passed"},
{D3DRMERR_BADMAJORVERSION, "D3DRMERR_BADMAJORVERSION",
"Bad DLL major version"},
{D3DRMERR_BADMINORVERSION, "D3DRMERR_BADMINORVERSION",
"Bad DLL minor version"},
{D3DRMERR_UNABLETOEXECUTE, "D3DRMERR_UNABLETOEXECUTE",
"Unable to carry out procedure"},
{ DI_BUFFEROVERFLOW, "DI_BUFFEROVERFLOW", "The device buffer overflowed and some input was lost. This value is equal to the S_FALSE standard COM return value."},
{ DI_DOWNLOADSKIPPED , "DI_DOWNLOADSKIPPED ","The parameters of the effect were successfully updated, but the effect could not be downloaded because the associated device was not acquired in exclusive mode."},
{ DI_EFFECTRESTARTED , "DI_EFFECTRESTARTED ","The effect was stopped, the parameters were updated, and the effect was restarted."},
{ DI_NOEFFECT , "DI_NOEFFECT ","The operation had no effect. This value is equal to the S_FALSE standard COM return value."},
{ DI_NOTATTACHED , "DI_NOTATTACHED ","The device exists but is not currently attached. This value is equal to the S_FALSE standard COM return value."},
{ DI_OK , "DI_OK ","The operation completed successfully. This value is equal to the S_OK standard COM return value."},
{ DI_POLLEDDEVICE , "DI_POLLEDDEVICE ","The device is a polled device. As a result, device buffering will not collect any data and event notifications will not be signaled until the IDirectInputDevice2::Poll method is called."},
{ DI_PROPNOEFFECT , "DI_PROPNOEFFECT ","The change in device properties had no effect. This value is equal to the S_FALSE standard COM return value."},
{ DI_TRUNCATED , "DI_TRUNCATED ","The parameters of the effect were successfully updated, but some of them were beyond the capabilities of the device and were truncated to the nearest supported value."},
{ DI_TRUNCATEDANDRESTARTED , "DI_TRUNCATEDANDRESTARTED ","Equal to DI_EFFECTRESTARTED | DI_TRUNCATED."},
{ DIERR_ACQUIRED , "DIERR_ACQUIRED ","The operation cannot be performed while the device is acquired."},
{ DIERR_ALREADYINITIALIZED , "DIERR_ALREADYINITIALIZED ","This object is already initialized"},
{ DIERR_BADDRIVERVER , "DIERR_BADDRIVERVER ","The object could not be created due to an incompatible driver version or mismatched or incomplete driver components."},
{ DIERR_BETADIRECTINPUTVERSION , "DIERR_BETADIRECTINPUTVERSION ","The application was written for an unsupported prerelease version of DirectInput."},
{ DIERR_DEVICEFULL , "DIERR_DEVICEFULL ","The device is full."},
{ DIERR_DEVICENOTREG , "DIERR_DEVICENOTREG ","The device or device instance is not registered with DirectInput. This value is equal to the REGDB_E_CLASSNOTREG standard COM return value."},
{ DIERR_EFFECTPLAYING , "DIERR_EFFECTPLAYING ","The parameters were updated in memory but were not downloaded to the device because the device does not support updating an effect while it is still playing."},
{ DIERR_HASEFFECTS , "DIERR_HASEFFECTS ","The device cannot be reinitialized because there are still effects attached to it."},
{ DIERR_GENERIC , "DIERR_GENERIC ","An undetermined error occurred inside the DirectInput subsystem. This value is equal to the E_FAIL standard COM return value."},
{ DIERR_HANDLEEXISTS , "DIERR_HANDLEEXISTS ","The device already has an event notification associated with it. This value is equal to the E_ACCESSDENIED standard COM return value."},
{ DIERR_INCOMPLETEEFFECT , "DIERR_INCOMPLETEEFFECT ","The effect could not be downloaded because essential information is missing. For example, no axes have been associated with the effect, or no type-specific information has been supplied."},
{ DIERR_INPUTLOST , "DIERR_INPUTLOST ","Access to the input device has been lost. It must be reacquired."},
{ DIERR_INVALIDPARAM , "DIERR_INVALIDPARAM ","An invalid parameter was passed to the returning function, or the object was not in a state that permitted the function to be called."},
{ DIERR_MOREDATA , "DIERR_MOREDATA ","Not all the requested information fitted into the buffer."},
{ DIERR_NOAGGREGATION , "DIERR_NOAGGREGATION ","This object does not support aggregation."},
{ DIERR_NOINTERFACE , "DIERR_NOINTERFACE ","The specified interface is not supported by the object. This value is equal to the E_NOINTERFACE standard COM return value."},
{ DIERR_NOTACQUIRED , "DIERR_NOTACQUIRED ","The operation cannot be performed unless the device is acquired."},
{ DIERR_NOTBUFFERED , "DIERR_NOTBUFFERED ","The device is not buffered. Set the DIPROP_BUFFERSIZE property to enable buffering."},
{ DIERR_NOTDOWNLOADED , "DIERR_NOTDOWNLOADED ","The effect is not downloaded."},
{ DIERR_NOTEXCLUSIVEACQUIRED , "DIERR_NOTEXCLUSIVEACQUIRED ","The operation cannot be performed unless the device is acquired in DISCL_EXCLUSIVE mode."},
{ DIERR_NOTFOUND , "DIERR_NOTFOUND ","The requested object does not exist."},
{ DIERR_NOTINITIALIZED , "DIERR_NOTINITIALIZED ","This object has not been initialized."},
{ DIERR_OBJECTNOTFOUND , "DIERR_OBJECTNOTFOUND ","The requested object does not exist."},
{ DIERR_OLDDIRECTINPUTVERSION , "DIERR_OLDDIRECTINPUTVERSION ", "he application requires a newer version of DirectInput."},
{ DIERR_OTHERAPPHASPRIO , "DIERR_OTHERAPPHASPRIO ","Another application has a higher priority level, preventing this call from succeeding."},
{ DIERR_OUTOFMEMORY , "DIERR_OUTOFMEMORY ","The DirectInput subsystem couldn't allocate sufficient memory to complete the call. This value is equal to the E_OUTOFMEMORY standard COM return value."},
{ DIERR_READONLY , "DIERR_READONLY ","The specified property cannot be changed. This value is equal to the E_ACCESSDENIED standard COM return value."},
{ DIERR_UNSUPPORTED , "DIERR_UNSUPPORTED ","The function called is not supported at this time. This value is equal to the E_NOTIMPL standard COM return value."},
{ERROR_INVALID_PARAMETER, "ERROR_INVALID_PARAMETER",
"Invalid parameter"},
{ERROR_NOT_ENOUGH_MEMORY, "ERROR_NOT_ENOUGH_MEMORY",
"Insufficient memory available"},
{ERROR_OUTOFMEMORY, "ERROR_OUTOFMEMORY",
"Out of memory"},
{0,0,0}
};
bool g_bDumpDD = false;
bool DDError(HRESULT hresult, const char* pszCall, const char* pszFile, int line, const char* pszModule)
{
if (g_bDumpDD) {
ZDebugOutput(ZString(pszCall) + "\n");
}
if (FAILED(hresult)) {
HRESULTInfo* pinfo = gpinfo;
while (pinfo->hresult != hresult && pinfo->hresult != 0) {
pinfo++;
}
ZDebugOutput(ZString(pszCall) + "\n");
if (pinfo->hresult == 0) {
ZAssertImpl(false, "unknown error code", pszFile, line, pszModule);
} else {
ZAssertImpl(false, pinfo->pszText, pszFile, line, pszModule);
}
return false;
}
return true;
}
bool DDSCallImpl(
HRESULT hr,
const char* pszCall,
const char* pszFile,
int line,
const char* pszModule
) {
if (
hr == DDERR_SURFACELOST
|| hr == DDERR_SURFACEBUSY
|| hr == DDERR_UNSUPPORTED
) {
return false;
}
return DDError(hr, pszCall, pszFile, line, pszModule);
}
#endif