Rendering fixes for script nodes and certain UV anim modes

This commit is contained in:
parax0 2015-08-20 12:34:05 -04:00
parent 63c8351dcf
commit 3542759c74
2 changed files with 34 additions and 15 deletions

View File

@ -146,11 +146,22 @@ bool CMaterial::SetCurrent(ERenderOptions Options)
for (u32 iPass = 0; iPass < mPasses.size(); iPass++)
mPasses[iPass]->SetAnimCurrent(Options, iPass);
CGraphics::UpdateVertexBlock();
CGraphics::UpdatePixelBlock();
sCurrentMaterial = HashParameters();
}
// If the passes are otherwise the same, update UV anims that use the model matrix
else
{
for (u32 iPass = 0; iPass < mPasses.size(); iPass++)
{
EUVAnimMode mode = mPasses[iPass]->AnimMode();
if ((mode == eInverseMV) || (mode == eInverseMVTranslated) ||
(mode == eModelMatrix) || (mode == eSimpleMode))
mPasses[iPass]->SetAnimCurrent(Options, iPass);
}
}
// Bind textures
CShader *pShader = CShader::CurrentShader();
@ -164,6 +175,11 @@ bool CMaterial::SetCurrent(ERenderOptions Options)
// Bind num lights
GLuint NumLightsLoc = pShader->GetUniformLocation("NumLights");
glUniform1i(NumLightsLoc, CGraphics::sNumLights);
// Update shader blocks
CGraphics::UpdateVertexBlock();
CGraphics::UpdatePixelBlock();
return true;
}

View File

@ -115,26 +115,29 @@ void CScriptNode::Draw(ERenderOptions Options)
{
if (!mpInstance) return;
if (!mpActiveModel)
{
glBlendFuncSeparate(GL_ONE, GL_ZERO, GL_ZERO, GL_ZERO);
glDepthMask(GL_TRUE);
LoadModelMatrix();
CGraphics::SetDefaultLighting();
CGraphics::UpdateLightBlock();
CDrawUtil::DrawShadedCube(CColor::skTransparentPurple);
return;
}
// Set lighting
LoadModelMatrix();
LoadLights();
if (CGraphics::sLightMode == CGraphics::WorldLighting)
CGraphics::sVertexBlock.COLOR0_Amb = CGraphics::sAreaAmbientColor.ToVector4f() * CGraphics::sWorldLightMultiplier;
else
CGraphics::sVertexBlock.COLOR0_Amb = CGraphics::skDefaultAmbientColor.ToVector4f();
LoadModelMatrix();
LoadLights();
// Default to drawing purple box if no model
if (!mpActiveModel)
{
glBlendFuncSeparate(GL_ONE, GL_ZERO, GL_ZERO, GL_ZERO);
glDepthMask(GL_TRUE);
LoadModelMatrix();
CGraphics::UpdateVertexBlock();
CGraphics::UpdateLightBlock();
CDrawUtil::DrawShadedCube(CColor::skTransparentPurple);
return;
}
// Set tev color (used rarely)
CGraphics::sPixelBlock.TevColor = mpInstance->GetTevColor().ToVector4f();
mpActiveModel->Draw(Options, 0);