Sets up the best device to use
| 410 | |
| 411 | // Sets up the best device to use |
| 412 | d3d_device *d3d_PollDevices() { |
| 413 | int i; |
| 414 | HRESULT ddrval; |
| 415 | |
| 416 | Num_d2d_devices = 0; |
| 417 | Num_d3d_devices = 0; |
| 418 | |
| 419 | ddrval = DirectDrawEnumerate(d3d_Enumerate2DDevice, NULL); |
| 420 | if (ddrval != DD_OK) { |
| 421 | mprintf(0, "D3D_INIT: DirectDrawEnumerate failed.\n"); |
| 422 | goto D3DError; |
| 423 | } |
| 424 | |
| 425 | // Go through all 2d devices then create their 3d devices to create the total |
| 426 | // number of 3d devices to to choose from |
| 427 | mprintf(0, "Found %d 2d devices...checking for 3d devices.\n", Num_d2d_devices); |
| 428 | |
| 429 | for (i = 0; i < Num_d2d_devices; i++) { |
| 430 | |
| 431 | d3d_device *d2d = (d3d_device *)&D2D_devices[i]; |
| 432 | |
| 433 | // Create direct draw surface |
| 434 | ddrval = DirectDrawCreate(d2d->pguid_2d, &lpDD1, NULL); |
| 435 | if (ddrval != DD_OK) { |
| 436 | mprintf(0, "D3D_INIT: DirectDrawCreate failed.\n"); |
| 437 | goto D3DError; |
| 438 | } |
| 439 | |
| 440 | ddrval = lpDD1->QueryInterface(IID_IDirect3D3, (LPVOID *)&lpD3D); |
| 441 | if (ddrval != DD_OK) { |
| 442 | lpD3D = NULL; |
| 443 | mprintf(0, "D3D_INIT: QueryInterface failed.\n"); |
| 444 | goto D3DError; |
| 445 | } |
| 446 | |
| 447 | // Enumerate this 3d device |
| 448 | ddrval = lpD3D->EnumDevices(d3d_Enumerate3DDevice, d2d); |
| 449 | if (ddrval != DD_OK) { |
| 450 | mprintf(0, "WIN_DD32: D3D enum devices failed. (0x%x)\n", ddrval); |
| 451 | } |
| 452 | |
| 453 | lpD3D->Release(); |
| 454 | lpD3D = NULL; |
| 455 | |
| 456 | lpDD1->Release(); |
| 457 | lpDD1 = NULL; |
| 458 | } |
| 459 | |
| 460 | for (i = 0; i < Num_d3d_devices; i++) { |
| 461 | mprintf(0, "D3D Device %d: %s\n", i, D3D_devices[i].name); |
| 462 | } |
| 463 | |
| 464 | if (Num_d3d_devices <= 0) { |
| 465 | mprintf(0, "No D3D device found!\n"); |
| 466 | return NULL; |
| 467 | } |
| 468 | |
| 469 | if (Num_d3d_devices > 0) { |