fixes for my last commit:

chage the global format of the screenshots to bmp, is correctly supported by both plugins and is faster.
reverted the changes in safe texture cache, will try to make them more stable then commit them, this should fix compilation in linux and macand error introduced in MP games
corrected all the issues commented by ector, thanks for the comments alway is good that the code is revised by others to find missed spots.
please report any remaining issue to solve them.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5001 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Rodolfo Osvaldo Bogado 2010-02-03 14:13:03 +00:00
parent 9e2bbec47f
commit e98a273b54
7 changed files with 38 additions and 13 deletions

View File

@ -539,9 +539,9 @@ static inline std::string GenerateScreenshotName()
//append gameId, tempname only contains the folder here.
tempname += gameId;
name = StringFromFormat("%s-%d.png", tempname.c_str(), index);
name = StringFromFormat("%s-%d.bmp", tempname.c_str(), index);
while(File::Exists(name.c_str()))
name = StringFromFormat("%s-%d.png", tempname.c_str(), ++index);
name = StringFromFormat("%s-%d.bmp", tempname.c_str(), ++index);
return name;
}

View File

@ -88,7 +88,7 @@ int TexDecoder_GetTextureSizeInBytes(int width, int height, int format)
return (width * height * TexDecoder_GetTexelSizeInNibbles(format)) / 2;
}
u64 TexDecoder_GetTlutHash(const u8* src, int len)
/*u64 TexDecoder_GetTlutHash(const u8* src, int len)
{
//char str[40000], st[20]; str[0]='\0';for (int i=0;i<len;i++){sprintf(st,"%02x ",src[i]);strcat(str,st);}
u64 hash = 0xbeefbabe1337c0de;
@ -111,6 +111,36 @@ u64 TexDecoder_GetSafeTextureHash(const u8 *src, int width, int height, int texf
}
return hash;
}
*/
u32 TexDecoder_GetTlutHash(const u8* src, int len)
{
//char str[40000], st[20]; str[0]='\0';for (int i=0;i<len;i++){sprintf(st,"%02x ",src[i]);strcat(str,st);}
u32 hash = 0xbeefbabe;
for (int i = 0; i < len / 4; i ++) {
hash = _rotl(hash, 7) ^ ((u32 *)src)[i];
hash += 7; // to add a bit more entropy/mess in here
}
return hash;
}
u32 TexDecoder_GetSafeTextureHash(const u8 *src, int width, int height, int texformat, u32 seed)
{
int sz = TexDecoder_GetTextureSizeInBytes(width, height, texformat);
u32 hash = seed ? seed : 0x1337c0de;
if (sz < 2048) {
for (int i = 0; i < sz / 4; i += 13) {
hash = _rotl(hash, 19) ^ ((u32 *)src)[i];
}
return hash;
} else {
int step = sz / 23 / 4;
for (int i = 0; i < sz / 4; i += step) {
hash = _rotl(hash, 19) ^ ((u32 *)src)[i];
}
}
return hash;
}
int TexDecoder_GetBlockWidthInTexels(u32 format)
{

View File

@ -260,7 +260,7 @@ void ComputeDrawRectangle(int backbuffer_width, int backbuffer_height, bool flip
int YOffset = (int)(FloatYOffset + 0.5f);
int iWhidth = (int)ceil(FloatGLWidth);
int iHeight = (int)ceil(FloatGLHeight);
iWhidth -= iWhidth % 4;
iWhidth -= iWhidth % 4; // ensure divisibility by 4 to make it compatible with all the video encoders
iHeight -= iHeight % 4;
rc->left = XOffset;
rc->top = flip ? (int)(YOffset + iHeight) : YOffset;

View File

@ -17,7 +17,6 @@
#include "D3DBase.h"
#include "D3DTexture.h"
#include "Math.h"
namespace D3D
{
@ -121,7 +120,7 @@ LPDIRECT3DTEXTURE9 CreateTexture2D(const u8* buffer, const int width, const int
}
break;
case D3DFMT_DXT1:
memcpy(Lock.pBits,buffer,(size_t)(ceilf(((float)width)/4.0f) * ceilf(((float)height)/4.0f) * 8));
memcpy(Lock.pBits,buffer,((width+3)/4)*((height+3)/4)*8);
break;
default:
PanicAlert("D3D: Invalid texture format %i", fmt);
@ -240,7 +239,7 @@ void ReplaceTexture2D(LPDIRECT3DTEXTURE9 pTexture, const u8* buffer, const int w
}
break;
case D3DFMT_DXT1:
memcpy(Lock.pBits, buffer, (size_t)(ceilf(((float)width)/4.0f) * ceilf(((float)height)/4.0f) * 8));
memcpy(Lock.pBits,buffer,((width+3)/4)*((height+3)/4)*8);
break;
}
pTexture->UnlockRect(level);

View File

@ -380,7 +380,6 @@ void drawShadedTexQuad(IDirect3DTexture9 *texture,
dev->SetVertexShader(Vshader);
dev->SetPixelShader(PShader);
D3D::SetTexture(0, texture);
dev->SetVertexDeclaration(NULL);
dev->SetFVF(D3DFVF_XYZW | D3DFVF_TEX2);
dev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, coords, sizeof(Q2DVertex));
RestoreShaders();
@ -415,7 +414,6 @@ void drawFSAATexQuad(IDirect3DTexture9 *texture,
dev->SetPixelShader(PShader);
D3D::SetTexture(0, texture);
D3D::SetTexture(1, Depthtexture);
dev->SetVertexDeclaration(NULL);
dev->SetFVF(D3DFVF_XYZW | D3DFVF_TEX3);
dev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, coords, sizeof(Q2DVertex));
RestoreShaders();
@ -431,8 +429,6 @@ void drawClearQuad(u32 Color,float z,IDirect3DPixelShader9 *PShader,IDirect3DVer
};
dev->SetVertexShader(Vshader);
dev->SetPixelShader(PShader);
D3D::SetTexture(0, 0);
dev->SetVertexDeclaration(NULL);
dev->SetFVF(D3DFVF_XYZW | D3DFVF_DIFFUSE);
dev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, coords, sizeof(Q2DVertex));
RestoreShaders();

View File

@ -590,7 +590,7 @@ static void EFBTextureToD3DBackBuffer(const EFBRectangle& sourceRc)
if(s_bScreenshot)
{
s_criticalScreenshot.Enter();
D3DXSaveSurfaceToFileA(s_sScreenshotName, D3DXIFF_JPG, D3D::GetBackBufferSurface(), NULL, &destinationrect);
D3DXSaveSurfaceToFileA(s_sScreenshotName, D3DXIFF_BMP, D3D::GetBackBufferSurface(), NULL, &destinationrect);
s_bScreenshot = false;
s_criticalScreenshot.Leave();
}

View File

@ -1301,7 +1301,7 @@ THREAD_RETURN TakeScreenshot(void *pArgs)
// Save the screenshot and finally kill the wxImage object
// This is really expensive when saving to PNG, but not at all when using BMP
threadStruct->img->SaveFile(wxString::FromAscii(threadStruct->filename.c_str()), wxBITMAP_TYPE_PNG);
threadStruct->img->SaveFile(wxString::FromAscii(threadStruct->filename.c_str()), wxBITMAP_TYPE_BMP);
threadStruct->img->Destroy();
// Show success messages