4 IDirect3DTexture8 *TexScreen=NULL;
\r
5 int TexWidth=0,TexHeight=0;
\r
7 // Blank the texture:
\r
8 static int TexBlank()
\r
10 D3DLOCKED_RECT lock={0,NULL};
\r
11 unsigned char *dest=NULL;
\r
14 TexScreen->LockRect(0,&lock,NULL,0); if (lock.pBits==NULL) return 1;
\r
16 dest=(unsigned char *)lock.pBits;
\r
17 for (y=0; y<TexHeight; y++,line+=lock.Pitch)
\r
19 memset(dest+line,0,TexWidth<<1);
\r
22 TexScreen->UnlockRect(0);
\r
31 Device->CreateTexture(TexWidth,TexHeight,1,0,D3DFMT_R5G6B5,D3DPOOL_MANAGED,&TexScreen);
\r
32 if (TexScreen==NULL) return 1;
\r
38 void TexScreenExit()
\r
41 TexWidth=TexHeight=0;
\r
44 // Copy screen to a swizzled texture
\r
45 int TexScreenSwizzle()
\r
47 D3DLOCKED_RECT lock={0,NULL};
\r
48 unsigned char *dest=NULL;
\r
49 int y=0,sy=0,mask=0;
\r
50 unsigned short *ps=NULL;
\r
52 mask=TexWidth*TexHeight-1;
\r
54 TexScreen->LockRect(0,&lock,NULL,0); if (lock.pBits==NULL) return 1;
\r
56 dest=(unsigned char *)lock.pBits;
\r
59 // Write to swizzled locations:
\r
60 for (y=0,sy=0; y<EmuHeight; y++,sy++)
\r
65 for (x=0,sx=0; x<EmuWidth; x++,sx++)
\r
70 addr=sx&sy&mask; // Calculate swizzled address
\r
72 ((unsigned short *)dest)[addr]=*ps++;
\r
76 TexScreen->UnlockRect(0);
\r
81 // Copy screen to a linear texture:
\r
82 int TexScreenLinear()
\r
84 D3DLOCKED_RECT lock={0,NULL};
\r
85 unsigned char *dest=NULL;
\r
87 unsigned short *ps=NULL;
\r
89 TexScreen->LockRect(0,&lock,NULL,0); if (lock.pBits==NULL) return 1;
\r
91 dest=(unsigned char *)lock.pBits;
\r
94 for (y=0; y<EmuHeight; y++,line+=lock.Pitch)
\r
99 for (x=0; x<EmuWidth; x++,addr+=2)
\r
101 *(unsigned int *)(dest+addr)=*ps++;
\r
105 TexScreen->UnlockRect(0);
\r