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
4 changed files with 10 additions and 3 deletions
Showing only changes of commit 409643e35b - Show all commits

View File

@ -291,7 +291,7 @@ class LayerGroup : public ::GreasePencilLayerTreeGroup {
Span<TreeNode *> nodes_for_write();
/**
* Returns a `Span` of pointers to all the `Layers`s in this group.
* Returns a `Span` of pointers to all the `Layer`s in this group.
*/
Span<const Layer *> layers() const;

= {} doesn't change anything here since Vector has a default constructor. It can be removed I think. Same with below

`= {}` doesn't change anything here since `Vector` has a default constructor. It can be removed I think. Same with below
Span<Layer *> layers_for_write();

Put out of line.

Put out of line.

View File

@ -48,6 +48,7 @@ static void grease_pencil_init_data(ID *id)
grease_pencil->runtime = MEM_new<GreasePencilRuntime>(__func__);
new (&grease_pencil->root_group) greasepencil::LayerGroup();
grease_pencil->active_layer = nullptr;
}
static void grease_pencil_copy_data(Main * /*bmain*/,
@ -158,6 +159,8 @@ static void grease_pencil_blend_write(BlendWriter *writer, ID *id, const void *i
grease_pencil->write_drawing_array(writer);
/* Write layer tree. */
grease_pencil->write_layer_tree(writer);
/* Write active layer pointer. */
BLO_write_raw(writer, sizeof(void *), grease_pencil->active_layer);
/* Write materials. */
BLO_write_pointer_array(
@ -177,6 +180,9 @@ static void grease_pencil_blend_read_data(BlendDataReader *reader, ID *id)
grease_pencil->read_drawing_array(reader);
/* Read layer tree. */
grease_pencil->read_layer_tree(reader);
/* Read active layer. */
BLO_read_data_address(reader, reinterpret_cast<void **>(&grease_pencil->active_layer));
/* Read materials. */
BLO_read_pointer_array(reader, reinterpret_cast<void **>(&grease_pencil->material_array));

View File

@ -52,7 +52,7 @@ struct PaintOperationExecutor {
* original object.
*/
GreasePencil &grease_pencil = *static_cast<GreasePencil *>(ob_eval->data);
if (grease_pencil.active_layer != NULL) {
if (!grease_pencil.has_active_layer()) {
/* TODO: create a new layer. */
BLI_assert_unreachable();
// grease_pencil.runtime->set_active_layer_index(0);
@ -93,7 +93,7 @@ void PaintOperation::on_stroke_done(const bContext &C)
GreasePencil &grease_pencil_orig = *static_cast<GreasePencil *>(obact->data);
GreasePencil &grease_pencil_eval = *static_cast<GreasePencil *>(ob_eval->data);
BLI_assert(grease_pencil_orig.active_layer != NULL && grease_pencil_eval.active_layer != NULL);
BLI_assert(grease_pencil_orig.has_active_layer() && grease_pencil_eval.has_active_layer());
const bke::greasepencil::Layer &active_layer_orig = grease_pencil_orig.active_layer->wrap();
const bke::greasepencil::Layer &active_layer_eval = grease_pencil_eval.active_layer->wrap();
int index_orig = active_layer_orig.drawing_index_at(scene->r.cfra);

View File

@ -436,6 +436,7 @@ typedef struct GreasePencil {
blender::Span<const blender::bke::greasepencil::Layer *> layers() const;
blender::Span<blender::bke::greasepencil::Layer *> layers_for_write();
bool has_active_layer() const;
void add_empty_drawings(int add_size);
void remove_drawing(int index);