nodes: rework so that jobs can be completely deferred
Big optimization requiring a lot of refactoring.
This commit is contained in:
@@ -358,7 +358,7 @@ void MathNodeBase::ValueInternal(Operation operation, Pairing pairing, const QSt
|
||||
}
|
||||
} else if (pairing == kPairTextureMatrix) {
|
||||
// Only allow matrix multiplication
|
||||
const QVector2D &sequence_res = globals.resolution();
|
||||
const QVector2D &sequence_res = globals.nonsquare_resolution();
|
||||
QVector2D texture_res(texture->params().width() * texture->pixel_aspect_ratio().toDouble(), texture->params().height());
|
||||
|
||||
QMatrix4x4 adjusted_matrix = TransformDistortNode::AdjustMatrixByResolutions(number_val.toMatrix(),
|
||||
@@ -380,7 +380,7 @@ void MathNodeBase::ValueInternal(Operation operation, Pairing pairing, const QSt
|
||||
output->Push(texture_val);
|
||||
} else {
|
||||
// Push shader job
|
||||
output->Push(NodeValue::kTexture, QVariant::fromValue(job), this);
|
||||
output->Push(NodeValue::kTexture, Texture::Job(globals.vparams(), job), this);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -76,21 +76,19 @@ ShaderCode MergeNode::GetShaderCode(const ShaderRequest &request) const
|
||||
|
||||
void MergeNode::Value(const NodeValueRow &value, const NodeGlobals &globals, NodeValueTable *table) const
|
||||
{
|
||||
ShaderJob job;
|
||||
job.Insert(value);
|
||||
|
||||
TexturePtr base_tex = job.Get(kBaseIn).toTexture();
|
||||
TexturePtr blend_tex = job.Get(kBlendIn).toTexture();
|
||||
TexturePtr base_tex = value[kBaseIn].toTexture();
|
||||
TexturePtr blend_tex = value[kBlendIn].toTexture();
|
||||
|
||||
if (base_tex || blend_tex) {
|
||||
if (!base_tex || (blend_tex && blend_tex->channel_count() < VideoParams::kRGBAChannelCount)) {
|
||||
// We only have a blend texture or the blend texture is RGB only, no need to alpha over
|
||||
table->Push(job.Get(kBlendIn));
|
||||
table->Push(value[kBlendIn]);
|
||||
} else if (!blend_tex) {
|
||||
// We only have a base texture, no need to alpha over
|
||||
table->Push(job.Get(kBaseIn));
|
||||
table->Push(value[kBaseIn]);
|
||||
} else {
|
||||
table->Push(NodeValue::kTexture, QVariant::fromValue(job), this);
|
||||
table->Push(NodeValue::kTexture, base_tex->toJob(ShaderJob(value)), this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user