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_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);
//-----------------------------------------------------------------------------

View File

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

View File

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

View File

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