Fix (partial) referenced fills on plastic deformed levels
This commit is contained in:
parent
88618608a3
commit
1837a2ad3d
6 changed files with 27 additions and 9 deletions
|
@ -67,6 +67,8 @@ public:
|
|||
bool m_drawBlankFrame;
|
||||
bool m_useChecks; //!< whether to consider paint check and ink check
|
||||
bool m_forSceneIcon = false; // whether it is redered for the scene icons
|
||||
bool m_forReference =
|
||||
false; // whether it is rendered for reference operations
|
||||
public:
|
||||
VisualSettings();
|
||||
|
||||
|
|
|
@ -150,7 +150,8 @@ the specified
|
|||
32-bit raster.
|
||||
*/
|
||||
void renderFrame(const TRaster32P &ras, int row, const TXsheet *xsh = 0,
|
||||
bool checkFlags = true) const;
|
||||
bool checkFlags = true, bool forSceneIcon = true,
|
||||
bool forReference = false) const;
|
||||
|
||||
/*!
|
||||
Performs a camera-stand render of the specified xsheet in the specified
|
||||
|
|
|
@ -222,7 +222,10 @@ DrawableTextureDataP TTexturesStorage::getTextureData(
|
|||
|
||||
// If there is no known associated display lists space, the texture cannot be
|
||||
// stored.
|
||||
if (dlSpaceId < 0) return DrawableTextureDataP();
|
||||
// if (dlSpaceId < 0) return DrawableTextureDataP();
|
||||
|
||||
// If from an offline display, let's see if found under display 0
|
||||
if (dlSpaceId < 0) dlSpaceId = 0;
|
||||
|
||||
QMutexLocker locker(&l_mutex);
|
||||
|
||||
|
|
|
@ -457,13 +457,18 @@ bool fill(const TRasterCM32P &r, const FillParameters ¶ms,
|
|||
ToonzScene *scene = xsheet->getScene();
|
||||
TCamera *camera = scene->getCurrentCamera();
|
||||
TRaster32P tmpRaster(camera->getRes());
|
||||
scene->renderFrame(tmpRaster, frameIndex);
|
||||
|
||||
// Render for reference
|
||||
scene->renderFrame(tmpRaster, frameIndex, xsheet, false, false, true);
|
||||
|
||||
refRaster->lock();
|
||||
|
||||
TPoint offset((params.m_imageSize.lx - tmpRaster->getLx()) / 2,
|
||||
(params.m_imageSize.ly - tmpRaster->getLy()) / 2);
|
||||
offset -= params.m_imageOffset;
|
||||
|
||||
refRaster->fill(color);
|
||||
refRaster->copy(tmpRaster, offset);
|
||||
refRaster->lock();
|
||||
|
||||
refpix = refRaster->pixels(p.y) + p.x;
|
||||
clickedPosColor = *refpix;
|
||||
|
@ -881,13 +886,15 @@ void fullColorFill(const TRaster32P &ras, const FillParameters ¶ms,
|
|||
ToonzScene *scene = xsheet->getScene();
|
||||
TCamera *camera = scene->getCurrentCamera();
|
||||
TRaster32P tmpRaster(camera->getRes());
|
||||
scene->renderFrame(tmpRaster, frameIndex);
|
||||
scene->renderFrame(tmpRaster, frameIndex, xsheet, false, false, true);
|
||||
|
||||
refRas->lock();
|
||||
|
||||
TPoint offset((refRas->getLx() - tmpRaster->getLx()) / 2,
|
||||
(refRas->getLy() - tmpRaster->getLy()) / 2);
|
||||
refRas->fill(color);
|
||||
refRas->copy(tmpRaster, offset);
|
||||
|
||||
refRas->lock();
|
||||
clickedPosColor = *(refRas->pixels(y) + x);
|
||||
}
|
||||
|
||||
|
|
|
@ -795,7 +795,7 @@ void RasterPainter::onImage(const Stage::Player &player) {
|
|||
TStageObject *obj =
|
||||
::plasticDeformedObj(player, m_vs.m_plasticVisualSettings);
|
||||
if (obj && QThread::currentThread() == qGuiApp->thread() &&
|
||||
!m_vs.m_forSceneIcon) {
|
||||
(!m_vs.m_forSceneIcon || m_vs.m_forReference)) {
|
||||
flushRasterImages();
|
||||
::onPlasticDeformedImage(obj, player, m_vs, m_viewAff);
|
||||
} else {
|
||||
|
@ -809,6 +809,8 @@ void RasterPainter::onImage(const Stage::Player &player) {
|
|||
else if (TToonzImageP ti = img)
|
||||
onToonzImage(ti.getPointer(), player);
|
||||
else if (TMeshImageP mi = img) {
|
||||
// Never draw mesh when building reference image
|
||||
if (m_vs.m_forReference) return;
|
||||
flushRasterImages();
|
||||
::onMeshImage(mi.getPointer(), player, m_vs, m_viewAff);
|
||||
}
|
||||
|
|
|
@ -709,7 +709,8 @@ int ToonzScene::getFrameCount() const {
|
|||
//-----------------------------------------------------------------------------
|
||||
|
||||
void ToonzScene::renderFrame(const TRaster32P &ras, int row, const TXsheet *xsh,
|
||||
bool checkFlags) const {
|
||||
bool checkFlags, bool forSceneIcon,
|
||||
bool forReference) const {
|
||||
if (xsh == 0) xsh = getXsheet();
|
||||
|
||||
TCamera *camera = xsh->getStageObjectTree()->getCurrentCamera();
|
||||
|
@ -738,7 +739,9 @@ void ToonzScene::renderFrame(const TRaster32P &ras, int row, const TXsheet *xsh,
|
|||
|
||||
ImagePainter::VisualSettings vs;
|
||||
vs.m_plasticVisualSettings.m_drawMeshesWireframe = false;
|
||||
vs.m_forSceneIcon = true;
|
||||
vs.m_forSceneIcon = forSceneIcon;
|
||||
vs.m_forReference = forReference;
|
||||
vs.m_sceneProperties = xsh->getScene()->getProperties();
|
||||
|
||||
Stage::RasterPainter painter(ras->getSize(), viewAff, clipRect, vs,
|
||||
checkFlags);
|
||||
|
|
Loading…
Reference in a new issue