mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
initial import
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@2 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
2cadbd5e56
commit
cc68a136aa
341 changed files with 180839 additions and 0 deletions
107
platform/win32/GenaDrive/TexScreen.cpp
Normal file
107
platform/win32/GenaDrive/TexScreen.cpp
Normal file
|
@ -0,0 +1,107 @@
|
|||
|
||||
#include "app.h"
|
||||
|
||||
IDirect3DTexture8 *TexScreen=NULL;
|
||||
int TexWidth=0,TexHeight=0;
|
||||
|
||||
// Blank the texture:
|
||||
static int TexBlank()
|
||||
{
|
||||
D3DLOCKED_RECT lock={0,NULL};
|
||||
unsigned char *dest=NULL;
|
||||
int y=0,line=0;
|
||||
|
||||
TexScreen->LockRect(0,&lock,NULL,0); if (lock.pBits==NULL) return 1;
|
||||
|
||||
dest=(unsigned char *)lock.pBits;
|
||||
for (y=0; y<TexHeight; y++,line+=lock.Pitch)
|
||||
{
|
||||
memset(dest+line,0,TexWidth<<1);
|
||||
}
|
||||
|
||||
TexScreen->UnlockRect(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int TexScreenInit()
|
||||
{
|
||||
TexWidth =512;
|
||||
TexHeight=512;
|
||||
|
||||
Device->CreateTexture(TexWidth,TexHeight,1,0,D3DFMT_R5G6B5,D3DPOOL_MANAGED,&TexScreen);
|
||||
if (TexScreen==NULL) return 1;
|
||||
|
||||
TexBlank();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void TexScreenExit()
|
||||
{
|
||||
RELEASE(TexScreen)
|
||||
TexWidth=TexHeight=0;
|
||||
}
|
||||
|
||||
// Copy screen to a swizzled texture
|
||||
int TexScreenSwizzle()
|
||||
{
|
||||
D3DLOCKED_RECT lock={0,NULL};
|
||||
unsigned char *dest=NULL;
|
||||
int y=0,sy=0,mask=0;
|
||||
unsigned short *ps=NULL;
|
||||
|
||||
mask=TexWidth*TexHeight-1;
|
||||
|
||||
TexScreen->LockRect(0,&lock,NULL,0); if (lock.pBits==NULL) return 1;
|
||||
|
||||
dest=(unsigned char *)lock.pBits;
|
||||
ps=EmuScreen;
|
||||
|
||||
// Write to swizzled locations:
|
||||
for (y=0,sy=0; y<EmuHeight; y++,sy++)
|
||||
{
|
||||
int x=0,sx=0;
|
||||
sy|=0x55555555;
|
||||
|
||||
for (x=0,sx=0; x<EmuWidth; x++,sx++)
|
||||
{
|
||||
int addr=0;
|
||||
|
||||
sx|=0xaaaaaaaa;
|
||||
addr=sx&sy&mask; // Calculate swizzled address
|
||||
|
||||
((unsigned short *)dest)[addr]=*ps++;
|
||||
}
|
||||
}
|
||||
|
||||
TexScreen->UnlockRect(0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Copy screen to a linear texture:
|
||||
int TexScreenLinear()
|
||||
{
|
||||
D3DLOCKED_RECT lock={0,NULL};
|
||||
unsigned char *dest=NULL;
|
||||
int y=0,line=0;
|
||||
unsigned short *ps=NULL;
|
||||
|
||||
TexScreen->LockRect(0,&lock,NULL,0); if (lock.pBits==NULL) return 1;
|
||||
|
||||
dest=(unsigned char *)lock.pBits;
|
||||
ps=EmuScreen;
|
||||
|
||||
for (y=0; y<EmuHeight; y++,line+=lock.Pitch)
|
||||
{
|
||||
int x=0;
|
||||
int addr=line;
|
||||
|
||||
for (x=0; x<EmuWidth; x++,addr+=2)
|
||||
{
|
||||
*(unsigned int *)(dest+addr)=*ps++;
|
||||
}
|
||||
}
|
||||
|
||||
TexScreen->UnlockRect(0);
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue