mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-11 00:29:11 +01:00
Consolidate the three implementations of Decode5A3 found in Core into one. Fix some warnings.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2364 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
8276ca3b21
commit
aff0f1fbe3
@ -554,6 +554,14 @@
|
|||||||
RelativePath=".\Src\ChunkFile.h"
|
RelativePath=".\Src\ChunkFile.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Src\ColorUtil.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Src\ColorUtil.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\Src\Common.h"
|
RelativePath=".\Src\Common.h"
|
||||||
>
|
>
|
||||||
|
56
Source/Core/Common/Src/ColorUtil.cpp
Normal file
56
Source/Core/Common/Src/ColorUtil.cpp
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
// Copyright (C) 2003-2008 Dolphin Project.
|
||||||
|
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, version 2.0.
|
||||||
|
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License 2.0 for more details.
|
||||||
|
|
||||||
|
// A copy of the GPL 2.0 should have been included with the program.
|
||||||
|
// If not, see http://www.gnu.org/licenses/
|
||||||
|
|
||||||
|
// Official SVN repository and contact information can be found at
|
||||||
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
|
#include "Common.h"
|
||||||
|
#include "ColorUtil.h"
|
||||||
|
|
||||||
|
namespace ColorUtil
|
||||||
|
{
|
||||||
|
|
||||||
|
const int lut5to8[] = { 0x00,0x08,0x10,0x18,0x20,0x29,0x31,0x39,
|
||||||
|
0x41,0x4A,0x52,0x5A,0x62,0x6A,0x73,0x7B,
|
||||||
|
0x83,0x8B,0x94,0x9C,0xA4,0xAC,0xB4,0xBD,
|
||||||
|
0xC5,0xCD,0xD5,0xDE,0xE6,0xEE,0xF6,0xFF };
|
||||||
|
const int lut4to8[] = { 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,
|
||||||
|
0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF };
|
||||||
|
const int lut3to8[] = { 0x00,0x24,0x48,0x6D,0x91,0xB6,0xDA,0xFF };
|
||||||
|
|
||||||
|
u32 Decode5A3(u16 val)
|
||||||
|
{
|
||||||
|
const u32 bg_color = 0x00000000;
|
||||||
|
|
||||||
|
int r, g, b, a;
|
||||||
|
|
||||||
|
if (val & 0x8000)
|
||||||
|
{
|
||||||
|
r = lut5to8[(val >> 10) & 0x1f];
|
||||||
|
g = lut5to8[(val >> 5) & 0x1f];
|
||||||
|
b = lut5to8[(val) & 0x1f];
|
||||||
|
a = 0xFF;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
a = lut3to8[(val >> 12) & 0x7];
|
||||||
|
r = (lut4to8[(val >> 8) & 0xf] * a + (bg_color & 0xFF) * (255 - a)) / 255;
|
||||||
|
g = (lut4to8[(val >> 4) & 0xf] * a + ((bg_color >> 8) & 0xFF) * (255 - a)) / 255;
|
||||||
|
b = (lut4to8[(val) & 0xf] * a + ((bg_color >> 16) & 0xFF) * (255 - a)) / 255;
|
||||||
|
a = 0xFF;
|
||||||
|
}
|
||||||
|
return (a << 24) | (r << 16) | (g << 8) | b;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
28
Source/Core/Common/Src/ColorUtil.h
Normal file
28
Source/Core/Common/Src/ColorUtil.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// Copyright (C) 2003-2008 Dolphin Project.
|
||||||
|
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, version 2.0.
|
||||||
|
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License 2.0 for more details.
|
||||||
|
|
||||||
|
// A copy of the GPL 2.0 should have been included with the program.
|
||||||
|
// If not, see http://www.gnu.org/licenses/
|
||||||
|
|
||||||
|
// Official SVN repository and contact information can be found at
|
||||||
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
|
#ifndef _COLORUTIL_H
|
||||||
|
#define _COLORUTIL_H
|
||||||
|
|
||||||
|
namespace ColorUtil
|
||||||
|
{
|
||||||
|
|
||||||
|
u32 Decode5A3(u16 val);
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
#endif
|
@ -76,7 +76,7 @@ u32 Ascii2Hex(std::string _Text)
|
|||||||
u32 Result = 0;
|
u32 Result = 0;
|
||||||
|
|
||||||
// Max 32-bit values are supported
|
// Max 32-bit values are supported
|
||||||
int Length = _Text.length();
|
size_t Length = _Text.length();
|
||||||
if (Length > 4)
|
if (Length > 4)
|
||||||
Length = 4;
|
Length = 4;
|
||||||
|
|
||||||
|
@ -36,17 +36,15 @@ u32 timeGetTime()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
namespace Common
|
namespace Common
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Initiate, Start, Stop, and Update the time
|
// Initiate, Start, Stop, and Update the time
|
||||||
// ---------------
|
// ---------------
|
||||||
|
|
||||||
// Set initial values for the class
|
// Set initial values for the class
|
||||||
Timer::Timer(void)
|
Timer::Timer()
|
||||||
: m_LastTime(0), m_StartTime(0), m_Running(false)
|
: m_LastTime(0), m_StartTime(0), m_Running(false)
|
||||||
{
|
{
|
||||||
Update();
|
Update();
|
||||||
@ -72,7 +70,7 @@ void Timer::Stop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update the last time variable
|
// Update the last time variable
|
||||||
void Timer::Update(void)
|
void Timer::Update()
|
||||||
{
|
{
|
||||||
m_LastTime = timeGetTime();
|
m_LastTime = timeGetTime();
|
||||||
//TODO(ector) - QPF
|
//TODO(ector) - QPF
|
||||||
@ -86,7 +84,7 @@ void Timer::Update(void)
|
|||||||
// ---------------
|
// ---------------
|
||||||
|
|
||||||
// Get the number of milliseconds since the last Update()
|
// Get the number of milliseconds since the last Update()
|
||||||
s64 Timer::GetTimeDifference(void)
|
s64 Timer::GetTimeDifference()
|
||||||
{
|
{
|
||||||
return(timeGetTime() - m_LastTime);
|
return(timeGetTime() - m_LastTime);
|
||||||
}
|
}
|
||||||
@ -104,7 +102,7 @@ void Timer::WindBackStartingTime(u64 WindBack)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get the time elapsed since the Start()
|
// Get the time elapsed since the Start()
|
||||||
u64 Timer::GetTimeElapsed(void)
|
u64 Timer::GetTimeElapsed()
|
||||||
{
|
{
|
||||||
/* If we have not started yet return 1 (because then I don't have to change the FPS
|
/* If we have not started yet return 1 (because then I don't have to change the FPS
|
||||||
calculation in CoreRerecording.cpp */
|
calculation in CoreRerecording.cpp */
|
||||||
@ -117,20 +115,20 @@ u64 Timer::GetTimeElapsed(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get the formattet time elapsed since the Start()
|
// Get the formattet time elapsed since the Start()
|
||||||
std::string Timer::GetTimeElapsedFormatted(void)
|
std::string Timer::GetTimeElapsedFormatted() const
|
||||||
{
|
{
|
||||||
// If we have not started yet, return zero
|
// If we have not started yet, return zero
|
||||||
if (m_StartTime == 0)
|
if (m_StartTime == 0)
|
||||||
return "00:00:00:000";
|
return "00:00:00:000";
|
||||||
|
|
||||||
// The number of milliseconds since the start, use a different value if the timer is stopped
|
// The number of milliseconds since the start, use a different value if the timer is stopped
|
||||||
u32 Milliseconds;
|
u64 Milliseconds;
|
||||||
if (m_Running)
|
if (m_Running)
|
||||||
Milliseconds = timeGetTime() - m_StartTime;
|
Milliseconds = timeGetTime() - m_StartTime;
|
||||||
else
|
else
|
||||||
Milliseconds = m_LastTime - m_StartTime;
|
Milliseconds = m_LastTime - m_StartTime;
|
||||||
// Seconds
|
// Seconds
|
||||||
u32 Seconds = Milliseconds / 1000;
|
u32 Seconds = (u32)(Milliseconds / 1000);
|
||||||
// Minutes
|
// Minutes
|
||||||
u32 Minutes = Seconds / 60;
|
u32 Minutes = Seconds / 60;
|
||||||
// Hours
|
// Hours
|
||||||
@ -172,14 +170,14 @@ void _time64(u64* t)
|
|||||||
|
|
||||||
|
|
||||||
// Get the number of seconds since January 1 1970
|
// Get the number of seconds since January 1 1970
|
||||||
u64 Timer::GetTimeSinceJan1970(void)
|
u64 Timer::GetTimeSinceJan1970()
|
||||||
{
|
{
|
||||||
time_t ltime;
|
time_t ltime;
|
||||||
time(<ime);
|
time(<ime);
|
||||||
return((u64)ltime);
|
return((u64)ltime);
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 Timer::GetLocalTimeSinceJan1970(void)
|
u64 Timer::GetLocalTimeSinceJan1970()
|
||||||
{
|
{
|
||||||
time_t sysTime, tzDiff;
|
time_t sysTime, tzDiff;
|
||||||
struct tm * gmTime;
|
struct tm * gmTime;
|
||||||
@ -193,7 +191,7 @@ u64 Timer::GetLocalTimeSinceJan1970(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Return the current time formatted as Minutes:Seconds:Milliseconds in the form 00:00:000
|
// Return the current time formatted as Minutes:Seconds:Milliseconds in the form 00:00:000
|
||||||
std::string Timer::GetTimeFormatted(void)
|
std::string Timer::GetTimeFormatted()
|
||||||
{
|
{
|
||||||
struct timeb tp;
|
struct timeb tp;
|
||||||
(void)::ftime(&tp);
|
(void)::ftime(&tp);
|
||||||
|
@ -25,8 +25,7 @@ namespace Common
|
|||||||
{
|
{
|
||||||
class Timer
|
class Timer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Timer();
|
Timer();
|
||||||
|
|
||||||
void Start();
|
void Start();
|
||||||
@ -34,7 +33,7 @@ class Timer
|
|||||||
void Update();
|
void Update();
|
||||||
|
|
||||||
// The time difference is always returned in milliseconds, regardless of alternative internal representation
|
// The time difference is always returned in milliseconds, regardless of alternative internal representation
|
||||||
s64 GetTimeDifference(void);
|
s64 GetTimeDifference();
|
||||||
void AddTimeDifference();
|
void AddTimeDifference();
|
||||||
void WindBackStartingTime(u64 WindBack);
|
void WindBackStartingTime(u64 WindBack);
|
||||||
|
|
||||||
@ -44,19 +43,20 @@ class Timer
|
|||||||
static u64 GetLocalTimeSinceJan1970();
|
static u64 GetLocalTimeSinceJan1970();
|
||||||
|
|
||||||
static std::string GetTimeFormatted();
|
static std::string GetTimeFormatted();
|
||||||
std::string GetTimeElapsedFormatted();
|
std::string GetTimeElapsedFormatted() const;
|
||||||
u64 GetTimeElapsed();
|
u64 GetTimeElapsed();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
u64 m_LastTime;
|
u64 m_LastTime;
|
||||||
u64 m_StartTime;
|
u64 m_StartTime;
|
||||||
u64 m_frequency;
|
u64 m_frequency;
|
||||||
bool m_Running;
|
bool m_Running;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end of namespace Common
|
} // end of namespace Common
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
u32 timeGetTime();
|
u32 timeGetTime();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -37,7 +37,7 @@ CDolLoader::CDolLoader(const char* _szFilename)
|
|||||||
fread(tmpBuffer, size, 1, pStream);
|
fread(tmpBuffer, size, 1, pStream);
|
||||||
fclose(pStream);
|
fclose(pStream);
|
||||||
|
|
||||||
m_bInit = Initialize(tmpBuffer, size);
|
m_bInit = Initialize(tmpBuffer, (u32)size);
|
||||||
delete [] tmpBuffer;
|
delete [] tmpBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
// HyperIris: need clean code
|
// HyperIris: need clean code
|
||||||
#include "../../Core/Src/ConfigManager.h"
|
#include "../../Core/Src/ConfigManager.h"
|
||||||
|
|
||||||
|
#include "ColorUtil.h"
|
||||||
#include "BannerLoaderGC.h"
|
#include "BannerLoaderGC.h"
|
||||||
|
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
@ -28,22 +29,6 @@ CBannerLoaderGC::CBannerLoaderGC(DiscIO::IFileSystem& _rFileSystem)
|
|||||||
: m_pBannerFile(NULL),
|
: m_pBannerFile(NULL),
|
||||||
m_IsValid(false)
|
m_IsValid(false)
|
||||||
{
|
{
|
||||||
// build LUT Table
|
|
||||||
for (int i = 0; i < 8; i++)
|
|
||||||
{
|
|
||||||
lut3to8[i] = (i * 255) / 7;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < 16; i++)
|
|
||||||
{
|
|
||||||
lut4to8[i] = (i * 255) / 15;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < 32; i++)
|
|
||||||
{
|
|
||||||
lut5to8[i] = (i * 255) / 31;
|
|
||||||
}
|
|
||||||
|
|
||||||
// load the opening.bnr
|
// load the opening.bnr
|
||||||
size_t FileSize = (size_t) _rFileSystem.GetFileSize("opening.bnr");
|
size_t FileSize = (size_t) _rFileSystem.GetFileSize("opening.bnr");
|
||||||
|
|
||||||
@ -216,33 +201,6 @@ CBannerLoaderGC::GetDescription(std::string* _rDescription)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
u32
|
|
||||||
CBannerLoaderGC::decode5A3(u16 val)
|
|
||||||
{
|
|
||||||
u32 bannerBGColor = 0x00000000;
|
|
||||||
|
|
||||||
int r, g, b, a;
|
|
||||||
|
|
||||||
if ((val & 0x8000))
|
|
||||||
{
|
|
||||||
r = lut5to8[(val >> 10) & 0x1f];
|
|
||||||
g = lut5to8[(val >> 5) & 0x1f];
|
|
||||||
b = lut5to8[(val) & 0x1f];
|
|
||||||
a = 0xFF;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
a = lut3to8[(val >> 12) & 0x7];
|
|
||||||
r = (lut4to8[(val >> 8) & 0xf] * a + (bannerBGColor & 0xFF) * (255 - a)) / 255;
|
|
||||||
g = (lut4to8[(val >> 4) & 0xf] * a + ((bannerBGColor >> 8) & 0xFF) * (255 - a)) / 255;
|
|
||||||
b = (lut4to8[(val) & 0xf] * a + ((bannerBGColor >> 16) & 0xFF) * (255 - a)) / 255;
|
|
||||||
a = 0xFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
return((a << 24) | (r << 16) | (g << 8) | b);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CBannerLoaderGC::decode5A3image(u32* dst, u16* src, int width, int height)
|
CBannerLoaderGC::decode5A3image(u32* dst, u16* src, int width, int height)
|
||||||
{
|
{
|
||||||
@ -254,7 +212,7 @@ CBannerLoaderGC::decode5A3image(u32* dst, u16* src, int width, int height)
|
|||||||
{
|
{
|
||||||
for (int ix = 0; ix < 4; ix++)
|
for (int ix = 0; ix < 4; ix++)
|
||||||
{
|
{
|
||||||
u32 RGBA = decode5A3(Common::swap16(src[ix]));
|
u32 RGBA = ColorUtil::Decode5A3(Common::swap16(src[ix]));
|
||||||
dst[(y + iy) * width + (x + ix)] = RGBA;
|
dst[(y + iy) * width + (x + ix)] = RGBA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,24 +26,17 @@ class CBannerLoaderGC
|
|||||||
: public IBannerLoader
|
: public IBannerLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
CBannerLoaderGC(DiscIO::IFileSystem& _rFileSystem);
|
CBannerLoaderGC(DiscIO::IFileSystem& _rFileSystem);
|
||||||
|
|
||||||
virtual ~CBannerLoaderGC();
|
virtual ~CBannerLoaderGC();
|
||||||
|
|
||||||
virtual bool IsValid();
|
virtual bool IsValid();
|
||||||
|
|
||||||
virtual bool GetBanner(u32* _pBannerImage);
|
virtual bool GetBanner(u32* _pBannerImage);
|
||||||
|
|
||||||
virtual bool GetName(std::string* _rName);
|
virtual bool GetName(std::string* _rName);
|
||||||
|
|
||||||
virtual bool GetCompany(std::string& _rCompany);
|
virtual bool GetCompany(std::string& _rCompany);
|
||||||
|
|
||||||
virtual bool GetDescription(std::string* _rDescription);
|
virtual bool GetDescription(std::string* _rDescription);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
DVD_BANNER_WIDTH = 96,
|
DVD_BANNER_WIDTH = 96,
|
||||||
@ -85,20 +78,13 @@ class CBannerLoaderGC
|
|||||||
DVDBannerComment comment[6]; // Comments in six languages
|
DVDBannerComment comment[6]; // Comments in six languages
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// for banner decoding
|
|
||||||
int lut3to8[8];
|
|
||||||
int lut4to8[16];
|
|
||||||
int lut5to8[32];
|
|
||||||
|
|
||||||
u8* m_pBannerFile;
|
u8* m_pBannerFile;
|
||||||
|
|
||||||
bool m_IsValid;
|
bool m_IsValid;
|
||||||
|
|
||||||
u32 decode5A3(u16 val);
|
|
||||||
void decode5A3image(u32* dst, u16* src, int width, int height);
|
void decode5A3image(u32* dst, u16* src, int width, int height);
|
||||||
BANNER_TYPE getBannerType();
|
BANNER_TYPE getBannerType();
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
#include "ColorUtil.h"
|
||||||
#include "BannerLoaderWii.h"
|
#include "BannerLoaderWii.h"
|
||||||
#include "FileUtil.h"
|
#include "FileUtil.h"
|
||||||
|
|
||||||
@ -29,8 +30,6 @@ CBannerLoaderWii::CBannerLoaderWii(DiscIO::IFileSystem& _rFileSystem)
|
|||||||
: m_pBannerFile(NULL)
|
: m_pBannerFile(NULL)
|
||||||
, m_IsValid(false)
|
, m_IsValid(false)
|
||||||
{
|
{
|
||||||
InitLUTTable();
|
|
||||||
|
|
||||||
char Filename[260];
|
char Filename[260];
|
||||||
char TitleID[4];
|
char TitleID[4];
|
||||||
|
|
||||||
@ -143,54 +142,6 @@ CBannerLoaderWii::GetDescription(std::string* _rDescription)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
CBannerLoaderWii::InitLUTTable()
|
|
||||||
{
|
|
||||||
// build LUT Table
|
|
||||||
for (int i = 0; i < 8; i++)
|
|
||||||
{
|
|
||||||
lut3to8[i] = (i * 255) / 7;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < 16; i++)
|
|
||||||
{
|
|
||||||
lut4to8[i] = (i * 255) / 15;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < 32; i++)
|
|
||||||
{
|
|
||||||
lut5to8[i] = (i * 255) / 31;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
u32
|
|
||||||
CBannerLoaderWii::decode5A3(u16 val)
|
|
||||||
{
|
|
||||||
u32 bannerBGColor = 0x00000000;
|
|
||||||
|
|
||||||
int r, g, b, a;
|
|
||||||
|
|
||||||
if ((val & 0x8000))
|
|
||||||
{
|
|
||||||
r = lut5to8[(val >> 10) & 0x1f];
|
|
||||||
g = lut5to8[(val >> 5) & 0x1f];
|
|
||||||
b = lut5to8[(val) & 0x1f];
|
|
||||||
a = 0xFF;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
a = lut3to8[(val >> 12) & 0x7];
|
|
||||||
r = (lut4to8[(val >> 8) & 0xf] * a + (bannerBGColor & 0xFF) * (255 - a)) / 255;
|
|
||||||
g = (lut4to8[(val >> 4) & 0xf] * a + ((bannerBGColor >> 8) & 0xFF) * (255 - a)) / 255;
|
|
||||||
b = (lut4to8[(val) & 0xf] * a + ((bannerBGColor >> 16) & 0xFF) * (255 - a)) / 255;
|
|
||||||
a = 0xFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((a << 24) | (r << 16) | (g << 8) | b);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CBannerLoaderWii::decode5A3image(u32* dst, u16* src, int width, int height)
|
CBannerLoaderWii::decode5A3image(u32* dst, u16* src, int width, int height)
|
||||||
{
|
{
|
||||||
@ -202,7 +153,7 @@ CBannerLoaderWii::decode5A3image(u32* dst, u16* src, int width, int height)
|
|||||||
{
|
{
|
||||||
for (int ix = 0; ix < 4; ix++)
|
for (int ix = 0; ix < 4; ix++)
|
||||||
{
|
{
|
||||||
u32 RGBA = decode5A3(Common::swap16(src[ix]));
|
u32 RGBA = ColorUtil::Decode5A3(Common::swap16(src[ix]));
|
||||||
dst[(y + iy) * width + (x + ix)] = RGBA;
|
dst[(y + iy) * width + (x + ix)] = RGBA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,17 +61,10 @@ class CBannerLoaderWii
|
|||||||
u8 m_IconTexture[8][WII_BANNER_ICON_SIZE];
|
u8 m_IconTexture[8][WII_BANNER_ICON_SIZE];
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
// for banner decoding
|
|
||||||
int lut3to8[8];
|
|
||||||
int lut4to8[16];
|
|
||||||
int lut5to8[32];
|
|
||||||
|
|
||||||
u8* m_pBannerFile;
|
u8* m_pBannerFile;
|
||||||
|
|
||||||
bool m_IsValid;
|
bool m_IsValid;
|
||||||
|
|
||||||
void InitLUTTable();
|
|
||||||
u32 decode5A3(u16 val);
|
|
||||||
void decode5A3image(u32* dst, u16* src, int width, int height);
|
void decode5A3image(u32* dst, u16* src, int width, int height);
|
||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
// Official SVN repository and contact information can be found at
|
// Official SVN repository and contact information can be found at
|
||||||
// http://code.google.com/p/dolphin-emu/
|
// http://code.google.com/p/dolphin-emu/
|
||||||
#include "GCMemcard.h"
|
#include "GCMemcard.h"
|
||||||
|
#include "ColorUtil.h"
|
||||||
|
|
||||||
// i think there is support for this stuff in the common lib... if not there should be support
|
// i think there is support for this stuff in the common lib... if not there should be support
|
||||||
|
|
||||||
@ -26,34 +27,6 @@ void ByteSwap(u8 *valueA, u8 *valueB)
|
|||||||
*valueB = tmp;
|
*valueB = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 decode5A3(u16 val)
|
|
||||||
{
|
|
||||||
const int lut5to8[] = { 0x00,0x08,0x10,0x18,0x20,0x29,0x31,0x39,
|
|
||||||
0x41,0x4A,0x52,0x5A,0x62,0x6A,0x73,0x7B,
|
|
||||||
0x83,0x8B,0x94,0x9C,0xA4,0xAC,0xB4,0xBD,
|
|
||||||
0xC5,0xCD,0xD5,0xDE,0xE6,0xEE,0xF6,0xFF};
|
|
||||||
const int lut4to8[] = { 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,
|
|
||||||
0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF};
|
|
||||||
const int lut3to8[] = { 0x00,0x24,0x48,0x6D,0x91,0xB6,0xDA,0xFF};
|
|
||||||
|
|
||||||
int r,g,b,a;
|
|
||||||
if ((val&0x8000))
|
|
||||||
{
|
|
||||||
r=lut5to8[(val>>10) & 0x1f];
|
|
||||||
g=lut5to8[(val>>5 ) & 0x1f];
|
|
||||||
b=lut5to8[(val ) & 0x1f];
|
|
||||||
a=0xFF;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
a=lut3to8[(val>>12) & 0x7];
|
|
||||||
r=lut4to8[(val>>8 ) & 0xf];
|
|
||||||
g=lut4to8[(val>>4 ) & 0xf];
|
|
||||||
b=lut4to8[(val ) & 0xf];
|
|
||||||
}
|
|
||||||
return (a<<24) | (r<<16) | (g<<8) | b;
|
|
||||||
}
|
|
||||||
|
|
||||||
void decode5A3image(u32* dst, u16* src, int width, int height)
|
void decode5A3image(u32* dst, u16* src, int width, int height)
|
||||||
{
|
{
|
||||||
for (int y = 0; y < height; y += 4)
|
for (int y = 0; y < height; y += 4)
|
||||||
@ -64,7 +37,7 @@ void decode5A3image(u32* dst, u16* src, int width, int height)
|
|||||||
{
|
{
|
||||||
for (int ix = 0; ix < 4; ix++)
|
for (int ix = 0; ix < 4; ix++)
|
||||||
{
|
{
|
||||||
u32 RGBA = decode5A3(Common::swap16(src[ix]));
|
u32 RGBA = ColorUtil::Decode5A3(Common::swap16(src[ix]));
|
||||||
dst[(y + iy) * width + (x + ix)] = RGBA;
|
dst[(y + iy) * width + (x + ix)] = RGBA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -83,7 +56,8 @@ void decodeCI8image(u32* dst, u8* src, u16* pal, int width, int height)
|
|||||||
u32 *tdst = dst+(y+iy)*width+x;
|
u32 *tdst = dst+(y+iy)*width+x;
|
||||||
for (int ix = 0; ix < 8; ix++)
|
for (int ix = 0; ix < 8; ix++)
|
||||||
{
|
{
|
||||||
tdst[ix] = decode5A3(Common::swap16(pal[src[ix]]));
|
// huh, this seems wrong. CI8, not 5A3, no?
|
||||||
|
tdst[ix] = ColorUtil::Decode5A3(Common::swap16(pal[src[ix]]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -910,13 +884,13 @@ u32 GCMemcard::ExportGci(u8 index, const char *fileName, std::string *fileName2)
|
|||||||
{
|
{
|
||||||
if (BE32(dir.Dir[index].Gamecode) == 0xFFFFFFFF) return SUCCESS;
|
if (BE32(dir.Dir[index].Gamecode) == 0xFFFFFFFF) return SUCCESS;
|
||||||
|
|
||||||
int length = fileName2->length() + 42;
|
size_t length = fileName2->length() + 42;
|
||||||
char *filename = new char[length];
|
char *filename = new char[length];
|
||||||
char GameCode[5];
|
char GameCode[5];
|
||||||
|
|
||||||
DEntry_GameCode(index, GameCode);
|
DEntry_GameCode(index, GameCode);
|
||||||
|
|
||||||
sprintf(filename,"%s/%s_%s.gci",fileName2->c_str(), GameCode, dir.Dir[index].Filename);
|
sprintf(filename, "%s/%s_%s.gci", fileName2->c_str(), GameCode, dir.Dir[index].Filename);
|
||||||
gci = fopen((const char *)filename, "wb");
|
gci = fopen((const char *)filename, "wb");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -955,7 +929,7 @@ u32 GCMemcard::ExportGci(u8 index, const char *fileName, std::string *fileName2)
|
|||||||
if (fwrite(tempSaveData, 1, size, gci) != size)
|
if (fwrite(tempSaveData, 1, size, gci) != size)
|
||||||
completeWrite = false;
|
completeWrite = false;
|
||||||
fclose(gci);
|
fclose(gci);
|
||||||
delete []tempSaveData;
|
delete [] tempSaveData;
|
||||||
if (completeWrite) return SUCCESS;
|
if (completeWrite) return SUCCESS;
|
||||||
else return WRITEFAIL;
|
else return WRITEFAIL;
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include <shlobj.h>
|
#include <shlobj.h>
|
||||||
#include <xstring>
|
#include <xstring>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "ShellUtil.h"
|
#include "ShellUtil.h"
|
||||||
|
|
||||||
namespace W32Util
|
namespace W32Util
|
||||||
@ -30,19 +31,14 @@ namespace W32Util
|
|||||||
// function WinBrowseForFileName
|
// function WinBrowseForFileName
|
||||||
//---------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------
|
||||||
bool BrowseForFileName (bool _bLoad, HWND _hParent, const char *_pTitle,
|
bool BrowseForFileName (bool _bLoad, HWND _hParent, const char *_pTitle,
|
||||||
const char *_pInitialFolder,const char *_pFilter,const char *_pExtension,
|
const char *_pInitialFolder, const char *_pFilter, const char *_pExtension,
|
||||||
std::string& _strFileName)
|
std::string& _strFileName)
|
||||||
{
|
{
|
||||||
char szFile [MAX_PATH+1];
|
char szFile [MAX_PATH+1] = {0};
|
||||||
char szFileTitle [MAX_PATH+1];
|
char szFileTitle [MAX_PATH+1] = {0};
|
||||||
|
|
||||||
strcpy (szFile,"");
|
|
||||||
strcpy (szFileTitle,"");
|
|
||||||
|
|
||||||
OPENFILENAME ofn;
|
OPENFILENAME ofn;
|
||||||
|
|
||||||
ZeroMemory (&ofn,sizeof (ofn));
|
ZeroMemory (&ofn,sizeof (ofn));
|
||||||
|
|
||||||
ofn.lStructSize = sizeof (OPENFILENAME);
|
ofn.lStructSize = sizeof (OPENFILENAME);
|
||||||
ofn.lpstrInitialDir = _pInitialFolder;
|
ofn.lpstrInitialDir = _pInitialFolder;
|
||||||
ofn.lpstrFilter = _pFilter;
|
ofn.lpstrFilter = _pFilter;
|
||||||
@ -57,12 +53,11 @@ namespace W32Util
|
|||||||
if (_strFileName.size () != 0)
|
if (_strFileName.size () != 0)
|
||||||
ofn.lpstrFile = (char *)_strFileName.c_str();
|
ofn.lpstrFile = (char *)_strFileName.c_str();
|
||||||
|
|
||||||
if (((_bLoad)?GetOpenFileName (&ofn):GetSaveFileName (&ofn)))
|
if (((_bLoad) ? GetOpenFileName(&ofn) : GetSaveFileName(&ofn)))
|
||||||
{
|
{
|
||||||
_strFileName = ofn.lpstrFile;
|
_strFileName = ofn.lpstrFile;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,12 +108,6 @@ namespace W32Util
|
|||||||
}
|
}
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
return std::vector<std::string>(); // empty vector;
|
return std::vector<std::string>(); // empty vector;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -807,8 +807,8 @@ void Renderer::Swap(const TRectangle& rc)
|
|||||||
// Rc.right and rc.bottom is the original picture pixel size
|
// Rc.right and rc.bottom is the original picture pixel size
|
||||||
/* There is a +1 in Rc (earlier called multirc, the input to this function), but these
|
/* There is a +1 in Rc (earlier called multirc, the input to this function), but these
|
||||||
adjustments seems to work better without it. */
|
adjustments seems to work better without it. */
|
||||||
float WidthRatio = (float)(rc.right - 1) / 640.0;
|
float WidthRatio = (float)(rc.right - 1) / 640.0f;
|
||||||
float HeightRatio = (float)(rc.bottom - 1) / 480.0;
|
float HeightRatio = (float)(rc.bottom - 1) / 480.0f;
|
||||||
|
|
||||||
// The pixel size of the image on the screen, adjusted for the actual window size
|
// The pixel size of the image on the screen, adjusted for the actual window size
|
||||||
float OldWidth = WidthRatio * (float)WinWidth;
|
float OldWidth = WidthRatio * (float)WinWidth;
|
||||||
@ -854,10 +854,8 @@ void Renderer::Swap(const TRectangle& rc)
|
|||||||
float WinWidth = (float)OpenGL_GetWidth();
|
float WinWidth = (float)OpenGL_GetWidth();
|
||||||
float WinHeight = (float)OpenGL_GetHeight();
|
float WinHeight = (float)OpenGL_GetHeight();
|
||||||
// The rendering window aspect ratio as a fraction of the 4:3 ratio
|
// The rendering window aspect ratio as a fraction of the 4:3 ratio
|
||||||
float Ratio = WinWidth / WinHeight / (4.0 / 3.0);
|
float Ratio = WinWidth / WinHeight / (4.0f / 3.0f);
|
||||||
float wAdj, hAdj;
|
float wAdj, hAdj;
|
||||||
float ActualRatioW, ActualRatioH;
|
|
||||||
float Overflow;
|
|
||||||
// Actual pixel size of the picture after adjustment
|
// Actual pixel size of the picture after adjustment
|
||||||
float PictureWidth = WinWidth, PictureHeight = WinHeight;
|
float PictureWidth = WinWidth, PictureHeight = WinHeight;
|
||||||
|
|
||||||
@ -894,8 +892,8 @@ void Renderer::Swap(const TRectangle& rc)
|
|||||||
// Calculate the new width and height for glViewport, this is not the actual size of either the picture or the screen
|
// Calculate the new width and height for glViewport, this is not the actual size of either the picture or the screen
|
||||||
// ----------------
|
// ----------------
|
||||||
// Invert the ratio to make it > 1
|
// Invert the ratio to make it > 1
|
||||||
Ratio = 1.0 / Ratio;
|
Ratio = 1.0f / Ratio;
|
||||||
wAdj = 1.0;
|
wAdj = 1.0f;
|
||||||
hAdj = Ratio;
|
hAdj = Ratio;
|
||||||
FloatGLWidth = FloatGLWidth / wAdj;
|
FloatGLWidth = FloatGLWidth / wAdj;
|
||||||
FloatGLHeight = FloatGLHeight / hAdj;
|
FloatGLHeight = FloatGLHeight / hAdj;
|
||||||
@ -909,9 +907,9 @@ void Renderer::Swap(const TRectangle& rc)
|
|||||||
// Keep the picture on the bottom of the screen, this is needed because YOffset may not be 0 here
|
// Keep the picture on the bottom of the screen, this is needed because YOffset may not be 0 here
|
||||||
FloatYOffset = FloatYOffset / hAdj;
|
FloatYOffset = FloatYOffset / hAdj;
|
||||||
// Move the bottom of the picture to the middle of the screen
|
// Move the bottom of the picture to the middle of the screen
|
||||||
FloatYOffset = FloatYOffset + WinHeight / 2.0;
|
FloatYOffset = FloatYOffset + WinHeight / 2.0f;
|
||||||
// Then remove half the picture height to move it to the vertical center
|
// Then remove half the picture height to move it to the vertical center
|
||||||
FloatYOffset = FloatYOffset - PictureHeight / 2.0;
|
FloatYOffset = FloatYOffset - PictureHeight / 2.0f;
|
||||||
// --------------------
|
// --------------------
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,6 +79,7 @@ extern int frameCount;
|
|||||||
|
|
||||||
class Renderer
|
class Renderer
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
static void FlushZBufferAlphaToTarget();
|
static void FlushZBufferAlphaToTarget();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -133,7 +133,6 @@ void LoadRecordedMovements()
|
|||||||
//Console::Print("Recording%i ", i + 1);
|
//Console::Print("Recording%i ", i + 1);
|
||||||
|
|
||||||
// Temporary storage
|
// Temporary storage
|
||||||
bool bTmp;
|
|
||||||
int iTmp;
|
int iTmp;
|
||||||
std::string STmp;
|
std::string STmp;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user