| Index: common/x16.ico |
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Index: ddraw/ShaderGen2D.cpp |
| — | — | @@ -116,14 +116,14 @@ |
| 117 | 117 | };
|
| 118 | 118 |
|
| 119 | 119 | const DWORD supported_rops[8] = {
|
| | 120 | + 0x00000001,
|
| 120 | 121 | 0x00000000,
|
| 121 | 122 | 0x00000000,
|
| 122 | 123 | 0x00000000,
|
| 123 | 124 | 0x00000000,
|
| 124 | 125 | 0x00000000,
|
| 125 | | - 0x00000000,
|
| 126 | 126 | 0x00001000,
|
| 127 | | - 0x00000000
|
| | 127 | + 0x80000000
|
| 128 | 128 | };
|
| 129 | 129 |
|
| 130 | 130 | const DWORD supported_rops_gl2[8] = {
|
| — | — | @@ -196,7 +196,7 @@ |
| 197 | 197 |
|
| 198 | 198 | // ROP Operations
|
| 199 | 199 | static const char *op_ROP[256] = {
|
| 200 | | -"dest = ivec4(0);",//00 BLACKNESS
|
| | 200 | +"pixel = ivec4(0);",//00 BLACKNESS
|
| 201 | 201 | "",
|
| 202 | 202 | "",
|
| 203 | 203 | "",
|
| — | — | @@ -400,7 +400,7 @@ |
| 401 | 401 | "",
|
| 402 | 402 | "",
|
| 403 | 403 | "",
|
| 404 | | -"dest = src;\n",//CC SRCCOPY
|
| | 404 | +"",//CC SRCCOPY pixel=pixel
|
| 405 | 405 | "",
|
| 406 | 406 | "",
|
| 407 | 407 | "",//CF
|
| — | — | @@ -451,11 +451,11 @@ |
| 452 | 452 | "",
|
| 453 | 453 | "",
|
| 454 | 454 | "",
|
| 455 | | -"dest = ivec4(255);\n",//FF WHITENESS
|
| | 455 | +"pixel = ivec4(255);\n",//FF WHITENESS
|
| 456 | 456 | };
|
| 457 | 457 |
|
| 458 | 458 | static const char *op_ROP_float[256] = {
|
| 459 | | -"gl_FragColor = vec4(0.0);",//00 BLACKNESS
|
| | 459 | +"pixel = ivec4(0);",//00 BLACKNESS
|
| 460 | 460 | "",
|
| 461 | 461 | "",
|
| 462 | 462 | "",
|
| — | — | @@ -659,7 +659,7 @@ |
| 660 | 660 | "",
|
| 661 | 661 | "",
|
| 662 | 662 | "",
|
| 663 | | -"gl_FragColor = pixel;\n",//CC SRCCOPY
|
| | 663 | +"",//CC SRCCOPY pixel=pixel
|
| 664 | 664 | "",
|
| 665 | 665 | "",
|
| 666 | 666 | "",//CF
|
| — | — | @@ -710,12 +710,12 @@ |
| 711 | 711 | "",
|
| 712 | 712 | "",
|
| 713 | 713 | "",
|
| 714 | | -"gl_FragColor = vec4(1.0);\n",//FF WHITENESS
|
| | 714 | +"pixel = ivec4(255);\n",//FF WHITENESS
|
| 715 | 715 | };
|
| 716 | 716 |
|
| 717 | 717 | DWORD PackROPBits(DWORD rop, DWORD flags)
|
| 718 | 718 | {
|
| 719 | | - DWORD out = rop & 0xF2FAADFF;
|
| | 719 | + DWORD out = flags & 0xF2FAADFF;
|
| 720 | 720 | if (rop & 0x10000) out |= 1 << 9;
|
| 721 | 721 | if (rop & 0x20000) out |= 1 << 12;
|
| 722 | 722 | if (rop & 0x40000) out |= 1 << 14;
|
| — | — | @@ -727,6 +727,20 @@ |
| 728 | 728 | return out;
|
| 729 | 729 | }
|
| 730 | 730 |
|
| | 731 | +DWORD UnpackROPBits(DWORD flags)
|
| | 732 | +{
|
| | 733 | + DWORD out = 0;
|
| | 734 | + if (flags & (1 << 9)) out |= 1;
|
| | 735 | + if (flags & (1 << 12)) out |= 2;
|
| | 736 | + if (flags & (1 << 14)) out |= 4;
|
| | 737 | + if (flags & (1 << 16)) out |= 8;
|
| | 738 | + if (flags & (1 << 18)) out |= 16;
|
| | 739 | + if (flags & (1 << 24)) out |= 32;
|
| | 740 | + if (flags & (1 << 26)) out |= 64;
|
| | 741 | + if (flags & (1 << 27)) out |= 128;
|
| | 742 | + return out;
|
| | 743 | +}
|
| | 744 | +
|
| 731 | 745 | void ShaderGen2D_Init(ShaderGen2D *gen, glExtensions *ext, ShaderManager *shaderman)
|
| 732 | 746 | {
|
| 733 | 747 | gen->ext = ext;
|
| — | — | @@ -759,6 +773,7 @@ |
| 760 | 774 | void ShaderGen2D_CreateShader2D(ShaderGen2D *gen, int index, DWORD id)
|
| 761 | 775 | {
|
| 762 | 776 | STRING tmp;
|
| | 777 | + DWORD rop;
|
| 763 | 778 | tmp.ptr = NULL;
|
| 764 | 779 | BOOL intproc = FALSE;
|
| 765 | 780 | gen->genshaders2D[index].shader.vsrc.ptr = NULL;
|
| — | — | @@ -775,13 +790,13 @@ |
| 776 | 791 | if (gen->ext->glver_major >= 3)
|
| 777 | 792 | {
|
| 778 | 793 | String_Append(vsrc, version_130);
|
| 779 | | - intproc = true;
|
| | 794 | + intproc = TRUE;
|
| 780 | 795 | }
|
| 781 | 796 | else if (gen->ext->GLEXT_EXT_gpu_shader4)
|
| 782 | 797 | {
|
| 783 | 798 | String_Append(vsrc, version_110);
|
| 784 | 799 | String_Append(vsrc, ext_shader4);
|
| 785 | | - intproc = true;
|
| | 800 | + intproc = TRUE;
|
| 786 | 801 | }
|
| 787 | 802 | else String_Append(vsrc, version_110);
|
| 788 | 803 | }
|
| — | — | @@ -788,7 +803,7 @@ |
| 789 | 804 | else String_Append(vsrc, version_110);
|
| 790 | 805 | String_Append(vsrc, idheader);
|
| 791 | 806 | String_Append(vsrc, idstring);
|
| 792 | | -
|
| | 807 | +
|
| 793 | 808 | // Attributes
|
| 794 | 809 | String_Append(vsrc, attr_xy);
|
| 795 | 810 | if (id & DDBLT_COLORFILL) String_Append(vsrc, attr_rgb);
|
| — | — | @@ -856,7 +871,7 @@ |
| 857 | 872 | if (!(id & DDBLT_COLORFILL)) String_Append(fsrc, unif_srctex);
|
| 858 | 873 | if (id & 0x10000000) String_Append(fsrc, unif_stenciltex);
|
| 859 | 874 | if (id & DDBLT_KEYSRC) String_Append(fsrc, unif_ckeysrc);
|
| 860 | | -
|
| | 875 | +
|
| 861 | 876 | // Variables
|
| 862 | 877 | String_Append(fsrc, var_pixel);
|
| 863 | 878 |
|
| — | — | @@ -866,6 +881,12 @@ |
| 867 | 882 | if (id & DDBLT_COLORFILL) String_Append(fsrc, op_color);
|
| 868 | 883 | else String_Append(fsrc, op_src);
|
| 869 | 884 | if (id & DDBLT_KEYSRC) String_Append(fsrc, op_ckeysrc);
|
| | 885 | + if (id & DDBLT_ROP)
|
| | 886 | + {
|
| | 887 | + rop = UnpackROPBits(id);
|
| | 888 | + if (intproc) String_Append(fsrc, op_ROP[rop]);
|
| | 889 | + else String_Append(fsrc, op_ROP_float[rop]);
|
| | 890 | + }
|
| 870 | 891 |
|
| 871 | 892 | String_Append(fsrc, op_destout);
|
| 872 | 893 | String_Append(fsrc, mainend);
|
| Index: ddraw/glDirectDrawSurface.cpp |
| — | — | @@ -612,6 +612,7 @@ |
| 613 | 613 | TRACE_ENTER(6,14,this,26,lpDestRect,14,lpDDSrcSurface,26,lpSrcRect,9,dwFlags,14,lpDDBltFx);
|
| 614 | 614 | if(!this) TRACE_RET(HRESULT,23,DDERR_INVALIDOBJECT);
|
| 615 | 615 | if((dwFlags & DDBLT_COLORFILL) && !lpDDBltFx) TRACE_RET(HRESULT,23,DDERR_INVALIDPARAMS);
|
| | 616 | + if((dwFlags & DDBLT_ROP) && !lpDDBltFx) TRACE_RET(HRESULT,23,DDERR_INVALIDPARAMS);
|
| 616 | 617 | glDirectDrawSurface7 *src = (glDirectDrawSurface7 *)lpDDSrcSurface;
|
| 617 | 618 | if(dirty & 1)
|
| 618 | 619 | {
|
| Index: dxgltest/MultiDD.cpp |
| — | — | @@ -153,6 +153,24 @@ |
| 154 | 154 | return error;
|
| 155 | 155 | }
|
| 156 | 156 |
|
| | 157 | +HRESULT MultiDirectDraw::GetCaps(LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDHELCaps)
|
| | 158 | +{
|
| | 159 | + switch (version)
|
| | 160 | + {
|
| | 161 | + case 1:
|
| | 162 | + return dd1->GetCaps(lpDDDriverCaps, lpDDHELCaps);
|
| | 163 | + case 2:
|
| | 164 | + case 3:
|
| | 165 | + return dd2->GetCaps(lpDDDriverCaps, lpDDHELCaps);
|
| | 166 | + case 4:
|
| | 167 | + return dd4->GetCaps(lpDDDriverCaps, lpDDHELCaps);
|
| | 168 | + case 7:
|
| | 169 | + return dd7->GetCaps(lpDDDriverCaps, lpDDHELCaps);
|
| | 170 | + default:
|
| | 171 | + return DDERR_GENERIC;
|
| | 172 | + }
|
| | 173 | +}
|
| | 174 | +
|
| 157 | 175 | HRESULT MultiDirectDraw::SetCooperativeLevel(HWND hWnd, DWORD dwFlags)
|
| 158 | 176 | {
|
| 159 | 177 | switch(version)
|
| Index: dxgltest/Tests2D.cpp |
| — | — | @@ -16,9 +16,9 @@ |
| 17 | 17 | // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
| 18 | 18 |
|
| 19 | 19 | #include "common.h"
|
| | 20 | +#include "MultiDD.h"
|
| 20 | 21 | #include "tests.h"
|
| 21 | 22 | #include "surfacegen.h"
|
| 22 | | -#include "MultiDD.h"
|
| 23 | 23 | #include "timer.h"
|
| 24 | 24 | #include "misc.h"
|
| 25 | 25 |
|
| — | — | @@ -41,20 +41,6 @@ |
| 42 | 42 | static unsigned int randnum;
|
| 43 | 43 | static int testtypes[] = {0,1,0,1,0,1,2};
|
| 44 | 44 |
|
| 45 | | -typedef struct
|
| 46 | | -{
|
| 47 | | - MultiDirectDrawSurface *surface;
|
| 48 | | - DDSURFACEDESC2 ddsd;
|
| 49 | | - float width;
|
| 50 | | - float height;
|
| 51 | | - float x;
|
| 52 | | - float y;
|
| 53 | | - float xvelocity;
|
| 54 | | - float yvelocity;
|
| 55 | | - DWORD bltflags;
|
| 56 | | - RECT rect;
|
| 57 | | -} DDSPRITE;
|
| 58 | | -
|
| 59 | 45 | static DDSPRITE sprites[16];
|
| 60 | 46 |
|
| 61 | 47 | LRESULT CALLBACK DDWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
| — | — | @@ -378,6 +364,8 @@ |
| 379 | 365 | ddsd.dwWidth = width;
|
| 380 | 366 | ddsd.dwHeight = height;
|
| 381 | 367 | error = ddinterface->CreateSurface(&ddsd,&ddsrender,NULL);
|
| | 368 | + ddsrender->GetSurfaceDesc(&ddsd);
|
| | 369 | + ::bpp = ddsd.ddpfPixelFormat.dwRGBBitCount;
|
| 382 | 370 | }
|
| 383 | 371 | else
|
| 384 | 372 | {
|
| — | — | @@ -448,145 +436,145 @@ |
| 449 | 437 | if(ddver > 3)ddsd.dwSize = sizeof(DDSURFACEDESC2);
|
| 450 | 438 | else ddsd.dwSize = sizeof(DDSURFACEDESC);
|
| 451 | 439 | error = ddsrender->GetSurfaceDesc(&ddsd);
|
| 452 | | - switch(test)
|
| | 440 | + switch (test)
|
| 453 | 441 | {
|
| 454 | 442 | case 0:
|
| 455 | | - if(!fullscreen) backbuffers = 0;
|
| | 443 | + if (!fullscreen) backbuffers = 0;
|
| 456 | 444 | buffer = (unsigned char *)malloc(ddsd.lPitch*ddsd.dwHeight);
|
| 457 | | - DrawPalette(ddsd,buffer);
|
| 458 | | - error = ddsrender->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL);
|
| 459 | | - memcpy(ddsd.lpSurface,buffer,ddsd.lPitch*ddsd.dwHeight);
|
| | 445 | + DrawPalette(ddsd, buffer);
|
| | 446 | + error = ddsrender->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL);
|
| | 447 | + memcpy(ddsd.lpSurface, buffer, ddsd.lPitch*ddsd.dwHeight);
|
| 460 | 448 | error = ddsrender->Unlock(NULL);
|
| 461 | 449 | ddsrender->GetPalette(&palette);
|
| 462 | | - if(backbuffers > 0)
|
| | 450 | + if (backbuffers > 0)
|
| 463 | 451 | {
|
| 464 | 452 | ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
|
| 465 | | - error = ddsrender->GetAttachedSurface(&ddscaps,&temp1);
|
| 466 | | - DrawGradients(ddsd,buffer,hWnd,palette,1,0);
|
| 467 | | - error = temp1->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL);
|
| 468 | | - memcpy(ddsd.lpSurface,buffer,ddsd.lPitch*ddsd.dwHeight);
|
| | 453 | + error = ddsrender->GetAttachedSurface(&ddscaps, &temp1);
|
| | 454 | + DrawGradients(ddsd, buffer, hWnd, palette, 1, 0);
|
| | 455 | + error = temp1->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL);
|
| | 456 | + memcpy(ddsd.lpSurface, buffer, ddsd.lPitch*ddsd.dwHeight);
|
| 469 | 457 | error = temp1->Unlock(NULL);
|
| 470 | 458 | }
|
| 471 | | - if(backbuffers > 1)
|
| | 459 | + if (backbuffers > 1)
|
| 472 | 460 | {
|
| 473 | 461 | ddscaps.dwCaps = DDSCAPS_FLIP;
|
| 474 | | - error = temp1->GetAttachedSurface(&ddscaps,&temp2);
|
| | 462 | + error = temp1->GetAttachedSurface(&ddscaps, &temp2);
|
| 475 | 463 | temp1->Release();
|
| 476 | 464 | temp1 = temp2;
|
| 477 | | - DrawGradients(ddsd,buffer,hWnd,palette,0,0x0000FF);
|
| 478 | | - error = temp1->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL);
|
| 479 | | - memcpy(ddsd.lpSurface,buffer,ddsd.lPitch*ddsd.dwHeight);
|
| | 465 | + DrawGradients(ddsd, buffer, hWnd, palette, 0, 0x0000FF);
|
| | 466 | + error = temp1->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL);
|
| | 467 | + memcpy(ddsd.lpSurface, buffer, ddsd.lPitch*ddsd.dwHeight);
|
| 480 | 468 | error = temp1->Unlock(NULL);
|
| 481 | 469 | }
|
| 482 | | - if(backbuffers > 2)
|
| | 470 | + if (backbuffers > 2)
|
| 483 | 471 | {
|
| 484 | 472 | ddscaps.dwCaps = DDSCAPS_FLIP;
|
| 485 | | - error = temp1->GetAttachedSurface(&ddscaps,&temp2);
|
| | 473 | + error = temp1->GetAttachedSurface(&ddscaps, &temp2);
|
| 486 | 474 | temp1->Release();
|
| 487 | 475 | temp1 = temp2;
|
| 488 | | - DrawGradients(ddsd,buffer,hWnd,palette,0,0x00FF00);
|
| 489 | | - error = temp1->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL);
|
| 490 | | - memcpy(ddsd.lpSurface,buffer,ddsd.lPitch*ddsd.dwHeight);
|
| | 476 | + DrawGradients(ddsd, buffer, hWnd, palette, 0, 0x00FF00);
|
| | 477 | + error = temp1->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL);
|
| | 478 | + memcpy(ddsd.lpSurface, buffer, ddsd.lPitch*ddsd.dwHeight);
|
| 491 | 479 | error = temp1->Unlock(NULL);
|
| 492 | 480 | }
|
| 493 | | - if(backbuffers > 3)
|
| | 481 | + if (backbuffers > 3)
|
| 494 | 482 | {
|
| 495 | 483 | ddscaps.dwCaps = DDSCAPS_FLIP;
|
| 496 | | - error = temp1->GetAttachedSurface(&ddscaps,&temp2);
|
| | 484 | + error = temp1->GetAttachedSurface(&ddscaps, &temp2);
|
| 497 | 485 | temp1->Release();
|
| 498 | 486 | temp1 = temp2;
|
| 499 | | - DrawGradients(ddsd,buffer,hWnd,palette,0,0xFF0000);
|
| 500 | | - error = temp1->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL);
|
| 501 | | - memcpy(ddsd.lpSurface,buffer,ddsd.lPitch*ddsd.dwHeight);
|
| | 487 | + DrawGradients(ddsd, buffer, hWnd, palette, 0, 0xFF0000);
|
| | 488 | + error = temp1->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL);
|
| | 489 | + memcpy(ddsd.lpSurface, buffer, ddsd.lPitch*ddsd.dwHeight);
|
| 502 | 490 | error = temp1->Unlock(NULL);
|
| 503 | 491 | }
|
| 504 | | - if(temp1) temp1->Release();
|
| | 492 | + if (temp1) temp1->Release();
|
| 505 | 493 | free(buffer);
|
| 506 | | - if(palette) palette->Release();
|
| | 494 | + if (palette) palette->Release();
|
| 507 | 495 | break;
|
| 508 | 496 | case 2:
|
| 509 | | - if(!fullscreen) backbuffers=0;
|
| | 497 | + if (!fullscreen) backbuffers = 0;
|
| 510 | 498 | error = ddsrender->GetDC(&hRenderDC);
|
| 511 | | - DrawGDIPatterns(ddsd,hRenderDC,0);
|
| | 499 | + DrawGDIPatterns(ddsd, hRenderDC, 0);
|
| 512 | 500 | ddsrender->ReleaseDC(hRenderDC);
|
| 513 | | - if(backbuffers > 0)
|
| | 501 | + if (backbuffers > 0)
|
| 514 | 502 | {
|
| 515 | 503 | ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
|
| 516 | | - error = ddsrender->GetAttachedSurface(&ddscaps,&temp1);
|
| | 504 | + error = ddsrender->GetAttachedSurface(&ddscaps, &temp1);
|
| 517 | 505 | temp1->GetDC(&hRenderDC);
|
| 518 | | - DrawGDIPatterns(ddsd,hRenderDC,1);
|
| | 506 | + DrawGDIPatterns(ddsd, hRenderDC, 1);
|
| 519 | 507 | temp1->ReleaseDC(hRenderDC);
|
| 520 | 508 | }
|
| 521 | | - if(backbuffers > 1)
|
| | 509 | + if (backbuffers > 1)
|
| 522 | 510 | {
|
| 523 | 511 | ddscaps.dwCaps = DDSCAPS_FLIP;
|
| 524 | | - error = temp1->GetAttachedSurface(&ddscaps,&temp2);
|
| | 512 | + error = temp1->GetAttachedSurface(&ddscaps, &temp2);
|
| 525 | 513 | temp1->Release();
|
| 526 | 514 | temp1 = temp2;
|
| 527 | 515 | temp1->GetDC(&hRenderDC);
|
| 528 | | - DrawGDIPatterns(ddsd,hRenderDC,2);
|
| | 516 | + DrawGDIPatterns(ddsd, hRenderDC, 2);
|
| 529 | 517 | temp1->ReleaseDC(hRenderDC);
|
| 530 | 518 | }
|
| 531 | | - if(backbuffers > 2)
|
| | 519 | + if (backbuffers > 2)
|
| 532 | 520 | {
|
| 533 | 521 | ddscaps.dwCaps = DDSCAPS_FLIP;
|
| 534 | | - error = temp1->GetAttachedSurface(&ddscaps,&temp2);
|
| | 522 | + error = temp1->GetAttachedSurface(&ddscaps, &temp2);
|
| 535 | 523 | temp1->Release();
|
| 536 | 524 | temp1 = temp2;
|
| 537 | 525 | temp1->GetDC(&hRenderDC);
|
| 538 | | - DrawGDIPatterns(ddsd,hRenderDC,3);
|
| | 526 | + DrawGDIPatterns(ddsd, hRenderDC, 3);
|
| 539 | 527 | temp1->ReleaseDC(hRenderDC);
|
| 540 | 528 | }
|
| 541 | | - if(backbuffers > 3)
|
| | 529 | + if (backbuffers > 3)
|
| 542 | 530 | {
|
| 543 | 531 | ddscaps.dwCaps = DDSCAPS_FLIP;
|
| 544 | | - error = temp1->GetAttachedSurface(&ddscaps,&temp2);
|
| | 532 | + error = temp1->GetAttachedSurface(&ddscaps, &temp2);
|
| 545 | 533 | temp1->Release();
|
| 546 | 534 | temp1 = temp2;
|
| 547 | 535 | temp1->GetDC(&hRenderDC);
|
| 548 | | - DrawGDIPatterns(ddsd,hRenderDC,4);
|
| | 536 | + DrawGDIPatterns(ddsd, hRenderDC, 4);
|
| 549 | 537 | temp1->ReleaseDC(hRenderDC);
|
| 550 | 538 | }
|
| 551 | | - if(backbuffers > 4)
|
| | 539 | + if (backbuffers > 4)
|
| 552 | 540 | {
|
| 553 | 541 | ddscaps.dwCaps = DDSCAPS_FLIP;
|
| 554 | | - error = temp1->GetAttachedSurface(&ddscaps,&temp2);
|
| | 542 | + error = temp1->GetAttachedSurface(&ddscaps, &temp2);
|
| 555 | 543 | temp1->Release();
|
| 556 | 544 | temp1 = temp2;
|
| 557 | 545 | temp1->GetDC(&hRenderDC);
|
| 558 | | - DrawGDIPatterns(ddsd,hRenderDC,5);
|
| | 546 | + DrawGDIPatterns(ddsd, hRenderDC, 5);
|
| 559 | 547 | temp1->ReleaseDC(hRenderDC);
|
| 560 | 548 | }
|
| 561 | | - if(backbuffers > 5)
|
| | 549 | + if (backbuffers > 5)
|
| 562 | 550 | {
|
| 563 | 551 | ddscaps.dwCaps = DDSCAPS_FLIP;
|
| 564 | | - error = temp1->GetAttachedSurface(&ddscaps,&temp2);
|
| | 552 | + error = temp1->GetAttachedSurface(&ddscaps, &temp2);
|
| 565 | 553 | temp1->Release();
|
| 566 | 554 | temp1 = temp2;
|
| 567 | 555 | temp1->GetDC(&hRenderDC);
|
| 568 | | - DrawGDIPatterns(ddsd,hRenderDC,6);
|
| | 556 | + DrawGDIPatterns(ddsd, hRenderDC, 6);
|
| 569 | 557 | temp1->ReleaseDC(hRenderDC);
|
| 570 | 558 | }
|
| 571 | | - if(backbuffers > 6)
|
| | 559 | + if (backbuffers > 6)
|
| 572 | 560 | {
|
| 573 | 561 | ddscaps.dwCaps = DDSCAPS_FLIP;
|
| 574 | | - error = temp1->GetAttachedSurface(&ddscaps,&temp2);
|
| | 562 | + error = temp1->GetAttachedSurface(&ddscaps, &temp2);
|
| 575 | 563 | temp1->Release();
|
| 576 | 564 | temp1 = temp2;
|
| 577 | 565 | temp1->GetDC(&hRenderDC);
|
| 578 | | - DrawGDIPatterns(ddsd,hRenderDC,7);
|
| | 566 | + DrawGDIPatterns(ddsd, hRenderDC, 7);
|
| 579 | 567 | temp1->ReleaseDC(hRenderDC);
|
| 580 | 568 | }
|
| 581 | | - if(temp1) temp1->Release();
|
| | 569 | + if (temp1) temp1->Release();
|
| 582 | 570 | break;
|
| 583 | 571 | case 4:
|
| 584 | 572 | ddsrender->GetSurfaceDesc(&ddsd);
|
| 585 | 573 | ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
|
| 586 | 574 | ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
|
| 587 | | - ddinterface->CreateSurface(&ddsd,&sprites[0].surface,NULL);
|
| | 575 | + ddinterface->CreateSurface(&ddsd, &sprites[0].surface, NULL);
|
| 588 | 576 | ddsrender->GetPalette(&palette);
|
| 589 | | - error = sprites[0].surface->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL);
|
| 590 | | - DrawGradients(ddsd,(unsigned char *)ddsd.lpSurface,hWnd,palette,1,0);
|
| | 577 | + error = sprites[0].surface->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL);
|
| | 578 | + DrawGradients(ddsd, (unsigned char *)ddsd.lpSurface, hWnd, palette, 1, 0);
|
| 591 | 579 | error = sprites[0].surface->Unlock(NULL);
|
| 592 | 580 | sprites[0].width = (float)ddsd.dwWidth;
|
| 593 | 581 | sprites[0].height = (float)ddsd.dwHeight;
|
| — | — | @@ -593,21 +581,21 @@ |
| 594 | 582 | sprites[0].rect.left = sprites[0].rect.top = 0;
|
| 595 | 583 | sprites[0].rect.right = ddsd.dwWidth;
|
| 596 | 584 | sprites[0].rect.bottom = ddsd.dwHeight;
|
| 597 | | - for(int i = 1; i < 16; i++)
|
| | 585 | + for (int i = 1; i < 16; i++)
|
| 598 | 586 | {
|
| 599 | | - switch((i-1 & 3))
|
| | 587 | + switch ((i - 1 & 3))
|
| 600 | 588 | {
|
| 601 | 589 | case 0:
|
| 602 | 590 | sprites[i].width = sprites[i].height = 64.f;
|
| 603 | | - sprites[i].ddsd.dwWidth = sprites[i].ddsd.dwHeight =
|
| | 591 | + sprites[i].ddsd.dwWidth = sprites[i].ddsd.dwHeight =
|
| 604 | 592 | sprites[i].rect.right = sprites[i].rect.bottom = 64;
|
| 605 | 593 | sprites[i].ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
|
| 606 | | - ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
|
| 607 | | - if(ddver > 3) sprites[i].ddsd.dwSize = sizeof(DDSURFACEDESC2);
|
| | 594 | + sprites[i].ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
|
| | 595 | + if (ddver > 3) sprites[i].ddsd.dwSize = sizeof(DDSURFACEDESC2);
|
| 608 | 596 | else sprites[i].ddsd.dwSize = sizeof(DDSURFACEDESC);
|
| 609 | | - ddinterface->CreateSurface(&sprites[i].ddsd,&sprites[i].surface,NULL);
|
| 610 | | - error = sprites[i].surface->Lock(NULL,&sprites[i].ddsd,DDLOCK_WAIT,NULL);
|
| 611 | | - DrawPalette(sprites[i].ddsd,(unsigned char *)sprites[i].ddsd.lpSurface);
|
| | 597 | + ddinterface->CreateSurface(&sprites[i].ddsd, &sprites[i].surface, NULL);
|
| | 598 | + error = sprites[i].surface->Lock(NULL, &sprites[i].ddsd, DDLOCK_WAIT, NULL);
|
| | 599 | + DrawPalette(sprites[i].ddsd, (unsigned char *)sprites[i].ddsd.lpSurface);
|
| 612 | 600 | sprites[i].surface->Unlock(NULL);
|
| 613 | 601 | break;
|
| 614 | 602 | case 1:
|
| — | — | @@ -621,13 +609,13 @@ |
| 622 | 610 | }
|
| 623 | 611 | DDCOLORKEY ckey;
|
| 624 | 612 | ckey.dwColorSpaceHighValue = ckey.dwColorSpaceLowValue = 0;
|
| 625 | | - if(i < 5) sprites[i].bltflags = 0;
|
| 626 | | - else if(i < 9)
|
| | 613 | + if (i < 5) sprites[i].bltflags = 0;
|
| | 614 | + else if (i < 9)
|
| 627 | 615 | {
|
| 628 | 616 | sprites[i].bltflags = DDBLTFAST_SRCCOLORKEY;
|
| 629 | | - if(sprites[i].surface) sprites[i].surface->SetColorKey(DDCKEY_SRCBLT,&ckey);
|
| | 617 | + if (sprites[i].surface) sprites[i].surface->SetColorKey(DDCKEY_SRCBLT, &ckey);
|
| 630 | 618 | }
|
| 631 | | - else if(i < 13) sprites[i].bltflags = DDBLTFAST_DESTCOLORKEY;
|
| | 619 | + else if (i < 13) sprites[i].bltflags = DDBLTFAST_DESTCOLORKEY;
|
| 632 | 620 | else sprites[i].bltflags = DDBLTFAST_SRCCOLORKEY | DDBLTFAST_DESTCOLORKEY;
|
| 633 | 621 | sprites[i].x = randfloat((float)ddsd.dwWidth);
|
| 634 | 622 | sprites[i].y = randfloat((float)ddsd.dwHeight);
|
| — | — | @@ -634,7 +622,47 @@ |
| 635 | 623 | sprites[i].xvelocity = randfloat(5);
|
| 636 | 624 | sprites[i].yvelocity = randfloat(5);
|
| 637 | 625 | }
|
| 638 | | -
|
| | 626 | + break;
|
| | 627 | + case 7:
|
| | 628 | + if (!fullscreen) backbuffers = 0;
|
| | 629 | + ddsrender->GetSurfaceDesc(&ddsd);
|
| | 630 | + ddsrender->GetPalette(&palette);
|
| | 631 | + sprites[0].ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
|
| | 632 | + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
|
| | 633 | + if (ddver > 3) sprites[0].ddsd.dwSize = sizeof(DDSURFACEDESC2);
|
| | 634 | + else sprites[0].ddsd.dwSize = sizeof(DDSURFACEDESC);
|
| | 635 | + memcpy(&sprites[1], &sprites[0], sizeof(DDSPRITE));
|
| | 636 | + memcpy(&sprites[2], &sprites[0], sizeof(DDSPRITE));
|
| | 637 | + memcpy(&sprites[3], &sprites[0], sizeof(DDSPRITE));
|
| | 638 | + memcpy(&sprites[4], &sprites[0], sizeof(DDSPRITE));
|
| | 639 | + memcpy(&sprites[5], &sprites[0], sizeof(DDSPRITE));
|
| | 640 | + sprites[0].width = sprites[0].height = 256.0f;
|
| | 641 | + sprites[1].width = sprites[1].height = 256.0f;
|
| | 642 | + sprites[2].width = sprites[2].height = 16.0f;
|
| | 643 | + sprites[3].width = sprites[3].height = 16.0f;
|
| | 644 | + sprites[4].width = sprites[4].height = 8.0f;
|
| | 645 | + sprites[5].width = sprites[4].height = 6.0f;
|
| | 646 | + sprites[0].ddsd.dwWidth = sprites[0].ddsd.dwHeight =
|
| | 647 | + sprites[0].rect.right = sprites[0].rect.bottom = 256;
|
| | 648 | + sprites[1].ddsd.dwWidth = sprites[1].ddsd.dwHeight =
|
| | 649 | + sprites[1].rect.right = sprites[1].rect.bottom = 256;
|
| | 650 | + sprites[2].ddsd.dwWidth = sprites[2].ddsd.dwHeight =
|
| | 651 | + sprites[2].rect.right = sprites[2].rect.bottom = 16;
|
| | 652 | + sprites[3].ddsd.dwWidth = sprites[3].ddsd.dwHeight =
|
| | 653 | + sprites[3].rect.right = sprites[3].rect.bottom = 16;
|
| | 654 | + sprites[4].ddsd.dwWidth = sprites[4].ddsd.dwHeight =
|
| | 655 | + sprites[4].rect.right = sprites[4].rect.bottom = 8;
|
| | 656 | + sprites[5].ddsd.dwWidth = sprites[5].ddsd.dwHeight =
|
| | 657 | + sprites[5].rect.right = sprites[5].rect.bottom = 6;
|
| | 658 | + ddinterface->CreateSurface(&sprites[0].ddsd, &sprites[0].surface, NULL);
|
| | 659 | + ddinterface->CreateSurface(&sprites[1].ddsd, &sprites[1].surface, NULL);
|
| | 660 | + ddinterface->CreateSurface(&sprites[2].ddsd, &sprites[2].surface, NULL);
|
| | 661 | + ddinterface->CreateSurface(&sprites[3].ddsd, &sprites[3].surface, NULL);
|
| | 662 | + ddinterface->CreateSurface(&sprites[4].ddsd, &sprites[4].surface, NULL);
|
| | 663 | + ddinterface->CreateSurface(&sprites[5].ddsd, &sprites[5].surface, NULL);
|
| | 664 | + DDCAPS ddcaps;
|
| | 665 | + ddinterface->GetCaps(&ddcaps, NULL);
|
| | 666 | + DrawROPPatterns(ddsrender, sprites, backbuffers, ddver, bpp, ddcaps.dwRops,hWnd,palette);
|
| 639 | 667 | }
|
| 640 | 668 | }
|
| 641 | 669 |
|
| Index: dxgltest/Tests3D.cpp |
| — | — | @@ -16,9 +16,9 @@ |
| 17 | 17 | // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
| 18 | 18 |
|
| 19 | 19 | #include "common.h"
|
| | 20 | +#include "MultiDD.h"
|
| 20 | 21 | #include "tests.h"
|
| 21 | 22 | #include "surfacegen.h"
|
| 22 | | -#include "MultiDD.h"
|
| 23 | 23 | #include "timer.h"
|
| 24 | 24 | #include "misc.h"
|
| 25 | 25 | #define D3D_OVERLOADS
|
| Index: dxgltest/dxgltest.cpp |
| — | — | @@ -17,6 +17,7 @@ |
| 18 | 18 |
|
| 19 | 19 | #include "common.h"
|
| 20 | 20 | #include "dxgltest.h"
|
| | 21 | +#include "MultiDD.h"
|
| 21 | 22 | #include "tests.h"
|
| 22 | 23 |
|
| 23 | 24 | HINSTANCE hinstance;
|
| — | — | @@ -224,7 +225,8 @@ |
| 225 | 226 | {1, 7, 0, 0, false, 0.0, false, false, _T("Random GDI patterns (does not clear screen between paints)")},
|
| 226 | 227 | {1, 7, 0, 1, true, 60.0, false, false, _T("BltFast background and sprites")},
|
| 227 | 228 | {1, 7, 0, 0, false, 0.0, false, false, _T("Random color fill Blt() paterns")},
|
| 228 | | - {1, 7, 0, 0, false, 0.0, false, false, _T("Mouse pointer event test")}
|
| | 229 | + {1, 7, 0, 0, false, 0.0, false, false, _T("Mouse pointer event test")},
|
| | 230 | + {1, 7, 1, 1, true, 1.0, false, false, _T("Raster Operation Blt() test")}
|
| 229 | 231 | };
|
| 230 | 232 | const int END_2D = __LINE__ - 4;
|
| 231 | 233 | const int numtests2d = END_2D - START_2D;
|
| Index: dxgltest/surfacegen.cpp |
| — | — | @@ -16,6 +16,8 @@ |
| 17 | 17 | // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
| 18 | 18 |
|
| 19 | 19 | #include "common.h"
|
| | 20 | +#include "MultiDD.h"
|
| | 21 | +#include "tests.h"
|
| 20 | 22 | #include "surfacegen.h"
|
| 21 | 23 |
|
| 22 | 24 | #ifndef GRADIENT_FILL_RECT_H
|
| — | — | @@ -30,7 +32,178 @@ |
| 31 | 33 | 0x81,0xe1
|
| 32 | 34 | };
|
| 33 | 35 |
|
| | 36 | +const unsigned char blt_pattern_8[] = {
|
| | 37 | + 0xED, 0xED, 0xED, 0xF8, 0xF8, 0xF8,
|
| | 38 | + 0xED, 0xED, 0xED, 0xF8, 0xF8, 0xF8,
|
| | 39 | + 0xED, 0xED, 0xED, 0xF8, 0xF8, 0xF8,
|
| | 40 | + 0xF8, 0xF8, 0xF8, 0xED, 0xED, 0xED,
|
| | 41 | + 0xF8, 0xF8, 0xF8, 0xED, 0xED, 0xED,
|
| | 42 | + 0xF8, 0xF8, 0xF8, 0xED, 0xED, 0xED
|
| | 43 | +};
|
| 34 | 44 |
|
| | 45 | +const unsigned short blt_pattern_15[] = {
|
| | 46 | + 0x7DFF, 0x7DFF, 0x7DFF, 0x3DEF, 0x3DEF, 0x3DEF,
|
| | 47 | + 0x7DFF, 0x7DFF, 0x7DFF, 0x3DEF, 0x3DEF, 0x3DEF,
|
| | 48 | + 0x7DFF, 0x7DFF, 0x7DFF, 0x3DEF, 0x3DEF, 0x3DEF,
|
| | 49 | + 0x3DEF, 0x3DEF, 0x3DEF, 0x7DFF, 0x7DFF, 0x7DFF,
|
| | 50 | + 0x3DEF, 0x3DEF, 0x3DEF, 0x7DFF, 0x7DFF, 0x7DFF,
|
| | 51 | + 0x3DEF, 0x3DEF, 0x3DEF, 0x7DFF, 0x7DFF, 0x7DFF
|
| | 52 | +};
|
| | 53 | +
|
| | 54 | +const unsigned short blt_pattern_16[] = {
|
| | 55 | + 0xFBFF, 0xFBFF, 0xFBFF, 0x7BEF, 0x7BEF, 0x7BEF,
|
| | 56 | + 0xFBFF, 0xFBFF, 0xFBFF, 0x7BEF, 0x7BEF, 0x7BEF,
|
| | 57 | + 0xFBFF, 0xFBFF, 0xFBFF, 0x7BEF, 0x7BEF, 0x7BEF,
|
| | 58 | + 0x7BEF, 0x7BEF, 0x7BEF, 0xFBFF, 0xFBFF, 0xFBFF,
|
| | 59 | + 0x7BEF, 0x7BEF, 0x7BEF, 0xFBFF, 0xFBFF, 0xFBFF,
|
| | 60 | + 0x7BEF, 0x7BEF, 0x7BEF, 0xFBFF, 0xFBFF, 0xFBFF
|
| | 61 | +};
|
| | 62 | +
|
| | 63 | +const unsigned char blt_pattern_24[] = {
|
| | 64 | + 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
|
| | 65 | + 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
|
| | 66 | + 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
|
| | 67 | + 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF,
|
| | 68 | + 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF,
|
| | 69 | + 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF
|
| | 70 | +};
|
| | 71 | +
|
| | 72 | +const unsigned long blt_pattern_32[] = {
|
| | 73 | + 0xFF7FFF, 0xFF7FFF, 0xFF7FFF, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F,
|
| | 74 | + 0xFF7FFF, 0xFF7FFF, 0xFF7FFF, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F,
|
| | 75 | + 0xFF7FFF, 0xFF7FFF, 0xFF7FFF, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F,
|
| | 76 | + 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0xFF7FFF, 0xFF7FFF, 0xFF7FFF,
|
| | 77 | + 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0xFF7FFF, 0xFF7FFF, 0xFF7FFF,
|
| | 78 | + 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0xFF7FFF, 0xFF7FFF, 0xFF7FFF
|
| | 79 | +};
|
| | 80 | +
|
| | 81 | +const unsigned char back_pattern_8[] = {
|
| | 82 | + 0xF8, 0xF8, 0xF8, 0xF8, 0x07, 0x07, 0x07, 0x07,
|
| | 83 | + 0xF8, 0xF8, 0xF8, 0xF8, 0x07, 0x07, 0x07, 0x07,
|
| | 84 | + 0xF8, 0xF8, 0xF8, 0xF8, 0x07, 0x07, 0x07, 0x07,
|
| | 85 | + 0xF8, 0xF8, 0xF8, 0xF8, 0x07, 0x07, 0x07, 0x07,
|
| | 86 | + 0x07, 0x07, 0x07, 0x07, 0xF8, 0xF8, 0xF8, 0xF8,
|
| | 87 | + 0x07, 0x07, 0x07, 0x07, 0xF8, 0xF8, 0xF8, 0xF8,
|
| | 88 | + 0x07, 0x07, 0x07, 0x07, 0xF8, 0xF8, 0xF8, 0xF8,
|
| | 89 | + 0x07, 0x07, 0x07, 0x07, 0xF8, 0xF8, 0xF8, 0xF8
|
| | 90 | +};
|
| | 91 | +
|
| | 92 | +const unsigned short back_pattern_15[] = {
|
| | 93 | + 0x3DEF, 0x3DEF, 0x3DEF, 0x3DEF, 0x6318, 0x6318, 0x6318, 0x6318,
|
| | 94 | + 0x3DEF, 0x3DEF, 0x3DEF, 0x3DEF, 0x6318, 0x6318, 0x6318, 0x6318,
|
| | 95 | + 0x3DEF, 0x3DEF, 0x3DEF, 0x3DEF, 0x6318, 0x6318, 0x6318, 0x6318,
|
| | 96 | + 0x3DEF, 0x3DEF, 0x3DEF, 0x3DEF, 0x6318, 0x6318, 0x6318, 0x6318,
|
| | 97 | + 0x6318, 0x6318, 0x6318, 0x6318, 0x3DEF, 0x3DEF, 0x3DEF, 0x3DEF,
|
| | 98 | + 0x6318, 0x6318, 0x6318, 0x6318, 0x3DEF, 0x3DEF, 0x3DEF, 0x3DEF,
|
| | 99 | + 0x6318, 0x6318, 0x6318, 0x6318, 0x3DEF, 0x3DEF, 0x3DEF, 0x3DEF,
|
| | 100 | + 0x6318, 0x6318, 0x6318, 0x6318, 0x3DEF, 0x3DEF, 0x3DEF, 0x3DEF
|
| | 101 | +};
|
| | 102 | +
|
| | 103 | +const unsigned short back_pattern_16[] = {
|
| | 104 | + 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0xC618, 0xC618, 0xC618, 0xC618,
|
| | 105 | + 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0xC618, 0xC618, 0xC618, 0xC618,
|
| | 106 | + 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0xC618, 0xC618, 0xC618, 0xC618,
|
| | 107 | + 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF, 0xC618, 0xC618, 0xC618, 0xC618,
|
| | 108 | + 0xC618, 0xC618, 0xC618, 0xC618, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF,
|
| | 109 | + 0xC618, 0xC618, 0xC618, 0xC618, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF,
|
| | 110 | + 0xC618, 0xC618, 0xC618, 0xC618, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF,
|
| | 111 | + 0xC618, 0xC618, 0xC618, 0xC618, 0x7BEF, 0x7BEF, 0x7BEF, 0x7BEF
|
| | 112 | +};
|
| | 113 | +
|
| | 114 | +const unsigned short back_pattern_24[] = {
|
| | 115 | + 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
|
| | 116 | + 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
|
| | 117 | + 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
|
| | 118 | + 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
|
| | 119 | + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
|
| | 120 | + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
|
| | 121 | + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
|
| | 122 | + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F
|
| | 123 | +};
|
| | 124 | +
|
| | 125 | +const unsigned long back_pattern_32[] = {
|
| | 126 | + 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0xC0C0C0, 0xC0C0C0, 0xC0C0C0, 0xC0C0C0,
|
| | 127 | + 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0xC0C0C0, 0xC0C0C0, 0xC0C0C0, 0xC0C0C0,
|
| | 128 | + 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0xC0C0C0, 0xC0C0C0, 0xC0C0C0, 0xC0C0C0,
|
| | 129 | + 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0xC0C0C0, 0xC0C0C0, 0xC0C0C0, 0xC0C0C0,
|
| | 130 | + 0xC0C0C0, 0xC0C0C0, 0xC0C0C0, 0xC0C0C0, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F,
|
| | 131 | + 0xC0C0C0, 0xC0C0C0, 0xC0C0C0, 0xC0C0C0, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F,
|
| | 132 | + 0xC0C0C0, 0xC0C0C0, 0xC0C0C0, 0xC0C0C0, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F,
|
| | 133 | + 0xC0C0C0, 0xC0C0C0, 0xC0C0C0, 0xC0C0C0, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F, 0x7F7F7F
|
| | 134 | +};
|
| | 135 | +
|
| | 136 | +static const DWORD rop_codes[256] = {
|
| | 137 | + 0x00000042, 0x00010289, 0x00020C89, 0x000300AA, 0x00040C88, 0x000500A9, 0x00060865, 0x000702C5,
|
| | 138 | + 0x00080F08, 0x00090245, 0x000A0329, 0x000B0B2A, 0x000C0324, 0x000D0B25, 0x000E08A5, 0x000F0001,
|
| | 139 | + 0x00100C85, 0x001100A6, 0x00120868, 0x001302C8, 0x00140869, 0x001502C9, 0x00165CCA, 0x00171D54,
|
| | 140 | + 0x00180D59, 0x00191CC8, 0x001A06C5, 0x001B0768, 0x001C06CA, 0x001D0766, 0x001E01A5, 0x001F0385,
|
| | 141 | + 0x00200F09, 0x00210248, 0x00220326, 0x00230B24, 0x00240D55, 0x00251CC5, 0x002606C8, 0x00271868,
|
| | 142 | + 0x00280369, 0x002916CA, 0x002A0CC9, 0x002B1D58, 0x002C0784, 0x002D060A, 0x002E064A, 0x002F0E2A,
|
| | 143 | + 0x0030032A, 0x00310B28, 0x00320688, 0x00330008, 0x003406C4, 0x00351864, 0x003601A8, 0x00370388,
|
| | 144 | + 0x0038078A, 0x00390604, 0x003A0644, 0x003B0E24, 0x003C004A, 0x003D18A4, 0x003E1B24, 0x003F00EA,
|
| | 145 | + 0x00400F0A, 0x00410249, 0x00420D5D, 0x00431CC4, 0x00440328, 0x00450B29, 0x004606C6, 0x0047076A,
|
| | 146 | + 0x00480368, 0x004916C5, 0x004A0789, 0x004B0605, 0x004C0CC8, 0x004D1954, 0x004E0645, 0x004F0E25,
|
| | 147 | + 0x00500325, 0x00510B26, 0x005206C9, 0x00530764, 0x005408A9, 0x00550009, 0x005601A9, 0x00570389,
|
| | 148 | + 0x00580785, 0x00590609, 0x005A0049, 0x005B18A9, 0x005C0649, 0x005D0E29, 0x005E1B29, 0x005F00E9,
|
| | 149 | + 0x00600365, 0x006116C6, 0x00620786, 0x00630608, 0x00640788, 0x00650606, 0x00660046, 0x006718A8,
|
| | 150 | + 0x006858A6, 0x00690145, 0x006A01E9, 0x006B178A, 0x006C01E8, 0x006D1785, 0x006E1E28, 0x006F0C65,
|
| | 151 | + 0x00700CC5, 0x00711D5C, 0x00720648, 0x00730E28, 0x00740646, 0x00750E26, 0x00761B28, 0x007700E6,
|
| | 152 | + 0x007801E5, 0x00791786, 0x007A1E29, 0x007B0C68, 0x007C1E24, 0x007D0C69, 0x007E0955, 0x007F03C9,
|
| | 153 | + 0x008003E9, 0x00810975, 0x00820C49, 0x00831E04, 0x00840C48, 0x00851E05, 0x008617A6, 0x008701C5,
|
| | 154 | + 0x008800C6, 0x00891B08, 0x008A0E06, 0x008B0666, 0x008C0E08, 0x008D0668, 0x008E1D7C, 0x008F0CE5,
|
| | 155 | + 0x00900C45, 0x00911E08, 0x009217A9, 0x009301C4, 0x009417AA, 0x009501C9, 0x00960169, 0x0097588A,
|
| | 156 | + 0x00981888, 0x00990066, 0x009A0709, 0x009B07A8, 0x009C0704, 0x009D07A6, 0x009E16E6, 0x009F0345,
|
| | 157 | + 0x00A000C9, 0x00A11B05, 0x00A20E09, 0x00A30669, 0x00A41885, 0x00A50065, 0x00A60706, 0x00A707A5,
|
| | 158 | + 0x00A803A9, 0x00A90189, 0x00AA0029, 0x00AB0889, 0x00AC0744, 0x00AD06E9, 0x00AE0B06, 0x00AF0229,
|
| | 159 | + 0x00B00E05, 0x00B10665, 0x00B21974, 0x00B30CE8, 0x00B4070A, 0x00B507A9, 0x00B616E9, 0x00B70348,
|
| | 160 | + 0x00B8074A, 0x00B906E6, 0x00BA0B09, 0x00BB0226, 0x00BC1CE4, 0x00BD0D7D, 0x00BE0269, 0x00BF08C9,
|
| | 161 | + 0x00C000CA, 0x00C11B04, 0x00C21884, 0x00C3006A, 0x00C40E04, 0x00C50664, 0x00C60708, 0x00C707AA,
|
| | 162 | + 0x00C803A8, 0x00C90184, 0x00CA0749, 0x00CB06E4, 0x00CC0020, 0x00CD0888, 0x00CE0B08, 0x00CF0224,
|
| | 163 | + 0x00D00E0A, 0x00D1066A, 0x00D20705, 0x00D307A4, 0x00D41D78, 0x00D50CE9, 0x00D616EA, 0x00D70349,
|
| | 164 | + 0x00D80745, 0x00D906E8, 0x00DA1CE9, 0x00DB0D75, 0x00DC0B04, 0x00DD0228, 0x00DE0268, 0x00DF08C8,
|
| | 165 | + 0x00E003A5, 0x00E10185, 0x00E20746, 0x00E306EA, 0x00E40748, 0x00E506E5, 0x00E61CE8, 0x00E70D79,
|
| | 166 | + 0x00E81D74, 0x00E95CE6, 0x00EA02E9, 0x00EB0849, 0x00EC02E8, 0x00ED0848, 0x00EE0086, 0x00EF0A08,
|
| | 167 | + 0x00F00021, 0x00F10885, 0x00F20B05, 0x00F3022A, 0x00F40B0A, 0x00F50225, 0x00F60265, 0x00F708C5,
|
| | 168 | + 0x00F802E5, 0x00F90845, 0x00FA0089, 0x00FB0A09, 0x00FC008A, 0x00FD0A0A, 0x00FE02A9, 0x00FF0062
|
| | 169 | +};
|
| | 170 | +
|
| | 171 | +/*
|
| | 172 | +1 - Source
|
| | 173 | +2 - Dest
|
| | 174 | +4 - Pattern */
|
| | 175 | +const DWORD rop_texture_usage[256] = {
|
| | 176 | + 0, 7, 7, 5, 7, 6, 7, 7, 7, 7, 6, 7, 5, 7, 7, 4,
|
| | 177 | + 7, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
| | 178 | + 7, 7, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
| | 179 | + 5, 7, 7, 1, 7, 7, 7, 7, 7, 7, 7, 7, 5, 7, 7, 5,
|
| | 180 | + 7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
| | 181 | + 6, 7, 7, 7, 7, 2, 7, 7, 7, 7, 6, 7, 7, 7, 7, 6,
|
| | 182 | + 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
| | 183 | + 7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7, 7, 7,
|
| | 184 | + 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7, 7,
|
| | 185 | + 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7,
|
| | 186 | + 6, 7, 7, 7, 7, 6, 7, 7, 7, 7, 2, 7, 7, 7, 7, 6,
|
| | 187 | + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7,
|
| | 188 | + 5, 7, 7, 5, 7, 7, 7, 7, 7, 7, 7, 7, 1, 7, 7, 5,
|
| | 189 | + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 7,
|
| | 190 | + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7,
|
| | 191 | + 4, 7, 7, 5, 7, 6, 7, 7, 7, 7, 6, 7, 5, 7, 7, 0
|
| | 192 | +};
|
| | 193 | +
|
| | 194 | +BOOL IsRopCodeSupported(DWORD rop, DWORD *ropcaps)
|
| | 195 | +{
|
| | 196 | + DWORD rop32 = rop & 0xFFFFFF;
|
| | 197 | + DWORD ropindex = (rop >> 16) & 0xFF;
|
| | 198 | + DWORD ropword = ropindex >> 5;
|
| | 199 | + DWORD ropbit = ropindex & 0x1F;
|
| | 200 | + if (rop_codes[ropindex] != rop32) return FALSE;
|
| | 201 | + if ((ropcaps[ropword] >> ropbit) & 1)
|
| | 202 | + {
|
| | 203 | + return TRUE;
|
| | 204 | + }
|
| | 205 | + else return FALSE;
|
| | 206 | +}
|
| | 207 | +
|
| 35 | 208 | void DrawPalette(DDSURFACEDESC2 ddsd, unsigned char *buffer) // Palette test
|
| 36 | 209 | {
|
| 37 | 210 | DWORD x,y;
|
| — | — | @@ -152,7 +325,7 @@ |
| 153 | 326 | void DrawGradients(DDSURFACEDESC2 ddsd, unsigned char *buffer, HWND hwnd, LPDIRECTDRAWPALETTE palette, int type, DWORD color) // Gradients
|
| 154 | 327 | {
|
| 155 | 328 | HDC hdcwin = GetDC(hwnd);
|
| 156 | | - DWORD colors[1024];
|
| | 329 | + DWORD colors[256];
|
| 157 | 330 | int bitmode = BI_RGB;
|
| 158 | 331 | DWORD bitmasks[3];
|
| 159 | 332 | LPBYTE bits;
|
| — | — | @@ -735,3 +908,211 @@ |
| 736 | 909 | break;
|
| 737 | 910 | }
|
| 738 | 911 | }
|
| | 912 | +
|
| | 913 | +void DrawROPPatterns(MultiDirectDrawSurface *primary, DDSPRITE *sprites, int backbuffers, int ddver, int bpp, DWORD *ropcaps,
|
| | 914 | + HWND hwnd, LPDIRECTDRAWPALETTE palette)
|
| | 915 | +{
|
| | 916 | + HICON ico_dxglsm;
|
| | 917 | + HICON ico_x16;
|
| | 918 | + HDC hdc;
|
| | 919 | + DDSURFACEDESC2 ddsd;
|
| | 920 | + ZeroMemory(&ddsd, sizeof(DDSURFACEDESC2));
|
| | 921 | + if (ddver > 3)ddsd.dwSize = sizeof(DDSURFACEDESC2);
|
| | 922 | + else ddsd.dwSize = sizeof(DDSURFACEDESC);
|
| | 923 | + ico_dxglsm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_DXGLSM), IMAGE_ICON, 16, 16, 0);
|
| | 924 | + ico_x16 = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_X16), IMAGE_ICON, 16, 16, 0);
|
| | 925 | + sprites[2].surface->GetDC(&hdc);
|
| | 926 | + DrawIconEx(hdc, 0, 0, ico_dxglsm, 16, 16, 0, NULL, DI_NORMAL);
|
| | 927 | + sprites[2].surface->ReleaseDC(hdc);
|
| | 928 | + sprites[3].surface->GetDC(&hdc);
|
| | 929 | + DrawIconEx(hdc, 0, 0, ico_x16, 16, 16, 0, NULL, DI_NORMAL);
|
| | 930 | + sprites[3].surface->ReleaseDC(hdc);
|
| | 931 | + DestroyIcon(ico_x16);
|
| | 932 | + sprites[4].surface->GetSurfaceDesc(&ddsd);
|
| | 933 | + sprites[4].surface->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL);
|
| | 934 | + switch (bpp)
|
| | 935 | + {
|
| | 936 | + case 8:
|
| | 937 | + default:
|
| | 938 | + for (int i = 0; i < 8; i++)
|
| | 939 | + memcpy((unsigned char*)ddsd.lpSurface + (i*ddsd.lPitch), &back_pattern_8[8 * i], 8);
|
| | 940 | + break;
|
| | 941 | + case 15:
|
| | 942 | + for (int i = 0; i < 8; i++)
|
| | 943 | + memcpy((unsigned char *)ddsd.lpSurface + (i*ddsd.lPitch), &back_pattern_15[8 * i], 16);
|
| | 944 | + break;
|
| | 945 | + case 16:
|
| | 946 | + for (int i = 0; i < 8; i++)
|
| | 947 | + memcpy((unsigned char *)ddsd.lpSurface + (i*ddsd.lPitch), &back_pattern_16[8 * i], 16);
|
| | 948 | + break;
|
| | 949 | + case 24:
|
| | 950 | + for (int i = 0; i < 8; i++)
|
| | 951 | + memcpy((unsigned char *)ddsd.lpSurface + (i*ddsd.lPitch), &back_pattern_24[24 * i], 24);
|
| | 952 | + break;
|
| | 953 | + case 32:
|
| | 954 | + for (int i = 0; i < 8; i++)
|
| | 955 | + memcpy((unsigned char *)ddsd.lpSurface + (i*ddsd.lPitch), &back_pattern_32[8 * i], 32);
|
| | 956 | + break;
|
| | 957 | + }
|
| | 958 | + sprites[4].surface->Unlock(NULL);
|
| | 959 | + sprites[5].surface->GetSurfaceDesc(&ddsd);
|
| | 960 | + sprites[5].surface->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL);
|
| | 961 | + switch (bpp)
|
| | 962 | + {
|
| | 963 | + case 8:
|
| | 964 | + default:
|
| | 965 | + for (int i = 0; i < 6; i++)
|
| | 966 | + memcpy((unsigned char*)ddsd.lpSurface + (i*ddsd.lPitch), &blt_pattern_8[6 * i], 6);
|
| | 967 | + break;
|
| | 968 | + case 15:
|
| | 969 | + for (int i = 0; i < 6; i++)
|
| | 970 | + memcpy((unsigned char *)ddsd.lpSurface + (i*ddsd.lPitch), &blt_pattern_15[6 * i], 12);
|
| | 971 | + break;
|
| | 972 | + case 16:
|
| | 973 | + for (int i = 0; i < 6; i++)
|
| | 974 | + memcpy((unsigned char *)ddsd.lpSurface + (i*ddsd.lPitch), &blt_pattern_16[6 * i], 12);
|
| | 975 | + break;
|
| | 976 | + case 24:
|
| | 977 | + for (int i = 0; i < 6; i++)
|
| | 978 | + memcpy((unsigned char *)ddsd.lpSurface + (i*ddsd.lPitch), &blt_pattern_24[18 * i], 18);
|
| | 979 | + break;
|
| | 980 | + case 32:
|
| | 981 | + for (int i = 0; i < 6; i++)
|
| | 982 | + memcpy((unsigned char *)ddsd.lpSurface + (i*ddsd.lPitch), &blt_pattern_32[6 * i], 24);
|
| | 983 | + break;
|
| | 984 | + }
|
| | 985 | + sprites[5].surface->Unlock(NULL);
|
| | 986 | + int bltx, blty;
|
| | 987 | + RECT bltrect;
|
| | 988 | + DDBLTFX bltfx;
|
| | 989 | + ZeroMemory(&bltfx, sizeof(DDBLTFX));
|
| | 990 | + bltfx.dwSize = sizeof(DDBLTFX);
|
| | 991 | + for (int y = 0; y < 32; y++)
|
| | 992 | + {
|
| | 993 | + for (int x = 0; x < 32; x++)
|
| | 994 | + {
|
| | 995 | + bltx = x * 8;
|
| | 996 | + blty = y * 8;
|
| | 997 | + bltrect.left = bltx;
|
| | 998 | + bltrect.right = bltx + 8;
|
| | 999 | + bltrect.top = blty;
|
| | 1000 | + bltrect.bottom = blty + 8;
|
| | 1001 | + sprites[0].surface->Blt(&bltrect, sprites[4].surface, NULL, DDBLT_WAIT, NULL);
|
| | 1002 | + sprites[1].surface->Blt(&bltrect, sprites[4].surface, NULL, DDBLT_WAIT, NULL);
|
| | 1003 | + }
|
| | 1004 | + }
|
| | 1005 | + for (int i = 0; i < 256; i++)
|
| | 1006 | + {
|
| | 1007 | + bltx = (i & 0xF) * 16;
|
| | 1008 | + blty = (i >> 4) * 16;
|
| | 1009 | + bltrect.left = bltx;
|
| | 1010 | + bltrect.right = bltx + 16;
|
| | 1011 | + bltrect.top = blty;
|
| | 1012 | + bltrect.bottom = blty + 16;
|
| | 1013 | + if (IsRopCodeSupported(rop_codes[i], ropcaps))
|
| | 1014 | + {
|
| | 1015 | + if (rop_texture_usage[i] & 4) bltfx.lpDDSPattern = (LPDIRECTDRAWSURFACE)sprites[5].surface->GetSurface();
|
| | 1016 | + else bltfx.lpDDSPattern = NULL;
|
| | 1017 | + sprites[0].surface->Blt(&bltrect, sprites[2].surface, NULL, DDBLT_ROP | DDBLT_WAIT, &bltfx);
|
| | 1018 | + }
|
| | 1019 | + else
|
| | 1020 | + {
|
| | 1021 | + sprites[0].surface->Blt(&bltrect, sprites[3].surface, NULL, DDBLT_WAIT, NULL);
|
| | 1022 | + }
|
| | 1023 | + }
|
| | 1024 | + HDC hdcwin = GetDC(hwnd);
|
| | 1025 | + DWORD colors[256];
|
| | 1026 | + int bitmode = BI_RGB;
|
| | 1027 | + DWORD bitmasks[3];
|
| | 1028 | + LPBYTE bits;
|
| | 1029 | + BITMAPINFO *bmi = (BITMAPINFO*)malloc(sizeof(BITMAPINFOHEADER)+1024);
|
| | 1030 | + if (!bmi) return;
|
| | 1031 | + ZeroMemory(bmi, sizeof(BITMAPINFOHEADER)+1024);
|
| | 1032 | + if (ddsd.ddpfPixelFormat.dwRGBBitCount == 8)
|
| | 1033 | + {
|
| | 1034 | + palette->GetEntries(0, 0, 256, (LPPALETTEENTRY)colors);
|
| | 1035 | + for (int i = 0; i < 256; i++)
|
| | 1036 | + colors[i] = ((colors[i] & 0x0000FF) << 16) | (colors[i] & 0x00FF00) | ((colors[i] & 0xFF0000) >> 16);
|
| | 1037 | + memcpy(bmi->bmiColors, colors, 1024);
|
| | 1038 | + }
|
| | 1039 | + if (ddsd.ddpfPixelFormat.dwRGBBitCount == 16)
|
| | 1040 | + {
|
| | 1041 | + bitmode = BI_BITFIELDS;
|
| | 1042 | + bitmasks[0] = ddsd.ddpfPixelFormat.dwRBitMask;
|
| | 1043 | + bitmasks[1] = ddsd.ddpfPixelFormat.dwGBitMask;
|
| | 1044 | + bitmasks[2] = ddsd.ddpfPixelFormat.dwBBitMask;
|
| | 1045 | + memcpy(bmi->bmiColors, bitmasks, 3 * sizeof(DWORD));
|
| | 1046 | + }
|
| | 1047 | + bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
| | 1048 | + bmi->bmiHeader.biWidth = 16;
|
| | 1049 | + bmi->bmiHeader.biHeight = -16;
|
| | 1050 | + bmi->bmiHeader.biPlanes = 1;
|
| | 1051 | + bmi->bmiHeader.biCompression = bitmode;
|
| | 1052 | + bmi->bmiHeader.biBitCount = (WORD)ddsd.ddpfPixelFormat.dwRGBBitCount;
|
| | 1053 | + HBITMAP bmpicon = CreateDIBSection(hdcwin, bmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0);
|
| | 1054 | + HDC hdcicon = CreateCompatibleDC(hdcwin);
|
| | 1055 | + HGDIOBJ hbmiconold = SelectObject(hdcicon, bmpicon);
|
| | 1056 | + DrawIconEx(hdcicon, 0, 0, ico_dxglsm, 16, 16, 0, NULL, DI_NORMAL);
|
| | 1057 | + DestroyIcon(ico_dxglsm);
|
| | 1058 | + bmi->bmiHeader.biWidth = 6;
|
| | 1059 | + bmi->bmiHeader.biHeight = -6;
|
| | 1060 | + HBITMAP bmppattern = CreateDIBSection(hdcwin, bmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0);
|
| | 1061 | + int bmpwidth = NextMultipleOf4((bmi->bmiHeader.biBitCount*bmi->bmiHeader.biWidth) / 8);
|
| | 1062 | + switch (bpp)
|
| | 1063 | + {
|
| | 1064 | + case 8:
|
| | 1065 | + default:
|
| | 1066 | + for (int i = 0; i < 6; i++)
|
| | 1067 | + memcpy((unsigned char*)bits + (i*bmpwidth), &blt_pattern_8[6 * i], 6);
|
| | 1068 | + break;
|
| | 1069 | + case 15:
|
| | 1070 | + for (int i = 0; i < 6; i++)
|
| | 1071 | + memcpy((unsigned char *)bits + (i*bmpwidth), &blt_pattern_15[6 * i], 12);
|
| | 1072 | + break;
|
| | 1073 | + case 16:
|
| | 1074 | + for (int i = 0; i < 6; i++)
|
| | 1075 | + memcpy((unsigned char *)bits + (i*bmpwidth), &blt_pattern_16[6 * i], 12);
|
| | 1076 | + break;
|
| | 1077 | + case 24:
|
| | 1078 | + for (int i = 0; i < 6; i++)
|
| | 1079 | + memcpy((unsigned char *)bits + (i*bmpwidth), &blt_pattern_24[18 * i], 18);
|
| | 1080 | + break;
|
| | 1081 | + case 32:
|
| | 1082 | + for (int i = 0; i < 6; i++)
|
| | 1083 | + memcpy((unsigned char *)bits + (i*bmpwidth), &blt_pattern_32[6 * i], 24);
|
| | 1084 | + break;
|
| | 1085 | + }
|
| | 1086 | + HBRUSH hbrpattern = CreatePatternBrush(bmppattern);
|
| | 1087 | + HDC hdcblt;
|
| | 1088 | + sprites[1].surface->GetDC(&hdcblt);
|
| | 1089 | + HGDIOBJ hbrold = SelectObject(hdcblt, hbrpattern);
|
| | 1090 | + for (int i = 0; i < 256; i++)
|
| | 1091 | + {
|
| | 1092 | + bltx = (i & 0xF) * 16;
|
| | 1093 | + blty = (i >> 4) * 16;
|
| | 1094 | + BitBlt(hdcblt, bltx, blty, 16, 16, hdcicon, 0, 0, rop_codes[i]);
|
| | 1095 | + }
|
| | 1096 | + SelectObject(hdcblt, hbrold);
|
| | 1097 | + sprites[1].surface->ReleaseDC(hdcblt);
|
| | 1098 | + primary->GetDC(&hdcblt);
|
| | 1099 | + SetBkColor(hdcblt, RGB(0, 0, 255));
|
| | 1100 | + SetTextColor(hdcblt, RGB(255, 255, 255));
|
| | 1101 | + TextOut(hdcblt, 0, 0, _T("Screen 0: DDraw Blt"),20);
|
| | 1102 | + primary->ReleaseDC(hdcblt);
|
| | 1103 | + primary->BltFast(0, 16, sprites[0].surface, NULL, DDBLTFAST_WAIT);
|
| | 1104 | + if (backbuffers)
|
| | 1105 | + {
|
| | 1106 | + MultiDirectDrawSurface *back;
|
| | 1107 | + DDSCAPS2 ddscaps;
|
| | 1108 | + ZeroMemory(&ddscaps, sizeof(DDSCAPS2));
|
| | 1109 | + ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
|
| | 1110 | + primary->GetAttachedSurface(&ddscaps, &back);
|
| | 1111 | + back->GetDC(&hdcblt);
|
| | 1112 | + SetBkColor(hdcblt, RGB(0, 0, 255));
|
| | 1113 | + SetTextColor(hdcblt, RGB(255, 255, 255));
|
| | 1114 | + TextOut(hdcblt, 0, 0, _T("Screen 0: GDI Blt"), 18);
|
| | 1115 | + back->ReleaseDC(hdcblt);
|
| | 1116 | + back->BltFast(0, 16, sprites[1].surface, NULL, DDBLTFAST_WAIT);
|
| | 1117 | + back->Release();
|
| | 1118 | + }
|
| | 1119 | +} |
| \ No newline at end of file |
| Index: dxgltest/surfacegen.h |
| — | — | @@ -22,5 +22,7 @@ |
| 23 | 23 | void DrawPalette(DDSURFACEDESC2 ddsd, unsigned char *buffer); // Palette test
|
| 24 | 24 | void DrawGradients(DDSURFACEDESC2 ddsd, unsigned char *buffer, HWND hwnd, LPDIRECTDRAWPALETTE palette, int type, DWORD color); // Gradients
|
| 25 | 25 | void DrawGDIPatterns(DDSURFACEDESC2 ddsd, HDC hDC, int type); // GDI pattern test
|
| | 26 | +void DrawROPPatterns(MultiDirectDrawSurface *primary, DDSPRITE *sprites, int backbuffers, int ddver, int bpp, DWORD *ropcaps,
|
| | 27 | + HWND hwnd, LPDIRECTDRAWPALETTE palette); // ROP pattern test
|
| 26 | 28 |
|
| 27 | 29 | #endif //_SURFACEGEN_H |
| \ No newline at end of file |
| Index: dxgltest/tests.h |
| — | — | @@ -19,6 +19,19 @@ |
| 20 | 20 | #ifndef _TESTS_H
|
| 21 | 21 | #define _TESTS_H
|
| 22 | 22 |
|
| | 23 | +typedef struct
|
| | 24 | +{
|
| | 25 | + MultiDirectDrawSurface *surface;
|
| | 26 | + DDSURFACEDESC2 ddsd;
|
| | 27 | + float width;
|
| | 28 | + float height;
|
| | 29 | + float x;
|
| | 30 | + float y;
|
| | 31 | + float xvelocity;
|
| | 32 | + float yvelocity;
|
| | 33 | + DWORD bltflags;
|
| | 34 | + RECT rect;
|
| | 35 | +} DDSPRITE;
|
| 23 | 36 |
|
| 24 | 37 | void RunTest2D(int testnum, int width, int height, int bpp, int refresh, int backbuffers, int apiver,
|
| 25 | 38 | double fps, bool fullscreen, bool resizable);
|