Rendering fixes for script nodes and certain UV anim modes
This commit is contained in:
parent
63c8351dcf
commit
3542759c74
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue