Try not to use memory on the stack
This commit is contained in:
parent
3e426d2375
commit
bb714cb9c0
|
@ -154,7 +154,7 @@ void UltraleapDevice::close() {
|
|||
}
|
||||
|
||||
void UltraleapDevice::on_frame_received(const LEAP_TRACKING_EVENT* frame) {
|
||||
Ref<UltraleapFrame> new_frame = memnew(UltraleapFrame);
|
||||
Ref<UltraleapFrame> new_frame = Ref<UltraleapFrame>(memnew(UltraleapFrame));
|
||||
UltraleapFrame::fill_frame_data(new_frame, frame);
|
||||
frame_mutex.lock();
|
||||
last_frame_ref = new_frame;
|
||||
|
|
|
@ -13,12 +13,6 @@
|
|||
|
||||
using namespace godot;
|
||||
|
||||
UltraleapDigit::UltraleapDigit() {
|
||||
metacarpal_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
|
||||
proximal_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
|
||||
intermediate_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
|
||||
distal_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
|
||||
}
|
||||
|
||||
void UltraleapDigit::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_type"), &UltraleapDigit::get_type);
|
||||
|
@ -111,6 +105,13 @@ void UltraleapDigit::_bind_methods() {
|
|||
}
|
||||
|
||||
void UltraleapDigit::fill_digit_data(Ref<UltraleapDigit> ul_digit, LEAP_DIGIT* digit, FingerType type) {
|
||||
if (ul_digit->metacarpal_ref == NULL) {
|
||||
ul_digit->metacarpal_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
|
||||
ul_digit->proximal_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
|
||||
ul_digit->intermediate_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
|
||||
ul_digit->distal_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
|
||||
}
|
||||
|
||||
ul_digit->is_extended = digit->is_extended == 1;
|
||||
ul_digit->type = type;
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@ class UltraleapDigit : public Resource {
|
|||
GDCLASS(UltraleapDigit, Resource);
|
||||
|
||||
public:
|
||||
UltraleapDigit();
|
||||
|
||||
enum FingerType {
|
||||
Thumb,
|
||||
|
|
|
@ -81,6 +81,13 @@ void UltraleapFrame::_bind_methods() {
|
|||
}
|
||||
|
||||
void UltraleapFrame::fill_frame_data(Ref<UltraleapFrame> ul_frame, const LEAP_TRACKING_EVENT* frame) {
|
||||
if (ul_frame->get_left_hand() == NULL) {
|
||||
ul_frame->set_left_hand(Ref<UltraleapHand>(memnew(UltraleapHand)));
|
||||
}
|
||||
if (ul_frame->get_right_hand() == NULL) {
|
||||
ul_frame->set_right_hand(Ref<UltraleapHand>(memnew(UltraleapHand)));
|
||||
}
|
||||
|
||||
ul_frame->id = frame->tracking_frame_id;
|
||||
ul_frame->framerate = frame->framerate;
|
||||
ul_frame->is_left_hand_visible = false;
|
||||
|
@ -89,11 +96,11 @@ void UltraleapFrame::fill_frame_data(Ref<UltraleapFrame> ul_frame, const LEAP_TR
|
|||
for (size_t i = 0; i < frame->nHands; i++)
|
||||
{
|
||||
if (frame->pHands[i].type == eLeapHandType_Left) {
|
||||
UltraleapHand::fill_hand_data(ul_frame->left_hand_ref, &frame->pHands[i]);
|
||||
UltraleapHand::fill_hand_data(ul_frame->get_left_hand(), &frame->pHands[i]);
|
||||
ul_frame->is_left_hand_visible = true;
|
||||
}
|
||||
else {
|
||||
UltraleapHand::fill_hand_data(ul_frame->right_hand_ref, &frame->pHands[i]);
|
||||
UltraleapHand::fill_hand_data(ul_frame->get_right_hand(), &frame->pHands[i]);
|
||||
ul_frame->is_right_hand_visible = true;
|
||||
}
|
||||
}
|
||||
|
|
12
src/frame.h
12
src/frame.h
|
@ -27,16 +27,16 @@ public:
|
|||
float framerate;
|
||||
|
||||
Ref<UltraleapHand> get_left_hand() { return left_hand_ref; }
|
||||
void set_left_hand(Ref<UltraleapHand> value) { return; }
|
||||
void set_left_hand(Ref<UltraleapHand> value) { left_hand_ref = value; }
|
||||
|
||||
Ref<UltraleapHand> get_right_hand() { return right_hand_ref; }
|
||||
void set_right_hand(Ref<UltraleapHand> value) { return; }
|
||||
void set_right_hand(Ref<UltraleapHand> value) { right_hand_ref = value; }
|
||||
|
||||
bool get_is_left_hand_visible() { return is_left_hand_visible; }
|
||||
void set_is_left_hand_visible(bool value) { return; }
|
||||
void set_is_left_hand_visible(bool value) { is_left_hand_visible = value; }
|
||||
|
||||
bool get_is_right_hand_visible() { return is_right_hand_visible; }
|
||||
void set_is_right_hand_visible(bool value) { return; }
|
||||
void set_is_right_hand_visible(bool value) { is_right_hand_visible = value; }
|
||||
|
||||
float get_framerate() { return framerate; }
|
||||
void set_framerate(float value) { return; }
|
||||
|
@ -46,8 +46,8 @@ protected:
|
|||
static void _bind_methods();
|
||||
|
||||
private:
|
||||
Ref<UltraleapHand> left_hand_ref = Ref<UltraleapHand>(memnew(UltraleapHand));
|
||||
Ref<UltraleapHand> right_hand_ref = Ref<UltraleapHand>(memnew(UltraleapHand));
|
||||
Ref<UltraleapHand> left_hand_ref;
|
||||
Ref<UltraleapHand> right_hand_ref;
|
||||
};
|
||||
|
||||
#endif
|
16
src/hand.cpp
16
src/hand.cpp
|
@ -223,7 +223,23 @@ void UltraleapHand::_bind_methods() {
|
|||
);
|
||||
};
|
||||
|
||||
void UltraleapHand::set_digits(Array digits) {
|
||||
for (int i = 0; i < digits.size(); i++) {
|
||||
}
|
||||
}
|
||||
|
||||
void UltraleapHand::fill_hand_data(Ref<UltraleapHand> ul_hand, LEAP_HAND* hand) {
|
||||
// For now we just check if the arm ref is not set
|
||||
if (ul_hand->arm_ref == NULL) {
|
||||
ul_hand->arm_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
|
||||
ul_hand->palm_ref = Ref<UltraleapPalm>(memnew(UltraleapPalm));
|
||||
ul_hand->thumb = Ref<UltraleapDigit>(memnew(UltraleapDigit));
|
||||
ul_hand->index = Ref<UltraleapDigit>(memnew(UltraleapDigit));
|
||||
ul_hand->middle = Ref<UltraleapDigit>(memnew(UltraleapDigit));
|
||||
ul_hand->ring = Ref<UltraleapDigit>(memnew(UltraleapDigit));
|
||||
ul_hand->pinky = Ref<UltraleapDigit>(memnew(UltraleapDigit));
|
||||
}
|
||||
|
||||
ul_hand->type = hand->type == eLeapHandType_Left ? UltraleapTypes::Chirality::Left : UltraleapTypes::Chirality::Right;
|
||||
ul_hand->confidence = hand->confidence;
|
||||
ul_hand->visible_time = hand->visible_time;
|
||||
|
|
52
src/hand.h
52
src/hand.h
|
@ -60,54 +60,54 @@ public:
|
|||
UltraleapTypes::Chirality get_type() { return type; }
|
||||
void set_type(UltraleapTypes::Chirality value) { type = value; }
|
||||
|
||||
Ref<UltraleapDigit> get_thumb() { return digits_ref[0]; }
|
||||
void set_thumb(Ref<UltraleapDigit> value) { digits_ref[0] = value; }
|
||||
Ref<UltraleapDigit> get_thumb() { return thumb; }
|
||||
void set_thumb(Ref<UltraleapDigit> value) { thumb = value; }
|
||||
|
||||
Ref<UltraleapDigit> get_index() { return digits_ref[1]; }
|
||||
void set_index(Ref<UltraleapDigit> value) { digits_ref[1] = value; }
|
||||
Ref<UltraleapDigit> get_index() { return index; }
|
||||
void set_index(Ref<UltraleapDigit> value) { index = value; }
|
||||
|
||||
Ref<UltraleapDigit> get_middle() { return digits_ref[2]; }
|
||||
void set_middle(Ref<UltraleapDigit> value) { digits_ref[2] = value; }
|
||||
Ref<UltraleapDigit> get_middle() { return middle; }
|
||||
void set_middle(Ref<UltraleapDigit> value) { middle = value; }
|
||||
|
||||
Ref<UltraleapDigit> get_ring() { return digits_ref[3]; }
|
||||
void set_ring(Ref<UltraleapDigit> value) { digits_ref[3] = value; }
|
||||
Ref<UltraleapDigit> get_ring() { return ring; }
|
||||
void set_ring(Ref<UltraleapDigit> value) { ring = value; }
|
||||
|
||||
Ref<UltraleapDigit> get_pinky() { return digits_ref[4]; }
|
||||
void set_pinky(Ref<UltraleapDigit> value) { digits_ref[4] = value; }
|
||||
Ref<UltraleapDigit> get_pinky() { return pinky; }
|
||||
void set_pinky(Ref<UltraleapDigit> value) { pinky = value; }
|
||||
|
||||
Ref<UltraleapBone> get_arm() { return arm_ref; }
|
||||
void set_arm(Ref<UltraleapBone> value) { arm_ref = value; }
|
||||
void set_arm(Ref<UltraleapBone> value) { arm_ref = value; }
|
||||
|
||||
Ref<UltraleapPalm> get_palm() { return palm_ref; }
|
||||
void set_palm(Ref<UltraleapPalm> value) { palm_ref = value; }
|
||||
|
||||
Array get_digits() {
|
||||
Array digits_array = Array();
|
||||
if (digits_array.size() == 0) {
|
||||
digits_array.append(digits_ref[0]);
|
||||
digits_array.append(digits_ref[1]);
|
||||
digits_array.append(digits_ref[2]);
|
||||
digits_array.append(digits_ref[3]);
|
||||
digits_array.append(digits_ref[4]);
|
||||
digits_array.append(thumb);
|
||||
digits_array.append(index);
|
||||
digits_array.append(middle);
|
||||
digits_array.append(ring);
|
||||
digits_array.append(pinky);
|
||||
}
|
||||
return digits_array;
|
||||
}
|
||||
void set_digits(Array digits) { digits_array = digits; }
|
||||
void set_digits(Array digits);
|
||||
|
||||
static void fill_hand_data(Ref<UltraleapHand> ul_hand, LEAP_HAND* hand);
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
private:
|
||||
Ref<UltraleapBone> arm_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
|
||||
Ref<UltraleapPalm> palm_ref = Ref<UltraleapPalm>(memnew(UltraleapPalm));
|
||||
Ref<UltraleapBone> arm_ref;
|
||||
Ref<UltraleapPalm> palm_ref;
|
||||
Array digits_array = Array();
|
||||
Ref<UltraleapDigit> digits_ref[5] = {
|
||||
Ref<UltraleapDigit>(digits[0]),
|
||||
Ref<UltraleapDigit>(digits[1]),
|
||||
Ref<UltraleapDigit>(digits[2]),
|
||||
Ref<UltraleapDigit>(digits[3]),
|
||||
Ref<UltraleapDigit>(digits[4])
|
||||
};
|
||||
|
||||
Ref<UltraleapDigit> thumb;
|
||||
Ref<UltraleapDigit> index;
|
||||
Ref<UltraleapDigit> middle;
|
||||
Ref<UltraleapDigit> ring;
|
||||
Ref<UltraleapDigit> pinky;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue