[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