fix bbox handling

This commit is contained in:
shun-iwasawa 2022-03-12 01:07:15 +09:00 committed by manongjohn
parent c8ec7ca76a
commit 73164b3b33
3 changed files with 20 additions and 3 deletions

View file

@ -134,6 +134,11 @@ void Iwa_TileFx::transform(double frame, int port, const TRectD &rectOnOutput,
TRectD &rectOnInput, TRenderSettings &infoOnInput) {
infoOnInput = infoOnOutput;
if (!m_input.isConnected()) {
rectOnInput.empty();
return;
}
TRectD inputBox;
m_input->getBBox(frame, inputBox, infoOnOutput);
@ -161,6 +166,8 @@ void Iwa_TileFx::transform(double frame, int port, const TRectD &rectOnOutput,
int Iwa_TileFx::getMemoryRequirement(const TRectD &rect, double frame,
const TRenderSettings &info) {
if (!m_input.isConnected()) return 0;
TRectD inputBox;
m_input->getBBox(frame, inputBox, info);

View file

@ -90,6 +90,11 @@ void TileFx::transform(double frame, int port, const TRectD &rectOnOutput,
TRenderSettings &infoOnInput) {
infoOnInput = infoOnOutput;
if (!m_input.isConnected()) {
rectOnInput.empty();
return;
}
TRectD inputBox;
m_input->getBBox(frame, inputBox, infoOnOutput);
@ -116,6 +121,8 @@ void TileFx::transform(double frame, int port, const TRectD &rectOnOutput,
int TileFx::getMemoryRequirement(const TRectD &rect, double frame,
const TRenderSettings &info) {
if (!m_input.isConnected()) return 0;
TRectD inputBox;
m_input->getBBox(frame, inputBox, info);
@ -157,7 +164,7 @@ void TileFx::doCompute(TTile &tile, double frame, const TRenderSettings &ri) {
//------------------------------------------------------------------------------
//! Make the tile of the image contained in \b inputTile in \b tile
/*
*/
*/
void TileFx::makeTile(const TTile &inputTile, const TTile &tile) const {
// Build the mirroring pattern. It obviously repeats itself out of 2x2 tile
// blocks.

View file

@ -541,8 +541,11 @@ TAffine TRasterFx::handledAffine(const TRenderSettings &info, double frame) {
bool TRasterFx::getBBox(double frame, TRectD &bBox,
const TRenderSettings &info) {
bool ret = doGetBBox(frame, bBox, info);
bBox = info.m_affine * bBox;
enlargeToI(bBox);
if (!bBox.isEmpty()) { // TODO: check if bbox can always be empty when ret ==
// false
bBox = info.m_affine * bBox;
enlargeToI(bBox);
}
return ret;
}