Report memory required in final render dialog.

Fix broken state of ember during failed render with strips.
This commit is contained in:
mfeemster
2014-12-09 00:24:28 -08:00
parent 9263906cb5
commit 3e70b8eec6
10 changed files with 112 additions and 42 deletions

View File

@ -281,7 +281,7 @@ static bool StripsRender(RendererBase* renderer, Ember<T>& ember, vector<byte>&
std::function<void(size_t strip)> perStripError,
std::function<void(Ember<T>& finalEmber)> allStripsFinished)
{
bool success = true;
bool success = false;
size_t origHeight, realHeight = ember.m_FinalRasH;
T centerY = ember.m_CenterY;
T floatStripH = T(ember.m_FinalRasH) / T(strips);
@ -321,32 +321,29 @@ static bool StripsRender(RendererBase* renderer, Ember<T>& ember, vector<byte>&
renderer->SetEmber(ember);//Set one final time after modifications for strips.
}
if ((renderer->Run(finalImage, time, 0, false, stripOffset) != RENDER_OK) || renderer->Aborted() || finalImage.empty())
{
perStripError(strip);
success = false;
break;
}
else
if ((renderer->Run(finalImage, time, 0, false, stripOffset) == RENDER_OK) && !renderer->Aborted() && !finalImage.empty())
{
perStripFinish(strip);
}
else
{
perStripError(strip);
break;
}
if (strip == strips - 1)
{
//Restore the ember values to their original values.
if (strips > 1)
{
ember.m_Quality /= strips;
ember.m_FinalRasH = realHeight;
ember.m_CenterY = centerY;
renderer->SetEmber(ember);//Further processing will require the dimensions to match the original ember, so re-assign.
}
allStripsFinished(ember);
}
success = true;
}
//Restore the ember values to their original values.
ember.m_Quality /= strips;
ember.m_FinalRasH = realHeight;
ember.m_CenterY = centerY;
renderer->SetEmber(ember);//Further processing will require the dimensions to match the original ember, so re-assign.
if (success)
allStripsFinished(ember);
Memset(finalImage);
return success;