1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +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 {
Parameter RGB8(GL_RGB);
Parameter RGBA(GL_RGBA8);
Parameter RGBA4(GL_RGBA4);
Parameter RGB5_A1(GL_RGB5_A1);
Parameter RG(GL_RG8);
Parameter RED(GL_R8);
Parameter DEPTH(GL_DEPTH_COMPONENT);
@ -23,6 +26,8 @@ namespace graphics {
Parameter UNSIGNED_SHORT(GL_UNSIGNED_SHORT);
Parameter UNSIGNED_INT(GL_UNSIGNED_INT);
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 {

View File

@ -22,6 +22,7 @@ namespace graphics {
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; }
private:
union {

View File

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

View File

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

View File

@ -7,6 +7,7 @@
#include "CRC.h"
#include "convert.h"
#include "Graphics/ObjectHandle.h"
#include "Graphics/Parameter.h"
typedef u32 (*GetTexelFunc)( u64 *src, u16 x, u16 i, u8 palette );
@ -80,7 +81,7 @@ private:
void _updateBackground();
void _clear();
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::map<u32, Textures::iterator> Texture_Locations;