Initial Grease Pencil 3.0 stage #106848

Merged
Falk David merged 224 commits from filedescriptor/blender:grease-pencil-v3 into main 2023-05-30 11:14:22 +02:00
2 changed files with 47 additions and 8 deletions
Showing only changes of commit ea442d52d6 - Show all commits

View File

@ -1098,12 +1098,13 @@ void GreasePencil::save_layer_tree_to_storage()
this->layer_tree_storage.active_layer_index = this->runtime->active_layer_index();
}

Is the - meant to be a 1)? I think 1. is a bit more common in code comments than 1)

Is the `-` meant to be a `1)`? I think `1.` is a bit more common in code comments than `1)`
static void read_layer_node_recursive(blender::bke::greasepencil::LayerGroup &current_group,
GreasePencilLayerTreeNode **nodes,
int index)
static int read_layer_node_recursive(blender::bke::greasepencil::LayerGroup &current_group,
GreasePencilLayerTreeNode **nodes,
int node_index)
{
using namespace blender::bke::greasepencil;
GreasePencilLayerTreeNode *node = nodes[index];
GreasePencilLayerTreeNode *node = nodes[node_index];
int total_nodes_read = 0;
switch (node->type) {
case GREASE_PENCIL_LAYER_TREE_LEAF: {
GreasePencilLayerTreeLeaf *node_leaf = reinterpret_cast<GreasePencilLayerTreeLeaf *>(node);
@ -1113,18 +1114,22 @@ static void read_layer_node_recursive(blender::bke::greasepencil::LayerGroup &cu
node_leaf->layer.frames_storage.values[i]);
}
current_group.add_layer(std::move(new_layer));
total_nodes_read++;
break;
}
case GREASE_PENCIL_LAYER_TREE_GROUP: {
GreasePencilLayerTreeGroup *group = reinterpret_cast<GreasePencilLayerTreeGroup *>(node);
LayerGroup new_group(group->base.name);
for (int i = 0; i < group->children_num; i++) {
read_layer_node_recursive(new_group, nodes, index + i + 1);
total_nodes_read += read_layer_node_recursive(
new_group, nodes, node_index + total_nodes_read + 1);
}
current_group.add_group(std::move(new_group));
total_nodes_read++;
break;
}
}
return total_nodes_read;
}
void GreasePencil::load_layer_tree_from_storage()
@ -1137,11 +1142,13 @@ void GreasePencil::load_layer_tree_from_storage()
GreasePencilLayerTreeNode *root = reinterpret_cast<GreasePencilLayerTreeNode *>(
this->layer_tree_storage.nodes[0]);
BLI_assert(root->type == GREASE_PENCIL_LAYER_TREE_GROUP);

GreasePencilLayerMask *mask = &masks_storage -> GreasePencilLayerMask &mask = masks_storage

`GreasePencilLayerMask *mask = &masks_storage` -> `GreasePencilLayerMask &mask = masks_storage`
int total_nodes_read = 0;
for (int i = 0; i < reinterpret_cast<GreasePencilLayerTreeGroup *>(root)->children_num; i++) {
read_layer_node_recursive(
this->runtime->root_group_for_write(), this->layer_tree_storage.nodes, i + 1);
total_nodes_read += read_layer_node_recursive(this->runtime->root_group_for_write(),
this->layer_tree_storage.nodes,
total_nodes_read + 1);
}
BLI_assert(total_nodes_read + 1 == this->layer_tree_storage.nodes_num);
this->runtime->set_active_layer_index(this->layer_tree_storage.active_layer_index);
}

View File

@ -39,6 +39,38 @@ TEST(greasepencil, create_grease_pencil_id)
EXPECT_EQ(grease_pencil.root_group().num_children_total(), 0);
}
filedescriptor marked this conversation as resolved Outdated

Add tests for load_layer_tree_from_storage and save_layer_tree_to_storage.

Add tests for `load_layer_tree_from_storage` and `save_layer_tree_to_storage`.
TEST(greasepencil, save_layer_tree_to_storage)
{
GreasePencilIDTestContext ctx;
GreasePencil &grease_pencil = *static_cast<GreasePencil *>(BKE_id_new(ctx.bmain, ID_GP, "GP"));
StringRefNull names[7] = {"Group1", "Layer1", "Layer2", "Group2", "Layer3", "Layer4", "Layer5"};
LayerGroup group(names[0]);
group.add_layer(Layer(names[1]));
group.add_layer(Layer(names[2]));
LayerGroup group2(names[3]);
group2.add_layer(Layer(names[4]));
group2.add_layer(Layer(names[5]));
group.add_group(std::move(group2));
grease_pencil.root_group_for_write().add_group(std::move(group));
grease_pencil.root_group_for_write().add_layer(Layer(names[6]));
/* Save to storage. */
grease_pencil.free_layer_tree_storage();
grease_pencil.save_layer_tree_to_storage();
MEM_delete(grease_pencil.runtime);
/* Load from storage. */
grease_pencil.runtime = MEM_new<blender::bke::GreasePencilRuntime>(__func__);
grease_pencil.load_layer_tree_from_storage();
grease_pencil.root_group_for_write().foreach_children_with_index_pre_order(
[&](uint64_t i, TreeNode &child) { EXPECT_STREQ(child.name, names[i].data()); });
}
TEST(greasepencil, set_active_layer_index)
{
GreasePencilIDTestContext ctx;