[Bf-blender-cvs] [4d267da78e2] gpencil-new-data-proposal: WIP commit

Falk David noreply at git.blender.org
Tue May 10 12:25:32 CEST 2022


Commit: 4d267da78e20881ce9a064e4ad6a2e3f4ee0adbb
Author: Falk David
Date:   Tue May 3 10:02:58 2022 +0200
Branches: gpencil-new-data-proposal
https://developer.blender.org/rB4d267da78e20881ce9a064e4ad6a2e3f4ee0adbb

WIP commit

===================================================================

M	source/blender/blenkernel/intern/gpencil_new_proposal.hh
M	source/blender/blenkernel/intern/gpencil_new_proposal_test.cc

===================================================================

diff --git a/source/blender/blenkernel/intern/gpencil_new_proposal.hh b/source/blender/blenkernel/intern/gpencil_new_proposal.hh
index b14290490a5..5db38608f6e 100644
--- a/source/blender/blenkernel/intern/gpencil_new_proposal.hh
+++ b/source/blender/blenkernel/intern/gpencil_new_proposal.hh
@@ -71,7 +71,7 @@ typedef struct GPData {
   int layers_size;
   int active_layer_index;
 
-  GPLayerGroup default_group;
+  GPLayerGroup *default_group;
 
   GPDataRuntimeHandle *runtime;
 } GPData;
diff --git a/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc b/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc
index 27397331e45..94a25a6e2b8 100644
--- a/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc
+++ b/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc
@@ -9,30 +9,108 @@
 #include "gpencil_new_proposal.hh"
 #include "testing/testing.h"
 
-namespace blender::bke {
+template<typename T> class GPVector {
+ private:
+  /**
+   * Address of the pointer to the begining of the vector.
+   */
+  T **start_;
+
+  /**
+   * Address of the size of the vector.
+   */
+  int *size_;
 
-class GPencilFrame : public CurvesGeometry {
  public:
-  GPencilFrame(){};
-  ~GPencilFrame() = default;
+  GPVector(T **start, int *size) {
+    this->start_ = start;
+    this->size_ = size;
+  }
+
+  int size() {
+    return size_;
+  }
 
-  CurvesGeometry &as_curves_geometry()
+  T *data()
   {
-    CurvesGeometry *geometry = reinterpret_cast<CurvesGeometry *>(this);
-    return *geometry;
+    return *start_;
   }
 
-  bool bounds_min_max(float3 &min, float3 &max)
+  void append(T &elem) {
+
+  }
+ 
+ private:
+  void realloc(const int64_t size)
   {
-    return as_curves_geometry().bounds_min_max(min, max);
+    /* Overwrite the size. */
+    *this->size_ = size;
+    /* Reallocate the array and overwrite the pointer to the beginning of the array. */
+    *this->start_ = static_cast<T *>(MEM_reallocN(*this->start_, size * sizeof(T)));
   }
-};
 
-class GPData : ::GPData {
- public:
-  GPData();
-  ~GPData();
-};
+}
+
+namespace blender::bke
+{
+
+  class GPLayerGroup : ::GPLayerGroup {
+   public:
+    GPLayerGroup()
+    {
+    }
+
+    ~GPLayerGroup()
+    {
+      /* Recursivly free the children of this layer group first. */
+      for (int i = 0; i < this->children_size; i++) {
+        MEM_delete(&this->children[i]);
+      }
+      /* Then free its data. */
+      MEM_SAFE_FREE(this->children);
+      MEM_SAFE_FREE(this->layer_indices);
+    }
+  };
+
+  class GPData : ::GPData {
+   public:
+    GPData()
+    {
+    }
+
+    GPData(int layers_size)
+    {
+      BLI_assert(layers_size > 0);
+
+      this->frames_size = 0;
+      this->layers_size = layers_size;
+
+      this->frames = nullptr;
+      CustomData_reset(&this->frame_data);
+      this->active_frame_index = -1;
+
+      this->layers = (::GPLayer *)MEM_calloc_arrayN(this->layers_size, sizeof(::GPLayer), __func__);
+      this->active_layer_index = 0;
+
+      this->default_group = MEM_new<GPLayerGroup>(__func__);
+
+      this->runtime = MEM_new<GPDataRuntime>(__func__);
+    }
+
+    ~GPData()
+    {
+      /* Free frames and frame custom data. */
+      MEM_SAFE_FREE(this->frames);
+      CustomData_free(&this->frame_data, this->frames_size);
+
+      /* Free layer and layer groups. */
+      MEM_SAFE_FREE(this->layers);
+      MEM_delete(reinterpret_cast<GPLayerGroup *>(this->default_group));
+      this->default_group = nullptr;
+
+      MEM_delete(this->runtime) this->runtime = nullptr;
+    }
+  };
 
 }  // namespace blender::bke
 
@@ -40,9 +118,16 @@ namespace blender::bke::gpencil::tests {
 
 TEST(gpencil_proposal, Foo)
 {
-  GPencilFrame my_frame;
-  float3 min, max;
-  EXPECT_FALSE(my_frame.bounds_min_max(min, max));
+  GPData my_data;
+  GPLayer my_layer("FooLayer");
+
+  my_data.add_layer(my_layer);
+  GPFrame my_frame = my_data.new_frame_on_layer(my_layer);
+  my_frame.set_start_and_end(5, 10);
+
+  GPStroke my_stroke(100);
+  fill_stroke_with_points(my_stroke);
+  my_frame.insert_stroke(my_stroke);
 }
 
 }  // namespace blender::bke::gpencil::tests
\ No newline at end of file



More information about the Bf-blender-cvs mailing list