|
|
1.1 root 1: /* 1.1.1.2 ! root 2: Copyright (C) 1997-2001 Id Software, Inc. ! 3: ! 4: This program is free software; you can redistribute it and/or ! 5: modify it under the terms of the GNU General Public License ! 6: as published by the Free Software Foundation; either version 2 ! 7: of the License, or (at your option) any later version. ! 8: ! 9: This program is distributed in the hope that it will be useful, ! 10: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! 12: ! 13: See the GNU General Public License for more details. ! 14: ! 15: You should have received a copy of the GNU General Public License ! 16: along with this program; if not, write to the Free Software ! 17: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ! 18: ! 19: */ ! 20: /* 1.1 root 21: ** RW_DDRAW.C 22: ** 23: ** This handles DirecTDraw management under Windows. 24: */ 25: #ifndef _WIN32 26: # error You should not be compiling this file on this platform 27: #endif 28: 29: #include <float.h> 30: 31: #include "..\ref_soft\r_local.h" 32: #define INITGUID 33: #include "rw_win.h" 34: 35: static const char *DDrawError( int code ); 36: 37: /* 38: ** DDRAW_Init 39: ** 40: ** Builds our DDRAW stuff 41: */ 42: qboolean DDRAW_Init( unsigned char **ppbuffer, int *ppitch ) 43: { 44: HRESULT ddrval; 45: DDSURFACEDESC ddsd; 46: DDSCAPS ddscaps; 47: PALETTEENTRY palentries[256]; 48: int i; 49: extern cvar_t *sw_allow_modex; 50: 51: HRESULT (WINAPI *QDirectDrawCreate)( GUID FAR *lpGUID, LPDIRECTDRAW FAR * lplpDDRAW, IUnknown FAR * pUnkOuter ); 52: 53: ri.Con_Printf( PRINT_ALL, "Initializing DirectDraw\n"); 54: 55: 56: for ( i = 0; i < 256; i++ ) 57: { 58: palentries[i].peRed = ( d_8to24table[i] >> 0 ) & 0xff; 59: palentries[i].peGreen = ( d_8to24table[i] >> 8 ) & 0xff; 60: palentries[i].peBlue = ( d_8to24table[i] >> 16 ) & 0xff; 61: } 62: 63: /* 64: ** load DLL and fetch pointer to entry point 65: */ 66: if ( !sww_state.hinstDDRAW ) 67: { 68: ri.Con_Printf( PRINT_ALL, "...loading DDRAW.DLL: "); 69: if ( ( sww_state.hinstDDRAW = LoadLibrary( "ddraw.dll" ) ) == NULL ) 70: { 71: ri.Con_Printf( PRINT_ALL, "failed\n" ); 72: goto fail; 73: } 74: ri.Con_Printf( PRINT_ALL, "ok\n" ); 75: } 76: 77: if ( ( QDirectDrawCreate = ( HRESULT (WINAPI *)( GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR * ) ) GetProcAddress( sww_state.hinstDDRAW, "DirectDrawCreate" ) ) == NULL ) 78: { 79: ri.Con_Printf( PRINT_ALL, "*** DirectDrawCreate == NULL ***\n" ); 80: goto fail; 81: } 82: 83: /* 84: ** create the direct draw object 85: */ 86: ri.Con_Printf( PRINT_ALL, "...creating DirectDraw object: "); 87: if ( ( ddrval = QDirectDrawCreate( NULL, &sww_state.lpDirectDraw, NULL ) ) != DD_OK ) 88: { 89: ri.Con_Printf( PRINT_ALL, "failed - %s\n", DDrawError( ddrval ) ); 90: goto fail; 91: } 92: ri.Con_Printf( PRINT_ALL, "ok\n" ); 93: 94: /* 95: ** see if linear modes exist first 96: */ 97: sww_state.modex = false; 98: 99: ri.Con_Printf( PRINT_ALL, "...setting exclusive mode: "); 100: if ( ( ddrval = sww_state.lpDirectDraw->lpVtbl->SetCooperativeLevel( sww_state.lpDirectDraw, 101: sww_state.hWnd, 102: DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN ) ) != DD_OK ) 103: { 104: ri.Con_Printf( PRINT_ALL, "failed - %s\n",DDrawError (ddrval) ); 105: goto fail; 106: } 107: ri.Con_Printf( PRINT_ALL, "ok\n" ); 108: 109: /* 110: ** try changing the display mode normally 111: */ 112: ri.Con_Printf( PRINT_ALL, "...finding display mode\n" ); 113: ri.Con_Printf( PRINT_ALL, "...setting linear mode: " ); 114: if ( ( ddrval = sww_state.lpDirectDraw->lpVtbl->SetDisplayMode( sww_state.lpDirectDraw, vid.width, vid.height, 8 ) ) == DD_OK ) 115: { 116: ri.Con_Printf( PRINT_ALL, "ok\n" ); 117: } 118: /* 119: ** if no linear mode found, go for modex if we're trying 320x240 120: */ 121: else if ( ( sw_mode->value == 0 ) && sw_allow_modex->value ) 122: { 123: ri.Con_Printf( PRINT_ALL, "failed\n" ); 124: ri.Con_Printf( PRINT_ALL, "...attempting ModeX 320x240: "); 125: 126: /* 127: ** reset to normal cooperative level 128: */ 129: sww_state.lpDirectDraw->lpVtbl->SetCooperativeLevel( sww_state.lpDirectDraw, 130: sww_state.hWnd, 131: DDSCL_NORMAL ); 132: 133: /* 134: ** set exclusive mode 135: */ 136: if ( ( ddrval = sww_state.lpDirectDraw->lpVtbl->SetCooperativeLevel( sww_state.lpDirectDraw, 137: sww_state.hWnd, 138: DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_NOWINDOWCHANGES | DDSCL_ALLOWMODEX ) ) != DD_OK ) 139: { 140: ri.Con_Printf( PRINT_ALL, "failed SCL - %s\n",DDrawError (ddrval) ); 141: goto fail; 142: } 143: 144: /* 145: ** change our display mode 146: */ 147: if ( ( ddrval = sww_state.lpDirectDraw->lpVtbl->SetDisplayMode( sww_state.lpDirectDraw, vid.width, vid.height, 8 ) ) != DD_OK ) 148: { 149: ri.Con_Printf( PRINT_ALL, "failed SDM - %s\n", DDrawError( ddrval ) ); 150: goto fail; 151: } 152: ri.Con_Printf( PRINT_ALL, "ok\n" ); 153: 154: sww_state.modex = true; 155: } 156: else 157: { 158: ri.Con_Printf( PRINT_ALL, "failed\n" ); 159: goto fail; 160: } 161: 162: /* 163: ** create our front buffer 164: */ 165: memset( &ddsd, 0, sizeof( ddsd ) ); 166: ddsd.dwSize = sizeof( ddsd ); 167: ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; 168: ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX; 169: ddsd.dwBackBufferCount = 1; 170: 171: ri.Con_Printf( PRINT_ALL, "...creating front buffer: "); 172: if ( ( ddrval = sww_state.lpDirectDraw->lpVtbl->CreateSurface( sww_state.lpDirectDraw, &ddsd, &sww_state.lpddsFrontBuffer, NULL ) ) != DD_OK ) 173: { 174: ri.Con_Printf( PRINT_ALL, "failed - %s\n", DDrawError( ddrval ) ); 175: goto fail; 176: } 177: ri.Con_Printf( PRINT_ALL, "ok\n" ); 178: 179: /* 180: ** see if we're a ModeX mode 181: */ 182: sww_state.lpddsFrontBuffer->lpVtbl->GetCaps( sww_state.lpddsFrontBuffer, &ddscaps ); 183: if ( ddscaps.dwCaps & DDSCAPS_MODEX ) 184: ri.Con_Printf( PRINT_ALL, "...using ModeX\n" ); 185: 186: /* 187: ** create our back buffer 188: */ 189: ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; 190: 191: ri.Con_Printf( PRINT_ALL, "...creating back buffer: " ); 192: if ( ( ddrval = sww_state.lpddsFrontBuffer->lpVtbl->GetAttachedSurface( sww_state.lpddsFrontBuffer, &ddsd.ddsCaps, &sww_state.lpddsBackBuffer ) ) != DD_OK ) 193: { 194: ri.Con_Printf( PRINT_ALL, "failed - %s\n", DDrawError( ddrval ) ); 195: goto fail; 196: } 197: ri.Con_Printf( PRINT_ALL, "ok\n" ); 198: 199: /* 200: ** create our rendering buffer 201: */ 202: memset( &ddsd, 0, sizeof( ddsd ) ); 203: ddsd.dwSize = sizeof( ddsd ); 204: ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS; 205: ddsd.dwHeight = vid.height; 206: ddsd.dwWidth = vid.width; 207: ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; 208: 209: ri.Con_Printf( PRINT_ALL, "...creating offscreen buffer: " ); 210: if ( ( ddrval = sww_state.lpDirectDraw->lpVtbl->CreateSurface( sww_state.lpDirectDraw, &ddsd, &sww_state.lpddsOffScreenBuffer, NULL ) ) != DD_OK ) 211: { 212: ri.Con_Printf( PRINT_ALL, "failed - %s\n", DDrawError( ddrval ) ); 213: goto fail; 214: } 215: ri.Con_Printf( PRINT_ALL, "ok\n" ); 216: 217: /* 218: ** create our DIRECTDRAWPALETTE 219: */ 220: ri.Con_Printf( PRINT_ALL, "...creating palette: " ); 221: if ( ( ddrval = sww_state.lpDirectDraw->lpVtbl->CreatePalette( sww_state.lpDirectDraw, 222: DDPCAPS_8BIT | DDPCAPS_ALLOW256, 223: palentries, 224: &sww_state.lpddpPalette, 225: NULL ) ) != DD_OK ) 226: { 227: ri.Con_Printf( PRINT_ALL, "failed - %s\n", DDrawError( ddrval ) ); 228: goto fail; 229: } 230: ri.Con_Printf( PRINT_ALL, "ok\n" ); 231: 232: ri.Con_Printf( PRINT_ALL, "...setting palette: " ); 233: if ( ( ddrval = sww_state.lpddsFrontBuffer->lpVtbl->SetPalette( sww_state.lpddsFrontBuffer, 234: sww_state.lpddpPalette ) ) != DD_OK ) 235: { 236: ri.Con_Printf( PRINT_ALL, "failed - %s\n", DDrawError( ddrval ) ); 237: goto fail; 238: } 239: ri.Con_Printf( PRINT_ALL, "ok\n" ); 240: 241: DDRAW_SetPalette( ( const unsigned char * ) sw_state.currentpalette ); 242: 243: /* 244: ** lock the back buffer 245: */ 246: memset( &ddsd, 0, sizeof( ddsd ) ); 247: ddsd.dwSize = sizeof( ddsd ); 248: 249: ri.Con_Printf( PRINT_ALL, "...locking backbuffer: " ); 250: if ( ( ddrval = sww_state.lpddsOffScreenBuffer->lpVtbl->Lock( sww_state.lpddsOffScreenBuffer, NULL, &ddsd, DDLOCK_WAIT, NULL ) ) != DD_OK ) 251: { 252: ri.Con_Printf( PRINT_ALL, "failed - %s\n", DDrawError( ddrval ) ); 253: goto fail; 254: } 255: ri.Con_Printf( PRINT_ALL, "ok\n" ); 256: 257: *ppbuffer = ddsd.lpSurface; 258: *ppitch = ddsd.lPitch; 259: 260: for ( i = 0; i < vid.height; i++ ) 261: { 262: memset( *ppbuffer + i * *ppitch, 0, *ppitch ); 263: } 264: 265: sww_state.palettized = true; 266: 267: return true; 268: fail: 269: ri.Con_Printf( PRINT_ALL, "*** DDraw init failure ***\n" ); 270: 271: DDRAW_Shutdown(); 272: return false; 273: } 274: 275: /* 276: ** DDRAW_SetPalette 277: ** 278: ** Sets the color table in our DIB section, and also sets the system palette 279: ** into an identity mode if we're running in an 8-bit palettized display mode. 280: ** 281: ** The palette is expected to be 1024 bytes, in the format: 282: ** 283: ** R = offset 0 284: ** G = offset 1 285: ** B = offset 2 286: ** A = offset 3 287: */ 288: void DDRAW_SetPalette( const unsigned char *pal ) 289: { 290: PALETTEENTRY palentries[256]; 291: int i; 292: 293: if (!sww_state.lpddpPalette) 294: return; 295: 296: for ( i = 0; i < 256; i++, pal += 4 ) 297: { 298: palentries[i].peRed = pal[0]; 299: palentries[i].peGreen = pal[1]; 300: palentries[i].peBlue = pal[2]; 301: palentries[i].peFlags = PC_RESERVED | PC_NOCOLLAPSE; 302: } 303: 304: if ( sww_state.lpddpPalette->lpVtbl->SetEntries( sww_state.lpddpPalette, 305: 0, 306: 0, 307: 256, 308: palentries ) != DD_OK ) 309: { 310: ri.Con_Printf( PRINT_ALL, "DDRAW_SetPalette() - SetEntries failed\n" ); 311: } 312: } 313: 314: /* 315: ** DDRAW_Shutdown 316: */ 317: void DDRAW_Shutdown( void ) 318: { 319: if ( sww_state.lpddsOffScreenBuffer ) 320: { 321: ri.Con_Printf( PRINT_ALL, "...releasing offscreen buffer\n"); 322: sww_state.lpddsOffScreenBuffer->lpVtbl->Unlock( sww_state.lpddsOffScreenBuffer, vid.buffer ); 323: sww_state.lpddsOffScreenBuffer->lpVtbl->Release( sww_state.lpddsOffScreenBuffer ); 324: sww_state.lpddsOffScreenBuffer = NULL; 325: } 326: 327: if ( sww_state.lpddsBackBuffer ) 328: { 329: ri.Con_Printf( PRINT_ALL, "...releasing back buffer\n"); 330: sww_state.lpddsBackBuffer->lpVtbl->Release( sww_state.lpddsBackBuffer ); 331: sww_state.lpddsBackBuffer = NULL; 332: } 333: 334: if ( sww_state.lpddsFrontBuffer ) 335: { 336: ri.Con_Printf( PRINT_ALL, "...releasing front buffer\n"); 337: sww_state.lpddsFrontBuffer->lpVtbl->Release( sww_state.lpddsFrontBuffer ); 338: sww_state.lpddsFrontBuffer = NULL; 339: } 340: 341: if (sww_state.lpddpPalette) 342: { 343: ri.Con_Printf( PRINT_ALL, "...releasing palette\n"); 344: sww_state.lpddpPalette->lpVtbl->Release ( sww_state.lpddpPalette ); 345: sww_state.lpddpPalette = NULL; 346: } 347: 348: if ( sww_state.lpDirectDraw ) 349: { 350: ri.Con_Printf( PRINT_ALL, "...restoring display mode\n"); 351: sww_state.lpDirectDraw->lpVtbl->RestoreDisplayMode( sww_state.lpDirectDraw ); 352: ri.Con_Printf( PRINT_ALL, "...restoring normal coop mode\n"); 353: sww_state.lpDirectDraw->lpVtbl->SetCooperativeLevel( sww_state.lpDirectDraw, sww_state.hWnd, DDSCL_NORMAL ); 354: ri.Con_Printf( PRINT_ALL, "...releasing lpDirectDraw\n"); 355: sww_state.lpDirectDraw->lpVtbl->Release( sww_state.lpDirectDraw ); 356: sww_state.lpDirectDraw = NULL; 357: } 358: 359: if ( sww_state.hinstDDRAW ) 360: { 361: ri.Con_Printf( PRINT_ALL, "...freeing library\n"); 362: FreeLibrary( sww_state.hinstDDRAW ); 363: sww_state.hinstDDRAW = NULL; 364: } 365: } 366: 367: static const char *DDrawError (int code) 368: { 369: switch(code) { 370: case DD_OK: 371: return "DD_OK"; 372: case DDERR_ALREADYINITIALIZED: 373: return "DDERR_ALREADYINITIALIZED"; 374: case DDERR_BLTFASTCANTCLIP: 375: return "DDERR_BLTFASTCANTCLIP"; 376: case DDERR_CANNOTATTACHSURFACE: 377: return "DDER_CANNOTATTACHSURFACE"; 378: case DDERR_CANNOTDETACHSURFACE: 379: return "DDERR_CANNOTDETACHSURFACE"; 380: case DDERR_CANTCREATEDC: 381: return "DDERR_CANTCREATEDC"; 382: case DDERR_CANTDUPLICATE: 383: return "DDER_CANTDUPLICATE"; 384: case DDERR_CLIPPERISUSINGHWND: 385: return "DDER_CLIPPERUSINGHWND"; 386: case DDERR_COLORKEYNOTSET: 387: return "DDERR_COLORKEYNOTSET"; 388: case DDERR_CURRENTLYNOTAVAIL: 389: return "DDERR_CURRENTLYNOTAVAIL"; 390: case DDERR_DIRECTDRAWALREADYCREATED: 391: return "DDERR_DIRECTDRAWALREADYCREATED"; 392: case DDERR_EXCEPTION: 393: return "DDERR_EXCEPTION"; 394: case DDERR_EXCLUSIVEMODEALREADYSET: 395: return "DDERR_EXCLUSIVEMODEALREADYSET"; 396: case DDERR_GENERIC: 397: return "DDERR_GENERIC"; 398: case DDERR_HEIGHTALIGN: 399: return "DDERR_HEIGHTALIGN"; 400: case DDERR_HWNDALREADYSET: 401: return "DDERR_HWNDALREADYSET"; 402: case DDERR_HWNDSUBCLASSED: 403: return "DDERR_HWNDSUBCLASSED"; 404: case DDERR_IMPLICITLYCREATED: 405: return "DDERR_IMPLICITLYCREATED"; 406: case DDERR_INCOMPATIBLEPRIMARY: 407: return "DDERR_INCOMPATIBLEPRIMARY"; 408: case DDERR_INVALIDCAPS: 409: return "DDERR_INVALIDCAPS"; 410: case DDERR_INVALIDCLIPLIST: 411: return "DDERR_INVALIDCLIPLIST"; 412: case DDERR_INVALIDDIRECTDRAWGUID: 413: return "DDERR_INVALIDDIRECTDRAWGUID"; 414: case DDERR_INVALIDMODE: 415: return "DDERR_INVALIDMODE"; 416: case DDERR_INVALIDOBJECT: 417: return "DDERR_INVALIDOBJECT"; 418: case DDERR_INVALIDPARAMS: 419: return "DDERR_INVALIDPARAMS"; 420: case DDERR_INVALIDPIXELFORMAT: 421: return "DDERR_INVALIDPIXELFORMAT"; 422: case DDERR_INVALIDPOSITION: 423: return "DDERR_INVALIDPOSITION"; 424: case DDERR_INVALIDRECT: 425: return "DDERR_INVALIDRECT"; 426: case DDERR_LOCKEDSURFACES: 427: return "DDERR_LOCKEDSURFACES"; 428: case DDERR_NO3D: 429: return "DDERR_NO3D"; 430: case DDERR_NOALPHAHW: 431: return "DDERR_NOALPHAHW"; 432: case DDERR_NOBLTHW: 433: return "DDERR_NOBLTHW"; 434: case DDERR_NOCLIPLIST: 435: return "DDERR_NOCLIPLIST"; 436: case DDERR_NOCLIPPERATTACHED: 437: return "DDERR_NOCLIPPERATTACHED"; 438: case DDERR_NOCOLORCONVHW: 439: return "DDERR_NOCOLORCONVHW"; 440: case DDERR_NOCOLORKEY: 441: return "DDERR_NOCOLORKEY"; 442: case DDERR_NOCOLORKEYHW: 443: return "DDERR_NOCOLORKEYHW"; 444: case DDERR_NOCOOPERATIVELEVELSET: 445: return "DDERR_NOCOOPERATIVELEVELSET"; 446: case DDERR_NODC: 447: return "DDERR_NODC"; 448: case DDERR_NODDROPSHW: 449: return "DDERR_NODDROPSHW"; 450: case DDERR_NODIRECTDRAWHW: 451: return "DDERR_NODIRECTDRAWHW"; 452: case DDERR_NOEMULATION: 453: return "DDERR_NOEMULATION"; 454: case DDERR_NOEXCLUSIVEMODE: 455: return "DDERR_NOEXCLUSIVEMODE"; 456: case DDERR_NOFLIPHW: 457: return "DDERR_NOFLIPHW"; 458: case DDERR_NOGDI: 459: return "DDERR_NOGDI"; 460: case DDERR_NOHWND: 461: return "DDERR_NOHWND"; 462: case DDERR_NOMIRRORHW: 463: return "DDERR_NOMIRRORHW"; 464: case DDERR_NOOVERLAYDEST: 465: return "DDERR_NOOVERLAYDEST"; 466: case DDERR_NOOVERLAYHW: 467: return "DDERR_NOOVERLAYHW"; 468: case DDERR_NOPALETTEATTACHED: 469: return "DDERR_NOPALETTEATTACHED"; 470: case DDERR_NOPALETTEHW: 471: return "DDERR_NOPALETTEHW"; 472: case DDERR_NORASTEROPHW: 473: return "Operation could not be carried out because there is no appropriate raster op hardware present or available.\0"; 474: case DDERR_NOROTATIONHW: 475: return "Operation could not be carried out because there is no rotation hardware present or available.\0"; 476: case DDERR_NOSTRETCHHW: 477: return "Operation could not be carried out because there is no hardware support for stretching.\0"; 478: case DDERR_NOT4BITCOLOR: 479: return "DirectDrawSurface is not in 4 bit color palette and the requested operation requires 4 bit color palette.\0"; 480: case DDERR_NOT4BITCOLORINDEX: 481: return "DirectDrawSurface is not in 4 bit color index palette and the requested operation requires 4 bit color index palette.\0"; 482: case DDERR_NOT8BITCOLOR: 483: return "DDERR_NOT8BITCOLOR"; 484: case DDERR_NOTAOVERLAYSURFACE: 485: return "Returned when an overlay member is called for a non-overlay surface.\0"; 486: case DDERR_NOTEXTUREHW: 487: return "Operation could not be carried out because there is no texture mapping hardware present or available.\0"; 488: case DDERR_NOTFLIPPABLE: 489: return "DDERR_NOTFLIPPABLE"; 490: case DDERR_NOTFOUND: 491: return "DDERR_NOTFOUND"; 492: case DDERR_NOTLOCKED: 493: return "DDERR_NOTLOCKED"; 494: case DDERR_NOTPALETTIZED: 495: return "DDERR_NOTPALETTIZED"; 496: case DDERR_NOVSYNCHW: 497: return "DDERR_NOVSYNCHW"; 498: case DDERR_NOZBUFFERHW: 499: return "Operation could not be carried out because there is no hardware support for zbuffer blitting.\0"; 500: case DDERR_NOZOVERLAYHW: 501: return "Overlay surfaces could not be z layered based on their BltOrder because the hardware does not support z layering of overlays.\0"; 502: case DDERR_OUTOFCAPS: 503: return "The hardware needed for the requested operation has already been allocated.\0"; 504: case DDERR_OUTOFMEMORY: 505: return "DDERR_OUTOFMEMORY"; 506: case DDERR_OUTOFVIDEOMEMORY: 507: return "DDERR_OUTOFVIDEOMEMORY"; 508: case DDERR_OVERLAYCANTCLIP: 509: return "The hardware does not support clipped overlays.\0"; 510: case DDERR_OVERLAYCOLORKEYONLYONEACTIVE: 511: return "Can only have ony color key active at one time for overlays.\0"; 512: case DDERR_OVERLAYNOTVISIBLE: 513: return "Returned when GetOverlayPosition is called on a hidden overlay.\0"; 514: case DDERR_PALETTEBUSY: 515: return "DDERR_PALETTEBUSY"; 516: case DDERR_PRIMARYSURFACEALREADYEXISTS: 517: return "DDERR_PRIMARYSURFACEALREADYEXISTS"; 518: case DDERR_REGIONTOOSMALL: 519: return "Region passed to Clipper::GetClipList is too small.\0"; 520: case DDERR_SURFACEALREADYATTACHED: 521: return "DDERR_SURFACEALREADYATTACHED"; 522: case DDERR_SURFACEALREADYDEPENDENT: 523: return "DDERR_SURFACEALREADYDEPENDENT"; 524: case DDERR_SURFACEBUSY: 525: return "DDERR_SURFACEBUSY"; 526: case DDERR_SURFACEISOBSCURED: 527: return "Access to surface refused because the surface is obscured.\0"; 528: case DDERR_SURFACELOST: 529: return "DDERR_SURFACELOST"; 530: case DDERR_SURFACENOTATTACHED: 531: return "DDERR_SURFACENOTATTACHED"; 532: case DDERR_TOOBIGHEIGHT: 533: return "Height requested by DirectDraw is too large.\0"; 534: case DDERR_TOOBIGSIZE: 535: return "Size requested by DirectDraw is too large, but the individual height and width are OK.\0"; 536: case DDERR_TOOBIGWIDTH: 537: return "Width requested by DirectDraw is too large.\0"; 538: case DDERR_UNSUPPORTED: 539: return "DDERR_UNSUPPORTED"; 540: case DDERR_UNSUPPORTEDFORMAT: 541: return "FOURCC format requested is unsupported by DirectDraw.\0"; 542: case DDERR_UNSUPPORTEDMASK: 543: return "Bitmask in the pixel format requested is unsupported by DirectDraw.\0"; 544: case DDERR_VERTICALBLANKINPROGRESS: 545: return "Vertical blank is in progress.\0"; 546: case DDERR_WASSTILLDRAWING: 547: return "DDERR_WASSTILLDRAWING"; 548: case DDERR_WRONGMODE: 549: return "This surface can not be restored because it was created in a different mode.\0"; 550: case DDERR_XALIGN: 551: return "Rectangle provided was not horizontally aligned on required boundary.\0"; 552: default: 553: return "UNKNOWN\0"; 554: } 555: } 556:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.