1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-04 10:03:36 +00:00

Raplace GL types in TextureLoadParameters

This commit is contained in:
Sergey Lipskiy 2017-01-22 18:44:42 +07:00
parent 663f696d8f
commit 4a97083d77
5 changed files with 126 additions and 110 deletions

View File

@ -11,7 +11,10 @@ namespace graphics {
} }
namespace internalcolor { namespace internalcolor {
Parameter RGB8(GL_RGB);
Parameter RGBA(GL_RGBA8); Parameter RGBA(GL_RGBA8);
Parameter RGBA4(GL_RGBA4);
Parameter RGB5_A1(GL_RGB5_A1);
Parameter RG(GL_RG8); Parameter RG(GL_RG8);
Parameter RED(GL_R8); Parameter RED(GL_R8);
Parameter DEPTH(GL_DEPTH_COMPONENT); Parameter DEPTH(GL_DEPTH_COMPONENT);
@ -23,6 +26,8 @@ namespace graphics {
Parameter UNSIGNED_SHORT(GL_UNSIGNED_SHORT); Parameter UNSIGNED_SHORT(GL_UNSIGNED_SHORT);
Parameter UNSIGNED_INT(GL_UNSIGNED_INT); Parameter UNSIGNED_INT(GL_UNSIGNED_INT);
Parameter FLOAT(GL_FLOAT); Parameter FLOAT(GL_FLOAT);
Parameter UNSIGNED_SHORT_5_5_5_1(GL_UNSIGNED_SHORT_5_5_5_1);
Parameter UNSIGNED_SHORT_4_4_4_4(GL_UNSIGNED_SHORT_4_4_4_4);
} }
namespace target { namespace target {

View File

@ -22,6 +22,7 @@ namespace graphics {
void reset() { m_iparameter = INVALID_PARAMETER; } void reset() { m_iparameter = INVALID_PARAMETER; }
bool operator==(const Parameter & _other) const { return m_iparameter == _other.m_iparameter; } bool operator==(const Parameter & _other) const { return m_iparameter == _other.m_iparameter; }
bool operator!=(const Parameter & _other) const { return m_iparameter != _other.m_iparameter; }
private: private:
union { union {

View File

@ -11,7 +11,10 @@ namespace graphics {
} }
namespace internalcolor { namespace internalcolor {
extern Parameter RGB8;
extern Parameter RGBA; extern Parameter RGBA;
extern Parameter RGBA4;
extern Parameter RGB5_A1;
extern Parameter RG; extern Parameter RG;
extern Parameter RED; extern Parameter RED;
extern Parameter DEPTH; extern Parameter DEPTH;
@ -23,6 +26,8 @@ namespace graphics {
extern Parameter UNSIGNED_SHORT; extern Parameter UNSIGNED_SHORT;
extern Parameter UNSIGNED_INT; extern Parameter UNSIGNED_INT;
extern Parameter FLOAT; extern Parameter FLOAT;
extern Parameter UNSIGNED_SHORT_5_5_5_1;
extern Parameter UNSIGNED_SHORT_4_4_4_4;
} }
namespace target { namespace target {

View File

@ -264,135 +264,137 @@ inline void GetYUV_RGBA4444(u64 * src, u16 * dst, u16 x)
const struct TextureLoadParameters const struct TextureLoadParameters
{ {
GetTexelFunc Get16; GetTexelFunc Get16;
GLenum glType16; Parameter glType16;
GLint glInternalFormat16; Parameter glInternalFormat16;
GetTexelFunc Get32; GetTexelFunc Get32;
GLenum glType32; Parameter glType32;
GLint glInternalFormat32; Parameter glInternalFormat32;
u32 autoFormat, lineShift, maxTexels; Parameter autoFormat;
u32 lineShift;
u32 maxTexels;
} imageFormat[4][4][5] = } imageFormat[4][4][5] =
{ // G_TT_NONE { // G_TT_NONE
{ // Get16 glType16 glInternalFormat16 Get32 glType32 glInternalFormat32 autoFormat { // Get16 glType16 glInternalFormat16 Get32 glType32 glInternalFormat32 autoFormat
{ // 4-bit { // 4-bit
{ GetI4_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetI4_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 4, 8192 }, // RGBA as I { GetI4_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetI4_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 4, 8192 }, // RGBA as I
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 4, 8192 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 4, 8192 }, // YUV
{ GetI4_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetI4_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 4, 8192 }, // CI without palette { GetI4_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetI4_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 4, 8192 }, // CI without palette
{ GetIA31_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetIA31_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 4, 8192 }, // IA { GetIA31_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetIA31_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 4, 8192 }, // IA
{ GetI4_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetI4_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 4, 8192 }, // I { GetI4_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetI4_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 4, 8192 }, // I
}, },
{ // 8-bit { // 8-bit
{ GetI8_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetI8_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 3, 4096 }, // RGBA as I { GetI8_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetI8_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 3, 4096 }, // RGBA as I
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 4096 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 4096 }, // YUV
{ GetI8_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetI8_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 3, 4096 }, // CI without palette { GetI8_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetI8_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 3, 4096 }, // CI without palette
{ GetIA44_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetIA44_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 3, 4096 }, // IA { GetIA44_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetIA44_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 3, 4096 }, // IA
{ GetI8_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetI8_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 3, 4096 }, // I { GetI8_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetI8_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 3, 4096 }, // I
}, },
{ // 16-bit { // 16-bit
{ GetRGBA5551_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetRGBA5551_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 2, 2048 }, // RGBA { GetRGBA5551_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetRGBA5551_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 2, 2048 }, // RGBA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 2, 2048 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 2, 2048 }, // YUV
{ GetIA88_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetIA88_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 2, 2048 }, // CI as IA { GetIA88_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetIA88_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 2, 2048 }, // CI as IA
{ GetIA88_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetIA88_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 2, 2048 }, // IA { GetIA88_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetIA88_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 2, 2048 }, // IA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 2048 }, // I { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 2048 }, // I
}, },
{ // 32-bit { // 32-bit
{ GetRGBA8888_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetRGBA8888_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 2, 1024 }, // RGBA { GetRGBA8888_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetRGBA8888_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 2, 1024 }, // RGBA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 1024 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 1024 }, // YUV
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 1024 }, // CI { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 1024 }, // CI
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 1024 }, // IA { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 1024 }, // IA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 1024 }, // I { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 1024 }, // I
} }
}, },
// DUMMY // DUMMY
{ // Get16 glType16 glInternalFormat16 Get32 glType32 glInternalFormat32 autoFormat { // Get16 glType16 glInternalFormat16 Get32 glType32 glInternalFormat32 autoFormat
{ // 4-bit { // 4-bit
{ GetCI4RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI4RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 4, 4096 }, // CI (Banjo-Kazooie uses this, doesn't make sense, but it works...) { GetCI4RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI4RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 4, 4096 }, // CI (Banjo-Kazooie uses this, doesn't make sense, but it works...)
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 4, 8192 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 4, 8192 }, // YUV
{ GetCI4RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI4RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 4, 4096 }, // CI { GetCI4RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI4RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 4, 4096 }, // CI
{ GetCI4RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI4RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 4, 4096 }, // IA as CI { GetCI4RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI4RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 4, 4096 }, // IA as CI
{ GetCI4RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI4RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 4, 4096 }, // I as CI { GetCI4RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI4RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 4, 4096 }, // I as CI
}, },
{ // 8-bit { // 8-bit
{ GetCI8RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI8RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 3, 2048 }, // RGBA { GetCI8RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI8RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 3, 2048 }, // RGBA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 4096 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 4096 }, // YUV
{ GetCI8RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI8RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 3, 2048 }, // CI { GetCI8RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI8RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 3, 2048 }, // CI
{ GetCI8RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI8RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 3, 2048 }, // IA as CI { GetCI8RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI8RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 3, 2048 }, // IA as CI
{ GetCI8RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI8RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 3, 2048 }, // I as CI { GetCI8RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI8RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 3, 2048 }, // I as CI
}, },
{ // 16-bit { // 16-bit
{ GetCI16RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetRGBA5551_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 2, 2048 }, // RGBA { GetCI16RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetRGBA5551_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 2, 2048 }, // RGBA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 2, 2048 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 2, 2048 }, // YUV
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 2048 }, // CI { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 2048 }, // CI
{ GetCI16RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI16RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 2, 2048 }, // IA as CI { GetCI16RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI16RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 2, 2048 }, // IA as CI
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 2048 }, // I { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 2048 }, // I
}, },
{ // 32-bit { // 32-bit
{ GetRGBA8888_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetRGBA8888_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 2, 1024 }, // RGBA { GetRGBA8888_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetRGBA8888_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 2, 1024 }, // RGBA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 1024 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 1024 }, // YUV
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 1024 }, // CI { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 1024 }, // CI
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 1024 }, // IA { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 1024 }, // IA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 1024 }, // I { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 1024 }, // I
} }
}, },
// G_TT_RGBA16 // G_TT_RGBA16
{ // Get16 glType16 glInternalFormat16 Get32 glType32 glInternalFormat32 autoFormat { // Get16 glType16 glInternalFormat16 Get32 glType32 glInternalFormat32 autoFormat
{ // 4-bit { // 4-bit
{ GetCI4RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI4RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 4, 4096 }, // CI (Banjo-Kazooie uses this, doesn't make sense, but it works...) { GetCI4RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI4RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 4, 4096 }, // CI (Banjo-Kazooie uses this, doesn't make sense, but it works...)
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 4, 8192 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 4, 8192 }, // YUV
{ GetCI4RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI4RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 4, 4096 }, // CI { GetCI4RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI4RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 4, 4096 }, // CI
{ GetCI4RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI4RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 4, 4096 }, // IA as CI { GetCI4RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI4RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 4, 4096 }, // IA as CI
{ GetCI4RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI4RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 4, 4096 }, // I as CI { GetCI4RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI4RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 4, 4096 }, // I as CI
}, },
{ // 8-bit { // 8-bit
{ GetCI8RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI8RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 3, 2048 }, // RGBA { GetCI8RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI8RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 3, 2048 }, // RGBA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 4096 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 4096 }, // YUV
{ GetCI8RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI8RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 3, 2048 }, // CI { GetCI8RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI8RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 3, 2048 }, // CI
{ GetCI8RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI8RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 3, 2048 }, // IA as CI { GetCI8RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI8RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 3, 2048 }, // IA as CI
{ GetCI8RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI8RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 3, 2048 }, // I as CI { GetCI8RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI8RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 3, 2048 }, // I as CI
}, },
{ // 16-bit { // 16-bit
{ GetCI16RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetRGBA5551_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 2, 2048 }, // RGBA { GetCI16RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetRGBA5551_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 2, 2048 }, // RGBA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 2, 2048 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 2, 2048 }, // YUV
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 2048 }, // CI { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 2048 }, // CI
{ GetCI16RGBA_RGBA5551, GL_UNSIGNED_SHORT_5_5_5_1, GL_RGB5_A1, GetCI16RGBA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGB5_A1, 2, 2048 }, // IA as CI { GetCI16RGBA_RGBA5551, datatype::UNSIGNED_SHORT_5_5_5_1, internalcolor::RGB5_A1, GetCI16RGBA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGB5_A1, 2, 2048 }, // IA as CI
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 2048 }, // I { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 2048 }, // I
}, },
{ // 32-bit { // 32-bit
{ GetRGBA8888_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetRGBA8888_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 2, 1024 }, // RGBA { GetRGBA8888_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetRGBA8888_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 2, 1024 }, // RGBA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 1024 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 1024 }, // YUV
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 1024 }, // CI { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 1024 }, // CI
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 1024 }, // IA { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 1024 }, // IA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA4, 0, 1024 }, // I { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA4, 0, 1024 }, // I
} }
}, },
// G_TT_IA16 // G_TT_IA16
{ // Get16 glType16 glInternalFormat16 Get32 glType32 glInternalFormat32 autoFormat { // Get16 glType16 glInternalFormat16 Get32 glType32 glInternalFormat32 autoFormat
{ // 4-bit { // 4-bit
{ GetCI4IA_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetCI4IA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 4, 4096 }, // IA { GetCI4IA_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetCI4IA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 4, 4096 }, // IA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 4, 8192 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 4, 8192 }, // YUV
{ GetCI4IA_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetCI4IA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 4, 4096 }, // CI { GetCI4IA_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetCI4IA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 4, 4096 }, // CI
{ GetCI4IA_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetCI4IA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 4, 4096 }, // IA { GetCI4IA_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetCI4IA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 4, 4096 }, // IA
{ GetCI4IA_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetCI4IA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 4, 4096 }, // I { GetCI4IA_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetCI4IA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 4, 4096 }, // I
}, },
{ // 8-bit { // 8-bit
{ GetCI8IA_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetCI8IA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 3, 2048 }, // RGBA { GetCI8IA_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetCI8IA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 3, 2048 }, // RGBA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 0, 4096 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 0, 4096 }, // YUV
{ GetCI8IA_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetCI8IA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 3, 2048 }, // CI { GetCI8IA_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetCI8IA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 3, 2048 }, // CI
{ GetCI8IA_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetCI8IA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 3, 2048 }, // IA { GetCI8IA_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetCI8IA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 3, 2048 }, // IA
{ GetCI8IA_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetCI8IA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 3, 2048 }, // I { GetCI8IA_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetCI8IA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 3, 2048 }, // I
}, },
{ // 16-bit { // 16-bit
{ GetCI16IA_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetCI16IA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 2, 2048 }, // RGBA { GetCI16IA_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetCI16IA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 2, 2048 }, // RGBA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 2, 2048 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 2, 2048 }, // YUV
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 0, 2048 }, // CI { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 0, 2048 }, // CI
{ GetCI16IA_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetCI16IA_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 2, 2048 }, // IA { GetCI16IA_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetCI16IA_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 2, 2048 }, // IA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 0, 2048 }, // I { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 0, 2048 }, // I
}, },
{ // 32-bit { // 32-bit
{ GetRGBA8888_RGBA4444, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetRGBA8888_RGBA8888, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 2, 1024 }, // RGBA { GetRGBA8888_RGBA4444, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetRGBA8888_RGBA8888, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 2, 1024 }, // RGBA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 0, 1024 }, // YUV { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 0, 1024 }, // YUV
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 0, 1024 }, // CI { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 0, 1024 }, // CI
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 0, 1024 }, // IA { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 0, 1024 }, // IA
{ GetNone, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA4, GetNone, GL_UNSIGNED_BYTE, GL_RGBA, GL_RGBA, 0, 1024 }, // I { GetNone, datatype::UNSIGNED_SHORT_4_4_4_4, internalcolor::RGBA4, GetNone, datatype::UNSIGNED_BYTE, internalcolor::RGBA, internalcolor::RGBA, 0, 1024 }, // I
} }
} }
}; };
@ -703,15 +705,17 @@ inline
void _updateCachedTexture(const GHQTexInfo & _info, CachedTexture *_pTexture) void _updateCachedTexture(const GHQTexInfo & _info, CachedTexture *_pTexture)
{ {
_pTexture->textureBytes = _info.width * _info.height; _pTexture->textureBytes = _info.width * _info.height;
switch (_info.format) {
case GL_RGB: Parameter format(_info.format);
case GL_RGBA4: if (format == internalcolor::RGB8 ||
case GL_RGB5_A1: format == internalcolor::RGBA4 ||
format == internalcolor::RGB5_A1) {
_pTexture->textureBytes <<= 1; _pTexture->textureBytes <<= 1;
break; }
default: else {
_pTexture->textureBytes <<= 2; _pTexture->textureBytes <<= 2;
} }
_pTexture->realWidth = _info.width; _pTexture->realWidth = _info.width;
_pTexture->realHeight = _info.height; _pTexture->realHeight = _info.height;
_pTexture->bHDTexture = true; _pTexture->bHDTexture = true;
@ -781,11 +785,11 @@ void TextureCache::_loadBackground(CachedTexture *pTexture)
u16 clampSClamp; u16 clampSClamp;
u16 clampTClamp; u16 clampTClamp;
GetTexelFunc GetTexel; GetTexelFunc GetTexel;
GLuint glInternalFormat; Parameter glInternalFormat;
GLenum glType; Parameter glType;
const TextureLoadParameters & loadParams = imageFormat[pTexture->format == 2 ? G_TT_RGBA16 : G_TT_NONE][pTexture->size][pTexture->format]; const TextureLoadParameters & loadParams = imageFormat[pTexture->format == 2 ? G_TT_RGBA16 : G_TT_NONE][pTexture->size][pTexture->format];
if (loadParams.autoFormat == GL_RGBA) { if (loadParams.autoFormat == internalcolor::RGBA) {
pTexture->textureBytes = (pTexture->realWidth * pTexture->realHeight) << 2; pTexture->textureBytes = (pTexture->realWidth * pTexture->realHeight) << 2;
GetTexel = loadParams.Get32; GetTexel = loadParams.Get32;
glInternalFormat = loadParams.glInternalFormat32; glInternalFormat = loadParams.glInternalFormat32;
@ -817,7 +821,7 @@ void TextureCache::_loadBackground(CachedTexture *pTexture)
for (x = 0; x < pTexture->realWidth; x++) { for (x = 0; x < pTexture->realWidth; x++) {
tx = min(x, (u32)clampSClamp); tx = min(x, (u32)clampSClamp);
if (glInternalFormat == GL_RGBA) if (glInternalFormat == internalcolor::RGBA)
((u32*)pDest)[j++] = GetTexel((u64*)pSrc, tx, 0, pTexture->palette); ((u32*)pDest)[j++] = GetTexel((u64*)pSrc, tx, 0, pTexture->palette);
else else
((u16*)pDest)[j++] = GetTexel((u64*)pSrc, tx, 0, pTexture->palette); ((u16*)pDest)[j++] = GetTexel((u64*)pSrc, tx, 0, pTexture->palette);
@ -830,10 +834,10 @@ void TextureCache::_loadBackground(CachedTexture *pTexture)
TFH.isInited()) { TFH.isInited()) {
GHQTexInfo ghqTexInfo; GHQTexInfo ghqTexInfo;
if (txfilter_filter((u8*)pDest, pTexture->realWidth, pTexture->realHeight, if (txfilter_filter((u8*)pDest, pTexture->realWidth, pTexture->realHeight,
glInternalFormat, (uint64)pTexture->crc, &ghqTexInfo) != 0 && (u16)u32(glInternalFormat), (uint64)pTexture->crc, &ghqTexInfo) != 0 &&
ghqTexInfo.data != nullptr) { ghqTexInfo.data != nullptr) {
if (ghqTexInfo.width % 2 != 0 && if (ghqTexInfo.width % 2 != 0 &&
ghqTexInfo.format != GL_RGBA && ghqTexInfo.format != u32(internalcolor::RGBA) &&
m_curUnpackAlignment > 1) m_curUnpackAlignment > 1)
gfxContext.setTextureUnpackAlignment(2); gfxContext.setTextureUnpackAlignment(2);
Context::InitTextureParams params; Context::InitTextureParams params;
@ -852,7 +856,7 @@ void TextureCache::_loadBackground(CachedTexture *pTexture)
} }
} }
if (!bLoaded) { if (!bLoaded) {
if (pTexture->realWidth % 2 != 0 && glInternalFormat != GL_RGBA) if (pTexture->realWidth % 2 != 0 && glInternalFormat != internalcolor::RGBA)
glPixelStorei(GL_UNPACK_ALIGNMENT, 2); glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
Context::InitTextureParams params; Context::InitTextureParams params;
params.handle = pTexture->name; params.handle = pTexture->name;
@ -966,7 +970,7 @@ void TextureCache::_loadDepthTexture(CachedTexture * _pTexture, u16* _pDest)
*/ */
void TextureCache::_getTextureDestData(CachedTexture& tmptex, void TextureCache::_getTextureDestData(CachedTexture& tmptex,
u32* pDest, u32* pDest,
GLuint glInternalFormat, Parameter glInternalFormat,
GetTexelFunc GetTexel, GetTexelFunc GetTexel,
u16* pLine) u16* pLine)
{ {
@ -1042,7 +1046,7 @@ void TextureCache::_getTextureDestData(CachedTexture& tmptex,
for (y = 0; y < tmptex.realHeight; ++y) { for (y = 0; y < tmptex.realHeight; ++y) {
pSrc = &TMEM[tmptex.tMem] + *pLine * y; pSrc = &TMEM[tmptex.tMem] + *pLine * y;
for (x = 0; x < tmptex.realWidth / 2; x++) { for (x = 0; x < tmptex.realWidth / 2; x++) {
if (glInternalFormat == GL_RGBA) { if (glInternalFormat == internalcolor::RGBA) {
GetYUV_RGBA8888(pSrc, pDest + j, x); GetYUV_RGBA8888(pSrc, pDest + j, x);
} else { } else {
GetYUV_RGBA4444(pSrc, (u16*)pDest + j, x); GetYUV_RGBA4444(pSrc, (u16*)pDest + j, x);
@ -1069,7 +1073,7 @@ void TextureCache::_getTextureDestData(CachedTexture& tmptex,
tx ^= maskSMask; tx ^= maskSMask;
} }
if (glInternalFormat == GL_RGBA) { if (glInternalFormat == internalcolor::RGBA) {
pDest[j++] = GetTexel(pSrc, tx, i, tmptex.palette); pDest[j++] = GetTexel(pSrc, tx, i, tmptex.palette);
} else { } else {
((u16*)pDest)[j++] = GetTexel(pSrc, tx, i, tmptex.palette); ((u16*)pDest)[j++] = GetTexel(pSrc, tx, i, tmptex.palette);
@ -1089,12 +1093,12 @@ void TextureCache::_load(u32 _tile, CachedTexture *_pTexture)
u16 line; u16 line;
GetTexelFunc GetTexel; GetTexelFunc GetTexel;
GLuint glInternalFormat; Parameter glInternalFormat;
GLenum glType; Parameter glType;
u32 sizeShift; u32 sizeShift;
const TextureLoadParameters & loadParams = imageFormat[gDP.otherMode.textureLUT][_pTexture->size][_pTexture->format]; const TextureLoadParameters & loadParams = imageFormat[gDP.otherMode.textureLUT][_pTexture->size][_pTexture->format];
if (loadParams.autoFormat == GL_RGBA) { if (loadParams.autoFormat == internalcolor::RGBA) {
sizeShift = 2; sizeShift = 2;
_pTexture->textureBytes = (_pTexture->realWidth * _pTexture->realHeight) << sizeShift; _pTexture->textureBytes = (_pTexture->realWidth * _pTexture->realHeight) << sizeShift;
GetTexel = loadParams.Get32; GetTexel = loadParams.Get32;
@ -1136,7 +1140,7 @@ void TextureCache::_load(u32 _tile, CachedTexture *_pTexture)
config.textureFilter.txHiresEnable != 0 && config.textureFilter.txHiresEnable != 0 &&
config.textureFilter.txDump != 0) { config.textureFilter.txDump != 0) {
txfilter_dmptx((u8*)pDest, tmptex.realWidth, tmptex.realHeight, txfilter_dmptx((u8*)pDest, tmptex.realWidth, tmptex.realHeight,
tmptex.realWidth, glInternalFormat, tmptex.realWidth, (u16)u32(glInternalFormat),
(unsigned short)(_pTexture->format << 8 | _pTexture->size), (unsigned short)(_pTexture->format << 8 | _pTexture->size),
ricecrc); ricecrc);
} }
@ -1149,7 +1153,7 @@ void TextureCache::_load(u32 _tile, CachedTexture *_pTexture)
{ {
GHQTexInfo ghqTexInfo; GHQTexInfo ghqTexInfo;
if (txfilter_filter((u8*)pDest, tmptex.realWidth, tmptex.realHeight, if (txfilter_filter((u8*)pDest, tmptex.realWidth, tmptex.realHeight,
glInternalFormat, (uint64)_pTexture->crc, (u16)u32(glInternalFormat), (uint64)_pTexture->crc,
&ghqTexInfo) != 0 && ghqTexInfo.data != nullptr) { &ghqTexInfo) != 0 && ghqTexInfo.data != nullptr) {
Context::InitTextureParams params; Context::InitTextureParams params;
params.handle = _pTexture->name; params.handle = _pTexture->name;
@ -1168,7 +1172,7 @@ void TextureCache::_load(u32 _tile, CachedTexture *_pTexture)
} }
if (!bLoaded) { if (!bLoaded) {
if (tmptex.realWidth % 2 != 0 && if (tmptex.realWidth % 2 != 0 &&
glInternalFormat != GL_RGBA && glInternalFormat != internalcolor::RGBA &&
m_curUnpackAlignment > 1) m_curUnpackAlignment > 1)
gfxContext.setTextureUnpackAlignment(2); gfxContext.setTextureUnpackAlignment(2);
Context::InitTextureParams params; Context::InitTextureParams params;
@ -1178,9 +1182,9 @@ void TextureCache::_load(u32 _tile, CachedTexture *_pTexture)
params.msaaLevel = 0; params.msaaLevel = 0;
params.width = tmptex.realWidth; params.width = tmptex.realWidth;
params.height = tmptex.realHeight; params.height = tmptex.realHeight;
params.internalFormat = Parameter(glInternalFormat); params.internalFormat = glInternalFormat;
params.format = color::RGBA; params.format = color::RGBA;
params.dataType = Parameter(glType); params.dataType = glType;
params.data = pDest; params.data = pDest;
gfxContext.init2DTexture(params); gfxContext.init2DTexture(params);
} }

View File

@ -7,6 +7,7 @@
#include "CRC.h" #include "CRC.h"
#include "convert.h" #include "convert.h"
#include "Graphics/ObjectHandle.h" #include "Graphics/ObjectHandle.h"
#include "Graphics/Parameter.h"
typedef u32 (*GetTexelFunc)( u64 *src, u16 x, u16 i, u8 palette ); typedef u32 (*GetTexelFunc)( u64 *src, u16 x, u16 i, u8 palette );
@ -80,7 +81,7 @@ private:
void _updateBackground(); void _updateBackground();
void _clear(); void _clear();
void _initDummyTexture(CachedTexture * _pDummy); void _initDummyTexture(CachedTexture * _pDummy);
void _getTextureDestData(CachedTexture& tmptex, u32* pDest, GLuint glInternalFormat, GetTexelFunc GetTexel, u16* pLine); void _getTextureDestData(CachedTexture& tmptex, u32* pDest, graphics::Parameter glInternalFormat, GetTexelFunc GetTexel, u16* pLine);
typedef std::list<CachedTexture> Textures; typedef std::list<CachedTexture> Textures;
typedef std::map<u32, Textures::iterator> Texture_Locations; typedef std::map<u32, Textures::iterator> Texture_Locations;