removed all dependence on NodeOutputs

If Nodes only have the one output, we don't need to do so much differentiation
between them. Previous iteration used outputs as like a distinct function
within a Node (e.g. length output would return one result, buffer output would
produce a different result - each run different code to produce their results).
Now in this iteration, it's more accurate to say a Node is just one function
(which seems more appropriate for a node system anyway).
This commit is contained in:
itsmattkc
2019-12-06 00:23:26 +11:00
parent f424d8b44e
commit d25dda5275
45 changed files with 253 additions and 407 deletions
+4 -4
View File
@@ -140,13 +140,13 @@ void TrackList::AddTrack()
NodeParam::ConnectEdge(track->track_output(), current_last_track->track_input());
// FIXME: Test code only
if (current_last_track->buffer_output()->IsConnected()) {
if (current_last_track->output()->IsConnected()) {
AlphaOverBlend* blend = new AlphaOverBlend();
GetParentGraph()->AddNode(blend);
NodeParam::ConnectEdge(track->buffer_output(), blend->blend_input());
NodeParam::ConnectEdge(current_last_track->buffer_output(), blend->base_input());
NodeParam::ConnectEdge(blend->texture_output(), current_last_track->buffer_output()->edges().first()->input());
NodeParam::ConnectEdge(track->output(), blend->blend_input());
NodeParam::ConnectEdge(current_last_track->output(), blend->base_input());
NodeParam::ConnectEdge(blend->output(), current_last_track->output()->edges().first()->input());
}
// End test code
}
+33 -5
View File
@@ -148,6 +148,34 @@ Block *TrackOutput::NearestBlockAfter(const rational &time) const
return nullptr;
}
Block *TrackOutput::BlockAtTime(const rational &time) const
{
foreach (Block* block, block_cache_) {
if (block
&& block->in() <= time
&& block->out() > time) {
return block;
}
}
return nullptr;
}
QList<Block *> TrackOutput::BlocksAtTimeRange(const TimeRange &range) const
{
QList<Block*> list;
foreach (Block* block, block_cache_) {
if (block
&& block->out() > range.in()
&& block->in() < range.out()) {
list.append(block);
}
}
return list;
}
const QVector<Block *> &TrackOutput::Blocks() const
{
return block_cache_;
@@ -191,7 +219,7 @@ void TrackOutput::InsertBlockAtIndex(Block *block, int index)
AddBlockToGraph(block);
block_input_->InsertAt(index);
NodeParam::ConnectEdge(block->block_output(),
NodeParam::ConnectEdge(block->output(),
block_input_->ParamAt(index));
}
@@ -203,7 +231,7 @@ void TrackOutput::AppendBlock(Block *block)
int last_index = block_input_->GetSize();
block_input_->Append();
NodeParam::ConnectEdge(block->block_output(),
NodeParam::ConnectEdge(block->output(),
block_input_->ParamAt(last_index));
UnblockInvalidateCache();
@@ -264,10 +292,10 @@ void TrackOutput::ReplaceBlock(Block *old, Block *replace)
int index_of_old_block = block_cache_.indexOf(old);
NodeParam::DisconnectEdge(old->block_output(),
NodeParam::DisconnectEdge(old->output(),
block_input_->ParamAt(index_of_old_block));
NodeParam::ConnectEdge(replace->block_output(),
NodeParam::ConnectEdge(replace->output(),
block_input_->ParamAt(index_of_old_block));
UnblockInvalidateCache();
@@ -277,7 +305,7 @@ void TrackOutput::ReplaceBlock(Block *old, Block *replace)
TrackOutput *TrackOutput::TrackFromBlock(Block *block)
{
NodeOutput* output = block->block_output();
NodeOutput* output = block->output();
foreach (NodeEdgePtr edge, output->edges()) {
Node* n = edge->input()->parentNode();
+3
View File
@@ -60,6 +60,9 @@ public:
Block* NearestBlockAfter(const rational& time) const;
Block* BlockAtTime(const rational& time) const;
QList<Block*> BlocksAtTimeRange(const TimeRange& range) const;
const QVector<Block*>& Blocks() const;
virtual void InvalidateCache(const rational& start_range, const rational& end_range, NodeInput* from = nullptr) override;