Merge pull request #439 from degasus/lighting-fix

Lighting cleanup
This commit is contained in:
Tony Wasserka
2014-06-21 12:17:26 +02:00
15 changed files with 157 additions and 196 deletions

View File

@ -1087,8 +1087,9 @@ void Renderer::ApplyState(bool bUseDstAlpha)
SetLogicOpMode();
}
D3D::context->PSSetConstantBuffers(0, 1, &PixelShaderCache::GetConstantBuffer());
D3D::context->VSSetConstantBuffers(0, 1, &VertexShaderCache::GetConstantBuffer());
ID3D11Buffer* const_buffers[2] = {PixelShaderCache::GetConstantBuffer(), VertexShaderCache::GetConstantBuffer()};
D3D::context->PSSetConstantBuffers(0, 1 + g_ActiveConfig.bEnablePixelLighting, const_buffers);
D3D::context->VSSetConstantBuffers(0, 1, const_buffers+1);
D3D::context->PSSetShader(PixelShaderCache::GetActiveShader(), nullptr, 0);
D3D::context->VSSetShader(VertexShaderCache::GetActiveShader(), nullptr, 0);

View File

@ -210,7 +210,7 @@ inline float SafeDivide(float n, float d)
void LightColor(const Vec3 &pos, const Vec3 &normal, u8 lightNum, const LitChannel &chan, Vec3 &lightCol)
{
const LightPointer *light = (const LightPointer*)&xfmem.lights[0x10*lightNum];
const LightPointer *light = (const LightPointer*)&xfmem.lights[lightNum];
if (!(chan.attnfunc & 1))
{
@ -295,7 +295,7 @@ void LightColor(const Vec3 &pos, const Vec3 &normal, u8 lightNum, const LitChann
void LightAlpha(const Vec3 &pos, const Vec3 &normal, u8 lightNum, const LitChannel &chan, float &lightCol)
{
const LightPointer *light = (const LightPointer*)&xfmem.lights[0x10*lightNum];
const LightPointer *light = (const LightPointer*)&xfmem.lights[lightNum];
if (!(chan.attnfunc & 1))
{
@ -476,7 +476,7 @@ void TransformTexCoord(const InputVertexData *src, OutputVertexData *dst, bool s
break;
case XF_TEXGEN_EMBOSS_MAP:
{
const LightPointer *light = (const LightPointer*)&xfmem.lights[0x10*texinfo.embosslightshift];
const LightPointer *light = (const LightPointer*)&xfmem.lights[texinfo.embosslightshift];
Vec3 ldir = (light->pos - dst->mvPosition).normalized();
float d1 = ldir * dst->normal[1];

View File

@ -23,7 +23,7 @@ void XFWritten(u32 transferSize, u32 baseAddress)
// fix lights so invalid values don't trash the lighting computations
if (baseAddress <= 0x067f && topAddress >= 0x0604)
{
u32* x = xfmem.lights;
u32* x = (u32*)xfmem.lights;
// go through all lights
for (int light = 0; light < 8; light++)