Index: dxgltest/Tests3D.cpp |
— | — | @@ -20,3 +20,8 @@ |
21 | 21 | #include "surfacegen.h"
|
22 | 22 | #include "timer.h"
|
23 | 23 | #include "misc.h"
|
| 24 | +
|
| 25 | +
|
| 26 | +void RunTest3D(int testnum, int width, int height, int bpp, int refresh, int backbuffers, int apiver,
|
| 27 | + int filter, int msaa, double fps, bool fullscreen, bool resizable)
|
| 28 | +{} |
\ No newline at end of file |
Index: dxgltest/dxgltest.cpp |
— | — | @@ -203,6 +203,7 @@ |
204 | 204 | };
|
205 | 205 | const int END_2D = __LINE__ - 4;
|
206 | 206 | const int numtests2d = END_2D - START_2D;
|
| 207 | +
|
207 | 208 | int currenttest2d = 0;
|
208 | 209 | int minapi2d = 1;
|
209 | 210 | int maxapi2d = 7;
|
— | — | @@ -215,6 +216,32 @@ |
216 | 217 | bool resizable2d = false;
|
217 | 218 | double framerate2d = 1.00;
|
218 | 219 | TCHAR framerate2dstring[33];
|
| 220 | +
|
| 221 | +// Use EXACTLY one line per entry. Don't change layout of the list.
|
| 222 | +const int START_3D = __LINE__;
|
| 223 | +const TEST_ITEM Tests3D[] =
|
| 224 | +{ // minver maxver buffermin max usesfps defaultfps usestexture usesfsaa name
|
| 225 | + {7, 7, 0, 2, true, 60.0, false, true, _T("Basic polygons (DX7)")}
|
| 226 | +};
|
| 227 | +const int END_3D = __LINE__ - 4;
|
| 228 | +const int numtests3d = END_3D - START_3D;
|
| 229 | +
|
| 230 | +int currenttest3d = 0;
|
| 231 | +int minapi3d = 7;
|
| 232 | +int maxapi3d = 7;
|
| 233 | +int minbuffer3d = 0;
|
| 234 | +int maxbuffer3d = 2;
|
| 235 | +int fps_enabled3d = true;
|
| 236 | +int api3d = 7;
|
| 237 | +int buffer3d = 1;
|
| 238 | +int filter3d = 0;
|
| 239 | +int msaa3d = 0;
|
| 240 | +bool fullscreen3d = true;
|
| 241 | +bool resizable3d = true;
|
| 242 | +double framerate3d = 60.00;
|
| 243 | +TCHAR framerate3dstring[33];
|
| 244 | +
|
| 245 | +
|
219 | 246 | TCHAR tmpstring[33];
|
220 | 247 | INT_PTR CALLBACK Test2DCallback(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
221 | 248 | {
|
— | — | @@ -425,6 +452,212 @@ |
426 | 453 | return TRUE;
|
427 | 454 | }
|
428 | 455 |
|
| 456 | +INT_PTR CALLBACK Test3DCallback(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
| 457 | +{
|
| 458 | + int i;
|
| 459 | + int pos;
|
| 460 | + double f;
|
| 461 | + LPDIRECTDRAW lpdd;
|
| 462 | + HRESULT error;
|
| 463 | + int width,height,bpp,refresh;
|
| 464 | + switch(Msg)
|
| 465 | + {
|
| 466 | + case WM_INITDIALOG:
|
| 467 | + SendDlgItemMessage(hWnd,IDC_FULLSCREEN,BM_SETCHECK,1,0);
|
| 468 | + SetDlgItemText(hWnd,IDC_TESTHEADER,_T("Test 3D graphics functionality in DXGL or Direct3D. Press ESC to quit any test."));
|
| 469 | + for(i = 0; i < numtests3d; i++)
|
| 470 | + SendDlgItemMessage(hWnd,IDC_TESTLIST,LB_ADDSTRING,0,(LPARAM)Tests3D[i].name);
|
| 471 | + error = DirectDrawCreate(NULL,&lpdd,NULL);
|
| 472 | + if(error == DD_OK)
|
| 473 | + {
|
| 474 | + error = lpdd->EnumDisplayModes(DDEDM_REFRESHRATES,NULL,GetDlgItem(hWnd,IDC_VIDMODES),EnumModesCallback);
|
| 475 | + lpdd->Release();
|
| 476 | + }
|
| 477 | + SendDlgItemMessage(hWnd,IDC_VIDMODES,LB_SETCURSEL,modenum,0);
|
| 478 | + break;
|
| 479 | + case WM_COMMAND:
|
| 480 | + switch(LOWORD(wParam))
|
| 481 | + {
|
| 482 | + case IDC_TESTLIST:
|
| 483 | + if(HIWORD(wParam) == LBN_SELCHANGE)
|
| 484 | + {
|
| 485 | + i = SendDlgItemMessage(hWnd,IDC_TESTLIST,LB_GETCURSEL,0,0);
|
| 486 | + if(i != -1)
|
| 487 | + {
|
| 488 | + currenttest3d = i;
|
| 489 | + minapi3d = Tests3D[i].minver;
|
| 490 | + maxapi3d = Tests3D[i].maxver;
|
| 491 | + minbuffer3d = Tests3D[i].buffermin;
|
| 492 | + maxbuffer3d = Tests3D[i].buffermax;
|
| 493 | + fps_enabled3d = Tests3D[i].usesfps;
|
| 494 | + if(Tests3D[i].usesfps) framerate3d = Tests3D[i].defaultfps;
|
| 495 | + EnableWindow(GetDlgItem(hWnd,IDC_BUFFERS),TRUE);
|
| 496 | + EnableWindow(GetDlgItem(hWnd,IDC_APIVER),TRUE);
|
| 497 | + EnableWindow(GetDlgItem(hWnd,IDC_FRAMERATE),fps_enabled3d);
|
| 498 | + EnableWindow(GetDlgItem(hWnd,IDC_TEST),TRUE);
|
| 499 | + SendDlgItemMessage(hWnd,IDC_BUFFERS,EM_SETLIMITTEXT,2,0);
|
| 500 | + SendDlgItemMessage(hWnd,IDC_APIVER,EM_SETLIMITTEXT,1,0);
|
| 501 | + SendDlgItemMessage(hWnd,IDC_FRAMERATE,EM_SETLIMITTEXT,5,0);
|
| 502 | + SendDlgItemMessage(hWnd,IDC_BUFFERS,WM_SETTEXT,0,(LPARAM)_itot(buffer3d,tmpstring,10));
|
| 503 | + SendDlgItemMessage(hWnd,IDC_APIVER,WM_SETTEXT,0,(LPARAM)_itot(api3d,tmpstring,10));
|
| 504 | + _stprintf(framerate3dstring,_T("%.2f"),framerate3d);
|
| 505 | + SendDlgItemMessage(hWnd,IDC_FRAMERATE,WM_SETTEXT,0,(LPARAM)framerate3dstring);
|
| 506 | + }
|
| 507 | + }
|
| 508 | + break;
|
| 509 | + case IDC_FRAMERATE:
|
| 510 | + if(HIWORD(wParam) == EN_CHANGE)
|
| 511 | + {
|
| 512 | + SendDlgItemMessage(hWnd,IDC_FRAMERATE,WM_GETTEXT,6,(LPARAM)tmpstring);
|
| 513 | + if(_tcscmp(framerate3dstring,tmpstring))
|
| 514 | + {
|
| 515 | + pos = LOWORD(SendDlgItemMessage(hWnd,IDC_FRAMERATE,EM_GETSEL,NULL,NULL));
|
| 516 | + i = _tcslen(tmpstring);
|
| 517 | + f = _ttof(tmpstring);
|
| 518 | + if(errno != ERANGE) framerate3d = f;
|
| 519 | + if(framerate3d < 0.5) framerate3d = 0.5;
|
| 520 | + if(framerate3d > 99.99) framerate3d = 99.99;
|
| 521 | + _stprintf(framerate3dstring,_T("%.2f"),framerate3d);
|
| 522 | + SendDlgItemMessage(hWnd,IDC_FRAMERATE,WM_SETTEXT,0,(LPARAM)framerate3dstring);
|
| 523 | + SendDlgItemMessage(hWnd,IDC_FRAMERATE,EM_SETSEL,pos,pos);
|
| 524 | + }
|
| 525 | + }
|
| 526 | + break;
|
| 527 | + case IDC_APIVER:
|
| 528 | + if(HIWORD(wParam) == EN_CHANGE)
|
| 529 | + {
|
| 530 | + SendDlgItemMessage(hWnd,IDC_APIVER,WM_GETTEXT,6,(LPARAM)tmpstring);
|
| 531 | + i = _ttoi(tmpstring);
|
| 532 | + if(i != api3d)
|
| 533 | + {
|
| 534 | + api3d = i;
|
| 535 | + if(api3d == 5) api3d = 4;
|
| 536 | + if(api3d == 6) api3d = 7;
|
| 537 | + if(api3d < minapi3d) api3d = minapi3d;
|
| 538 | + if(api3d > maxapi3d) api3d = maxapi3d;
|
| 539 | + _itot(api3d,tmpstring,10);
|
| 540 | + SendDlgItemMessage(hWnd,IDC_APIVER,WM_SETTEXT,0,(LPARAM)tmpstring);
|
| 541 | + }
|
| 542 | + }
|
| 543 | + break;
|
| 544 | + case IDC_BUFFERS:
|
| 545 | + if(HIWORD(wParam) == EN_CHANGE)
|
| 546 | + {
|
| 547 | + SendDlgItemMessage(hWnd,IDC_BUFFERS,WM_GETTEXT,6,(LPARAM)tmpstring);
|
| 548 | + i = _ttoi(tmpstring);
|
| 549 | + if(i != buffer3d)
|
| 550 | + {
|
| 551 | + buffer3d = i;
|
| 552 | + if(buffer3d < minbuffer3d) buffer3d = minbuffer3d;
|
| 553 | + if(buffer3d > maxbuffer3d) buffer3d = maxbuffer3d;
|
| 554 | + _itot(buffer3d,tmpstring,10);
|
| 555 | + SendDlgItemMessage(hWnd,IDC_BUFFERS,WM_SETTEXT,0,(LPARAM)tmpstring);
|
| 556 | + }
|
| 557 | + }
|
| 558 | + break;
|
| 559 | + case IDC_TEST:
|
| 560 | + if(SendDlgItemMessage(hWnd,IDC_RESIZABLE,BM_GETCHECK,0,0)) resizable3d = true;
|
| 561 | + else resizable3d = false;
|
| 562 | + i = SendDlgItemMessage(hWnd,IDC_VIDMODES,LB_GETCURSEL,0,0);
|
| 563 | + SendDlgItemMessage(hWnd,IDC_VIDMODES,LB_GETTEXT,i,(LPARAM)tmpstring);
|
| 564 | + TranslateResolutionString(tmpstring,width,height,bpp,refresh);
|
| 565 | + RunTest3D(currenttest3d,width,height,bpp,refresh,buffer3d,api3d,filter3d,msaa3d,framerate3d,fullscreen3d,resizable3d);
|
| 566 | + break;
|
| 567 | + case IDC_WINDOWED:
|
| 568 | + SendDlgItemMessage(hWnd,IDC_FULLSCREEN,BM_SETCHECK,0,0);
|
| 569 | + SendDlgItemMessage(hWnd,IDC_WINDOWED,BM_SETCHECK,1,0);
|
| 570 | + fullscreen3d = false;
|
| 571 | + break;
|
| 572 | + case IDC_FULLSCREEN:
|
| 573 | + SendDlgItemMessage(hWnd,IDC_FULLSCREEN,BM_SETCHECK,1,0);
|
| 574 | + SendDlgItemMessage(hWnd,IDC_WINDOWED,BM_SETCHECK,0,0);
|
| 575 | + fullscreen3d = true;
|
| 576 | + break;
|
| 577 | + }
|
| 578 | + break;
|
| 579 | + case WM_NOTIFY:
|
| 580 | + switch(((LPNMHDR)lParam)->code)
|
| 581 | + {
|
| 582 | + case UDN_DELTAPOS:
|
| 583 | + switch(((LPNMHDR)lParam)->idFrom)
|
| 584 | + {
|
| 585 | + case IDC_SPINFRAME:
|
| 586 | + framerate3d -= ((LPNMUPDOWN)lParam)->iDelta;
|
| 587 | + if(framerate3d < 0.01) framerate3d = 0.01;
|
| 588 | + if(framerate3d > 99.99) framerate3d = 99.99;
|
| 589 | + _stprintf(framerate3dstring,_T("%.2f"),framerate3d);
|
| 590 | + SendDlgItemMessage(hWnd,IDC_FRAMERATE,WM_SETTEXT,0,(LPARAM)framerate3dstring);
|
| 591 | + break;
|
| 592 | + case IDC_SPINAPI:
|
| 593 | + if(api3d < 1) api3d = 1;
|
| 594 | + if(api3d > 7) api3d = 7;
|
| 595 | + if(((LPNMUPDOWN)lParam)->iDelta > 0)
|
| 596 | + {
|
| 597 | + switch(api3d)
|
| 598 | + {
|
| 599 | + case 1:
|
| 600 | + case 2:
|
| 601 | + default:
|
| 602 | + api3d = 1;
|
| 603 | + break;
|
| 604 | + case 3:
|
| 605 | + api3d = 2;
|
| 606 | + break;
|
| 607 | + case 4:
|
| 608 | + api3d = 3;
|
| 609 | + break;
|
| 610 | + case 7:
|
| 611 | + case 6:
|
| 612 | + case 5:
|
| 613 | + api3d = 4;
|
| 614 | + }
|
| 615 | + }
|
| 616 | + else
|
| 617 | + {
|
| 618 | + switch(api3d)
|
| 619 | + {
|
| 620 | + case 1:
|
| 621 | + default:
|
| 622 | + api3d = 2;
|
| 623 | + break;
|
| 624 | + case 2:
|
| 625 | + api3d = 3;
|
| 626 | + break;
|
| 627 | + case 3:
|
| 628 | + api3d = 4;
|
| 629 | + break;
|
| 630 | + case 4:
|
| 631 | + case 5:
|
| 632 | + case 6:
|
| 633 | + case 7:
|
| 634 | + api3d = 7;
|
| 635 | + }
|
| 636 | + }
|
| 637 | + if(api3d < minapi3d) api3d = minapi3d;
|
| 638 | + if(api3d > maxapi3d) api3d = maxapi3d;
|
| 639 | + SendDlgItemMessage(hWnd,IDC_APIVER,WM_SETTEXT,0,(LPARAM)_itot(api3d,tmpstring,10));
|
| 640 | + break;
|
| 641 | + case IDC_SPINBACK:
|
| 642 | + buffer3d -= ((LPNMUPDOWN)lParam)->iDelta;
|
| 643 | + if(buffer3d < minbuffer3d) buffer3d = minbuffer3d;
|
| 644 | + if(buffer3d > maxbuffer3d) buffer3d = maxbuffer3d;
|
| 645 | + SendDlgItemMessage(hWnd,IDC_BUFFERS,WM_SETTEXT,0,(LPARAM)_itot(buffer3d,tmpstring,10));
|
| 646 | + break;
|
| 647 | + default:
|
| 648 | + break;
|
| 649 | + }
|
| 650 | + break;
|
| 651 | + default:
|
| 652 | + break;
|
| 653 | + }
|
| 654 | + break;
|
| 655 | + default:
|
| 656 | + return FALSE;
|
| 657 | + }
|
| 658 | + return TRUE;
|
| 659 | +}
|
| 660 | +
|
| 661 | +
|
429 | 662 | HWND tabwnd[3];
|
430 | 663 | int tabopen;
|
431 | 664 | INT_PTR CALLBACK DXGLTestCallback(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
— | — | @@ -450,11 +683,15 @@ |
451 | 684 | tab.pszText = _T("2D Graphics");
|
452 | 685 | hTab = GetDlgItem(hWnd,IDC_TABS);
|
453 | 686 | SendDlgItemMessage(hWnd,IDC_TABS,TCM_INSERTITEM,1,(LPARAM)&tab);
|
454 | | - tabwnd[0] = CreateDialog(hinstance,MAKEINTRESOURCE(IDD_SYSINFO),hTab,SysTabCallback);
|
| 687 | + tab.pszText = _T("3D Graphics");
|
| 688 | + SendDlgItemMessage(hWnd,IDC_TABS,TCM_INSERTITEM,2,(LPARAM)&tab);
|
| 689 | + tabwnd[0] = CreateDialog(hinstance,MAKEINTRESOURCE(IDD_SYSINFO),hTab,SysTabCallback);
|
455 | 690 | tabwnd[1] = CreateDialog(hinstance,MAKEINTRESOURCE(IDD_TESTGFX),hTab,Test2DCallback);
|
| 691 | + tabwnd[2] = CreateDialog(hinstance,MAKEINTRESOURCE(IDD_TESTGFX),hTab,Test3DCallback);
|
456 | 692 | SendDlgItemMessage(hWnd,IDC_TABS,TCM_GETITEMRECT,0,(LPARAM)&tabrect);
|
457 | 693 | SetWindowPos(tabwnd[0],NULL,tabrect.left,tabrect.bottom+3,0,0,SWP_SHOWWINDOW|SWP_NOSIZE);
|
458 | | - ShowWindow(tabwnd[1],SWP_HIDEWINDOW);
|
| 694 | + ShowWindow(tabwnd[1],SW_HIDE);
|
| 695 | + ShowWindow(tabwnd[2],SW_HIDE);
|
459 | 696 | tabopen = 0;
|
460 | 697 | ShowWindow(hWnd,SW_SHOWNORMAL);
|
461 | 698 | return TRUE;
|
Index: dxgltest/tests.h |
— | — | @@ -23,7 +23,7 @@ |
24 | 24 | void RunTest2D(int testnum, int width, int height, int bpp, int refresh, int backbuffers, int apiver,
|
25 | 25 | double fps, bool fullscreen, bool resizable);
|
26 | 26 |
|
27 | | -void RunTest3D(int testnum, int width, int height, int bpp, int refresh, int backbuffers, int filter,
|
28 | | - int msaa, double fps, bool fullscreen, bool resizable);
|
| 27 | +void RunTest3D(int testnum, int width, int height, int bpp, int refresh, int backbuffers, int apiver,
|
| 28 | + int filter, int msaa, double fps, bool fullscreen, bool resizable);
|
29 | 29 |
|
30 | 30 | #endif //_TESTS_H
|