Some corrections, fragment lighting still not working

This commit is contained in:
fincs 2015-09-14 17:00:58 +02:00
parent 53cf76feac
commit 133d10c629
4 changed files with 11 additions and 9 deletions

View File

@ -61,7 +61,7 @@ struct C3D_LightEnv_t
void C3D_LightEnvInit(C3D_LightEnv* env); void C3D_LightEnvInit(C3D_LightEnv* env);
void C3D_LightEnvBind(C3D_LightEnv* env); void C3D_LightEnvBind(C3D_LightEnv* env);
void C3D_LightEnvMaterial(C3D_LightEnv* env, C3D_Material* mtl); void C3D_LightEnvMaterial(C3D_LightEnv* env, const C3D_Material* mtl);
void C3D_LightEnvAmbient(C3D_LightEnv* env, float r, float g, float b); void C3D_LightEnvAmbient(C3D_LightEnv* env, float r, float g, float b);
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------

View File

@ -66,7 +66,7 @@ void C3Di_EffectBind(C3D_Effect* e)
GPUCMD_AddWrite(GPUREG_BLEND_CONFIG, e->alphaBlend); GPUCMD_AddWrite(GPUREG_BLEND_CONFIG, e->alphaBlend);
GPUCMD_AddMaskedWrite(GPUREG_BLEND_ENABLE, 2, 0x00000100); GPUCMD_AddMaskedWrite(GPUREG_BLEND_ENABLE, 2, 0x00000100);
// Wat // Disable early depth test?
GPUCMD_AddMaskedWrite(GPUREG_0062, 1, 0); GPUCMD_AddMaskedWrite(GPUREG_0062, 1, 0);
GPUCMD_AddWrite(GPUREG_0118, 0); GPUCMD_AddWrite(GPUREG_0118, 0);
} }

View File

@ -27,6 +27,7 @@ int C3D_LightInit(C3D_Light* light, C3D_LightEnv* env)
break; break;
if (i == 8) return -1; if (i == 8) return -1;
env->lights[i] = light;
light->flags = C3DF_Light_Enabled | C3DF_Light_Dirty | C3DF_Light_MatDirty; light->flags = C3DF_Light_Enabled | C3DF_Light_Dirty | C3DF_Light_MatDirty;
light->id = i; light->id = i;
light->parent = env; light->parent = env;
@ -92,10 +93,10 @@ static void C3Di_EnableCommon(C3D_Light* light, bool enable, u32 bit)
C3D_LightEnv* env = light->parent; C3D_LightEnv* env = light->parent;
u32* var = &env->conf.config[1]; u32* var = &env->conf.config[1];
if ((*var & bit) == bit) if ((*var & bit) ^ bit)
return; return;
if (enable) if (!enable)
*var |= bit; *var |= bit;
else else
*var &= ~bit; *var &= ~bit;

View File

@ -32,14 +32,15 @@ static void C3Di_LightEnvUpdate(C3D_LightEnv* env)
if (!(light->flags & C3DF_Light_Enabled)) continue; if (!(light->flags & C3DF_Light_Enabled)) continue;
conf->permutation |= GPU_LIGHTPERM(conf->numLights++, i); conf->permutation |= GPU_LIGHTPERM(conf->numLights++, i);
} }
if (conf->numLights > 0) conf->numLights --;
env->flags &= ~C3DF_LightEnv_LCDirty; env->flags &= ~C3DF_LightEnv_LCDirty;
env->flags |= C3DF_LightEnv_Dirty; env->flags |= C3DF_LightEnv_Dirty;
} }
if (env->flags & C3DF_Light_MatDirty) if (env->flags & C3DF_LightEnv_MtlDirty)
{ {
C3Di_LightEnvMtlBlend(env); C3Di_LightEnvMtlBlend(env);
env->flags &= ~C3DF_Light_MatDirty; env->flags &= ~C3DF_LightEnv_MtlDirty;
env->flags |= C3DF_LightEnv_Dirty; env->flags |= C3DF_LightEnv_Dirty;
} }
@ -124,7 +125,7 @@ void C3D_LightEnvInit(C3D_LightEnv* env)
env->flags = C3DF_LightEnv_Dirty; env->flags = C3DF_LightEnv_Dirty;
env->conf.config[0] = (4<<8) | BIT(27) | BIT(31); env->conf.config[0] = (4<<8) | BIT(27) | BIT(31);
env->conf.config[1] = ~0; env->conf.config[1] = ~0;
env->conf.lutInput.abs = 0xFF; env->conf.lutInput.abs = 0x2222222;
} }
void C3D_LightEnvBind(C3D_LightEnv* env) void C3D_LightEnvBind(C3D_LightEnv* env)
@ -141,10 +142,10 @@ void C3D_LightEnvBind(C3D_LightEnv* env)
ctx->lightEnv = env; ctx->lightEnv = env;
} }
void C3D_LightEnvMaterial(C3D_LightEnv* env, C3D_Material* mtl) void C3D_LightEnvMaterial(C3D_LightEnv* env, const C3D_Material* mtl)
{ {
int i; int i;
memcpy(&env->material, mtl, sizeof(C3D_Material)); memcpy(&env->material, mtl, sizeof(*mtl));
env->flags |= C3DF_LightEnv_MtlDirty; env->flags |= C3DF_LightEnv_MtlDirty;
for (i = 0; i < 8; i ++) for (i = 0; i < 8; i ++)
{ {