VideoCommon: use the Light struct in XF memory

This commit is contained in:
degasus
2014-05-30 14:54:16 +02:00
parent e642c8d0c1
commit 027baad73b
5 changed files with 22 additions and 26 deletions

View File

@ -108,16 +108,15 @@ void PixelShaderManager::SetConstants()
// lights don't have a 1 to 1 mapping, the color component needs to be converted to 4 floats
int istart = nLightsChanged[0] / 0x10;
int iend = (nLightsChanged[1] + 15) / 0x10;
const float* xfmemptr = (const float*)&xfmem.lights[0x10 * istart];
for (int i = istart; i < iend; ++i)
{
u32 color = *(const u32*)(xfmemptr + 3);
constants.plight_colors[i][0] = (color >> 24) & 0xFF;
constants.plight_colors[i][1] = (color >> 16) & 0xFF;
constants.plight_colors[i][2] = (color >> 8) & 0xFF;
constants.plight_colors[i][3] = (color) & 0xFF;
xfmemptr += 4;
const Light& light = xfmem.lights[i];
constants.plight_colors[i][0] = light.color[3];
constants.plight_colors[i][1] = light.color[2];
constants.plight_colors[i][2] = light.color[1];
constants.plight_colors[i][3] = light.color[0];
const float* xfmemptr = light.cosatt;
for (int j = 0; j < 4; ++j, xfmemptr += 3)
{

View File

@ -247,16 +247,17 @@ void VertexShaderManager::SetConstants()
// lights don't have a 1 to 1 mapping, the color component needs to be converted to 4 floats
int istart = nLightsChanged[0] / 0x10;
int iend = (nLightsChanged[1] + 15) / 0x10;
const float* xfmemptr = (const float*)&xfmem.lights[0x10 * istart];
for (int i = istart; i < iend; ++i)
{
u32 color = *(const u32*)(xfmemptr + 3);
constants.light_colors[i][0] = (color >> 24) & 0xFF;
constants.light_colors[i][1] = (color >> 16) & 0xFF;
constants.light_colors[i][2] = (color >> 8) & 0xFF;
constants.light_colors[i][3] = (color) & 0xFF;
xfmemptr += 4;
const Light& light = xfmem.lights[i];
// xfmem.light.color is packed as abgr in u8[4], so we have to swap the order
constants.light_colors[i][0] = light.color[3];
constants.light_colors[i][1] = light.color[2];
constants.light_colors[i][2] = light.color[1];
constants.light_colors[i][3] = light.color[0];
const float* xfmemptr = light.cosatt;
for (int j = 0; j < 4; ++j, xfmemptr += 3)
{

View File

@ -194,13 +194,9 @@ union DualTexInfo
struct Light
{
u32 useless[3];
u32 color; // rgba
float a0; // attenuation
float a1;
float a2;
float k0; // k stuff
float k1;
float k2;
u8 color[4];
float cosatt[3]; // cos attenuation
float distatt[3]; // dist attenuation
union
{
@ -241,7 +237,7 @@ struct XFMemory
u32 normalMatrices[96]; // 0x0400 - 0x045f
u32 unk1[160]; // 0x0460 - 0x04ff
u32 postMatrices[256]; // 0x0500 - 0x05ff
u32 lights[128]; // 0x0600 - 0x067f
Light lights[8]; // 0x0600 - 0x067f
u32 unk2[2432]; // 0x0680 - 0x0fff
u32 error; // 0x1000
u32 diag; // 0x1001