MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / d3d_PollDevices

Function d3d_PollDevices

legacy/renderer/Direct3D.cpp:412–507  ·  view source on GitHub ↗

Sets up the best device to use

Source from the content-addressed store, hash-verified

410
411// Sets up the best device to use
412d3d_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) {

Callers 1

d3d_InitFunction · 0.85

Calls 2

FindArgFunction · 0.50
readMethod · 0.45

Tested by

no test coverage detected