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
5 changed files with 19 additions and 9 deletions
Showing only changes of commit d764640076 - Show all commits

View File

@ -452,7 +452,7 @@ void GreasePencil::foreach_visible_drawing(
using namespace blender::bke::gpencil;
blender::Span<GreasePencilDrawingOrReference *> drawings = this->drawings();
for (TreeNode &node : this->runtime->root_group().children_in_pre_order()) {
for (TreeNode &node : this->root_group().children_in_pre_order()) {
if (!node.is_layer()) {
continue;
}
@ -476,7 +476,7 @@ blender::bke::gpencil::Layer *GreasePencil::get_active_layer()
{
using namespace blender::bke::gpencil;
/* TOOD. For now get the first layer. */
for (TreeNode &node : this->runtime->root_group().children_in_pre_order()) {
for (TreeNode &node : this->root_group().children_in_pre_order()) {
if (!node.is_layer()) {
continue;
}
@ -485,6 +485,12 @@ blender::bke::gpencil::Layer *GreasePencil::get_active_layer()
return nullptr;

I believe it's standard to std::move from a T &&

Is there a need for overloads for T & and T &&? What's the benefit of that?

I believe it's standard to `std::move` from a `T &&` Is there a need for overloads for `T &` and `T &&`? What's the benefit of that?
}
blender::bke::gpencil::LayerGroup &GreasePencil::root_group()
{
BLI_assert(this->runtime != nullptr);
return this->runtime->root_group();
}
void GreasePencil::read_drawing_array(BlendDataReader *reader)
{
BLO_read_pointer_array(reader, (void **)&this->drawing_array);
@ -617,14 +623,14 @@ void GreasePencil::save_layer_tree_to_storage()
{
using namespace blender::bke::gpencil;
/* We always store the root group, so we have to add one here. */
int num_tree_nodes = this->runtime->root_group().total_num_children() + 1;
int num_tree_nodes = this->root_group().total_num_children() + 1;
this->layer_tree_storage.nodes_num = num_tree_nodes;
this->layer_tree_storage.nodes = MEM_cnew_array<GreasePencilLayerTreeNode *>(num_tree_nodes,
__func__);
int i = 0;
save_layer_group_to_storage(this->runtime->root_group(), &this->layer_tree_storage.nodes[i++]);
for (TreeNode &node : this->runtime->root_group().children_in_pre_order()) {
save_layer_group_to_storage(this->root_group(), &this->layer_tree_storage.nodes[i++]);
for (TreeNode &node : this->root_group().children_in_pre_order()) {
GreasePencilLayerTreeNode **dst = &this->layer_tree_storage.nodes[i];
if (node.is_group()) {
LayerGroup &group = node.as_group();

View File

@ -109,7 +109,7 @@ void legacy_gpencil_to_grease_pencil(GreasePencil &grease_pencil, bGPdata &gpd)
int i = 0;
LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd.layers) {
Layer &new_layer = grease_pencil.runtime->root_group().add_layer(Layer(gpl->info));
Layer &new_layer = grease_pencil.root_group().add_layer(Layer(gpl->info));
LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) {
grease_pencil.drawing_array[i] = reinterpret_cast<GreasePencilDrawingOrReference *>(
MEM_new<GreasePencilDrawing>(__func__));

View File

@ -35,7 +35,7 @@ TEST(gpencil, create_grease_pencil_id)
GreasePencil *grease_pencil = static_cast<GreasePencil *>(BKE_id_new(ctx.bmain, ID_GP, "GP"));
EXPECT_EQ(grease_pencil->drawings().size(), 0);
EXPECT_EQ(grease_pencil->runtime->root_group().total_num_children(), 0);
EXPECT_EQ(grease_pencil->root_group().total_num_children(), 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`.

View File

@ -124,7 +124,7 @@ class ObjectModule {
}
uint layer_offset = layers_.object_offset_get();
grease_pencil.runtime->root_group().foreach_layer_pre_order(
grease_pencil.root_group().foreach_layer_pre_order(
[&](Layer &layer) { layers_.sync(object, layer, do_layer_blending); });
/* Order rendering using camera Z distance. */

View File

@ -20,6 +20,7 @@ class GreasePencilDrawingRuntime;
struct StrokePoint;
namespace gpencil {
class Layer;
class LayerGroup;
}
} // namespace blender::bke
using GreasePencilRuntimeHandle = blender::bke::GreasePencilRuntime;
@ -187,7 +188,6 @@ typedef struct GreasePencil {
/* Only used for storage in the .blend file. */
GreasePencilLayerTreeStorage layer_tree_storage;
#ifdef __cplusplus
blender::bke::gpencil::Layer *get_active_layer();
void save_layer_tree_to_storage();
void load_layer_tree_from_storage();
void read_layer_tree_storage(BlendDataReader *reader);
@ -210,6 +210,10 @@ typedef struct GreasePencil {
* Runtime struct pointer.
*/
GreasePencilRuntimeHandle *runtime;
#ifdef __cplusplus
blender::bke::gpencil::Layer *get_active_layer();
blender::bke::gpencil::LayerGroup &root_group();
#endif
} GreasePencil;
#ifdef __cplusplus